diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2017-01-12 10:52:12 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2017-01-12 10:58:19 +0200 |
commit | 11b841ef5b26e25500fa4d464f216dc982ed7338 (patch) | |
tree | 7a528ce6e098f8867cedbe102b4d06e2411dc5d5 | |
parent | 7509a7e07cb047a43664a7d33a5b0ac3a945019a (diff) |
Inject fsdir{} even for project roots
This takes care of subprojects, such as tests/.
-rw-r--r-- | build2/algorithm | 10 | ||||
-rw-r--r-- | build2/algorithm.cxx | 10 |
2 files changed, 11 insertions, 9 deletions
diff --git a/build2/algorithm b/build2/algorithm index b1c922b..9401915 100644 --- a/build2/algorithm +++ b/build2/algorithm @@ -131,11 +131,11 @@ namespace build2 resolve_group_members (action, target&); // Inject dependency on the target's directory fsdir{}, unless it is in the - // src tree, root of the project, or is outside of any project (say, for - // example, an installation directory). If the parent argument is true, then - // inject the parent directory of a target that is itself a directory (name - // is empty). Return the injected target or NULL. Normally this function is - // called from the rule's apply() function. + // src tree or is outside of any project (say, for example, an installation + // directory). If the parent argument is true, then inject the parent + // directory of a target that is itself a directory (name is empty). Return + // the injected target or NULL. Normally this function is called from the + // rule's apply() function. // fsdir* inject_fsdir (action, target&, bool parent = true); diff --git a/build2/algorithm.cxx b/build2/algorithm.cxx index 3a354f9..638afd0 100644 --- a/build2/algorithm.cxx +++ b/build2/algorithm.cxx @@ -312,9 +312,11 @@ namespace build2 scope& bs (t.base_scope ()); scope* rs (bs.root_scope ()); - // Handle the outside of any project and at root scope cases. + // Handle the outside of any project case. Note that we also used to bail + // our of this is the root of the project. But that proved not to be such + // a great idea in case of subprojects (e.g., tests/). // - if (rs == nullptr || &bs == rs) + if (rs == nullptr) return nullptr; // If t is a directory (name is empty), say foo/bar/, then t is bar and @@ -322,9 +324,9 @@ namespace build2 // const dir_path& d (parent && t.name.empty () ? t.dir.directory () : t.dir); - // Handle the src = out and (again) root scope cases. + // Handle the src = out. // - if (d.sub (rs->src_path ()) || d == rs->out_path ()) + if (d.sub (rs->src_path ())) return nullptr; l6 ([&]{trace << d << " for " << t;}); |