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