From 9fb791e9fad6c63fc1dac49f4d05ae63b8a3db9b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 5 Jan 2016 11:55:15 +0200 Subject: Rename build directory/namespace to build2 --- build2/target.txx | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 build2/target.txx (limited to 'build2/target.txx') diff --git a/build2/target.txx b/build2/target.txx new file mode 100644 index 0000000..3209720 --- /dev/null +++ b/build2/target.txx @@ -0,0 +1,58 @@ +// file : build2/target.txx -*- C++ -*- +// copyright : Copyright (c) 2014-2015 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#include +#include // extension_pool +#include +#include + +namespace build2 +{ + template + const string& + target_extension_fix (const target_key&, scope&) + { + return extension_pool.find (ext); + } + + template + const string& + target_extension_var (const target_key& tk, scope& s) + { + // Include target type/pattern-specific variables. + // + if (auto l = s.lookup (tk, var)) + { + // Help the user here and strip leading '.' from the extension. + // + const string& e (as (*l)); + return extension_pool.find ( + !e.empty () && e.front () == '.' ? string (e, 1) : e); + } + + if (def != nullptr) + return extension_pool.find (def); + + { + diag_record dr; + dr << error << "no default extension in variable '" << var << "'" + << info << "required to derive file name for "; + + // This is a bit hacky: we may be dealing with a target (see + // file::derive_path()) or prerequsite (see search_existing_file()). + // So we are going to check if dir is absolute. If it is, then + // we assume this is a target, otherwise -- prerequsite. + // + if (tk.dir->absolute ()) + dr << "target " << tk; + else + dr << "prerequisite " << prerequisite_key {nullptr, tk, &s}; + + dr << info << "perhaps you forgot to add " + << tk.type->name << "{*}: " << var << " = ..."; + } + + throw failed (); + } +} -- cgit v1.1