1/* 2 * Copyright (c) 1999-2006 Apple Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23// Copyright 1988-1996 NeXT Software, Inc. 24 25#ifndef _OBJC_OBJC_API_H_ 26#define _OBJC_OBJC_API_H_ 27 28#include <Availability.h> 29#include <AvailabilityMacros.h> 30#include <TargetConditionals.h> 31 32#ifndef __has_feature 33# define __has_feature(x) 0 34#endif 35 36#ifndef __has_extension 37# define __has_extension __has_feature 38#endif 39 40#ifndef __has_attribute 41# define __has_attribute(x) 0 42#endif 43 44 45/* 46 * OBJC_API_VERSION 0 or undef: Tiger and earlier API only 47 * OBJC_API_VERSION 2: Leopard and later API available 48 */ 49#if !defined(OBJC_API_VERSION) 50# if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_5 51# define OBJC_API_VERSION 0 52# else 53# define OBJC_API_VERSION 2 54# endif 55#endif 56 57 58/* OBJC_OLD_DISPATCH_PROTOTYPES == 0 enforces the rule that the dispatch 59 * functions must be cast to an appropriate function pointer type. */ 60#if !defined(OBJC_OLD_DISPATCH_PROTOTYPES) 61# define OBJC_OLD_DISPATCH_PROTOTYPES 1 62#endif 63 64 65/* OBJC_ISA_AVAILABILITY: `isa` will be deprecated or unavailable 66 * in the future */ 67#if !defined(OBJC_ISA_AVAILABILITY) 68# if __OBJC2__ 69# define OBJC_ISA_AVAILABILITY __attribute__((deprecated)) 70# else 71# define OBJC_ISA_AVAILABILITY /* still available */ 72# endif 73#endif 74 75 76/* OBJC2_UNAVAILABLE: unavailable in objc 2.0, deprecated in Leopard */ 77#if !defined(OBJC2_UNAVAILABLE) 78# if __OBJC2__ 79# define OBJC2_UNAVAILABLE UNAVAILABLE_ATTRIBUTE 80# else 81 /* plain C code also falls here, but this is close enough */ 82# define OBJC2_UNAVAILABLE __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_5,__MAC_10_5, __IPHONE_2_0,__IPHONE_2_0) 83# endif 84#endif 85 86/* OBJC_ARC_UNAVAILABLE: unavailable with -fobjc-arc */ 87#if !defined(OBJC_ARC_UNAVAILABLE) 88# if __has_feature(objc_arc) 89# if __has_extension(attribute_unavailable_with_message) 90# define OBJC_ARC_UNAVAILABLE __attribute__((unavailable("not available in automatic reference counting mode"))) 91# else 92# define OBJC_ARC_UNAVAILABLE __attribute__((unavailable)) 93# endif 94# else 95# define OBJC_ARC_UNAVAILABLE 96# endif 97#endif 98 99#if !defined(OBJC_HIDE_64) 100/* OBJC_ARM64_UNAVAILABLE: unavailable on arm64 (i.e. stret dispatch) */ 101#if !defined(OBJC_ARM64_UNAVAILABLE) 102# if defined(__arm64__) 103# define OBJC_ARM64_UNAVAILABLE __attribute__((unavailable("not available in arm64"))) 104# else 105# define OBJC_ARM64_UNAVAILABLE 106# endif 107#endif 108#endif 109 110/* OBJC_GC_UNAVAILABLE: unavailable with -fobjc-gc or -fobjc-gc-only */ 111#if !defined(OBJC_GC_UNAVAILABLE) 112# if __OBJC_GC__ 113# if __has_extension(attribute_unavailable_with_message) 114# define OBJC_GC_UNAVAILABLE __attribute__((unavailable("not available in garbage collecting mode"))) 115# else 116# define OBJC_GC_UNAVAILABLE __attribute__((unavailable)) 117# endif 118# else 119# define OBJC_GC_UNAVAILABLE 120# endif 121#endif 122 123#if !defined(OBJC_EXTERN) 124# if defined(__cplusplus) 125# define OBJC_EXTERN extern "C" 126# else 127# define OBJC_EXTERN extern 128# endif 129#endif 130 131#if !defined(OBJC_VISIBLE) 132# if TARGET_OS_WIN32 133# if defined(BUILDING_OBJC) 134# define OBJC_VISIBLE __declspec(dllexport) 135# else 136# define OBJC_VISIBLE __declspec(dllimport) 137# endif 138# else 139# define OBJC_VISIBLE __attribute__((visibility("default"))) 140# endif 141#endif 142 143#if !defined(OBJC_EXPORT) 144# define OBJC_EXPORT OBJC_EXTERN OBJC_VISIBLE 145#endif 146 147#if !defined(OBJC_IMPORT) 148# define OBJC_IMPORT extern 149#endif 150 151#if !defined(OBJC_ROOT_CLASS) 152# if __has_attribute(objc_root_class) 153# define OBJC_ROOT_CLASS __attribute__((objc_root_class)) 154# else 155# define OBJC_ROOT_CLASS 156# endif 157#endif 158 159#ifndef __DARWIN_NULL 160#define __DARWIN_NULL NULL 161#endif 162 163#if !defined(OBJC_INLINE) 164# define OBJC_INLINE __inline 165#endif 166 167#endif 168