diff options
author | Marc Chevrier <marc.chevrier@gmail.com> | 2020-12-21 23:02:12 +0100 |
---|---|---|
committer | Marc Chevrier <marc.chevrier@gmail.com> | 2020-12-23 15:47:56 +0100 |
commit | 3eacf857e38d0835c629d7443f333de79bd13b81 (patch) | |
tree | 9722bc5e2b42f61e572cc1e96f01d01533580aba /Tests/RunCMake/BuildDepends | |
parent | cfd8a5ac1f443725342517ddbaee51692d8d0324 (diff) | |
download | cmake-3eacf857e38d0835c629d7443f333de79bd13b81.tar.gz |
Tests: Add case for DEPFILE in add_custom_command
Issue: #20286, #21415
Diffstat (limited to 'Tests/RunCMake/BuildDepends')
7 files changed, 123 insertions, 0 deletions
diff --git a/Tests/RunCMake/BuildDepends/CustomCommandDepfile.cmake b/Tests/RunCMake/BuildDepends/CustomCommandDepfile.cmake new file mode 100644 index 0000000000..6ac1291fd2 --- /dev/null +++ b/Tests/RunCMake/BuildDepends/CustomCommandDepfile.cmake @@ -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() +") diff --git a/Tests/RunCMake/BuildDepends/CustomCommandDepfile.step1.cmake b/Tests/RunCMake/BuildDepends/CustomCommandDepfile.step1.cmake new file mode 100644 index 0000000000..0dfe78e705 --- /dev/null +++ b/Tests/RunCMake/BuildDepends/CustomCommandDepfile.step1.cmake @@ -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") diff --git a/Tests/RunCMake/BuildDepends/CustomCommandDepfile.step2.cmake b/Tests/RunCMake/BuildDepends/CustomCommandDepfile.step2.cmake new file mode 100644 index 0000000000..c7115145a3 --- /dev/null +++ b/Tests/RunCMake/BuildDepends/CustomCommandDepfile.step2.cmake @@ -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") diff --git a/Tests/RunCMake/BuildDepends/CustomCommandDepfile.step3.cmake b/Tests/RunCMake/BuildDepends/CustomCommandDepfile.step3.cmake new file mode 100644 index 0000000000..c55ccc1444 --- /dev/null +++ b/Tests/RunCMake/BuildDepends/CustomCommandDepfile.step3.cmake @@ -0,0 +1 @@ +file(TOUCH "${RunCMake_TEST_BINARY_DIR}/step3.timestamp") diff --git a/Tests/RunCMake/BuildDepends/DepfileSubdir/CMakeLists.txt b/Tests/RunCMake/BuildDepends/DepfileSubdir/CMakeLists.txt new file mode 100644 index 0000000000..06db47cdbc --- /dev/null +++ b/Tests/RunCMake/BuildDepends/DepfileSubdir/CMakeLists.txt @@ -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") diff --git a/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake b/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake index f40cde6588..1b7b8d92ef 100644 --- a/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake +++ b/Tests/RunCMake/BuildDepends/RunCMakeTest.cmake @@ -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() diff --git a/Tests/RunCMake/BuildDepends/WriteDepfile.cmake b/Tests/RunCMake/BuildDepends/WriteDepfile.cmake new file mode 100644 index 0000000000..c958cdebca --- /dev/null +++ b/Tests/RunCMake/BuildDepends/WriteDepfile.cmake @@ -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") |