diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2015-07-21 15:51:54 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2015-07-21 15:51:54 +0200 |
commit | 4be404cd8b7f4c7b450364defea92cd02e9b7a62 (patch) | |
tree | f8f0aac622dfd9d30d1900b958ecea9505265502 /build/algorithm.ixx | |
parent | 10604d850510e46b2ee625548abe5eb9a1172a0d (diff) |
Improve nested operations support
The idea is this: we need to be able to override "conditional, inner
for outer" recipes with the "unconditional inner" ones. Here is the
concrete scenario: we have {update, test} action and the lib{} target
that is both mentioned as a prerequisite of ./ and exe{}, which is a
test. At first, we want to ignore lib{} when reached as a prerequisite
of ./. But then we get to it via exe{} (which is a test and thus should
be updated). At this point we should override the recipe for lib{} with
the one that would update it rather than ignore.
Diffstat (limited to 'build/algorithm.ixx')
-rw-r--r-- | build/algorithm.ixx | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/build/algorithm.ixx b/build/algorithm.ixx index a1e2129..4581d5b 100644 --- a/build/algorithm.ixx +++ b/build/algorithm.ixx @@ -2,8 +2,6 @@ // copyright : Copyright (c) 2014-2015 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file -#include <utility> // pair - #include <build/rule> #include <build/prerequisite> #include <build/context> @@ -50,7 +48,15 @@ namespace build return static_cast<T&> (search (T::static_type, dir, name, ext, scope)); } - std::pair<const rule*, match_result> + + struct match_result_impl + { + action ra; // Action to set recipe, not to pass to apply(). + const rule* ru; + match_result mr; + }; + + match_result_impl match_impl (action, target&, bool apply); inline void |