From cc3d0aa8227acace9a89ae4c5dfa3148c0227655 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Thu, 1 Aug 2024 17:40:40 +0200 Subject: rules: make ACTION expression support "cwd" --- src/buildtool/build_engine/target_map/target_map.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/buildtool/build_engine/target_map/target_map.cpp') diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp index 75bf6607..14d897b9 100644 --- a/src/buildtool/build_engine/target_map/target_map.cpp +++ b/src/buildtool/build_engine/target_map/target_map.cpp @@ -593,6 +593,18 @@ void withDependencies( } cmd.emplace_back(arg->String()); } + auto cwd_exp = + eval(expr->Get("cwd", Expression::kEmptyString), env); + if (not cwd_exp->IsString()) { + throw Evaluator::EvaluationError{ + fmt::format("cwd has to be a string, but found {}", + cwd_exp->ToString())}; + } + if (not PathIsNonUpwards(cwd_exp->String())) { + throw Evaluator::EvaluationError{fmt::format( + "cwd has to be a non-upwards relative path, but found {}", + cwd_exp->ToString())}; + } auto env_exp = eval(expr->Get("env", empty_map_exp), env); if (not env_exp->IsMap()) { throw Evaluator::EvaluationError{ @@ -697,7 +709,7 @@ void withDependencies( outputs, output_dirs, std::move(cmd), - "", + cwd_exp->String(), env_exp, may_fail, no_cache, -- cgit v1.2.3