From 9e0b3153fa2fa9e1b51d1fd7d265a114958e7f0a Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 16 Apr 2014 15:53:57 -0400 Subject: 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. --- Source/cmExportFileGenerator.cxx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx index 42fce6d..25ffe1a 100644 --- a/Source/cmExportFileGenerator.cxx +++ b/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" -- cgit v0.12 From 5baa81592be69a87c10380daaa03da48c3fc729f Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 16 Apr 2014 22:49:40 +0200 Subject: CMP0052: Test that include dirs in install locations cause no warnings. --- Tests/RunCMake/include_directories/DirInInstallPrefix-result.txt | 1 + Tests/RunCMake/include_directories/DirInInstallPrefix-stderr.txt | 1 + Tests/RunCMake/include_directories/DirInInstallPrefix.cmake | 9 +++++++++ Tests/RunCMake/include_directories/RunCMakeTest.cmake | 3 +++ 4 files changed, 14 insertions(+) create mode 100644 Tests/RunCMake/include_directories/DirInInstallPrefix-result.txt create mode 100644 Tests/RunCMake/include_directories/DirInInstallPrefix-stderr.txt create mode 100644 Tests/RunCMake/include_directories/DirInInstallPrefix.cmake diff --git a/Tests/RunCMake/include_directories/DirInInstallPrefix-result.txt b/Tests/RunCMake/include_directories/DirInInstallPrefix-result.txt new file mode 100644 index 0000000..573541a --- /dev/null +++ b/Tests/RunCMake/include_directories/DirInInstallPrefix-result.txt @@ -0,0 +1 @@ +0 diff --git a/Tests/RunCMake/include_directories/DirInInstallPrefix-stderr.txt b/Tests/RunCMake/include_directories/DirInInstallPrefix-stderr.txt new file mode 100644 index 0000000..10f3293 --- /dev/null +++ b/Tests/RunCMake/include_directories/DirInInstallPrefix-stderr.txt @@ -0,0 +1 @@ +^$ diff --git a/Tests/RunCMake/include_directories/DirInInstallPrefix.cmake b/Tests/RunCMake/include_directories/DirInInstallPrefix.cmake new file mode 100644 index 0000000..d6f08bd --- /dev/null +++ b/Tests/RunCMake/include_directories/DirInInstallPrefix.cmake @@ -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) diff --git a/Tests/RunCMake/include_directories/RunCMakeTest.cmake b/Tests/RunCMake/include_directories/RunCMakeTest.cmake index 434beb9..c5b29d0 100644 --- a/Tests/RunCMake/include_directories/RunCMakeTest.cmake +++ b/Tests/RunCMake/include_directories/RunCMakeTest.cmake @@ -13,6 +13,9 @@ run_cmake(install_config) run_cmake(incomplete-genex) run_cmake(export-NOWARN) +set(RunCMake_TEST_OPTIONS "-DCMAKE_INSTALL_PREFIX=${RunCMake_BINARY_DIR}/DirInInstallPrefix/prefix") +run_cmake(DirInInstallPrefix) + configure_file( "${RunCMake_SOURCE_DIR}/CMakeLists.txt" "${RunCMake_BINARY_DIR}/copy/CMakeLists.txt" -- cgit v0.12 From 3b673586f520cf87ae6a0a923a88ad9dadb80b52 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 16 Apr 2014 23:46:13 +0200 Subject: CMP0052: Make the warning message more informative. Print the reason for the offending entry in the INTERFACE_INCLUDE_DIRECTORIES. --- Source/cmExportFileGenerator.cxx | 5 ++++- .../include_directories/BinInInstallPrefix-CMP0052-WARN-stderr.txt | 5 +++++ .../include_directories/SrcInInstallPrefix-CMP0052-WARN-stderr.txt | 5 +++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx index 25ffe1a..2db4086 100644 --- a/Source/cmExportFileGenerator.cxx +++ b/Source/cmExportFileGenerator.cxx @@ -301,7 +301,10 @@ static bool checkInterfaceDirs(const std::string &prepro, s << "Directory:\n \"" << *li << "\"\nin " "INTERFACE_INCLUDE_DIRECTORIES of target \"" << 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, s.str()); } diff --git a/Tests/RunCMake/include_directories/BinInInstallPrefix-CMP0052-WARN-stderr.txt b/Tests/RunCMake/include_directories/BinInInstallPrefix-CMP0052-WARN-stderr.txt index f6d408c..054bff5 100644 --- a/Tests/RunCMake/include_directories/BinInInstallPrefix-CMP0052-WARN-stderr.txt +++ b/Tests/RunCMake/include_directories/BinInInstallPrefix-CMP0052-WARN-stderr.txt @@ -12,4 +12,9 @@ CMake Warning \(dev\) in CMakeLists.txt: of the install directory: ".*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. diff --git a/Tests/RunCMake/include_directories/SrcInInstallPrefix-CMP0052-WARN-stderr.txt b/Tests/RunCMake/include_directories/SrcInInstallPrefix-CMP0052-WARN-stderr.txt index 78710c0..0b13fd8 100644 --- a/Tests/RunCMake/include_directories/SrcInInstallPrefix-CMP0052-WARN-stderr.txt +++ b/Tests/RunCMake/include_directories/SrcInInstallPrefix-CMP0052-WARN-stderr.txt @@ -12,4 +12,9 @@ CMake Warning \(dev\) in CMakeLists.txt: of the install directory: ".*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. -- cgit v0.12