diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2023-10-23 10:25:58 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2023-10-26 13:29:24 +0200 |
commit | c9e9432018b57b7f532480415059ff62d7f96a40 (patch) | |
tree | def2115528d809b510f276b393b1587c68e40572 /libbuild2/algorithm.hxx | |
parent | a0ebf29806f7ce066f7815f79c08ae4cb73be865 (diff) |
WIP: add rematch_*() functions
Diffstat (limited to 'libbuild2/algorithm.hxx')
-rw-r--r-- | libbuild2/algorithm.hxx | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/libbuild2/algorithm.hxx b/libbuild2/algorithm.hxx index e01fbb8..829c5be 100644 --- a/libbuild2/algorithm.hxx +++ b/libbuild2/algorithm.hxx @@ -363,7 +363,9 @@ namespace build2 // to be unchanged after match. If it is unmatch::safe, then unmatch the // target if it is safe (this includes unchanged or if we know that someone // else will execute this target). Return true in first half of the pair if - // unmatch succeeded. Always throw if failed. + // unmatch succeeded. Always throw if failed. Note that unmatching doesn't + // play well with options -- if unmatch succeeds, the options that have been + // passed to match will not be cleared. // enum class unmatch {none, unchanged, safe}; @@ -483,6 +485,26 @@ namespace build2 unmatch, uint64_t options = match_extra::all_options); + // Re-match with new options a target that has already been matched with one + // of the match_*() functions. Note that natually you cannot rematch a + // target that you have unmatched. + // + target_state + rematch_sync (action, const target&, + uint64_t options, + bool fail = true); + + target_state + rematch_async (action, const target&, + uint64_t options, + size_t start_count, atomic_count& task_count, + bool fail = true); + + target_state + rematch_complete (action, const target&, + uint64_t options, + bool fail = true); + // The standard prerequisite search and match implementations. They call // search() (unless a custom is provided) and then match() (unless custom // returned NULL) for each prerequisite in a loop omitting out of project |