diff --git a/cmake/modules/FairRootTargetRootDictionary.cmake b/cmake/modules/FairRootTargetRootDictionary.cmake index 2724cae168..f9b3cc9bc7 100644 --- a/cmake/modules/FairRootTargetRootDictionary.cmake +++ b/cmake/modules/FairRootTargetRootDictionary.cmake @@ -125,10 +125,19 @@ function(fairroot_target_root_dictionary target) # add a custom command to generate the dictionary using rootcling # cmake-format: off set(space " ") + + if (APPLE AND CMAKE_OSX_SYSROOT) + set(_sysroot_arg "SDKROOT=${CMAKE_OSX_SYSROOT}") + else() + set(_sysroot_arg) + endif() + add_custom_command( OUTPUT ${dictionaryFile} ${pcmFile} ${rootmapFile} VERBATIM - COMMAND ${CMAKE_COMMAND} -E env "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ENV{LD_LIBRARY_PATH}" + COMMAND ${CMAKE_COMMAND} -E env + "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ENV{LD_LIBRARY_PATH}" + ${_sysroot_arg} $ -f ${dictionaryFile} -inlineInputHeader diff --git a/cmake/scripts/generate_dictionary_root.sh.in b/cmake/scripts/generate_dictionary_root.sh.in index 699a17751b..93dc52b2c2 100755 --- a/cmake/scripts/generate_dictionary_root.sh.in +++ b/cmake/scripts/generate_dictionary_root.sh.in @@ -10,4 +10,8 @@ export LD_LIBRARY_PATH=@MY_LD_LIBRARY_PATH@ export DYLD_LIBRARY_PATH=@MY_LD_LIBRARY_PATH@ +if [[ -n "@CMAKE_OSX_SYSROOT@" ]]; then + export SDKROOT=@CMAKE_OSX_SYSROOT@ +fi + @ROOT_CINT_EXECUTABLE@ -f @Int_DICTIONARY@ @EXTRA_DICT_PARAMETERS_STR@ -c @Int_DEF_STR@ @Int_INC_STR@ @Int_HDRS_STR@ @Int_LINKDEF@ diff --git a/templates/CMakeLists.txt b/templates/CMakeLists.txt index 2ac3f1b8ea..b2ac0023de 100644 --- a/templates/CMakeLists.txt +++ b/templates/CMakeLists.txt @@ -1,32 +1,21 @@ -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test_project_root_containers.sh.in - ${CMAKE_CURRENT_BINARY_DIR}/test_project_root_containers.sh - @ONLY) -add_test(NAME project_root_containers - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_project_root_containers.sh) -set_tests_properties(project_root_containers PROPERTIES - TIMEOUT "300" - PASS_REGULAR_EXPRESSION "Test successful." -) -add_test(NAME project_root_containers_double - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_project_root_containers.sh --double-configure) -set_tests_properties(project_root_containers_double PROPERTIES - TIMEOUT "300" - PASS_REGULAR_EXPRESSION "Test successful." -) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test_project.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/test_project.sh + @ONLY + USE_SOURCE_PERMISSIONS) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/test_project_stl_containers.sh.in - ${CMAKE_CURRENT_BINARY_DIR}/test_project_stl_containers.sh - @ONLY) -add_test(NAME project_stl_containers - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_project_stl_containers.sh) -set_tests_properties(project_stl_containers PROPERTIES - TIMEOUT "300" - PASS_REGULAR_EXPRESSION "Test successful." -) -add_test(NAME project_stl_containers_double - COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_project_stl_containers.sh --double-configure) -set_tests_properties(project_stl_containers_double PROPERTIES - TIMEOUT "300" - PASS_REGULAR_EXPRESSION "Test successful." -) +foreach(container_type IN ITEMS root stl) + add_test(NAME project_${container_type}_containers + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_project.sh ${container_type}) + set_tests_properties(project_${container_type}_containers PROPERTIES + TIMEOUT "300" + PASS_REGULAR_EXPRESSION "Test successful." + ) + + add_test(NAME project_${container_type}_containers_double + COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_project.sh ${container_type} --double-configure) + set_tests_properties(project_${container_type}_containers_double PROPERTIES + TIMEOUT "300" + PASS_REGULAR_EXPRESSION "Test successful." + ) +endforeach() diff --git a/templates/test_project.sh.in b/templates/test_project.sh.in new file mode 100755 index 0000000000..c5122e8148 --- /dev/null +++ b/templates/test_project.sh.in @@ -0,0 +1,87 @@ +#!/bin/bash + +set -e -u -o pipefail +[[ "${DEBUG:-0}" == "1" ]] && set -x + +usage() { + echo "Usage: $0 [--double-configure]" >&2 + echo " container_type: 'root' or 'stl'" >&2 + exit 1 +} + +# Parse arguments +CONTAINER_TYPE="" +DOUBLE_CONFIGURE=0 + +while [[ $# -gt 0 ]]; do + case $1 in + --double-configure) + DOUBLE_CONFIGURE=1 + shift + ;; + root|stl) + if [[ -n "$CONTAINER_TYPE" ]]; then + echo "Error: container_type specified multiple times" >&2 + usage + fi + CONTAINER_TYPE=$1 + shift + ;; + -h|--help) + usage + ;; + *) + echo "Error: Unknown argument '$1'" >&2 + usage + ;; + esac +done + +if [[ -z "$CONTAINER_TYPE" ]]; then + echo "Error: container_type is required" >&2 + usage +fi + +readonly CONTAINER_TYPE +readonly DOUBLE_CONFIGURE + +readonly CURRENT_DIR=$(pwd) +readonly SOURCE_DIR=@CMAKE_SOURCE_DIR@ +readonly MYTMPDIR=$(mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir') + +# Ensure cleanup on exit +trap 'cd "$CURRENT_DIR" && rm -rf "$MYTMPDIR"' EXIT + +readonly TEMPLATE_DIR="$SOURCE_DIR/templates/project_${CONTAINER_TYPE}_containers" +if [[ ! -d "$TEMPLATE_DIR" ]]; then + echo "Error: Template directory not found: $TEMPLATE_DIR" >&2 + exit 1 +fi + +cd "$MYTMPDIR" +cp -RP "$TEMPLATE_DIR" . +cd "project_${CONTAINER_TYPE}_containers" +./rename.sh TestProj Tst det + +export SIMPATH=@SIMPATH@ +export FAIRROOTPATH=@CMAKE_INSTALL_PREFIX@ + +# Use array for proper argument handling +parameters=(-DCMAKE_CXX_STANDARD=@CMAKE_CXX_STANDARD@) + +if [[ -n "@CMAKE_OSX_SYSROOT@" ]]; then + parameters+=(-DCMAKE_OSX_SYSROOT=@CMAKE_OSX_SYSROOT@) +fi + +cmake -S . -B build "${parameters[@]}" + +if [[ "$DOUBLE_CONFIGURE" == "1" ]]; then + echo "*** Calling cmake configure again:" + # Check if all the cache variables + # are good for a reconfiguration step + cmake -S . -B build +fi + +cmake --build build + +echo "Test successful." diff --git a/templates/test_project_root_containers.sh.in b/templates/test_project_root_containers.sh.in deleted file mode 100755 index ced5da6166..0000000000 --- a/templates/test_project_root_containers.sh.in +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -set -x -e - -CURRENT_DIR=`pwd` -SOURCE_DIR=@CMAKE_SOURCE_DIR@ -MYTMPDIR=`mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir'` - -cd $MYTMPDIR -cp -a $SOURCE_DIR/templates/project_root_containers . -cd project_root_containers -./rename.sh TestProj Tst det -mkdir build -cd build -export SIMPATH=@SIMPATH@ -export FAIRROOTPATH=@CMAKE_INSTALL_PREFIX@ -cmake -DCMAKE_CXX_STANDARD=@CMAKE_CXX_STANDARD@ .. - -if [ "$1" = "--double-configure" ] -then - echo "*** Calling cmake configure again:" - # Check if all the cache variables - # are good for a reconfiguration step - cmake -DCMAKE_CXX_STANDARD=@CMAKE_CXX_STANDARD@ .. -fi - -make - -if [ $? -eq 0 ]; then - echo 'Test successful.' -fi - -cd $CURRENT_DIR -rm -rf $MYTMPDIR - diff --git a/templates/test_project_stl_containers.sh.in b/templates/test_project_stl_containers.sh.in deleted file mode 100755 index 289ad597a5..0000000000 --- a/templates/test_project_stl_containers.sh.in +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/bash - -set -x -e - -CURRENT_DIR=`pwd` -SOURCE_DIR=@CMAKE_SOURCE_DIR@ -MYTMPDIR=`mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir'` - -cd $MYTMPDIR -cp -a $SOURCE_DIR/templates/project_stl_containers . -cd project_stl_containers -./rename.sh TestProj Tst det -mkdir build -cd build -export CMAKE_PREFIX_PATH="@SIMPATH@${CMAKE_PREFIX_PATH:+:$CMAKE_PREFIX_PATH}" -export FAIRROOTPATH=@CMAKE_INSTALL_PREFIX@ -cmake -DCMAKE_CXX_STANDARD=@CMAKE_CXX_STANDARD@ .. - -if [ "$1" = "--double-configure" ] -then - echo "*** Calling cmake configure again:" - # Check if all the cache variables - # are good for a reconfiguration step - cmake .. -fi - -make - -if [ $? -eq 0 ]; then - echo 'Test successful.' -fi - -cd $CURRENT_DIR -rm -rf $MYTMPDIR -