From 16acd25053a79fa5d23fda48ed0444a069ccdd22 Mon Sep 17 00:00:00 2001 From: Greg Sjaardema Date: Thu, 3 Nov 2022 09:42:25 -0600 Subject: SEACAS: further refactor (#33673) * SEACAS: Update package.py to handle new SEACAS project name The base project name for the SEACAS project has changed from "SEACASProj" to "SEACAS" as of @2022-10-14, so the package needed to be updated to use the new project name when needed. The refactor also changes several: "-DSome_CMAKE_Option:BOOL=ON" to define("Some_CMAKE_Option", True) * SEACAS: Additional refactorings * Replaced all cmake "-Dsomething=other" lines with either `define` or `define_from_variant` functions. Consolidated the application (fortran, legacy, all) enabling lines into loops over the code names. Easier to see categorization of applications and also to add/move/remove an application Reordered some lines; general cleanup and restructuring. * Address flake8 issues * Remove trailing whitespace * Reformat using black --- var/spack/repos/builtin/packages/seacas/package.py | 214 +++++++++------------ 1 file changed, 92 insertions(+), 122 deletions(-) diff --git a/var/spack/repos/builtin/packages/seacas/package.py b/var/spack/repos/builtin/packages/seacas/package.py index 9295150148..a94130893c 100644 --- a/var/spack/repos/builtin/packages/seacas/package.py +++ b/var/spack/repos/builtin/packages/seacas/package.py @@ -129,24 +129,31 @@ class Seacas(CMakePackage): variant("x11", default=True, description="Compile with X11") # ###################### Dependencies ########################## + depends_on("cmake@3.17:", type="build") + depends_on("mpi", when="+mpi") + + # Always depends on netcdf-c depends_on("netcdf-c@4.8.0:+mpi+parallel-netcdf", when="+mpi") depends_on("netcdf-c@4.8.0:~mpi", when="~mpi") depends_on("hdf5+hl~mpi", when="~mpi") - depends_on("cgns@4.2.0:+mpi+scoping", when="+cgns +mpi") - depends_on("cgns@4.2.0:~mpi+scoping", when="+cgns ~mpi") + depends_on("fmt@8.1.0:", when="@2022-03-04:2022-05-16") depends_on("fmt@9.1.0:", when="@2022-10-14") + depends_on("matio", when="+matio") + depends_on("libx11", when="+x11") + + with when("+cgns"): + depends_on("cgns@4.2.0:+mpi+scoping", when="+mpi") + depends_on("cgns@4.2.0:~mpi+scoping", when="~mpi") with when("+adios2"): depends_on("adios2@master") depends_on("adios2~mpi", when="~mpi") depends_on("adios2+mpi", when="+mpi") - depends_on("matio", when="+matio") with when("+metis"): depends_on("metis+int64+real64") depends_on("parmetis+int64", when="+mpi") - depends_on("libx11", when="+x11") # The Faodel TPL is only supported in seacas@2021-04-05: depends_on("faodel@1.2108.1:+mpi", when="+faodel +mpi") @@ -157,11 +164,6 @@ class Seacas(CMakePackage): msg="The Faodel TPL is only compatible with @2021-04-05 and later.", ) - # MPI related dependencies - depends_on("mpi", when="+mpi") - - depends_on("cmake@3.1:", type="build") - def setup_run_environment(self, env): env.prepend_path("PYTHONPATH", self.prefix.lib) @@ -181,41 +183,30 @@ class Seacas(CMakePackage): options.extend( [ + define(project_name_base + "_ENABLE_TESTS", True), + define(project_name_base + "_ENABLE_CXX11", True), + define(project_name_base + "_ENABLE_Kokkos", False), + define(project_name_base + "_HIDE_DEPRECATED_CODE", False), from_variant("CMAKE_INSTALL_RPATH_USE_LINK_PATH", "shared"), from_variant("BUILD_SHARED_LIBS", "shared"), from_variant("SEACASExodus_ENABLE_THREADSAFE", "thread_safe"), from_variant("SEACASIoss_ENABLE_THREADSAFE", "thread_safe"), from_variant("TPL_ENABLE_X11", "x11"), + from_variant(project_name_base + "_ENABLE_Fortran", "fortran"), ] ) + options.append(from_variant("TPL_ENABLE_MPI", "mpi")) if "+mpi" in spec: options.extend( [ - "-DCMAKE_C_COMPILER=%s" % spec["mpi"].mpicc, - "-DCMAKE_CXX_COMPILER=%s" % spec["mpi"].mpicxx, - "-DCMAKE_Fortran_COMPILER=%s" % spec["mpi"].mpifc, - define("TPL_ENABLE_MPI", True), - "-DMPI_BASE_DIR:PATH=%s" % spec["mpi"].prefix, - ] - ) - else: - options.extend( - [ - define("TPL_ENABLE_MPI", False), + define("CMAKE_C_COMPILER", spec["mpi"].mpicc), + define("CMAKE_CXX_COMPILER", spec["mpi"].mpicxx), + define("CMAKE_Fortran_COMPILER", spec["mpi"].mpifc), + define("MPI_BASE_DIR", spec["mpi"].prefix), ] ) - options.extend( - [ - define(project_name_base + "_ENABLE_TESTS", True), - define(project_name_base + "_ENABLE_CXX11", True), - define(project_name_base + "_ENABLE_Kokkos", False), - define(project_name_base + "_HIDE_DEPRECATED_CODE", False), - from_variant(project_name_base + "_ENABLE_Fortran", "fortran"), - ] - ) - # ########## What applications should be built ############# # Check whether they want everything; if so, do the easy way... if "+applications" in spec and "+legacy" in spec: @@ -242,56 +233,62 @@ class Seacas(CMakePackage): ) if "+applications" in spec: - options.extend( - [ - define(project_name_base + "_ENABLE_SEACASAprepro", True), - define(project_name_base + "_ENABLE_SEACASAprepro_lib", True), - define(project_name_base + "_ENABLE_SEACASConjoin", True), - define(project_name_base + "_ENABLE_SEACASCpup", True), - define(project_name_base + "_ENABLE_SEACASEjoin", True), - define(project_name_base + "_ENABLE_SEACASEpu", True), - define(project_name_base + "_ENABLE_SEACASExo2mat", True), - define(project_name_base + "_ENABLE_SEACASExo_format", True), - define(project_name_base + "_ENABLE_SEACASExodiff", True), - from_variant(project_name_base + "_ENABLE_SEACASExplore", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASGrepos", "fortran"), - define(project_name_base + "_ENABLE_SEACASMat2exo", True), - define(project_name_base + "_ENABLE_SEACASNas2exo", True), - define(project_name_base + "_ENABLE_SEACASNemslice", True), - define(project_name_base + "_ENABLE_SEACASNemspread", True), - define(project_name_base + "_ENABLE_SEACASSlice", True), - define(project_name_base + "_ENABLE_SEACASZellij", True), - ] - ) + # C / C++ applications + for app in ( + "Aprepro", + "Aprepro_lib", + "Conjoin", + "Cpup", + "Ejoin", + "Epu", + "Exo2mat", + "Exo_format", + "Exodiff", + "Mat2exo", + "Nas2exo", + "Nemslice", + "Nemspread", + "Slice", + "Zellij", + ): + options.append(define(project_name_base + "_ENABLE_SEACAS" + app, True)) + # Fortran-based applications + for app in ("Explore", "Grepos"): + options.append( + from_variant(project_name_base + "_ENABLE_SEACAS" + app, "fortran") + ) if "+legacy" in spec: - options.extend( - [ - define(project_name_base + "_ENABLE_SEACASNemesis", True), - from_variant(project_name_base + "_ENABLE_SEACASAlgebra", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASBlot", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASEx1ex2v2", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASEx2ex1v2", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASExomatlab", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASExotec2", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASExotxt", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASFastq", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASGen3D", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASGenshell", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASGjoin", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASMapvar", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASMapvar-kd", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASNumbers", "fortran"), - from_variant(project_name_base + "_ENABLE_SEACASTxtexo", "fortran"), - ] - ) + # Legacy applications -- all are fortran-based except Nemesis + options.append(define(project_name_base + "_ENABLE_SEACASNemesis", True)) + + for app in ( + "Algebra", + "Blot", + "Ex1ex2v2", + "Ex2ex1v2", + "Exomatlab", + "Exotec2", + "Exotxt", + "Fastq", + "Gen3D", + "Genshell", + "Gjoin", + "Mapvar", + "Mapvar-kd", + "Numbers", + "Txtexo", + ): + options.append( + from_variant(project_name_base + "_ENABLE_SEACAS" + app, "fortran") + ) # ##################### Dependencies ########################## # Always need NetCDF-C options.extend( [ define("TPL_ENABLE_Netcdf", True), - "-DNetCDF_ROOT:PATH=%s" % spec["netcdf-c"].prefix, + define("NetCDF_ROOT", spec["netcdf-c"].prefix), ] ) @@ -299,24 +296,28 @@ class Seacas(CMakePackage): options.extend( [ define("TPL_ENABLE_METIS", True), - "-DMETIS_LIBRARY_DIRS=%s" % spec["metis"].prefix.lib, - "-DMETIS_LIBRARY_NAMES=metis", - "-DTPL_METIS_INCLUDE_DIRS=%s" % spec["metis"].prefix.include, + define("METIS_LIBRARY_DIRS", spec["metis"].prefix.lib), + define("METIS_LIBRARY_NAMES", "metis"), + define("TPL_METIS_INCLUDE_DIRS", spec["metis"].prefix.include), define("TPL_ENABLE_ParMETIS", True), - "-DParMETIS_LIBRARY_DIRS=%s;%s" - % (spec["parmetis"].prefix.lib, spec["metis"].prefix.lib), - "-DParMETIS_LIBRARY_NAMES=parmetis;metis", - "-DTPL_ParMETIS_INCLUDE_DIRS=%s;%s" - % (spec["parmetis"].prefix.include, spec["metis"].prefix.include), + define( + "ParMETIS_LIBRARY_DIRS", + [spec["parmetis"].prefix.lib, spec["metis"].prefix.lib], + ), + define("ParMETIS_LIBRARY_NAMES", ["parmetis", "metis"]), + define( + "TPL_ParMETIS_INCLUDE_DIRS", + [spec["parmetis"].prefix.include, spec["metis"].prefix.include], + ), ] ) elif "+metis" in spec: options.extend( [ define("TPL_ENABLE_METIS", True), - "-DMETIS_LIBRARY_DIRS=%s" % spec["metis"].prefix.lib, - "-DMETIS_LIBRARY_NAMES=metis", - "-DTPL_METIS_INCLUDE_DIRS=%s" % spec["metis"].prefix.include, + define("METIS_LIBRARY_DIRS", spec["metis"].prefix.lib), + define("METIS_LIBRARY_NAMES", "metis"), + define("TPL_METIS_INCLUDE_DIRS", spec["metis"].prefix.include), define("TPL_ENABLE_ParMETIS", False), ] ) @@ -328,59 +329,28 @@ class Seacas(CMakePackage): ] ) + options.append(from_variant("TPL_ENABLE_Matio", "matio")) if "+matio" in spec: - options.extend( - [ - define("TPL_ENABLE_Matio", True), - "-DMatio_ROOT:PATH=%s" % spec["matio"].prefix, - ] - ) - else: - options.extend( - [ - define("TPL_ENABLE_Matio", False), - ] - ) + options.append(define("Matio_ROOT", spec["matio"].prefix)) + options.append(from_variant("TPL_ENABLE_CGNS", "cgns")) if "+cgns" in spec: - options.extend( - [ - define("TPL_ENABLE_CGNS", True), - "-DCGNS_ROOT:PATH=%s" % spec["cgns"].prefix, - ] - ) - else: - options.extend( - [ - define("TPL_ENABLE_CGNS", False), - ] - ) + options.append(define("CGNS_ROOT", spec["cgns"].prefix)) options.append(from_variant("TPL_ENABLE_Faodel", "faodel")) - for pkg in ("Faodel", "BOOST"): if pkg.lower() in spec: options.append(define(pkg + "_ROOT", spec[pkg.lower()].prefix)) + options.append(from_variant("TPL_ENABLE_ADIOS2", "adios2")) if "+adios2" in spec: - options.extend( - [ - define("TPL_ENABLE_ADIOS2", True), - "-DADIOS2_ROOT:PATH=%s" % spec["adios2"].prefix, - ] - ) - else: - options.extend( - [ - define("TPL_ENABLE_ADIOS2", False), - ] - ) + options.append(define("ADIOS2_ROOT", spec["adios2"].prefix)) # ################# RPath Handling ###################### if sys.platform == "darwin" and macos_version() >= Version("10.12"): # use @rpath on Sierra due to limit of dynamic loader - options.append("-DCMAKE_MACOSX_RPATH:BOOL=ON") + options.append(define("CMAKE_MACOSX_RPATH", True)) else: - options.append("-DCMAKE_INSTALL_NAME_DIR:PATH=%s" % self.prefix.lib) + options.append(define("CMAKE_INSTALL_NAME_DIR", self.prefix.lib)) return options -- cgit v1.2.3-70-g09d2