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.
43 lines
1.4 KiB
CMake
43 lines
1.4 KiB
CMake
include(RunCMake)
|
|
|
|
if(RunCMake_GENERATOR STREQUAL "Borland Makefiles")
|
|
set(fs_delay 3)
|
|
else()
|
|
set(fs_delay 1.125)
|
|
endif()
|
|
|
|
function(run_BuildDepends CASE)
|
|
# Use a single build tree for a few tests without cleaning.
|
|
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${CASE}-build)
|
|
set(RunCMake_TEST_NO_CLEAN 1)
|
|
if(RunCMake_GENERATOR MATCHES "Make|Ninja")
|
|
set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Debug)
|
|
endif()
|
|
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
|
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
|
include(${RunCMake_SOURCE_DIR}/${CASE}.step1.cmake OPTIONAL)
|
|
run_cmake(${CASE})
|
|
set(RunCMake-check-file check.cmake)
|
|
set(check_step 1)
|
|
run_cmake_command(${CASE}-build1 ${CMAKE_COMMAND} --build . --config Debug)
|
|
if(run_BuildDepends_skip_step_2)
|
|
return()
|
|
endif()
|
|
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep ${fs_delay}) # handle 1s resolution
|
|
include(${RunCMake_SOURCE_DIR}/${CASE}.step2.cmake OPTIONAL)
|
|
set(check_step 2)
|
|
run_cmake_command(${CASE}-build2 ${CMAKE_COMMAND} --build . --config Debug)
|
|
endfunction()
|
|
|
|
run_BuildDepends(C-Exe)
|
|
if(NOT RunCMake_GENERATOR MATCHES "Visual Studio [67]|Xcode")
|
|
if(RunCMake_GENERATOR MATCHES "Visual Studio 10")
|
|
# VS 10 forgets to re-link when a manifest changes
|
|
set(run_BuildDepends_skip_step_2 1)
|
|
endif()
|
|
run_BuildDepends(C-Exe-Manifest)
|
|
unset(run_BuildDepends_skip_step_2)
|
|
endif()
|
|
|
|
run_BuildDepends(Custom-Always)
|