The advantage of using this compiler builtin instead of our own platform checks is that the compiler will warn us (if -Wunguarded-availability is turned on for APIs introduced before 10.13 or by default for later ones) if a check is forgotten, which is not the case for the manual checks. Update the code to use WX_IS_MACOS_AVAILABLE() macro, which expands to __builtin_available() when supported, and also use API_AVAILABLE() where it makes sense to avoid having too many checks.
		
			
				
	
	
		
			35 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
///////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        wx/osx/private/available.h
 | 
						|
// Purpose:     Helper for checking API availability under macOS.
 | 
						|
// Author:      Vadim Zeitlin
 | 
						|
// Created:     2019-04-17
 | 
						|
// Copyright:   (c) 2019 Vadim Zeitlin <vadim@wxwidgets.org>
 | 
						|
// Licence:     wxWindows licence
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifndef _WX_OSX_PRIVATE_AVAILABLE_H_
 | 
						|
#define _WX_OSX_PRIVATE_AVAILABLE_H_
 | 
						|
 | 
						|
// Xcode 9 adds new @available keyword and the corresponding __builtin_available
 | 
						|
// builtin which should be used instead of manually checks for API availability
 | 
						|
// as using this builtin suppresses the compiler -Wunguarded-availability
 | 
						|
// warnings, so use it if possible for the implementation of our own macro.
 | 
						|
#if defined(__clang__) && __has_builtin(__builtin_available)
 | 
						|
    #define WX_IS_MACOS_AVAILABLE(major, minor) \
 | 
						|
        __builtin_available(macOS major ## . ## minor, *)
 | 
						|
 | 
						|
    // Note that we can't easily forward to API_AVAILABLE macro here, so go
 | 
						|
    // directly to its expansion instead.
 | 
						|
    #define WX_API_AVAILABLE_MACOS(major, minor) \
 | 
						|
         __attribute__((availability(macos,introduced=major ## . ## minor)))
 | 
						|
#else // Not clang or old clang version without __builtin_available
 | 
						|
    #include "wx/platinfo.h"
 | 
						|
 | 
						|
    #define WX_IS_MACOS_AVAILABLE(major, minor) \
 | 
						|
        wxPlatformInfo::Get().CheckOSVersion(major, minor)
 | 
						|
 | 
						|
    #define WX_API_AVAILABLE_MACOS(major, minor)
 | 
						|
#endif
 | 
						|
 | 
						|
#endif // _WX_OSX_PRIVATE_AVAILABLE_H_
 |