mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-16 14:08:35 +08:00
Tests: Add case for DEPFILE in add_custom_command
Issue: #20286, #21415
This commit is contained in:
61
Tests/RunCMake/BuildDepends/CustomCommandDepfile.cmake
Normal file
61
Tests/RunCMake/BuildDepends/CustomCommandDepfile.cmake
Normal file
@@ -0,0 +1,61 @@
|
||||
cmake_policy(SET CMP0116 NEW)
|
||||
enable_language(C)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT topcc.c
|
||||
DEPFILE topcc.c.d
|
||||
COMMAND ${CMAKE_COMMAND} -DOUTFILE=topcc.c -DINFILE=topccdep.txt -DDEPFILE=topcc.c.d -P "${CMAKE_CURRENT_LIST_DIR}/WriteDepfile.cmake"
|
||||
)
|
||||
add_custom_target(topcc ALL DEPENDS topcc.c)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT topexe.c
|
||||
DEPFILE ${CMAKE_CURRENT_BINARY_DIR}/topexe.c.d
|
||||
COMMAND ${CMAKE_COMMAND} -DOUTFILE=topexe.c "-DINFILE=${CMAKE_CURRENT_BINARY_DIR}/topexedep.txt" -DDEPFILE=topexe.c.d -P "${CMAKE_CURRENT_LIST_DIR}/WriteDepfile.cmake"
|
||||
)
|
||||
add_executable(topexe "${CMAKE_CURRENT_BINARY_DIR}/topexe.c")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT toplib.c
|
||||
DEPFILE toplib.c.d
|
||||
COMMAND ${CMAKE_COMMAND} -DOUTFILE=toplib.c -DINFILE=toplibdep.txt -DDEPFILE=toplib.c.d -P "${CMAKE_CURRENT_LIST_DIR}/WriteDepfile.cmake"
|
||||
)
|
||||
add_library(toplib STATIC toplib.c)
|
||||
|
||||
add_subdirectory(DepfileSubdir)
|
||||
|
||||
file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/check-$<LOWER_CASE:$<CONFIG>>.cmake CONTENT "
|
||||
function(check_exists file)
|
||||
if(NOT EXISTS \"\${file}\")
|
||||
string(APPEND RunCMake_TEST_FAILED \"\${file} does not exist\\n\")
|
||||
endif()
|
||||
set(RunCMake_TEST_FAILED \"\${RunCMake_TEST_FAILED}\" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(check_not_exists file)
|
||||
if(EXISTS \"\${file}\")
|
||||
string(APPEND RunCMake_TEST_FAILED \"\${file} exists\\n\")
|
||||
endif()
|
||||
set(RunCMake_TEST_FAILED \"\${RunCMake_TEST_FAILED}\" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
set(check_pairs
|
||||
\"${CMAKE_BINARY_DIR}/topcc.c|${CMAKE_BINARY_DIR}/topccdep.txt\"
|
||||
\"$<TARGET_FILE:topexe>|${CMAKE_BINARY_DIR}/topexedep.txt\"
|
||||
\"$<TARGET_FILE:toplib>|${CMAKE_BINARY_DIR}/toplibdep.txt\"
|
||||
\"${CMAKE_BINARY_DIR}/DepfileSubdir/subcc.c|${CMAKE_BINARY_DIR}/DepfileSubdir/subccdep.txt\"
|
||||
\"$<TARGET_FILE:subexe>|${CMAKE_BINARY_DIR}/DepfileSubdir/subexedep.txt\"
|
||||
\"$<TARGET_FILE:sublib>|${CMAKE_BINARY_DIR}/DepfileSubdir/sublibdep.txt\"
|
||||
)
|
||||
|
||||
if(check_step EQUAL 3)
|
||||
list(APPEND check_pairs
|
||||
\"${CMAKE_BINARY_DIR}/step3.timestamp|${CMAKE_BINARY_DIR}/topcc.c\"
|
||||
\"${CMAKE_BINARY_DIR}/step3.timestamp|$<TARGET_FILE:topexe>\"
|
||||
\"${CMAKE_BINARY_DIR}/step3.timestamp|$<TARGET_FILE:toplib>\"
|
||||
\"${CMAKE_BINARY_DIR}/step3.timestamp|${CMAKE_BINARY_DIR}/DepfileSubdir/subcc.c\"
|
||||
\"${CMAKE_BINARY_DIR}/step3.timestamp|$<TARGET_FILE:subexe>\"
|
||||
\"${CMAKE_BINARY_DIR}/step3.timestamp|$<TARGET_FILE:sublib>\"
|
||||
)
|
||||
endif()
|
||||
")
|
10
Tests/RunCMake/BuildDepends/CustomCommandDepfile.step1.cmake
Normal file
10
Tests/RunCMake/BuildDepends/CustomCommandDepfile.step1.cmake
Normal file
@@ -0,0 +1,10 @@
|
||||
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/DepfileSubdir")
|
||||
file(REMOVE "${RunCMake_TEST_BINARY_DIR}/../sublib.c")
|
||||
file(REMOVE "${RunCMake_TEST_BINARY_DIR}/step3.timestamp")
|
||||
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/topccdep.txt")
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/topexedep.txt")
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/toplibdep.txt")
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/DepfileSubdir/subccdep.txt")
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/DepfileSubdir/subexedep.txt")
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/DepfileSubdir/sublibdep.txt")
|
@@ -0,0 +1,6 @@
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/topccdep.txt")
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/topexedep.txt")
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/toplibdep.txt")
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/DepfileSubdir/subccdep.txt")
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/DepfileSubdir/subexedep.txt")
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/DepfileSubdir/sublibdep.txt")
|
@@ -0,0 +1 @@
|
||||
file(TOUCH "${RunCMake_TEST_BINARY_DIR}/step3.timestamp")
|
22
Tests/RunCMake/BuildDepends/DepfileSubdir/CMakeLists.txt
Normal file
22
Tests/RunCMake/BuildDepends/DepfileSubdir/CMakeLists.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
cmake_policy(SET CMP0116 NEW)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT subcc.c
|
||||
DEPFILE subcc.c.d
|
||||
COMMAND ${CMAKE_COMMAND} -DOUTFILE=subcc.c -DINFILE=subccdep.txt -DDEPFILE=subcc.c.d -P "${CMAKE_CURRENT_LIST_DIR}/../WriteDepfile.cmake"
|
||||
)
|
||||
add_custom_target(subcc ALL DEPENDS subcc.c)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT subexe.c
|
||||
DEPFILE subexe.c.d
|
||||
COMMAND ${CMAKE_COMMAND} -DOUTFILE=subexe.c -DINFILE=subexedep.txt -DDEPFILE=subexe.c.d -P "${CMAKE_CURRENT_LIST_DIR}/../WriteDepfile.cmake"
|
||||
)
|
||||
add_executable(subexe subexe.c)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/../sublib.c
|
||||
DEPFILE ${CMAKE_CURRENT_BINARY_DIR}/sublib.c.d
|
||||
COMMAND ${CMAKE_COMMAND} -DOUTFILE=${CMAKE_BINARY_DIR}/../sublib.c "-DINFILE=${CMAKE_CURRENT_BINARY_DIR}/sublibdep.txt" -DDEPFILE=sublib.c.d -P "${CMAKE_CURRENT_LIST_DIR}/../WriteDepfile.cmake"
|
||||
)
|
||||
add_library(sublib STATIC "${CMAKE_BINARY_DIR}/../sublib.c")
|
@@ -30,8 +30,17 @@ function(run_BuildDepends CASE)
|
||||
include(${RunCMake_SOURCE_DIR}/${CASE}.step2.cmake OPTIONAL)
|
||||
set(check_step 2)
|
||||
run_cmake_command(${CASE}-build2 ${CMAKE_COMMAND} --build . --config Debug)
|
||||
if(run_BuildDepends_skip_step_3)
|
||||
return()
|
||||
endif()
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep ${fs_delay}) # handle 1s resolution
|
||||
include(${RunCMake_SOURCE_DIR}/${CASE}.step3.cmake OPTIONAL)
|
||||
set(check_step 3)
|
||||
run_cmake_command(${CASE}-build3 ${CMAKE_COMMAND} --build . --config Debug)
|
||||
endfunction()
|
||||
|
||||
set(run_BuildDepends_skip_step_3 1)
|
||||
|
||||
run_BuildDepends(C-Exe)
|
||||
if(NOT RunCMake_GENERATOR STREQUAL "Xcode")
|
||||
if(RunCMake_GENERATOR MATCHES "Visual Studio 10" OR
|
||||
@@ -128,3 +137,9 @@ endif()
|
||||
if (RunCMake_GENERATOR MATCHES "Makefiles")
|
||||
run_cmake(CustomCommandDependencies-BadArgs)
|
||||
endif()
|
||||
|
||||
if(RunCMake_GENERATOR MATCHES "Make|Ninja")
|
||||
unset(run_BuildDepends_skip_step_3)
|
||||
run_BuildDepends(CustomCommandDepfile)
|
||||
set(run_BuildDepends_skip_step_3 1)
|
||||
endif()
|
||||
|
8
Tests/RunCMake/BuildDepends/WriteDepfile.cmake
Normal file
8
Tests/RunCMake/BuildDepends/WriteDepfile.cmake
Normal file
@@ -0,0 +1,8 @@
|
||||
file(WRITE "${OUTFILE}" [[int main(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
]])
|
||||
string(REPLACE [[ ]] [[\ ]] OUTFILE "${OUTFILE}")
|
||||
string(REPLACE [[ ]] [[\ ]] INFILE "${INFILE}")
|
||||
file(WRITE "${DEPFILE}" "${OUTFILE}: ${INFILE}\n")
|
Reference in New Issue
Block a user