summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2024-02-16 13:42:14 (GMT)
committerBen Boeckel <ben.boeckel@kitware.com>2024-02-16 16:09:56 (GMT)
commite0633a951727b877e03d47987c264c26070b039a (patch)
tree5c14427eebb3837028e033dfd562ae66ff78cea9
parent150d7dbd683c05fb6266b2eb4622381d0d1bf5ea (diff)
downloadCMake-e0633a951727b877e03d47987c264c26070b039a.zip
CMake-e0633a951727b877e03d47987c264c26070b039a.tar.gz
CMake-e0633a951727b877e03d47987c264c26070b039a.tar.bz2
Tests/CXXModules: add a test importing from a `Ninja` install
This ensures that consuming from a single configuration generator works in all generators. See: #25568
-rw-r--r--Tests/RunCMake/CXXModules/RunCMakeTest.cmake4
-rw-r--r--Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/CMakeLists.txt41
-rw-r--r--Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/forward.cxx6
-rw-r--r--Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/importable.cxx10
-rw-r--r--Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/no_modules.cxx3
-rw-r--r--Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/private.cxx6
-rw-r--r--Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/subdir/importable.cxx6
-rw-r--r--Tests/RunCMake/CXXModules/examples/import-modules/CMakeLists.txt2
8 files changed, 78 insertions, 0 deletions
diff --git a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake
index 4997c15..aaf289c 100644
--- a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake
@@ -335,3 +335,7 @@ endfunction ()
# Installation happens within `run_cxx_module_test_ninja`.
set(RunCMake_CXXModules_INSTALL 0)
+
+set(test_set modules-from-ninja)
+run_cxx_module_test_ninja("export-${test_set}")
+run_cxx_module_test(import-modules "import-${test_set}" "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/examples/export-${test_set}-ninja-install" -DFROM_NINJA=1)
diff --git a/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/CMakeLists.txt
new file mode 100644
index 0000000..6036fde
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/CMakeLists.txt
@@ -0,0 +1,41 @@
+cmake_minimum_required(VERSION 3.24...3.28)
+project(cxx_modules_export_from_ninja CXX)
+
+include("${CMAKE_SOURCE_DIR}/../cxx-modules-rules.cmake")
+
+add_library(export_from_ninja STATIC)
+target_sources(export_from_ninja
+ PRIVATE
+ forward.cxx
+ PRIVATE
+ FILE_SET modules_private TYPE CXX_MODULES
+ BASE_DIRS
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ FILES
+ private.cxx
+ PUBLIC
+ FILE_SET modules TYPE CXX_MODULES
+ BASE_DIRS
+ "${CMAKE_CURRENT_SOURCE_DIR}"
+ FILES
+ importable.cxx
+ subdir/importable.cxx
+ )
+target_compile_features(export_from_ninja PUBLIC cxx_std_20)
+
+add_library(no_modules STATIC no_modules.cxx)
+
+install(TARGETS export_from_ninja no_modules
+ EXPORT CXXModules
+ FILE_SET modules DESTINATION "lib/cxx/miu")
+install(EXPORT CXXModules
+ NAMESPACE CXXModules::
+ DESTINATION "lib/cmake/export_from_ninja"
+ FILE "export_from_ninja-targets.cmake"
+ CXX_MODULES_DIRECTORY "export_from_ninja-cxx-modules")
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/export_from_ninja-config.cmake"
+ "include(\"\${CMAKE_CURRENT_LIST_DIR}/export_from_ninja-targets.cmake\")
+set(\${CMAKE_FIND_PACKAGE_NAME}_FOUND 1)
+")
+install(FILES "${CMAKE_CURRENT_BINARY_DIR}/export_from_ninja-config.cmake"
+ DESTINATION "lib/cmake/export_from_ninja")
diff --git a/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/forward.cxx b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/forward.cxx
new file mode 100644
index 0000000..7f53271
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/forward.cxx
@@ -0,0 +1,6 @@
+import priv;
+
+int forwarding()
+{
+ return from_private();
+}
diff --git a/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/importable.cxx b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/importable.cxx
new file mode 100644
index 0000000..8dfc41b
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/importable.cxx
@@ -0,0 +1,10 @@
+export module importable;
+
+extern "C++" {
+int forwarding();
+}
+
+export int from_import()
+{
+ return forwarding();
+}
diff --git a/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/no_modules.cxx b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/no_modules.cxx
new file mode 100644
index 0000000..eea854f
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/no_modules.cxx
@@ -0,0 +1,3 @@
+void no_modules()
+{
+}
diff --git a/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/private.cxx b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/private.cxx
new file mode 100644
index 0000000..c5b719a
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/private.cxx
@@ -0,0 +1,6 @@
+export module priv;
+
+export int from_private()
+{
+ return 0;
+}
diff --git a/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/subdir/importable.cxx b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/subdir/importable.cxx
new file mode 100644
index 0000000..07d6af6
--- /dev/null
+++ b/Tests/RunCMake/CXXModules/examples/export-modules-from-ninja/subdir/importable.cxx
@@ -0,0 +1,6 @@
+export module subdir_importable;
+
+export int from_subdir()
+{
+ return 0;
+}
diff --git a/Tests/RunCMake/CXXModules/examples/import-modules/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/import-modules/CMakeLists.txt
index 8e1db5d..16bc6d8 100644
--- a/Tests/RunCMake/CXXModules/examples/import-modules/CMakeLists.txt
+++ b/Tests/RunCMake/CXXModules/examples/import-modules/CMakeLists.txt
@@ -9,6 +9,8 @@ elseif (WITH_BMIS)
set(package_name "export_bmi_and_interfaces")
elseif (INCLUDE_PROPERTIES)
set(package_name "export_include_directories")
+elseif (FROM_NINJA)
+ set(package_name "export_from_ninja")
else ()
set(package_name "export_interfaces")
endif ()