diff options
author | Brad King <brad.king@kitware.com> | 2020-12-09 14:13:53 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2020-12-09 14:14:00 (GMT) |
commit | acc9c89914ca184d107efd8a84282553c271de60 (patch) | |
tree | 3f82138ae828c232140d3e4004ade81b66b0d643 | |
parent | d5b12ddcbca4d0919056c7815a9335087e9f2638 (diff) | |
parent | 10809357322789889670d5829bb96fcc545870af (diff) | |
download | CMake-acc9c89914ca184d107efd8a84282553c271de60.zip CMake-acc9c89914ca184d107efd8a84282553c271de60.tar.gz CMake-acc9c89914ca184d107efd8a84282553c271de60.tar.bz2 |
Merge topic 'cmp0116-automoc'
1080935732 AutoGen: Account for CMP0116 in the depfile
287c591079 cmake -E: Fix cmake_transform_depfile escaping of transformed paths
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Kyle Edwards <kyle.edwards@kitware.com>
Merge-request: !5584
-rw-r--r-- | Source/cmQtAutoGenInitializer.cxx | 23 | ||||
-rw-r--r-- | Source/cmTransformDepfile.cxx | 3 | ||||
-rw-r--r-- | Tests/RunCMake/Ninja/Qt5AutoMocDeps.cmake | 3 | ||||
-rw-r--r-- | Tests/RunCMake/Ninja/QtSubDir1/CMakeLists.txt | 4 | ||||
-rw-r--r-- | Tests/RunCMake/Ninja/QtSubDir2/CMakeLists.txt | 4 | ||||
-rw-r--r-- | Tests/RunCMake/Ninja/RunCMakeTest.cmake | 13 |
6 files changed, 42 insertions, 8 deletions
diff --git a/Source/cmQtAutoGenInitializer.cxx b/Source/cmQtAutoGenInitializer.cxx index f27b788..67834f1 100644 --- a/Source/cmQtAutoGenInitializer.cxx +++ b/Source/cmQtAutoGenInitializer.cxx @@ -29,6 +29,7 @@ #include "cmGeneratorExpression.h" #include "cmGeneratorTarget.h" #include "cmGlobalGenerator.h" +#include "cmGlobalNinjaGenerator.h" #include "cmLinkItem.h" #include "cmListFileCache.h" #include "cmLocalGenerator.h" @@ -1237,11 +1238,23 @@ bool cmQtAutoGenInitializer::InitAutogenTarget() const std::string outputFile = cmStrCat(this->Dir.Build, "/", timestampFileName); this->AutogenTarget.DepFile = cmStrCat(this->Dir.Build, "/deps"); - auto relativeBinaryDir = cmSystemTools::RelativePath( - this->LocalGen->GetBinaryDirectory(), - this->LocalGen->GetCurrentBinaryDirectory()); - if (!relativeBinaryDir.empty()) { - relativeBinaryDir = cmStrCat(relativeBinaryDir, "/"); + std::string relativeBinaryDir; + if (dynamic_cast<cmGlobalNinjaGenerator*>(this->GlobalGen)) { + switch (this->LocalGen->GetPolicyStatus(cmPolicies::CMP0116)) { + case cmPolicies::OLD: + case cmPolicies::WARN: + relativeBinaryDir = cmSystemTools::RelativePath( + this->LocalGen->GetBinaryDirectory(), + this->LocalGen->GetCurrentBinaryDirectory()); + if (!relativeBinaryDir.empty()) { + relativeBinaryDir = cmStrCat(relativeBinaryDir, "/"); + } + break; + case cmPolicies::REQUIRED_IF_USED: + case cmPolicies::REQUIRED_ALWAYS: + case cmPolicies::NEW: + break; + } } this->AutogenTarget.DepFileRuleName = cmStrCat(relativeBinaryDir, this->GenTarget->GetName(), "_autogen/", diff --git a/Source/cmTransformDepfile.cxx b/Source/cmTransformDepfile.cxx index e1f8753..163d7e0 100644 --- a/Source/cmTransformDepfile.cxx +++ b/Source/cmTransformDepfile.cxx @@ -47,7 +47,8 @@ void WriteGccDepfile(cmsys::ofstream& fout, const cmGccDepfileContent& content) } fout << ':'; for (auto const& path : dep.paths) { - fout << " \\\n " << path; + fout << " \\\n "; + WriteFilenameGcc(fout, path); } fout << '\n'; } diff --git a/Tests/RunCMake/Ninja/Qt5AutoMocDeps.cmake b/Tests/RunCMake/Ninja/Qt5AutoMocDeps.cmake index d69a119..d314ff3 100644 --- a/Tests/RunCMake/Ninja/Qt5AutoMocDeps.cmake +++ b/Tests/RunCMake/Ninja/Qt5AutoMocDeps.cmake @@ -7,3 +7,6 @@ set(CMAKE_AUTOMOC ON) add_library(simple_lib SHARED simple_lib.cpp) add_executable(app_with_qt app.cpp app_qt.cpp) target_link_libraries(app_with_qt PRIVATE simple_lib Qt5::Core) + +add_subdirectory(QtSubDir1) +add_subdirectory(QtSubDir2) diff --git a/Tests/RunCMake/Ninja/QtSubDir1/CMakeLists.txt b/Tests/RunCMake/Ninja/QtSubDir1/CMakeLists.txt new file mode 100644 index 0000000..64016b6 --- /dev/null +++ b/Tests/RunCMake/Ninja/QtSubDir1/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_policy(SET CMP0116 OLD) + +add_executable(sub_exe_1 ../app.cpp) +target_link_libraries(sub_exe_1 PRIVATE Qt5::Core) diff --git a/Tests/RunCMake/Ninja/QtSubDir2/CMakeLists.txt b/Tests/RunCMake/Ninja/QtSubDir2/CMakeLists.txt new file mode 100644 index 0000000..3176426 --- /dev/null +++ b/Tests/RunCMake/Ninja/QtSubDir2/CMakeLists.txt @@ -0,0 +1,4 @@ +cmake_policy(SET CMP0116 NEW) + +add_executable(sub_exe_2 ../app.cpp) +target_link_libraries(sub_exe_2 PRIVATE Qt5::Core) diff --git a/Tests/RunCMake/Ninja/RunCMakeTest.cmake b/Tests/RunCMake/Ninja/RunCMakeTest.cmake index e6f86a1..b91ab00 100644 --- a/Tests/RunCMake/Ninja/RunCMakeTest.cmake +++ b/Tests/RunCMake/Ninja/RunCMakeTest.cmake @@ -338,8 +338,17 @@ function(run_Qt5AutoMocDeps) # Build and assert that AUTOMOC was not run for app_with_qt. run_ninja("${RunCMake_TEST_BINARY_DIR}") if(ninja_stdout MATCHES "Automatic MOC for target app_with_qt") - message(FATAL_ERROR - "AUTOMOC should not have executed for 'app_with_qt' target:\nstdout:\n${ninja_stdout}") + message(FATAL_ERROR + "AUTOMOC should not have executed for 'app_with_qt' target:\nstdout:\n${ninja_stdout}") + endif() + # Assert that the subdir executables were not rebuilt. + if(ninja_stdout MATCHES "Automatic MOC for target sub_exe_1") + message(FATAL_ERROR + "AUTOMOC should not have executed for 'sub_exe_1' target:\nstdout:\n${ninja_stdout}") + endif() + if(ninja_stdout MATCHES "Automatic MOC for target sub_exe_2") + message(FATAL_ERROR + "AUTOMOC should not have executed for 'sub_exe_2' target:\nstdout:\n${ninja_stdout}") endif() endif() endfunction() |