diff options
author | Tyler <tylerbrawl@gmail.com> | 2023-05-13 00:58:35 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2023-05-23 19:01:32 (GMT) |
commit | f2a699261b9d3d494bc791caad2d8f1fb21d6b4b (patch) | |
tree | 111656c86f15f7c647f5057d228aee293694a0cb | |
parent | f9677cc1223fb23f6e6c329e9f7de954639554d1 (diff) | |
download | CMake-f2a699261b9d3d494bc791caad2d8f1fb21d6b4b.zip CMake-f2a699261b9d3d494bc791caad2d8f1fb21d6b4b.tar.gz CMake-f2a699261b9d3d494bc791caad2d8f1fb21d6b4b.tar.bz2 |
cxxmodules: Do not expect collator install scripts with no CXX_MODULES
Calling `install(EXPORT)` with the `CXX_MODULES_DIRECTORY` parameter
leads to installation rules being generated which `include()` CMake
scripts that set the `IMPORTED_CXX_MODULES_[CONFIG]` target property for
relevant targets. However, these scripts don't get generated for
targets in an export set which don't have any C++20 modules. When the
installation rules attempt to `include()` the missing scripts, the
install fails.
Co-authored-by: Brad King <brad.king@kitware.com>
14 files changed, 48 insertions, 6 deletions
diff --git a/Source/cmExportBuildFileGenerator.cxx b/Source/cmExportBuildFileGenerator.cxx index 437ae69..a3637d8 100644 --- a/Source/cmExportBuildFileGenerator.cxx +++ b/Source/cmExportBuildFileGenerator.cxx @@ -542,6 +542,12 @@ bool cmExportBuildFileGenerator::GenerateImportCxxModuleConfigTargetInclusion( os.SetCopyIfDifferent(true); for (auto const* tgt : this->ExportedTargets) { + // Only targets with C++ module sources will have a + // collator-generated install script. + if (!tgt->HaveCxx20ModuleSources()) { + continue; + } + os << "include(\"${CMAKE_CURRENT_LIST_DIR}/target-" << tgt->GetExportName() << '-' << config << ".cmake\")\n"; } diff --git a/Source/cmExportInstallFileGenerator.cxx b/Source/cmExportInstallFileGenerator.cxx index 51c91f3..df119ae 100644 --- a/Source/cmExportInstallFileGenerator.cxx +++ b/Source/cmExportInstallFileGenerator.cxx @@ -752,6 +752,12 @@ bool cmExportInstallFileGenerator:: auto& prop_files = this->ConfigCxxModuleTargetFiles[config]; for (auto const* tgt : this->ExportedTargets) { + // Only targets with C++ module sources will have a + // collator-generated install script. + if (!tgt->HaveCxx20ModuleSources()) { + continue; + } + auto prop_filename = cmStrCat("target-", tgt->GetExportName(), '-', filename_config, ".cmake"); prop_files.emplace_back(cmStrCat(dest, prop_filename)); diff --git a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/CMakeLists.txt index a450b7e..62971a3 100644 --- a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/CMakeLists.txt +++ b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/CMakeLists.txt @@ -21,7 +21,9 @@ target_sources(export_bmi_and_interfaces importable.cxx) target_compile_features(export_bmi_and_interfaces PUBLIC cxx_std_20) -install(TARGETS export_bmi_and_interfaces +add_library(no_modules STATIC no_modules.cxx) + +install(TARGETS export_bmi_and_interfaces no_modules EXPORT CXXModules FILE_SET modules DESTINATION "lib/cxx/miu" CXX_MODULES_BMI DESTINATION "lib/cxx/bmi") diff --git a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/no_modules.cxx b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/no_modules.cxx new file mode 100644 index 0000000..eea854f --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-build/no_modules.cxx @@ -0,0 +1,3 @@ +void no_modules() +{ +} diff --git a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/CMakeLists.txt index a5574fe..bc19d93 100644 --- a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/CMakeLists.txt +++ b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/CMakeLists.txt @@ -21,7 +21,9 @@ target_sources(export_bmi_and_interfaces importable.cxx) target_compile_features(export_bmi_and_interfaces PUBLIC cxx_std_20) -install(TARGETS export_bmi_and_interfaces +add_library(no_modules STATIC no_modules.cxx) + +install(TARGETS export_bmi_and_interfaces no_modules EXPORT CXXModules FILE_SET modules DESTINATION "lib/cxx/miu" CXX_MODULES_BMI DESTINATION "lib/cxx/bmi") diff --git a/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/no_modules.cxx b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/no_modules.cxx new file mode 100644 index 0000000..eea854f --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/export-bmi-and-interface-install/no_modules.cxx @@ -0,0 +1,3 @@ +void no_modules() +{ +} diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-build/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-build/CMakeLists.txt index 8584dce..62352ff 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-build/CMakeLists.txt +++ b/Tests/RunCMake/CXXModules/examples/export-interface-build/CMakeLists.txt @@ -21,7 +21,9 @@ target_sources(export_interfaces importable.cxx) target_compile_features(export_interfaces PUBLIC cxx_std_20) -install(TARGETS export_interfaces +add_library(no_modules STATIC no_modules.cxx) + +install(TARGETS export_interfaces no_modules EXPORT CXXModules FILE_SET modules DESTINATION "lib/cxx/miu") export(EXPORT CXXModules diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-build/no_modules.cxx b/Tests/RunCMake/CXXModules/examples/export-interface-build/no_modules.cxx new file mode 100644 index 0000000..eea854f --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/export-interface-build/no_modules.cxx @@ -0,0 +1,3 @@ +void no_modules() +{ +} diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-install/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-install/CMakeLists.txt index b5c6224..15c91d9 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-install/CMakeLists.txt +++ b/Tests/RunCMake/CXXModules/examples/export-interface-install/CMakeLists.txt @@ -21,7 +21,9 @@ target_sources(export_interfaces importable.cxx) target_compile_features(export_interfaces PUBLIC cxx_std_20) -install(TARGETS export_interfaces +add_library(no_modules STATIC no_modules.cxx) + +install(TARGETS export_interfaces no_modules EXPORT CXXModules FILE_SET modules DESTINATION "lib/cxx/miu") install(EXPORT CXXModules diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-install/no_modules.cxx b/Tests/RunCMake/CXXModules/examples/export-interface-install/no_modules.cxx new file mode 100644 index 0000000..eea854f --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/export-interface-install/no_modules.cxx @@ -0,0 +1,3 @@ +void no_modules() +{ +} diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/CMakeLists.txt index 7633bec..7d04c50 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/CMakeLists.txt +++ b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/CMakeLists.txt @@ -21,7 +21,9 @@ target_sources(export_interfaces_no_properties importable.cxx) target_compile_features(export_interfaces_no_properties PUBLIC cxx_std_20) -install(TARGETS export_interfaces_no_properties +add_library(no_modules STATIC no_modules.cxx) + +install(TARGETS export_interfaces_no_properties no_modules EXPORT CXXModules FILE_SET modules DESTINATION "lib/cxx/miu") export(EXPORT CXXModules diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/no_modules.cxx b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/no_modules.cxx new file mode 100644 index 0000000..eea854f --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-build/no_modules.cxx @@ -0,0 +1,3 @@ +void no_modules() +{ +} diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/CMakeLists.txt b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/CMakeLists.txt index 75f2440..c0db766 100644 --- a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/CMakeLists.txt +++ b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/CMakeLists.txt @@ -21,7 +21,9 @@ target_sources(export_interfaces_no_properties importable.cxx) target_compile_features(export_interfaces_no_properties PUBLIC cxx_std_20) -install(TARGETS export_interfaces_no_properties +add_library(no_modules STATIC no_modules.cxx) + +install(TARGETS export_interfaces_no_properties no_modules EXPORT CXXModules FILE_SET modules DESTINATION "lib/cxx/miu") install(EXPORT CXXModules diff --git a/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/no_modules.cxx b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/no_modules.cxx new file mode 100644 index 0000000..eea854f --- /dev/null +++ b/Tests/RunCMake/CXXModules/examples/export-interface-no-properties-install/no_modules.cxx @@ -0,0 +1,3 @@ +void no_modules() +{ +} |