Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,36 @@ jobs:
shell: bash
run: make check

- name: Install Autoconf test-library prefix
if: runner.os == 'Linux'
shell: bash
run: |
set -euxo pipefail
build_root="$RUNNER_TEMP/legacy-test-component-check"
prefix="$build_root/prefix"
rm -rf "$build_root"
mkdir -p "$prefix"
make install prefix="$prefix"

- name: Verify installed legacy test consumer
if: runner.os == 'Linux'
shell: bash
run: |
set -euxo pipefail
build_root="$RUNNER_TEMP/legacy-test-component-check"
prefix="$build_root/prefix"

python test/package/verify-installed-legacy-test-component.py \
--source "$GITHUB_WORKSPACE" \
--build-root "$build_root" \
--prefix "$prefix"

python test/package/verify-installed-legacy-test-component.py \
--source "$GITHUB_WORKSPACE" \
--build-root "$build_root" \
--prefix "$prefix" \
--mode unsupported-header

- name: Autoconf install smoke
shell: bash
run: bash .github/ci/autoconf-install-smoke.sh "$RUNNER_TEMP/gecode-autoconf-install"
Expand Down Expand Up @@ -148,6 +178,12 @@ jobs:
set -euxo pipefail
cmake --build . --config $BUILD_TYPE --target check

- name: Run public test harness smokes
if: matrix.os == 'ubuntu-latest'
working-directory: ${{github.workspace}}/build
shell: bash
run: ctest --build-config "$BUILD_TYPE" --output-on-failure -R '^public-.*-smoke$'

- name: Install CMake package
working-directory: ${{github.workspace}}/build
shell: bash
Expand All @@ -169,6 +205,26 @@ jobs:
core
fi

- name: Verify installed test component
if: matrix.os == 'ubuntu-latest'
shell: bash
run: |
set -euxo pipefail
python test/package/verify-installed-test-component.py \
--source "$GITHUB_WORKSPACE" \
--build-root "$RUNNER_TEMP/test-component-check" \
--prefix "$GITHUB_WORKSPACE/install" \
--include-dir "/tmp/gecode-install-abs-include" \
--lib-dir "$GITHUB_WORKSPACE/install/lib"

python test/package/verify-installed-test-component.py \
--source "$GITHUB_WORKSPACE" \
--build-root "$RUNNER_TEMP/test-component-check-missing-component" \
--prefix "$GITHUB_WORKSPACE/install" \
--include-dir "/tmp/gecode-install-abs-include" \
--lib-dir "$GITHUB_WORKSPACE/install/lib" \
--expect-missing-component-failure

- name: Package version checks
shell: bash
run: bash .github/ci/cmake-package-version-checks.sh "$GITHUB_WORKSPACE/install"
Expand Down Expand Up @@ -405,6 +461,10 @@ jobs:
shell: pwsh
run: cmake --build "${{ github.workspace }}\\build" --config ${{ env.BUILD_TYPE }} --target check

- name: Run public test harness smokes
shell: pwsh
run: ctest --test-dir "${{ github.workspace }}\\build" -C ${{ env.BUILD_TYPE }} --output-on-failure -R '^public-.*-smoke$'

- name: Install CMake package
shell: pwsh
run: cmake --install "${{ github.workspace }}\\build" --config ${{ env.BUILD_TYPE }} --prefix "${{ github.workspace }}\\install"
Expand All @@ -413,6 +473,18 @@ jobs:
shell: pwsh
run: .\.github\ci\cmake-consumer-smoke.ps1 "${{ github.workspace }}\install"

- name: Installed test-library consumer
shell: pwsh
run: |
$prefix = "${{ github.workspace }}\install"
$build = "$env:RUNNER_TEMP\test-library-consumer"
cmake -S test/package/public-test-component -B $build "-DCMAKE_PREFIX_PATH=$prefix"
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
cmake --build $build --config $env:BUILD_TYPE
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
$env:PATH = "$prefix\bin;$env:PATH"
ctest --test-dir $build -C $env:BUILD_TYPE --output-on-failure

build-cmake-windows-vcpkg:
runs-on: windows-2022

Expand Down
121 changes: 115 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -814,7 +814,7 @@ ${CONFIG_OUT}")
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/GecodeSources.cmake)
if(GECODE_ENABLE_FAULT_INJECTION)
list(APPEND GECODE_SUPPORT_SOURCES gecode/support/failpoint.cpp)
set(GECODE_FAULT_TEST_SOURCES test/test.cpp test/fault.cpp)
set(GECODE_FAULT_TEST_SOURCES ${GECODE_TEST_MAIN_SOURCE} test/fault.cpp)
endif()

