CPackTestHelpers.cmake 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. cmake_policy(SET CMP0057 NEW)
  2. function(run_cpack_test_common_ TEST_NAME types build SUBTEST_SUFFIX source)
  3. if(TEST_TYPE IN_LIST types)
  4. set(RunCMake_TEST_NO_CLEAN TRUE)
  5. set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${TEST_NAME}-build")
  6. set(full_test_name_ "${TEST_NAME}")
  7. if(SUBTEST_SUFFIX)
  8. set(RunCMake_TEST_BINARY_DIR "${RunCMake_TEST_BINARY_DIR}-${SUBTEST_SUFFIX}-subtest")
  9. set(full_test_name_ "${full_test_name_}-${SUBTEST_SUFFIX}-subtest")
  10. endif()
  11. # TODO this should be executed only once per ctest run (not per generator)
  12. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  13. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  14. if(EXISTS "${RunCMake_SOURCE_DIR}/${TEST_TYPE}/${TEST_NAME}-Prerequirements.cmake")
  15. include("${RunCMake_SOURCE_DIR}/${TEST_TYPE}/${TEST_NAME}-Prerequirements.cmake")
  16. set(FOUND_PREREQUIREMENTS false)
  17. get_test_prerequirements("FOUND_PREREQUIREMENTS"
  18. "${TEST_CONFIG_DIR}/${type}_config.cmake")
  19. # skip the test if prerequirements are not met
  20. if(NOT FOUND_PREREQUIREMENTS)
  21. message(STATUS "${TEST_NAME} - SKIPPED")
  22. return()
  23. endif()
  24. endif()
  25. # execute cmake
  26. set(RunCMake_TEST_OPTIONS "-DGENERATOR_TYPE=${TEST_TYPE}"
  27. "-DRunCMake_TEST_FILE_PREFIX=${TEST_NAME}"
  28. "-DRunCMake_SUBTEST_SUFFIX=${SUBTEST_SUFFIX}")
  29. run_cmake(${full_test_name_})
  30. # execute optional build step
  31. if(build)
  32. run_cmake_command(${full_test_name_}-Build "${CMAKE_COMMAND}" --build "${RunCMake_TEST_BINARY_DIR}")
  33. endif()
  34. if(source)
  35. set(pack_params_ -G ${TEST_TYPE} --config ./CPackSourceConfig.cmake)
  36. FILE(APPEND ${RunCMake_TEST_BINARY_DIR}/CPackSourceConfig.cmake
  37. "\nset(CPACK_RPM_SOURCE_PKG_BUILD_PARAMS \"-DRunCMake_TEST:STRING=${full_test_name_}\ -DRunCMake_TEST_FILE_PREFIX:STRING=${TEST_NAME}\")")
  38. else()
  39. unset(pack_params_)
  40. endif()
  41. # execute cpack
  42. execute_process(
  43. COMMAND ${CMAKE_CPACK_COMMAND} ${pack_params_}
  44. WORKING_DIRECTORY "${RunCMake_TEST_BINARY_DIR}"
  45. RESULT_VARIABLE "result_"
  46. OUTPUT_FILE "${RunCMake_TEST_BINARY_DIR}/test_output.txt"
  47. ERROR_FILE "${RunCMake_TEST_BINARY_DIR}/test_error.txt"
  48. )
  49. foreach(o out err)
  50. if(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/${TEST_TYPE}/${TEST_NAME}-${SUBTEST_SUFFIX}-std${o}.txt)
  51. set(RunCMake-std${o}-file "${TEST_TYPE}/${TEST_NAME}-${SUBTEST_SUFFIX}-std${o}.txt")
  52. elseif(EXISTS ${RunCMake_SOURCE_DIR}/${TEST_TYPE}/${TEST_NAME}-std${o}.txt)
  53. set(RunCMake-std${o}-file "${TEST_TYPE}/${TEST_NAME}-std${o}.txt")
  54. endif()
  55. endforeach()
  56. # verify result
  57. run_cmake_command(
  58. ${TEST_TYPE}/${full_test_name_}
  59. "${CMAKE_COMMAND}"
  60. -DRunCMake_TEST=${full_test_name_}
  61. -DRunCMake_TEST_FILE_PREFIX=${TEST_NAME}
  62. -DRunCMake_SUBTEST_SUFFIX=${SUBTEST_SUFFIX}
  63. -DGENERATOR_TYPE=${TEST_TYPE}
  64. "-Dsrc_dir=${RunCMake_SOURCE_DIR}"
  65. "-Dbin_dir=${RunCMake_TEST_BINARY_DIR}"
  66. "-Dconfig_file=${config_file}"
  67. -P "${RunCMake_SOURCE_DIR}/VerifyResult.cmake"
  68. )
  69. endif()
  70. endfunction()
  71. function(run_cpack_test TEST_NAME types build)
  72. run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "" false)
  73. endfunction()
  74. function(run_cpack_source_test TEST_NAME types build)
  75. run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "" true)
  76. endfunction()
  77. function(run_cpack_test_subtests TEST_NAME SUBTEST_SUFFIXES types build)
  78. foreach(suffix_ IN LISTS SUBTEST_SUFFIXES)
  79. run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "${suffix_}" false)
  80. endforeach()
  81. endfunction()