diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2024-02-15 09:11:53 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2024-02-15 09:11:53 +0200 |
commit | 70d63c266ffd313c03f6cf68e7080bbcd3c8c064 (patch) | |
tree | fa102b7885549600b7f66ecb31519af86858ce85 /libbuild2/adhoc-rule-regex-pattern.cxx | |
parent | 40f84c09974c03405a63c9eba32df7209de4bec0 (diff) |
Add fsdir{} duplicate suppression in more places
Diffstat (limited to 'libbuild2/adhoc-rule-regex-pattern.cxx')
-rw-r--r-- | libbuild2/adhoc-rule-regex-pattern.cxx | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/libbuild2/adhoc-rule-regex-pattern.cxx b/libbuild2/adhoc-rule-regex-pattern.cxx index 9101000..2d60520 100644 --- a/libbuild2/adhoc-rule-regex-pattern.cxx +++ b/libbuild2/adhoc-rule-regex-pattern.cxx @@ -452,6 +452,18 @@ namespace build2 auto& pts (t.prerequisite_targets[a]); + // Avoid duplicating fsdir{} that may have already been injected by + // inject_fsdir() (in which case it is expected to be first). + // + const target* dir (nullptr); + if (!pts.empty ()) + { + const prerequisite_target& pt (pts.front ()); + + if (pt.target != nullptr && pt.adhoc () && pt.target->is_a<fsdir> ()) + dir = pt.target; + } + for (const element& e: prereqs_) { // While it would be nice to avoid copying here, the semantics of @@ -488,7 +500,7 @@ namespace build2 const target& pt (search (t, move (n), *s, &e.type)); - if (clean && !pt.in (*bs.root_scope ())) + if (&pt == dir || (clean && !pt.in (*bs.root_scope ()))) continue; // @@ TODO: it could be handy to mark a prerequisite (e.g., a tool) |