aboutsummaryrefslogtreecommitdiff
path: root/build2/algorithm.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-04-27 08:29:52 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-04-27 08:29:52 +0200
commitc2001eb367b9b82e26689cad6f1f74f46c72b904 (patch)
treedb2ee46fc11989d85201ccebaf44f51b978fb313 /build2/algorithm.cxx
parent530e19cc8f53f066039967c41bb432111ce98626 (diff)
Pass target to prerequisite search
Diffstat (limited to 'build2/algorithm.cxx')
-rw-r--r--build2/algorithm.cxx15
1 files changed, 8 insertions, 7 deletions
diff --git a/build2/algorithm.cxx b/build2/algorithm.cxx
index 51a683c..049df0c 100644
--- a/build2/algorithm.cxx
+++ b/build2/algorithm.cxx
@@ -20,7 +20,7 @@ using namespace butl;
namespace build2
{
const target&
- search (const prerequisite_key& pk)
+ search (const target& t, const prerequisite_key& pk)
{
assert (phase == run_phase::match);
@@ -30,14 +30,14 @@ namespace build2
if (pk.proj)
return import (pk);
- if (const target* t = pk.tk.type->search (pk))
- return *t;
+ if (const target* pt = pk.tk.type->search (t, pk))
+ return *pt;
return create_new_target (pk);
}
const target&
- search (name n, const scope& s)
+ search (const target& t, name n, const scope& s)
{
assert (phase == run_phase::match);
@@ -53,7 +53,8 @@ namespace build2
// @@ OUT: for now we assume the prerequisite's out is undetermined.
// Would need to pass a pair of names.
//
- return search (*tt,
+ return search (t,
+ *tt,
n.dir,
dir_path (),
n.value,
@@ -634,7 +635,7 @@ namespace build2
size_t i (pts.size ()); // Index of the first to be added.
for (auto&& p: forward<R> (r))
{
- const target& pt (search (p));
+ const target& pt (search (t, p));
if (s != nullptr && !pt.in (*s))
continue;
@@ -733,7 +734,7 @@ namespace build2
// Target is in the out tree, so out directory is empty.
//
const fsdir* r (
- &search<fsdir> (d, dir_path (), string (), nullptr, nullptr));
+ &search<fsdir> (t, d, dir_path (), string (), nullptr, nullptr));
match (a, *r);
t.prerequisite_targets.emplace_back (r);
return r;