summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaik Nijhuis <maik.nijhuis@triopsys.nl>2022-08-04 14:09:20 (GMT)
committerBrad King <brad.king@kitware.com>2022-08-09 12:27:11 (GMT)
commit81fd0d6e265985213ec3d0c1db4b8a6f314481ea (patch)
tree7f6d7b2e759e4e40729a9e3404d4996db9097dce
parentd9e88721ad22f47196dfcdd1e05d153d28536bc9 (diff)
downloadCMake-81fd0d6e265985213ec3d0c1db4b8a6f314481ea.zip
CMake-81fd0d6e265985213ec3d0c1db4b8a6f314481ea.tar.gz
CMake-81fd0d6e265985213ec3d0c1db4b8a6f314481ea.tar.bz2
ExternalProject: Fix install on BUILD_ALWAYS+BUILD_BYPRODUCTS with Ninja
The `BUILD_BYPRODUCTS` option causes the ExternalProject's `build` step in `build.ninja` to have `restat = 1`, so its "always out-of-date" status caused by `BUILD_ALWAYS` does not propagate to the `install` step. Mark the latter step as explicitly always out-of-date too. Fixes: #23820
-rw-r--r--Modules/ExternalProject.cmake14
-rw-r--r--Tests/RunCMake/ExternalProject/BUILD_ALWAYS.cmake3
2 files changed, 17 insertions, 0 deletions
diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
index c7948cd..2520cf3 100644
--- a/Modules/ExternalProject.cmake
+++ b/Modules/ExternalProject.cmake
@@ -3829,6 +3829,19 @@ function(_ep_add_install_command name)
set(uses_terminal "")
endif()
+ # With BUILD_ALWAYS+BUILD_BYPRODUCTS, Ninja restats the
+ # build step outputs and may not consider this step to
+ # be out-of-date. Explicitly mark it out-of-date too.
+ get_property(build_always
+ TARGET ${name}
+ PROPERTY _EP_BUILD_ALWAYS
+ )
+ if(build_always)
+ set(always 1)
+ else()
+ set(always 0)
+ endif()
+
set(__cmdQuoted)
foreach(__item IN LISTS cmd)
string(APPEND __cmdQuoted " [==[${__item}]==]")
@@ -3839,6 +3852,7 @@ function(_ep_add_install_command name)
COMMAND ${__cmdQuoted}
WORKING_DIRECTORY \${binary_dir}
DEPENDEES build
+ ALWAYS \${always}
${log}
${uses_terminal}
)"
diff --git a/Tests/RunCMake/ExternalProject/BUILD_ALWAYS.cmake b/Tests/RunCMake/ExternalProject/BUILD_ALWAYS.cmake
index fdd3ad9..2e5fc6f 100644
--- a/Tests/RunCMake/ExternalProject/BUILD_ALWAYS.cmake
+++ b/Tests/RunCMake/ExternalProject/BUILD_ALWAYS.cmake
@@ -12,6 +12,9 @@ ExternalProject_Add(always
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND "${CMAKE_COMMAND}" -P ${CMAKE_CURRENT_BINARY_DIR}/always-configure.cmake
BUILD_COMMAND "${CMAKE_COMMAND}" -P ${CMAKE_CURRENT_BINARY_DIR}/always-build.cmake
+ COMMAND "${CMAKE_COMMAND}" -E copy_if_different ${CMAKE_CURRENT_LIST_FILE}
+ "${CMAKE_CURRENT_BINARY_DIR}/byproduct.txt"
+ BUILD_BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/byproduct.txt"
BUILD_ALWAYS 1
INSTALL_COMMAND "${CMAKE_COMMAND}" -P ${CMAKE_CURRENT_BINARY_DIR}/always-install.cmake
)