From 66de0d06e5b6c002cbc7d18e18685e3ea44d3848 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 9 Oct 2019 12:08:45 +0200 Subject: Prepend pattern search paths to PATH when running binutils This way any dependent tools (such as mt.exe that is invoked by link.exe) are first search for in there. --- libbuild2/bin/init.cxx | 25 +------------------------ libbuild2/bin/utility.hxx | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 24 deletions(-) create mode 100644 libbuild2/bin/utility.hxx (limited to 'libbuild2/bin') diff --git a/libbuild2/bin/init.cxx b/libbuild2/bin/init.cxx index 07888f6..db9db0e 100644 --- a/libbuild2/bin/init.cxx +++ b/libbuild2/bin/init.cxx @@ -20,6 +20,7 @@ #include #include #include +#include using namespace std; using namespace butl; @@ -37,30 +38,6 @@ namespace build2 static const strings liba_lib {"static", "shared"}; static const strings libs_lib {"shared", "static"}; - struct pattern_paths - { - const char* pattern = nullptr; - const char* paths = nullptr; - }; - - static inline pattern_paths - lookup_pattern (scope& rs) - { - pattern_paths r; - - // Theoretically, we could have both the pattern and the search paths, - // for example, the pattern can come first followed by the paths. - // - if (const string* v = cast_null (rs["bin.pattern"])) - { - (path::traits_type::is_separator (v->back ()) - ? r.paths - : r.pattern) = v->c_str (); - } - - return r; - } - bool vars_init (scope& rs, scope&, diff --git a/libbuild2/bin/utility.hxx b/libbuild2/bin/utility.hxx new file mode 100644 index 0000000..cc2b727 --- /dev/null +++ b/libbuild2/bin/utility.hxx @@ -0,0 +1,47 @@ +// file : libbuild2/bin/utility.hxx -*- C++ -*- +// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef LIBBUILD2_BIN_UTILITY_HXX +#define LIBBUILD2_BIN_UTILITY_HXX + +#include +#include + +#include +#include + +namespace build2 +{ + namespace bin + { + // Lookup the bin.pattern value and split it into the pattern and the + // search paths. + // + struct pattern_paths + { + const char* pattern = nullptr; + const char* paths = nullptr; + }; + + inline pattern_paths + lookup_pattern (const scope& rs) + { + pattern_paths r; + + // Theoretically, we could have both the pattern and the search paths, + // for example, the pattern can come first followed by the paths. + // + if (const string* v = cast_null (rs["bin.pattern"])) + { + (path::traits_type::is_separator (v->back ()) + ? r.paths + : r.pattern) = v->c_str (); + } + + return r; + } + } +} + +#endif // LIBBUILD2_BIN_UTILITY_HXX -- cgit v1.1