From c8face9be8b41407adb13b26ffa634162fec0d6a Mon Sep 17 00:00:00 2001 From: Matthias Krack Date: Sat, 7 Feb 2026 13:04:04 +0100 Subject: [PATCH] Add local spack recipe for spglib - Add variant shared to enable static library builds - Add new versions 2.6.0 and 2.7.0 --- .../packages/spglib/fix_cmake_install.patch | 25 +++ .../cp2k_dev/packages/spglib/fix_cpp.patch | 34 +++ .../cp2k_dev/packages/spglib/package.py | 196 ++++++++++++++++++ 3 files changed, 255 insertions(+) create mode 100644 tools/spack/spack_repo/cp2k_dev/packages/spglib/fix_cmake_install.patch create mode 100644 tools/spack/spack_repo/cp2k_dev/packages/spglib/fix_cpp.patch create mode 100644 tools/spack/spack_repo/cp2k_dev/packages/spglib/package.py diff --git a/tools/spack/spack_repo/cp2k_dev/packages/spglib/fix_cmake_install.patch b/tools/spack/spack_repo/cp2k_dev/packages/spglib/fix_cmake_install.patch new file mode 100644 index 0000000000..d7451460db --- /dev/null +++ b/tools/spack/spack_repo/cp2k_dev/packages/spglib/fix_cmake_install.patch @@ -0,0 +1,25 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 3296d91..d18d26c 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -47,17 +47,17 @@ set(SOURCES ${PROJECT_SOURCE_DIR}/src/arithmetic.c + add_library(symspg SHARED ${SOURCES}) + set_property(TARGET symspg PROPERTY VERSION ${serial}) + set_property(TARGET symspg PROPERTY SOVERSION ${soserial}) +-install(TARGETS symspg LIBRARY DESTINATION ${PROJECT_SOURCE_DIR}/lib) ++install(TARGETS symspg LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) + + # Static link library + add_library(symspg_static STATIC ${SOURCES}) + set_property(TARGET symspg_static PROPERTY VERSION ${serial}) + set_property(TARGET symspg_static PROPERTY SOVERSION ${soserial}) + set_property(TARGET symspg_static PROPERTY OUTPUT_NAME symspg) +-install(TARGETS symspg_static ARCHIVE DESTINATION ${PROJECT_SOURCE_DIR}/lib) ++install(TARGETS symspg_static ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) + + # Header file +-install(FILES ${PROJECT_SOURCE_DIR}/src/spglib.h DESTINATION ${PROJECT_SOURCE_DIR}/include) ++install(FILES ${PROJECT_SOURCE_DIR}/src/spglib.h DESTINATION ${CMAKE_INSTALL_PREFIX}/include) + + # make check + enable_testing() diff --git a/tools/spack/spack_repo/cp2k_dev/packages/spglib/fix_cpp.patch b/tools/spack/spack_repo/cp2k_dev/packages/spglib/fix_cpp.patch new file mode 100644 index 0000000000..9ab4c9bffe --- /dev/null +++ b/tools/spack/spack_repo/cp2k_dev/packages/spglib/fix_cpp.patch @@ -0,0 +1,34 @@ +From a91ea68d6771ed7d6b03bcbffd891489dc77e574 Mon Sep 17 00:00:00 2001 +From: Krishnendu Ghosh +Date: Thu, 22 Feb 2018 14:24:14 -0500 +Subject: [PATCH] added extern "C" + +--- + src/spglib.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/spglib.h b/src/spglib.h +index e1746b1..530dfa4 100644 +--- a/src/spglib.h ++++ b/src/spglib.h +@@ -35,6 +35,9 @@ + #ifndef __spglib_H__ + #define __spglib_H__ + ++#ifdef __cplusplus ++extern "C" { ++#endif + /* SPGCONST is used instead of 'const' so to avoid gcc warning. */ + /* However there should be better way than this way.... */ + #ifndef SPGCONST +@@ -481,4 +484,7 @@ void spg_get_neighboring_grid_points(int relative_grid_points[], + /* Return 0 if failed */ + int spg_niggli_reduce(double lattice[3][3], const double symprec); + ++#ifdef __cplusplus ++} ++#endif + #endif +-- +2.7.4.1.g5468f9e + diff --git a/tools/spack/spack_repo/cp2k_dev/packages/spglib/package.py b/tools/spack/spack_repo/cp2k_dev/packages/spglib/package.py new file mode 100644 index 0000000000..ba5bfdfb7c --- /dev/null +++ b/tools/spack/spack_repo/cp2k_dev/packages/spglib/package.py @@ -0,0 +1,196 @@ +# Copyright Spack Project Developers. See COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack_repo.builtin.build_systems.cmake import CMakePackage + +from spack.package import * + + +class Spglib(CMakePackage): + """C library for finding and handling crystal symmetries.""" + + homepage = "https://spglib.readthedocs.io/" + url = "https://github.com/spglib/spglib/archive/v2.0.2.tar.gz" + + maintainers("RMeli", "mkrack") + + patch("fix_cmake_install.patch", when="@:1.10.3") + # patch by Krishnendu Ghosh + patch("fix_cpp.patch", when="@:1.10.3") + + license("BSD-3-Clause") + + version( + "2.7.0", + sha256="b22fc9abae9716c574fbc6d55cfc53ed654a714fccc5657a26ff5d18114bd8bd", + ) + version( + "2.6.0", + sha256="c65af71136c915352eb82444b165ec83289877eb8e46593033f199801b43dbf7", + ) + version( + "2.5.0", + sha256="b6026f5e85106c0c9ee57e54b9399890d0f29982e20e96ede0428b3efbe6b914", + ) + version( + "2.4.0", + sha256="e33694b189c6864f719a59c31e2af55301a524fb68ba9fb65f08e95af471847d", + ) + version( + "2.3.1", + sha256="c295dbea7d2fc9e50639aa14331fef277878c35f00ef0766e688bfbb7b17d44c", + ) + version( + "2.3.0", + sha256="c05eb869018efe2efe5dcb2654cda19c5dd4c07434874205fa542f7766f7548e", + ) + version( + "2.2.0", + sha256="ac929e20ec9d4621411e2cdec59b1442e02506c1e546005bbe2c7f781e9bd49a", + ) + version( + "2.1.0", + sha256="31bca273a1bc54e1cff4058eebe7c0a35d5f9b489579e84667d8e005c73dcc13", + ) + version( + "2.0.2", + sha256="10e44a35099a0a5d0fc6ee0cdb39d472c23cb98b1f5167c0e2b08f6069f3db1e", + ) + version( + "2.0.1", + sha256="d7407c0d67174a0c5e41a82ed62948c43fcaf1b5529f97238d7fadd1123ffe22", + ) + version( + "2.0.0", + sha256="426c4004e84fdb732d86aa5fcada5257ca8bc7a6915c06ced27565176c16ee96", + ) + version( + "1.16.5", + sha256="1bbde03b6b78da756c07f458bd90d84f3c253841b9b0632db5b72c5961e87aef", + ) + version( + "1.16.4", + sha256="7a1cdfdb104040e696e887999fd53d83931ba1285aa8fc3c703dcafc38fb1009", + ) + version( + "1.16.3", + sha256="1dfe313b460f71de90ee8a01d9f2cd250cd59e16836e1bf64924500dd2aa7dc6", + ) + version( + "1.16.2", + sha256="5723789bee7371ebba91d78c729d2a608f198fad5e1c95eebe18fda9f2914ec8", + ) + version( + "1.16.1", + sha256="e90682239e4ef63b492fa4e44f7dbcde2e2fe2e688579d96b01f2730dfdf5b2e", + ) + version( + "1.16.0", + sha256="969311a2942fef77ee79ac9faab089b68e256f21713194969197e7f2bdb14772", + ) + version( + "1.15.1", + sha256="b6dc2c8adcc7d0edee7a076e765c28b2941b2aeba590d213a0b4893c8af0c026", + ) + version( + "1.15.0", + sha256="2e217beff6840a22ab2149598eb2f40616b2eeb9e155edab52761d3301412f98", + ) + version( + "1.14.1", + sha256="9803b0648d9c2d99377f3e1c4cecf712320488403cd674192ec5cbe956bb3c78", + ) + version( + "1.14.0", + sha256="0a5e518c3dc221386d2219cbd260d08b032b0d2a31bccc32e1a8cb7874e7e9e9", + ) + version( + "1.13.0", + sha256="ed72ae7bdd129487c45ff7bebb8e2ac03074657060e068b015e7741c0271e16b", + ) + version( + "1.12.2", + sha256="d92f5e4fa0f54cc0abd0209b81c4d5c647dae9d25b774c2296f44b8558b17976", + ) + version( + "1.12.1", + sha256="1765e68982425de6d30029d50d200f20425b8ed1deff52b8e73a4a1457ac9ab6", + ) + version( + "1.12.0", + sha256="79361ef230b4fd55d5eb7521c23430acc3f11ab527125dc324ffb315783ebdfa", + ) + version( + "1.11.2.1", + sha256="f6795523a04871e012e7f5f5ab97b249fa36657b73cdc9b4ea53ef023cfcaac4", + ) + version( + "1.11.2", + sha256="aae61218dd0cca1fda245d4ad906c2eed5e8d30e28b575d74eab9a6be26bbd5d", + ) + version( + "1.11.1.2", + sha256="d99dab24accd269df65c01febd05cb5dd1094a89d7279f8390871f0432df2b56", + ) + version( + "1.11.1", + sha256="3b5a859f3fe2c9b096fc0754ffbd9341c568bc8003d2eeb74c958c1cacb480f5", + ) + version( + "1.11.0", + sha256="e4befe27473a69b7982597760d6838cc48d9ef7b624a439436a17f5487f78f51", + ) + version( + "1.10.4", + sha256="6a15a324a821ad9d3e615e120d9c5e704e284d8eb1f076aa21741a23fbcf08df", + ) + version( + "1.10.3", + sha256="43776b5fb220b746d53c1aa39d0230f304687ec05984671392bccaf850d9d696", + ) + version( + "1.10.2", + sha256="5907d0d29563689146512ef24aa8960d9475c5de326501f277bb58b3de21b07d", + ) + version( + "1.10.1", + sha256="8ed979cda82f6d440567197ec191bffcb82ee83c5bfe8a484c5a008dd00273f0", + ) + version( + "1.10.0", + sha256="117fff308731784bea2ddaf3d076f0ecbf3981b31ea1c1bfd5ce4f057a5325b1", + ) + + depends_on("c", type="build") # generated + depends_on("cxx", type="build") # generated + depends_on("fortran", type="build") # generated + + variant( + "openmp", default=True, description="Build with OpenMP support", when="@1.16.2:" + ) + variant( + "fortran", default=True, description="Build Fortran interface", when="@1.16.4:" + ) + variant( + "shared", default=True, description="Build shared libraries", when="@2.1.0:" + ) + variant("tests", default=False, description="Build with tests", when="@2.1.0:") + + depends_on("cmake@3.15:", type="build", when="@2.1.0:") + depends_on("cmake@3.24:", type="build", when="+tests") + + @property + def libs(self): + return find_libraries( + "libsymspg", root=self.prefix, shared=True, recursive=True + ) + + def cmake_args(self): + pfx = "SPGLIB_" if self.spec.satisfies("@2.1.0:") else "" + return [ + self.define_from_variant(pfx + "SHARED_LIBS", "shared"), + self.define_from_variant(pfx + "USE_OMP", "openmp"), + self.define_from_variant(pfx + "WITH_Fortran", "fortran"), + self.define_from_variant(pfx + "WITH_TESTS", "tests"), + ]