# ---------------------------------------------------------------------------
Expand Down Expand Up @@ -1128,7 +1128,11 @@ endif()

function(add_gecode_component_library lib)
string(TOUPPER ${lib} libupper)
set(sources ${GECODE_${libupper}_SOURCES})
if(ARGN)
set(sources ${ARGN})
else()
set(sources ${GECODE_${libupper}_SOURCES})
endif()
set(component_output_name "${GECODE_LIB_PREFIX}gecode${lib}${GECODE_LIB_SUFFIX}")
if(lib STREQUAL "float" AND NOT (GECODE_ENABLE_MPFR AND MPFR_FOUND))
# Keep in sync with Make behavior: skip empty MPFR-only source when MPFR is absent.
Expand Down Expand Up @@ -1354,8 +1358,66 @@ if(GECODE_ENABLE_FLATZINC)
endif()

if(BUILD_TESTING)
set(GECODE_CAN_BUILD_TESTS TRUE)
foreach(required search int minimodel driver)
set(GECODE_CAN_BUILD_TEST_HARNESS TRUE)
foreach(required search int)
if(NOT TARGET gecode${required})
set(GECODE_CAN_BUILD_TEST_HARNESS FALSE)
endif()
endforeach()

if(GECODE_CAN_BUILD_TEST_HARNESS)
add_gecode_component_library(test ${GECODE_TEST_CORE_SOURCES})
gecode_link_component(test search int)
add_gecode_component_library(testint ${GECODE_TEST_INT_SOURCES})
gecode_link_component(testint test)
if(TARGET gecodeset)
add_gecode_component_library(testset ${GECODE_TEST_SET_SOURCES})
gecode_link_component(testset testint set)
endif()
if(TARGET gecodefloat)
add_gecode_component_library(testfloat ${GECODE_TEST_FLOAT_SOURCES})
gecode_link_component(testfloat test float)
endif()

add_executable(public-runner-smoke EXCLUDE_FROM_ALL ${GECODE_TEST_PUBLIC_RUNNER_SMOKE_SOURCE})
target_link_libraries(public-runner-smoke PRIVATE gecodetest)
add_test(NAME public-runner-smoke COMMAND public-runner-smoke)

add_executable(public-int-smoke EXCLUDE_FROM_ALL ${GECODE_TEST_PUBLIC_INT_SMOKE_SOURCE})
target_link_libraries(public-int-smoke PRIVATE gecodetestint)
add_test(NAME public-int-smoke COMMAND public-int-smoke)

set(GECODE_PUBLIC_TEST_SMOKE_TARGETS public-runner-smoke public-int-smoke)
if(TARGET gecodetestset)
add_executable(public-set-smoke EXCLUDE_FROM_ALL ${GECODE_TEST_PUBLIC_SET_SMOKE_SOURCE})
target_link_libraries(public-set-smoke PRIVATE gecodetestset)
add_test(NAME public-set-smoke COMMAND public-set-smoke)
list(APPEND GECODE_PUBLIC_TEST_SMOKE_TARGETS public-set-smoke)
endif()
if(TARGET gecodetestfloat)
add_executable(public-float-smoke EXCLUDE_FROM_ALL ${GECODE_TEST_PUBLIC_FLOAT_SMOKE_SOURCE})
target_link_libraries(public-float-smoke PRIVATE gecodetestfloat)
add_test(NAME public-float-smoke COMMAND public-float-smoke)
list(APPEND GECODE_PUBLIC_TEST_SMOKE_TARGETS public-float-smoke)
endif()

add_test(NAME build-public-test-smokes
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_BINARY_DIR}"
--target ${GECODE_PUBLIC_TEST_SMOKE_TARGETS} --config $<CONFIG>
)
set_tests_properties(build-public-test-smokes PROPERTIES
FIXTURES_SETUP public-test-smokes-built
RESOURCE_LOCK gecode-test-build
)
set_tests_properties(${GECODE_PUBLIC_TEST_SMOKE_TARGETS} PROPERTIES
FIXTURES_REQUIRED public-test-smokes-built
)
else()
message(WARNING "Skipping public test harness targets because required modules are disabled")
endif()

set(GECODE_CAN_BUILD_TESTS ${GECODE_CAN_BUILD_TEST_HARNESS})
foreach(required minimodel driver)
if(NOT TARGET gecode${required})
set(GECODE_CAN_BUILD_TESTS FALSE)
endif()
Expand All @@ -1382,6 +1444,12 @@ if(BUILD_TESTING)
endif()

