From c2001eb367b9b82e26689cad6f1f74f46c72b904 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 27 Apr 2017 08:29:52 +0200 Subject: Pass target to prerequisite search --- build2/algorithm | 20 +++++++++++--------- build2/algorithm.cxx | 15 ++++++++------- build2/algorithm.ixx | 18 +++++++++++------- build2/bin/rule.cxx | 4 ++-- build2/bin/target.cxx | 16 ++++++++-------- build2/cc/compile.cxx | 12 ++++++------ build2/cc/install.cxx | 2 +- build2/cc/link.cxx | 12 ++++++------ build2/cc/target.cxx | 6 +++--- build2/cli/rule.cxx | 9 ++++++--- build2/cli/target.cxx | 4 ++-- build2/cxx/target.cxx | 8 ++++---- build2/dist/rule.cxx | 2 +- build2/install/rule.cxx | 4 ++-- build2/target | 39 ++++++++++++++++++++++----------------- build2/target-type | 2 +- build2/target.cxx | 40 ++++++++++++++++++++-------------------- build2/target.txx | 2 +- build2/test/rule.cxx | 6 +++--- build2/test/target.cxx | 2 +- build2/version/rule.cxx | 2 +- 21 files changed, 120 insertions(+), 105 deletions(-) (limited to 'build2') diff --git a/build2/algorithm b/build2/algorithm index 7325fac..da38f19 100644 --- a/build2/algorithm +++ b/build2/algorithm @@ -18,34 +18,35 @@ namespace build2 class prerequisite_key; // The default prerequisite search implementation. It first calls the - // target-type-specific search function. If that doesn't yeld anything, - // it creates a new target. + // prerequisite-type-specific search function. If that doesn't yeld + // anything, it creates a new target. // const target& - search (const prerequisite&); + search (const target&, const prerequisite&); // As above but specify the prerequisite to search as a key. // const target& - search (const prerequisite_key&); + search (const target&, const prerequisite_key&); // Uniform search interface for prerequisite/prerequisite_member. // inline const target& - search (const prerequisite_member& p) {return p.search ();} + search (const target& t, const prerequisite_member& p) {return p.search (t);} // As above but override the target type. Useful for searching for // target group members where we need to search for a different // target type. // const target& - search (const target_type&, const prerequisite_key&); + search (const target&, const target_type&, const prerequisite_key&); // As above but specify the prerequisite to search as individual key // components. Scope can be NULL if the directory is absolute. // const target& - search (const target_type& type, + search (const target&, + const target_type& type, const dir_path& dir, const dir_path& out, const string& name, @@ -57,7 +58,8 @@ namespace build2 // template const T& - search (const dir_path& dir, + search (const target&, + const dir_path& dir, const dir_path& out, const string& name, const string* ext = nullptr, @@ -68,7 +70,7 @@ namespace build2 // as the parser would and then searched based on this prerequisite. // const target& - search (name, const scope&); + search (const target&, name, const scope&); // As above but only search for an already existing target. Unlike the above // version, this one can be called during the execute phase. Return NULL for 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)) { - 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 (d, dir_path (), string (), nullptr, nullptr)); + &search (t, d, dir_path (), string (), nullptr, nullptr)); match (a, *r); t.prerequisite_targets.emplace_back (r); return r; diff --git a/build2/algorithm.ixx b/build2/algorithm.ixx index e1f8ddc..d39bf9c 100644 --- a/build2/algorithm.ixx +++ b/build2/algorithm.ixx @@ -8,7 +8,7 @@ namespace build2 { inline const target& - search (const prerequisite& p) + search (const target& t, const prerequisite& p) { assert (phase == run_phase::match); @@ -16,7 +16,7 @@ namespace build2 if (r == nullptr) { - r = &search (p.key ()); + r = &search (t, p.key ()); const target* e (nullptr); if (!p.target.compare_exchange_strong ( @@ -30,15 +30,17 @@ namespace build2 } inline const target& - search (const target_type& t, const prerequisite_key& k) + search (const target& t, const target_type& tt, const prerequisite_key& k) { return search ( + t, prerequisite_key { - k.proj, {&t, k.tk.dir, k.tk.out, k.tk.name, k.tk.ext}, k.scope}); + k.proj, {&tt, k.tk.dir, k.tk.out, k.tk.name, k.tk.ext}, k.scope}); } inline const target& - search (const target_type& type, + search (const target& t, + const target_type& type, const dir_path& dir, const dir_path& out, const string& name, @@ -47,6 +49,7 @@ namespace build2 const optional& proj) { return search ( + t, prerequisite_key { proj, { @@ -61,14 +64,15 @@ namespace build2 template inline const T& - search (const dir_path& dir, + search (const target& t, + const dir_path& dir, const dir_path& out, const string& name, const string* ext, const scope* scope) { return search ( - T::static_type, dir, out, name, ext, scope).template as (); + t, T::static_type, dir, out, name, ext, scope).template as (); } target_lock diff --git a/build2/bin/rule.cxx b/build2/bin/rule.cxx index 3ea8e75..fd1526e 100644 --- a/build2/bin/rule.cxx +++ b/build2/bin/rule.cxx @@ -53,8 +53,8 @@ namespace build2 fail << "unknown library type: " << type << info << "'static', 'shared', or 'both' expected"; - t.a = a ? &search (t.dir, t.out, t.name) : nullptr; - t.s = s ? &search (t.dir, t.out, t.name) : nullptr; + t.a = a ? &search (t, t.dir, t.out, t.name) : nullptr; + t.s = s ? &search (t, t.dir, t.out, t.name) : nullptr; match_result mr (true); diff --git a/build2/bin/target.cxx b/build2/bin/target.cxx index 2be5686..dc691d6 100644 --- a/build2/bin/target.cxx +++ b/build2/bin/target.cxx @@ -43,7 +43,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_target, // Note: not _file(); don't look for an existing file. + &target_search, // Note: not _file(); don't look for an existing file. false }; @@ -55,7 +55,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_target, // Note: not _file(); don't look for an existing file. + &target_search, // Note: not _file(); don't look for an existing file. false }; @@ -67,7 +67,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_target, // Note: not _file(); don't look for an existing file. + &target_search, // Note: not _file(); don't look for an existing file. false }; @@ -107,7 +107,7 @@ namespace build2 nullptr, nullptr, nullptr, - &search_target, + &target_search, false }; @@ -145,7 +145,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_file, + &file_search, false }; @@ -157,7 +157,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_file, + &file_search, false }; @@ -206,7 +206,7 @@ namespace build2 nullptr, nullptr, nullptr, - &search_target, + &target_search, false }; @@ -220,7 +220,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_file, + &file_search, false }; } diff --git a/build2/cc/compile.cxx b/build2/cc/compile.cxx index 67d254b..c5ef480 100644 --- a/build2/cc/compile.cxx +++ b/build2/cc/compile.cxx @@ -321,7 +321,7 @@ namespace build2 continue; } - pt = &p.search (); + pt = &p.search (t); if (const lib* l = pt->is_a ()) pt = &link_member (*l, act, lo); @@ -331,7 +331,7 @@ namespace build2 } else { - pt = &p.search (); + pt = &p.search (t); if (act.operation () == clean_id && !pt->dir.sub (rs.out_path ())) continue; @@ -375,7 +375,7 @@ namespace build2 // t.prerequisite_targets since we used standard search() and match() // above. // - const file& src (*md.src.search ().is_a ()); + const file& src (*md.src.search (t).is_a ()); // Make sure the output directory exists. // @@ -993,12 +993,12 @@ namespace build2 // from the depdb cache or from the compiler run. Return whether the // extraction process should be restarted. // - auto add = [&trace, &update, &pm, act, &t, lo, &dd, &bs, this] + auto add = [&trace, &update, &pm, act, &t, lo, &dd, &bs, &t, this] (path f, bool cache) -> bool { // Find or maybe insert the target. // - auto find = [&trace, this] ( + auto find = [&trace, &t, this] ( const path& f, bool insert) -> const path_target* { // Split the name into its directory part, the name part, and @@ -1059,7 +1059,7 @@ namespace build2 // const target* r; if (insert) - r = &search (*tt, d, out, n, &e, nullptr); + r = &search (t, *tt, d, out, n, &e, nullptr); else { // Note that we skip any target type-specific searches (like for diff --git a/build2/cc/install.cxx b/build2/cc/install.cxx index 6195ab7..e1e5719 100644 --- a/build2/cc/install.cxx +++ b/build2/cc/install.cxx @@ -42,7 +42,7 @@ namespace build2 if ((t.is_a () || t.is_a ()) && (p.is_a () || p.is_a ())) { - const target* pt (&p.search ()); + const target* pt (&p.search (t)); // If this is the lib{} group, pick a member which we would link. // diff --git a/build2/cc/link.cxx b/build2/cc/link.cxx index 6d0c605..b15f340 100644 --- a/build2/cc/link.cxx +++ b/build2/cc/link.cxx @@ -306,7 +306,7 @@ namespace build2 const target& m (t.member != nullptr // Might already be there. ? *t.member - : search (tt, t.dir, t.out, t.name)); + : search (t, tt, t.dir, t.out, t.name)); target_lock l (lock (act, m)); assert (l.target != nullptr); // Someone messing with adhoc members? @@ -438,7 +438,7 @@ namespace build2 // The rest is the same basic logic as in search_and_match(). // if (pt == nullptr) - pt = &p.search (); + pt = &p.search (t); if (act.operation () == clean_id && !pt->dir.sub (rs.out_path ())) continue; // Skip. @@ -486,7 +486,7 @@ namespace build2 // If this is the obj{} target group, then pick the appropriate // member. // - pt = p.is_a () ? &search (ott, p.key ()) : &p.search (); + pt = p.is_a () ? &search (t, ott, p.key ()) : &p.search (t); if (act.operation () == clean_id && !pt->dir.sub (rs.out_path ())) continue; // Skip. @@ -539,7 +539,7 @@ namespace build2 // obj*{} is always in the out tree. // const target& ot ( - search (tt, d, dir_path (), *cp.tk.name, nullptr, cp.scope)); + search (t, tt, d, dir_path (), *cp.tk.name, nullptr, cp.scope)); // If we are cleaning, check that this target is in the same or a // subdirectory of our project root. @@ -557,7 +557,7 @@ namespace build2 // If we have created the obj{} target group, pick one of its // members; the rest would be primarily concerned with it. // - pt = group ? &search (ott, ot.dir, ot.out, ot.name) : &ot; + pt = group ? &search (t, ott, ot.dir, ot.out, ot.name) : &ot; // If this obj*{} already has prerequisites, then verify they are // "compatible" with what we are doing here. Otherwise, synthesize @@ -699,7 +699,7 @@ namespace build2 // Searching our own prerequisite is ok, p1 must already be // resolved. // - if (&p.search () != &p1.search ()) + if (&p.search (t) != &p1.search (*pt)) fail << "synthesized dependency for prerequisite " << p << " " << "would be incompatible with existing target " << *pt << info << "existing prerequisite " << p1 << " does not match " diff --git a/build2/cc/target.cxx b/build2/cc/target.cxx index f269b35..a734953 100644 --- a/build2/cc/target.cxx +++ b/build2/cc/target.cxx @@ -18,7 +18,7 @@ namespace build2 nullptr, nullptr, nullptr, - &search_target, + &target_search, false }; @@ -33,7 +33,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_file, + &file_search, false }; @@ -46,7 +46,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_file, + &file_search, false }; } diff --git a/build2/cli/rule.cxx b/build2/cli/rule.cxx index 7b191ea..884635a 100644 --- a/build2/cli/rule.cxx +++ b/build2/cli/rule.cxx @@ -86,11 +86,14 @@ namespace build2 // At this stage, no further changes to cli.options are possible and // we can determine whether the --suppress-inline option is present. // - t.h = &search (t.dir, t.out, t.name); - t.c = &search (t.dir, t.out, t.name); + // Passing the group as a "reference target" is a bit iffy, + // conceptually. + // + t.h = &search (t, t.dir, t.out, t.name); + t.c = &search (t, t.dir, t.out, t.name); t.i = find_option ("--suppress-inline", t, "cli.options") ? nullptr - : &search (t.dir, t.out, t.name); + : &search (t, t.dir, t.out, t.name); return r; } diff --git a/build2/cli/target.cxx b/build2/cli/target.cxx index e3ce7e2..2199f79 100644 --- a/build2/cli/target.cxx +++ b/build2/cli/target.cxx @@ -24,7 +24,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_file, + &file_search, false }; @@ -70,7 +70,7 @@ namespace build2 nullptr, nullptr, nullptr, - &search_target, + &target_search, true // "See through" default iteration mode. }; } diff --git a/build2/cxx/target.cxx b/build2/cxx/target.cxx index 7b19312..8955cb2 100644 --- a/build2/cxx/target.cxx +++ b/build2/cxx/target.cxx @@ -21,7 +21,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_file, + &file_search, false }; @@ -34,7 +34,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_file, + &file_search, false }; @@ -47,7 +47,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_file, + &file_search, false }; @@ -60,7 +60,7 @@ namespace build2 &target_extension_var, &target_pattern_var, nullptr, - &search_file, + &file_search, false }; } diff --git a/build2/dist/rule.cxx b/build2/dist/rule.cxx index 205c321..338f7f9 100644 --- a/build2/dist/rule.cxx +++ b/build2/dist/rule.cxx @@ -36,7 +36,7 @@ namespace build2 if (p.proj ()) continue; - const target& pt (p.search ()); + const target& pt (p.search (t)); // Don't match targets that are outside of our project. // diff --git a/build2/install/rule.cxx b/build2/install/rule.cxx index 0cfbe84..9f668f9 100644 --- a/build2/install/rule.cxx +++ b/build2/install/rule.cxx @@ -51,7 +51,7 @@ namespace build2 for (const prerequisite& p: group_prerequisites (t)) { - const target& pt (search (p)); + const target& pt (search (t, p)); // Check if this prerequisite is explicitly "not installable", // that is, there is the 'install' variable and its value is @@ -121,7 +121,7 @@ namespace build2 const target* file_rule:: filter (action, const target& t, prerequisite_member p) const { - const target& pt (p.search ()); + const target& pt (p.search (t)); return pt.in (t.root_scope ()) ? &pt : nullptr; } diff --git a/build2/target b/build2/target index e7e15ab..c672dc9 100644 --- a/build2/target +++ b/build2/target @@ -30,7 +30,7 @@ namespace build2 extern size_t current_on; // From . const target& - search (const prerequisite&); // From . + search (const target&, const prerequisite&); // From . // Target state. // @@ -877,9 +877,9 @@ namespace build2 } const target_type& - search () const + search (const target_type& t) const { - return target != nullptr ? *target : build2::search (prerequisite); + return target != nullptr ? *target : build2::search (t, prerequisite); } // Return as a new prerequisite instance. @@ -939,17 +939,21 @@ namespace build2 template inline prerequisite_members_range - prerequisite_members (action a, R&& r, members_mode m = members_mode::always) + prerequisite_members (action a, const target& t, + R&& r, + members_mode m = members_mode::always) { - return prerequisite_members_range (a, forward (r), m); + return prerequisite_members_range (a, t, forward (r), m); } template class prerequisite_members_range { public: - prerequisite_members_range (action a, R&& r, members_mode m) - : a_ (a), mode_ (m), r_ (forward (r)), e_ (r_.end ()) {} + prerequisite_members_range (action a, const target& t, + R&& r, + members_mode m) + : a_ (a), t_ (t), mode_ (m), r_ (forward (r)), e_ (r_.end ()) {} using base_iterator = decltype (declval ().begin ()); @@ -1057,6 +1061,7 @@ namespace build2 private: action a_; + const target& t_; members_mode mode_; R r_; base_iterator e_; @@ -1068,14 +1073,14 @@ namespace build2 prerequisite_members (action a, target& t, members_mode m = members_mode::always) { - return prerequisite_members (a, t.prerequisites (), m); + return prerequisite_members (a, t, t.prerequisites (), m); } inline auto prerequisite_members (action a, const target& t, members_mode m = members_mode::always) { - return prerequisite_members (a, t.prerequisites (), m); + return prerequisite_members (a, t, t.prerequisites (), m); } // prerequisite_members(reverse_iterate(t.prerequisites)) @@ -1084,14 +1089,14 @@ namespace build2 reverse_prerequisite_members (action a, target& t, members_mode m = members_mode::always) { - return prerequisite_members (a, reverse_iterate (t.prerequisites ()), m); + return prerequisite_members (a, t, reverse_iterate (t.prerequisites ()), m); } inline auto reverse_prerequisite_members (action a, const target& t, members_mode m = members_mode::always) { - return prerequisite_members (a, reverse_iterate (t.prerequisites ()), m); + return prerequisite_members (a, t, reverse_iterate (t.prerequisites ()), m); } // prerequisite_members(group_prerequisites (t)) @@ -1100,14 +1105,14 @@ namespace build2 group_prerequisite_members (action a, target& t, members_mode m = members_mode::always) { - return prerequisite_members (a, group_prerequisites (t), m); + return prerequisite_members (a, t, group_prerequisites (t), m); } inline auto group_prerequisite_members (action a, const target& t, members_mode m = members_mode::always) { - return prerequisite_members (a, group_prerequisites (t), m); + return prerequisite_members (a, t, group_prerequisites (t), m); } // prerequisite_members(reverse_iterate (group_prerequisites (t))) @@ -1117,7 +1122,7 @@ namespace build2 members_mode m = members_mode::always) { return prerequisite_members ( - a, reverse_iterate (group_prerequisites (t)), m); + a, t, reverse_iterate (group_prerequisites (t)), m); } inline auto @@ -1125,7 +1130,7 @@ namespace build2 members_mode m = members_mode::always) { return prerequisite_members ( - a, reverse_iterate (group_prerequisites (t)), m); + a, t, reverse_iterate (group_prerequisites (t)), m); } // A target with an unspecified extension is considered equal to the one @@ -1653,13 +1658,13 @@ namespace build2 // prerequisite's directory scope. // const target* - search_target (const prerequisite_key&); + target_search (const target&, const prerequisite_key&); // First look for an existing target as above. If not found, then look // for an existing file in the target-type-specific list of paths. // const target* - search_file (const prerequisite_key&); + file_search (const target&, const prerequisite_key&); } #include diff --git a/build2/target-type b/build2/target-type index 191c5d8..aa2d7cb 100644 --- a/build2/target-type +++ b/build2/target-type @@ -61,7 +61,7 @@ namespace build2 void (*print) (ostream&, const target_key&); - const target* (*search) (const prerequisite_key&); + const target* (*search) (const target&, const prerequisite_key&); bool see_through; // A group with the default "see through" semantics. diff --git a/build2/target.cxx b/build2/target.cxx index 3adfc66..e0f4e55 100644 --- a/build2/target.cxx +++ b/build2/target.cxx @@ -608,7 +608,7 @@ namespace build2 // const target* - search_target (const prerequisite_key& pk) + target_search (const target&, const prerequisite_key& pk) { // The default behavior is to look for an existing target in the // prerequisite's directory scope. @@ -617,7 +617,7 @@ namespace build2 } const target* - search_file (const prerequisite_key& pk) + file_search (const target&, const prerequisite_key& pk) { // First see if there is an existing target. // @@ -667,7 +667,7 @@ namespace build2 nullptr, nullptr, nullptr, - &search_target, + &target_search, false }; @@ -679,7 +679,7 @@ namespace build2 nullptr, nullptr, nullptr, - &search_target, + &target_search, false }; @@ -691,7 +691,7 @@ namespace build2 nullptr, nullptr, nullptr, - &search_target, + &target_search, false }; @@ -726,12 +726,12 @@ namespace build2 &target_extension_var, &target_pattern_var, &target_print_1_ext_verb, // Print extension even at verbosity level 0. - &search_file, + &file_search, false }; static const target* - search_alias (const prerequisite_key& pk) + alias_search (const target&, const prerequisite_key& pk) { // For an alias we don't want to silently create a target since it will do // nothing and it most likely not what the user intended. @@ -752,14 +752,14 @@ namespace build2 nullptr, // Extension not used. nullptr, nullptr, - &search_alias, + &alias_search, false }; static const target* - dir_target_search (const prerequisite_key& pk) + dir_search (const target&, const prerequisite_key& pk) { - tracer trace ("dir_target_search"); + tracer trace ("dir_search"); // The first step is like in search_alias(): looks for an existing target. // @@ -853,7 +853,7 @@ namespace build2 } static bool - dir_target_pattern (const target_type&, const scope&, string& v, bool r) + dir_pattern (const target_type&, const scope&, string& v, bool r) { // Add/strip trailing directory separator unless already there. // @@ -879,9 +879,9 @@ namespace build2 &alias::static_type, &target_factory, nullptr, // Extension not used. - &dir_target_pattern, + &dir_pattern, nullptr, - &dir_target_search, + &dir_search, false }; @@ -891,9 +891,9 @@ namespace build2 &target::static_type, &target_factory, nullptr, // Extension not used. - &dir_target_pattern, + &dir_pattern, nullptr, - &search_target, + &target_search, false }; @@ -948,7 +948,7 @@ namespace build2 nullptr, #endif nullptr, - &search_file, + &file_search, false }; @@ -1004,7 +1004,7 @@ namespace build2 &buildfile_target_extension, &buildfile_target_pattern, nullptr, - &search_file, + &file_search, false }; @@ -1016,7 +1016,7 @@ namespace build2 &target_extension_var, // Same as file. &target_pattern_var, // Same as file. &target_print_1_ext_verb, // Same as file. - &search_file, + &file_search, false }; @@ -1041,7 +1041,7 @@ namespace build2 &target_extension_null, // Should be specified explicitly (see factory). nullptr, &target_print_1_ext_verb, // Print extension even at verbosity level 0. - &search_file, + &file_search, false }; @@ -1055,7 +1055,7 @@ namespace build2 &target_extension_fix, &target_pattern_fix, &target_print_0_ext_verb, // Fixed extension, no use printing. - &search_file, + &file_search, false }; } diff --git a/build2/target.txx b/build2/target.txx index d854ed2..5abdfc5 100644 --- a/build2/target.txx +++ b/build2/target.txx @@ -20,7 +20,7 @@ namespace build2 // do { - g_ = resolve_group_members (r_->a_, search (*i_)); + g_ = resolve_group_members (r_->a_, search (r_->t_, *i_)); // Group could not be resolved. // diff --git a/build2/test/rule.cxx b/build2/test/rule.cxx index 171cbac..64292fc 100644 --- a/build2/test/rule.cxx +++ b/build2/test/rule.cxx @@ -227,7 +227,7 @@ namespace build2 group_prerequisite_members (a, t, members_mode::maybe)) { if (p.is_a ()) - t.prerequisite_targets.push_back (&p.search ()); + t.prerequisite_targets.push_back (&p.search (t)); } return [this] (action a, const target& t) @@ -289,9 +289,9 @@ namespace build2 // @@ OUT: what if this is a @-qualified pair or names? // - const target* it (in != nullptr ? &search (*in, bs) : nullptr); + const target* it (in != nullptr ? &search (t, *in, bs) : nullptr); const target* ot (on != nullptr - ? in == on ? it : &search (*on, bs) + ? in == on ? it : &search (t, *on, bs) : nullptr); if (a.operation () == update_id) diff --git a/build2/test/target.cxx b/build2/test/target.cxx index b6f9854..fd432fd 100644 --- a/build2/test/target.cxx +++ b/build2/test/target.cxx @@ -64,7 +64,7 @@ namespace build2 &testscript_target_extension, &testscript_target_pattern, nullptr, - &search_file, + &file_search, false }; } diff --git a/build2/version/rule.cxx b/build2/version/rule.cxx index 1da37bb..b6f09de 100644 --- a/build2/version/rule.cxx +++ b/build2/version/rule.cxx @@ -44,7 +44,7 @@ namespace build2 if (!p.is_a ()) continue; - const target& pt (p.search ()); + const target& pt (p.search (t)); if (pt.name != "manifest") continue; -- cgit v1.1