CMake/Tests/RunCMake/BuildDepends/Custom-Always.cmake
Brad King 3477b26ff6 Ninja: Always re-run custom commands that have symbolic dependencies
If a custom command has a SYMBOLIC output (that is never actually
created) then do not mark the custom command build statement as
'restat'.  Otherwise other custom commands that depend on the symbolic
output may not always re-run because after running the first custom
command Ninja 'restat' will detect that the output timestamp did not
change and skip its dependents.

This was observed with the ExternalProject BUILD_ALWAYS option where
Ninja would not re-run the 'install' step each time 'build' re-runs.
2015-11-19 15:47:41 -05:00

25 lines
863 B
CMake

add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/before-always
COMMAND ${CMAKE_COMMAND} -E touch before-always
)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/always
COMMAND ${CMAKE_COMMAND} -E touch always-updated
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/before-always
)
set_property(SOURCE always PROPERTY SYMBOLIC 1)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/after-always
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/always
COMMAND ${CMAKE_COMMAND} -E touch after-always
)
add_custom_target(drive ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/after-always)
file(GENERATE OUTPUT check-$<LOWER_CASE:$<CONFIG>>.cmake CONTENT "
set(check_pairs
\"${CMAKE_CURRENT_BINARY_DIR}/always-updated|${CMAKE_CURRENT_BINARY_DIR}/before-always\"
\"${CMAKE_CURRENT_BINARY_DIR}/after-always|${CMAKE_CURRENT_BINARY_DIR}/always-updated\"
)
")