From 16bf12d1e838263d753f082caeb7dc4222997ce2 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Tue, 5 Mar 2024 13:43:29 -0500 Subject: Tests/CXXModules; add tests for `CXX_MODULE_STD` behavior --- Tests/RunCMake/CXXModules/Inspect.cmake | 6 ++++++ Tests/RunCMake/CXXModules/NoCXX23TargetNotRequired.cmake | 11 +++++++++++ Tests/RunCMake/CXXModules/NoCXX23TargetRequired-result.txt | 1 + Tests/RunCMake/CXXModules/NoCXX23TargetRequired-stderr.txt | 4 ++++ Tests/RunCMake/CXXModules/NoCXX23TargetRequired.cmake | 11 +++++++++++ Tests/RunCMake/CXXModules/NoCXX23TargetUnset.cmake | 13 +++++++++++++ Tests/RunCMake/CXXModules/RunCMakeTest.cmake | 7 +++++++ 7 files changed, 53 insertions(+) create mode 100644 Tests/RunCMake/CXXModules/NoCXX23TargetNotRequired.cmake create mode 100644 Tests/RunCMake/CXXModules/NoCXX23TargetRequired-result.txt create mode 100644 Tests/RunCMake/CXXModules/NoCXX23TargetRequired-stderr.txt create mode 100644 Tests/RunCMake/CXXModules/NoCXX23TargetRequired.cmake create mode 100644 Tests/RunCMake/CXXModules/NoCXX23TargetUnset.cmake diff --git a/Tests/RunCMake/CXXModules/Inspect.cmake b/Tests/RunCMake/CXXModules/Inspect.cmake index 612b01b..1597bd8 100644 --- a/Tests/RunCMake/CXXModules/Inspect.cmake +++ b/Tests/RunCMake/CXXModules/Inspect.cmake @@ -15,11 +15,17 @@ if (CMAKE_CXX_FLAGS MATCHES "-std=") set(forced_cxx_standard 1) endif () +set(have_cxx23_import_std 0) +if (TARGET "__CMAKE::CXX23") + set(have_cxx23_import_std 1) +endif () + # Forward information about the C++ compile features. string(APPEND info "\ set(CMAKE_CXX_COMPILE_FEATURES \"${CMAKE_CXX_COMPILE_FEATURES}\") set(CMAKE_MAKE_PROGRAM \"${CMAKE_MAKE_PROGRAM}\") set(forced_cxx_standard \"${forced_cxx_standard}\") +set(have_cxx23_import_std \"${have_cxx23_import_std}\") set(CMAKE_CXX_COMPILER_VERSION \"${CMAKE_CXX_COMPILER_VERSION}\") set(CMAKE_CXX_OUTPUT_EXTENSION \"${CMAKE_CXX_OUTPUT_EXTENSION}\") set(CXXModules_default_build_type \"${CMAKE_BUILD_TYPE}\") diff --git a/Tests/RunCMake/CXXModules/NoCXX23TargetNotRequired.cmake b/Tests/RunCMake/CXXModules/NoCXX23TargetNotRequired.cmake new file mode 100644 index 0000000..2d9bffa --- /dev/null +++ b/Tests/RunCMake/CXXModules/NoCXX23TargetNotRequired.cmake @@ -0,0 +1,11 @@ +enable_language(CXX) +set(CMAKE_CXX_SCANDEP_SOURCE "echo") + +set(CMAKE_CXX_MODULE_STD 0) + +add_library(nocxx23target) +target_sources(nocxx23target + PRIVATE + FILE_SET fs TYPE CXX_MODULES FILES + sources/module.cxx) +target_compile_features(nocxx23target PRIVATE cxx_std_23) diff --git a/Tests/RunCMake/CXXModules/NoCXX23TargetRequired-result.txt b/Tests/RunCMake/CXXModules/NoCXX23TargetRequired-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CXXModules/NoCXX23TargetRequired-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CXXModules/NoCXX23TargetRequired-stderr.txt b/Tests/RunCMake/CXXModules/NoCXX23TargetRequired-stderr.txt new file mode 100644 index 0000000..56468d0 --- /dev/null +++ b/Tests/RunCMake/CXXModules/NoCXX23TargetRequired-stderr.txt @@ -0,0 +1,4 @@ +CMake Error in CMakeLists.txt: + The "CXX_MODULE_STD" property on the target "nocxx23target" requires that + the "__CMAKE::CXX23" target exist, but it was not provided by the + toolchain. diff --git a/Tests/RunCMake/CXXModules/NoCXX23TargetRequired.cmake b/Tests/RunCMake/CXXModules/NoCXX23TargetRequired.cmake new file mode 100644 index 0000000..fac05e2 --- /dev/null +++ b/Tests/RunCMake/CXXModules/NoCXX23TargetRequired.cmake @@ -0,0 +1,11 @@ +enable_language(CXX) +set(CMAKE_CXX_SCANDEP_SOURCE "echo") + +set(CMAKE_CXX_MODULE_STD 1) + +add_library(nocxx23target) +target_sources(nocxx23target + PRIVATE + FILE_SET fs TYPE CXX_MODULES FILES + sources/module.cxx) +target_compile_features(nocxx23target PRIVATE cxx_std_23) diff --git a/Tests/RunCMake/CXXModules/NoCXX23TargetUnset.cmake b/Tests/RunCMake/CXXModules/NoCXX23TargetUnset.cmake new file mode 100644 index 0000000..8f6a656 --- /dev/null +++ b/Tests/RunCMake/CXXModules/NoCXX23TargetUnset.cmake @@ -0,0 +1,13 @@ +enable_language(CXX) +set(CMAKE_CXX_SCANDEP_SOURCE "echo") + +# TODO(cxxmodules): Add instances of this test which test the policy +# of the property's unset behavior. +# set(CMAKE_CXX_MODULE_STD …) + +add_library(nocxx23target) +target_sources(nocxx23target + PRIVATE + FILE_SET fs TYPE CXX_MODULES FILES + sources/module.cxx) +target_compile_features(nocxx23target PRIVATE cxx_std_23) diff --git a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake index 297860b..2fd4c46 100644 --- a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake +++ b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake @@ -90,6 +90,13 @@ if ("cxx_std_23" IN_LIST CMAKE_CXX_COMPILE_FEATURES) run_cmake(CXXImportStdInvalidGenex) endif () +if ("cxx_std_23" IN_LIST CMAKE_CXX_COMPILE_FEATURES AND + NOT have_cxx23_import_std) + run_cmake(NoCXX23TargetUnset) + run_cmake(NoCXX23TargetNotRequired) + run_cmake(NoCXX23TargetRequired) +endif () + run_cmake(InstallBMI) run_cmake(InstallBMIGenericArgs) run_cmake(InstallBMIIgnore) -- cgit v0.12