diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2021-04-20 22:48:59 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2021-04-21 17:15:28 +0300 |
commit | 09c231965f9f8e8f1e86f127a22f112d63ef4d9b (patch) | |
tree | e1a8689a0053099719722ba45d35aa33d229fc1e /libbuild2/build/script | |
parent | 30da2a90b3d433160c06643fb7ca51722fbae6b8 (diff) |
Add buildscript depdb builtin 'env' command
Diffstat (limited to 'libbuild2/build/script')
-rw-r--r-- | libbuild2/build/script/parser.cxx | 29 | ||||
-rw-r--r-- | libbuild2/build/script/parser.hxx | 13 |
2 files changed, 36 insertions, 6 deletions
diff --git a/libbuild2/build/script/parser.cxx b/libbuild2/build/script/parser.cxx index 4c11688..372c622 100644 --- a/libbuild2/build/script/parser.cxx +++ b/libbuild2/build/script/parser.cxx @@ -481,7 +481,7 @@ namespace build2 next (t, tt); if (tt != type::word || - (v != "clear" && v != "hash" && v != "string")) + (v != "clear" && v != "hash" && v != "string" && v != "env")) { fail (get_location (t)) << "expected 'depdb' builtin command instead of " << t; @@ -950,6 +950,33 @@ namespace build2 << "'depdb string' argument change forcing update of " << ctx.env.target;}); } + else if (cmd == "env") + { + sha256 cs; + const char* pf ("invalid 'depdb env' argument: "); + + try + { + // Skip <cmd>. + // + for (auto i (ns.begin () + 1); i != ns.end (); ++i) + { + string vn (convert<string> (move (*i))); + build2::script::verify_environment_var_name (vn, pf, ll); + hash_environment (cs, vn); + } + } + catch (const invalid_argument& e) + { + fail (ll) << pf << e; + } + + if (ctx.dd.expect (cs.string ()) != nullptr) + l4 ([&] { + ctx.trace (ll) + << "'depdb env' environment change forcing update of " + << ctx.env.target;}); + } else assert (false); } diff --git a/libbuild2/build/script/parser.hxx b/libbuild2/build/script/parser.hxx index b5a45ca..15429e3 100644 --- a/libbuild2/build/script/parser.hxx +++ b/libbuild2/build/script/parser.hxx @@ -194,13 +194,16 @@ namespace build2 // The depdb builtin can be used to change the default dependency // change tracking: // - // depdb clear - Cancels the default variables, targets, and - // prerequisites change tracking. Can only be - // the first depdb builtin call. + // depdb clear - Cancel the default variables, targets, and + // prerequisites change tracking. Can only be + // the first depdb builtin call. // - // depdb hash <args> - Track the argument list change as a hash. + // depdb hash <args> - Track the argument list change as a hash. // - // depdb string <arg> - Track the argument (single) change as string. + // depdb string <arg> - Track the argument (single) change as string. + // + // depdb env <var-names> - Track the environment variables change as a + // hash. // optional<location> depdb_clear_; // 'depdb clear' location if any. lines depdb_preamble_; // Note: excludes 'depdb clear'. |