diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/parallel-netcdf/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/parallel-netcdf/package.py | 211 |
1 files changed, 109 insertions, 102 deletions
diff --git a/var/spack/repos/builtin/packages/parallel-netcdf/package.py b/var/spack/repos/builtin/packages/parallel-netcdf/package.py index 517f994f6b..965e6a365e 100644 --- a/var/spack/repos/builtin/packages/parallel-netcdf/package.py +++ b/var/spack/repos/builtin/packages/parallel-netcdf/package.py @@ -15,56 +15,55 @@ class ParallelNetcdf(AutotoolsPackage): """ homepage = "https://parallel-netcdf.github.io/" - git = "https://github.com/Parallel-NetCDF/PnetCDF" - url = "https://parallel-netcdf.github.io/Release/pnetcdf-1.11.0.tar.gz" + git = "https://github.com/Parallel-NetCDF/PnetCDF" + url = "https://parallel-netcdf.github.io/Release/pnetcdf-1.11.0.tar.gz" list_url = "https://parallel-netcdf.github.io/wiki/Download.html" - maintainers = ['skosukhin'] + maintainers = ["skosukhin"] - tags = ['e4s'] + tags = ["e4s"] test_requires_compiler = True def url_for_version(self, version): - if version >= Version('1.11.0'): + if version >= Version("1.11.0"): url = "https://parallel-netcdf.github.io/Release/pnetcdf-{0}.tar.gz" else: url = "https://parallel-netcdf.github.io/Release/parallel-netcdf-{0}.tar.gz" return url.format(version.dotted) - version('master', branch='master') - version('1.12.2', sha256='3ef1411875b07955f519a5b03278c31e566976357ddfc74c2493a1076e7d7c74') - version('1.12.1', sha256='56f5afaa0ddc256791c405719b6436a83b92dcd5be37fe860dea103aee8250a2') - version('1.11.2', sha256='d2c18601b364c35b5acb0a0b46cd6e14cae456e0eb854e5c789cf65f3cd6a2a7') - version('1.11.1', sha256='0c587b707835255126a23c104c66c9614be174843b85b897b3772a590be45779') - version('1.11.0', sha256='a18a1a43e6c4fd7ef5827dbe90e9dcf1363b758f513af1f1356ed6c651195a9f') - version('1.10.0', sha256='ed189228b933cfeac3b7b4f8944eb00e4ff2b72cf143365b1a77890980663a09') - version('1.9.0', sha256='356e1e1fae14bc6c4236ec11435cfea0ff6bde2591531a4a329f9508a01fbe98') - version('1.8.1', sha256='8d7d4c9c7b39bb1cbbcf087e0d726551c50f0cc30d44aed3df63daf3772c9043') - version('1.8.0', sha256='ac00bb2333bee96354de9d9c32d3dfdaa919d878098762f146996578b7f0ede9') - version('1.7.0', sha256='52f0d106c470a843c6176318141f74a21e6ece3f70ee8fe261c6b93e35f70a94') - version('1.6.1', sha256='8cf1af7b640475e3cc931e5fbcfe52484c5055f2fab526691933c02eda388aae') - - variant('cxx', default=True, description='Build the C++ Interface') - variant('fortran', default=True, description='Build the Fortran Interface') - variant('pic', default=True, - description='Produce position-independent code (for shared libs)') - variant('shared', default=True, description='Enable shared library') - variant('burstbuffer', default=False, description='Enable burst buffer feature') - - depends_on('mpi') - - depends_on('m4', type='build') - depends_on('autoconf', when='@master', type='build') - depends_on('automake', when='@master', type='build') - depends_on('libtool', when='@master', type='build') - - depends_on('perl', type='build') + version("master", branch="master") + version("1.12.2", sha256="3ef1411875b07955f519a5b03278c31e566976357ddfc74c2493a1076e7d7c74") + version("1.12.1", sha256="56f5afaa0ddc256791c405719b6436a83b92dcd5be37fe860dea103aee8250a2") + version("1.11.2", sha256="d2c18601b364c35b5acb0a0b46cd6e14cae456e0eb854e5c789cf65f3cd6a2a7") + version("1.11.1", sha256="0c587b707835255126a23c104c66c9614be174843b85b897b3772a590be45779") + version("1.11.0", sha256="a18a1a43e6c4fd7ef5827dbe90e9dcf1363b758f513af1f1356ed6c651195a9f") + version("1.10.0", sha256="ed189228b933cfeac3b7b4f8944eb00e4ff2b72cf143365b1a77890980663a09") + version("1.9.0", sha256="356e1e1fae14bc6c4236ec11435cfea0ff6bde2591531a4a329f9508a01fbe98") + version("1.8.1", sha256="8d7d4c9c7b39bb1cbbcf087e0d726551c50f0cc30d44aed3df63daf3772c9043") + version("1.8.0", sha256="ac00bb2333bee96354de9d9c32d3dfdaa919d878098762f146996578b7f0ede9") + version("1.7.0", sha256="52f0d106c470a843c6176318141f74a21e6ece3f70ee8fe261c6b93e35f70a94") + version("1.6.1", sha256="8cf1af7b640475e3cc931e5fbcfe52484c5055f2fab526691933c02eda388aae") + + variant("cxx", default=True, description="Build the C++ Interface") + variant("fortran", default=True, description="Build the Fortran Interface") + variant("pic", default=True, description="Produce position-independent code (for shared libs)") + variant("shared", default=True, description="Enable shared library") + variant("burstbuffer", default=False, description="Enable burst buffer feature") + + depends_on("mpi") + + depends_on("m4", type="build") + depends_on("autoconf", when="@master", type="build") + depends_on("automake", when="@master", type="build") + depends_on("libtool", when="@master", type="build") + + depends_on("perl", type="build") # Suport for shared libraries was introduced in version 1.9.0 - conflicts('+shared', when='@:1.8') - conflicts('+burstbuffer', when='@:1.10') + conflicts("+shared", when="@:1.8") + conflicts("+burstbuffer", when="@:1.10") # Before 1.10.0, C utility programs (e.g. ncmpigen) were linked without # explicit specification of the Fortran runtime libraries, which is @@ -77,10 +76,10 @@ class ParallelNetcdf(AutotoolsPackage): # detected using macro AC_FC_LIBRARY_LDFLAGS, which means that we can # override the verbose output flag for Fortran compiler on the command line # (see below). - conflicts('+shared', when='@:1.9%nag+fortran') + conflicts("+shared", when="@:1.9%nag+fortran") # https://github.com/Parallel-NetCDF/PnetCDF/pull/59 - patch('nag_libtool.patch', when='@1.9:1.12.1%nag') + patch("nag_libtool.patch", when="@1.9:1.12.1%nag") # We could apply the patch unconditionally. However, it fixes a problem # that manifests itself only when we build shared libraries with Spack on @@ -91,122 +90,130 @@ class ParallelNetcdf(AutotoolsPackage): # '--whole-archive' argument. Unluckily, Cray's wrapper "understands" only # one of them but Libtool switches to another one. The following patch # discards the switching. - patch('cray_pgi_libtool_release.patch', - when='@1.8:999%pgi+shared platform=cray') + patch("cray_pgi_libtool_release.patch", when="@1.8:999%pgi+shared platform=cray") # Given that the bug manifests itself in rather specific conditions, it is # not reported upstream. - patch('cray_pgi_libtool_master.patch', - when='@master%pgi+shared platform=cray') + patch("cray_pgi_libtool_master.patch", when="@master%pgi+shared platform=cray") @property def libs(self): - libraries = ['libpnetcdf'] + libraries = ["libpnetcdf"] query_parameters = self.spec.last_query.extra_parameters - if 'shared' in query_parameters: + if "shared" in query_parameters: shared = True - elif 'static' in query_parameters: + elif "static" in query_parameters: shared = False else: - shared = '+shared' in self.spec + shared = "+shared" in self.spec - libs = find_libraries( - libraries, root=self.prefix, shared=shared, recursive=True - ) + libs = find_libraries(libraries, root=self.prefix, shared=shared, recursive=True) if libs: return libs - msg = 'Unable to recursively locate {0} {1} libraries in {2}' + msg = "Unable to recursively locate {0} {1} libraries in {2}" raise spack.error.NoLibrariesError( - msg.format('shared' if shared else 'static', - self.spec.name, - self.spec.prefix)) + msg.format("shared" if shared else "static", self.spec.name, self.spec.prefix) + ) - @when('@master') + @when("@master") def autoreconf(self, spec, prefix): with working_dir(self.configure_directory): # We do not specify '-f' because we need to use libtool files from # the repository. - autoreconf('-iv') + autoreconf("-iv") def configure_args(self): - args = ['--with-mpi=%s' % self.spec['mpi'].prefix, - 'SEQ_CC=%s' % spack_cc] + args = ["--with-mpi=%s" % self.spec["mpi"].prefix, "SEQ_CC=%s" % spack_cc] - args += self.enable_or_disable('cxx') - args += self.enable_or_disable('fortran') + args += self.enable_or_disable("cxx") + args += self.enable_or_disable("fortran") flags = { - 'CFLAGS': [], - 'CXXFLAGS': [], - 'FFLAGS': [], - 'FCFLAGS': [], + "CFLAGS": [], + "CXXFLAGS": [], + "FFLAGS": [], + "FCFLAGS": [], } - if '+pic' in self.spec: - flags['CFLAGS'].append(self.compiler.cc_pic_flag) - flags['CXXFLAGS'].append(self.compiler.cxx_pic_flag) - flags['FFLAGS'].append(self.compiler.f77_pic_flag) - flags['FCFLAGS'].append(self.compiler.fc_pic_flag) + if "+pic" in self.spec: + flags["CFLAGS"].append(self.compiler.cc_pic_flag) + flags["CXXFLAGS"].append(self.compiler.cxx_pic_flag) + flags["FFLAGS"].append(self.compiler.f77_pic_flag) + flags["FCFLAGS"].append(self.compiler.fc_pic_flag) # https://github.com/Parallel-NetCDF/PnetCDF/issues/61 - if self.spec.satisfies('%gcc@10:'): - flags['FFLAGS'].append('-fallow-argument-mismatch') - flags['FCFLAGS'].append('-fallow-argument-mismatch') + if self.spec.satisfies("%gcc@10:"): + flags["FFLAGS"].append("-fallow-argument-mismatch") + flags["FCFLAGS"].append("-fallow-argument-mismatch") for key, value in sorted(flags.items()): if value: - args.append('{0}={1}'.format(key, ' '.join(value))) + args.append("{0}={1}".format(key, " ".join(value))) - if self.version >= Version('1.8'): - args.append('--enable-relax-coord-bound') + if self.version >= Version("1.8"): + args.append("--enable-relax-coord-bound") - if self.version >= Version('1.9'): - args += self.enable_or_disable('shared') - args.extend(['--enable-static', - '--disable-silent-rules']) + if self.version >= Version("1.9"): + args += self.enable_or_disable("shared") + args.extend(["--enable-static", "--disable-silent-rules"]) - if self.spec.satisfies('%nag+fortran+shared'): - args.extend(['ac_cv_prog_fc_v=-Wl,-v', - 'ac_cv_prog_f77_v=-Wl,-v']) + if self.spec.satisfies("%nag+fortran+shared"): + args.extend(["ac_cv_prog_fc_v=-Wl,-v", "ac_cv_prog_f77_v=-Wl,-v"]) - if '+burstbuffer' in self.spec: - args.append('--enable-burst-buffering') + if "+burstbuffer" in self.spec: + args.append("--enable-burst-buffering") return args - examples_src_dir = join_path('examples', 'CXX') + examples_src_dir = join_path("examples", "CXX") - @run_after('install') + @run_after("install") def cache_test_sources(self): """Copy the example source files after the package is installed to an install test subdirectory for use during `spack test run`.""" self.cache_extra_test_sources([self.examples_src_dir]) def test(self): - test_dir = join_path(self.test_suite.current_test_cache_dir, - self.examples_src_dir) + test_dir = join_path(self.test_suite.current_test_cache_dir, self.examples_src_dir) # pnetcdf has many examples to serve as a suitable smoke check. # column_wise was chosen based on the E4S test suite. Other # examples should work as well. - test_exe = 'column_wise' - options = ['{0}.cpp'.format(test_exe), '-o', test_exe, '-lpnetcdf', - '-L{0}'.format(self.prefix.lib), - '-I{0}'.format(self.prefix.include)] - reason = 'test: compiling and linking pnetcdf example' - self.run_test(self.spec['mpi'].mpicxx, options, [], - installed=False, purpose=reason, work_dir=test_dir) - mpiexe_list = [self.spec['mpi'].prefix.bin.srun, - self.spec['mpi'].prefix.bin.mpirun, - self.spec['mpi'].prefix.bin.mpiexec] + test_exe = "column_wise" + options = [ + "{0}.cpp".format(test_exe), + "-o", + test_exe, + "-lpnetcdf", + "-L{0}".format(self.prefix.lib), + "-I{0}".format(self.prefix.include), + ] + reason = "test: compiling and linking pnetcdf example" + self.run_test( + self.spec["mpi"].mpicxx, + options, + [], + installed=False, + purpose=reason, + work_dir=test_dir, + ) + mpiexe_list = [ + self.spec["mpi"].prefix.bin.srun, + self.spec["mpi"].prefix.bin.mpirun, + self.spec["mpi"].prefix.bin.mpiexec, + ] for mpiexe in mpiexe_list: if os.path.isfile(mpiexe): - self.run_test(mpiexe, ['-n', '1', test_exe], [], - installed=False, - purpose='test: pnetcdf smoke test', - skip_missing=True, - work_dir=test_dir) + self.run_test( + mpiexe, + ["-n", "1", test_exe], + [], + installed=False, + purpose="test: pnetcdf smoke test", + skip_missing=True, + work_dir=test_dir, + ) break - self.run_test('rm', ['-f', test_exe], work_dir=test_dir) + self.run_test("rm", ["-f", test_exe], work_dir=test_dir) |