diff --git a/.github/workflows/Spack.yml b/.github/workflows/Spack.yml index eaecd5b9..633850c6 100644 --- a/.github/workflows/Spack.yml +++ b/.github/workflows/Spack.yml @@ -24,7 +24,7 @@ jobs: openmp: ["+openmp", "~openmp"] sharedlibs: ["+shared", "~shared"] pic: ["+pic", "~pic"] - precision: ["precision=d", "precision=4", "precision=8"] + precision: ["d", "4", "8"] runs-on: ${{ matrix.os }} steps: @@ -41,15 +41,17 @@ jobs: spack env create ip-env spack env activate ip-env cp $GITHUB_WORKSPACE/ip/spack/package.py $SPACK_ROOT/var/spack/repos/builtin/packages/ip/package.py - mv $GITHUB_WORKSPACE/ip $SPACK_ENV/ip - spack develop --no-clone ip@develop - spack add ip@develop%gcc@11 ${{ matrix.openmp }} ${{ matrix.sharedlibs }} ${{ matrix.pic }} ${{ matrix.precision }} target=x86_64 + spack develop --no-clone --path $GITHUB_WORKSPACE/ip ip@develop + spack add ip@develop%gcc@11 ${{ matrix.openmp }} ${{ matrix.sharedlibs }} ${{ matrix.pic }} precision=${{ matrix.precision }} target=x86_64 + if [ ${{ matrix.precision }} == "d" ]; then spack add grib-util@develop ; fi spack external find cmake gmake spack concretize # Run installation and run CTest suite spack install --verbose --fail-fast --test root - # Run 'spack load' to check for obvious errors in setup_run_environment + # Run 'spack load' and check that key build options were respected spack load ip + if [ ${{ matrix.sharedlibs }} == "+shared" ]; then suffix="so" ; else suffix="a"; fi + ls ${IP_LIB${{ matrix.precision }}} | grep -cE '/libip_${{ matrix.precision }}\.'$suffix'$' # This job validates the Spack recipe by making sure each cmake build option is represented recipe-check: diff --git a/cmake/PackageConfig.cmake.in b/cmake/PackageConfig.cmake.in index 86eed6e7..c63b4fb5 100644 --- a/cmake/PackageConfig.cmake.in +++ b/cmake/PackageConfig.cmake.in @@ -9,16 +9,25 @@ include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake") include(CMakeFindDependencyMacro) -# ON/OFF implies ip was compiled with/without OPENMP +find_dependency(sp CONFIG) + if(@OPENMP@) find_dependency(OpenMP COMPONENTS Fortran) endif() -find_dependency(sp CONFIG) +# The target name needs to be one that's built, even if the dependent +# build does not use that version. +if(@BUILD_4@) + set(precision 4) +elseif(@BUILD_D@) + set(precision d) +elseif(@BUILD_8@) + set(precision 8) +endif() -get_target_property(@PROJECT_NAME@_BUILD_TYPES @PROJECT_NAME@::@PROJECT_NAME@_4 IMPORTED_CONFIGURATIONS) +get_target_property(@PROJECT_NAME@_BUILD_TYPES @PROJECT_NAME@::@PROJECT_NAME@_${precision} IMPORTED_CONFIGURATIONS) check_required_components("@PROJECT_NAME@") -get_target_property(location @PROJECT_NAME@::@PROJECT_NAME@_4 LOCATION) +get_target_property(location @PROJECT_NAME@::@PROJECT_NAME@_${precision} LOCATION) message(STATUS "Found @PROJECT_NAME@: ${location} (found version \"@PROJECT_VERSION@\")")