summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/common/cli.hpp5
-rw-r--r--src/buildtool/main/diagnose.cpp24
2 files changed, 29 insertions, 0 deletions
diff --git a/src/buildtool/common/cli.hpp b/src/buildtool/common/cli.hpp
index 3409eae8..b1633716 100644
--- a/src/buildtool/common/cli.hpp
+++ b/src/buildtool/common/cli.hpp
@@ -78,6 +78,7 @@ struct DiagnosticArguments {
std::optional<std::string> dump_actions{std::nullopt};
std::optional<std::string> dump_blobs{std::nullopt};
std::optional<std::string> dump_trees{std::nullopt};
+ std::optional<std::string> dump_provides{std::nullopt};
std::optional<std::string> dump_vars{std::nullopt};
std::optional<std::string> dump_targets{std::nullopt};
std::optional<std::string> dump_export_targets{std::nullopt};
@@ -344,6 +345,10 @@ static inline auto SetupDiagnosticArguments(
clargs->dump_blobs,
"Dump blobs to file (use - for stdout).")
->type_name("PATH");
+ app->add_option("--dump-provides",
+ clargs->dump_provides,
+ "Dump provides map to file (use - for stdout).")
+ ->type_name("PATH");
app->add_option("--dump-vars",
clargs->dump_vars,
"Dump domain of the effective configuration to file (use - "
diff --git a/src/buildtool/main/diagnose.cpp b/src/buildtool/main/diagnose.cpp
index 1c3552cd..0595970d 100644
--- a/src/buildtool/main/diagnose.cpp
+++ b/src/buildtool/main/diagnose.cpp
@@ -134,6 +134,27 @@ void DumpTrees(std::string const& file_path, AnalysisResult const& result) {
}
}
+void DumpProvides(std::string const& file_path, AnalysisResult const& result) {
+ auto const dump_string =
+ result.target->Result()
+ .provides->ToJson(Expression::JsonMode::SerializeAllButNodes)
+ .dump(2);
+ if (file_path == "-") {
+ Logger::Log(LogLevel::Info,
+ "Provides map for target {}:",
+ result.id.ToString());
+ std::cout << dump_string << std::endl;
+ }
+ else {
+ Logger::Log(LogLevel::Info,
+ "Dumping provides map for target {} to file '{}'.",
+ result.id.ToString(),
+ file_path);
+ std::ofstream os(file_path);
+ os << dump_string << std::endl;
+ }
+}
+
void DumpTargets(std::string const& file_path,
std::vector<Target::ConfiguredTarget> const& target_ids,
std::string const& target_qualifier = "") {
@@ -287,6 +308,9 @@ void DiagnoseResults(AnalysisResult const& result,
if (clargs.dump_trees) {
DumpTrees(*clargs.dump_trees, result);
}
+ if (clargs.dump_provides) {
+ DumpProvides(*clargs.dump_provides, result);
+ }
if (clargs.dump_vars) {
DumpVars(*clargs.dump_vars, result);
}