Merge topic 'test-RunCMake-BuildDepends'

73a058f8 Tests: Add RunCMake.BuildDepends test
438fabf2 Tests: Teach RunCMake infrastructure to use custom check.cmake file
This commit is contained in:
Brad King 2015-09-18 09:56:37 -04:00 committed by CMake Topic Stage
commit 732e86ef3a
8 changed files with 84 additions and 1 deletions

View File

@ -0,0 +1,12 @@
enable_language(C)
add_executable(main ${CMAKE_CURRENT_BINARY_DIR}/main.c)
file(GENERATE OUTPUT check-$<LOWER_CASE:$<CONFIG>>.cmake CONTENT "
set(check_pairs
\"$<TARGET_FILE:main>|${CMAKE_CURRENT_BINARY_DIR}/main.c\"
)
set(check_exes
\"$<TARGET_FILE:main>\"
)
")

View File

@ -0,0 +1,3 @@
file(WRITE "${RunCMake_TEST_BINARY_DIR}/main.c" [[
int main(void) { return 1; }
]])

View File

@ -0,0 +1,3 @@
file(WRITE "${RunCMake_TEST_BINARY_DIR}/main.c" [[
int main(void) { return 2; }
]])

View File

@ -0,0 +1,3 @@
cmake_minimum_required(VERSION 3.3)
project(${RunCMake_TEST} NONE)
include(${RunCMake_TEST}.cmake)

View File

@ -0,0 +1,23 @@
include(RunCMake)
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)
execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 1.125) # 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)

View File

@ -0,0 +1,34 @@
if(EXISTS ${RunCMake_TEST_BINARY_DIR}/check-debug.cmake)
include(${RunCMake_TEST_BINARY_DIR}/check-debug.cmake)
foreach(exe IN LISTS check_exes)
execute_process(COMMAND ${exe} RESULT_VARIABLE res)
if(NOT res EQUAL ${check_step})
set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}
'${exe}' returned '${res}' but expected '${check_step}'
")
endif()
endforeach()
foreach(p IN LISTS check_pairs)
if("${p}" MATCHES "^(.*)\\|(.*)$")
set(lhs "${CMAKE_MATCH_1}")
set(rhs "${CMAKE_MATCH_2}")
if(NOT EXISTS "${lhs}")
set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}
'${lhs}' missing
")
elseif(NOT EXISTS "${rhs}")
set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}
'${rhs}' missing
")
elseif(NOT "${lhs}" IS_NEWER_THAN "${rhs}")
set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}
'${lhs}' is not newer than '${rhs}'
")
endif()
endif()
endforeach()
else()
set(RunCMake_TEST_FAILED "
'${RunCMake_TEST_BINARY_DIR}/check-debug.cmake' missing
")
endif()

View File

@ -124,6 +124,7 @@ if(NOT CMake_TEST_EXTERNAL_CMAKE)
)
endif()
add_RunCMake_test(BuildDepends)
if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles|Ninja")
add_RunCMake_test(CompilerChange)
endif()

View File

@ -115,7 +115,11 @@ function(run_cmake test)
endif()
endforeach()
unset(RunCMake_TEST_FAILED)
include(${top_src}/${test}-check.cmake OPTIONAL)
if(RunCMake-check-file AND EXISTS ${top_src}/${RunCMake-check-file})
include(${top_src}/${RunCMake-check-file})
else()
include(${top_src}/${test}-check.cmake OPTIONAL)
endif()
if(RunCMake_TEST_FAILED)
set(msg "${RunCMake_TEST_FAILED}\n${msg}")
endif()