diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2019-01-10 09:16:33 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2019-01-10 09:16:33 +0200 |
commit | 13b07e3d9d3c1f3e687a719675aabb6b68e3c822 (patch) | |
tree | 828dd385c38430e6c8d03f121f274ba86885c9c0 | |
parent | af4ce602e4e78dd3655b0a24348b9e256d62e171 (diff) |
Print list of available operations and meta-operations in info
-rw-r--r-- | build2/operation.cxx | 36 | ||||
-rw-r--r-- | build2/operation.hxx | 6 |
2 files changed, 33 insertions, 9 deletions
diff --git a/build2/operation.cxx b/build2/operation.cxx index 0fd0a95..1cbf104 100644 --- a/build2/operation.cxx +++ b/build2/operation.cxx @@ -495,19 +495,37 @@ namespace build2 if (i != 0) cout << endl; - const scope& s (*static_cast<const scope*> (ts[i].target)); + const scope& rs (*static_cast<const scope*> (ts[i].target)); + + // Print [meta_]operation names. Due to the way our aliasing works, we + // have to go through the [meta_]operation_table. + // + auto print_ops = [] (const auto& ov, const auto& ot) + { + // This is a sparse vector with NULL holes. id 0 is invalid while 1 is + // the noop meta-operation and the default operation; we omit printing + // both. + // + for (size_t id (2); id < ov.size (); ++id) + { + if (ov[id] != nullptr) + cout << ' ' << ot[id]; + } + }; // This could be a simple project that doesn't set project name. // cout - << "project: " << cast_empty<project_name> (s[var_project]) << endl - << "version: " << cast_empty<string> (s[var_version]) << endl - << "summary: " << cast_empty<string> (s[var_project_summary]) << endl - << "url: " << cast_empty<string> (s[var_project_url]) << endl - << "src_root: " << cast<dir_path> (s[var_src_root]) << endl - << "out_root: " << cast<dir_path> (s[var_out_root]) << endl - << "amalgamation: " << cast_empty<dir_path> (s[var_amalgamation]) << endl - << "subprojects: " << cast_empty<subprojects> (s[var_subprojects]) << endl; + << "project: " << cast_empty<project_name> (rs[var_project]) << endl + << "version: " << cast_empty<string> (rs[var_version]) << endl + << "summary: " << cast_empty<string> (rs[var_project_summary]) << endl + << "url: " << cast_empty<string> (rs[var_project_url]) << endl + << "src_root: " << cast<dir_path> (rs[var_src_root]) << endl + << "out_root: " << cast<dir_path> (rs[var_out_root]) << endl + << "amalgamation: " << cast_empty<dir_path> (rs[var_amalgamation]) << endl + << "subprojects: " << cast_empty<subprojects> (rs[var_subprojects]) << endl + << "operations:"; print_ops (rs.operations, operation_table); cout << endl + << "meta-operations:"; print_ops (rs.meta_operations, meta_operation_table); cout << endl; } } diff --git a/build2/operation.hxx b/build2/operation.hxx index f79228b..d2c3486 100644 --- a/build2/operation.hxx +++ b/build2/operation.hxx @@ -287,6 +287,12 @@ namespace build2 process_func* process; }; + inline ostream& + operator<< (ostream& os, const meta_operation_data& d) + { + return os << d.name; + } + extern butl::string_table<meta_operation_id, meta_operation_data> meta_operation_table; extern butl::string_table<operation_id> operation_table; |