RunCMakeTest.cmake 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. include(RunCMake)
  2. # Presets do not support legacy VS generator name architecture suffix.
  3. if(RunCMake_GENERATOR MATCHES "^(Visual Studio [0-9]+ [0-9]+) ")
  4. set(RunCMake_GENERATOR "${CMAKE_MATCH_1}")
  5. endif()
  6. function(run_cmake_package_presets name CMakePresetsPackage_CONFIGURE_PRESETS CMakePresetsPackage_BUILD_PRESETS CMakePresetsPackage_PACKAGE_PRESETS)
  7. set(RunCMake_TEST_SOURCE_DIR "${RunCMake_BINARY_DIR}/${name}")
  8. set(RunCMake_TEST_BINARY_DIR "${RunCMake_TEST_SOURCE_DIR}/build")
  9. set(RunCMake_TEST_COMMAND_WORKING_DIRECTORY "${RunCMake_TEST_SOURCE_DIR}")
  10. set(RunCMake_TEST_NO_CLEAN TRUE)
  11. file(REMOVE_RECURSE "${RunCMake_TEST_SOURCE_DIR}")
  12. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  13. set(CASE_NAME "${name}")
  14. set(CASE_SOURCE_DIR "${RunCMake_SOURCE_DIR}")
  15. configure_file("${RunCMake_SOURCE_DIR}/CMakeLists.txt.in" "${RunCMake_TEST_SOURCE_DIR}/CMakeLists.txt" @ONLY)
  16. if(NOT CMakePresetsPackage_FILE)
  17. set(CMakePresetsPackage_FILE "${RunCMake_SOURCE_DIR}/${name}.json.in")
  18. endif()
  19. if(EXISTS "${CMakePresetsPackage_FILE}")
  20. configure_file("${CMakePresetsPackage_FILE}" "${RunCMake_TEST_SOURCE_DIR}/CMakePresets.json" @ONLY)
  21. endif()
  22. if(NOT CMakeUserPresets_FILE)
  23. set(CMakeUserPresets_FILE "${RunCMake_SOURCE_DIR}/${name}User.json.in")
  24. endif()
  25. if(EXISTS "${CMakeUserPresets_FILE}")
  26. configure_file("${CMakeUserPresets_FILE}" "${RunCMake_TEST_SOURCE_DIR}/CMakeUserPresets.json" @ONLY)
  27. endif()
  28. foreach(ASSET ${CMakePresetsPackage_ASSETS})
  29. configure_file("${RunCMake_SOURCE_DIR}/${ASSET}" "${RunCMake_TEST_SOURCE_DIR}" COPYONLY)
  30. endforeach()
  31. if (NOT CMakePresetsPackage_NO_CONFIGURE)
  32. foreach(CONFIGURE_PRESET ${CMakePresetsPackage_CONFIGURE_PRESETS})
  33. run_cmake_command("${name}-configure-${CONFIGURE_PRESET}"
  34. "${CMAKE_COMMAND}" "--preset" "${CONFIGURE_PRESET}")
  35. endforeach()
  36. endif()
  37. if (NOT CMakePresetsPackage_NO_BUILD)
  38. foreach(BUILD_PRESET ${CMakePresetsPackage_BUILD_PRESETS})
  39. run_cmake_command("${name}-build-${BUILD_PRESET}"
  40. "${CMAKE_COMMAND}" "--build" "--preset" "${BUILD_PRESET}")
  41. endforeach()
  42. endif()
  43. set(eq 0)
  44. foreach(PACKAGE_PRESET ${CMakePresetsPackage_PACKAGE_PRESETS})
  45. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}/default/_CPack_Packages")
  46. if (EXISTS "${RunCMake_SOURCE_DIR}/${name}-package-${PACKAGE_PRESET}-check.cmake")
  47. set(RunCMake-check-file "${name}-package-${PACKAGE_PRESET}-check.cmake")
  48. else()
  49. set(RunCMake-check-file "check.cmake")
  50. endif()
  51. if(eq)
  52. run_cmake_command(${name}-package-${PACKAGE_PRESET}
  53. ${CMAKE_CPACK_COMMAND} "--preset=${PACKAGE_PRESET}" ${ARGN})
  54. set(eq 0)
  55. else()
  56. run_cmake_command(${name}-package-${PACKAGE_PRESET}
  57. ${CMAKE_CPACK_COMMAND} "--preset" "${PACKAGE_PRESET}" ${ARGN})
  58. set(eq 1)
  59. endif()
  60. endforeach()
  61. endfunction()
  62. function(check_cpack_packages generators contents)
  63. include("${RunCMake_TEST_BINARY_DIR}/default/CPackConfig.cmake")
  64. set(cpack_dir "${RunCMake_TEST_BINARY_DIR}/default/_CPack_Packages/${CPACK_TOPLEVEL_TAG}")
  65. file(GLOB dirs RELATIVE "${cpack_dir}" "${cpack_dir}/*")
  66. if(NOT dirs STREQUAL generators)
  67. string(APPEND RunCMake_TEST_FAILED "Expected CPack generators: ${generators}\nActual CPack generators: ${dirs}\n")
  68. endif()
  69. if(contents)
  70. foreach(dir IN LISTS dirs)
  71. set(env_file "${cpack_dir}/${dir}/${CPACK_PACKAGE_FILE_NAME}/env.txt")
  72. file(READ "${env_file}" actual_contents)
  73. if(NOT contents STREQUAL actual_contents)
  74. string(REPLACE "\n" "\n " contents_formatted "${contents}")
  75. string(REPLACE "\n" "\n " actual_contents_formatted "${actual_contents}")
  76. string(APPEND RunCMake_TEST_FAILED "Expected contents of ${env_file}:\n ${contents_formatted}\nActual contents:\n ${actual_contents_formatted}\n")
  77. endif()
  78. endforeach()
  79. endif()
  80. set(RunCMake_TEST_FAILED ${RunCMake_TEST_FAILED} PARENT_SCOPE)
  81. endfunction()
  82. run_cmake_package_presets(UnsupportedVersion "x" "" "")
  83. run_cmake_package_presets(Good "default" "build-default-debug" "no-environment;with-environment;generators;configurations;variables;config-file;debug;verbose;package-name;package-version;package-directory;vendor-name")
  84. run_cmake_package_presets(ListPresets "default" "" "x" "--list-presets")