mpifileutils: cmakepackage (#44863)
This commit is contained in:
		| @@ -6,7 +6,7 @@ | |||||||
| from spack.package import * | from spack.package import * | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Mpifileutils(Package): | class Mpifileutils(CMakePackage): | ||||||
|     """mpiFileUtils is a suite of MPI-based tools to manage large datasets, |     """mpiFileUtils is a suite of MPI-based tools to manage large datasets, | ||||||
|     which may vary from large directory trees to large files. |     which may vary from large directory trees to large files. | ||||||
|     High-performance computing users often generate large datasets with |     High-performance computing users often generate large datasets with | ||||||
| @@ -32,17 +32,21 @@ class Mpifileutils(Package): | |||||||
|     version("0.9.1", sha256="15a22450f86b15e7dc4730950b880fda3ef6f59ac82af0b268674d272aa61c69") |     version("0.9.1", sha256="15a22450f86b15e7dc4730950b880fda3ef6f59ac82af0b268674d272aa61c69") | ||||||
|     version("0.9", sha256="1b8250af01aae91c985ca5d61521bfaa4564e46efa15cee65cd0f82cf5a2bcfb") |     version("0.9", sha256="1b8250af01aae91c985ca5d61521bfaa4564e46efa15cee65cd0f82cf5a2bcfb") | ||||||
| 
 | 
 | ||||||
|  |     variant("xattr", default=True, description="Enable code for extended attributes") | ||||||
|  |     variant("lustre", default=False, description="Enable optimizations and features for Lustre") | ||||||
|  |     variant("gpfs", default=False, description="Enable optimizations and features for GPFS") | ||||||
|  |     variant("experimental", default=False, description="Install experimental tools") | ||||||
|  |     variant("daos", default=False, description="Enable DAOS support", when="@0.11:") | ||||||
|  | 
 | ||||||
|     patch("nosys_getdents.patch", when="@:0.10.1 target=aarch64:") |     patch("nosys_getdents.patch", when="@:0.10.1 target=aarch64:") | ||||||
| 
 | 
 | ||||||
|     conflicts("platform=darwin") |     conflicts("platform=darwin") | ||||||
| 
 | 
 | ||||||
|     depends_on("mpi") |     depends_on("mpi") | ||||||
|     depends_on("libcircle@0.3:") |     depends_on("libcircle") | ||||||
| 
 | 
 | ||||||
|     # need precise version of dtcmp, since DTCMP_Segmented_exscan added |     # DTCMP_Segmented_exscan renamed in v1.1.0 | ||||||
|     # in v1.0.3 but renamed in v1.1.0 and later |     depends_on("dtcmp@1.1.0:") | ||||||
|     depends_on("dtcmp@1.0.3", when="@:0.7") |  | ||||||
|     depends_on("dtcmp@1.1.0:", when="@0.8:") |  | ||||||
| 
 | 
 | ||||||
|     # fixes were added to libarchive somewhere between 3.1.2 and 3.5.0 |     # fixes were added to libarchive somewhere between 3.1.2 and 3.5.0 | ||||||
|     # which helps with file names that start with "._", bumping to newer |     # which helps with file names that start with "._", bumping to newer | ||||||
| @@ -51,28 +55,11 @@ class Mpifileutils(Package): | |||||||
|     depends_on("libarchive@3.5.1:", when="@0.11:") |     depends_on("libarchive@3.5.1:", when="@0.11:") | ||||||
| 
 | 
 | ||||||
|     depends_on("attr", when="@0.11.1:+xattr") |     depends_on("attr", when="@0.11.1:+xattr") | ||||||
| 
 |  | ||||||
|     depends_on("daos", when="+daos") |     depends_on("daos", when="+daos") | ||||||
| 
 |  | ||||||
|     depends_on("bzip2") |     depends_on("bzip2") | ||||||
| 
 |  | ||||||
|     depends_on("libcap") |     depends_on("libcap") | ||||||
| 
 |  | ||||||
|     depends_on("openssl") |     depends_on("openssl") | ||||||
| 
 |     depends_on("cmake@3.1:", type="build") | ||||||
|     depends_on("cmake@3.1:", when="@0.9:", type="build") |  | ||||||
| 
 |  | ||||||
|     variant("xattr", default=True, description="Enable code for extended attributes") |  | ||||||
| 
 |  | ||||||
|     variant("lustre", default=False, description="Enable optimizations and features for Lustre") |  | ||||||
| 
 |  | ||||||
|     variant("gpfs", default=False, description="Enable optimizations and features for GPFS") |  | ||||||
|     conflicts("+gpfs", when="@:0.8.1") |  | ||||||
| 
 |  | ||||||
|     variant("experimental", default=False, description="Install experimental tools") |  | ||||||
|     conflicts("+experimental", when="@:0.6") |  | ||||||
| 
 |  | ||||||
|     variant("daos", default=False, description="Enable DAOS support", when="@0.11:") |  | ||||||
| 
 | 
 | ||||||
|     def flag_handler(self, name, flags): |     def flag_handler(self, name, flags): | ||||||
|         spec = self.spec |         spec = self.spec | ||||||
| @@ -83,92 +70,19 @@ def flag_handler(self, name, flags): | |||||||
|         return (iflags, None, None) |         return (iflags, None, None) | ||||||
| 
 | 
 | ||||||
|     def cmake_args(self): |     def cmake_args(self): | ||||||
|         args = std_cmake_args |         args = [ | ||||||
|         args.append("-DCMAKE_INSTALL_PREFIX=%s" % self.spec.prefix) |             self.define("WITH_DTCMP_PREFIX", self.spec["dtcmp"].prefix), | ||||||
|         args.append("-DWITH_DTCMP_PREFIX=%s" % self.spec["dtcmp"].prefix) |             self.define("WITH_LibCircle_PREFIX", self.spec["libcircle"].prefix), | ||||||
|         args.append("-DWITH_LibCircle_PREFIX=%s" % self.spec["libcircle"].prefix) |             self.define_from_variant("ENABLE_XATTRS", "xattr"), | ||||||
| 
 |             self.define_from_variant("ENABLE_LUSTRE", "lustre"), | ||||||
|         if self.spec.satisfies("+xattr"): |             self.define_from_variant("ENABLE_GPFS", "gpfs"), | ||||||
|             args.append("-DENABLE_XATTRS=ON") |             self.define_from_variant("ENABLE_EXPERIMENTAL", "experimental"), | ||||||
|         else: |         ] | ||||||
|             args.append("-DENABLE_XATTRS=OFF") |  | ||||||
| 
 |  | ||||||
|         if self.spec.satisfies("+lustre"): |  | ||||||
|             args.append("-DENABLE_LUSTRE=ON") |  | ||||||
|         else: |  | ||||||
|             args.append("-DENABLE_LUSTRE=OFF") |  | ||||||
| 
 |  | ||||||
|         if self.spec.satisfies("+gpfs"): |  | ||||||
|             args.append("-DENABLE_GPFS=ON") |  | ||||||
|         else: |  | ||||||
|             args.append("-DENABLE_GPFS=OFF") |  | ||||||
| 
 |  | ||||||
|         if self.spec.satisfies("+experimental"): |  | ||||||
|             args.append("-DENABLE_EXPERIMENTAL=ON") |  | ||||||
|         else: |  | ||||||
|             args.append("-DENABLE_EXPERIMENTAL=OFF") |  | ||||||
| 
 | 
 | ||||||
|         if self.spec.satisfies("+daos"): |         if self.spec.satisfies("+daos"): | ||||||
|             args.append("-DENABLE_DAOS=ON") |             args.append(self.define("ENABLE_DAOS", True)) | ||||||
|             args.append("-DWITH_DAOS_PREFIX=%s" % self.spec["daos"].prefix) |             args.append(self.define("WITH_DAOS_PREFIX", self.spec["daos"].prefix)) | ||||||
|         else: |         else: | ||||||
|             args.append("-DENABLE_DAOS=OFF") |             args.append(self.define("ENABLE_DAOS", False)) | ||||||
| 
 | 
 | ||||||
|         return args |         return args | ||||||
| 
 |  | ||||||
|     @when("@0.9:") |  | ||||||
|     def install(self, spec, prefix): |  | ||||||
|         args = self.cmake_args() |  | ||||||
| 
 |  | ||||||
|         source_directory = self.stage.source_path |  | ||||||
|         build_directory = join_path(source_directory, "build") |  | ||||||
| 
 |  | ||||||
|         with working_dir(build_directory, create=True): |  | ||||||
|             cmake(source_directory, *args) |  | ||||||
|             make() |  | ||||||
|             make("install") |  | ||||||
| 
 |  | ||||||
|         if self.run_tests: |  | ||||||
|             make("test") |  | ||||||
| 
 |  | ||||||
|     def configure_args(self): |  | ||||||
|         args = [] |  | ||||||
|         args.append("--prefix=%s" % self.spec.prefix) |  | ||||||
|         args.append("CPPFLAGS=-I%s/src/common" % pwd()) |  | ||||||
|         args.append("libarchive_CFLAGS=-I%s" % self.spec["libarchive"].prefix.include) |  | ||||||
|         args.append( |  | ||||||
|             "libarchive_LIBS=%s %s" |  | ||||||
|             % (self.spec["libarchive"].libs.search_flags, self.spec["libarchive"].libs.link_flags) |  | ||||||
|         ) |  | ||||||
|         args.append("libcircle_CFLAGS=-I%s" % self.spec["libcircle"].prefix.include) |  | ||||||
|         args.append( |  | ||||||
|             "libcircle_LIBS=%s %s" |  | ||||||
|             % (self.spec["libcircle"].libs.search_flags, self.spec["libcircle"].libs.link_flags) |  | ||||||
|         ) |  | ||||||
|         args.append("--with-dtcmp=%s" % self.spec["dtcmp"].prefix) |  | ||||||
| 
 |  | ||||||
|         if self.spec.satisfies("+xattr"): |  | ||||||
|             args.append("CFLAGS=-DDCOPY_USE_XATTRS") |  | ||||||
| 
 |  | ||||||
|         if self.spec.satisfies("+lustre"): |  | ||||||
|             args.append("--enable-lustre") |  | ||||||
|         else: |  | ||||||
|             args.append("--disable-lustre") |  | ||||||
| 
 |  | ||||||
|         if self.spec.satisfies("@0.7:"): |  | ||||||
|             if self.spec.satisfies("+experimental"): |  | ||||||
|                 args.append("--enable-experimental") |  | ||||||
|             else: |  | ||||||
|                 args.append("--disable-experimental") |  | ||||||
|         return args |  | ||||||
| 
 |  | ||||||
|     @when("@:0.8.1") |  | ||||||
|     def install(self, spec, prefix): |  | ||||||
|         args = self.configure_args() |  | ||||||
| 
 |  | ||||||
|         configure(*args) |  | ||||||
|         make() |  | ||||||
|         make("install") |  | ||||||
| 
 |  | ||||||
|         if self.run_tests: |  | ||||||
|             make("test") |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Harmen Stoppels
					Harmen Stoppels