Ninja: Restat custom command byproducts even with a SYMBOLIC output (#16049)
The change in commit v3.5.0-rc1~198^2 (Ninja: Always re-run custom commands that have symbolic dependencies, 2015-11-19) broke the byproducts feature added by commit v3.2.0-rc1~340^2~2 (Add an option for explicit BYPRODUCTS of custom commands, 2014-11-13) when SYMBOLIC outputs also appear. This case occurs with AUTORCC-generated custom targets because the output is SYMBOLIC (to always run) and the generated file is a byproduct (for restat so dependents do not run unnecessarily). The two use cases conflict because Ninja does not support per-output restat. Favor restat whenever byproducts are present because it is required for byproducts to work correctly. In use cases where we want an always-run chain we simply will not be able to also use byproducts.
This commit is contained in:
parent
ff805113c7
commit
add7abc835
|
@ -444,7 +444,7 @@ cmLocalNinjaGenerator::WriteCustomCommandBuildStatement(
|
|||
this->ConstructComment(ccg),
|
||||
"Custom command for " + ninjaOutputs[0],
|
||||
cc->GetUsesTerminal(),
|
||||
/*restat*/!symbolic,
|
||||
/*restat*/!symbolic || !byproducts.empty(),
|
||||
ninjaOutputs,
|
||||
ninjaDeps,
|
||||
orderOnlyDeps);
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
add_custom_command(
|
||||
OUTPUT gen-byproduct gen-byproduct-stamp
|
||||
BYPRODUCTS byproduct
|
||||
COMMAND ${CMAKE_COMMAND} -E touch gen-byproduct-stamp
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different gen-byproduct-stamp byproduct
|
||||
)
|
||||
set_property(SOURCE gen-byproduct PROPERTY SYMBOLIC 1)
|
||||
add_custom_target(produce DEPENDS gen-byproduct)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT use-byproduct
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/byproduct
|
||||
COMMAND ${CMAKE_COMMAND} -E touch use-byproduct
|
||||
)
|
||||
add_custom_target(drive ALL DEPENDS use-byproduct)
|
||||
add_dependencies(drive produce)
|
||||
|
||||
file(GENERATE OUTPUT check-$<LOWER_CASE:$<CONFIG>>.cmake CONTENT "
|
||||
if (check_step EQUAL 1)
|
||||
set(check_pairs
|
||||
\"${CMAKE_CURRENT_BINARY_DIR}/use-byproduct|${CMAKE_CURRENT_BINARY_DIR}/gen-byproduct-stamp\"
|
||||
)
|
||||
else()
|
||||
set(check_pairs
|
||||
\"${CMAKE_CURRENT_BINARY_DIR}/gen-byproduct-stamp|${CMAKE_CURRENT_BINARY_DIR}/use-byproduct\"
|
||||
)
|
||||
endif()
|
||||
")
|
|
@ -39,4 +39,5 @@ if(NOT RunCMake_GENERATOR MATCHES "Visual Studio [67]|Xcode")
|
|||
unset(run_BuildDepends_skip_step_2)
|
||||
endif()
|
||||
|
||||
run_BuildDepends(Custom-Symbolic-and-Byproduct)
|
||||
run_BuildDepends(Custom-Always)
|
||||
|
|
Loading…
Reference in New Issue