diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmLocalGenerator.cxx | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx index a14fd7d968..2c145e065c 100644 --- a/Source/cmLocalGenerator.cxx +++ b/Source/cmLocalGenerator.cxx @@ -934,10 +934,8 @@ std::vector<BT<std::string>> cmLocalGenerator::GetIncludeDirectoriesImplicit( // Implicit include directories std::vector<std::string> implicitDirs; std::set<std::string> implicitSet; - // Checks if this is not an implicit include directory - auto notImplicit = [&implicitSet](std::string const& dir) { - return (implicitSet.find(dir) == implicitSet.end()); - }; + // Include directories to be excluded as if they were implicit. + std::set<std::string> implicitExclude; { // Raw list of implicit include directories // Start with "standard" directories that we unconditionally add below. @@ -975,7 +973,8 @@ std::vector<BT<std::string>> cmLocalGenerator::GetIncludeDirectoriesImplicit( [](std::string const& d) { return cmHasLiteralSuffix(d, "/usr/include"); }) != impDirVec.end()) { - impDirVec.emplace_back("/usr/include"); + // Only exclude this hard coded path for backwards compatibility. + implicitExclude.emplace("/usr/include"); } for (std::string const& i : impDirVec) { @@ -985,6 +984,12 @@ std::vector<BT<std::string>> cmLocalGenerator::GetIncludeDirectoriesImplicit( } } + // Checks if this is not an excluded (implicit) include directory. + auto notExcluded = [&implicitSet, &implicitExclude](std::string const& dir) { + return ((implicitSet.find(dir) == implicitSet.end()) && + (implicitExclude.find(dir) == implicitExclude.end())); + }; + // Get the target-specific include directories. std::vector<BT<std::string>> userDirs = target->GetIncludeDirectories(config, lang); @@ -1001,7 +1006,7 @@ std::vector<BT<std::string>> cmLocalGenerator::GetIncludeDirectoriesImplicit( cmSystemTools::ComparePath(udr.Value, topBinaryDir) || cmSystemTools::IsSubDirectory(udr.Value, topSourceDir) || cmSystemTools::IsSubDirectory(udr.Value, topBinaryDir)) { - if (notImplicit(udr.Value)) { + if (notExcluded(udr.Value)) { emitBT(udr); } } @@ -1010,7 +1015,7 @@ std::vector<BT<std::string>> cmLocalGenerator::GetIncludeDirectoriesImplicit( // Emit remaining non implicit user direcories. for (BT<std::string> const& udr : userDirs) { - if (notImplicit(udr.Value)) { + if (notExcluded(udr.Value)) { emitBT(udr); } } @@ -1029,7 +1034,7 @@ std::vector<BT<std::string>> cmLocalGenerator::GetIncludeDirectoriesImplicit( if (!stripImplicitDirs) { // Append implicit directories that were requested by the user only for (BT<std::string> const& udr : userDirs) { - if (!notImplicit(udr.Value)) { + if (implicitSet.find(udr.Value) != implicitSet.end()) { emitBT(udr); } } |