From 09c231965f9f8e8f1e86f127a22f112d63ef4d9b Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Tue, 20 Apr 2021 22:48:59 +0300 Subject: Add buildscript depdb builtin 'env' command --- libbuild2/build/script/parser.cxx | 29 ++++++++++++++++++++++++++++- libbuild2/build/script/parser.hxx | 13 ++++++++----- 2 files changed, 36 insertions(+), 6 deletions(-) (limited to 'libbuild2/build') 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 . + // + for (auto i (ns.begin () + 1); i != ns.end (); ++i) + { + string vn (convert (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 - Track the argument list change as a hash. + // depdb hash - Track the argument list change as a hash. // - // depdb string - Track the argument (single) change as string. + // depdb string - Track the argument (single) change as string. + // + // depdb env - Track the environment variables change as a + // hash. // optional depdb_clear_; // 'depdb clear' location if any. lines depdb_preamble_; // Note: excludes 'depdb clear'. -- cgit v1.1