From a89f1e4f4efd291beedea03c65c8185b7d0df20e Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 7 Dec 2017 12:06:59 +0200 Subject: Distinguish between "fixed" and "default" target extensions This fixes wrong merging of, say, file{README} and file{README.MySQL} (in libmysqlclient). --- build2/target.hxx | 36 ++++++------------------------------ 1 file changed, 6 insertions(+), 30 deletions(-) (limited to 'build2/target.hxx') diff --git a/build2/target.hxx b/build2/target.hxx index 73ee2d8..10b0eb3 100644 --- a/build2/target.hxx +++ b/build2/target.hxx @@ -1672,41 +1672,17 @@ namespace build2 // functions. // template - pair> - target_factory (const target_type&, - dir_path d, - dir_path o, - string n, - optional e) + target* + target_factory (const target_type&, dir_path d, dir_path o, string n) { - return make_pair (new T (move (d), move (o), move (n)), move (e)); + return new T (move (d), move (o), move (n)); } - template - pair> - file_factory (const target_type& tt, - dir_path d, - dir_path o, - string n, - optional e) - { - // 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 and this is not a dynamically derived target type, then set - // it to fixed ext rather than unspecified. For file{} itself we make it - // empty which means we treat file{foo} as file{foo.}. - // - if (!e && ext != nullptr && tt.factory == &file_factory) - e = string (ext); - - return make_pair (new T (move (d), move (o), move (n)), move (e)); - } - - // Return fixed target extension. + // Return fixed target extension unless one was specified. // template - optional - target_extension_fix (const target_key&, const scope&, bool); + const char* + target_extension_fix (const target_key&); template bool -- cgit v1.1