Imported Upstream version 3.25.0
[platform/upstream/cmake.git] / Tests / RunCMake / CXXModules / NinjaDependInfoExport.cmake
1 # Fake out that we have dyndep; we only need to generate, not actually build
2 # here.
3 set(CMAKE_EXPERIMENTAL_CXX_MODULE_DYNDEP 1)
4 set(CMAKE_EXPERIMENTAL_CXX_SCANDEP_SOURCE "")
5
6 enable_language(CXX)
7
8 if (NOT CMAKE_GENERATOR MATCHES "Ninja")
9   message(FATAL_ERROR
10     "This test requires a 'Ninja' generator to be used.")
11 endif ()
12
13 add_library(ninja-exports-public)
14 target_sources(ninja-exports-public
15   PRIVATE
16     sources/module-impl.cxx
17     sources/module-internal-part-impl.cxx
18     sources/module-part-impl.cxx
19     sources/module-use.cxx
20   PUBLIC
21     FILE_SET modules TYPE CXX_MODULES
22     BASE_DIRS
23       "${CMAKE_CURRENT_SOURCE_DIR}/sources"
24     FILES
25       sources/module.cxx
26       sources/module-part.cxx
27     FILE_SET internal_partitions TYPE CXX_MODULES FILES
28       sources/module-internal-part.cxx)
29 target_compile_features(ninja-exports-public
30   PRIVATE
31     cxx_std_20)
32 set_property(TARGET ninja-exports-public
33   PROPERTY EXPORT_NAME "with-public")
34
35 install(TARGETS ninja-exports-public
36   EXPORT exp
37   FILE_SET modules
38     DESTINATION "lib/cxx"
39     COMPONENT "modules"
40   FILE_SET internal_partitions
41     DESTINATION "lib/cxx/internals"
42     COMPONENT "modules-internal")
43
44 add_library(ninja-exports-private)
45 target_sources(ninja-exports-private
46   PRIVATE
47     sources/module-impl.cxx
48     sources/module-internal-part-impl.cxx
49     sources/module-part-impl.cxx
50     sources/module-use.cxx
51   PRIVATE
52     FILE_SET modules TYPE CXX_MODULES
53     BASE_DIRS
54       "${CMAKE_CURRENT_SOURCE_DIR}/sources"
55     FILES
56       sources/module.cxx
57       sources/module-part.cxx
58     FILE_SET internal_partitions TYPE CXX_MODULES FILES
59       sources/module-internal-part.cxx)
60 target_compile_features(ninja-exports-private
61   PRIVATE
62     cxx_std_20)
63 set_property(TARGET ninja-exports-private
64   PROPERTY EXPORT_NAME "with-private")
65
66 install(TARGETS ninja-exports-private
67   EXPORT exp)
68
69 # Test multiple build exports.
70 export(EXPORT exp
71   FILE "${CMAKE_BINARY_DIR}/lib/cmake/export1/export1-targets.cmake"
72   NAMESPACE export1::
73   CXX_MODULES_DIRECTORY "cxx-modules")
74 export(EXPORT exp
75   FILE "${CMAKE_BINARY_DIR}/lib/cmake/export2/export2-targets.cmake"
76   CXX_MODULES_DIRECTORY "cxx-modules")
77
78 # Test multiple install exports.
79 install(EXPORT exp
80   DESTINATION "lib/cmake/export1"
81   NAMESPACE export1::
82   CXX_MODULES_DIRECTORY "cxx-modules")
83 install(EXPORT exp
84   DESTINATION "lib/cmake/export2"
85   CXX_MODULES_DIRECTORY "cxx-modules")