RunCMakeTest.cmake 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. cmake_minimum_required(VERSION 3.16)
  2. include(RunCMake)
  3. # This test does installation of `OBJECT` libraries which does not work with
  4. # multi-arch compilation under Xcode.
  5. if (RunCMake_GENERATOR STREQUAL "Xcode" AND "$ENV{CMAKE_OSX_ARCHITECTURES}" MATCHES "[;$]")
  6. return ()
  7. endif ()
  8. if (RunCMake_GENERATOR STREQUAL "FASTBuild")
  9. # FASTBuild does not offer full control over object paths. Just skip all
  10. # tests rather than expecting some half-supported behavior.
  11. return ()
  12. endif ()
  13. if (RunCMake_GENERATOR STREQUAL "Xcode")
  14. # Xcode does not offer full control over object paths. Just skip all tests
  15. # rather than expecting some half-supported behavior.
  16. return ()
  17. endif ()
  18. function(run_build_test case)
  19. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
  20. set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE:STRING=Debug)
  21. run_cmake(${case})
  22. set(RunCMake_TEST_NO_CLEAN 1)
  23. run_cmake_command(${case}-build ${CMAKE_COMMAND} --build . --config Debug)
  24. endfunction()
  25. function(run_install_test case)
  26. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${case}-build)
  27. set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE:STRING=Debug "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/fake_install")
  28. run_cmake(${case})
  29. set(RunCMake_TEST_NO_CLEAN 1)
  30. run_cmake_command(${case}-build ${CMAKE_COMMAND} --build . --config Debug)
  31. set(prefix "${RunCMake_TEST_BINARY_DIR}/real_install")
  32. run_cmake_command(${case}-install ${CMAKE_COMMAND} --install . --config Debug --prefix "${prefix}")
  33. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Consume-${case}-build)
  34. set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE:STRING=Debug "-DCMAKE_PREFIX_PATH:PATH=${prefix}")
  35. run_cmake(Consume-${case} "-DCMAKE_PREFIX_PATH=${prefix}")
  36. run_cmake_command(Consume-${case}-build ${CMAKE_COMMAND} --build . --config Debug)
  37. run_cmake_command(Consume-${case}-test ${CMAKE_CTEST_COMMAND} -C Debug)
  38. endfunction()
  39. function (check_build_object target objname)
  40. set(cmf_subdir "CMakeFiles/")
  41. set(config_subdir "")
  42. if (RunCMake_GENERATOR MATCHES "Visual Studio")
  43. set(cmf_subdir "")
  44. endif ()
  45. if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
  46. set(config_subdir "Debug/")
  47. endif ()
  48. set(path "${RunCMake_TEST_BINARY_DIR}/${cmf_subdir}${target}.dir/${config_subdir}${objname}${CMAKE_C_OUTPUT_EXTENSION}")
  49. if (NOT EXISTS "${path}")
  50. list(APPEND RunCMake_TEST_FAILED
  51. "Could not find built object at '${path}'")
  52. endif ()
  53. set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
  54. endfunction ()
  55. function (check_short_build_object target objname)
  56. set(config_subdir "")
  57. if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
  58. set(config_subdir "Debug/")
  59. endif ()
  60. set(obj_subdir ".o")
  61. if (RunCMake_GENERATOR MATCHES "(Borland Makefiles|Watcom WMake)")
  62. set(obj_subdir "_o")
  63. endif ()
  64. set(path "${RunCMake_TEST_BINARY_DIR}/${obj_subdir}/${target}/${config_subdir}${objname}${CMAKE_C_OUTPUT_EXTENSION}")
  65. if (NOT EXISTS "${path}")
  66. list(APPEND RunCMake_TEST_FAILED
  67. "Could not find built object at '${path}'")
  68. endif ()
  69. set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
  70. endfunction ()
  71. function (check_installed_object path)
  72. if (NOT EXISTS "${path}")
  73. list(APPEND RunCMake_TEST_FAILED
  74. "Could not find installed object at '${path}'")
  75. endif ()
  76. set(RunCMake_TEST_FAILED "${RunCMake_TEST_FAILED}" PARENT_SCOPE)
  77. endfunction ()
  78. run_cmake(Inspect)
  79. include("${RunCMake_BINARY_DIR}/Inspect-build/info.cmake")
  80. run_build_test(Executable)
  81. run_build_test(SharedLibrary)
  82. run_build_test(StaticLibrary)
  83. if (RunCMake_GENERATOR STREQUAL "Ninja")
  84. run_cmake(Collision)
  85. else ()
  86. run_build_test(CollisionBuild)
  87. endif ()
  88. run_cmake(NoAbsolute)
  89. run_cmake(NoDotDot)
  90. run_cmake(InvalidGeneratorExpression)
  91. run_cmake(UnsupportedGeneratorExpressionContextSensitive)
  92. run_cmake(UnsupportedGeneratorExpressionHeadTarget)
  93. run_cmake(UnsupportedGeneratorExpressionLinkLanguage)
  94. run_install_test(ObjectLibrary)
  95. run_install_test(DisableOnEmpty)
  96. if (RunCMake_GENERATOR MATCHES "(Ninja|Makefiles|Visual Studio)")
  97. run_install_test(ShortStrategy)
  98. run_install_test(ShortInstallStrategy)
  99. endif ()
  100. run_install_test(GeneratorExpression)