From d68ccc4523626a17512bac4d22694fc7e1d507fc Mon Sep 17 00:00:00 2001 From: Oliver Lantwin Date: Fri, 27 Feb 2026 20:53:36 +0100 Subject: [PATCH 1/8] feat: add defaults-lcg for LCG_109 system packages --- defaults-lcg.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 defaults-lcg.sh diff --git a/defaults-lcg.sh b/defaults-lcg.sh new file mode 100644 index 00000000..2c8be366 --- /dev/null +++ b/defaults-lcg.sh @@ -0,0 +1,15 @@ +package: defaults-lcg +version: v1 +env: + CXXFLAGS: "-fPIC -g -O2 -std=c++20" + CFLAGS: "-fPIC -g -O2" + CMAKE_BUILD_TYPE: "RELEASE" + CMAKE_CXX_STANDARD: "20" + CMAKE_PREFIX_PATH: "/cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt" + XERCESC_ROOT: "/cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt" + EIGEN3_ROOT: "/cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt" + NLOHMANN_JSON_ROOT: "/cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt" + BOOST_ROOT: "/cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt" +--- +# Before running aliBuild with --defaults lcg, source the LCG environment: +# source /cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt/setup.sh From 29dbb3f350873c6f04d54976562dd88b6a00a01c Mon Sep 17 00:00:00 2001 From: Oliver Lantwin Date: Fri, 27 Feb 2026 20:26:22 +0100 Subject: [PATCH 2/8] fix: prefer_system for Eigen3 and XercesC Eigen3: add prefer_system and a compile-based check that handles LCG's include/eigen3/ layout. XercesC: add prefer_system field (was missing); drop the check for the version-embedded libxerces-c-3.1.so so the check works with LCG_109 which ships libxerces-c-3.3.so. --- eigen3.sh | 6 ++++++ xercesc.sh | 7 +------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/eigen3.sh b/eigen3.sh index 127ca469..81240011 100644 --- a/eigen3.sh +++ b/eigen3.sh @@ -1,6 +1,12 @@ package: Eigen3 version: 3.4.0 source: https://gitlab.com/libeigen/eigen.git +prefer_system: .* +prefer_system_check: | + printf '#include \nint main(){}\n' | \ + c++ -std=c++20 -xc++ - \ + ${EIGEN3_ROOT:+-I"$EIGEN3_ROOT/include/eigen3"} \ + -o /dev/null build_requires: - "GCC-Toolchain:(?!osx)" - CMake diff --git a/xercesc.sh b/xercesc.sh index 1baffb47..57e54046 100644 --- a/xercesc.sh +++ b/xercesc.sh @@ -7,16 +7,11 @@ env: XERCESC_INST_DIR: "$XERCESC_ROOT" XERCESCINST: "$XERCESC_ROOT" XERCESCROOT: "$XERCESC_ROOT" +prefer_system: .* prefer_system_check: | #!/bin/bash -e - ls $XERCESC_ROOT/ > /dev/null && \ ls $XERCESC_ROOT/bin > /dev/null && \ - ls $XERCESC_ROOT/include > /dev/null && \ ls $XERCESC_ROOT/include/xercesc/ > /dev/null && \ - ls $XERCESC_ROOT/lib > /dev/null && \ - ls $XERCESC_ROOT/lib/libxerces-c-3.1.so > /dev/null && \ - ls $XERCESC_ROOT/lib/libxerces-c.a > /dev/null && \ - ls $XERCESC_ROOT/lib/libxerces-c.la > /dev/null && \ ls $XERCESC_ROOT/lib/libxerces-c.so > /dev/null --- #!/bin/sh From 0e440019f5fbf05bf19e310378dba16bce87d303 Mon Sep 17 00:00:00 2001 From: Oliver Lantwin Date: Fri, 27 Feb 2026 20:27:14 +0100 Subject: [PATCH 3/8] feat: add nlohmann_json recipe with prefer_system --- nlohmann_json.sh | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 nlohmann_json.sh diff --git a/nlohmann_json.sh b/nlohmann_json.sh new file mode 100644 index 00000000..d1b7c22a --- /dev/null +++ b/nlohmann_json.sh @@ -0,0 +1,33 @@ +package: nlohmann_json +version: "%(tag_basename)s" +source: https://github.com/nlohmann/json.git +tag: v3.11.3 +prefer_system: .* +prefer_system_check: | + #!/bin/bash -e + printf '#include \nint main(){}\n' | \ + c++ -std=c++20 -xc++ - \ + ${NLOHMANN_JSON_ROOT:+-I"$NLOHMANN_JSON_ROOT/include"} \ + -o /dev/null +build_requires: + - "GCC-Toolchain:(?!osx)" + - CMake + - alibuild-recipe-tools +--- +#!/bin/bash -e + +cmake "$SOURCEDIR" \ + -DCMAKE_INSTALL_PREFIX="$INSTALLROOT" \ + -DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \ + -DJSON_BuildTests=OFF +cmake --build . -- ${JOBS:+-j$JOBS} install + +MODULEDIR="$INSTALLROOT/etc/modulefiles" +MODULEFILE="$MODULEDIR/$PKGNAME" +mkdir -p "$MODULEDIR" +alibuild-generate-module > "$MODULEFILE" +cat >> "$MODULEFILE" < Date: Fri, 27 Feb 2026 21:54:17 +0100 Subject: [PATCH 4/8] fix: CMAKE_PREFIX_PATH fallback in prefer_system_check --- eigen3.sh | 3 ++- geant4.sh | 15 ++++++++------- xercesc.sh | 7 ++++--- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/eigen3.sh b/eigen3.sh index 81240011..01690115 100644 --- a/eigen3.sh +++ b/eigen3.sh @@ -3,9 +3,10 @@ version: 3.4.0 source: https://gitlab.com/libeigen/eigen.git prefer_system: .* prefer_system_check: | + EIGEN3_ROOT_EFF=${EIGEN3_ROOT:-${CMAKE_PREFIX_PATH%%:*}} printf '#include \nint main(){}\n' | \ c++ -std=c++20 -xc++ - \ - ${EIGEN3_ROOT:+-I"$EIGEN3_ROOT/include/eigen3"} \ + ${EIGEN3_ROOT_EFF:+-I"$EIGEN3_ROOT_EFF/include/eigen3"} \ -o /dev/null build_requires: - "GCC-Toolchain:(?!osx)" diff --git a/geant4.sh b/geant4.sh index e15dcf7b..b20c0e07 100644 --- a/geant4.sh +++ b/geant4.sh @@ -26,13 +26,14 @@ env: G4SAIDXSDATA: "`find ${G4INSTALL} $G4DATASEARCHOPT '*data*G4SAIDDATA*'`" prefer_system_check: | #!/bin/bash -e - ls $GEANT4_ROOT/bin > /dev/null && \ - ls $GEANT4_ROOT/bin/geant4-config > /dev/null && \ - ls $GEANT4_ROOT/bin/geant4.csh > /dev/null && \ - ls $GEANT4_ROOT/bin/geant4.sh > /dev/null && \ - ls $GEANT4_ROOT/include > /dev/null && \ - ls $GEANT4_ROOT/include/Geant4 > /dev/null && \ - ls $GEANT4_ROOT/lib/ > /dev/null && \ + GEANT4_ROOT_EFF=${GEANT4_ROOT:-${CMAKE_PREFIX_PATH%%:*}} + ls $GEANT4_ROOT_EFF/bin > /dev/null && \ + ls $GEANT4_ROOT_EFF/bin/geant4-config > /dev/null && \ + ls $GEANT4_ROOT_EFF/bin/geant4.csh > /dev/null && \ + ls $GEANT4_ROOT_EFF/bin/geant4.sh > /dev/null && \ + ls $GEANT4_ROOT_EFF/include > /dev/null && \ + ls $GEANT4_ROOT_EFF/include/Geant4 > /dev/null && \ + ls $GEANT4_ROOT_EFF/lib/ > /dev/null && \ true --- #!/bin/bash -e diff --git a/xercesc.sh b/xercesc.sh index 57e54046..13d53c4b 100644 --- a/xercesc.sh +++ b/xercesc.sh @@ -10,9 +10,10 @@ env: prefer_system: .* prefer_system_check: | #!/bin/bash -e - ls $XERCESC_ROOT/bin > /dev/null && \ - ls $XERCESC_ROOT/include/xercesc/ > /dev/null && \ - ls $XERCESC_ROOT/lib/libxerces-c.so > /dev/null + XERCESC_ROOT_EFF=${XERCESC_ROOT:-${CMAKE_PREFIX_PATH%%:*}} + ls $XERCESC_ROOT_EFF/bin > /dev/null && \ + ls $XERCESC_ROOT_EFF/include/xercesc/ > /dev/null && \ + ls $XERCESC_ROOT_EFF/lib/libxerces-c.so > /dev/null --- #!/bin/sh cd $SOURCEDIR From b60f0e950854e63cef514eacd7db64e52a4785b5 Mon Sep 17 00:00:00 2001 From: Oliver Lantwin Date: Sat, 28 Feb 2026 01:08:13 +0100 Subject: [PATCH 5/8] feat: add Coin3D 4.0.7 recipe --- coin3d.sh | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 coin3d.sh diff --git a/coin3d.sh b/coin3d.sh new file mode 100644 index 00000000..117fb752 --- /dev/null +++ b/coin3d.sh @@ -0,0 +1,30 @@ +package: Coin3D +version: "%(tag_basename)s" +tag: "v4.0.7" +source: https://github.com/coin3d/coin.git +requires: + - "GCC-Toolchain:(?!osx)" +build_requires: + - CMake + - alibuild-recipe-tools +env: + COIN3D_ROOT: "$COIN3D_ROOT" +prepend_path: + LD_LIBRARY_PATH: "$COIN3D_ROOT/lib" +--- +#!/bin/bash -e + +cmake "$SOURCEDIR" \ + -DCMAKE_INSTALL_PREFIX="$INSTALLROOT" \ + -DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \ + -DCMAKE_INSTALL_LIBDIR=lib \ + ${CMAKE_PREFIX_PATH:+-DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH"} \ + -DCOIN_BUILD_DOCUMENTATION=OFF \ + -DCOIN_BUILD_EXAMPLES=OFF \ + -DCOIN_BUILD_TESTS=OFF + +cmake --build . -- ${JOBS:+-j$JOBS} install + +MODULEDIR="$INSTALLROOT/etc/modulefiles" +mkdir -p "$MODULEDIR" +alibuild-generate-module --lib > "$MODULEDIR/$PKGNAME" From 4265115258d7eee8281d8827c3e2d34ae3c7439a Mon Sep 17 00:00:00 2001 From: Oliver Lantwin Date: Sat, 28 Feb 2026 01:08:18 +0100 Subject: [PATCH 6/8] feat: add SoQt 1.6.4 recipe --- soqt.sh | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 soqt.sh diff --git a/soqt.sh b/soqt.sh new file mode 100644 index 00000000..df410482 --- /dev/null +++ b/soqt.sh @@ -0,0 +1,44 @@ +package: SoQt +version: "%(tag_basename)s" +tag: "v1.6.4" +source: https://github.com/coin3d/soqt.git +requires: + - Coin3D + - "GCC-Toolchain:(?!osx)" +build_requires: + - CMake + - alibuild-recipe-tools +env: + SOQT_ROOT: "$SOQT_ROOT" +prepend_path: + LD_LIBRARY_PATH: "$SOQT_ROOT/lib" +--- +#!/bin/bash -e + +git -C "$SOURCEDIR" submodule update --init --recursive + +# Resolve Qt6 cmake config to its real path so _IMPORT_PREFIX does not follow +# LCG view symlinks back to the Qt5 include dir. +if [ -n "${CMAKE_PREFIX_PATH}" ]; then + _qt6conf="${CMAKE_PREFIX_PATH}/lib/cmake/Qt6/Qt6Config.cmake" + if [ -e "$_qt6conf" ]; then + QT6_DIR=$(dirname "$(readlink -f "$_qt6conf")") + fi +fi + +cmake "$SOURCEDIR" \ + -DCMAKE_INSTALL_PREFIX="$INSTALLROOT" \ + -DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \ + -DCMAKE_INSTALL_LIBDIR=lib \ + ${CMAKE_PREFIX_PATH:+-DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH"} \ + ${QT6_DIR:+-DQt6_DIR="$QT6_DIR"} \ + -DSOQT_USE_QT6=ON \ + -DSOQT_BUILD_DOCUMENTATION=OFF \ + -DSOQT_BUILD_EXAMPLES=OFF \ + -DSOQT_BUILD_TESTS=OFF + +cmake --build . -- ${JOBS:+-j$JOBS} install + +MODULEDIR="$INSTALLROOT/etc/modulefiles" +mkdir -p "$MODULEDIR" +alibuild-generate-module --lib > "$MODULEDIR/$PKGNAME" From 852620c5f796a1cd568c2c1ce635b15e1f4ce165 Mon Sep 17 00:00:00 2001 From: Oliver Lantwin Date: Fri, 27 Feb 2026 20:53:13 +0100 Subject: [PATCH 7/8] feat: add GeoModel 6.24.0 recipe Build with visualization (Qt6), Geant4 integration, and external Coin3D/SoQt packages. Qt6 cmake dir is resolved past LCG view symlinks to ensure correct Qt6 header paths. --- defaults-lcg.sh | 1 + geant4.sh | 1 + geomodel.sh | 76 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 geomodel.sh diff --git a/defaults-lcg.sh b/defaults-lcg.sh index 2c8be366..b5d9e47f 100644 --- a/defaults-lcg.sh +++ b/defaults-lcg.sh @@ -10,6 +10,7 @@ env: EIGEN3_ROOT: "/cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt" NLOHMANN_JSON_ROOT: "/cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt" BOOST_ROOT: "/cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt" + GEANT4_ROOT: "/cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt" --- # Before running aliBuild with --defaults lcg, source the LCG environment: # source /cvmfs/sft.cern.ch/lcg/views/LCG_109/x86_64-el9-gcc15-opt/setup.sh diff --git a/geant4.sh b/geant4.sh index b20c0e07..98c90e06 100644 --- a/geant4.sh +++ b/geant4.sh @@ -24,6 +24,7 @@ env: G4RADIOACTIVEDATA: "`find ${G4INSTALL} $G4DATASEARCHOPT '*data*RadioactiveDecay*'`" G4REALSURFACEDATA: "`find ${G4INSTALL} $G4DATASEARCHOPT '*data*RealSurface*'`" G4SAIDXSDATA: "`find ${G4INSTALL} $G4DATASEARCHOPT '*data*G4SAIDDATA*'`" +prefer_system: .* prefer_system_check: | #!/bin/bash -e GEANT4_ROOT_EFF=${GEANT4_ROOT:-${CMAKE_PREFIX_PATH%%:*}} diff --git a/geomodel.sh b/geomodel.sh new file mode 100644 index 00000000..9f6a5230 --- /dev/null +++ b/geomodel.sh @@ -0,0 +1,76 @@ +package: GeoModel +version: "%(tag_basename)s" +tag: "6.24.0" +source: https://gitlab.cern.ch/GeoModelDev/GeoModel.git +requires: + - sqlite + - XercesC + - nlohmann_json + - Eigen3 + - GEANT4 + - opengl + - Coin3D + - SoQt +build_requires: + - CMake + - "GCC-Toolchain:(?!osx)" + - alibuild-recipe-tools +env: + GEOMODEL_ROOT: "$GEOMODEL_ROOT" +prepend_path: + ROOT_INCLUDE_PATH: "$GEOMODEL_ROOT/include" + LD_LIBRARY_PATH: "$GEOMODEL_ROOT/lib" +--- +#!/bin/bash -e + +# Resolve Qt6 cmake config to its real path so _IMPORT_PREFIX does not follow +# LCG view symlinks back to the Qt5 include dir. +if [ -n "${CMAKE_PREFIX_PATH}" ]; then + _qt6conf="${CMAKE_PREFIX_PATH}/lib/cmake/Qt6/Qt6Config.cmake" + if [ -e "$_qt6conf" ]; then + QT6_DIR=$(dirname "$(readlink -f "$_qt6conf")") + fi +fi + +# Derive Qt6 platform-plugin path from the resolved install tree so that +# gmex can find the xcb plugin at runtime without QT_QPA_PLATFORM_PLUGIN_PATH +# being set manually. +if [ -n "${QT6_DIR}" ]; then + _qt6root="$(dirname "$(dirname "$(dirname "$QT6_DIR")")")" + if [ -d "$_qt6root/plugins/platforms" ]; then + QT6_PLATFORM_PLUGIN_PATH="$_qt6root/plugins/platforms" + fi +fi + +cmake "$SOURCEDIR" \ + -DCMAKE_INSTALL_PREFIX="$INSTALLROOT" \ + -DCMAKE_BUILD_TYPE="$CMAKE_BUILD_TYPE" \ + -DCMAKE_CXX_STANDARD="${CMAKE_CXX_STANDARD:-20}" \ + -DCMAKE_INSTALL_LIBDIR=lib \ + ${CMAKE_PREFIX_PATH:+-DCMAKE_PREFIX_PATH="$CMAKE_PREFIX_PATH"} \ + ${QT6_DIR:+-DQt6_DIR="$QT6_DIR"} \ + -DGEOMODEL_USE_BUILTIN_JSON=OFF \ + -DGEOMODEL_USE_BUILTIN_XERCESC=OFF \ + -DGEOMODEL_USE_BUILTIN_EIGEN3=OFF \ + -DGEOMODEL_BUILD_VISUALIZATION=ON \ + -DGEOMODEL_USE_BUILTIN_COIN3D=OFF \ + -DGEOMODEL_BUILD_GEOMODELG4=ON \ + -DGEOMODEL_BUILD_FULLSIMLIGHT=OFF \ + -DGEOMODEL_BUILD_TESTING=OFF + +cmake --build . -- ${JOBS:+-j$JOBS} install + +MODULEDIR="$INSTALLROOT/etc/modulefiles" +MODULEFILE="$MODULEDIR/$PKGNAME" +mkdir -p "$MODULEDIR" +alibuild-generate-module --bin --lib > "$MODULEFILE" +cat >> "$MODULEFILE" <> "$MODULEFILE" < Date: Thu, 12 Mar 2026 16:07:08 +0100 Subject: [PATCH 8/8] fix: also build GeoModelTools --- geomodel.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/geomodel.sh b/geomodel.sh index 9f6a5230..a1bc8f8a 100644 --- a/geomodel.sh +++ b/geomodel.sh @@ -55,6 +55,7 @@ cmake "$SOURCEDIR" \ -DGEOMODEL_BUILD_VISUALIZATION=ON \ -DGEOMODEL_USE_BUILTIN_COIN3D=OFF \ -DGEOMODEL_BUILD_GEOMODELG4=ON \ + -DGEOMODEL_BUILD_TOOLS=ON \ -DGEOMODEL_BUILD_FULLSIMLIGHT=OFF \ -DGEOMODEL_BUILD_TESTING=OFF