aboutsummaryrefslogtreecommitdiff
path: root/build
diff options
context:
space:
mode:
Diffstat (limited to 'build')
-rw-r--r--build/variable.cxx27
1 files changed, 26 insertions, 1 deletions
diff --git a/build/variable.cxx b/build/variable.cxx
index d215b02..03c910d 100644
--- a/build/variable.cxx
+++ b/build/variable.cxx
@@ -144,6 +144,15 @@ namespace build
bool value_traits<string>::
assign (name& n)
{
+ // The below code is quite convoluted because we don't want to
+ // modify the name until we know it good (if it is not, then it
+ // will most likely be printed by the caller in diagnostics).
+
+ // Suspend project qualification.
+ //
+ const string* p (n.proj);
+ n.proj = nullptr;
+
// Convert directory to string.
//
if (n.directory ())
@@ -158,7 +167,23 @@ namespace build
n.value += '/';
}
- return n.simple ();
+ if (!n.simple ())
+ {
+ n.proj = p; // Restore.
+ return false;
+ }
+
+ // Convert project qualification to its string representation.
+ //
+ if (p != nullptr)
+ {
+ string s (*p);
+ s += '%';
+ s += n.value;
+ s.swap (n.value);
+ }
+
+ return true;
}
static bool