From 46c836644d2566e2a568318e5676eaa08f65501e Mon Sep 17 00:00:00 2001 From: Kyle Edwards Date: Tue, 11 Feb 2020 10:49:54 -0500 Subject: Ninja Multi-Config: Fix issue with "all" in CMAKE_NMC_DEFAULT_CONFIGS Prior to this fix, CMAKE_NMC_DEFAULT_CONFIGS would inherit "all" from the union of CMAKE_NMC_DEFAULT_BUILD_FILE_CONFIG and CMAKE_NMC_CROSS_CONFIGS. This is inconsistent with the behavior of the "all" target signifying CMAKE_NMC_CROSS_CONFIGS. Update "all" in CMAKE_NMC_DEFAULT_CONFIGS to inherit only from CMAKE_NMC_CROSS_CONFIGS. --- Source/cmGlobalNinjaGenerator.cxx | 12 ++++--- Source/cmGlobalNinjaGenerator.h | 2 +- Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake | 7 ++++ ...AliasListCross-target-configs-ninja-check.cmake | 37 ++++++++++++++++++++++ .../SimpleDefaultBuildAliasListCross.cmake | 1 + 5 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 Tests/RunCMake/NinjaMultiConfig/SimpleDefaultBuildAliasListCross-target-configs-ninja-check.cmake create mode 100644 Tests/RunCMake/NinjaMultiConfig/SimpleDefaultBuildAliasListCross.cmake diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 55efff2..35421b6 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -890,7 +890,8 @@ bool cmGlobalNinjaGenerator::OpenFileStream( } cm::optional> cmGlobalNinjaGenerator::ListSubsetWithAll( - const std::set& defaults, const std::vector& items) + const std::set& all, const std::set& defaults, + const std::vector& items) { std::set result; @@ -901,7 +902,7 @@ cm::optional> cmGlobalNinjaGenerator::ListSubsetWithAll( } else { return cm::nullopt; } - } else if (defaults.count(item)) { + } else if (all.count(item)) { result.insert(item); } else { return cm::nullopt; @@ -2640,7 +2641,7 @@ bool cmGlobalNinjaMultiGenerator::ReadCacheEntriesForBuild( std::vector 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 " @@ -2671,8 +2672,9 @@ bool cmGlobalNinjaMultiGenerator::ReadCacheEntriesForBuild( std::vector 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 " diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h index a59859e..3db8356 100644 --- a/Source/cmGlobalNinjaGenerator.h +++ b/Source/cmGlobalNinjaGenerator.h @@ -427,7 +427,7 @@ protected: const std::string& name); static cm::optional> ListSubsetWithAll( - const std::set& defaults, + const std::set& all, const std::set& defaults, const std::vector& items); virtual bool InspectConfigTypeVariables() { return true; } diff --git a/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake b/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake index 3626a29..9058b11 100644 --- a/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake +++ b/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") diff --git a/Tests/RunCMake/NinjaMultiConfig/SimpleDefaultBuildAliasListCross-target-configs-ninja-check.cmake b/Tests/RunCMake/NinjaMultiConfig/SimpleDefaultBuildAliasListCross-target-configs-ninja-check.cmake new file mode 100644 index 0000000..b6c77ab --- /dev/null +++ b/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} + ) diff --git a/Tests/RunCMake/NinjaMultiConfig/SimpleDefaultBuildAliasListCross.cmake b/Tests/RunCMake/NinjaMultiConfig/SimpleDefaultBuildAliasListCross.cmake new file mode 100644 index 0000000..2a5b708 --- /dev/null +++ b/Tests/RunCMake/NinjaMultiConfig/SimpleDefaultBuildAliasListCross.cmake @@ -0,0 +1 @@ +include("${CMAKE_CURRENT_SOURCE_DIR}/Simple.cmake") -- cgit v0.12