|  | // Copyright (c) 2017 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | // Provides the definition of API_AVAILABLE while we're on an SDK that doesn't | 
|  | // contain it yet. | 
|  | // TODO(thakis): Remove this file once we're on the 10.12 SDK. | 
|  |  | 
|  | #ifndef BASE_MAC_AVAILABILITY_H_ | 
|  | #define BASE_MAC_AVAILABILITY_H_ | 
|  |  | 
|  | #include <AvailabilityMacros.h> | 
|  |  | 
|  | #if !defined(MAC_OS_X_VERSION_10_12) || \ | 
|  | MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_12 | 
|  | #define __API_AVAILABLE_PLATFORM_macos(x) macos, introduced = x | 
|  | #define __API_AVAILABLE_PLATFORM_macosx(x) macosx, introduced = x | 
|  | #define __API_AVAILABLE_PLATFORM_ios(x) ios, introduced = x | 
|  | #define __API_AVAILABLE_PLATFORM_watchos(x) watchos, introduced = x | 
|  | #define __API_AVAILABLE_PLATFORM_tvos(x) tvos, introduced = x | 
|  | #define __API_A(x) __attribute__((availability(__API_AVAILABLE_PLATFORM_##x))) | 
|  | #define __API_AVAILABLE1(x) __API_A(x) | 
|  | #define __API_AVAILABLE2(x, y) __API_A(x) __API_A(y) | 
|  | #define __API_AVAILABLE3(x, y, z) __API_A(x) __API_A(y) __API_A(z) | 
|  | #define __API_AVAILABLE4(x, y, z, t) __API_A(x) __API_A(y) __API_A(z) __API_A(t) | 
|  | #define __API_AVAILABLE_GET_MACRO(_1, _2, _3, _4, NAME, ...) NAME | 
|  | #define API_AVAILABLE(...)                                                   \ | 
|  | __API_AVAILABLE_GET_MACRO(__VA_ARGS__, __API_AVAILABLE4, __API_AVAILABLE3, \ | 
|  | __API_AVAILABLE2, __API_AVAILABLE1)              \ | 
|  | (__VA_ARGS__) | 
|  | #else | 
|  | #import <os/availability.h> | 
|  | #endif  // MAC_OS_X_VERSION_10_12 | 
|  |  | 
|  | #endif  // BASE_MAC_AVAILABILITY_H_ |