diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2021-04-22 10:10:34 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2021-04-22 10:10:34 +0200 |
commit | 40863a594372ede117533d5c0970a96d60e34371 (patch) | |
tree | ce5b481ebb443c75161d5866dc6a4207df9a766c /libbuild2/cc/guess.cxx | |
parent | 1ac5458eede2b4b2d3bc98cde787348f70328361 (diff) |
Incorporate project environment checksum into cc::compiler_info cache key
Diffstat (limited to 'libbuild2/cc/guess.cxx')
-rw-r--r-- | libbuild2/cc/guess.cxx | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libbuild2/cc/guess.cxx b/libbuild2/cc/guess.cxx index 839bf20..ff96466 100644 --- a/libbuild2/cc/guess.cxx +++ b/libbuild2/cc/guess.cxx @@ -1577,6 +1577,9 @@ namespace build2 // but we include them in case linking is done via the compiler without // loading bin.ld. BTW, the same applies to rc.exe INCLUDE. // + // See also the note on environment and caching below if adding any new + // variables. + // static const char* msvc_env[] = {"INCLUDE", "IFCPATH", "CL", "_CL_", "LIB", "LINK", "_LINK_", nullptr}; @@ -1822,6 +1825,9 @@ namespace build2 // would need to detect which linker is being used at which point we might // as well load bin.ld). // + // See also the note on environment and caching below if adding any new + // variables. + // static const char* gcc_c_env[] = { "CPATH", "C_INCLUDE_PATH", "LIBRARY_PATH", "LD_RUN_PATH", @@ -2275,6 +2281,8 @@ namespace build2 // These are derived from gcc_* plus the sparse documentation (clang(1)) // and source code. // + // See also the note on environment and caching below if adding any new + // variables. // static const char* clang_c_env[] = { "CPATH", "C_INCLUDE_PATH", @@ -3064,6 +3072,7 @@ namespace build2 const compiler_info& guess (const char* xm, lang xl, + const string& ec, const path& xc, const string* xis, const string* xv, @@ -3075,6 +3084,13 @@ namespace build2 { // First check the cache. // + // Note that in case of MSVC (and Clang targeting MSVC) sys_*_dirs can + // be affected by the environment (INCLUDE, LIB, and IFCPATH) which is + // project-specific. So we have to include those into the key. But we + // don't know yet know whether it's those compilers/targets. So it seems + // we have no better choice than to include the project environment if + // overridden. + // // @@ We currently include config.{cc,x}.[pc]options into the key which // means any project-specific tweaks to these result in a different // key. Perhaps we should assume that any options that can affect the @@ -3087,6 +3103,7 @@ namespace build2 sha256 cs; cs.append (static_cast<size_t> (xl)); cs.append (xc.string ()); + if (!ec.empty ()) cs.append (ec); if (xis != nullptr) cs.append (*xis); append_options (cs, x_mo); if (c_po != nullptr) append_options (cs, *c_po); |