summaryrefslogtreecommitdiff
path: root/src/buildtool/build_engine/target_map/target_map.cpp
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-08-01 17:40:40 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-08-02 10:48:03 +0200
commitcc3d0aa8227acace9a89ae4c5dfa3148c0227655 (patch)
treeef555d043bd859c11382554e465ce66c319c7ca4 /src/buildtool/build_engine/target_map/target_map.cpp
parent03f948f4b10e916052a2234448b6658b80ee9143 (diff)
downloadjustbuild-cc3d0aa8227acace9a89ae4c5dfa3148c0227655.tar.gz
rules: make ACTION expression support "cwd"
Diffstat (limited to 'src/buildtool/build_engine/target_map/target_map.cpp')
-rw-r--r--src/buildtool/build_engine/target_map/target_map.cpp14
1 files changed, 13 insertions, 1 deletions
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,