summaryrefslogtreecommitdiffstats
path: root/Tests
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2023-10-20 02:39:30 (GMT)
committerBen Boeckel <ben.boeckel@kitware.com>2023-10-20 11:18:33 (GMT)
commited45432571e23ccba77cdb64aa3eb7e109e73329 (patch)
tree70bf712bfe2b7faba76127ae84f125f546052b7e /Tests
parent0973cd670231ec6a3e09cf22065e4b7dec4503f5 (diff)
downloadCMake-ed45432571e23ccba77cdb64aa3eb7e109e73329.zip
CMake-ed45432571e23ccba77cdb64aa3eb7e109e73329.tar.gz
CMake-ed45432571e23ccba77cdb64aa3eb7e109e73329.tar.bz2
cmNinjaTargetGenerator: do not order-depend on C++ module sources
C++ module sources should not be included by any other TUs, so their presence cannot matter for order-only dependencies of the entire target. Exclude them. Update CMP0154 to take this into consideration and add tests to the `CXXModules` suite (which already deals with module support detection).
Diffstat (limited to 'Tests')
-rw-r--r--Tests/RunCMake/CXXModules/RunCMakeTest.cmake21
-rw-r--r--Tests/RunCMake/CXXModules/examples/ninja-cmp0154-build-check.cmake4
-rw-r--r--Tests/RunCMake/CXXModules/examples/ninja-cmp0154/CMakeLists.txt31
-rw-r--r--Tests/RunCMake/CXXModules/examples/ninja-cmp0154/importable.cxx.in5
-rw-r--r--Tests/RunCMake/CXXModules/examples/ninja-cmp0154/main.cxx8
-rw-r--r--Tests/RunCMake/CXXModules/examples/ninja-cmp0154/unrelated.cxx4
6 files changed, 72 insertions, 1 deletions
diff --git a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake
index 2938fa8..e687e9f 100644
--- a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake
@@ -133,7 +133,11 @@ function (run_cxx_module_test directory)
${ARGN})
run_cmake("examples/${test_name}")
set(RunCMake_TEST_NO_CLEAN 1)
- run_cmake_command("examples/${test_name}-build" "${CMAKE_COMMAND}" --build . --config Debug)
+ if (RunCMake_CXXModules_TARGET)
+ run_cmake_command("examples/${test_name}-build" "${CMAKE_COMMAND}" --build . --config Debug --target "${RunCMake_CXXModules_TARGET}")
+ else ()
+ run_cmake_command("examples/${test_name}-build" "${CMAKE_COMMAND}" --build . --config Debug)
+ endif ()
if (RunCMake_CXXModules_INSTALL)
run_cmake_command("examples/${test_name}-install" "${CMAKE_COMMAND}" --build . --target install --config Debug)
endif ()
@@ -142,8 +146,23 @@ function (run_cxx_module_test directory)
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 ()
+
string(REPLACE "," ";" CMake_TEST_MODULE_COMPILATION "${CMake_TEST_MODULE_COMPILATION}")
+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 ()
+
# Tests which use named modules.
if ("named" IN_LIST CMake_TEST_MODULE_COMPILATION)
run_cxx_module_test(simple)
diff --git a/Tests/RunCMake/CXXModules/examples/ninja-cmp0154-build-check.cmake b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154-build-check.cmake
new file mode 100644
index 0000000..6c4812b
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154-build-check.cmake
@@ -0,0 +1,4 @@
+if (EXISTS "${RunCMake_TEST_BINARY_DIR}/importable.cxx")
+ list(APPEND RunCMake_TEST_FAILED
+ "The `importable.cxx` file should not be generated to compile `unrelated`'s object")
+endif ()
diff --git a/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/CMakeLists.txt
new file mode 100644
index 0000000..1aa36c1
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/CMakeLists.txt
@@ -0,0 +1,31 @@
+cmake_minimum_required(VERSION 3.24...3.28)
+project(cxx_modules_ninja_cmp0154 CXX)
+
+include("${CMAKE_SOURCE_DIR}/../cxx-modules-rules.cmake")
+
+add_custom_command(
+ OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/importable.cxx"
+ DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/importable.cxx.in"
+ COMMAND "${CMAKE_COMMAND}"
+ -E copy_if_different
+ "${CMAKE_CURRENT_SOURCE_DIR}/importable.cxx.in"
+ "${CMAKE_CURRENT_BINARY_DIR}/importable.cxx"
+ COMMENT "Copying 'importable.cxx'")
+
+add_executable(ninja_cmp0154)
+target_sources(ninja_cmp0154
+ PRIVATE
+ main.cxx
+ unrelated.cxx
+ PUBLIC
+ FILE_SET CXX_MODULES
+ BASE_DIRS
+ "${CMAKE_CURRENT_BINARY_DIR}"
+ FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/importable.cxx")
+target_compile_features(ninja_cmp0154 PUBLIC cxx_std_20)
+set_property(SOURCE unrelated.cxx
+ PROPERTY
+ CXX_SCAN_FOR_MODULES 0)
+
+add_test(NAME ninja_cmp0154 COMMAND ninja_cmp0154)
diff --git a/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/importable.cxx.in b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/importable.cxx.in
new file mode 100644
index 0000000..a9287d7
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/importable.cxx.in
@@ -0,0 +1,5 @@
+export module importable;
+
+export int from_import() {
+ return 0;
+}
diff --git a/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/main.cxx b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/main.cxx
new file mode 100644
index 0000000..1ac4850
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/main.cxx
@@ -0,0 +1,8 @@
+import importable;
+
+extern int unrelated();
+
+int main(int argc, char* argv[])
+{
+ return from_import() + unrelated();
+}
diff --git a/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/unrelated.cxx b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/unrelated.cxx
new file mode 100644
index 0000000..d54a47f
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/ninja-cmp0154/unrelated.cxx
@@ -0,0 +1,4 @@
+int unrelated()
+{
+ return 0;
+}