diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/common/cli.hpp | 5 | ||||
-rw-r--r-- | src/buildtool/main/diagnose.cpp | 24 |
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); } |