aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2016-12-02 01:24:02 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2016-12-05 17:21:48 +0300
commitd04cd568c85262d486f7a0de0a374c80d466c58e (patch)
treef69056aa0d98299807ee53fa891d8775d41f9f26
parent26bdc152246f6a1caf1f0667b5f04f1804d599fa (diff)
Use empty path for root scope
-rw-r--r--build2/context.cxx8
-rw-r--r--build2/dump.cxx15
-rw-r--r--build2/parser.cxx9
3 files changed, 16 insertions, 16 deletions
diff --git a/build2/context.cxx b/build2/context.cxx
index a193abf..0966c3a 100644
--- a/build2/context.cxx
+++ b/build2/context.cxx
@@ -80,19 +80,17 @@ namespace build2
operation_table.insert ("install");
operation_table.insert ("uninstall");
- // Create global scope. For Win32 this is not a "real" root path.
- // On POSIX, however, this is a real path. See the comment in
- // <build2/path-map> for details.
+ // Create global scope. Note that the empty path is a prefix for any other
+ // path. See the comment in <butl/prefix-map> for details.
//
{
- auto i (scopes.insert (dir_path ("/"), false));
+ auto i (scopes.insert (dir_path (), false));
global_scope = &i->second;
global_scope->out_path_ = &i->first;
}
scope& gs (*global_scope);
-
// Parse and enter the command line variables. We do it before entering
// any other variables so that all the variables that are overriden are
// marked as such first. Then, as we enter variables, we can verify that
diff --git a/build2/dump.cxx b/build2/dump.cxx
index 9c26235..b959d9d 100644
--- a/build2/dump.cxx
+++ b/build2/dump.cxx
@@ -260,12 +260,17 @@ namespace build2
const dir_path& d (i->first);
++i;
- // We don't want the extra notations (e.g., ~/) provided by
- // diag_relative() since we want the path to be relative to
- // the outer scope.
+ // We don't want the extra notations (e.g., ~/) provided by diag_relative()
+ // since we want the path to be relative to the outer scope. Print the root
+ // scope path (represented by an empty one) as a platform-dependent path
+ // separator.
//
- os << ind << relative (d) << ":" << endl
- << ind << '{';
+ if (d.empty ())
+ os << ind << dir_path::traits::directory_separator;
+ else
+ os << ind << relative (d);
+
+ os << ":" << endl << ind << '{';
const dir_path* orb (relative_base);
relative_base = &d;
diff --git a/build2/parser.cxx b/build2/parser.cxx
index 2776020..1d2766c 100644
--- a/build2/parser.cxx
+++ b/build2/parser.cxx
@@ -24,7 +24,7 @@ namespace build2
{
using type = token_type;
- static const dir_path root_dir ("/");
+ static const dir_path root_dir;
class parser::enter_scope
{
@@ -33,11 +33,8 @@ namespace build2
enter_scope (parser& p, dir_path&& d): p_ (&p), r_ (p.root_), s_ (p.scope_)
{
- // Check for the global scope as a special case. While on POSIX the
- // check is redundant, on Windows the path completion/normalization
- // would otherwise transform it to the out path of the current scope
- // since "/" is a relative path on Windows (and we use "/" even on
- // Windows for that gloabl scope).
+ // Check for the global scope as a special case. Note that the global
+ // scope (empty) path is a prefix for any other scope path.
//
if (d != root_dir)
{