Browse Source

Merge topic 'fix-export-export-info'

26691689a3 export: Allow compatible build-tree exports

Acked-by: Kitware Robot <[email protected]>
Tested-by: buildbot <[email protected]>
Merge-request: !10392
Brad King 10 months ago
parent
commit
18e041b28e

+ 9 - 4
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<TargetExport> 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());
     }
   }
 

+ 0 - 0
Tests/RunCMake/export/DependOnDoubleExport-result.txt → Tests/RunCMake/export/DependOnDifferentNamespaceExport-result.txt


+ 13 - 0
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.

+ 9 - 0
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")

+ 1 - 0
Tests/RunCMake/export/DependOnDifferentSetExport-result.txt

@@ -0,0 +1 @@
+1

+ 3 - 4
Tests/RunCMake/export/DependOnDoubleExport-stderr.txt → 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.

+ 7 - 0
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")

+ 2 - 2
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")

+ 2 - 0
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)