cmake/Tests/RunCMake/CPack/CPackTestHelpers.cmake

152 lines
6.7 KiB
CMake
Raw Normal View History

2015-11-17 17:22:37 +01:00
cmake_policy(SET CMP0057 NEW)
2018-10-28 12:09:07 +01:00
function(run_cpack_test_common_ TEST_NAME types build SUBTEST_SUFFIX source PACKAGING_TYPE package_target)
2015-11-17 17:22:37 +01:00
if(TEST_TYPE IN_LIST types)
2019-11-11 23:01:05 +01:00
string(REGEX MATCH "^[^.]*" GENERATOR_TYPE "${TEST_TYPE}")
2015-11-17 17:22:37 +01:00
set(RunCMake_TEST_NO_CLEAN TRUE)
2018-10-28 12:09:07 +01:00
if(package_target)
set(full_test_name_ "${TEST_NAME}-package-target")
else()
set(full_test_name_ "${TEST_NAME}")
endif()
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${full_test_name_}-build")
2016-10-30 18:24:19 +01:00
if(SUBTEST_SUFFIX)
set(RunCMake_TEST_BINARY_DIR "${RunCMake_TEST_BINARY_DIR}-${SUBTEST_SUFFIX}-subtest")
set(full_test_name_ "${full_test_name_}-${SUBTEST_SUFFIX}-subtest")
endif()
2015-11-17 17:22:37 +01:00
2017-04-14 19:02:05 +02:00
string(APPEND full_test_name_ "-${PACKAGING_TYPE}-type")
2015-11-17 17:22:37 +01:00
# TODO this should be executed only once per ctest run (not per generator)
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
2019-11-11 23:01:05 +01:00
if(EXISTS "${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${GENERATOR_TYPE}-Prerequirements.cmake")
include("${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${GENERATOR_TYPE}-Prerequirements.cmake")
2016-07-09 11:21:54 +02:00
set(FOUND_PREREQUIREMENTS false)
2017-04-14 19:02:05 +02:00
get_test_prerequirements("FOUND_PREREQUIREMENTS" "${config_file}")
2016-07-09 11:21:54 +02:00
# skip the test if prerequirements are not met
if(NOT FOUND_PREREQUIREMENTS)
message(STATUS "${TEST_NAME} - SKIPPED")
return()
endif()
endif()
2015-11-17 17:22:37 +01:00
# execute cmake
2019-11-11 23:01:05 +01:00
set(RunCMake_TEST_OPTIONS "-DGENERATOR_TYPE=${GENERATOR_TYPE}"
2016-10-30 18:24:19 +01:00
"-DRunCMake_TEST_FILE_PREFIX=${TEST_NAME}"
2017-04-14 19:02:05 +02:00
"-DRunCMake_SUBTEST_SUFFIX=${SUBTEST_SUFFIX}"
"-DPACKAGING_TYPE=${PACKAGING_TYPE}")
2018-04-23 21:13:27 +02:00
foreach(o out err)
if(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt)
set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt")
elseif(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-${SUBTEST_SUFFIX}-std${o}.txt)
set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-${SUBTEST_SUFFIX}-std${o}.txt")
elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-std${o}.txt)
set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-std${o}.txt")
elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-std${o}.txt)
set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-std${o}.txt")
else()
unset(RunCMake-std${o}-file)
endif()
endforeach()
2016-10-30 18:24:19 +01:00
run_cmake(${full_test_name_})
2015-11-17 17:22:37 +01:00
# execute optional build step
if(build)
2018-04-23 21:13:27 +02:00
unset(RunCMake-stdout-file)
unset(RunCMake-stderr-file)
2016-10-30 18:24:19 +01:00
run_cmake_command(${full_test_name_}-Build "${CMAKE_COMMAND}" --build "${RunCMake_TEST_BINARY_DIR}")
endif()
if(source)
2019-11-11 23:01:05 +01:00
set(pack_params_ -G ${GENERATOR_TYPE} --config ./CPackSourceConfig.cmake)
2016-10-30 18:24:19 +01:00
FILE(APPEND ${RunCMake_TEST_BINARY_DIR}/CPackSourceConfig.cmake
2019-11-11 23:01:05 +01:00
"\nset(CPACK_RPM_SOURCE_PKG_BUILD_PARAMS \"-DRunCMake_TEST:STRING=${full_test_name_} -DRunCMake_TEST_FILE_PREFIX:STRING=${TEST_NAME} -DGENERATOR_TYPE:STRING=${GENERATOR_TYPE}\")")
2016-10-30 18:24:19 +01:00
else()
unset(pack_params_)
2015-11-17 17:22:37 +01:00
endif()
2018-10-28 12:09:07 +01:00
if(package_target)
set(cpack_command_ ${CMAKE_COMMAND} --build "${RunCMake_TEST_BINARY_DIR}" --target package)
else()
2020-08-30 11:54:41 +02:00
set(cpack_command_ ${CMAKE_CPACK_COMMAND} ${pack_params_} -C Debug)
2018-10-28 12:09:07 +01:00
endif()
2015-11-17 17:22:37 +01:00
# execute cpack
2018-10-28 12:09:07 +01:00
set(SETENV)
if(ENVIRONMENT)
set(SETENV ${CMAKE_COMMAND} -E env "${ENVIRONMENT}")
endif()
2015-11-17 17:22:37 +01:00
execute_process(
2018-10-28 12:09:07 +01:00
COMMAND ${SETENV} ${cpack_command_}
2015-11-17 17:22:37 +01:00
WORKING_DIRECTORY "${RunCMake_TEST_BINARY_DIR}"
2016-10-30 18:24:19 +01:00
RESULT_VARIABLE "result_"
2015-11-17 17:22:37 +01:00
OUTPUT_FILE "${RunCMake_TEST_BINARY_DIR}/test_output.txt"
ERROR_FILE "${RunCMake_TEST_BINARY_DIR}/test_error.txt"
)
2016-10-30 18:24:19 +01:00
foreach(o out err)
2019-11-11 23:01:05 +01:00
if(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${GENERATOR_TYPE}-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt)
set(RunCMake-std${o}-file "tests/${TEST_NAME}/${GENERATOR_TYPE}-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt")
elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${GENERATOR_TYPE}-${PACKAGING_TYPE}-std${o}.txt)
set(RunCMake-std${o}-file "tests/${TEST_NAME}/${GENERATOR_TYPE}-${PACKAGING_TYPE}-std${o}.txt")
elseif(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${GENERATOR_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt)
set(RunCMake-std${o}-file "tests/${TEST_NAME}/${GENERATOR_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt")
elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${GENERATOR_TYPE}-std${o}.txt)
set(RunCMake-std${o}-file "tests/${TEST_NAME}/${GENERATOR_TYPE}-std${o}.txt")
2018-04-23 21:13:27 +02:00
elseif(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${SUBTEST_SUFFIX}-std${o}.txt)
set(RunCMake-std${o}-file "tests/${TEST_NAME}/${SUBTEST_SUFFIX}-std${o}.txt")
2019-11-11 23:01:05 +01:00
elseif(EXISTS ${RunCMake_SOURCE_DIR}/${GENERATOR_TYPE}/default_expected_std${o}.txt)
set(RunCMake-std${o}-file "${GENERATOR_TYPE}/default_expected_std${o}.txt")
2018-04-23 21:13:27 +02:00
else()
unset(RunCMake-std${o}-file)
2016-10-30 18:24:19 +01:00
endif()
endforeach()
2015-11-17 17:22:37 +01:00
# verify result
run_cmake_command(
2019-11-11 23:01:05 +01:00
${GENERATOR_TYPE}/${full_test_name_}
2015-11-17 17:22:37 +01:00
"${CMAKE_COMMAND}"
2016-10-30 18:24:19 +01:00
-DRunCMake_TEST=${full_test_name_}
-DRunCMake_TEST_FILE_PREFIX=${TEST_NAME}
-DRunCMake_SUBTEST_SUFFIX=${SUBTEST_SUFFIX}
2019-11-11 23:01:05 +01:00
-DGENERATOR_TYPE=${GENERATOR_TYPE}
2017-04-14 19:02:05 +02:00
-DPACKAGING_TYPE=${PACKAGING_TYPE}
2015-11-17 17:22:37 +01:00
"-Dsrc_dir=${RunCMake_SOURCE_DIR}"
"-Dbin_dir=${RunCMake_TEST_BINARY_DIR}"
"-Dconfig_file=${config_file}"
-P "${RunCMake_SOURCE_DIR}/VerifyResult.cmake"
)
endif()
endfunction()
2016-10-30 18:24:19 +01:00
2017-04-14 19:02:05 +02:00
function(run_cpack_test TEST_NAME types build PACKAGING_TYPES)
foreach(packaging_type_ IN LISTS PACKAGING_TYPES)
2018-10-28 12:09:07 +01:00
run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "" false "${packaging_type_}" false)
endforeach()
endfunction()
function(run_cpack_test_package_target TEST_NAME types build PACKAGING_TYPES)
foreach(packaging_type_ IN LISTS PACKAGING_TYPES)
run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "" false "${packaging_type_}" true)
2017-04-14 19:02:05 +02:00
endforeach()
2016-10-30 18:24:19 +01:00
endfunction()
2017-04-14 19:02:05 +02:00
function(run_cpack_test_subtests TEST_NAME SUBTEST_SUFFIXES types build PACKAGING_TYPES)
2016-10-30 18:24:19 +01:00
foreach(suffix_ IN LISTS SUBTEST_SUFFIXES)
2017-04-14 19:02:05 +02:00
foreach(packaging_type_ IN LISTS PACKAGING_TYPES)
2018-10-28 12:09:07 +01:00
run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "${suffix_}" false "${packaging_type_}" false)
2017-04-14 19:02:05 +02:00
endforeach()
2016-10-30 18:24:19 +01:00
endforeach()
endfunction()
2017-04-14 19:02:05 +02:00
function(run_cpack_source_test TEST_NAME types)
2018-10-28 12:09:07 +01:00
run_cpack_test_common_("${TEST_NAME}" "${types}" false "" true "" false)
2017-04-14 19:02:05 +02:00
endfunction()