aboutsummaryrefslogtreecommitdiff
path: root/build2/target.txx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2017-12-07 12:06:59 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2017-12-07 12:06:59 +0200
commita89f1e4f4efd291beedea03c65c8185b7d0df20e (patch)
treed06b2cb81720ae0c6cc877c2c67201838a10b63a /build2/target.txx
parentc2da5df68610a0070575212bfee67c730ab39128 (diff)
Distinguish between "fixed" and "default" target extensions
This fixes wrong merging of, say, file{README} and file{README.MySQL} (in libmysqlclient).
Diffstat (limited to 'build2/target.txx')
-rw-r--r--build2/target.txx20
1 files changed, 14 insertions, 6 deletions
diff --git a/build2/target.txx b/build2/target.txx
index a91166c..5cb4732 100644
--- a/build2/target.txx
+++ b/build2/target.txx
@@ -42,10 +42,15 @@ namespace build2
//
//
template <const char* ext>
- optional<string>
- target_extension_fix (const target_key&, const scope&, bool)
+ const char*
+ target_extension_fix (const target_key& tk)
{
- return string (ext);
+ // A generic file target type doesn't imply any extension while a very
+ // specific one (say man1) may have a fixed extension. So if one wasn't
+ // specified set it to fixed ext rather than unspecified. For file{}
+ // itself we make it empty which means we treat file{foo} as file{foo.}.
+ //
+ return tk.ext ? tk.ext->c_str () : ext;
}
template <const char* ext>
@@ -67,9 +72,12 @@ namespace build2
//
else if (p == string::npos)
{
- v += '.';
- v += ext;
- return true;
+ if (*ext != '\0') // Don't add empty extension (means no extension).
+ {
+ v += '.';
+ v += ext;
+ return true;
+ }
}
return false;