mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-23 22:58:37 -05:00
Merge topic 'fix-IS_NEWER_THAN-usage' into release-3.20
b0da671243FetchContent: Don't update timestamps if files don't change404cddb7bbExternalProject: Fix misuse of IS_NEWER_THAN in timestamp checks Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !5825
This commit is contained in:
@@ -2579,11 +2579,24 @@ function(_ep_write_command_script
|
||||
endif()
|
||||
|
||||
if(genex_supported)
|
||||
# Only written at generation phase
|
||||
# Only written at generation phase. This will only change the file's
|
||||
# timestamp if the contents change.
|
||||
file(GENERATE OUTPUT "${script_filename}" CONTENT "${script_content}")
|
||||
else()
|
||||
# Written immediately, needed if script has to be invoked in configure phase
|
||||
file(WRITE "${script_filename}" "${script_content}")
|
||||
# Update the file immediately, needed if script has to be invoked in the
|
||||
# configure phase (e.g. via FetchContent). We need to be careful to avoid
|
||||
# updating the timestamp if the file contents don't change. The file(WRITE)
|
||||
# command always updates the file, so avoid it if we don't need to call it.
|
||||
set(doWrite TRUE)
|
||||
if(EXISTS "${script_filename}")
|
||||
file(READ "${script_filename}" existing_content)
|
||||
if(existing_content STREQUAL script_content)
|
||||
set(doWrite FALSE)
|
||||
endif()
|
||||
endif()
|
||||
if(doWrite)
|
||||
file(WRITE "${script_filename}" "${script_content}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
endfunction()
|
||||
@@ -3916,7 +3929,12 @@ function(_ep_do_preconfigure_steps_now name)
|
||||
|
||||
if(NOT need_to_run)
|
||||
foreach(dep_file ${script_file} ${_EPdepends_${STEP}})
|
||||
if(NOT EXISTS ${dep_file} OR ${dep_file} IS_NEWER_THAN ${stamp_file})
|
||||
# IS_NEWER_THAN is also true if the timestamps are the same. On some
|
||||
# file systems, we only have second resolution timestamps and the
|
||||
# likelihood of having the same timestamp is high. Use the negative
|
||||
# form to ensure we actually get a true "is newer than" test.
|
||||
if(NOT EXISTS ${dep_file} OR
|
||||
NOT ${stamp_file} IS_NEWER_THAN ${dep_file})
|
||||
set(need_to_run TRUE)
|
||||
break()
|
||||
endif()
|
||||
|
||||
@@ -7,7 +7,8 @@ set(quiet "@quiet@")
|
||||
set(script_dir "@CMAKE_CURRENT_FUNCTION_LIST_DIR@/ExternalProject")
|
||||
include(${script_dir}/captured_process_setup.cmake)
|
||||
|
||||
if(NOT "@gitclone_infofile@" IS_NEWER_THAN "@gitclone_stampfile@")
|
||||
if(EXISTS "@gitclone_stampfile@" AND EXISTS "@gitclone_infofile@" AND
|
||||
"@gitclone_stampfile@" IS_NEWER_THAN "@gitclone_infofile@")
|
||||
if(NOT quiet)
|
||||
message(STATUS
|
||||
"Avoiding repeated git clone, stamp file is up to date: "
|
||||
|
||||
@@ -7,7 +7,8 @@ set(quiet "@quiet@")
|
||||
set(script_dir "@CMAKE_CURRENT_FUNCTION_LIST_DIR@/ExternalProject")
|
||||
include(${script_dir}/captured_process_setup.cmake)
|
||||
|
||||
if(NOT "@hgclone_infofile@" IS_NEWER_THAN "@hgclone_stampfile@")
|
||||
if(EXISTS "@hgclone_stampfile@" AND EXISTS "@hgclone_infofile@" AND
|
||||
"@hgclone_stampfile@" IS_NEWER_THAN "@hgclone_infofile@")
|
||||
if(NOT quiet)
|
||||
message(STATUS
|
||||
"Avoiding repeated hg clone, stamp file is up to date: "
|
||||
|
||||
Reference in New Issue
Block a user