summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/cmExportFileGenerator.cxx38
-rw-r--r--Source/cmPolicies.cxx6
-rw-r--r--Source/cmPolicies.h2
-rw-r--r--Source/cmTarget.h3
4 files changed, 47 insertions, 2 deletions
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index b38c48b..42fce6d 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -279,7 +279,43 @@ static bool checkInterfaceDirs(const std::string &prepro,
}
if (isSubDirectory(li->c_str(), installDir))
{
- continue;
+ // The include directory is inside the install tree. If the
+ // install tree is not inside the source tree or build tree then
+ // 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);
+
+ if (!shouldContinue)
+ {
+ switch(target->GetPolicyStatusCMP0052())
+ {
+ case cmPolicies::WARN:
+ {
+ cmOStringStream s;
+ s << target->GetMakefile()->GetPolicies()
+ ->GetPolicyWarning(cmPolicies::CMP0052) << "\n";
+ s << "Directory:\n \"" << *li << "\"\nin "
+ "INTERFACE_INCLUDE_DIRECTORIES of target \""
+ << target->GetName() << "\" is a subdirectory of the install "
+ "directory:\n \"" << installDir << "\"";
+ target->GetMakefile()->IssueMessage(cmake::AUTHOR_WARNING,
+ s.str());
+ }
+ case cmPolicies::OLD:
+ shouldContinue = true;
+ break;
+ case cmPolicies::REQUIRED_ALWAYS:
+ case cmPolicies::REQUIRED_IF_USED:
+ case cmPolicies::NEW:
+ break;
+ }
+ }
+ if (shouldContinue)
+ {
+ continue;
+ }
}
if (isSubDirectory(li->c_str(), topBinaryDir))
{
diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 759df91..309f280 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -348,6 +348,12 @@ cmPolicies::cmPolicies()
CMP0051, "CMP0051",
"List TARGET_OBJECTS in SOURCES target property.",
3,1,0, cmPolicies::WARN);
+
+ this->DefinePolicy(
+ CMP0052, "CMP0052",
+ "Reject source and build dirs in installed "
+ "INTERFACE_INCLUDE_DIRECTORIES.",
+ 3,1,0, cmPolicies::WARN);
}
cmPolicies::~cmPolicies()
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 7a08a34..60f35c2 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -105,6 +105,8 @@ public:
CMP0049, ///< Do not expand variables in target source entries
CMP0050, ///< Disallow add_custom_command SOURCE signatures
CMP0051, ///< List TARGET_OBJECTS in SOURCES target property
+ CMP0052, ///< Reject source and build dirs in installed
+ /// INTERFACE_INCLUDE_DIRECTORIES
/** \brief Always the last entry.
*
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 055e029..33db768 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -30,7 +30,8 @@
F(CMP0038) \
F(CMP0041) \
F(CMP0042) \
- F(CMP0046)
+ F(CMP0046) \
+ F(CMP0052)
class cmake;
class cmMakefile;