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