Merge topic 'fix-CMP0052'

3b673586 CMP0052: Make the warning message more informative.
5baa8159 CMP0052: Test that include dirs in install locations cause no warnings.
9e0b3153 CMP0052: Do not warn when include dir is not in source or build tree
This commit is contained in:
Brad King 2014-04-17 09:11:10 -04:00 committed by CMake Topic Stage
commit 2fca2b2310
7 changed files with 34 additions and 5 deletions

View File

@ -277,6 +277,8 @@ static bool checkInterfaceDirs(const std::string &prepro,
" \"" << *li << "\""; " \"" << *li << "\"";
target->GetMakefile()->IssueMessage(messageType, e.str()); 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)) if (isSubDirectory(li->c_str(), installDir))
{ {
// The include directory is inside the install tree. If the // 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 // fall through to the checks below that the include directory is not
// also inside the source tree or build tree. // also inside the source tree or build tree.
bool shouldContinue = bool shouldContinue =
isSubDirectory(installDir, topBinaryDir) (!inBinary || isSubDirectory(installDir, topBinaryDir)) &&
|| isSubDirectory(installDir, topSourceDir); (!inSource || isSubDirectory(installDir, topSourceDir));
if (!shouldContinue) if (!shouldContinue)
{ {
@ -299,7 +301,10 @@ static bool checkInterfaceDirs(const std::string &prepro,
s << "Directory:\n \"" << *li << "\"\nin " s << "Directory:\n \"" << *li << "\"\nin "
"INTERFACE_INCLUDE_DIRECTORIES of target \"" "INTERFACE_INCLUDE_DIRECTORIES of target \""
<< target->GetName() << "\" is a subdirectory of the install " << target->GetName() << "\" is a subdirectory of the install "
"directory:\n \"" << installDir << "\""; "directory:\n \"" << installDir << "\"\nhowever it is also "
"a subdirectory of the " << (inBinary ? "build" : "source")
<< " tree:\n \"" << (inBinary ? topBinaryDir : topSourceDir)
<< "\"" << std::endl;
target->GetMakefile()->IssueMessage(cmake::AUTHOR_WARNING, target->GetMakefile()->IssueMessage(cmake::AUTHOR_WARNING,
s.str()); s.str());
} }
@ -317,7 +322,7 @@ static bool checkInterfaceDirs(const std::string &prepro,
continue; continue;
} }
} }
if (isSubDirectory(li->c_str(), topBinaryDir)) if (inBinary)
{ {
e << "Target \"" << target->GetName() << "\" " e << "Target \"" << target->GetName() << "\" "
"INTERFACE_INCLUDE_DIRECTORIES property contains path:\n" "INTERFACE_INCLUDE_DIRECTORIES property contains path:\n"
@ -326,7 +331,7 @@ static bool checkInterfaceDirs(const std::string &prepro,
} }
if (!inSourceBuild) if (!inSourceBuild)
{ {
if (isSubDirectory(li->c_str(), topSourceDir)) if (inSource)
{ {
e << "Target \"" << target->GetName() << "\" " e << "Target \"" << target->GetName() << "\" "
"INTERFACE_INCLUDE_DIRECTORIES property contains path:\n" "INTERFACE_INCLUDE_DIRECTORIES property contains path:\n"

View File

@ -12,4 +12,9 @@ CMake Warning \(dev\) in CMakeLists.txt:
of the install directory: of the install directory:
".*Tests/RunCMake/include_directories/prefix" ".*Tests/RunCMake/include_directories/prefix"
however it is also a subdirectory of the build tree:
".*Tests/RunCMake/include_directories/prefix/BinInInstallPrefix-CMP0052-WARN-build"
This warning is for project developers. Use -Wno-dev to suppress it. This warning is for project developers. Use -Wno-dev to suppress it.

View File

@ -0,0 +1 @@
^$

View File

@ -0,0 +1,9 @@
add_library(testTarget empty.cpp)
target_include_directories(testTarget INTERFACE "${CMAKE_INSTALL_PREFIX}/dir")
install(TARGETS testTarget EXPORT testTargets
DESTINATION lib
)
install(EXPORT testTargets DESTINATION lib/cmake)

View File

@ -13,6 +13,9 @@ run_cmake(install_config)
run_cmake(incomplete-genex) run_cmake(incomplete-genex)
run_cmake(export-NOWARN) run_cmake(export-NOWARN)
set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/DirInInstallPrefix/prefix")
run_cmake(DirInInstallPrefix)
configure_file( configure_file(
"${RunCMake_SOURCE_DIR}/CMakeLists.txt" "${RunCMake_SOURCE_DIR}/CMakeLists.txt"
"${RunCMake_BINARY_DIR}/copy/CMakeLists.txt" "${RunCMake_BINARY_DIR}/copy/CMakeLists.txt"

View File

@ -12,4 +12,9 @@ CMake Warning \(dev\) in CMakeLists.txt:
of the install directory: of the install directory:
".*Tests/RunCMake/include_directories/prefix" ".*Tests/RunCMake/include_directories/prefix"
however it is also a subdirectory of the source tree:
".*Tests/RunCMake/include_directories/prefix/src"
This warning is for project developers. Use -Wno-dev to suppress it. This warning is for project developers. Use -Wno-dev to suppress it.