CPackTestHelpers.cmake 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. cmake_policy(SET CMP0057 NEW)
  2. function(run_cpack_test_common_ TEST_NAME types build SUBTEST_SUFFIX source PACKAGING_TYPE)
  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. string(APPEND full_test_name_ "-${PACKAGING_TYPE}-type")
  12. # TODO this should be executed only once per ctest run (not per generator)
  13. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  14. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  15. if(EXISTS "${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-Prerequirements.cmake")
  16. include("${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-Prerequirements.cmake")
  17. set(FOUND_PREREQUIREMENTS false)
  18. get_test_prerequirements("FOUND_PREREQUIREMENTS" "${config_file}")
  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. "-DPACKAGING_TYPE=${PACKAGING_TYPE}")
  30. foreach(o out err)
  31. if(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt)
  32. set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt")
  33. elseif(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-${SUBTEST_SUFFIX}-std${o}.txt)
  34. set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-${SUBTEST_SUFFIX}-std${o}.txt")
  35. elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-std${o}.txt)
  36. set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-std${o}.txt")
  37. elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-std${o}.txt)
  38. set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-std${o}.txt")
  39. else()
  40. unset(RunCMake-std${o}-file)
  41. endif()
  42. endforeach()
  43. run_cmake(${full_test_name_})
  44. # execute optional build step
  45. if(build)
  46. unset(RunCMake-stdout-file)
  47. unset(RunCMake-stderr-file)
  48. run_cmake_command(${full_test_name_}-Build "${CMAKE_COMMAND}" --build "${RunCMake_TEST_BINARY_DIR}")
  49. endif()
  50. if(source)
  51. set(pack_params_ -G ${TEST_TYPE} --config ./CPackSourceConfig.cmake)
  52. FILE(APPEND ${RunCMake_TEST_BINARY_DIR}/CPackSourceConfig.cmake
  53. "\nset(CPACK_RPM_SOURCE_PKG_BUILD_PARAMS \"-DRunCMake_TEST:STRING=${full_test_name_} -DRunCMake_TEST_FILE_PREFIX:STRING=${TEST_NAME} -DGENERATOR_TYPE:STRING=${TEST_TYPE}\")")
  54. else()
  55. unset(pack_params_)
  56. endif()
  57. # execute cpack
  58. execute_process(
  59. COMMAND ${CMAKE_CPACK_COMMAND} ${pack_params_}
  60. WORKING_DIRECTORY "${RunCMake_TEST_BINARY_DIR}"
  61. RESULT_VARIABLE "result_"
  62. OUTPUT_FILE "${RunCMake_TEST_BINARY_DIR}/test_output.txt"
  63. ERROR_FILE "${RunCMake_TEST_BINARY_DIR}/test_error.txt"
  64. )
  65. foreach(o out err)
  66. if(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt)
  67. set(RunCMake-std${o}-file "tests/${TEST_NAME}/${TEST_TYPE}-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt")
  68. elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-${PACKAGING_TYPE}-std${o}.txt)
  69. set(RunCMake-std${o}-file "tests/${TEST_NAME}/${TEST_TYPE}-${PACKAGING_TYPE}-std${o}.txt")
  70. elseif(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt)
  71. set(RunCMake-std${o}-file "tests/${TEST_NAME}/${TEST_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt")
  72. elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-std${o}.txt)
  73. set(RunCMake-std${o}-file "tests/${TEST_NAME}/${TEST_TYPE}-std${o}.txt")
  74. elseif(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${SUBTEST_SUFFIX}-std${o}.txt)
  75. set(RunCMake-std${o}-file "tests/${TEST_NAME}/${SUBTEST_SUFFIX}-std${o}.txt")
  76. elseif(EXISTS ${RunCMake_SOURCE_DIR}/${TEST_TYPE}/default_expected_std${o}.txt)
  77. set(RunCMake-std${o}-file "${TEST_TYPE}/default_expected_std${o}.txt")
  78. else()
  79. unset(RunCMake-std${o}-file)
  80. endif()
  81. endforeach()
  82. # verify result
  83. run_cmake_command(
  84. ${TEST_TYPE}/${full_test_name_}
  85. "${CMAKE_COMMAND}"
  86. -DRunCMake_TEST=${full_test_name_}
  87. -DRunCMake_TEST_FILE_PREFIX=${TEST_NAME}
  88. -DRunCMake_SUBTEST_SUFFIX=${SUBTEST_SUFFIX}
  89. -DGENERATOR_TYPE=${TEST_TYPE}
  90. -DPACKAGING_TYPE=${PACKAGING_TYPE}
  91. "-Dsrc_dir=${RunCMake_SOURCE_DIR}"
  92. "-Dbin_dir=${RunCMake_TEST_BINARY_DIR}"
  93. "-Dconfig_file=${config_file}"
  94. -P "${RunCMake_SOURCE_DIR}/VerifyResult.cmake"
  95. )
  96. endif()
  97. endfunction()
  98. function(run_cpack_test TEST_NAME types build PACKAGING_TYPES)
  99. foreach(packaging_type_ IN LISTS PACKAGING_TYPES)
  100. run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "" false "${packaging_type_}")
  101. endforeach()
  102. endfunction()
  103. function(run_cpack_test_subtests TEST_NAME SUBTEST_SUFFIXES types build PACKAGING_TYPES)
  104. foreach(suffix_ IN LISTS SUBTEST_SUFFIXES)
  105. foreach(packaging_type_ IN LISTS PACKAGING_TYPES)
  106. run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "${suffix_}" false "${packaging_type_}")
  107. endforeach()
  108. endforeach()
  109. endfunction()
  110. function(run_cpack_source_test TEST_NAME types)
  111. run_cpack_test_common_("${TEST_NAME}" "${types}" false "" true "")
  112. endfunction()