11#! /usr/bin/env bash
22set -euxo pipefail
33
4- prefix=" ${1:? usage: cmake-consumer-smoke.sh <install-prefix> <expected-include-dir>} "
5- expected_include=" ${2:? usage: cmake-consumer-smoke.sh <install-prefix> <expected-include-dir>} "
4+ usage=" usage: cmake-consumer-smoke.sh <install-prefix> <expected-include-dir> [core|mpfr]"
5+ prefix=" ${1:? $usage } "
6+ expected_include=" ${2:? $usage } "
7+ mode=" ${3:- mpfr} "
8+ case " $mode " in
9+ core)
10+ expect_mpfr=OFF
11+ ;;
12+ mpfr)
13+ expect_mpfr=ON
14+ ;;
15+ * )
16+ echo " $usage " >&2
17+ exit 2
18+ ;;
19+ esac
620work=" $RUNNER_TEMP /gecode-consumers"
721rm -rf " $work "
8- mkdir -p " $work /a" " $work /b" " $work /c" " $work /d/cmake" " $work /e/cmake" " $work /e/stale"
22+ mkdir -p " $work /a" " $work /b" " $work /c" " $work /d/cmake" " $work /e/cmake" " $work /e/stale" \
23+ " $work /mpfr-prefix/lib/cmake/MPFR"
924
1025cat > " $work /a/CMakeLists.txt" << 'EOF '
1126cmake_minimum_required(VERSION 3.21)
1227project(consumer_a LANGUAGES CXX)
1328find_package(Gecode CONFIG REQUIRED)
1429message(STATUS "Gecode_VERSION=${Gecode_VERSION}")
1530message(STATUS "Gecode_INCLUDE_DIRS=${Gecode_INCLUDE_DIRS}")
31+ set(EXPECTED_GECODE_INCLUDE_DIR "" CACHE PATH "Expected Gecode include directory")
32+ if(NOT Gecode_INCLUDE_DIRS STREQUAL EXPECTED_GECODE_INCLUDE_DIR)
33+ message(FATAL_ERROR
34+ "Expected Gecode_INCLUDE_DIRS=${EXPECTED_GECODE_INCLUDE_DIR}, got: ${Gecode_INCLUDE_DIRS}")
35+ endif()
36+ set(EXPECT_MPFR OFF CACHE BOOL "Expect Gecode package to require MPFR")
37+ if(EXPECT_MPFR)
38+ if(NOT TARGET MPFR::MPFR)
39+ message(FATAL_ERROR "Expected MPFR::MPFR from the fake MPFR config package")
40+ endif()
41+ get_target_property(mpfr_config_marker MPFR::MPFR INTERFACE_COMPILE_DEFINITIONS)
42+ if(NOT mpfr_config_marker)
43+ set(mpfr_config_marker)
44+ endif()
45+ if(NOT "GECODE_SMOKE_FAKE_MPFR_CONFIG" IN_LIST mpfr_config_marker)
46+ message(FATAL_ERROR "Expected fake MPFR config package, got marker: ${mpfr_config_marker}")
47+ endif()
48+ endif()
1649add_executable(consumer_a main.cpp)
1750target_link_libraries(consumer_a PRIVATE Gecode::gecode)
1851EOF
@@ -122,7 +155,25 @@ set(MPFR_INCLUDE_DIRS "/bad/prior/mpfr/include")
122155set(MPFR_LIBRARIES "/bad/prior/mpfr/lib/libmpfr.a")
123156EOF
124157
125- cmake -S " $work /a" -B " $work /a/build" -DCMAKE_PREFIX_PATH=" $prefix " 2>&1 | tee " $work /a/configure.log"
158+ cat > " $work /mpfr-prefix/lib/cmake/MPFR/MPFRConfig.cmake" << 'EOF '
159+ get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../.." ABSOLUTE)
160+ if(NOT TARGET MPFR::MPFR)
161+ add_library(MPFR::MPFR INTERFACE IMPORTED)
162+ endif()
163+ set_target_properties(MPFR::MPFR PROPERTIES
164+ INTERFACE_COMPILE_DEFINITIONS GECODE_SMOKE_FAKE_MPFR_CONFIG)
165+ set(MPFR_FOUND TRUE)
166+ EOF
167+
168+ cmake_prefix_path=" $prefix "
169+ if [ " $mode " = " mpfr" ]; then
170+ cmake_prefix_path=" $work /mpfr-prefix;$prefix "
171+ fi
172+
173+ cmake -S " $work /a" -B " $work /a/build" \
174+ -DCMAKE_PREFIX_PATH=" $cmake_prefix_path " \
175+ -DEXPECTED_GECODE_INCLUDE_DIR=" $expected_include " \
176+ -DEXPECT_MPFR=" $expect_mpfr " 2>&1 | tee " $work /a/configure.log"
126177cmake --build " $work /a/build" -j4
127178
128179cmake -S " $work /b" -B " $work /b/build" -DCMAKE_PREFIX_PATH=" $prefix "
@@ -131,15 +182,19 @@ cmake --build "$work/b/build" -j4
131182cmake -S " $work /c" -B " $work /c/build" -DCMAKE_PREFIX_PATH=" $prefix "
132183cmake --build " $work /c/build" -j4
133184
134- cmake -S " $work /d" -B " $work /d/build" -DCMAKE_PREFIX_PATH=" $prefix "
135- cmake --build " $work /d/build" -j4
185+ if [ " $mode " = " mpfr" ]; then
186+ cmake -S " $work /d" -B " $work /d/build" -DCMAKE_PREFIX_PATH=" $prefix "
187+ cmake --build " $work /d/build" -j4
136188
137- cmake -S " $work /e" -B " $work /e/build" -DCMAKE_PREFIX_PATH=" $prefix "
138- cmake --build " $work /e/build" -j4
189+ cmake -S " $work /e" -B " $work /e/build" -DCMAKE_PREFIX_PATH=" $prefix "
190+ cmake --build " $work /e/build" -j4
191+ fi
139192
140193grep -q " Gecode_VERSION=" " $work /a/configure.log"
141194grep -q " Gecode_INCLUDE_DIRS=$expected_include " " $work /a/configure.log"
142- grep -q ' ^#define GECODE_HAS_MPFR /\*\*/' " $expected_include /gecode/support/config.hpp"
195+ if [ " $mode " = " mpfr" ]; then
196+ grep -q ' ^#define GECODE_HAS_MPFR /\*\*/' " $expected_include /gecode/support/config.hpp"
197+ fi
143198" $prefix /bin/fzn-gecode" --help
144199test -x " $prefix /bin/mzn-gecode"
145200! grep -q " /usr/local" " $prefix /bin/mzn-gecode"
0 commit comments