summaryrefslogtreecommitdiff
path: root/src/buildtool/build_engine/target_map/target_map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/build_engine/target_map/target_map.cpp')
-rw-r--r--src/buildtool/build_engine/target_map/target_map.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp
index 0c713cd7..8d904ff8 100644
--- a/src/buildtool/build_engine/target_map/target_map.cpp
+++ b/src/buildtool/build_engine/target_map/target_map.cpp
@@ -729,6 +729,27 @@ void withDependencies(
ArtifactDigest::Create<ObjectType::File>(data->String()),
ObjectType::File}};
}},
+
+ {"SYMLINK",
+ [&blobs](auto&& eval, auto const& expr, auto const& env) {
+ auto data = eval(expr->Get("data", ""s), env);
+ if (not data->IsString()) {
+ throw Evaluator::EvaluationError{
+ fmt::format("SYMLINK data has to be a string, but got {}",
+ data->ToString())};
+ }
+ if (not PathIsNonUpwards(data->String())) {
+ throw Evaluator::EvaluationError{fmt::format(
+ "SYMLINK data has to be non-upwards relative, but got {}",
+ data->ToString())};
+ }
+ blobs.emplace_back(data->String());
+
+ return ExpressionPtr{ArtifactDescription{
+ ArtifactDigest::Create<ObjectType::Symlink>(data->String()),
+ ObjectType::Symlink}};
+ }},
+
{"TREE",
[&trees](auto&& eval, auto const& expr, auto const& env) {
auto val = eval(expr->Get("$1", Expression::kEmptyMapExpr), env);