14
14
#ifdef __APPLE__
15
15
16
16
#include <TargetConditionals.h>
17
+ #include <assert.h>
17
18
#include <dispatch/dispatch.h>
18
19
#include <dlfcn.h>
19
20
#include <stdint.h>
@@ -270,6 +271,8 @@ static inline uint32_t ConstructVersion(uint32_t Major, uint32_t Minor,
270
271
return ((Major & 0xffff ) << 16 ) | ((Minor & 0xff ) << 8 ) | (Subminor & 0xff );
271
272
}
272
273
274
+ #define PLATFORM_MACOS 1
275
+
273
276
int32_t __isPlatformVersionAtLeast (uint32_t Platform , uint32_t Major ,
274
277
uint32_t Minor , uint32_t Subminor ) {
275
278
dispatch_once_f (& DispatchOnceCounter , NULL , initializeAvailabilityCheck );
@@ -282,6 +285,29 @@ int32_t __isPlatformVersionAtLeast(uint32_t Platform, uint32_t Major,
282
285
return AvailabilityVersionCheck (1 , Versions );
283
286
}
284
287
288
+ #if TARGET_OS_OSX
289
+
290
+ int32_t __isPlatformOrVariantPlatformVersionAtLeast (
291
+ uint32_t Platform , uint32_t Major , uint32_t Minor , uint32_t Subminor ,
292
+ uint32_t Platform2 , uint32_t Major2 , uint32_t Minor2 , uint32_t Subminor2 ) {
293
+ dispatch_once_f (& DispatchOnceCounter , NULL , initializeAvailabilityCheck );
294
+
295
+ if (!AvailabilityVersionCheck ) {
296
+ // Handle case of back-deployment for older macOS.
297
+ if (Platform == PLATFORM_MACOS ) {
298
+ return __isOSVersionAtLeast (Major , Minor , Subminor );
299
+ }
300
+ assert (Platform2 == PLATFORM_MACOS && "unexpected platform" );
301
+ return __isOSVersionAtLeast (Major2 , Minor2 , Subminor2 );
302
+ }
303
+ dyld_build_version_t Versions [] = {
304
+ {Platform , ConstructVersion (Major , Minor , Subminor )},
305
+ {Platform2 , ConstructVersion (Major2 , Minor2 , Subminor2 )}};
306
+ return AvailabilityVersionCheck (2 , Versions );
307
+ }
308
+
309
+ #endif
310
+
285
311
#elif __ANDROID__
286
312
287
313
#include <pthread.h>
0 commit comments