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.cpp37
1 files changed, 37 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 d2e73f07..99f6d9f0 100644
--- a/src/buildtool/build_engine/target_map/target_map.cpp
+++ b/src/buildtool/build_engine/target_map/target_map.cpp
@@ -1471,6 +1471,17 @@ void TreeTarget(
.config = Configuration{}});
}
+ for (const auto& x : dir_entries.SymlinksIterator()) {
+ v.emplace_back(ConfiguredTarget{
+ .target =
+ BuildMaps::Base::EntityName{
+ target.repository,
+ dir_name,
+ x,
+ BuildMaps::Base::ReferenceType::kSymlink},
+ .config = Configuration{}});
+ }
+
for (const auto& x : dir_entries.DirectoriesIterator()) {
v.emplace_back(ConfiguredTarget{
.target =
@@ -1573,6 +1584,15 @@ void GlobTargetWithDirEntry(
BuildMaps::Base::ReferenceType::kFile});
}
}
+ for (auto const& x : dir.SymlinksIterator()) {
+ if (fnmatch(pattern.c_str(), x.c_str(), 0) == 0) {
+ matches.emplace_back(BuildMaps::Base::EntityName{
+ target.repository,
+ target.module,
+ x,
+ BuildMaps::Base::ReferenceType::kSymlink});
+ }
+ }
source_target_map->ConsumeAfterKeysReady(
ts,
matches,
@@ -1645,6 +1665,23 @@ auto CreateTargetMap(
});
}
else if (key.target.GetNamedTarget().reference_t ==
+ BuildMaps::Base::ReferenceType::kSymlink) {
+ // Not a defined target, treat as source target
+ source_target_map->ConsumeAfterKeysReady(
+ ts,
+ {key.target},
+ [setter](auto values) {
+ (*setter)(AnalysedTargetPtr{*values[0]});
+ },
+ [logger, target = key.target](auto const& msg, auto fatal) {
+ (*logger)(fmt::format("While analysing target {} as "
+ "symlink:\n{}",
+ target.ToString(),
+ msg),
+ fatal);
+ });
+ }
+ else if (key.target.GetNamedTarget().reference_t ==
BuildMaps::Base::ReferenceType::kGlob) {
auto wrapped_logger = std::make_shared<AsyncMapConsumerLogger>(
[logger, target = key.target](auto const& msg, bool fatal) {