RunCMakeTest.cmake 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. include(RunCMake)
  2. set(RunCMake_IGNORE_POLICY_VERSION_DEPRECATION ON)
  3. run_cmake(BadIF)
  4. run_cmake(BadCONFIG)
  5. run_cmake(BadOR)
  6. run_cmake(BadAND)
  7. run_cmake(BadNOT)
  8. run_cmake(BadStrEqual)
  9. run_cmake(BadStrLess)
  10. run_cmake(BadStrLessEqual)
  11. run_cmake(BadStrGreater)
  12. run_cmake(BadStrGreaterEqual)
  13. run_cmake(STREQUAL)
  14. run_cmake(STRLESS)
  15. run_cmake(STRLESS_EQUAL)
  16. run_cmake(STRGREATER)
  17. run_cmake(STRGREATER_EQUAL)
  18. run_cmake(BadZero)
  19. run_cmake(BadTargetName)
  20. run_cmake(BadTargetTypeInterface)
  21. run_cmake(BadTargetTypeObject)
  22. run_cmake(BadInstallPrefix)
  23. run_cmake(BadSHELL_PATH)
  24. run_cmake(NonValidTarget-C_COMPILER_ID)
  25. run_cmake(NonValidTarget-CXX_COMPILER_ID)
  26. run_cmake(NonValidTarget-Fortran_COMPILER_ID)
  27. run_cmake(NonValidTarget-C_COMPILER_VERSION)
  28. run_cmake(NonValidTarget-CXX_COMPILER_VERSION)
  29. run_cmake(NonValidTarget-Fortran_COMPILER_VERSION)
  30. run_cmake(NonValidTarget-C_COMPILER_FRONTEND_VARIANT)
  31. run_cmake(NonValidTarget-CXX_COMPILER_FRONTEND_VARIANT)
  32. run_cmake(NonValidTarget-Fortran_COMPILER_FRONTEND_VARIANT)
  33. run_cmake(NonValidTarget-TARGET_PROPERTY)
  34. run_cmake(NonValidTarget-TARGET_POLICY)
  35. run_cmake(COMPILE_ONLY-not-compiling)
  36. run_cmake(LINK_ONLY-not-linking)
  37. run_cmake(TARGET_EXISTS-no-arg)
  38. run_cmake(TARGET_EXISTS-empty-arg)
  39. run_cmake(TARGET_EXISTS)
  40. run_cmake(TARGET_EXISTS-not-a-target)
  41. run_cmake(TARGET_NAME_IF_EXISTS-no-arg)
  42. run_cmake(TARGET_NAME_IF_EXISTS-empty-arg)
  43. run_cmake(TARGET_NAME_IF_EXISTS)
  44. run_cmake(TARGET_NAME_IF_EXISTS-not-a-target)
  45. run_cmake(TARGET_NAME_IF_EXISTS-alias-target)
  46. run_cmake(TARGET_NAME_IF_EXISTS-imported-target)
  47. run_cmake(TARGET_NAME_IF_EXISTS-imported-global-target)
  48. run_cmake(REMOVE_DUPLICATES-empty)
  49. run_cmake(REMOVE_DUPLICATES-empty-element)
  50. run_cmake(REMOVE_DUPLICATES-1)
  51. run_cmake(REMOVE_DUPLICATES-2)
  52. run_cmake(REMOVE_DUPLICATES-3)
  53. run_cmake(REMOVE_DUPLICATES-4)
  54. run_cmake(FILTER-empty)
  55. run_cmake(FILTER-InvalidOperator)
  56. run_cmake(FILTER-Exclude)
  57. run_cmake(FILTER-Include)
  58. function(run_cmake_build test)
  59. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${test}-build)
  60. if (RunCMake_GENERATOR_IS_MULTI_CONFIG)
  61. list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_CONFIGURATION_TYPES=Release)
  62. else()
  63. list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Release)
  64. endif()
  65. block()
  66. unset(RunCMake-check-file)
  67. run_cmake(${test})
  68. endblock()
  69. set(RunCMake_TEST_NO_CLEAN TRUE)
  70. run_cmake_command(${test}-build ${CMAKE_COMMAND} --build . --config Release)
  71. endfunction()
  72. function(run_linker_genex test lang type)
  73. set(options_args CHECK_RESULT EXECUTE)
  74. cmake_parse_arguments(PARSE_ARGV 3 RLG "${options_args}" "" "")
  75. set(RunCMake_TEST_VARIANT_DESCRIPTION ".${lang}.${type}")
  76. set(test_name ${test}${RunCMake_TEST_VARIANT_DESCRIPTION})
  77. set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/${test_name}-build")
  78. if(NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
  79. list(APPEND options -DCMAKE_BUILD_TYPE=Release)
  80. endif()
  81. if(RLG_CHECK_RESULT)
  82. set(RunCMake_TEST_EXPECT_RESULT 1)
  83. file(READ "${RunCMake_SOURCE_DIR}/${test_name}-stderr.txt" RunCMake_TEST_EXPECT_stderr)
  84. endif()
  85. run_cmake_with_options(${test} -DLANG=${lang} -DTYPE=${type})
  86. set(RunCMake_TEST_NO_CLEAN 1)
  87. unset(RunCMake_TEST_VARIANT_DESCRIPTION)
  88. if(RLG_EXECUTE)
  89. run_cmake_command(${test_name}-build "${CMAKE_COMMAND}" --build . --config Release)
  90. run_cmake_command(${test_name}-run "${CMAKE_CTEST_COMMAND}" -C Release -V)
  91. endif()
  92. endfunction()
  93. function(exec_linker_genex test lang type)
  94. run_linker_genex(${ARGV} EXECUTE)
  95. endfunction()
  96. set(languages C CXX)
  97. foreach(lang IN ITEMS OBJC Fortran CUDA HIP)
  98. if(CMake_TEST_${lang})
  99. list(APPEND languages ${lang})
  100. if(lang STREQUAL OBJC)
  101. list(APPEND languages OBJCXX)
  102. endif()
  103. endif()
  104. endforeach()
  105. foreach(lang IN LISTS languages)
  106. foreach(type IN ITEMS ID FRONTEND_VARIANT)
  107. run_linker_genex(NonValidTarget-COMPILER_LINKER ${lang} ${type} CHECK_RESULT)
  108. exec_linker_genex(COMPILER_LINKER ${lang} ${type})
  109. endforeach()
  110. endforeach()
  111. if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
  112. set(RunCMake_TEST_OPTIONS [==[-DCMAKE_CONFIGURATION_TYPES=CustomConfig]==])
  113. else()
  114. set(RunCMake_TEST_OPTIONS [==[-DCMAKE_BUILD_TYPE=CustomConfig]==])
  115. endif()
  116. run_cmake(CONFIG-multiple-entries)
  117. if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
  118. set(RunCMake_TEST_OPTIONS [==[-DCMAKE_CONFIGURATION_TYPES=]==])
  119. else()
  120. set(RunCMake_TEST_OPTIONS [==[-DCMAKE_BUILD_TYPE=]==])
  121. endif()
  122. run_cmake(CONFIG-empty-entries)
  123. unset(RunCMake_TEST_OPTIONS)
  124. run_cmake(CMP0199-WARN)
  125. run_cmake_build(CMP0199-OLD)
  126. run_cmake_build(CMP0199-NEW)
  127. run_cmake(CMP0200-WARN)
  128. run_cmake_build(CMP0200-OLD)
  129. run_cmake_build(CMP0200-NEW)
  130. run_cmake_build(CMP0199-NEW+CMP0200-NEW)
  131. set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0085:STRING=OLD)
  132. run_cmake(CMP0085-OLD)
  133. unset(RunCMake_TEST_OPTIONS)
  134. run_cmake(CMP0085-WARN)
  135. set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0085:STRING=NEW)
  136. run_cmake(CMP0085-NEW)
  137. unset(RunCMake_TEST_OPTIONS)
  138. if(RunCMake_GENERATOR STREQUAL "Xcode" AND "$ENV{CMAKE_OSX_ARCHITECTURES}" MATCHES "[;$]")
  139. run_cmake(TARGET_INTERMEDIATE_DIR-Xcode)
  140. else()
  141. block()
  142. set(RunCMake-check-file TARGET_INTERMEDIATE_DIR-build-check.cmake)
  143. foreach(strategy IN ITEMS SHORT FULL)
  144. set(CMAKE_INTERMEDIATE_DIR_STRATEGY ${strategy})
  145. set(RunCMake_TEST_OPTIONS -DCMAKE_INTERMEDIATE_DIR_STRATEGY=${strategy})
  146. run_cmake_build(TARGET_INTERMEDIATE_DIR-${strategy})
  147. endforeach()
  148. endblock()
  149. endif()
  150. run_cmake(TARGET_INTERMEDIATE_DIR-bad-arg)
  151. run_cmake(TARGET_INTERMEDIATE_DIR-bad-target)
  152. run_cmake(TARGET_INTERMEDIATE_DIR-not-a-target)