diff options
author | Hugh Sorby <h.sorby@auckland.ac.nz> | 2020-02-13 02:38:52 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2020-02-14 13:50:15 (GMT) |
commit | e46e3442fdea8297d27d765a77d48176cf50a83b (patch) | |
tree | 22388c8267de7e1a43044a6dbd6e308682f62e88 | |
parent | cb967317e4f4f91dd7840035ae1a2b2f800d3ea7 (diff) | |
download | CMake-e46e3442fdea8297d27d765a77d48176cf50a83b.zip CMake-e46e3442fdea8297d27d765a77d48176cf50a83b.tar.gz CMake-e46e3442fdea8297d27d765a77d48176cf50a83b.tar.bz2 |
Makefiles: Re-run CMake if file configured in subdirectory is missing
Add files configured by all subdirectories to `CMAKE_MAKEFILE_PRODUCTS`
rather than just those from the top level.
Fixes: #19719
-rw-r--r-- | Source/cmGlobalUnixMakefileGenerator3.cxx | 17 | ||||
-rw-r--r-- | Tests/RunCMake/configure_file/RerunCMake.cmake | 6 | ||||
-rw-r--r-- | Tests/RunCMake/configure_file/RerunCMake/CMakeLists.txt | 5 | ||||
-rw-r--r-- | Tests/RunCMake/configure_file/RunCMakeTest.cmake | 4 |
4 files changed, 16 insertions, 16 deletions
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx index 90c9ef0..d123830 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.cxx +++ b/Source/cmGlobalUnixMakefileGenerator3.cxx @@ -343,19 +343,18 @@ void cmGlobalUnixMakefileGenerator3::WriteMainCMakefile() const std::string& binDir = lg.GetBinaryDirectory(); // CMake must rerun if a byproduct is missing. - { - cmakefileStream << "# Byproducts of CMake generate step:\n" - << "set(CMAKE_MAKEFILE_PRODUCTS\n"; - for (std::string const& outfile : lg.GetMakefile()->GetOutputFiles()) { + cmakefileStream << "# Byproducts of CMake generate step:\n" + << "set(CMAKE_MAKEFILE_PRODUCTS\n"; + + // add in any byproducts and all the directory information files + std::string tmpStr; + for (const auto& localGen : this->LocalGenerators) { + for (std::string const& outfile : + localGen->GetMakefile()->GetOutputFiles()) { cmakefileStream << " \"" << lg.MaybeConvertToRelativePath(binDir, outfile) << "\"\n"; } - } - - // add in all the directory information files - std::string tmpStr; - for (const auto& localGen : this->LocalGenerators) { tmpStr = cmStrCat(localGen->GetCurrentBinaryDirectory(), "/CMakeFiles/CMakeDirectoryInformation.cmake"); cmakefileStream << " \"" diff --git a/Tests/RunCMake/configure_file/RerunCMake.cmake b/Tests/RunCMake/configure_file/RerunCMake.cmake index 890cc1f..98387d0 100644 --- a/Tests/RunCMake/configure_file/RerunCMake.cmake +++ b/Tests/RunCMake/configure_file/RerunCMake.cmake @@ -1,8 +1,4 @@ message("Running CMake on RerunCMake") # write to stderr if cmake reruns -configure_file( - "${CMAKE_CURRENT_BINARY_DIR}/ConfigureFileInput.txt.in" - "${CMAKE_CURRENT_BINARY_DIR}/ConfigureFileOutput.txt" - @ONLY - ) +add_subdirectory(RerunCMake) # make sure CMakeCache.txt is newer than ConfigureFileOutput.txt execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1) diff --git a/Tests/RunCMake/configure_file/RerunCMake/CMakeLists.txt b/Tests/RunCMake/configure_file/RerunCMake/CMakeLists.txt new file mode 100644 index 0000000..c9681c7 --- /dev/null +++ b/Tests/RunCMake/configure_file/RerunCMake/CMakeLists.txt @@ -0,0 +1,5 @@ +configure_file( + "${CMAKE_CURRENT_BINARY_DIR}/ConfigureFileInput.txt.in" + "${CMAKE_CURRENT_BINARY_DIR}/ConfigureFileOutput.txt" + @ONLY + ) diff --git a/Tests/RunCMake/configure_file/RunCMakeTest.cmake b/Tests/RunCMake/configure_file/RunCMakeTest.cmake index de14468..32a0770 100644 --- a/Tests/RunCMake/configure_file/RunCMakeTest.cmake +++ b/Tests/RunCMake/configure_file/RunCMakeTest.cmake @@ -22,7 +22,7 @@ if(RunCMake_GENERATOR MATCHES "Make") set(RunCMake_TEST_NO_CLEAN 1) file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") - set(in_conf "${RunCMake_TEST_BINARY_DIR}/ConfigureFileInput.txt.in") + set(in_conf "${RunCMake_TEST_BINARY_DIR}/RerunCMake/ConfigureFileInput.txt.in") file(WRITE "${in_conf}" "1") message(STATUS "RerunCMake: first configuration...") @@ -42,7 +42,7 @@ if(RunCMake_GENERATOR MATCHES "Make") run_cmake_command(RerunCMake-nowork ${CMAKE_COMMAND} --build .) message(STATUS "RerunCMake: remove configure_file output...") - file(REMOVE "${RunCMake_TEST_BINARY_DIR}/ConfigureFileOutput.txt") + file(REMOVE "${RunCMake_TEST_BINARY_DIR}/RerunCMake/ConfigureFileOutput.txt") run_cmake_command(RerunCMake-rerun ${CMAKE_COMMAND} --build .) run_cmake_command(RerunCMake-nowork ${CMAKE_COMMAND} --build .) |