diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-04-19 09:24:38 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-04-19 15:25:50 +0200 |
commit | fc18a6dc1fcb02b505f07914e484cebbaf268698 (patch) | |
tree | 2cb9b04c5924dfd46e7d934912b41c3efd894a93 /build2/algorithm.ixx | |
parent | ae20570f2ad55b2fa8e71cf450457cb9c4b21b1b (diff) |
Redesign src/out scoping
We no longer enter paths from the src tree into scope map. Instead, targets
from the src tree now include their out tree directory (in essence their
"configuration"). This is then used to find a target's scope. See the
comment in class target for details.
The result of this change is that we can now again build multiple
configurations (out trees) for same project at once.
Diffstat (limited to 'build2/algorithm.ixx')
-rw-r--r-- | build2/algorithm.ixx | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/build2/algorithm.ixx b/build2/algorithm.ixx index 3f0bab9..3930412 100644 --- a/build2/algorithm.ixx +++ b/build2/algorithm.ixx @@ -21,29 +21,32 @@ namespace build2 search (const target_type& t, const prerequisite_key& k) { return search ( - prerequisite_key - {k.proj, {&t, k.tk.dir, k.tk.name, k.tk.ext}, k.scope}); + prerequisite_key { + k.proj, {&t, k.tk.dir, k.tk.out, k.tk.name, k.tk.ext}, k.scope}); } inline target& search (const target_type& type, const dir_path& dir, + const dir_path& out, const string& name, const string* ext, scope* scope) { return search ( - prerequisite_key {nullptr, {&type, &dir, &name, ext}, scope}); + prerequisite_key {nullptr, {&type, &dir, &out, &name, ext}, scope}); } template <typename T> inline T& search (const dir_path& dir, + const dir_path& out, const string& name, const string* ext, scope* scope) { - return static_cast<T&> (search (T::static_type, dir, name, ext, scope)); + return static_cast<T&> ( + search (T::static_type, dir, out, name, ext, scope)); } pair<const rule*, match_result> |