From 69e452524129552e4891feb7949c4af1567a525f Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Sun, 14 May 2023 17:24:41 -0400 Subject: Tests/CXXModules: add example for private modules between targets Adapted from the example in issue #24652 by Ivan Garramona. --- Tests/RunCMake/CXXModules/RunCMakeTest.cmake | 3 +++ .../examples/req-private-other-target-build-result.txt | 1 + .../examples/req-private-other-target-build-stdout.txt | 1 + .../examples/req-private-other-target-stderr.txt | 9 +++++++++ .../examples/req-private-other-target/CMakeLists.txt | 16 ++++++++++++++++ .../CXXModules/examples/req-private-other-target/lib.cxx | 1 + .../examples/req-private-other-target/main.cxx | 7 +++++++ .../examples/req-private-other-target/priv.cxx | 1 + 8 files changed, 39 insertions(+) create mode 100644 Tests/RunCMake/CXXModules/examples/req-private-other-target-build-result.txt create mode 100644 Tests/RunCMake/CXXModules/examples/req-private-other-target-build-stdout.txt create mode 100644 Tests/RunCMake/CXXModules/examples/req-private-other-target-stderr.txt create mode 100644 Tests/RunCMake/CXXModules/examples/req-private-other-target/CMakeLists.txt create mode 100644 Tests/RunCMake/CXXModules/examples/req-private-other-target/lib.cxx create mode 100644 Tests/RunCMake/CXXModules/examples/req-private-other-target/main.cxx create mode 100644 Tests/RunCMake/CXXModules/examples/req-private-other-target/priv.cxx diff --git a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake index c1129ca..b088724 100644 --- a/Tests/RunCMake/CXXModules/RunCMakeTest.cmake +++ b/Tests/RunCMake/CXXModules/RunCMakeTest.cmake @@ -155,6 +155,9 @@ endif () # Tests which require collation work. if ("collation" IN_LIST CMake_TEST_MODULE_COMPILATION) run_cxx_module_test(public-req-private) + set(RunCMake_CXXModules_NO_TEST 1) + run_cxx_module_test(req-private-other-target) + unset(RunCMake_CXXModules_NO_TEST) endif () # Tests which use named modules in shared libraries. diff --git a/Tests/RunCMake/CXXModules/examples/req-private-other-target-build-result.txt b/Tests/RunCMake/CXXModules/examples/req-private-other-target-build-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/req-private-other-target-build-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CXXModules/examples/req-private-other-target-build-stdout.txt b/Tests/RunCMake/CXXModules/examples/req-private-other-target-build-stdout.txt new file mode 100644 index 0000000..912c2e9 --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/req-private-other-target-build-stdout.txt @@ -0,0 +1 @@ +((Ninja generators)?(Unable to use module 'lib.priv' as it is 'PRIVATE' and therefore not accessible outside of its owning target.)) diff --git a/Tests/RunCMake/CXXModules/examples/req-private-other-target-stderr.txt b/Tests/RunCMake/CXXModules/examples/req-private-other-target-stderr.txt new file mode 100644 index 0000000..5e4392a --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/req-private-other-target-stderr.txt @@ -0,0 +1,9 @@ +CMake Warning \(dev\) at CMakeLists.txt:7 \(target_sources\): + CMake's C\+\+ module support is experimental. It is meant only for + experimentation and feedback to CMake developers. +This warning is for project developers. Use -Wno-dev to suppress it. + +CMake Warning \(dev\): + C\+\+20 modules support via CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP is + experimental. It is meant only for compiler developers to try. +This warning is for project developers. Use -Wno-dev to suppress it. diff --git a/Tests/RunCMake/CXXModules/examples/req-private-other-target/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/req-private-other-target/CMakeLists.txt new file mode 100644 index 0000000..910c515 --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/req-private-other-target/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.26) +project(req_private_other_target CXX) + +include("${CMAKE_SOURCE_DIR}/../cxx-modules-rules.cmake") + +add_library(lib) +target_sources(lib + PUBLIC FILE_SET pub TYPE CXX_MODULES FILES lib.cxx + PRIVATE FILE_SET priv TYPE CXX_MODULES FILES priv.cxx +) +target_compile_features(lib PUBLIC cxx_std_20) + +add_executable(exe main.cxx) +target_link_libraries(exe PRIVATE lib) + +add_test(NAME exe COMMAND exe) diff --git a/Tests/RunCMake/CXXModules/examples/req-private-other-target/lib.cxx b/Tests/RunCMake/CXXModules/examples/req-private-other-target/lib.cxx new file mode 100644 index 0000000..066c2e1 --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/req-private-other-target/lib.cxx @@ -0,0 +1 @@ +export module lib; diff --git a/Tests/RunCMake/CXXModules/examples/req-private-other-target/main.cxx b/Tests/RunCMake/CXXModules/examples/req-private-other-target/main.cxx new file mode 100644 index 0000000..08b08ff --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/req-private-other-target/main.cxx @@ -0,0 +1,7 @@ +import lib; +import lib.priv; + +int main(int argc, char const* argv[]) +{ + return 0; +} diff --git a/Tests/RunCMake/CXXModules/examples/req-private-other-target/priv.cxx b/Tests/RunCMake/CXXModules/examples/req-private-other-target/priv.cxx new file mode 100644 index 0000000..a7cad3b --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/req-private-other-target/priv.cxx @@ -0,0 +1 @@ +export module lib.priv; -- cgit v0.12