Bläddra i källkod

Merge topic 'implicit-includes-autogen'

a8b7cbb787 Autogen: Do not treat hard-coded -I/usr/include exclusion as implicit include

Acked-by: Kitware Robot <[email protected]>
Merge-request: !3159
Brad King 6 år sedan
förälder
incheckning
5674018cc6
1 ändrade filer med 13 tillägg och 8 borttagningar
  1. 13 8
      Source/cmLocalGenerator.cxx

+ 13 - 8
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);
       }
     }