set(GECODE_TEST_SOURCES_SELECTED ${GECODE_TEST_SOURCES})
if(TARGET gecodetestset)
list(REMOVE_ITEM GECODE_TEST_SOURCES_SELECTED test/set.cpp)
endif()
if(TARGET gecodetestfloat)
list(REMOVE_ITEM GECODE_TEST_SOURCES_SELECTED test/float.cpp)
endif()
if(NOT GECODE_ENABLE_SET_VARS)
list(FILTER GECODE_TEST_SOURCES_SELECTED EXCLUDE REGEX "^test/set(/|\\.cpp)")
endif()
Expand All @@ -1393,8 +1461,16 @@ if(BUILD_TESTING)
endif()

if(GECODE_CAN_BUILD_TESTS)
add_executable(gecode-test EXCLUDE_FROM_ALL ${GECODE_TEST_SOURCES_SELECTED})
add_executable(gecode-test EXCLUDE_FROM_ALL ${GECODE_TEST_MAIN_SOURCE} ${GECODE_TEST_SOURCES_SELECTED})
set(GECODE_TEST_LINK_LIBS gecodeminimodel)
if(TARGET gecodetestset)
list(APPEND GECODE_TEST_LINK_LIBS gecodetestset)
else()
list(APPEND GECODE_TEST_LINK_LIBS gecodetestint)
endif()
if(TARGET gecodetestfloat)
list(APPEND GECODE_TEST_LINK_LIBS gecodetestfloat)
endif()
if(GECODE_ENABLE_FLATZINC)
list(APPEND GECODE_TEST_LINK_LIBS gecodeflatzinc)
endif()
Expand Down Expand Up @@ -1487,7 +1563,8 @@ if(BUILD_TESTING)
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_BINARY_DIR}"
--target ${GECODE_TEST_BUILD_TARGETS} --config $<CONFIG>)
set_tests_properties(build-gecode-test PROPERTIES
FIXTURES_SETUP "${GECODE_TEST_BUILD_FIXTURES}")
FIXTURES_SETUP "${GECODE_TEST_BUILD_FIXTURES}"
RESOURCE_LOCK gecode-test-build)
add_test(NAME test COMMAND gecode-test ${GECODE_CHECK_ARGS})
set_tests_properties(test PROPERTIES
FIXTURES_REQUIRED gecode-test-built)
Expand Down Expand Up @@ -1643,6 +1720,26 @@ if(GECODE_INSTALL)
install(FILES ${GECODE_VAR_TYPE_HPP} ${GECODE_VAR_IMP_HPP}
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/gecode/kernel/)
endif()
if(TARGET gecodetest AND TARGET gecodetestint)
install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/test/test.hh
${CMAKE_CURRENT_SOURCE_DIR}/test/test.hpp
${CMAKE_CURRENT_SOURCE_DIR}/test/int.hh
${CMAKE_CURRENT_SOURCE_DIR}/test/int.hpp
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/test)
if(TARGET gecodetestset)
install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/test/set.hh
${CMAKE_CURRENT_SOURCE_DIR}/test/set.hpp
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/test)
endif()
if(TARGET gecodetestfloat)
install(FILES
${CMAKE_CURRENT_SOURCE_DIR}/test/float.hh
${CMAKE_CURRENT_SOURCE_DIR}/test/float.hpp
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/test)
endif()
endif()

if(GECODE_ENABLE_FLATZINC)
install(DIRECTORY gecode/flatzinc/mznlib/
Expand All @@ -1664,6 +1761,18 @@ if(GECODE_INSTALL)
if(GECODE_ENABLE_FLOAT_VARS AND GECODE_ENABLE_MPFR AND MPFR_FOUND)
set(GECODE_PACKAGE_NEEDS_MPFR ON)
endif()
set(GECODE_PACKAGE_HAS_TEST_COMPONENT OFF)
set(GECODE_PACKAGE_TEST_TYPES "")
if(TARGET gecodetest AND TARGET gecodetestint)
set(GECODE_PACKAGE_HAS_TEST_COMPONENT ON)
set(GECODE_PACKAGE_TEST_TYPES int)
if(TARGET gecodetestset)
list(APPEND GECODE_PACKAGE_TEST_TYPES set)
endif()
if(TARGET gecodetestfloat)
list(APPEND GECODE_PACKAGE_TEST_TYPES float)
endif()
endif()
set(GECODE_PACKAGE_QT_MAJOR "")
set(GECODE_PACKAGE_QT_COMPONENTS "")
set(GECODE_PACKAGE_QT_VERSION "")
Expand Down
Loading
Loading