diff options
Diffstat (limited to 'src/buildtool/build_engine')
-rw-r--r-- | src/buildtool/build_engine/target_map/target_map.cpp | 14 |
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, |