Browse Source

Tests/CXXModules: test using targets that import `std`

Ben Boeckel 1 year ago
parent
commit
64548fef16

+ 6 - 0
Tests/RunCMake/CXXModules/RunCMakeTest.cmake

@@ -250,10 +250,16 @@ if ("named" IN_LIST CMake_TEST_MODULE_COMPILATION)
 
     if ("collation" IN_LIST CMake_TEST_MODULE_COMPILATION)
       run_cxx_module_test(import-std-not-in-export-build)
+      run_cxx_module_test(import-std-transitive import-std-transitive-not-in-export-build "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/examples/import-std-not-in-export-build-build")
 
       set(RunCMake_CXXModules_INSTALL 1)
       run_cxx_module_test(import-std-not-in-export-install)
       unset(RunCMake_CXXModules_INSTALL)
+      run_cxx_module_test(import-std-transitive import-std-transitive-not-in-export-install "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/examples/import-std-not-in-export-install-install")
+
+      run_cxx_module_test(import-std-transitive import-std-transitive-export-no-std-build "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/examples/import-std-export-no-std-build-build" -DEXPORT_NO_STD=1)
+      run_cxx_module_test(import-std-transitive import-std-transitive-export-no-std-install "-DCMAKE_PREFIX_PATH=${RunCMake_BINARY_DIR}/examples/import-std-export-no-std-install-install" -DEXPORT_NO_STD=1)
+    endif ()
   endif ()
 endif ()
 

+ 25 - 0
Tests/RunCMake/CXXModules/examples/import-std-transitive/CMakeLists.txt

@@ -0,0 +1,25 @@
+cmake_minimum_required(VERSION 3.29)
+
+if (EXPORT_NO_STD)
+  # Block making C++ `import std` targets.
+  add_library(__CMAKE::CXX23 IMPORTED INTERFACE)
+endif ()
+
+project(cxx_modules_import_std_transitive CXX)
+
+include("${CMAKE_SOURCE_DIR}/../cxx-modules-rules.cmake")
+
+if (EXPORT_NO_STD)
+  set(package "import_std_export_no_std")
+else ()
+  set(package "import_std_not_in_export")
+endif ()
+find_package("${package}" REQUIRED)
+
+set(CMAKE_CXX_MODULE_STD 0)
+
+add_executable(main
+  main.cxx)
+target_link_libraries(main PRIVATE "CXXModules::${package}")
+
+add_test(NAME main COMMAND main)

+ 6 - 0
Tests/RunCMake/CXXModules/examples/import-std-transitive/main.cxx

@@ -0,0 +1,6 @@
+import uses_std;
+
+int main(int argc, char* argv[])
+{
+  return f();
+}