RunCMakeTest.cmake 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. include(RunCMake)
  2. function(RunClean)
  3. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Clean-build)
  4. run_cmake(Clean)
  5. set(RunCMake_TEST_NO_CLEAN 1)
  6. run_cmake_command(Clean-build xcodebuild clean)
  7. endfunction()
  8. RunClean()
  9. run_cmake(ExplicitCMakeLists)
  10. run_cmake(ImplicitCMakeLists)
  11. run_cmake(InterfaceLibSources)
  12. run_cmake_with_options(SearchPaths -DCMAKE_CONFIGURATION_TYPES=Debug)
  13. run_cmake(InheritedParameters)
  14. run_cmake(XcodeFileType)
  15. run_cmake(XcodeAttributeLocation)
  16. run_cmake(XcodeAttributeGenex)
  17. run_cmake(XcodeAttributeGenexError)
  18. run_cmake(XcodeGenerateTopLevelProjectOnly)
  19. if(XCODE_VERSION VERSION_GREATER_EQUAL 12)
  20. run_cmake(XcodeDuplicateCustomCommand)
  21. endif()
  22. function(XcodeGenerateTopLevelProjectOnlyWithObjectLibrary)
  23. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeGenerateTopLevelProjectOnlyWithObjectLibrary-build)
  24. run_cmake(XcodeGenerateTopLevelProjectOnlyWithObjectLibrary)
  25. set(RunCMake_TEST_NO_CLEAN 1)
  26. run_cmake_command(XcodeGenerateTopLevelProjectOnlyWithObjectLibrary-build ${CMAKE_COMMAND} --build . --target shared_lib)
  27. endfunction()
  28. XcodeGenerateTopLevelProjectOnlyWithObjectLibrary()
  29. function(LinkBinariesBuildPhase mode)
  30. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/LinkBinariesBuildPhase_${mode}-build)
  31. set(RunCMake_TEST_OPTIONS "-DCMAKE_XCODE_LINK_BUILD_PHASE_MODE=${mode}")
  32. run_cmake(LinkBinariesBuildPhase_${mode})
  33. set(RunCMake_TEST_NO_CLEAN 1)
  34. run_cmake_command(LinkBinariesBuildPhase_${mode}-build ${CMAKE_COMMAND} --build .)
  35. endfunction()
  36. LinkBinariesBuildPhase(NONE)
  37. LinkBinariesBuildPhase(BUILT_ONLY)
  38. LinkBinariesBuildPhase(KNOWN_LOCATION)
  39. run_cmake(LinkBinariesBuildPhase_INVALID)
  40. run_cmake(XcodeObjectNeedsEscape)
  41. run_cmake(XcodeObjectNeedsQuote)
  42. run_cmake(XcodeOptimizationFlags)
  43. run_cmake(XcodePreserveNonOptimizationFlags)
  44. run_cmake(XcodePreserveObjcFlag)
  45. run_cmake(XcodePrecompileHeaders)
  46. if (NOT XCODE_VERSION VERSION_LESS 6)
  47. run_cmake(XcodePlatformFrameworks)
  48. endif()
  49. run_cmake(PerConfigPerSourceFlags)
  50. run_cmake(PerConfigPerSourceOptions)
  51. run_cmake(PerConfigPerSourceDefinitions)
  52. run_cmake(PerConfigPerSourceIncludeDirs)
  53. if(XCODE_VERSION VERSION_GREATER_EQUAL 12)
  54. function(XcodeObjectLibsInTwoProjectsiOS)
  55. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeObjectLibsInTwoProjects-build-ios)
  56. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=iOS")
  57. run_cmake(XcodeObjectLibsInTwoProjects)
  58. set(RunCMake_TEST_NO_CLEAN 1)
  59. run_cmake_command(XcodeObjectLibsInTwoProjects-build-ios ${CMAKE_COMMAND} --build . --target shared_lib -- -sdk iphonesimulator)
  60. endfunction()
  61. XcodeObjectLibsInTwoProjectsiOS()
  62. function(XcodeObjectLibsInTwoProjectsMacOS)
  63. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeObjectLibsInTwoProjects-build-macos)
  64. run_cmake(XcodeObjectLibsInTwoProjects)
  65. set(RunCMake_TEST_NO_CLEAN 1)
  66. run_cmake_command(XcodeObjectLibsInTwoProjects-build-macos ${CMAKE_COMMAND} --build . --target shared_lib)
  67. endfunction()
  68. XcodeObjectLibsInTwoProjectsMacOS()
  69. endif()
  70. function(XcodeSchemaGeneration)
  71. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeSchemaGeneration-build)
  72. set(RunCMake_TEST_NO_CLEAN 1)
  73. set(RunCMake_TEST_OPTIONS "-DCMAKE_XCODE_GENERATE_SCHEME=ON")
  74. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  75. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  76. run_cmake(XcodeSchemaGeneration)
  77. if (XCODE_VERSION VERSION_GREATER_EQUAL 13)
  78. set(maybe_destination -destination platform=macOS)
  79. else()
  80. set(maybe_destination "")
  81. endif()
  82. run_cmake_command(XcodeSchemaGeneration-build xcodebuild -scheme foo ${maybe_destination} build)
  83. endfunction()
  84. if(NOT XCODE_VERSION VERSION_LESS 7)
  85. XcodeSchemaGeneration()
  86. run_cmake(XcodeSchemaProperty)
  87. endif()
  88. function(XcodeDependOnZeroCheck)
  89. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeDependOnZeroCheck-build)
  90. set(RunCMake_TEST_NO_CLEAN 1)
  91. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  92. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  93. run_cmake(XcodeDependOnZeroCheck)
  94. run_cmake_command(XcodeDependOnZeroCheck-build ${CMAKE_COMMAND} --build . --target parentdirlib)
  95. run_cmake_command(XcodeDependOnZeroCheck-build ${CMAKE_COMMAND} --build . --target subdirlib)
  96. endfunction()
  97. XcodeDependOnZeroCheck()
  98. function(XcodeObjcxxFlags testName)
  99. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/${testName}-build)
  100. set(RunCMake_TEST_NO_CLEAN 1)
  101. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  102. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  103. run_cmake(${testName})
  104. run_cmake_command(${testName}-build ${CMAKE_COMMAND} --build .)
  105. endfunction()
  106. XcodeObjcxxFlags(XcodeObjcFlags)
  107. XcodeObjcxxFlags(XcodeObjcxxFlags)
  108. function(XcodeRemoveExcessiveISystem)
  109. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeRemoveExcessiveISystem-build)
  110. run_cmake(XcodeRemoveExcessiveISystem)
  111. set(RunCMake_TEST_NO_CLEAN 1)
  112. run_cmake_command(XcodeRemoveExcessiveISystem-build ${CMAKE_COMMAND} --build .)
  113. endfunction()
  114. XcodeRemoveExcessiveISystem()
  115. function(XcodeXCConfig)
  116. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeXCConfig-build)
  117. run_cmake(XcodeXCConfig)
  118. set(RunCMake_TEST_NO_CLEAN 1)
  119. run_cmake_command(XcodeXCConfig-build ${CMAKE_COMMAND} --build . --config Debug)
  120. run_cmake_command(XcodeXCConfig-build ${CMAKE_COMMAND} --build . --config Release)
  121. endfunction()
  122. XcodeXCConfig()
  123. function(BundleLinkBundle)
  124. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/BundleLinkBundle-build)
  125. run_cmake(BundleLinkBundle)
  126. set(RunCMake_TEST_NO_CLEAN 1)
  127. run_cmake_command(BundleLinkBundle-build ${CMAKE_COMMAND} --build .)
  128. endfunction()
  129. BundleLinkBundle()
  130. # Isolate device tests from host architecture selection.
  131. unset(ENV{CMAKE_OSX_ARCHITECTURES})
  132. # Use a single build tree for a few tests without cleaning.
  133. if(NOT XCODE_VERSION VERSION_LESS 5)
  134. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeInstallIOS-build)
  135. set(RunCMake_TEST_NO_CLEAN 1)
  136. set(RunCMake_TEST_OPTIONS
  137. "-DCMAKE_SYSTEM_NAME=iOS"
  138. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_BINARY_DIR}/ios_install")
  139. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  140. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  141. run_cmake(XcodeInstallIOS)
  142. run_cmake_command(XcodeInstallIOS-install ${CMAKE_COMMAND} --build . --target install)
  143. unset(RunCMake_TEST_BINARY_DIR)
  144. unset(RunCMake_TEST_NO_CLEAN)
  145. unset(RunCMake_TEST_OPTIONS)
  146. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesOSX-build)
  147. set(RunCMake_TEST_NO_CLEAN 1)
  148. set(RunCMake_TEST_OPTIONS
  149. "-DCMAKE_SYSTEM_NAME=Darwin"
  150. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  151. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  152. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  153. run_cmake(XcodeBundles)
  154. run_cmake_command(XcodeBundles-build-macOS ${CMAKE_COMMAND} --build .)
  155. run_cmake_command(XcodeBundles-install-macOS ${CMAKE_COMMAND} --build . --target install)
  156. unset(RunCMake_TEST_BINARY_DIR)
  157. unset(RunCMake_TEST_NO_CLEAN)
  158. unset(RunCMake_TEST_OPTIONS)
  159. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesIOS-build)
  160. set(RunCMake_TEST_NO_CLEAN 1)
  161. set(RunCMake_TEST_OPTIONS
  162. "-DCMAKE_SYSTEM_NAME=iOS"
  163. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  164. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  165. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  166. run_cmake(XcodeBundles)
  167. run_cmake_command(XcodeBundles-build-iOS ${CMAKE_COMMAND} --build .)
  168. run_cmake_command(XcodeBundles-install-iOS ${CMAKE_COMMAND} --build . --target install)
  169. unset(RunCMake_TEST_BINARY_DIR)
  170. unset(RunCMake_TEST_NO_CLEAN)
  171. unset(RunCMake_TEST_OPTIONS)
  172. endif()
  173. if(NOT XCODE_VERSION VERSION_LESS 7)
  174. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesWatchOS-build)
  175. set(RunCMake_TEST_NO_CLEAN 1)
  176. set(RunCMake_TEST_OPTIONS
  177. "-DCMAKE_SYSTEM_NAME=watchOS"
  178. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  179. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  180. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  181. run_cmake(XcodeBundles)
  182. run_cmake_command(XcodeBundles-build-watchOS ${CMAKE_COMMAND} --build .)
  183. run_cmake_command(XcodeBundles-install-watchOS ${CMAKE_COMMAND} --build . --target install)
  184. unset(RunCMake_TEST_BINARY_DIR)
  185. unset(RunCMake_TEST_NO_CLEAN)
  186. unset(RunCMake_TEST_OPTIONS)
  187. endif()
  188. if(NOT XCODE_VERSION VERSION_LESS 7.1)
  189. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeBundlesTvOS-build)
  190. set(RunCMake_TEST_NO_CLEAN 1)
  191. set(RunCMake_TEST_OPTIONS
  192. "-DCMAKE_SYSTEM_NAME=tvOS"
  193. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  194. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  195. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  196. run_cmake(XcodeBundles)
  197. run_cmake_command(XcodeBundles-build-tvOS ${CMAKE_COMMAND} --build .)
  198. run_cmake_command(XcodeBundles-install-tvOS ${CMAKE_COMMAND} --build . --target install)
  199. unset(RunCMake_TEST_BINARY_DIR)
  200. unset(RunCMake_TEST_NO_CLEAN)
  201. unset(RunCMake_TEST_OPTIONS)
  202. endif()
  203. if(NOT XCODE_VERSION VERSION_LESS 7)
  204. set(RunCMake_TEST_OPTIONS "-DCMAKE_TOOLCHAIN_FILE=${RunCMake_SOURCE_DIR}/osx.cmake")
  205. run_cmake(XcodeTbdStub)
  206. unset(RunCMake_TEST_OPTIONS)
  207. endif()
  208. if(XCODE_VERSION VERSION_GREATER_EQUAL 6)
  209. # XcodeIOSInstallCombined
  210. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombined-build)
  211. set(RunCMake_TEST_NO_CLEAN 1)
  212. set(RunCMake_TEST_OPTIONS
  213. "-DCMAKE_SYSTEM_NAME=iOS"
  214. "-DCMAKE_IOS_INSTALL_COMBINED=YES"
  215. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  216. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  217. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  218. run_cmake(XcodeIOSInstallCombined)
  219. run_cmake_command(XcodeIOSInstallCombined-build ${CMAKE_COMMAND} --build .)
  220. if(XCODE_VERSION VERSION_LESS 12)
  221. run_cmake_command(XcodeIOSInstallCombined-install ${CMAKE_COMMAND} --build . --target install)
  222. endif()
  223. # --build defaults to Debug, --install defaults to Release, so we have to
  224. # specify the configuration explicitly
  225. run_cmake_command(XcodeIOSInstallCombined-cmakeinstall
  226. ${CMAKE_COMMAND} --install . --config Debug
  227. )
  228. unset(RunCMake_TEST_BINARY_DIR)
  229. unset(RunCMake_TEST_NO_CLEAN)
  230. unset(RunCMake_TEST_OPTIONS)
  231. # XcodeIOSInstallCombinedPrune
  232. # FIXME(#24011): Xcode 14 removed support for older architectures the test needs.
  233. if(XCODE_VERSION VERSION_LESS 14)
  234. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombinedPrune-build)
  235. set(RunCMake_TEST_NO_CLEAN 1)
  236. set(RunCMake_TEST_OPTIONS
  237. "-DCMAKE_SYSTEM_NAME=iOS"
  238. "-DCMAKE_IOS_INSTALL_COMBINED=YES"
  239. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  240. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  241. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  242. run_cmake(XcodeIOSInstallCombinedPrune)
  243. run_cmake_command(XcodeIOSInstallCombinedPrune-build ${CMAKE_COMMAND} --build .)
  244. if(XCODE_VERSION VERSION_LESS 12)
  245. run_cmake_command(XcodeIOSInstallCombinedPrune-install ${CMAKE_COMMAND} --build . --target install)
  246. endif()
  247. # --build defaults to Debug, --install defaults to Release, so we have to
  248. # specify the configuration explicitly
  249. run_cmake_command(XcodeIOSInstallCombinedPrune-cmakeinstall
  250. ${CMAKE_COMMAND} --install . --config Debug
  251. )
  252. unset(RunCMake_TEST_BINARY_DIR)
  253. unset(RunCMake_TEST_NO_CLEAN)
  254. unset(RunCMake_TEST_OPTIONS)
  255. endif()
  256. # XcodeIOSInstallCombinedSingleArch
  257. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeIOSInstallCombinedSingleArch-build)
  258. set(RunCMake_TEST_NO_CLEAN 1)
  259. set(RunCMake_TEST_OPTIONS
  260. "-DCMAKE_SYSTEM_NAME=iOS"
  261. "-DCMAKE_IOS_INSTALL_COMBINED=YES"
  262. "-DCMAKE_INSTALL_PREFIX:PATH=${RunCMake_TEST_BINARY_DIR}/_install")
  263. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  264. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  265. run_cmake(XcodeIOSInstallCombinedSingleArch)
  266. run_cmake_command(XcodeIOSInstallCombinedSingleArch-build ${CMAKE_COMMAND} --build .)
  267. if(XCODE_VERSION VERSION_LESS 12)
  268. run_cmake_command(XcodeIOSInstallCombinedSingleArch-install ${CMAKE_COMMAND} --build . --target install)
  269. endif()
  270. # --build defaults to Debug, --install defaults to Release, so we have to
  271. # specify the configuration explicitly
  272. run_cmake_command(XcodeIOSInstallCombinedSingleArch-cmakeinstall
  273. ${CMAKE_COMMAND} --install . --config Debug
  274. )
  275. unset(RunCMake_TEST_BINARY_DIR)
  276. unset(RunCMake_TEST_NO_CLEAN)
  277. unset(RunCMake_TEST_OPTIONS)
  278. endif()
  279. if(NOT XCODE_VERSION VERSION_LESS 5)
  280. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeMultiplatform-build)
  281. set(RunCMake_TEST_NO_CLEAN 1)
  282. set(RunCMake_TEST_OPTIONS "${IOS_DEPLOYMENT_TARGET}")
  283. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  284. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  285. run_cmake(XcodeMultiplatform)
  286. # build ios before macos
  287. run_cmake_command(XcodeMultiplatform-iphonesimulator-build ${CMAKE_COMMAND} --build . -- -sdk iphonesimulator)
  288. run_cmake_command(XcodeMultiplatform-iphonesimulator-install ${CMAKE_COMMAND} --build . --target install -- -sdk iphonesimulator DESTDIR=${RunCMake_TEST_BINARY_DIR}/_install_iphonesimulator)
  289. run_cmake_command(XcodeMultiplatform-macosx-build ${CMAKE_COMMAND} --build . -- -sdk macosx)
  290. run_cmake_command(XcodeMultiplatform-macosx-install ${CMAKE_COMMAND} --build . --target install -- -sdk macosx DESTDIR=${RunCMake_TEST_BINARY_DIR}/_install_macosx)
  291. unset(RunCMake_TEST_BINARY_DIR)
  292. unset(RunCMake_TEST_NO_CLEAN)
  293. unset(RunCMake_TEST_OPTIONS)
  294. endif()
  295. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  296. function(deployment_target_test SystemName SDK)
  297. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/DeploymentTarget-${SDK}-build)
  298. set(RunCMake_TEST_NO_CLEAN 1)
  299. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=${SystemName}" "-DCMAKE_OSX_SYSROOT=${SDK}")
  300. file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
  301. file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
  302. run_cmake(DeploymentTarget)
  303. run_cmake_command(DeploymentTarget-${SDK} ${CMAKE_COMMAND} --build .)
  304. endfunction()
  305. deployment_target_test(Darwin macosx)
  306. deployment_target_test(iOS iphoneos)
  307. deployment_target_test(iOS iphonesimulator)
  308. deployment_target_test(tvOS appletvos)
  309. deployment_target_test(tvOS appletvsimulator)
  310. deployment_target_test(watchOS watchos)
  311. deployment_target_test(watchOS watchsimulator)
  312. endif()
  313. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  314. function(xctest_lookup_test SystemName SDK)
  315. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XCTestLookup-${SDK}-build)
  316. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=${SystemName}" "-DCMAKE_OSX_SYSROOT=${SDK}")
  317. run_cmake(XCTestLookup)
  318. endfunction()
  319. xctest_lookup_test(Darwin macosx)
  320. xctest_lookup_test(iOS iphoneos)
  321. xctest_lookup_test(iOS iphonesimulator)
  322. xctest_lookup_test(tvOS appletvos)
  323. xctest_lookup_test(tvOS appletvsimulator)
  324. endif()
  325. if(XCODE_VERSION VERSION_GREATER_EQUAL 8)
  326. function(XcodeRemoveExcessiveISystemSDK SDK)
  327. set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/XcodeRemoveExcessiveISystemSDK-${SDK}-build)
  328. set(RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=iOS" "-DCMAKE_OSX_SYSROOT=${SDK}")
  329. run_cmake(XcodeRemoveExcessiveISystem)
  330. set(RunCMake_TEST_NO_CLEAN 1)
  331. run_cmake_command(XcodeRemoveExcessiveISystemSDK-${SDK}-build ${CMAKE_COMMAND} --build .)
  332. endfunction()
  333. XcodeRemoveExcessiveISystemSDK(iphoneos)
  334. XcodeRemoveExcessiveISystemSDK(iphonesimulator)
  335. endif()
  336. if (XCODE_VERSION VERSION_GREATER_EQUAL 7.3)
  337. function(xctest_add_bundle_test SystemName SDK BuildSystemVersion ExpectedOutputDir)
  338. set(RunCMake_TEST_BINARY_DIR
  339. ${RunCMake_BINARY_DIR}/DeploymentTarget-${SystemName}-${SDK}-${BuildSystemVersion}-build)
  340. set(RunCMake_TEST_OPTIONS
  341. "-DCMAKE_SYSTEM_NAME=${SystemName}"
  342. "-DCMAKE_OSX_SYSROOT=${SDK}"
  343. "-DTEST_EXPECTED_OUTPUT_DIR=${ExpectedOutputDir}")
  344. unset(RunCMake_GENERATOR_TOOLSET)
  345. if(BuildSystemVersion)
  346. set(RunCMake_GENERATOR_TOOLSET "buildsystem=${BuildSystemVersion}")
  347. endif()
  348. run_cmake(XCTestAddBundle)
  349. endfunction()
  350. if(XCODE_VERSION VERSION_GREATER_EQUAL 12)
  351. xctest_add_bundle_test(Darwin macosx "1" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  352. xctest_add_bundle_test(Darwin macosx "12" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  353. xctest_add_bundle_test(iOS iphonesimulator "1" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  354. if (XCODE_VERSION VERSION_LESS 12.5)
  355. xctest_add_bundle_test(iOS iphonesimulator "12" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>")
  356. else()
  357. xctest_add_bundle_test(iOS iphonesimulator "12" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  358. endif()
  359. else()
  360. xctest_add_bundle_test(Darwin macosx "" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  361. xctest_add_bundle_test(iOS iphonesimulator "" "$<TARGET_BUNDLE_CONTENT_DIR:TestedApp>/PlugIns")
  362. endif()
  363. endif()
  364. # Please add macOS-only tests above before the device-specific tests.