diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2023-12-12 12:38:42 +0100 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2023-12-14 12:41:11 +0100 |
commit | a08dbdcf39cd2824527d153f490514087b70d1c8 (patch) | |
tree | f3ea003b42a056823b0a402c42c0590910756082 /src | |
parent | 5e99a8eca8ef8955dac0d2c76fb0e96b9802b4e8 (diff) | |
download | justbuild-a08dbdcf39cd2824527d153f490514087b70d1c8.tar.gz |
just analyse: support dumping the provides map of a target
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); } |