mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
Avoid unnecessary timestamp bumps on generated-games.h.
If I re-run cmake in a Unix build directory, it unconditionally rewrites generated-games.h, which causes fuzzpuzz to be rebuilt. This is a waste of effort in the extremely common case where the rewritten generated-games.h is identical to the old one. Now we write the data to a temporary file first, and use cmake's 'configure_file' command to copy that to generated-games.h, because it so happens that configure_file checks if the two files are identical and avoids updating the timestamp on the destination file if so. (This will presumably also be a beneficial change on any other platform that uses generated_games.h in the build, such as OS X. I just hadn't noticed until it hit the build I most often re-run in an existing build directory.) cmake 3.21 has a more intuitively spelled command I could have used, called 'file(COPY_FILE src dst ONLY_IF_DIFFERENT)'. But we currently permit cmake all the way back to 3.5, so I can't use that.
This commit is contained in:
@ -145,13 +145,16 @@ endfunction()
|
||||
function(write_generated_games_header)
|
||||
set(generated_include_dir ${CMAKE_CURRENT_BINARY_DIR}/include)
|
||||
set(generated_include_dir ${generated_include_dir} PARENT_SCOPE)
|
||||
set(header_pre ${generated_include_dir}/generated-games.h.pre)
|
||||
set(header ${generated_include_dir}/generated-games.h)
|
||||
|
||||
file(MAKE_DIRECTORY ${generated_include_dir})
|
||||
file(WRITE ${generated_include_dir}/generated-games.h "")
|
||||
file(WRITE ${header_pre} "")
|
||||
list(SORT puzzle_names)
|
||||
foreach(name ${puzzle_names})
|
||||
file(APPEND ${generated_include_dir}/generated-games.h "GAME(${name})\n")
|
||||
file(APPEND ${header_pre} "GAME(${name})\n")
|
||||
endforeach()
|
||||
configure_file(${header_pre} ${header} COPYONLY)
|
||||
endfunction()
|
||||
|
||||
# This has to be run from the unfinished subdirectory, so that the
|
||||
|
Reference in New Issue
Block a user