1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 7 #ifndef _INC_CRTDEFS_MACRO 8 #define _INC_CRTDEFS_MACRO 9 10 #define __STRINGIFY(x) #x 11 #define __MINGW64_STRINGIFY(x) \ 12 __STRINGIFY(x) 13 14 #define __MINGW64_VERSION_MAJOR 5 15 #define __MINGW64_VERSION_MINOR 0 16 17 /* This macro holds an monotonic increasing value, which indicates 18 a specific fix/patch is present on trunk. This value isn't related to 19 minor/major version-macros. It is increased on demand, if a big 20 fix was applied to trunk. This macro gets just increased on trunk. For 21 other branches its value won't be modified. */ 22 23 #define __MINGW64_VERSION_RC 0 24 25 #define __MINGW64_VERSION_STR \ 26 __MINGW64_STRINGIFY(__MINGW64_VERSION_MAJOR) \ 27 "." \ 28 __MINGW64_STRINGIFY(__MINGW64_VERSION_MINOR) 29 30 #define __MINGW64_VERSION_STATE "alpha" 31 32 /* mingw.org's version macros: these make gcc to define 33 MINGW32_SUPPORTS_MT_EH and to use the _CRT_MT global 34 and the __mingwthr_key_dtor() function from the MinGW 35 CRT in its private gthr-win32.h header. */ 36 #define __MINGW32_MAJOR_VERSION 3 37 #define __MINGW32_MINOR_VERSION 11 38 39 /* Set VC specific compiler target macros. */ 40 #if defined(__x86_64) && defined(_X86_) 41 # undef _X86_ /* _X86_ is not for __x86_64 */ 42 #endif 43 44 #if defined(_X86_) && !defined(_M_IX86) && !defined(_M_IA64) \ 45 && !defined(_M_AMD64) && !defined(__x86_64) 46 # if defined(__i486__) 47 # define _M_IX86 400 48 # elif defined(__i586__) 49 # define _M_IX86 500 50 # else 51 /* This gives wrong (600 instead of 300) value if -march=i386 is specified 52 but we cannot check for__i386__ as it is defined for all 32-bit CPUs. */ 53 # define _M_IX86 600 54 # endif 55 #endif /* if defined(_X86_) && !defined(_M_IX86) && !defined(_M_IA64) ... */ 56 57 #if defined(__x86_64) && !defined(_M_IX86) && !defined(_M_IA64) \ 58 && !defined(_M_AMD64) 59 # define _M_AMD64 100 60 # define _M_X64 100 61 #endif 62 63 #if defined(__ia64__) && !defined(_M_IX86) && !defined(_M_IA64) \ 64 && !defined(_M_AMD64) && !defined(_X86_) && !defined(__x86_64) 65 # define _M_IA64 100 66 #endif 67 68 #if defined(__arm__) && !defined(_M_ARM) && !defined(_M_ARMT) \ 69 && !defined(_M_THUMB) 70 # define _M_ARM 100 71 # define _M_ARMT 100 72 # define _M_THUMB 100 73 # ifndef _ARM_ 74 # define _ARM_ 1 75 # endif 76 # ifndef _M_ARM_NT 77 # define _M_ARM_NT 1 78 # endif 79 #endif 80 81 #ifndef _X86_ 82 /* MS does not prefix symbols by underscores for 64-bit. */ 83 # ifndef __MINGW_USE_UNDERSCORE_PREFIX 84 /* As we have to support older gcc version, which are using underscores 85 as symbol prefix for x64, we have to check here for the user label 86 prefix defined by gcc. */ 87 # ifdef __USER_LABEL_PREFIX__ 88 # pragma push_macro ("_") 89 # undef _ 90 # define _ 1 91 # if (__USER_LABEL_PREFIX__ + 0) != 0 92 # define __MINGW_USE_UNDERSCORE_PREFIX 1 93 # else 94 # define __MINGW_USE_UNDERSCORE_PREFIX 0 95 # endif 96 # undef _ 97 # pragma pop_macro ("_") 98 # else /* ! __USER_LABEL_PREFIX__ */ 99 # define __MINGW_USE_UNDERSCORE_PREFIX 0 100 # endif /* __USER_LABEL_PREFIX__ */ 101 # endif 102 #else /* ! ifndef _X86_ */ 103 /* For x86 we have always to prefix by underscore. */ 104 # undef __MINGW_USE_UNDERSCORE_PREFIX 105 # define __MINGW_USE_UNDERSCORE_PREFIX 1 106 #endif /* ifndef _X86_ */ 107 108 #if __MINGW_USE_UNDERSCORE_PREFIX == 0 109 # define __MINGW_IMP_SYMBOL(sym) __imp_##sym 110 # define __MINGW_IMP_LSYMBOL(sym) __imp_##sym 111 # define __MINGW_USYMBOL(sym) sym 112 # define __MINGW_LSYMBOL(sym) _##sym 113 #else /* ! if __MINGW_USE_UNDERSCORE_PREFIX == 0 */ 114 # define __MINGW_IMP_SYMBOL(sym) _imp__##sym 115 # define __MINGW_IMP_LSYMBOL(sym) __imp__##sym 116 # define __MINGW_USYMBOL(sym) _##sym 117 # define __MINGW_LSYMBOL(sym) sym 118 #endif /* if __MINGW_USE_UNDERSCORE_PREFIX == 0 */ 119 120 #ifndef __PTRDIFF_TYPE__ 121 # ifdef _WIN64 122 # define __PTRDIFF_TYPE__ long long int 123 # else 124 # define __PTRDIFF_TYPE__ long int 125 # endif 126 #endif 127 128 #ifndef __SIZE_TYPE__ 129 # ifdef _WIN64 130 # define __SIZE_TYPE__ long long unsigned int 131 # else 132 # define __SIZE_TYPE__ long unsigned int 133 # endif 134 #endif 135 136 #ifndef __WCHAR_TYPE__ 137 # define __WCHAR_TYPE__ unsigned short 138 #endif 139 140 #ifndef __WINT_TYPE__ 141 # define __WINT_TYPE__ unsigned short 142 #endif 143 144 #undef __MINGW_EXTENSION 145 146 #ifdef __WIDL__ 147 # define __MINGW_EXTENSION 148 #else 149 # if defined(__GNUC__) || defined(__GNUG__) 150 # define __MINGW_EXTENSION __extension__ 151 # else 152 # define __MINGW_EXTENSION 153 # endif 154 #endif /* __WIDL__ */ 155 156 /* Special case nameless struct/union. */ 157 #ifndef __C89_NAMELESS 158 # define __C89_NAMELESS __MINGW_EXTENSION 159 # define __C89_NAMELESSSTRUCTNAME 160 # define __C89_NAMELESSSTRUCTNAME1 161 # define __C89_NAMELESSSTRUCTNAME2 162 # define __C89_NAMELESSSTRUCTNAME3 163 # define __C89_NAMELESSSTRUCTNAME4 164 # define __C89_NAMELESSSTRUCTNAME5 165 # define __C89_NAMELESSUNIONNAME 166 # define __C89_NAMELESSUNIONNAME1 167 # define __C89_NAMELESSUNIONNAME2 168 # define __C89_NAMELESSUNIONNAME3 169 # define __C89_NAMELESSUNIONNAME4 170 # define __C89_NAMELESSUNIONNAME5 171 # define __C89_NAMELESSUNIONNAME6 172 # define __C89_NAMELESSUNIONNAME7 173 # define __C89_NAMELESSUNIONNAME8 174 #endif 175 176 #ifndef __GNU_EXTENSION 177 # define __GNU_EXTENSION __MINGW_EXTENSION 178 #endif 179 180 /* MinGW-w64 has some additional C99 printf/scanf feature support. 181 So we add some helper macros to ease recognition of them. */ 182 #define __MINGW_HAVE_ANSI_C99_PRINTF 1 183 #define __MINGW_HAVE_WIDE_C99_PRINTF 1 184 #define __MINGW_HAVE_ANSI_C99_SCANF 1 185 #define __MINGW_HAVE_WIDE_C99_SCANF 1 186 187 #ifdef __MINGW_USE_BROKEN_INTERFACE 188 # define __MINGW_POISON_NAME(__IFACE) __IFACE 189 #else 190 # define __MINGW_POISON_NAME(__IFACE) \ 191 __IFACE##_layout_has_not_been_verified_and_its_declaration_is_most_likely_incorrect 192 #endif 193 194 #ifndef __MSABI_LONG 195 # ifndef __LP64__ 196 # define __MSABI_LONG(x) x ## l 197 # else 198 # define __MSABI_LONG(x) x 199 # endif 200 #endif 201 202 #if __GNUC__ 203 # define __MINGW_GCC_VERSION (__GNUC__ * 10000 + \ 204 __GNUC_MINOR__ * 100 + \ 205 __GNUC_PATCHLEVEL__) 206 #else 207 # define __MINGW_GCC_VERSION 0 208 #endif 209 210 #if defined (__GNUC__) && defined (__GNUC_MINOR__) 211 # define __MINGW_GNUC_PREREQ(major, minor) \ 212 (__GNUC__ > (major) \ 213 || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))) 214 #else 215 # define __MINGW_GNUC_PREREQ(major, minor) 0 216 #endif 217 218 #if defined (_MSC_VER) 219 # define __MINGW_MSC_PREREQ(major, minor) \ 220 (_MSC_VER >= (major * 100 + minor * 10)) 221 #else 222 # define __MINGW_MSC_PREREQ(major, minor) 0 223 #endif 224 225 #ifdef __MINGW_MSVC_COMPAT_WARNINGS 226 # if __MINGW_GNUC_PREREQ (4, 5) 227 # define __MINGW_ATTRIB_DEPRECATED_STR(X) \ 228 __attribute__ ((__deprecated__ (X))) 229 # else 230 # define __MINGW_ATTRIB_DEPRECATED_STR(X) \ 231 __MINGW_ATTRIB_DEPRECATED 232 # endif 233 #else 234 # define __MINGW_ATTRIB_DEPRECATED_STR(X) 235 #endif /* ifdef __MINGW_MSVC_COMPAT_WARNINGS */ 236 237 #define __MINGW_SEC_WARN_STR \ 238 "This function or variable may be unsafe, use _CRT_SECURE_NO_WARNINGS to disable deprecation" 239 240 #define __MINGW_MSVC2005_DEPREC_STR \ 241 "This POSIX function is deprecated beginning in Visual C++ 2005, use _CRT_NONSTDC_NO_DEPRECATE to disable deprecation" 242 243 #if !defined (_CRT_NONSTDC_NO_DEPRECATE) 244 # define __MINGW_ATTRIB_DEPRECATED_MSVC2005 \ 245 __MINGW_ATTRIB_DEPRECATED_STR(__MINGW_MSVC2005_DEPREC_STR) 246 #else 247 # define __MINGW_ATTRIB_DEPRECATED_MSVC2005 248 #endif 249 250 #if !defined (_CRT_SECURE_NO_WARNINGS) || (_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES == 0) 251 # define __MINGW_ATTRIB_DEPRECATED_SEC_WARN \ 252 __MINGW_ATTRIB_DEPRECATED_STR(__MINGW_SEC_WARN_STR) 253 #else 254 # define __MINGW_ATTRIB_DEPRECATED_SEC_WARN 255 #endif 256 257 #define __MINGW_MS_PRINTF(__format,__args) \ 258 __attribute__((__format__(ms_printf, __format,__args))) 259 260 #define __MINGW_MS_SCANF(__format,__args) \ 261 __attribute__((__format__(ms_scanf, __format,__args))) 262 263 #define __MINGW_GNU_PRINTF(__format,__args) \ 264 __attribute__((__format__(gnu_printf,__format,__args))) 265 266 #define __MINGW_GNU_SCANF(__format,__args) \ 267 __attribute__((__format__(gnu_scanf, __format,__args))) 268 269 #undef __mingw_ovr 270 271 #ifdef __cplusplus 272 # define __mingw_ovr inline __cdecl 273 #elif defined (__GNUC__) 274 # define __mingw_ovr static \ 275 __attribute__ ((__unused__)) __inline__ __cdecl 276 #else 277 # define __mingw_ovr static __cdecl 278 #endif /* __cplusplus */ 279 280 #endif /* _INC_CRTDEFS_MACRO */ 281