CPackTestHelpers.cmake 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. cmake_policy(SET CMP0057 NEW)
  2. function(run_cpack_test_common_ TEST_NAME types build SUBTEST_SUFFIX source PACKAGING_TYPE package_target)
  3. if(TEST_TYPE IN_LIST types)
  4. set(RunCMake_TEST_NO_CLEAN TRUE)
  5. if(package_target)
  6. set(full_test_name_ "${TEST_NAME}-package-target")
  7. else()
  8. set(full_test_name_ "${TEST_NAME}")
  9. endif()
  10. set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${full_test_name_}-build")
  11. if(SUBTEST_SUFFIX)
  12. set(RunCMake_TEST_BINARY_DIR "${RunCMake_TEST_BINARY_DIR}-${SUBTEST_SUFFIX}-subtest")
  13. set(full_test_name_ "${full_test_name_}-${SUBTEST_SUFFIX}-subtest")
  14. endif()
  15. string(APPEND full_test_name_ "-${PACKAGING_TYPE}-type")
  16. # TODO this should be executed only once per ctest run (not per generator)
  17. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  18. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  19. if(EXISTS "${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-Prerequirements.cmake")
  20. include("${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-Prerequirements.cmake")
  21. set(FOUND_PREREQUIREMENTS false)
  22. get_test_prerequirements("FOUND_PREREQUIREMENTS" "${config_file}")
  23. # skip the test if prerequirements are not met
  24. if(NOT FOUND_PREREQUIREMENTS)
  25. message(STATUS "${TEST_NAME} - SKIPPED")
  26. return()
  27. endif()
  28. endif()
  29. # execute cmake
  30. set(RunCMake_TEST_OPTIONS "-DGENERATOR_TYPE=${TEST_TYPE}"
  31. "-DRunCMake_TEST_FILE_PREFIX=${TEST_NAME}"
  32. "-DRunCMake_SUBTEST_SUFFIX=${SUBTEST_SUFFIX}"
  33. "-DPACKAGING_TYPE=${PACKAGING_TYPE}")
  34. foreach(o out err)
  35. if(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt)
  36. set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt")
  37. elseif(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-${SUBTEST_SUFFIX}-std${o}.txt)
  38. set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-${SUBTEST_SUFFIX}-std${o}.txt")
  39. elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-std${o}.txt)
  40. set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-${PACKAGING_TYPE}-std${o}.txt")
  41. elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/configure-std${o}.txt)
  42. set(RunCMake-std${o}-file "tests/${TEST_NAME}/configure-std${o}.txt")
  43. else()
  44. unset(RunCMake-std${o}-file)
  45. endif()
  46. endforeach()
  47. run_cmake(${full_test_name_})
  48. # execute optional build step
  49. if(build)
  50. unset(RunCMake-stdout-file)
  51. unset(RunCMake-stderr-file)
  52. run_cmake_command(${full_test_name_}-Build "${CMAKE_COMMAND}" --build "${RunCMake_TEST_BINARY_DIR}")
  53. endif()
  54. if(source)
  55. set(pack_params_ -G ${TEST_TYPE} --config ./CPackSourceConfig.cmake)
  56. FILE(APPEND ${RunCMake_TEST_BINARY_DIR}/CPackSourceConfig.cmake
  57. "\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}\")")
  58. else()
  59. unset(pack_params_)
  60. endif()
  61. if(package_target)
  62. set(cpack_command_ ${CMAKE_COMMAND} --build "${RunCMake_TEST_BINARY_DIR}" --target package)
  63. else()
  64. set(cpack_command_ ${CMAKE_CPACK_COMMAND} ${pack_params_})
  65. endif()
  66. # execute cpack
  67. execute_process(
  68. COMMAND ${cpack_command_}
  69. WORKING_DIRECTORY "${RunCMake_TEST_BINARY_DIR}"
  70. RESULT_VARIABLE "result_"
  71. OUTPUT_FILE "${RunCMake_TEST_BINARY_DIR}/test_output.txt"
  72. ERROR_FILE "${RunCMake_TEST_BINARY_DIR}/test_error.txt"
  73. )
  74. foreach(o out err)
  75. if(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt)
  76. set(RunCMake-std${o}-file "tests/${TEST_NAME}/${TEST_TYPE}-${PACKAGING_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt")
  77. elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-${PACKAGING_TYPE}-std${o}.txt)
  78. set(RunCMake-std${o}-file "tests/${TEST_NAME}/${TEST_TYPE}-${PACKAGING_TYPE}-std${o}.txt")
  79. elseif(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt)
  80. set(RunCMake-std${o}-file "tests/${TEST_NAME}/${TEST_TYPE}-${SUBTEST_SUFFIX}-std${o}.txt")
  81. elseif(EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${TEST_TYPE}-std${o}.txt)
  82. set(RunCMake-std${o}-file "tests/${TEST_NAME}/${TEST_TYPE}-std${o}.txt")
  83. elseif(SUBTEST_SUFFIX AND EXISTS ${RunCMake_SOURCE_DIR}/tests/${TEST_NAME}/${SUBTEST_SUFFIX}-std${o}.txt)
  84. set(RunCMake-std${o}-file "tests/${TEST_NAME}/${SUBTEST_SUFFIX}-std${o}.txt")
  85. elseif(EXISTS ${RunCMake_SOURCE_DIR}/${TEST_TYPE}/default_expected_std${o}.txt)
  86. set(RunCMake-std${o}-file "${TEST_TYPE}/default_expected_std${o}.txt")
  87. else()
  88. unset(RunCMake-std${o}-file)
  89. endif()
  90. endforeach()
  91. # verify result
  92. run_cmake_command(
  93. ${TEST_TYPE}/${full_test_name_}
  94. "${CMAKE_COMMAND}"
  95. -DRunCMake_TEST=${full_test_name_}
  96. -DRunCMake_TEST_FILE_PREFIX=${TEST_NAME}
  97. -DRunCMake_SUBTEST_SUFFIX=${SUBTEST_SUFFIX}
  98. -DGENERATOR_TYPE=${TEST_TYPE}
  99. -DPACKAGING_TYPE=${PACKAGING_TYPE}
  100. "-Dsrc_dir=${RunCMake_SOURCE_DIR}"
  101. "-Dbin_dir=${RunCMake_TEST_BINARY_DIR}"
  102. "-Dconfig_file=${config_file}"
  103. -P "${RunCMake_SOURCE_DIR}/VerifyResult.cmake"
  104. )
  105. endif()
  106. endfunction()
  107. function(run_cpack_test TEST_NAME types build PACKAGING_TYPES)
  108. foreach(packaging_type_ IN LISTS PACKAGING_TYPES)
  109. run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "" false "${packaging_type_}" false)
  110. endforeach()
  111. endfunction()
  112. function(run_cpack_test_package_target TEST_NAME types build PACKAGING_TYPES)
  113. foreach(packaging_type_ IN LISTS PACKAGING_TYPES)
  114. run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "" false "${packaging_type_}" true)
  115. endforeach()
  116. endfunction()
  117. function(run_cpack_test_subtests TEST_NAME SUBTEST_SUFFIXES types build PACKAGING_TYPES)
  118. foreach(suffix_ IN LISTS SUBTEST_SUFFIXES)
  119. foreach(packaging_type_ IN LISTS PACKAGING_TYPES)
  120. run_cpack_test_common_("${TEST_NAME}" "${types}" "${build}" "${suffix_}" false "${packaging_type_}" false)
  121. endforeach()
  122. endforeach()
  123. endfunction()
  124. function(run_cpack_source_test TEST_NAME types)
  125. run_cpack_test_common_("${TEST_NAME}" "${types}" false "" true "" false)
  126. endfunction()