parmmg: add new versions up to 1.5 and new variants (#47387)

* add new versions up to 1.5 and new variants

variant vtk: make vtk optional
variant shared: build shared libs

added patch to fix parmmg cmake so that it can be used by other software with find_package

* use +private for mmg@5.8: and parmmg@1.5:

* fix style and constraint mmg version

* add a condition on patch, use private_headers from mmg PR feelpp/spack#14
This commit is contained in:
Christophe Prud'homme 2025-03-13 17:50:34 +01:00 committed by GitHub
parent 8823c57b72
commit d67afc7191
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 132 additions and 2 deletions

View File

@ -10,23 +10,37 @@ class Parmmg(CMakePackage):
homepage = "https://www.mmgtools.org"
url = "https://github.com/MmgTools/ParMmg/archive/refs/tags/v1.3.0.tar.gz"
git = "https://github.com/MmgTools/ParMmg.git"
maintainers("corentin-dev")
license("LGPL-3.0-or-later")
version("master", branch="master")
version("1.5.0", sha256="0baec7914e49a26bdbb849ab64dcd92147eff79ac02ef3b2599cb05104901a7a")
version("1.4.0", sha256="d8053bce9e1cd66077ad8cb86a5a874f47d0d0d2216e4eee4b98990355a0ea7f")
version("1.3.0", sha256="d43b73a73b62545b5a31bbe25562f69c9e63ad8a6d416bd459781203e37427cf")
version("1.2.0", sha256="99729cc292dcb59c87e3f25d4cabf5a64841e83b624d383e1fd3fb7f960df672")
version("1.1.0", sha256="a5904f1f56b7809ab9ec2f6118b03a082ec2b5564355a73c74fc55426cc69600")
version("1.0.0", sha256="614feb815ff6cdfc9bced30e8105994f0bf3a812243619d3349203ec1851cf6d")
patch(
"parmmg_cmake_patch.diff",
when="@:1.5.0",
sha256="b6002dc32372b7d78ed5b16e0932ab12049d1dbec5f6389403603af450fd818d",
)
variant("vtk", default=False, description="Build with VTK support")
variant("shared", default=True, description="Build shared libraries")
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
depends_on("fortran", type="build") # generated
depends_on("mmg")
depends_on("mmg", when="@:1.4.0")
depends_on("mmg@5.8: +private_headers", when="@1.5.0:")
depends_on("metis")
depends_on("vtk")
depends_on("vtk", when="+vtk")
depends_on("mpi")
variant("pic", default=True, description="Build with position independent code")
@ -34,10 +48,13 @@ class Parmmg(CMakePackage):
def cmake_args(self):
args = [
self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"),
self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
self.define("DOWNLOAD_MMG", False),
self.define("MMG_DIR", self.spec["mmg"].prefix),
self.define("DOWNLOAD_METIS", False),
self.define("METIS_DIR", self.spec["metis"].prefix),
self.define("MMG_INCLUDE_DIRS", self.spec["mmg"].headers.directories),
self.define_from_variant("USE_VTK", "vtk"),
]
return args

View File

@ -0,0 +1,113 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index de46022..8a98e87 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -485,11 +485,14 @@ SET(CMAKE_MACOSX_RPATH 1)
#####
############################################################################
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
+add_library( ParMmg INTERFACE )
IF ( LIBPARMMG_STATIC )
ADD_AND_INSTALL_LIBRARY ( lib${PROJECT_NAME}_a STATIC
"${pmmg_library_files}" ${PROJECT_NAME} )
+ target_link_libraries( ParMmg INTERFACE lib${PROJECT_NAME}_a )
+
IF ( DOWNLOAD_MMG )
Add_Dependencies(lib${PROJECT_NAME}_a Mmg)
ENDIF ( )
@@ -505,6 +508,8 @@ IF ( LIBPARMMG_SHARED )
ADD_AND_INSTALL_LIBRARY ( lib${PROJECT_NAME}_so SHARED
"${pmmg_library_files}" ${PROJECT_NAME} )
+ target_link_libraries( ParMmg INTERFACE lib${PROJECT_NAME}_so )
+
IF ( DOWNLOAD_MMG )
Add_Dependencies(lib${PROJECT_NAME}_so Mmg)
ENDIF ( )
@@ -515,6 +520,14 @@ IF ( LIBPARMMG_SHARED )
ENDIF()
+add_library(ParMmg::ParMmg ALIAS ParMmg)
+install(TARGETS ParMmg EXPORT ParMmgTargets
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/parmmg
+ )
+
# parmmg header files needed for library
SET( pmmg_headers
${PMMG_SOURCE_DIR}/libparmmg.h
@@ -540,12 +553,45 @@ ELSE()
SET(LIBPARMMG_INTERNAL OFF )
ENDIF()
+if ( BUILD_SHARED_LIBS )
+ set(LIBPARMMG lib${PROJECT_NAME}_so)
+else()
+ set(LIBPARMMG lib${PROJECT_NAME}_a)
+endif()
+
install(EXPORT ParMmgTargets
FILE ParMmgTargets.cmake
NAMESPACE ParMmg::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/parmmg
)
+
+include(CMakePackageConfigHelpers)
+
+configure_package_config_file(
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/ParMmgConfig.cmake.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/ParMmgConfig.cmake"
+ INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/parmmg"
+)
+
+# Install ParMmgConfig.cmake and ParMmgConfigVersion.cmake
+install(
+ FILES "${CMAKE_CURRENT_BINARY_DIR}/ParMmgConfig.cmake"
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/parmmg"
+)
+
+# Install ParMmgConfigVersion.cmake for version tracking
+write_basic_package_version_file(
+ "${CMAKE_CURRENT_BINARY_DIR}/ParMmgConfigVersion.cmake"
+ VERSION ${CMAKE_RELEASE_VERSION}
+ COMPATIBILITY AnyNewerVersion
+)
+
+install(
+ FILES "${CMAKE_CURRENT_BINARY_DIR}/ParMmgConfigVersion.cmake"
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/parmmg"
+)
+
###############################################################################
#####
##### Compile PMMG executable
diff --git a/cmake/modules/ParMmgConfig.cmake.in b/cmake/modules/ParMmgConfig.cmake.in
new file mode 100644
index 0000000..2765460
--- /dev/null
+++ b/cmake/modules/ParMmgConfig.cmake.in
@@ -0,0 +1,5 @@
+@PACKAGE_INIT@
+
+include(CMakeFindDependencyMacro)
+
+include("${CMAKE_CURRENT_LIST_DIR}/ParMmgTargets.cmake")
\ No newline at end of file
diff --git a/cmake/modules/macros.cmake b/cmake/modules/macros.cmake
index bfeb250..616c97d 100644
--- a/cmake/modules/macros.cmake
+++ b/cmake/modules/macros.cmake
@@ -156,7 +156,6 @@ MACRO ( ADD_AND_INSTALL_LIBRARY
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
- Component lib
)
ENDMACRO ( )