diff options
-rw-r--r-- | Help/cpack_gen/nuget.rst | 164 | ||||
-rw-r--r-- | Help/release/3.30.rst | 7 | ||||
-rw-r--r-- | Modules/Internal/CPack/CPackRPM.cmake | 2 | ||||
-rw-r--r-- | Source/cmGlobalCommonGenerator.cxx | 6 | ||||
-rw-r--r-- | Source/cmGlobalNinjaGenerator.cxx | 59 | ||||
-rw-r--r-- | Source/cmGlobalNinjaGenerator.h | 2 | ||||
-rw-r--r-- | Source/cmLocalCommonGenerator.cxx | 14 | ||||
-rw-r--r-- | Source/cmLocalNinjaGenerator.cxx | 7 | ||||
-rw-r--r-- | Source/cmNinjaTargetGenerator.cxx | 3 | ||||
-rw-r--r-- | Tests/RunCMake/add_subdirectory/ChangeConfigMulti.cmake | 1 | ||||
-rw-r--r-- | Tests/RunCMake/add_subdirectory/ChangeConfigMulti/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Tests/RunCMake/add_subdirectory/RunCMakeTest.cmake | 4 |
12 files changed, 180 insertions, 90 deletions
diff --git a/Help/cpack_gen/nuget.rst b/Help/cpack_gen/nuget.rst index e25364f..d97f0c0 100644 --- a/Help/cpack_gen/nuget.rst +++ b/Help/cpack_gen/nuget.rst @@ -34,6 +34,17 @@ List of CPack NuGet generator specific variables: :Mandatory: No :Default: ``OFF`` +.. variable:: CPACK_NUGET_PACKAGE_DEBUG + + Enable debug messages while executing CPack NuGet generator. + + :Mandatory: No + :Default: ``OFF`` + + +Required metadata variables +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + .. variable:: CPACK_NUGET_PACKAGE_NAME CPACK_NUGET_<compName>_PACKAGE_NAME @@ -74,22 +85,16 @@ List of CPack NuGet generator specific variables: :Mandatory: Yes :Default: :variable:`CPACK_PACKAGE_VENDOR` -.. variable:: CPACK_NUGET_PACKAGE_TITLE - CPACK_NUGET_<compName>_PACKAGE_TITLE - - A human-friendly title of the package, typically used in UI displays - as on nuget.org_ and the Package Manager in Visual Studio. If not - specified, the package ID is used. - - :Mandatory: No - :Default: - - :variable:`CPACK_COMPONENT_<compName>_DISPLAY_NAME`, - - :variable:`!CPACK_COMPONENT_GROUP_<groupName>_DISPLAY_NAME` +Optional metadata variables +~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. variable:: CPACK_NUGET_PACKAGE_OWNERS CPACK_NUGET_<compName>_PACKAGE_OWNERS + .. deprecated:: 3.30 + Use authors (:variable:`CPACK_NUGET_PACKAGE_AUTHORS`) instead. + A comma-separated list of the package creators using profile names on nuget.org_. This is often the same list as in authors, and is ignored when uploading the package to nuget.org_. @@ -120,6 +125,21 @@ List of CPack NuGet generator specific variables: :Mandatory: No :Default: None + :Supported: NuGet 4.9.0 and above + +.. variable:: CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME + CPACK_NUGET_<compName>_PACKAGE_LICENSE_FILE_NAME + + .. versionadded:: 3.20 + + The package's license file in :file:`.txt` or :file:`.md` format. + + If :variable:`!CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME` is specified, + :variable:`!CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION` is ignored. + + :Mandatory: No + :Default: None + :Supported: NuGet 4.9.0 and above .. variable:: CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION CPACK_NUGET_<compName>_PACKAGE_LICENSE_EXPRESSION @@ -139,19 +159,6 @@ List of CPack NuGet generator specific variables: :Mandatory: No :Default: None -.. variable:: CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME - CPACK_NUGET_<compName>_PACKAGE_LICENSE_FILE_NAME - - The package's license file in :file:`.txt` or :file:`.md` format. - - If :variable:`!CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME` is specified, - :variable:`!CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION` is ignored. - - .. versionadded:: 3.20 - - :Mandatory: No - :Default: None - .. variable:: CPACK_NUGET_PACKAGE_ICONURL CPACK_NUGET_<compName>_PACKAGE_ICONURL @@ -164,14 +171,6 @@ List of CPack NuGet generator specific variables: :Mandatory: No :Default: None -.. variable:: CPACK_NUGET_PACKAGE_REQUIRE_LICENSE_ACCEPTANCE - - When set to a true value, the user will be prompted to accept the license - before installing the package. - - :Mandatory: No - :Default: None - .. variable:: CPACK_NUGET_PACKAGE_ICON CPACK_NUGET_<compName>_PACKAGE_ICON @@ -182,10 +181,36 @@ List of CPack NuGet generator specific variables: :Mandatory: No :Default: None + :Supported: NuGet 5.3.0 and above + + +.. variable:: CPACK_NUGET_PACKAGE_README + CPACK_NUGET_<compName>_PACKAGE_README + + .. versionadded:: 3.30 + + The package path relative to the root of the package to a readme file. + Supported file formats include only Markdown (``*.md``). + + :Mandatory: No + :Default: None + :Supported: NuGet 5.10.0 preview 2 and above + +.. variable:: CPACK_NUGET_PACKAGE_REQUIRE_LICENSE_ACCEPTANCE + + When set to a true value, the user will be prompted to accept the license + before installing the package. + + :Mandatory: No + :Default: None .. variable:: CPACK_NUGET_PACKAGE_DESCRIPTION_SUMMARY CPACK_NUGET_<compName>_PACKAGE_DESCRIPTION_SUMMARY + .. deprecated:: 3.30 + Summary is being deprecated. Use description + (:variable:`CPACK_NUGET_PACKAGE_DESCRIPTION`) instead. + A short description of the package for UI display. If omitted, a truncated version of description is used. @@ -230,6 +255,71 @@ List of CPack NuGet generator specific variables: :Mandatory: No :Default: None +.. variable:: CPACK_NUGET_PACKAGE_REPOSITORY_URL + CPACK_NUGET_<compName>_REPOSITORY_URL + + .. versionadded:: 3.30 + + Repository metadata allows you to map the ``*.nupkg`` to the repository + that built it. This should be a publicly available URL that can be invoked + directly by a version control software. It should not be an HTML page as + this is meant for the computer. + + :Mandatory: No + :Default: None + :Supported: NuGet 4.0 and above + +.. variable:: CPACK_NUGET_PACKAGE_REPOSITORY_TYPE + CPACK_NUGET_<compName>_REPOSITORY_TYPE + + .. versionadded:: 3.30 + + A type of the VCS repository. When uploading a package to nuget.org_, the + type is limited to 100 characters. + + :Mandatory: Yes, if repository URL has been specified + :Default: None + :Supported: NuGet 4.0 and above + +.. variable:: CPACK_NUGET_PACKAGE_REPOSITORY_BRANCH + CPACK_NUGET_<compName>_REPOSITORY_BRANCH + + .. versionadded:: 3.30 + + A VSC branch name to build the package. + + :Mandatory: No + :Default: None + :Supported: NuGet 4.6 and above + +.. variable:: CPACK_NUGET_PACKAGE_REPOSITORY_COMMIT + CPACK_NUGET_<compName>_REPOSITORY_COMMIT + + .. versionadded:: 3.30 + + A SHA-1 hash of the commit to build the package. + + :Mandatory: No + :Default: None + :Supported: NuGet 4.6 and above + +.. variable:: CPACK_NUGET_PACKAGE_TITLE + CPACK_NUGET_<compName>_PACKAGE_TITLE + + A human-friendly title of the package, typically used in UI displays + as on nuget.org_ and the Package Manager in Visual Studio. If not + specified, the package ID is used. + + :Mandatory: No + :Default: + + - :variable:`CPACK_COMPONENT_<compName>_DISPLAY_NAME`, + - :variable:`!CPACK_COMPONENT_GROUP_<groupName>_DISPLAY_NAME` + + +Dependencies specification +~~~~~~~~~~~~~~~~~~~~~~~~~~ + .. variable:: CPACK_NUGET_PACKAGE_DEPENDENCIES CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES @@ -284,13 +374,6 @@ List of CPack NuGet generator specific variables: :Mandatory: No :Default: None -.. variable:: CPACK_NUGET_PACKAGE_DEBUG - - Enable debug messages while executing CPack NuGet generator. - - :Mandatory: No - :Default: ``OFF`` - Example usage ^^^^^^^^^^^^^ @@ -302,9 +385,8 @@ Example usage set(CPACK_PACKAGE_NAME SamplePackage) set(CPACK_PACKAGE_VERSION "1.0.0") set(CPACK_PACKAGE_VENDOR "Example Inc") - set(CPACK_NUGET_PACKAGE_OWNERS "Example Inc") + set(CPACK_NUGET_PACKAGE_AUTHORS "ExampleInc") set(CPACK_PACKAGE_DESCRIPTION "A .NET wrapper around the foobar library for frobbling bratchens") - set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A .NET wrapper around the foobar library for frobbling bratchens") set(CPACK_PACKAGE_HOMEPAGE_URL "https://www.example.com") set(CPACK_NUGET_PACKAGE_REPOSITORY_URL "https://github.com/example/libfoobar.git") set(CPACK_NUGET_PACKAGE_REPOSITORY_TYPE git) diff --git a/Help/release/3.30.rst b/Help/release/3.30.rst index ce489f6..6d515fd 100644 --- a/Help/release/3.30.rst +++ b/Help/release/3.30.rst @@ -179,6 +179,13 @@ CPack * The :cpack_gen:`CPack Inno Setup Generator` is now available on non-Windows hosts. +* The :cpack_gen:`CPack NuGet Generator` gained the + :variable:`CPACK_NUGET_PACKAGE_README`, + :variable:`CPACK_NUGET_PACKAGE_REPOSITORY_URL`, + :variable:`CPACK_NUGET_PACKAGE_REPOSITORY_TYPE`, + :variable:`CPACK_NUGET_PACKAGE_REPOSITORY_BRANCH`, and + :variable:`CPACK_NUGET_PACKAGE_REPOSITORY_COMMIT` variables. + * The :cpack_gen:`CPack NuGet Generator` can now generate dependency groups for framework-specific dependencies. The :variable:`CPACK_NUGET_PACKAGE_TFMS` variable was added to specify a list of target framework monikers (TFMs) diff --git a/Modules/Internal/CPack/CPackRPM.cmake b/Modules/Internal/CPack/CPackRPM.cmake index 4998d71..4a741ee 100644 --- a/Modules/Internal/CPack/CPackRPM.cmake +++ b/Modules/Internal/CPack/CPackRPM.cmake @@ -711,7 +711,7 @@ function(cpack_rpm_debugsymbol_check INSTALL_FILES WORKING_DIR) endif() get_file_permissions("${WORKING_DIR}/${F}" permissions_) - if(NOT "USER_EXECUTE" IN_LIST permissions_ AND + if(NOT "OWNER_EXECUTE" IN_LIST permissions_ AND NOT "GROUP_EXECUTE" IN_LIST permissions_ AND NOT "WORLD_EXECUTE" IN_LIST permissions_) if(CPACK_RPM_INSTALL_WITH_EXEC) diff --git a/Source/cmGlobalCommonGenerator.cxx b/Source/cmGlobalCommonGenerator.cxx index 513e3bf..b1b96d0 100644 --- a/Source/cmGlobalCommonGenerator.cxx +++ b/Source/cmGlobalCommonGenerator.cxx @@ -12,8 +12,8 @@ #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" +#include "cmLocalCommonGenerator.h" #include "cmLocalGenerator.h" -#include "cmMakefile.h" #include "cmStateDirectory.h" #include "cmStateSnapshot.h" #include "cmStateTypes.h" @@ -38,8 +38,8 @@ cmGlobalCommonGenerator::ComputeDirectoryTargets() const lg->GetStateSnapshot().GetDirectory().GetCurrentBinary(); DirectoryTarget& dirTarget = dirTargets[currentBinaryDir]; dirTarget.LG = lg.get(); - const std::vector<std::string>& configs = - lg->GetMakefile()->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); + std::vector<std::string> const& configs = + static_cast<cmLocalCommonGenerator const*>(lg.get())->GetConfigNames(); // The directory-level rule should depend on the target-level rules // for all targets in the directory. diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 4e6f164..96c8f25 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -603,6 +603,13 @@ cmDocumentationEntry cmGlobalNinjaGenerator::GetDocumentation() "Generates build.ninja files." }; } +std::vector<std::string> const& cmGlobalNinjaGenerator::GetConfigNames() const +{ + return static_cast<cmLocalNinjaGenerator const*>( + this->LocalGenerators.front().get()) + ->GetConfigNames(); +} + // Implemented in all cmGlobaleGenerator sub-classes. // Used in: // Source/cmLocalGenerator.cxx @@ -655,8 +662,7 @@ void cmGlobalNinjaGenerator::Generate() if (cmSystemTools::GetErrorOccurredFlag()) { this->RulesFileStream->setstate(std::ios::failbit); - for (auto const& config : this->Makefiles[0]->GetGeneratorConfigs( - cmMakefile::IncludeEmptyConfig)) { + for (std::string const& config : this->GetConfigNames()) { this->GetImplFileStream(config)->setstate(std::ios::failbit); this->GetConfigFileStream(config)->setstate(std::ios::failbit); } @@ -1491,9 +1497,7 @@ void cmGlobalNinjaGenerator::AddTargetAlias(const std::string& alias, for (std::string const& output : outputs) { this->TargetAliases[output].GeneratorTarget = nullptr; this->DefaultTargetAliases[output].GeneratorTarget = nullptr; - for (const std::string& config2 : - this->Makefiles.front()->GetGeneratorConfigs( - cmMakefile::IncludeEmptyConfig)) { + for (std::string const& config2 : this->GetConfigNames()) { this->Configs[config2].TargetAliases[output].GeneratorTarget = nullptr; } } @@ -1567,8 +1571,7 @@ void cmGlobalNinjaGenerator::WriteTargetAliases(std::ostream& os) } if (this->IsMultiConfig()) { - for (auto const& config : this->Makefiles.front()->GetGeneratorConfigs( - cmMakefile::IncludeEmptyConfig)) { + for (std::string const& config : this->GetConfigNames()) { for (auto const& ta : this->Configs[config].TargetAliases) { // Don't write ambiguous aliases. if (!ta.second.GeneratorTarget) { @@ -1630,8 +1633,7 @@ void cmGlobalNinjaGenerator::WriteFolderTargets(std::ostream& os) std::string const& currentBinaryDir = it.first; DirectoryTarget const& dt = it.second; std::vector<std::string> configs = - dt.LG->GetMakefile()->GetGeneratorConfigs( - cmMakefile::IncludeEmptyConfig); + static_cast<cmLocalNinjaGenerator const*>(dt.LG)->GetConfigNames(); // Setup target cmNinjaDeps configDeps; @@ -1827,8 +1829,7 @@ void cmGlobalNinjaGenerator::WriteBuiltinTargets(std::ostream& os) this->WriteTargetClean(os); this->WriteTargetHelp(os); - for (auto const& config : this->Makefiles[0]->GetGeneratorConfigs( - cmMakefile::IncludeEmptyConfig)) { + for (std::string const& config : this->GetConfigNames()) { this->WriteTargetDefault(*this->GetConfigFileStream(config)); } @@ -2025,8 +2026,7 @@ bool cmGlobalNinjaGenerator::WriteTargetCleanAdditional(std::ostream& os) std::string cleanScriptRel = "CMakeFiles/clean_additional.cmake"; std::string cleanScriptAbs = cmStrCat(lgr->GetBinaryDirectory(), '/', cleanScriptRel); - std::vector<std::string> configs = - this->Makefiles[0]->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); + std::vector<std::string> const& configs = this->GetConfigNames(); // Check if there are additional files to clean bool empty = true; @@ -2121,16 +2121,13 @@ void cmGlobalNinjaGenerator::WriteTargetClean(std::ostream& os) WriteRule(*this->RulesFileStream, rule); } - auto const configs = this->Makefiles.front()->GetGeneratorConfigs( - cmMakefile::IncludeEmptyConfig); - // Write build { cmNinjaBuild build("CLEAN"); build.Comment = "Clean all the built files."; build.Outputs.emplace_back(); - for (auto const& config : configs) { + for (std::string const& config : this->GetConfigNames()) { build.Outputs.front() = this->BuildAlias( this->NinjaOutputPath(this->GetCleanTargetName()), config); if (this->IsMultiConfig()) { @@ -2145,7 +2142,7 @@ void cmGlobalNinjaGenerator::WriteTargetClean(std::ostream& os) this->NinjaOutputPath(this->GetAdditionalCleanTargetName()), config)); } - for (auto const& fileConfig : configs) { + for (std::string const& fileConfig : this->GetConfigNames()) { if (fileConfig != config && !this->EnableCrossConfigBuild()) { continue; } @@ -2181,7 +2178,7 @@ void cmGlobalNinjaGenerator::WriteTargetClean(std::ostream& os) byproducts.emplace_back(GetByproductsForCleanTargetName()); build.Variables["TARGETS"] = cmJoin(byproducts, " "); - for (auto const& fileConfig : configs) { + for (std::string const& fileConfig : this->GetConfigNames()) { build.Variables["FILE_ARG"] = cmStrCat( "-f ", this->NinjaOutputPath( @@ -2197,7 +2194,7 @@ void cmGlobalNinjaGenerator::WriteTargetClean(std::ostream& os) this->NinjaOutputPath(this->GetCleanTargetName())); build.ExplicitDeps.emplace_back(); - for (auto const& config : configs) { + for (std::string const& config : this->GetConfigNames()) { build.ExplicitDeps.front() = this->BuildAlias( this->NinjaOutputPath(this->GetCleanTargetName()), config); this->WriteBuild(*this->GetConfigFileStream(config), build); @@ -2222,7 +2219,7 @@ void cmGlobalNinjaGenerator::WriteTargetClean(std::ostream& os) build.ExplicitDeps = this->ByproductsForCleanTarget; this->WriteBuild(os, build); - for (auto const& config : configs) { + for (std::string const& config : this->GetConfigNames()) { build.Outputs.front() = this->BuildAlias( this->ConvertToNinjaPath(GetByproductsForCleanTargetName()), config); build.ExplicitDeps = this->Configs[config].ByproductsForCleanTarget; @@ -3119,8 +3116,7 @@ bool cmGlobalNinjaMultiGenerator::OpenBuildFileStreams() << "# This file contains build statements common to all " "configurations.\n\n"; - auto const& configs = - this->Makefiles[0]->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); + std::vector<std::string> const& configs = this->GetConfigNames(); return std::all_of( configs.begin(), configs.end(), [this](std::string const& config) -> bool { // Open impl file. @@ -3163,8 +3159,7 @@ void cmGlobalNinjaMultiGenerator::CloseBuildFileStreams() this->DefaultFileStream.reset(); } // No error if it wasn't open - for (auto const& config : this->Makefiles[0]->GetGeneratorConfigs( - cmMakefile::IncludeEmptyConfig)) { + for (std::string const& config : this->GetConfigNames()) { if (this->ImplFileStreams[config]) { this->ImplFileStreams[config].reset(); } else { @@ -3206,8 +3201,7 @@ std::string cmGlobalNinjaMultiGenerator::GetNinjaConfigFilename( void cmGlobalNinjaMultiGenerator::AddRebuildManifestOutputs( cmNinjaDeps& outputs) const { - for (auto const& config : this->Makefiles.front()->GetGeneratorConfigs( - cmMakefile::IncludeEmptyConfig)) { + for (std::string const& config : this->GetConfigNames()) { outputs.push_back(this->NinjaOutputPath(GetNinjaImplFilename(config))); outputs.push_back(this->NinjaOutputPath(GetNinjaConfigFilename(config))); } @@ -3219,18 +3213,15 @@ void cmGlobalNinjaMultiGenerator::AddRebuildManifestOutputs( void cmGlobalNinjaMultiGenerator::GetQtAutoGenConfigs( std::vector<std::string>& configs) const { - auto allConfigs = - this->Makefiles[0]->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); + std::vector<std::string> const& allConfigs = this->GetConfigNames(); configs.insert(configs.end(), cm::cbegin(allConfigs), cm::cend(allConfigs)); } bool cmGlobalNinjaMultiGenerator::InspectConfigTypeVariables() { - cmList configsList{ this->Makefiles.front()->GetDefinition( - "CMAKE_CONFIGURATION_TYPES") }; - if (configsList.empty()) { - configsList.emplace_back(); - } + std::vector<std::string> configsList = + this->Makefiles.front()->GetGeneratorConfigs( + cmMakefile::IncludeEmptyConfig); std::set<std::string> configs(configsList.cbegin(), configsList.cend()); this->DefaultFileConfig = diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h index 9758627..6ad38fb 100644 --- a/Source/cmGlobalNinjaGenerator.h +++ b/Source/cmGlobalNinjaGenerator.h @@ -485,6 +485,8 @@ public: bool CheckCxxModuleSupport(CxxModuleSupportQuery query) override; protected: + std::vector<std::string> const& GetConfigNames() const; + void Generate() override; bool CheckALLOW_DUPLICATE_CUSTOM_TARGETS() const override { return true; } diff --git a/Source/cmLocalCommonGenerator.cxx b/Source/cmLocalCommonGenerator.cxx index aa953f4..14b3040 100644 --- a/Source/cmLocalCommonGenerator.cxx +++ b/Source/cmLocalCommonGenerator.cxx @@ -2,10 +2,12 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmLocalCommonGenerator.h" +#include <memory> #include <utility> #include <vector> #include "cmGeneratorTarget.h" +#include "cmGlobalGenerator.h" #include "cmMakefile.h" #include "cmOutputConverter.h" #include "cmStateDirectory.h" @@ -13,14 +15,18 @@ #include "cmStringAlgorithms.h" #include "cmValue.h" -class cmGlobalGenerator; - cmLocalCommonGenerator::cmLocalCommonGenerator(cmGlobalGenerator* gg, cmMakefile* mf) : cmLocalGenerator(gg, mf) { - this->ConfigNames = - this->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); + // Multi-config generators define one set of configurations at the top. + // Single-config generators nominally define one configuration at the top, + // but the implementation has never been strict about that, so look up the + // per-directory config to preserve behavior. + this->ConfigNames = (gg->IsMultiConfig() && !gg->GetMakefiles().empty() + ? gg->GetMakefiles().front().get() + : this->Makefile) + ->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); } cmLocalCommonGenerator::~cmLocalCommonGenerator() = default; diff --git a/Source/cmLocalNinjaGenerator.cxx b/Source/cmLocalNinjaGenerator.cxx index bc3da6e..46a95af 100644 --- a/Source/cmLocalNinjaGenerator.cxx +++ b/Source/cmLocalNinjaGenerator.cxx @@ -743,8 +743,6 @@ void cmLocalNinjaGenerator::WriteCustomCommandBuildStatement( bool cmLocalNinjaGenerator::HasUniqueByproducts( std::vector<std::string> const& byproducts, cmListFileBacktrace const& bt) { - std::vector<std::string> configs = - this->GetMakefile()->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig); cmGeneratorExpression ge(*this->GetCMakeInstance(), bt); for (std::string const& p : byproducts) { if (cmGeneratorExpression::Find(p) == std::string::npos) { @@ -752,7 +750,7 @@ bool cmLocalNinjaGenerator::HasUniqueByproducts( } std::set<std::string> seen; std::unique_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(p); - for (std::string const& config : configs) { + for (std::string const& config : this->GetConfigNames()) { for (std::string const& b : this->ExpandCustomCommandOutputPaths(*cge, config)) { if (!seen.insert(b).second) { @@ -800,8 +798,7 @@ std::string cmLocalNinjaGenerator::CreateUtilityOutput( std::string const base = cmStrCat(this->GetCurrentBinaryDirectory(), "/CMakeFiles/", targetName, '-'); // The output is not actually created so mark it symbolic. - for (std::string const& config : - this->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig)) { + for (std::string const& config : this->GetConfigNames()) { std::string const force = cmStrCat(base, config); if (cmSourceFile* sf = this->Makefile->GetOrCreateGeneratedSource(force)) { sf->SetProperty("SYMBOLIC", "1"); diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index 160689c..a10635a 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -87,8 +87,7 @@ cmNinjaTargetGenerator::cmNinjaTargetGenerator(cmGeneratorTarget* target) , LocalGenerator( static_cast<cmLocalNinjaGenerator*>(target->GetLocalGenerator())) { - for (auto const& fileConfig : - target->Makefile->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig)) { + for (auto const& fileConfig : this->LocalGenerator->GetConfigNames()) { this->Configs[fileConfig].MacOSXContentGenerator = cm::make_unique<MacOSXContentGeneratorType>(this, fileConfig); } diff --git a/Tests/RunCMake/add_subdirectory/ChangeConfigMulti.cmake b/Tests/RunCMake/add_subdirectory/ChangeConfigMulti.cmake new file mode 100644 index 0000000..449c5c8 --- /dev/null +++ b/Tests/RunCMake/add_subdirectory/ChangeConfigMulti.cmake @@ -0,0 +1 @@ +add_subdirectory(ChangeConfigMulti) diff --git a/Tests/RunCMake/add_subdirectory/ChangeConfigMulti/CMakeLists.txt b/Tests/RunCMake/add_subdirectory/ChangeConfigMulti/CMakeLists.txt new file mode 100644 index 0000000..3ea7fc5 --- /dev/null +++ b/Tests/RunCMake/add_subdirectory/ChangeConfigMulti/CMakeLists.txt @@ -0,0 +1 @@ +set(CMAKE_CONFIGURATION_TYPES NotDebug NotRelease) diff --git a/Tests/RunCMake/add_subdirectory/RunCMakeTest.cmake b/Tests/RunCMake/add_subdirectory/RunCMakeTest.cmake index 3c70d07..801abae 100644 --- a/Tests/RunCMake/add_subdirectory/RunCMakeTest.cmake +++ b/Tests/RunCMake/add_subdirectory/RunCMakeTest.cmake @@ -7,6 +7,10 @@ set(RunCMake_TEST_OPTIONS -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER}) run_cmake(System) unset(RunCMake_TEST_OPTIONS) +if(RunCMake_GENERATOR_IS_MULTI_CONFIG) + run_cmake_with_options(ChangeConfigMulti "-DCMAKE_CONFIGURATION_TYPES=Debug\\;Release") +endif() + macro(run_cmake_install case) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build) set(RunCMake_TEST_NO_CLEAN 1) |