Browse Source

CMP0052: Do not warn when include dir is not in source or build tree

When the policy was added by commit 783bce29 (Export: Disallow exported
interface includes in src/build tree, 2014-03-31) it accidentally left a
code path that would warn when the include dir is in the install tree
but *not* in the source or build tree.  Fix that.
Brad King 11 years ago
parent
commit
9e0b3153fa
1 changed files with 6 additions and 4 deletions
  1. 6 4
      Source/cmExportFileGenerator.cxx

+ 6 - 4
Source/cmExportFileGenerator.cxx

@@ -277,6 +277,8 @@ static bool checkInterfaceDirs(const std::string &prepro,
            "  \"" << *li << "\"";
       target->GetMakefile()->IssueMessage(messageType, e.str());
       }
+    bool inBinary = isSubDirectory(li->c_str(), topBinaryDir);
+    bool inSource = isSubDirectory(li->c_str(), topSourceDir);
     if (isSubDirectory(li->c_str(), installDir))
       {
       // The include directory is inside the install tree.  If the
@@ -284,8 +286,8 @@ static bool checkInterfaceDirs(const std::string &prepro,
       // fall through to the checks below that the include directory is not
       // also inside the source tree or build tree.
       bool shouldContinue =
-          isSubDirectory(installDir, topBinaryDir)
-        || isSubDirectory(installDir, topSourceDir);
+        (!inBinary || isSubDirectory(installDir, topBinaryDir)) &&
+        (!inSource || isSubDirectory(installDir, topSourceDir));
 
       if (!shouldContinue)
         {
@@ -317,7 +319,7 @@ static bool checkInterfaceDirs(const std::string &prepro,
         continue;
         }
       }
-    if (isSubDirectory(li->c_str(), topBinaryDir))
+    if (inBinary)
       {
       e << "Target \"" << target->GetName() << "\" "
            "INTERFACE_INCLUDE_DIRECTORIES property contains path:\n"
@@ -326,7 +328,7 @@ static bool checkInterfaceDirs(const std::string &prepro,
       }
     if (!inSourceBuild)
       {
-      if (isSubDirectory(li->c_str(), topSourceDir))
+      if (inSource)
         {
         e << "Target \"" << target->GetName() << "\" "
             "INTERFACE_INCLUDE_DIRECTORIES property contains path:\n"