mirror of
https://gitlab.kitware.com/cmake/cmake.git
synced 2026-09-25 04:09:36 +03:00
444 lines
18 KiB
CMake
444 lines
18 KiB
CMake
include(RunCMake)
|
|
|
|
set(stdlib_custom_json)
|
|
if (CMake_TEST_CXX_STDLIB_MODULES_JSON)
|
|
list(APPEND stdlib_custom_json
|
|
-DCMAKE_CXX_STDLIB_MODULES_JSON=${CMake_TEST_CXX_STDLIB_MODULES_JSON})
|
|
endif ()
|
|
|
|
run_cmake(Inspect ${stdlib_custom_json})
|
|
include("${RunCMake_BINARY_DIR}/Inspect-build/info.cmake")
|
|
|
|
if (RunCMake_GENERATOR MATCHES "Ninja")
|
|
execute_process(
|
|
COMMAND "${CMAKE_MAKE_PROGRAM}" --version
|
|
RESULT_VARIABLE res
|
|
OUTPUT_VARIABLE ninja_version
|
|
ERROR_VARIABLE err
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_STRIP_TRAILING_WHITESPACE)
|
|
|
|
if (res)
|
|
message(WARNING
|
|
"Failed to determine `ninja` version: ${err}")
|
|
set(ninja_version "0")
|
|
endif ()
|
|
endif ()
|
|
|
|
set(generator_supports_cxx_modules 0)
|
|
if (RunCMake_GENERATOR MATCHES "Ninja" AND
|
|
ninja_version VERSION_GREATER_EQUAL "1.11" AND
|
|
"cxx_std_20" IN_LIST CMAKE_CXX_COMPILE_FEATURES)
|
|
set(generator_supports_cxx_modules 1)
|
|
endif ()
|
|
|
|
if (RunCMake_GENERATOR MATCHES "Visual Studio" AND
|
|
CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "19.34")
|
|
set(generator_supports_cxx_modules 1)
|
|
endif ()
|
|
|
|
# Test behavior when the generator does not support C++20 modules.
|
|
if (NOT generator_supports_cxx_modules)
|
|
# Bail; the remaining tests require the generator to successfully generate
|
|
# with C++20 modules in the source list.
|
|
return ()
|
|
endif ()
|
|
|
|
# This performs actual compilation tests; avoid it when not requested.
|
|
if (NOT CMake_TEST_MODULE_COMPILATION)
|
|
return ()
|
|
endif ()
|
|
|
|
# Module compilation features:
|
|
# Compiler-based:
|
|
# - `named`: basic support for named modules is available
|
|
# - `shared`: shared libraries are supported
|
|
# - `partitions`: module partitions are supported
|
|
# - `internal_partitions`: internal module partitions are supported
|
|
# - `bmionly`: the compiler supports BMI-only builds
|
|
# - `import_std23`: the compiler supports `import std` for C++23
|
|
#
|
|
# Generator-based:
|
|
# - `compile_commands`: the generator supports `compile_commands.json`
|
|
# - `collation`: the generator supports module collation features
|
|
# - `export_bmi`: the generator supports exporting BMIs
|
|
# - `ninja`: a `ninja` binary is available to perform `Ninja`-only testing
|
|
# (assumed if the generator matches `Ninja`).
|
|
string(REPLACE "," ";" CMake_TEST_MODULE_COMPILATION "${CMake_TEST_MODULE_COMPILATION}")
|
|
if (RunCMake_GENERATOR MATCHES "Ninja")
|
|
list(APPEND CMake_TEST_MODULE_COMPILATION
|
|
"ninja")
|
|
endif ()
|
|
|
|
function (run_cxx_module_test directory)
|
|
set(test_name "${directory}")
|
|
if (NOT ARGN STREQUAL "")
|
|
list(POP_FRONT ARGN test_name)
|
|
endif ()
|
|
|
|
# Split the test cases into two suites: those for builds and those for
|
|
# installs.
|
|
set(is_for_install 0)
|
|
if (RunCMake_CXXModules_INSTALL OR
|
|
RunCMake_CXXModules_NEEDS_INSTALL OR
|
|
test_name MATCHES "install")
|
|
set(is_for_install 1)
|
|
endif ()
|
|
# Build variants
|
|
if (CMake_TEST_MODULE_VARIANT MATCHES "Build")
|
|
if (is_for_install)
|
|
return ()
|
|
endif ()
|
|
# Further split the test cases into those for import/export and "behavior".
|
|
set(is_import_export 0)
|
|
if (test_name MATCHES "^(imp|exp)-")
|
|
set(is_import_export 1)
|
|
endif ()
|
|
if (CMake_TEST_MODULE_VARIANT STREQUAL "BuildBehavior" AND is_import_export)
|
|
return ()
|
|
endif ()
|
|
if (CMake_TEST_MODULE_VARIANT STREQUAL "BuildImportExport" AND NOT is_import_export)
|
|
return ()
|
|
endif ()
|
|
endif ()
|
|
if (CMake_TEST_MODULE_VARIANT STREQUAL "Install" AND NOT is_for_install)
|
|
return ()
|
|
endif ()
|
|
|
|
set(RunCMake_TEST_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/${directory}")
|
|
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${test_name}-build")
|
|
|
|
if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
|
if (RunCMake_CXXModules_CONFIGS)
|
|
set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=${RunCMake_CXXModules_CONFIGS}")
|
|
else ()
|
|
set(RunCMake_TEST_OPTIONS -DCMAKE_CONFIGURATION_TYPES=Debug)
|
|
endif ()
|
|
else ()
|
|
set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Debug)
|
|
endif ()
|
|
if (directory MATCHES "imp-std")
|
|
list(APPEND RunCMake_TEST_OPTIONS
|
|
${stdlib_custom_json})
|
|
endif ()
|
|
|
|
if (RunCMake_CXXModules_INSTALL)
|
|
set(prefix "${RunCMake_BINARY_DIR}/${test_name}-install")
|
|
file(REMOVE_RECURSE "${prefix}")
|
|
list(APPEND RunCMake_TEST_OPTIONS
|
|
"-DCMAKE_INSTALL_PREFIX=${prefix}")
|
|
endif ()
|
|
|
|
list(APPEND RunCMake_TEST_OPTIONS
|
|
"-DCMake_TEST_MODULE_COMPILATION_RULES=${CMake_TEST_MODULE_COMPILATION_RULES}"
|
|
${ARGN})
|
|
run_cmake("${test_name}")
|
|
set(RunCMake_TEST_NO_CLEAN 1)
|
|
if (RunCMake_CXXModules_TARGET)
|
|
run_cmake_command("${test_name}-build" "${CMAKE_COMMAND}" --build . --config Debug --target "${RunCMake_CXXModules_TARGET}")
|
|
else ()
|
|
run_cmake_command("${test_name}-build" "${CMAKE_COMMAND}" --build . --config Debug)
|
|
foreach (RunCMake_CXXModules_TARGET IN LISTS RunCMake_CXXModules_TARGETS)
|
|
set(RunCMake_CXXModules_CONFIG "Debug")
|
|
set(RunCMake_CXXModules_NAME_SUFFIX "")
|
|
if (RunCMake_CXXModules_TARGET MATCHES "(.*)@(.*)")
|
|
set(RunCMake_CXXModules_TARGET "${CMAKE_MATCH_1}")
|
|
set(RunCMake_CXXModules_CONFIG "${CMAKE_MATCH_2}")
|
|
set(RunCMake_CXXModules_NAME_SUFFIX "-${RunCMake_CXXModules_CONFIG}")
|
|
endif ()
|
|
run_cmake_command("${test_name}-target-${RunCMake_CXXModules_TARGET}${RunCMake_CXXModules_NAME_SUFFIX}" "${CMAKE_COMMAND}" --build . --target "${RunCMake_CXXModules_TARGET}" --config "${RunCMake_CXXModules_CONFIG}")
|
|
endforeach ()
|
|
endif ()
|
|
if (RunCMake_CXXModules_INSTALL)
|
|
run_cmake_command("${test_name}-install" "${CMAKE_COMMAND}" --build . --target install --config Debug)
|
|
endif ()
|
|
if (NOT RunCMake_CXXModules_NO_TEST)
|
|
run_cmake_command("${test_name}-test" "${CMAKE_CTEST_COMMAND}" -C Debug --output-on-failure)
|
|
endif ()
|
|
if (RunCMake_CXXModules_REBUILD)
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1.125) # handle 1s resolution
|
|
include("${RunCMake_TEST_SOURCE_DIR}/pre-rebuild.cmake")
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1.125) # handle 1s resolution
|
|
run_cmake_command("${test_name}-rebuild" "${CMAKE_COMMAND}" --build . --config Debug)
|
|
endif ()
|
|
endfunction ()
|
|
|
|
function (run_cxx_module_test_target directory target)
|
|
set(RunCMake_CXXModules_TARGET "${target}")
|
|
set(RunCMake_CXXModules_NO_TEST 1)
|
|
run_cxx_module_test("${directory}" ${ARGN})
|
|
endfunction ()
|
|
|
|
function (run_cxx_module_test_rebuild directory)
|
|
set(RunCMake_CXXModules_INSTALL 0)
|
|
set(RunCMake_CXXModules_NO_TEST 1)
|
|
set(RunCMake_CXXModules_REBUILD 1)
|
|
run_cxx_module_test("${directory}" ${ARGN})
|
|
endfunction ()
|
|
|
|
if (RunCMake_GENERATOR MATCHES "Ninja")
|
|
if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
|
set(ninja_cmp0154_target "CMakeFiles/ninja_cmp0154.dir/Debug/unrelated.cxx${CMAKE_CXX_OUTPUT_EXTENSION}")
|
|
else ()
|
|
set(ninja_cmp0154_target "CMakeFiles/ninja_cmp0154.dir/unrelated.cxx${CMAKE_CXX_OUTPUT_EXTENSION}")
|
|
endif ()
|
|
run_cxx_module_test_target(ninja-cmp0154 "${ninja_cmp0154_target}")
|
|
endif ()
|
|
|
|
run_cxx_module_test(scan-with-pch)
|
|
|
|
# Tests which use named modules.
|
|
if ("named" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(simple)
|
|
# FIXME(GCC): `g++ -c "with space.cpp" -M -fdeps-format=p1689r5` fails.
|
|
if (NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
run_cxx_module_test(subdir)
|
|
endif ()
|
|
run_cxx_module_test(file-sets-with-dot)
|
|
run_cxx_module_test(vs-without-flags)
|
|
run_cxx_module_test(library library-static -DBUILD_SHARED_LIBS=OFF)
|
|
run_cxx_module_test(library library-static-file-set-SOURCES -DBUILD_SHARED_LIBS=OFF
|
|
-DWITH_FILE_SET_SOURCES=ON)
|
|
run_cxx_module_test(unity-build)
|
|
run_cxx_module_test(object-library)
|
|
run_cxx_module_test(generated)
|
|
run_cxx_module_test(deep-chain)
|
|
run_cxx_module_test(non-triv-coll)
|
|
run_cxx_module_test(non-triv-coll-rando)
|
|
run_cxx_module_test(duplicate)
|
|
set(RunCMake_CXXModules_NO_TEST 1)
|
|
if ("collation" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(private-cxx-modules)
|
|
endif ()
|
|
run_cxx_module_test(imp-from-object)
|
|
run_cxx_module_test(circular)
|
|
run_cxx_module_test(try-compile)
|
|
run_cxx_module_test(try-run)
|
|
unset(RunCMake_CXXModules_NO_TEST)
|
|
run_cxx_module_test(same-src-name)
|
|
run_cxx_module_test(scan_props)
|
|
run_cxx_module_test(target-objects)
|
|
|
|
# Requires a generator that implements per-importer BMI generation
|
|
if ("cxx_std_23" IN_LIST CMAKE_CXX_COMPILE_FEATURES AND
|
|
RunCMake_GENERATOR MATCHES "Ninja")
|
|
run_cxx_module_test(mixed-bmi-compatibility)
|
|
if (RunCMake_GENERATOR_IS_MULTI_CONFIG AND
|
|
"collation" IN_LIST CMake_TEST_MODULE_COMPILATION AND
|
|
"bmionly" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(multi-config-synth)
|
|
endif()
|
|
endif()
|
|
|
|
if ("cxx_std_23" IN_LIST CMAKE_CXX_COMPILE_FEATURES AND
|
|
"import_std23" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(imp-std)
|
|
set(RunCMake_CXXModules_NO_TEST 1)
|
|
run_cxx_module_test(imp-std-no-std-json)
|
|
unset(RunCMake_CXXModules_NO_TEST)
|
|
run_cxx_module_test(imp-dummy-std)
|
|
run_cxx_module_test(imp-std-exp-no-std-build)
|
|
run_cxx_module_test(imp-std-shared)
|
|
set(RunCMake_CXXModules_INSTALL 1)
|
|
run_cxx_module_test(imp-std-exp-no-std-install)
|
|
unset(RunCMake_CXXModules_INSTALL)
|
|
|
|
if ("collation" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(imp-std-not-in-exp-build)
|
|
run_cxx_module_test(imp-std-trans imp-std-trans-not-in-exp-build "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/imp-std-not-in-exp-build-build")
|
|
|
|
set(RunCMake_CXXModules_INSTALL 1)
|
|
run_cxx_module_test(imp-std-not-in-exp-install)
|
|
unset(RunCMake_CXXModules_INSTALL)
|
|
run_cxx_module_test(imp-std-trans imp-std-trans-not-in-exp-install "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/imp-std-not-in-exp-install-install" "-Dimport_std_not_in_export_cps_DIR=${RunCMake_BINARY_DIR}/imp-std-not-in-exp-install-install/lib/cmake/import_std_not_in_export_cps")
|
|
|
|
run_cxx_module_test(imp-std-trans imp-std-trans-exp-no-std-build "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/imp-std-exp-no-std-build-build" -DEXPORT_NO_STD=1)
|
|
run_cxx_module_test(imp-std-trans imp-std-trans-exp-no-std-install "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/imp-std-exp-no-std-install-install" "-Dimport_std_export_no_std_cps_DIR=${RunCMake_BINARY_DIR}/imp-std-exp-no-std-install-install/lib/cmake/import_std_export_no_std_cps" -DEXPORT_NO_STD=1)
|
|
endif ()
|
|
endif ()
|
|
endif ()
|
|
|
|
# Tests which require compile commands support.
|
|
if ("compile_commands" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(exp-compile-commands)
|
|
endif ()
|
|
|
|
macro (setup_export_build_database_targets)
|
|
set(RunCMake_CXXModules_TARGETS
|
|
cmake_build_database-CXX
|
|
cmake_build_database)
|
|
|
|
if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
|
list(INSERT RunCMake_CXXModules_TARGETS 0
|
|
cmake_build_database-CXX-Debug
|
|
cmake_build_database-Debug
|
|
# Other config targets.
|
|
cmake_build_database-CXX-Release@Release
|
|
cmake_build_database-Release@Release)
|
|
endif ()
|
|
endmacro ()
|
|
|
|
# Tests which require build database support.
|
|
if ("build_database" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
setup_export_build_database_targets()
|
|
set(RunCMake_CXXModules_NO_TEST 1)
|
|
|
|
run_cxx_module_test(exp-builddb)
|
|
# Skip for multi-config generators.
|
|
if (NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
|
run_cxx_module_test(exp-builddb-emptyconfig)
|
|
endif ()
|
|
|
|
unset(RunCMake_CXXModules_NO_TEST)
|
|
unset(RunCMake_CXXModules_TARGETS)
|
|
endif ()
|
|
|
|
# Tests which require collation work.
|
|
if ("collation" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(duplicate-sources)
|
|
run_cxx_module_test(public-req-priv)
|
|
set(RunCMake_CXXModules_NO_TEST 1)
|
|
run_cxx_module_test(req-priv-other-target)
|
|
unset(RunCMake_CXXModules_NO_TEST)
|
|
run_cxx_module_test_rebuild(depchain-modmap)
|
|
run_cxx_module_test_rebuild(depchain-mods-json-file)
|
|
if (RunCMake_GENERATOR MATCHES "Ninja")
|
|
run_cxx_module_test_rebuild(depchain-collation-restat)
|
|
endif ()
|
|
endif ()
|
|
|
|
# Tests which use named modules in shared libraries.
|
|
if ("shared" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(library library-shared -DBUILD_SHARED_LIBS=ON)
|
|
run_cxx_module_test(shared-library-symbol-visibility)
|
|
endif ()
|
|
|
|
# Tests which use partitions.
|
|
if ("partitions" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(partitions)
|
|
endif ()
|
|
|
|
# Tests which use internal partitions.
|
|
if ("internal_partitions" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(internal-partitions)
|
|
endif ()
|
|
|
|
function (run_cxx_module_import_test type name)
|
|
set(RunCMake_CXXModules_INSTALL 0)
|
|
|
|
if ("EXPORT_BUILD_DATABASE" IN_LIST ARGN)
|
|
list(REMOVE_ITEM ARGN EXPORT_BUILD_DATABASE)
|
|
list(APPEND ARGN -DCMAKE_EXPORT_BUILD_DATABASE=1)
|
|
endif ()
|
|
|
|
run_cxx_module_test(imp-mods "imp-mods-${name}" "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/${name}-${type}" ${ARGN})
|
|
endfunction ()
|
|
|
|
# Tests which install BMIs
|
|
if ("export_bmi" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(exp-nested-dirs-build)
|
|
run_cxx_module_test(exp-iface-no-props-build)
|
|
run_cxx_module_test(exp-iface-build)
|
|
run_cxx_module_test(exp-incdirs-build)
|
|
run_cxx_module_test(exp-incdirs-old-cmake-build)
|
|
run_cxx_module_test(exp-usage-build)
|
|
run_cxx_module_test(exp-bmi-and-iface-build)
|
|
run_cxx_module_test(exp-command-sepdir-build)
|
|
run_cxx_module_test(exp-trans-targets-build)
|
|
run_cxx_module_test(exp-trans-mods1-build)
|
|
run_cxx_module_test(exp-trans-mods-build exp-trans-mods-build "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/exp-trans-mods1-build-build")
|
|
run_cxx_module_test(exp-with-headers-build)
|
|
run_cxx_module_test(exp-iface-config-build)
|
|
|
|
if ("collation" IN_LIST CMake_TEST_MODULE_COMPILATION AND
|
|
"bmionly" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_import_test(build exp-iface-build)
|
|
run_cxx_module_import_test(build exp-iface-no-props-build -DNO_PROPERTIES=1)
|
|
run_cxx_module_import_test(build exp-incdirs-build -DINCLUDE_PROPERTIES=1)
|
|
run_cxx_module_import_test(build exp-bmi-and-iface-build -DWITH_BMIS=1)
|
|
run_cxx_module_import_test(build exp-command-sepdir-build -DEXPORT_COMMAND_SEPDIR=1)
|
|
run_cxx_module_import_test(build exp-trans-targets-build -DTRANSITIVE_TARGETS=1)
|
|
run_cxx_module_import_test(build exp-trans-mods-build -DTRANSITIVE_MODULES=1)
|
|
run_cxx_module_import_test(build exp-with-headers-build -DWITH_HEADERS=1)
|
|
run_cxx_module_import_test(build exp-iface-config-build -DCONFIG_MODULES=1)
|
|
|
|
if ("build_database" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
setup_export_build_database_targets()
|
|
|
|
run_cxx_module_import_test(build exp-builddb -DBUILD_DATABASE=1 EXPORT_BUILD_DATABASE)
|
|
|
|
unset(RunCMake_CXXModules_TARGETS)
|
|
endif ()
|
|
endif ()
|
|
endif ()
|
|
|
|
# All of the following tests perform installation.
|
|
set(RunCMake_CXXModules_INSTALL 1)
|
|
|
|
# Tests which install BMIs
|
|
if ("install_bmi" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(install-bmi)
|
|
run_cxx_module_test(install-bmi-and-ifaces)
|
|
|
|
if ("export_bmi" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_test(exp-iface-no-props-install)
|
|
run_cxx_module_test(exp-iface-install)
|
|
run_cxx_module_test(exp-incdirs-install)
|
|
run_cxx_module_test(exp-incdirs-old-cmake-install)
|
|
run_cxx_module_test(exp-usage-install)
|
|
run_cxx_module_test(exp-bmi-and-iface-install)
|
|
run_cxx_module_test(exp-command-sepdir-install)
|
|
run_cxx_module_test(exp-trans-targets-install)
|
|
run_cxx_module_test(exp-trans-mods1-install)
|
|
run_cxx_module_test(exp-trans-mods-install exp-trans-mods-install "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/exp-trans-mods1-install-install" "-Dexport_transitive_modules1_cps_DIR=${RunCMake_BINARY_DIR}/exp-trans-mods1-install-install/lib/cmake/export_transitive_modules1_cps")
|
|
run_cxx_module_test(exp-with-headers-install)
|
|
if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
|
|
set(RunCMake_CXXModules_CONFIGS "Debug\\;Release")
|
|
endif()
|
|
run_cxx_module_test(exp-iface-config-install)
|
|
unset(RunCMake_CXXModules_CONFIGS)
|
|
|
|
if ("collation" IN_LIST CMake_TEST_MODULE_COMPILATION AND
|
|
"bmionly" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
run_cxx_module_import_test(install exp-iface-install)
|
|
run_cxx_module_import_test(install exp-iface-no-props-install -DNO_PROPERTIES=1)
|
|
run_cxx_module_import_test(install exp-incdirs-install -DINCLUDE_PROPERTIES=1)
|
|
run_cxx_module_import_test(install exp-bmi-and-iface-install -DWITH_BMIS=1)
|
|
run_cxx_module_import_test(install exp-command-sepdir-install -DEXPORT_COMMAND_SEPDIR=1)
|
|
run_cxx_module_import_test(install exp-trans-targets-install -DTRANSITIVE_TARGETS=1)
|
|
run_cxx_module_import_test(install exp-trans-mods-install -DTRANSITIVE_MODULES=1)
|
|
run_cxx_module_import_test(install exp-with-headers-install -DWITH_HEADERS=1)
|
|
run_cxx_module_import_test(install exp-iface-config-install -DCONFIG_MODULES=1)
|
|
endif ()
|
|
endif ()
|
|
endif ()
|
|
|
|
# All remaining tests require a working `Ninja` generator to set up a test case
|
|
# for the current generator.
|
|
if (NOT "ninja" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
return ()
|
|
endif ()
|
|
# All remaining tests require `bmionly` in order to consume from the `ninja`
|
|
# build.
|
|
if (NOT "bmionly" IN_LIST CMake_TEST_MODULE_COMPILATION)
|
|
return ()
|
|
endif ()
|
|
|
|
function (run_cxx_module_test_ninja directory)
|
|
set(RunCMake_GENERATOR "Ninja")
|
|
set(RunCMake_CXXModules_NO_TEST 1)
|
|
set(RunCMake_CXXModules_INSTALL 1)
|
|
# `Ninja` is not a multi-config generator.
|
|
set(RunCMake_GENERATOR_IS_MULTI_CONFIG 0)
|
|
run_cxx_module_test("${directory}" "${directory}-ninja" ${ARGN})
|
|
endfunction ()
|
|
|
|
# Installation happens within `run_cxx_module_test_ninja`.
|
|
set(RunCMake_CXXModules_INSTALL 0)
|
|
|
|
set(test_set mods-from-ninja)
|
|
run_cxx_module_test_ninja("exp-${test_set}")
|
|
set(RunCMake_CXXModules_NEEDS_INSTALL 1)
|
|
run_cxx_module_test(imp-mods "imp-${test_set}" "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/exp-${test_set}-ninja-install" -DFROM_NINJA=1)
|
|
unset(RunCMake_CXXModules_NEEDS_INSTALL)
|