Explorar el Código

Merge topic 'ninja-multi-default-configs-fix'

46c836644d Ninja Multi-Config: Fix issue with "all" in CMAKE_NMC_DEFAULT_CONFIGS

Acked-by: Kitware Robot <[email protected]>
Merge-request: !4349
Brad King hace 5 años
padre
commit
566a9c8467

+ 7 - 5
Source/cmGlobalNinjaGenerator.cxx

@@ -891,7 +891,8 @@ bool cmGlobalNinjaGenerator::OpenFileStream(
 }
 
 cm::optional<std::set<std::string>> cmGlobalNinjaGenerator::ListSubsetWithAll(
-  const std::set<std::string>& defaults, const std::vector<std::string>& items)
+  const std::set<std::string>& all, const std::set<std::string>& defaults,
+  const std::vector<std::string>& items)
 {
   std::set<std::string> result;
 
@@ -902,7 +903,7 @@ cm::optional<std::set<std::string>> cmGlobalNinjaGenerator::ListSubsetWithAll(
       } else {
         return cm::nullopt;
       }
-    } else if (defaults.count(item)) {
+    } else if (all.count(item)) {
       result.insert(item);
     } else {
       return cm::nullopt;
@@ -2641,7 +2642,7 @@ bool cmGlobalNinjaMultiGenerator::ReadCacheEntriesForBuild(
   std::vector<std::string> crossConfigsVec;
   cmExpandList(state.GetSafeCacheEntryValue("CMAKE_NMC_CROSS_CONFIGS"),
                crossConfigsVec);
-  auto crossConfigs = ListSubsetWithAll(configs, crossConfigsVec);
+  auto crossConfigs = ListSubsetWithAll(configs, configs, crossConfigsVec);
   if (!crossConfigs) {
     std::ostringstream msg;
     msg << "CMAKE_NMC_CROSS_CONFIGS is not a subset of "
@@ -2672,8 +2673,9 @@ bool cmGlobalNinjaMultiGenerator::ReadCacheEntriesForBuild(
   std::vector<std::string> defaultConfigsVec;
   cmExpandList(defaultConfigsString, defaultConfigsVec);
   if (!this->DefaultFileConfig.empty()) {
-    auto defaultConfigs = ListSubsetWithAll(
-      this->GetCrossConfigs(this->DefaultFileConfig), defaultConfigsVec);
+    auto defaultConfigs =
+      ListSubsetWithAll(this->GetCrossConfigs(this->DefaultFileConfig),
+                        this->CrossConfigs, defaultConfigsVec);
     if (!defaultConfigs) {
       std::ostringstream msg;
       msg << "CMAKE_NMC_DEFAULT_CONFIGS is not a subset of "

+ 1 - 1
Source/cmGlobalNinjaGenerator.h

@@ -427,7 +427,7 @@ protected:
                       const std::string& name);
 
   static cm::optional<std::set<std::string>> ListSubsetWithAll(
-    const std::set<std::string>& defaults,
+    const std::set<std::string>& all, const std::set<std::string>& defaults,
     const std::vector<std::string>& items);
 
   virtual bool InspectConfigTypeVariables() { return true; }

+ 7 - 0
Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake

@@ -132,6 +132,13 @@ run_cmake_build(SimpleDefaultBuildAliasList all-configs "" all)
 run_ninja(SimpleDefaultBuildAliasList all-relwithdebinfo build.ninja all:RelWithDebInfo)
 run_ninja(SimpleDefaultBuildAliasList clean-configs build.ninja clean)
 
+set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/SimpleDefaultBuildAliasListCross-build)
+set(RunCMake_TEST_OPTIONS "-DCMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG=RelWithDebInfo;-DCMAKE_NMC_DEFAULT_CONFIGS=all;-DCMAKE_NMC_CROSS_CONFIGS=Debug\\;Release")
+run_cmake_configure(SimpleDefaultBuildAliasListCross)
+unset(RunCMake_TEST_OPTIONS)
+include(${RunCMake_TEST_BINARY_DIR}/target_files.cmake)
+run_ninja(SimpleDefaultBuildAliasListCross target-configs build.ninja simpleexe)
+
 unset(RunCMake_TEST_BINARY_DIR)
 
 set(RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release;-DCMAKE_NMC_CROSS_CONFIGS=Debug\\;Release\\;RelWithDebInfo")

+ 37 - 0
Tests/RunCMake/NinjaMultiConfig/SimpleDefaultBuildAliasListCross-target-configs-ninja-check.cmake

@@ -0,0 +1,37 @@
+check_files("${RunCMake_TEST_BINARY_DIR}"
+  INCLUDE
+    ${GENERATED_FILES}
+
+    ${TARGET_FILE_simpleexe_Debug}
+    ${TARGET_OBJECT_FILES_simpleexe_Debug}
+
+    ${TARGET_FILE_simpleshared_Debug}
+    ${TARGET_LINKER_FILE_simpleshared_Debug}
+    ${TARGET_OBJECT_FILES_simpleshared_Debug}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Debug}
+
+    ${TARGET_FILE_simpleexe_Release}
+    ${TARGET_OBJECT_FILES_simpleexe_Release}
+
+    ${TARGET_FILE_simpleshared_Release}
+    ${TARGET_LINKER_FILE_simpleshared_Release}
+    ${TARGET_OBJECT_FILES_simpleshared_Release}
+
+    ${TARGET_OBJECT_FILES_simpleobj_Release}
+
+  EXCLUDE
+    ${TARGET_OBJECT_FILES_simplestatic_Debug}
+
+    ${TARGET_OBJECT_FILES_simplestatic_Release}
+
+    ${TARGET_OBJECT_FILES_simpleexe_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleshared_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simplestatic_MinSizeRel}
+    ${TARGET_OBJECT_FILES_simpleobj_MinSizeRel}
+
+    ${TARGET_OBJECT_FILES_simpleexe_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleshared_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simplestatic_RelWithDebInfo}
+    ${TARGET_OBJECT_FILES_simpleobj_RelWithDebInfo}
+  )

+ 1 - 0
Tests/RunCMake/NinjaMultiConfig/SimpleDefaultBuildAliasListCross.cmake

@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_SOURCE_DIR}/Simple.cmake")