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
56 changes: 56 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-(runner|int)-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
181 changes: 176 additions & 5 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 @@ -1354,8 +1354,132 @@ 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_library(gecodetest STATIC ${GECODE_TEST_CORE_SOURCES})
target_compile_features(gecodetest PUBLIC cxx_std_17)
target_include_directories(gecodetest
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
if(GECODE_VISIBILITY_COMPILE_OPTION)
target_compile_options(gecodetest PRIVATE ${GECODE_VISIBILITY_COMPILE_OPTION})
endif()
set_target_properties(gecodetest PROPERTIES
OUTPUT_NAME "${GECODE_LIB_PREFIX}gecodetest${GECODE_LIB_SUFFIX}")
target_link_libraries(gecodetest PUBLIC gecodesearch gecodeint)
add_library(Gecode::gecodetest ALIAS gecodetest)
list(APPEND GECODE_INSTALL_TARGETS gecodetest)
list(APPEND GECODE_EXPORT_TARGETS gecodetest)

add_library(gecodetestint STATIC ${GECODE_TEST_INT_SOURCES})
target_compile_features(gecodetestint PUBLIC cxx_std_17)
target_include_directories(gecodetestint
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
if(GECODE_VISIBILITY_COMPILE_OPTION)
target_compile_options(gecodetestint PRIVATE ${GECODE_VISIBILITY_COMPILE_OPTION})
endif()
set_target_properties(gecodetestint PROPERTIES
OUTPUT_NAME "${GECODE_LIB_PREFIX}gecodetestint${GECODE_LIB_SUFFIX}")
target_link_libraries(gecodetestint PUBLIC gecodetest)
add_library(Gecode::gecodetestint ALIAS gecodetestint)
list(APPEND GECODE_INSTALL_TARGETS gecodetestint)
list(APPEND GECODE_EXPORT_TARGETS gecodetestint)

if(TARGET gecodeset)
add_library(gecodetestset STATIC ${GECODE_TEST_SET_SOURCES})
target_compile_features(gecodetestset PUBLIC cxx_std_17)
target_include_directories(gecodetestset
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
if(GECODE_VISIBILITY_COMPILE_OPTION)
target_compile_options(gecodetestset PRIVATE ${GECODE_VISIBILITY_COMPILE_OPTION})
endif()
set_target_properties(gecodetestset PROPERTIES
OUTPUT_NAME "${GECODE_LIB_PREFIX}gecodetestset${GECODE_LIB_SUFFIX}")
target_link_libraries(gecodetestset PUBLIC gecodetestint gecodeset)
add_library(Gecode::gecodetestset ALIAS gecodetestset)
list(APPEND GECODE_INSTALL_TARGETS gecodetestset)
list(APPEND GECODE_EXPORT_TARGETS gecodetestset)
endif()

if(TARGET gecodefloat)
add_library(gecodetestfloat STATIC ${GECODE_TEST_FLOAT_SOURCES})
target_compile_features(gecodetestfloat PUBLIC cxx_std_17)
target_include_directories(gecodetestfloat
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
if(GECODE_VISIBILITY_COMPILE_OPTION)
target_compile_options(gecodetestfloat PRIVATE ${GECODE_VISIBILITY_COMPILE_OPTION})
endif()
set_target_properties(gecodetestfloat PROPERTIES
OUTPUT_NAME "${GECODE_LIB_PREFIX}gecodetestfloat${GECODE_LIB_SUFFIX}")
target_link_libraries(gecodetestfloat PUBLIC gecodetest gecodefloat)
add_library(Gecode::gecodetestfloat ALIAS gecodetestfloat)
list(APPEND GECODE_INSTALL_TARGETS gecodetestfloat)
list(APPEND GECODE_EXPORT_TARGETS gecodetestfloat)
endif()
if(GECODE_INSTALL)
foreach(gecode_install_component IN LISTS GECODE_LIBRARY_COMPONENTS)
if(TARGET gecode${gecode_install_component}_${GECODE_DEFAULT_LINK_VARIANT})
add_dependencies(gecodetest gecode${gecode_install_component}_${GECODE_DEFAULT_LINK_VARIANT})
endif()
endforeach()
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 +1506,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 +1523,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 +1625,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 +1782,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 +1823,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