1*5e7646d2SAndroid Build Coastguard Worker /* 2*5e7646d2SAndroid Build Coastguard Worker * API versioning definitions for CUPS. 3*5e7646d2SAndroid Build Coastguard Worker * 4*5e7646d2SAndroid Build Coastguard Worker * Copyright © 2007-2019 by Apple Inc. 5*5e7646d2SAndroid Build Coastguard Worker * 6*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more 7*5e7646d2SAndroid Build Coastguard Worker * information. 8*5e7646d2SAndroid Build Coastguard Worker */ 9*5e7646d2SAndroid Build Coastguard Worker 10*5e7646d2SAndroid Build Coastguard Worker #ifndef _CUPS_VERSIONING_H_ 11*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_VERSIONING_H_ 12*5e7646d2SAndroid Build Coastguard Worker 13*5e7646d2SAndroid Build Coastguard Worker /* 14*5e7646d2SAndroid Build Coastguard Worker * This header defines several macros that add compiler-specific attributes for 15*5e7646d2SAndroid Build Coastguard Worker * functions: 16*5e7646d2SAndroid Build Coastguard Worker * 17*5e7646d2SAndroid Build Coastguard Worker * - _CUPS_API_major_minor[_patch]: Specifies when an API became available by 18*5e7646d2SAndroid Build Coastguard Worker * CUPS version. 19*5e7646d2SAndroid Build Coastguard Worker * - _CUPS_DEPRECATED: Function is deprecated with no replacement. 20*5e7646d2SAndroid Build Coastguard Worker * - _CUPS_DEPRECATED_MSG("message"): Function is deprecated and has a 21*5e7646d2SAndroid Build Coastguard Worker * replacement. 22*5e7646d2SAndroid Build Coastguard Worker * - _CUPS_FORMAT(format-index, additional-args-index): Function has a 23*5e7646d2SAndroid Build Coastguard Worker * printf-style format argument followed by zero or more additional 24*5e7646d2SAndroid Build Coastguard Worker * arguments. Indices start at 1. 25*5e7646d2SAndroid Build Coastguard Worker * - _CUPS_INTERNAL: Function is internal with no replacement API. 26*5e7646d2SAndroid Build Coastguard Worker * - _CUPS_INTERNAL_MSG("msg"): Function is internal - use specified API 27*5e7646d2SAndroid Build Coastguard Worker * instead. 28*5e7646d2SAndroid Build Coastguard Worker * - _CUPS_NONNULL((arg list)): Specifies the comma-separated argument indices 29*5e7646d2SAndroid Build Coastguard Worker * are assumed non-NULL. Indices start at 1. 30*5e7646d2SAndroid Build Coastguard Worker * - _CUPS_NORETURN: Specifies the function does not return. 31*5e7646d2SAndroid Build Coastguard Worker * - _CUPS_PRIVATE: Specifies the function is private to CUPS. 32*5e7646d2SAndroid Build Coastguard Worker * - _CUPS_PUBLIC: Specifies the function is public API. 33*5e7646d2SAndroid Build Coastguard Worker */ 34*5e7646d2SAndroid Build Coastguard Worker 35*5e7646d2SAndroid Build Coastguard Worker /* 36*5e7646d2SAndroid Build Coastguard Worker * Determine which compiler is being used and what annotation features are 37*5e7646d2SAndroid Build Coastguard Worker * available... 38*5e7646d2SAndroid Build Coastguard Worker */ 39*5e7646d2SAndroid Build Coastguard Worker 40*5e7646d2SAndroid Build Coastguard Worker # ifdef __APPLE__ 41*5e7646d2SAndroid Build Coastguard Worker # include <os/availability.h> 42*5e7646d2SAndroid Build Coastguard Worker # endif /* __APPLE__ */ 43*5e7646d2SAndroid Build Coastguard Worker 44*5e7646d2SAndroid Build Coastguard Worker # ifdef __has_extension /* Clang */ 45*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_DEPRECATED 46*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_FORMAT 47*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_NORETURN 48*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_VISIBILITY 49*5e7646d2SAndroid Build Coastguard Worker # if __has_extension(attribute_deprecated_with_message) 50*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_DEPRECATED_WITH_MESSAGE 51*5e7646d2SAndroid Build Coastguard Worker # endif 52*5e7646d2SAndroid Build Coastguard Worker # if __has_extension(attribute_unavailable_with_message) 53*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_UNAVAILABLE_WITH_MESSAGE 54*5e7646d2SAndroid Build Coastguard Worker # endif 55*5e7646d2SAndroid Build Coastguard Worker # elif defined(__GNUC__) /* GCC and compatible */ 56*5e7646d2SAndroid Build Coastguard Worker # if __GNUC__ >= 3 /* GCC 3.0 or higher */ 57*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_DEPRECATED 58*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_FORMAT 59*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_NORETURN 60*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_VISIBILITY 61*5e7646d2SAndroid Build Coastguard Worker # endif /* __GNUC__ >= 3 */ 62*5e7646d2SAndroid Build Coastguard Worker # if __GNUC__ >= 5 /* GCC 5.x */ 63*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_DEPRECATED_WITH_MESSAGE 64*5e7646d2SAndroid Build Coastguard Worker # elif __GNUC__ == 4 && __GNUC_MINOR__ >= 5 65*5e7646d2SAndroid Build Coastguard Worker /* GCC 4.5 or higher */ 66*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_HAS_DEPRECATED_WITH_MESSAGE 67*5e7646d2SAndroid Build Coastguard Worker # endif /* __GNUC__ >= 5 */ 68*5e7646d2SAndroid Build Coastguard Worker # elif defined(_WIN32) 69*5e7646d2SAndroid Build Coastguard Worker # define __attribute__(...) 70*5e7646d2SAndroid Build Coastguard Worker # endif /* __has_extension */ 71*5e7646d2SAndroid Build Coastguard Worker 72*5e7646d2SAndroid Build Coastguard Worker 73*5e7646d2SAndroid Build Coastguard Worker /* 74*5e7646d2SAndroid Build Coastguard Worker * Define _CUPS_INTERNAL, _CUPS_PRIVATE, and _CUPS_PUBLIC visibilty macros for 75*5e7646d2SAndroid Build Coastguard Worker * internal/private/public functions... 76*5e7646d2SAndroid Build Coastguard Worker */ 77*5e7646d2SAndroid Build Coastguard Worker 78*5e7646d2SAndroid Build Coastguard Worker # ifdef _CUPS_HAS_VISIBILITY 79*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_INTERNAL __attribute__ ((visibility("hidden"))) 80*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_PRIVATE __attribute__ ((visibility("default"))) 81*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_PUBLIC __attribute__ ((visibility("default"))) 82*5e7646d2SAndroid Build Coastguard Worker # elif defined(_WIN32) && defined(LIBCUPS2_EXPORTS) && 0 83*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_INTERNAL 84*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_PRIVATE __declspec(dllexport) 85*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_PUBLIC __declspec(dllexport) 86*5e7646d2SAndroid Build Coastguard Worker # else 87*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_INTERNAL 88*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_PRIVATE 89*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_PUBLIC 90*5e7646d2SAndroid Build Coastguard Worker # endif /* _CUPS_HAS_VISIBILITY */ 91*5e7646d2SAndroid Build Coastguard Worker 92*5e7646d2SAndroid Build Coastguard Worker 93*5e7646d2SAndroid Build Coastguard Worker /* 94*5e7646d2SAndroid Build Coastguard Worker * Define _CUPS_API_major_minor[_patch] availability macros for CUPS. 95*5e7646d2SAndroid Build Coastguard Worker * 96*5e7646d2SAndroid Build Coastguard Worker * Note: Using any of the _CUPS_API macros automatically adds _CUPS_PUBLIC. 97*5e7646d2SAndroid Build Coastguard Worker */ 98*5e7646d2SAndroid Build Coastguard Worker 99*5e7646d2SAndroid Build Coastguard Worker # if defined(__APPLE__) && !defined(_CUPS_SOURCE) && TARGET_OS_OSX 100*5e7646d2SAndroid Build Coastguard Worker /* 101*5e7646d2SAndroid Build Coastguard Worker * On Apple operating systems, the _CUPS_API_* constants are defined using the 102*5e7646d2SAndroid Build Coastguard Worker * API_ macros in <os/availability.h>. 103*5e7646d2SAndroid Build Coastguard Worker * 104*5e7646d2SAndroid Build Coastguard Worker * On iOS, we don't actually have libcups available directly, but the supplied 105*5e7646d2SAndroid Build Coastguard Worker * libcups_static target in the Xcode project supports building on iOS 11.0 and 106*5e7646d2SAndroid Build Coastguard Worker * later. 107*5e7646d2SAndroid Build Coastguard Worker */ 108*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_1_19 API_AVAILABLE(macos(10.3), ios(11.0)) _CUPS_PUBLIC 109*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_1_20 API_AVAILABLE(macos(10.4), ios(11.0)) _CUPS_PUBLIC 110*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_1_21 API_AVAILABLE(macos(10.4), ios(11.0)) _CUPS_PUBLIC 111*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_2 API_AVAILABLE(macos(10.5), ios(11.0)) _CUPS_PUBLIC 112*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_3 API_AVAILABLE(macos(10.5), ios(11.0)) _CUPS_PUBLIC 113*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_4 API_AVAILABLE(macos(10.6), ios(11.0)) _CUPS_PUBLIC 114*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_5 API_AVAILABLE(macos(10.7), ios(11.0)) _CUPS_PUBLIC 115*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_6 API_AVAILABLE(macos(10.8), ios(11.0)) _CUPS_PUBLIC 116*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_7 API_AVAILABLE(macos(10.9), ios(11.0)) _CUPS_PUBLIC 117*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_2_0 API_AVAILABLE(macos(10.10), ios(11.0)) _CUPS_PUBLIC 118*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_2_2 API_AVAILABLE(macos(10.12), ios(11.0)) _CUPS_PUBLIC 119*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_2_2_4 API_AVAILABLE(macos(10.13), ios(12.0)) _CUPS_PUBLIC 120*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_2_2_7 API_AVAILABLE(macos(10.14), ios(13.0)) _CUPS_PUBLIC 121*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_2_3 API_AVAILABLE(macos(10.14), ios(13.0)) _CUPS_PUBLIC 122*5e7646d2SAndroid Build Coastguard Worker # else 123*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_1_19 _CUPS_PUBLIC 124*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_1_20 _CUPS_PUBLIC 125*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_1_21 _CUPS_PUBLIC 126*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_2 _CUPS_PUBLIC 127*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_3 _CUPS_PUBLIC 128*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_4 _CUPS_PUBLIC 129*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_5 _CUPS_PUBLIC 130*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_6 _CUPS_PUBLIC 131*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_1_7 _CUPS_PUBLIC 132*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_2_0 _CUPS_PUBLIC 133*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_2_2 _CUPS_PUBLIC 134*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_2_2_4 _CUPS_PUBLIC 135*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_2_2_7 _CUPS_PUBLIC 136*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_API_2_3 _CUPS_PUBLIC 137*5e7646d2SAndroid Build Coastguard Worker # endif /* __APPLE__ && !_CUPS_SOURCE */ 138*5e7646d2SAndroid Build Coastguard Worker 139*5e7646d2SAndroid Build Coastguard Worker 140*5e7646d2SAndroid Build Coastguard Worker /* 141*5e7646d2SAndroid Build Coastguard Worker * Define _CUPS_DEPRECATED and _CUPS_INTERNAL macros to mark old APIs as 142*5e7646d2SAndroid Build Coastguard Worker * "deprecated" or "unavailable" with messages so you get warnings/errors are 143*5e7646d2SAndroid Build Coastguard Worker * compile-time... 144*5e7646d2SAndroid Build Coastguard Worker * 145*5e7646d2SAndroid Build Coastguard Worker * Note: Using any of the _CUPS_DEPRECATED macros automatically adds 146*5e7646d2SAndroid Build Coastguard Worker * _CUPS_PUBLIC. 147*5e7646d2SAndroid Build Coastguard Worker */ 148*5e7646d2SAndroid Build Coastguard Worker 149*5e7646d2SAndroid Build Coastguard Worker # if !defined(_CUPS_HAS_DEPRECATED) || (defined(_CUPS_SOURCE) && !defined(_CUPS_NO_DEPRECATED)) 150*5e7646d2SAndroid Build Coastguard Worker /* 151*5e7646d2SAndroid Build Coastguard Worker * Don't mark functions deprecated if the compiler doesn't support it 152*5e7646d2SAndroid Build Coastguard Worker * or we are building CUPS source that doesn't care. 153*5e7646d2SAndroid Build Coastguard Worker */ 154*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED _CUPS_PUBLIC 155*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_MSG(m) _CUPS_PUBLIC 156*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_2_MSG(m) _CUPS_PUBLIC 157*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_6_MSG(m) _CUPS_PUBLIC 158*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_7_MSG(m) _CUPS_PUBLIC 159*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_2_2_MSG(m) _CUPS_PUBLIC 160*5e7646d2SAndroid Build Coastguard Worker # elif defined(__APPLE__) && defined(_CUPS_NO_DEPRECATED) 161*5e7646d2SAndroid Build Coastguard Worker /* 162*5e7646d2SAndroid Build Coastguard Worker * Compiler supports the unavailable attribute, so use it when the code 163*5e7646d2SAndroid Build Coastguard Worker * wants to exclude the use of deprecated API. 164*5e7646d2SAndroid Build Coastguard Worker */ 165*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED __attribute__ ((unavailable)) _CUPS_PUBLIC 166*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_MSG(m) __attribute__ ((unavailable(m))) _CUPS_PUBLIC 167*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_2_MSG(m) API_DEPRECATED(m, macos(10.2,10.5), ios(11.0,11.0)) _CUPS_PUBLIC 168*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_6_MSG(m) API_DEPRECATED(m, macos(10.2,10.8), ios(11.0,11.0)) _CUPS_PUBLIC 169*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_7_MSG(m) API_DEPRECATED(m, macos(10.2,10.9), ios(11.0,11.0)) _CUPS_PUBLIC 170*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_2_2_MSG(m) API_DEPRECATED(m, macos(10.2,10.12), ios(11.0,11.0)) _CUPS_PUBLIC 171*5e7646d2SAndroid Build Coastguard Worker 172*5e7646d2SAndroid Build Coastguard Worker # elif defined(__APPLE__) 173*5e7646d2SAndroid Build Coastguard Worker /* 174*5e7646d2SAndroid Build Coastguard Worker * Just mark things as deprecated... 175*5e7646d2SAndroid Build Coastguard Worker */ 176*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED __attribute__ ((deprecated)) _CUPS_PUBLIC 177*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_MSG(m) __attribute__ ((deprecated(m))) _CUPS_PUBLIC 178*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_2_MSG(m) API_DEPRECATED(m, macos(10.2,10.5), ios(11.0,11.0)) _CUPS_PUBLIC 179*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_6_MSG(m) API_DEPRECATED(m, macos(10.2,10.8), ios(11.0,11.0)) _CUPS_PUBLIC 180*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_7_MSG(m) API_DEPRECATED(m, macos(10.2,10.9), ios(11.0,11.0)) _CUPS_PUBLIC 181*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_2_2_MSG(m) API_DEPRECATED(m, macos(10.2,10.12), ios(11.0,11.0)) _CUPS_PUBLIC 182*5e7646d2SAndroid Build Coastguard Worker 183*5e7646d2SAndroid Build Coastguard Worker # elif defined(_CUPS_HAS_UNAVAILABLE_WITH_MESSAGE) && defined(_CUPS_NO_DEPRECATED) 184*5e7646d2SAndroid Build Coastguard Worker /* 185*5e7646d2SAndroid Build Coastguard Worker * Compiler supports the unavailable attribute, so use it when the code 186*5e7646d2SAndroid Build Coastguard Worker * wants to exclude the use of deprecated API. 187*5e7646d2SAndroid Build Coastguard Worker */ 188*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED __attribute__ ((unavailable)) _CUPS_PUBLIC 189*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_MSG(m) __attribute__ ((unavailable(m))) _CUPS_PUBLIC 190*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_2_MSG(m) __attribute__ ((unavailable(m))) _CUPS_PUBLIC 191*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_6_MSG(m) __attribute__ ((unavailable(m))) _CUPS_PUBLIC 192*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_7_MSG(m) __attribute__ ((unavailable(m))) _CUPS_PUBLIC 193*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_2_2_MSG(m) __attribute__ ((unavailable(m))) _CUPS_PUBLIC 194*5e7646d2SAndroid Build Coastguard Worker # else 195*5e7646d2SAndroid Build Coastguard Worker /* 196*5e7646d2SAndroid Build Coastguard Worker * Compiler supports the deprecated attribute, so use it. 197*5e7646d2SAndroid Build Coastguard Worker */ 198*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED __attribute__ ((deprecated)) _CUPS_PUBLIC 199*5e7646d2SAndroid Build Coastguard Worker # ifdef _CUPS_HAS_DEPRECATED_WITH_MESSAGE 200*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_MSG(m) __attribute__ ((deprecated(m))) _CUPS_PUBLIC 201*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_2_MSG(m) __attribute__ ((deprecated(m))) _CUPS_PUBLIC 202*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_6_MSG(m) __attribute__ ((deprecated(m))) _CUPS_PUBLIC 203*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_7_MSG(m) __attribute__ ((deprecated(m))) _CUPS_PUBLIC 204*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_2_2_MSG(m) __attribute__ ((deprecated(m))) _CUPS_PUBLIC 205*5e7646d2SAndroid Build Coastguard Worker # else 206*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_MSG(m) __attribute__ ((deprecated)) _CUPS_PUBLIC 207*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_2_MSG(m) __attribute__ ((deprecated)) _CUPS_PUBLIC 208*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_6_MSG(m) __attribute__ ((deprecated)) _CUPS_PUBLIC 209*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_1_7_MSG(m) __attribute__ ((deprecated)) _CUPS_PUBLIC 210*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_DEPRECATED_2_2_MSG(m) __attribute__ ((deprecated)) _CUPS_PUBLIC 211*5e7646d2SAndroid Build Coastguard Worker # endif /* _CUPS_HAS_DEPRECATED_WITH_MESSAGE */ 212*5e7646d2SAndroid Build Coastguard Worker # endif /* !_CUPS_HAS_DEPRECATED || (_CUPS_SOURCE && !_CUPS_NO_DEPRECATED) */ 213*5e7646d2SAndroid Build Coastguard Worker 214*5e7646d2SAndroid Build Coastguard Worker 215*5e7646d2SAndroid Build Coastguard Worker /* 216*5e7646d2SAndroid Build Coastguard Worker * Define _CUPS_FORMAT macro for printf-style functions... 217*5e7646d2SAndroid Build Coastguard Worker */ 218*5e7646d2SAndroid Build Coastguard Worker 219*5e7646d2SAndroid Build Coastguard Worker # ifdef _CUPS_HAS_FORMAT 220*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_FORMAT(a,b) __attribute__ ((__format__(__printf__, a,b))) 221*5e7646d2SAndroid Build Coastguard Worker # else 222*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_FORMAT(a,b) 223*5e7646d2SAndroid Build Coastguard Worker # endif /* _CUPS_HAS_FORMAT */ 224*5e7646d2SAndroid Build Coastguard Worker 225*5e7646d2SAndroid Build Coastguard Worker 226*5e7646d2SAndroid Build Coastguard Worker /* 227*5e7646d2SAndroid Build Coastguard Worker * Define _CUPS_INTERNAL_MSG macro for private APIs that have (historical) 228*5e7646d2SAndroid Build Coastguard Worker * public visibility. 229*5e7646d2SAndroid Build Coastguard Worker * 230*5e7646d2SAndroid Build Coastguard Worker * Note: Using the _CUPS_INTERNAL_MSG macro automatically adds _CUPS_PUBLIC. 231*5e7646d2SAndroid Build Coastguard Worker */ 232*5e7646d2SAndroid Build Coastguard Worker 233*5e7646d2SAndroid Build Coastguard Worker # ifdef _CUPS_SOURCE 234*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_INTERNAL_MSG(m) _CUPS_PUBLIC 235*5e7646d2SAndroid Build Coastguard Worker # elif defined(_CUPS_HAS_UNAVAILABLE_WITH_MESSAGE) 236*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_INTERNAL_MSG(m) __attribute__ ((unavailable(m))) _CUPS_PUBLIC 237*5e7646d2SAndroid Build Coastguard Worker # elif defined(_CUPS_HAS_DEPRECATED_WITH_MESSAGE) 238*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_INTERNAL_MSG(m) __attribute__ ((deprecated(m))) _CUPS_PUBLIC 239*5e7646d2SAndroid Build Coastguard Worker # else 240*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_INTERNAL_MSG(m) __attribute__ ((deprecated)) _CUPS_PUBLIC 241*5e7646d2SAndroid Build Coastguard Worker # endif /* _CUPS_SOURCE */ 242*5e7646d2SAndroid Build Coastguard Worker 243*5e7646d2SAndroid Build Coastguard Worker 244*5e7646d2SAndroid Build Coastguard Worker /* 245*5e7646d2SAndroid Build Coastguard Worker * Define _CUPS_NONNULL macro for functions that don't expect non-null 246*5e7646d2SAndroid Build Coastguard Worker * arguments... 247*5e7646d2SAndroid Build Coastguard Worker */ 248*5e7646d2SAndroid Build Coastguard Worker 249*5e7646d2SAndroid Build Coastguard Worker # ifdef _CUPS_HAS_NONNULL 250*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_NONNULL(...) __attribute__ ((nonnull(__VA_ARGS__))) 251*5e7646d2SAndroid Build Coastguard Worker # else 252*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_NONNULL(...) 253*5e7646d2SAndroid Build Coastguard Worker # endif /* _CUPS_HAS_FORMAT */ 254*5e7646d2SAndroid Build Coastguard Worker 255*5e7646d2SAndroid Build Coastguard Worker 256*5e7646d2SAndroid Build Coastguard Worker /* 257*5e7646d2SAndroid Build Coastguard Worker * Define _CUPS_NORETURN macro for functions that don't return. 258*5e7646d2SAndroid Build Coastguard Worker */ 259*5e7646d2SAndroid Build Coastguard Worker 260*5e7646d2SAndroid Build Coastguard Worker # ifdef _CUPS_HAS_NORETURN 261*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_NORETURN __attribute__ ((noreturn)) 262*5e7646d2SAndroid Build Coastguard Worker # else 263*5e7646d2SAndroid Build Coastguard Worker # define _CUPS_NORETURN 264*5e7646d2SAndroid Build Coastguard Worker # endif /* _CUPS_HAS_NORETURN */ 265*5e7646d2SAndroid Build Coastguard Worker 266*5e7646d2SAndroid Build Coastguard Worker 267*5e7646d2SAndroid Build Coastguard Worker #endif /* !_CUPS_VERSIONING_H_ */ 268