Merge topic 'error-on-exported-missing-include-dir'
eabefa8
Error on relative path in INCLUDE_DIRECTORIES target property.
This commit is contained in:
commit
5947d03987
|
@ -530,6 +530,20 @@ cmPolicies::cmPolicies()
|
|||
"The NEW behavior for this policy is to link executables to "
|
||||
"qtmain.lib automatically when they link to QtCore IMPORTED target.",
|
||||
2,8,11,0, cmPolicies::WARN);
|
||||
|
||||
this->DefinePolicy(
|
||||
CMP0021, "CMP0021",
|
||||
"Fatal error on relative paths in INCLUDE_DIRECTORIES target property.",
|
||||
"CMake 2.8.10.2 and lower allowed the INCLUDE_DIRECTORIES target "
|
||||
"property to contain relative paths. The base path for such relative "
|
||||
"entries is not well defined. CMake 2.8.12 issues a FATAL_ERROR if the "
|
||||
"INCLUDE_DIRECTORIES property contains a relative path."
|
||||
"\n"
|
||||
"The OLD behavior for this policy is not to warn about relative paths in "
|
||||
"the INCLUDE_DIRECTORIES target property. "
|
||||
"The NEW behavior for this policy is to issue a FATAL_ERROR if "
|
||||
"INCLUDE_DIRECTORIES contains a relative path.",
|
||||
2,8,11,20130516, cmPolicies::WARN);
|
||||
}
|
||||
|
||||
cmPolicies::~cmPolicies()
|
||||
|
|
|
@ -70,6 +70,8 @@ public:
|
|||
/// instead.
|
||||
CMP0019, ///< No variable re-expansion in include and link info
|
||||
CMP0020, ///< Automatically link Qt executables to qtmain target
|
||||
CMP0021, ///< Fatal error on relative paths in INCLUDE_DIRECTORIES
|
||||
/// target property
|
||||
|
||||
/** \brief Always the last entry.
|
||||
*
|
||||
|
|
|
@ -191,6 +191,7 @@ cmTarget::cmTarget()
|
|||
this->PolicyStatusCMP0004 = cmPolicies::WARN;
|
||||
this->PolicyStatusCMP0008 = cmPolicies::WARN;
|
||||
this->PolicyStatusCMP0020 = cmPolicies::WARN;
|
||||
this->PolicyStatusCMP0021 = cmPolicies::WARN;
|
||||
this->LinkLibrariesAnalyzed = false;
|
||||
this->HaveInstallRule = false;
|
||||
this->DLLPlatform = false;
|
||||
|
@ -1568,6 +1569,8 @@ void cmTarget::SetMakefile(cmMakefile* mf)
|
|||
this->Makefile->GetPolicyStatus(cmPolicies::CMP0008);
|
||||
this->PolicyStatusCMP0020 =
|
||||
this->Makefile->GetPolicyStatus(cmPolicies::CMP0020);
|
||||
this->PolicyStatusCMP0021 =
|
||||
this->Makefile->GetPolicyStatus(cmPolicies::CMP0021);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -2876,14 +2879,41 @@ static void processIncludeDirectories(cmTarget *tgt,
|
|||
|
||||
if (!cmSystemTools::FileIsFullPath(li->c_str()))
|
||||
{
|
||||
cmOStringStream e;
|
||||
bool noMessage = false;
|
||||
cmake::MessageType messageType = cmake::FATAL_ERROR;
|
||||
if (!(*it)->TargetName.empty())
|
||||
{
|
||||
cmOStringStream e;
|
||||
e << "Target \"" << (*it)->TargetName << "\" contains relative "
|
||||
"path in its INTERFACE_INCLUDE_DIRECTORIES:\n"
|
||||
" \"" << *li << "\" ";
|
||||
tgt->GetMakefile()->IssueMessage(cmake::FATAL_ERROR,
|
||||
e.str().c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(tgt->GetPolicyStatusCMP0021())
|
||||
{
|
||||
case cmPolicies::WARN:
|
||||
{
|
||||
cmOStringStream w;
|
||||
e << (mf->GetPolicies()
|
||||
->GetPolicyWarning(cmPolicies::CMP0021)) << "\n";
|
||||
messageType = cmake::AUTHOR_WARNING;
|
||||
}
|
||||
break;
|
||||
case cmPolicies::OLD:
|
||||
noMessage = true;
|
||||
case cmPolicies::REQUIRED_IF_USED:
|
||||
case cmPolicies::REQUIRED_ALWAYS:
|
||||
case cmPolicies::NEW:
|
||||
// Issue the fatal message.
|
||||
break;
|
||||
}
|
||||
e << "Found relative path while evaluating include directories of "
|
||||
"\"" << tgt->GetName() << "\":\n \"" << *li << "\"\n";
|
||||
}
|
||||
if (!noMessage)
|
||||
{
|
||||
tgt->GetMakefile()->IssueMessage(messageType, e.str().c_str());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -106,6 +106,10 @@ public:
|
|||
cmPolicies::PolicyStatus GetPolicyStatusCMP0020() const
|
||||
{ return this->PolicyStatusCMP0020; }
|
||||
|
||||
/** Get the status of policy CMP0021 when the target was created. */
|
||||
cmPolicies::PolicyStatus GetPolicyStatusCMP0021() const
|
||||
{ return this->PolicyStatusCMP0021; }
|
||||
|
||||
/**
|
||||
* Get the list of the custom commands for this target
|
||||
*/
|
||||
|
@ -664,6 +668,7 @@ private:
|
|||
cmPolicies::PolicyStatus PolicyStatusCMP0004;
|
||||
cmPolicies::PolicyStatus PolicyStatusCMP0008;
|
||||
cmPolicies::PolicyStatus PolicyStatusCMP0020;
|
||||
cmPolicies::PolicyStatus PolicyStatusCMP0021;
|
||||
|
||||
// Internal representation details.
|
||||
friend class cmTargetInternals;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1,4 @@
|
|||
CMake Error in CMakeLists.txt:
|
||||
Found relative path while evaluating include directories of "userTarget":
|
||||
|
||||
"foo"
|
|
@ -0,0 +1,9 @@
|
|||
enable_language(CXX)
|
||||
|
||||
cmake_policy(SET CMP0021 NEW)
|
||||
|
||||
add_library(testTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
|
||||
set_property(TARGET testTarget PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$<1:foo>")
|
||||
|
||||
add_library(userTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
|
||||
target_include_directories(userTarget PRIVATE $<TARGET_PROPERTY:testTarget,INTERFACE_INCLUDE_DIRECTORIES>)
|
|
@ -8,3 +8,4 @@ run_cmake(BinaryDirectoryInInterface)
|
|||
run_cmake(RelativePathInInterface)
|
||||
run_cmake(ImportedTarget)
|
||||
run_cmake(RelativePathInGenex)
|
||||
run_cmake(CMP0021)
|
||||
|
|
Loading…
Reference in New Issue