summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Neundorf <neundorf@kde.org>2023-02-18 22:23:11 (GMT)
committerAlexander Neundorf <neundorf@kde.org>2023-02-18 22:23:11 (GMT)
commitf6f8f89e6cc03da0c423a239f47a161dab3c7cb2 (patch)
treea5521e588fd678ee7944f36faf2f3c13e7e96473
parent0429a37e482219480ce7426b035d3abd822d99d3 (diff)
downloadCMake-f6f8f89e6cc03da0c423a239f47a161dab3c7cb2.zip
CMake-f6f8f89e6cc03da0c423a239f47a161dab3c7cb2.tar.gz
CMake-f6f8f89e6cc03da0c423a239f47a161dab3c7cb2.tar.bz2
Kate: support for the targets of multi config ninja
With this patch, cmake now generates the targets once for each config into the kate project file, so users can build the targets for all configs with this generator.
-rw-r--r--Source/cmExtraKateGenerator.cxx58
-rw-r--r--Source/cmExtraKateGenerator.h1
2 files changed, 34 insertions, 25 deletions
diff --git a/Source/cmExtraKateGenerator.cxx b/Source/cmExtraKateGenerator.cxx
index 2707e09..6e6d009 100644
--- a/Source/cmExtraKateGenerator.cxx
+++ b/Source/cmExtraKateGenerator.cxx
@@ -85,6 +85,7 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
const std::string& makeArgs =
mf->GetSafeDefinition("CMAKE_KATE_MAKE_ARGUMENTS");
std::string const& homeOutputDir = lg.GetBinaryDirectory();
+ const auto configs = mf->GetGeneratorConfigs(cmMakefile::IncludeEmptyConfig);
/* clang-format off */
fout <<
@@ -108,16 +109,16 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
// this is for kate >= 4.13:
fout << "\t\t\"targets\":[\n";
- this->AppendTarget(fout, "all", make, makeArgs, homeOutputDir,
+ this->AppendTarget(fout, "all", configs, make, makeArgs, homeOutputDir,
homeOutputDir);
- this->AppendTarget(fout, "clean", make, makeArgs, homeOutputDir,
+ this->AppendTarget(fout, "clean", configs, make, makeArgs, homeOutputDir,
homeOutputDir);
// add all executable and library targets and some of the GLOBAL
// and UTILITY targets
for (const auto& localGen : this->GlobalGenerator->GetLocalGenerators()) {
const auto& targets = localGen->GetGeneratorTargets();
- std::string currentDir = localGen->GetCurrentBinaryDirectory();
+ const std::string currentDir = localGen->GetCurrentBinaryDirectory();
bool topLevel = (currentDir == localGen->GetBinaryDirectory());
for (const auto& target : targets) {
@@ -141,8 +142,8 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
}
}
if (insertTarget) {
- this->AppendTarget(fout, targetName, make, makeArgs, currentDir,
- homeOutputDir);
+ this->AppendTarget(fout, targetName, configs, make, makeArgs,
+ currentDir, homeOutputDir);
}
} break;
case cmStateEnums::UTILITY:
@@ -157,20 +158,20 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
break;
}
- this->AppendTarget(fout, targetName, make, makeArgs, currentDir,
- homeOutputDir);
+ this->AppendTarget(fout, targetName, configs, make, makeArgs,
+ currentDir, homeOutputDir);
break;
case cmStateEnums::EXECUTABLE:
case cmStateEnums::STATIC_LIBRARY:
case cmStateEnums::SHARED_LIBRARY:
case cmStateEnums::MODULE_LIBRARY:
case cmStateEnums::OBJECT_LIBRARY: {
- this->AppendTarget(fout, targetName, make, makeArgs, currentDir,
- homeOutputDir);
+ this->AppendTarget(fout, targetName, configs, make, makeArgs,
+ currentDir, homeOutputDir);
if (!this->UseNinja) {
std::string fastTarget = cmStrCat(targetName, "/fast");
- this->AppendTarget(fout, fastTarget, make, makeArgs, currentDir,
- homeOutputDir);
+ this->AppendTarget(fout, fastTarget, configs, make, makeArgs,
+ currentDir, homeOutputDir);
}
} break;
@@ -184,29 +185,36 @@ void cmExtraKateGenerator::WriteTargets(const cmLocalGenerator& lg,
std::vector<std::string> objectFileTargets;
localGen->GetIndividualFileTargets(objectFileTargets);
for (std::string const& f : objectFileTargets) {
- this->AppendTarget(fout, f, make, makeArgs, currentDir, homeOutputDir);
+ this->AppendTarget(fout, f, configs, make, makeArgs, currentDir,
+ homeOutputDir);
}
}
fout << "\t] }\n";
}
-void cmExtraKateGenerator::AppendTarget(cmGeneratedFileStream& fout,
- const std::string& target,
- const std::string& make,
- const std::string& makeArgs,
- const std::string& path,
- const std::string& homeOutputDir) const
+void cmExtraKateGenerator::AppendTarget(
+ cmGeneratedFileStream& fout, const std::string& target,
+ const std::vector<std::string>& configs, const std::string& make,
+ const std::string& makeArgs, const std::string& path,
+ const std::string& homeOutputDir) const
{
static char JsonSep = ' ';
- fout << "\t\t\t" << JsonSep << R"({"name":")" << target
- << "\", "
- "\"build_cmd\":\""
- << make << " -C \\\"" << (this->UseNinja ? homeOutputDir : path)
- << "\\\" " << makeArgs << " " << target << "\"}\n";
-
- JsonSep = ',';
+ for (const std::string& conf : configs) {
+ fout << "\t\t\t" << JsonSep << R"({"name":")" << target
+ << ((configs.size() > 1) ? (std::string(":") + conf) : std::string())
+ << "\", "
+ "\"build_cmd\":\""
+ << make << " -C \\\"" << (this->UseNinja ? homeOutputDir : path)
+ << "\\\" "
+ << ((this->UseNinja && configs.size() > 1)
+ ? std::string(" -f build-") + conf + ".ninja"
+ : std::string())
+ << makeArgs << " " << target << "\"}\n";
+
+ JsonSep = ',';
+ }
}
void cmExtraKateGenerator::CreateDummyKateProjectFile(
diff --git a/Source/cmExtraKateGenerator.h b/Source/cmExtraKateGenerator.h
index c66ddbf..9ffcac4 100644
--- a/Source/cmExtraKateGenerator.h
+++ b/Source/cmExtraKateGenerator.h
@@ -29,6 +29,7 @@ private:
void WriteTargets(const cmLocalGenerator& lg,
cmGeneratedFileStream& fout) const;
void AppendTarget(cmGeneratedFileStream& fout, const std::string& target,
+ const std::vector<std::string>& configs,
const std::string& make, const std::string& makeArgs,
const std::string& path,
const std::string& homeOutputDir) const;