diff options
author | Ben Boeckel <ben.boeckel@kitware.com> | 2023-10-23 20:43:03 (GMT) |
---|---|---|
committer | Ben Boeckel <ben.boeckel@kitware.com> | 2023-11-01 18:08:18 (GMT) |
commit | c22c473bde1d587cc1f0ec2424ff07c00ed3ac3e (patch) | |
tree | 560ec22a9666b768ff55e80d7fc4d1b45e55870f /Tests/RunCMake/NinjaMultiConfig | |
parent | b0177003e12a422845f54865ea5f34e51d8cbf01 (diff) | |
download | CMake-c22c473bde1d587cc1f0ec2424ff07c00ed3ac3e.zip CMake-c22c473bde1d587cc1f0ec2424ff07c00ed3ac3e.tar.gz CMake-c22c473bde1d587cc1f0ec2424ff07c00ed3ac3e.tar.bz2 |
Tests/Ninja*/CustomCommandDepfile: check that deps are in the database
Diffstat (limited to 'Tests/RunCMake/NinjaMultiConfig')
6 files changed, 175 insertions, 0 deletions
diff --git a/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfile-check.cmake b/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfile-check.cmake index 3674aba..673391c 100644 --- a/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfile-check.cmake +++ b/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfile-check.cmake @@ -10,3 +10,38 @@ if(NOT "${build_file}" MATCHES "depfile = test_Debug\\.d") string(CONCAT no_test_Debug_d "\nLog file:\n ${log}\n" "does not have expected line: depfile = test_Debug.d") list(APPEND RunCMake_TEST_FAILED "${no_test_Debug_d}") endif() + +function(_run_ninja dir) + execute_process( + COMMAND "${RunCMake_MAKE_PROGRAM}" ${ARGN} + WORKING_DIRECTORY "${dir}" + OUTPUT_VARIABLE ninja_stdout + ERROR_VARIABLE ninja_stderr + RESULT_VARIABLE ninja_result + ) + if(NOT ninja_result EQUAL 0) + message(STATUS " +============ beginning of ninja's stdout ============ +${ninja_stdout} +=============== end of ninja's stdout =============== +") + message(STATUS " +============ beginning of ninja's stderr ============ +${ninja_stderr} +=============== end of ninja's stderr =============== +") + message(FATAL_ERROR + "top ninja build failed exited with status ${ninja_result}") + endif() + set(ninja_stdout "${ninja_stdout}" PARENT_SCOPE) +endfunction() + +_run_ninja("${RunCMake_BINARY_DIR}/CustomCommandDepfile-build") +_run_ninja("${RunCMake_BINARY_DIR}/CustomCommandDepfile-build" -t deps main.copy.c) +if (ninja_stdout MATCHES "deps not found") + list(APPEND RunCMake_TEST_FAILED "Ninja did not track the deps of main.copy.c in the database") +endif () +_run_ninja("${RunCMake_BINARY_DIR}/CustomCommandDepfile-build" -t deps main.copy2.c) +if (ninja_stdout MATCHES "deps not found") + list(APPEND RunCMake_TEST_FAILED "Ninja did not track the deps of main.copy2.c in the database") +endif () diff --git a/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsByproduct-check.cmake b/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsByproduct-check.cmake new file mode 100644 index 0000000..ced40ab --- /dev/null +++ b/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsByproduct-check.cmake @@ -0,0 +1,47 @@ +set(log "${RunCMake_BINARY_DIR}/CustomCommandDepfileAsByproduct-build/CMakeFiles/impl-Debug.ninja") +file(READ "${log}" build_file) + +set(RunCMake_TEST_FAILED) +if(NOT "${build_file}" MATCHES "depfile = test\\.d") + string(CONCAT no_test_d "Log file:\n ${log}\n" "does not have expected line: depfile = test.d") + list(APPEND RunCMake_TEST_FAILED "${no_test_d}") +endif() +if(NOT "${build_file}" MATCHES "depfile = test_Debug\\.d") + string(CONCAT no_test_Debug_d "\nLog file:\n ${log}\n" "does not have expected line: depfile = test_Debug.d") + list(APPEND RunCMake_TEST_FAILED "${no_test_Debug_d}") +endif() + +function(_run_ninja dir) + execute_process( + COMMAND "${RunCMake_MAKE_PROGRAM}" ${ARGN} + WORKING_DIRECTORY "${dir}" + OUTPUT_VARIABLE ninja_stdout + ERROR_VARIABLE ninja_stderr + RESULT_VARIABLE ninja_result + ) + if(NOT ninja_result EQUAL 0) + message(STATUS " +============ beginning of ninja's stdout ============ +${ninja_stdout} +=============== end of ninja's stdout =============== +") + message(STATUS " +============ beginning of ninja's stderr ============ +${ninja_stderr} +=============== end of ninja's stderr =============== +") + message(FATAL_ERROR + "top ninja build failed exited with status ${ninja_result}") + endif() + set(ninja_stdout "${ninja_stdout}" PARENT_SCOPE) +endfunction() + +_run_ninja("${RunCMake_BINARY_DIR}/CustomCommandDepfileAsByproduct-build") +_run_ninja("${RunCMake_BINARY_DIR}/CustomCommandDepfileAsByproduct-build" -t deps main.copy.c) +if (NOT ninja_stdout MATCHES "deps not found") + list(APPEND RunCMake_TEST_FAILED "Ninja tracked the deps of main.copy.c in the database") +endif () +_run_ninja("${RunCMake_BINARY_DIR}/CustomCommandDepfileAsByproduct-build" -t deps main.copy2.c) +if (NOT ninja_stdout MATCHES "deps not found") + list(APPEND RunCMake_TEST_FAILED "Ninja tracked the deps of main.copy2.c in the database") +endif () diff --git a/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsByproduct.cmake b/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsByproduct.cmake new file mode 100644 index 0000000..e1e49cb --- /dev/null +++ b/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsByproduct.cmake @@ -0,0 +1,22 @@ +add_custom_command( + OUTPUT main.copy.c + BYPRODUCTS "test.d" + COMMAND "${CMAKE_COMMAND}" -E copy + "${CMAKE_CURRENT_SOURCE_DIR}/main.c" + main.copy.c + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + DEPFILE "test.d" + ) + +add_custom_command( + OUTPUT main.copy2.c + BYPRODUCTS "test_$<CONFIG>.d" + COMMAND "${CMAKE_COMMAND}" -E copy + "${CMAKE_CURRENT_SOURCE_DIR}/main.c" + main.copy2.c + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + DEPFILE "test_$<CONFIG>.d" + ) + +add_custom_target(copy ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/main.copy.c" + "${CMAKE_CURRENT_BINARY_DIR}/main.copy2.c") diff --git a/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsOutput-check.cmake b/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsOutput-check.cmake new file mode 100644 index 0000000..d4a87ba --- /dev/null +++ b/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsOutput-check.cmake @@ -0,0 +1,47 @@ +set(log "${RunCMake_BINARY_DIR}/CustomCommandDepfileAsOutput-build/CMakeFiles/impl-Debug.ninja") +file(READ "${log}" build_file) + +set(RunCMake_TEST_FAILED) +if(NOT "${build_file}" MATCHES "depfile = test\\.d") + string(CONCAT no_test_d "Log file:\n ${log}\n" "does not have expected line: depfile = test.d") + list(APPEND RunCMake_TEST_FAILED "${no_test_d}") +endif() +if(NOT "${build_file}" MATCHES "depfile = test_Debug\\.d") + string(CONCAT no_test_Debug_d "\nLog file:\n ${log}\n" "does not have expected line: depfile = test_Debug.d") + list(APPEND RunCMake_TEST_FAILED "${no_test_Debug_d}") +endif() + +function(_run_ninja dir) + execute_process( + COMMAND "${RunCMake_MAKE_PROGRAM}" ${ARGN} + WORKING_DIRECTORY "${dir}" + OUTPUT_VARIABLE ninja_stdout + ERROR_VARIABLE ninja_stderr + RESULT_VARIABLE ninja_result + ) + if(NOT ninja_result EQUAL 0) + message(STATUS " +============ beginning of ninja's stdout ============ +${ninja_stdout} +=============== end of ninja's stdout =============== +") + message(STATUS " +============ beginning of ninja's stderr ============ +${ninja_stderr} +=============== end of ninja's stderr =============== +") + message(FATAL_ERROR + "top ninja build failed exited with status ${ninja_result}") + endif() + set(ninja_stdout "${ninja_stdout}" PARENT_SCOPE) +endfunction() + +_run_ninja("${RunCMake_BINARY_DIR}/CustomCommandDepfileAsOutput-build") +_run_ninja("${RunCMake_BINARY_DIR}/CustomCommandDepfileAsOutput-build" -t deps main.copy.c) +if (NOT ninja_stdout MATCHES "deps not found") + list(APPEND RunCMake_TEST_FAILED "Ninja tracked the deps of main.copy.c in the database") +endif () +_run_ninja("${RunCMake_BINARY_DIR}/CustomCommandDepfileAsOutput-build" -t deps main.copy2.c) +if (NOT ninja_stdout MATCHES "deps not found") + list(APPEND RunCMake_TEST_FAILED "Ninja tracked the deps of main.copy2.c in the database") +endif () diff --git a/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsOutput.cmake b/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsOutput.cmake new file mode 100644 index 0000000..0617970 --- /dev/null +++ b/Tests/RunCMake/NinjaMultiConfig/CustomCommandDepfileAsOutput.cmake @@ -0,0 +1,22 @@ +add_custom_command( + OUTPUT main.copy.c + "test.d" + COMMAND "${CMAKE_COMMAND}" -E copy + "${CMAKE_CURRENT_SOURCE_DIR}/main.c" + main.copy.c + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + DEPFILE "test.d" + ) + +add_custom_command( + OUTPUT main.copy2.c + "test_$<CONFIG>.d" + COMMAND "${CMAKE_COMMAND}" -E copy + "${CMAKE_CURRENT_SOURCE_DIR}/main.c" + main.copy2.c + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" + DEPFILE "test_$<CONFIG>.d" + ) + +add_custom_target(copy ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/main.copy.c" + "${CMAKE_CURRENT_BINARY_DIR}/main.copy2.c") diff --git a/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake b/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake index 0ccf8e8..5c6a22d 100644 --- a/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake +++ b/Tests/RunCMake/NinjaMultiConfig/RunCMakeTest.cmake @@ -388,6 +388,8 @@ unset(RunCMake_TEST_NO_CLEAN) unset(RunCMake_TEST_BINARY_DIR) run_cmake(CustomCommandDepfile) +run_cmake(CustomCommandDepfileAsOutput) +run_cmake(CustomCommandDepfileAsByproduct) set(RunCMake_TEST_OPTIONS "-DCMAKE_CROSS_CONFIGS=all") run_cmake(PerConfigSources) |