aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/build/script/parser.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'libbuild2/build/script/parser.cxx')
-rw-r--r--libbuild2/build/script/parser.cxx29
1 files changed, 28 insertions, 1 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);
}