diff --git a/Source/cmExportBuildFileGenerator.cxx b/Source/cmExportBuildFileGenerator.cxx index 35f45b0439..792a39eb58 100644 --- a/Source/cmExportBuildFileGenerator.cxx +++ b/Source/cmExportBuildFileGenerator.cxx @@ -186,15 +186,20 @@ cmExportFileGenerator::ExportInfo cmExportBuildFileGenerator::FindExportInfo( target->GetLocalGenerator()->GetGlobalGenerator()->GetBuildExportSets(); for (auto const& exp : allExportSets) { - auto const& exportSet = exp.second; + cmExportBuildFileGenerator const* const bfg = exp.second; + cmExportSet const* const exportSet = bfg->GetExportSet(); std::vector targets; - exportSet->GetTargets(targets); + bfg->GetTargets(targets); if (std::any_of( targets.begin(), targets.end(), [&name](TargetExport const& te) { return te.Name == name; })) { - exportSets.insert(exp.first); + if (exportSet) { + exportSets.insert(exportSet->GetName()); + } else { + exportSets.insert(exp.first); + } exportFiles.push_back(exp.first); - namespaces.insert(exportSet->GetNamespace()); + namespaces.insert(bfg->GetNamespace()); } } diff --git a/Tests/RunCMake/export/DependOnDoubleExport-result.txt b/Tests/RunCMake/export/DependOnDifferentNamespaceExport-result.txt similarity index 100% rename from Tests/RunCMake/export/DependOnDoubleExport-result.txt rename to Tests/RunCMake/export/DependOnDifferentNamespaceExport-result.txt diff --git a/Tests/RunCMake/export/DependOnDifferentNamespaceExport-stderr.txt b/Tests/RunCMake/export/DependOnDifferentNamespaceExport-stderr.txt new file mode 100644 index 0000000000..b1160886b3 --- /dev/null +++ b/Tests/RunCMake/export/DependOnDifferentNamespaceExport-stderr.txt @@ -0,0 +1,13 @@ +CMake Error in CMakeLists.txt: + export called with target "exported" which requires target "doubleexported" + that is not in this export set, but in another export set which is exported + multiple times with different namespaces:.* + .*/Tests/RunCMake/export/DependOnDifferentNamespaceExport-build/export1.cmake,.* + .*/Tests/RunCMake/export/DependOnDifferentNamespaceExport-build/export2.cmake. ++ + An exported target cannot depend upon another target which is exported in + more than one export set or with more than one namespace. Consider + consolidating the exports of the "doubleexported" target to a single + export. ++ +CMake Generate step failed. Build files cannot be regenerated correctly. diff --git a/Tests/RunCMake/export/DependOnDifferentNamespaceExport.cmake b/Tests/RunCMake/export/DependOnDifferentNamespaceExport.cmake new file mode 100644 index 0000000000..5f9cb69f62 --- /dev/null +++ b/Tests/RunCMake/export/DependOnDifferentNamespaceExport.cmake @@ -0,0 +1,9 @@ +add_library(doubleexported INTERFACE) +install(TARGETS doubleexported EXPORT exportset) +export(EXPORT exportset + FILE "${CMAKE_CURRENT_BINARY_DIR}/export1.cmake") +export(EXPORT exportset NAMESPACE test:: + FILE "${CMAKE_CURRENT_BINARY_DIR}/export2.cmake") +add_library(exported INTERFACE) +target_link_libraries(exported INTERFACE doubleexported) +export(TARGETS exported FILE "${CMAKE_CURRENT_BINARY_DIR}/exports.cmake") diff --git a/Tests/RunCMake/export/DependOnDifferentSetExport-result.txt b/Tests/RunCMake/export/DependOnDifferentSetExport-result.txt new file mode 100644 index 0000000000..d00491fd7e --- /dev/null +++ b/Tests/RunCMake/export/DependOnDifferentSetExport-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/export/DependOnDoubleExport-stderr.txt b/Tests/RunCMake/export/DependOnDifferentSetExport-stderr.txt similarity index 75% rename from Tests/RunCMake/export/DependOnDoubleExport-stderr.txt rename to Tests/RunCMake/export/DependOnDifferentSetExport-stderr.txt index c79b74e1fe..499ffa953d 100644 --- a/Tests/RunCMake/export/DependOnDoubleExport-stderr.txt +++ b/Tests/RunCMake/export/DependOnDifferentSetExport-stderr.txt @@ -1,13 +1,12 @@ CMake Error in CMakeLists.txt: export called with target "exported" which requires target "doubleexported" that is not in this export set, but in multiple other export sets:.* - .*/Tests/RunCMake/export/DependOnDoubleExport-build/exportset.cmake,.* - .*/Tests/RunCMake/export/DependOnDoubleExport-build/manual.cmake. + .*/Tests/RunCMake/export/DependOnDifferentSetExport-build/exportset.cmake,.* + .*/Tests/RunCMake/export/DependOnDifferentSetExport-build/manual.cmake. + An exported target cannot depend upon another target which is exported in more than one export set or with more than one namespace. Consider consolidating the exports of the "doubleexported" target to a single export. - - ++ CMake Generate step failed. Build files cannot be regenerated correctly. diff --git a/Tests/RunCMake/export/DependOnDifferentSetExport.cmake b/Tests/RunCMake/export/DependOnDifferentSetExport.cmake new file mode 100644 index 0000000000..8d108d7ef4 --- /dev/null +++ b/Tests/RunCMake/export/DependOnDifferentSetExport.cmake @@ -0,0 +1,7 @@ +add_library(doubleexported INTERFACE) +install(TARGETS doubleexported EXPORT exportset) +export(TARGETS doubleexported FILE "${CMAKE_CURRENT_BINARY_DIR}/manual.cmake") +export(EXPORT exportset FILE "${CMAKE_CURRENT_BINARY_DIR}/exportset.cmake") +add_library(exported INTERFACE) +target_link_libraries(exported INTERFACE doubleexported) +export(TARGETS exported FILE "${CMAKE_CURRENT_BINARY_DIR}/exports.cmake") diff --git a/Tests/RunCMake/export/DependOnDoubleExport.cmake b/Tests/RunCMake/export/DependOnDoubleExport.cmake index 8d108d7ef4..e126b3a497 100644 --- a/Tests/RunCMake/export/DependOnDoubleExport.cmake +++ b/Tests/RunCMake/export/DependOnDoubleExport.cmake @@ -1,7 +1,7 @@ add_library(doubleexported INTERFACE) install(TARGETS doubleexported EXPORT exportset) -export(TARGETS doubleexported FILE "${CMAKE_CURRENT_BINARY_DIR}/manual.cmake") -export(EXPORT exportset FILE "${CMAKE_CURRENT_BINARY_DIR}/exportset.cmake") +export(EXPORT exportset FILE "${CMAKE_CURRENT_BINARY_DIR}/export1.cmake") +export(EXPORT exportset FILE "${CMAKE_CURRENT_BINARY_DIR}/export2.cmake") add_library(exported INTERFACE) target_link_libraries(exported INTERFACE doubleexported) export(TARGETS exported FILE "${CMAKE_CURRENT_BINARY_DIR}/exports.cmake") diff --git a/Tests/RunCMake/export/RunCMakeTest.cmake b/Tests/RunCMake/export/RunCMakeTest.cmake index 2dcd146796..8dcea7f7ef 100644 --- a/Tests/RunCMake/export/RunCMakeTest.cmake +++ b/Tests/RunCMake/export/RunCMakeTest.cmake @@ -15,6 +15,8 @@ run_cmake(ForbiddenToExportPropertyWithGenExp) run_cmake(ExportPropertiesUndefined) run_cmake(DependOnNotExport) run_cmake(DependOnDoubleExport) +run_cmake(DependOnDifferentSetExport) +run_cmake(DependOnDifferentNamespaceExport) run_cmake(UnknownExport) run_cmake(NamelinkOnlyExport) run_cmake(SeparateNamelinkExport)