[CLASSPNP] Fix MSVC build. Brought to you by Timo.
[reactos.git] / reactos / sdk / include / crt / _mingw_mac.h
1 /**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the w64 mingw-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) __STRINGIFY(x)
12
13 #define __MINGW64_VERSION_MAJOR 1
14 #define __MINGW64_VERSION_MINOR 1
15 #define __MINGW64_VERSION_STR __MINGW64_STRINGIFY(__MINGW64_VERSION_MAJOR) "." __MINGW64_STRINGIFY(__MINGW64_VERSION_MINOR)
16 #define __MINGW64_VERSION_STATE "alpha"
17
18 /* mingw.org's version macros: these make gcc to define
19 MINGW32_SUPPORTS_MT_EH and to use the _CRT_MT global
20 and the __mingwthr_key_dtor() function from the MinGW
21 CRT in its private gthr-win32.h header. */
22 #define __MINGW32_MAJOR_VERSION 3
23 #define __MINGW32_MINOR_VERSION 11
24
25 #ifndef _M_IX86
26 /* MS does not prefix symbols by underscores for anything other than x86. */
27 #ifndef __MINGW_USE_UNDERSCORE_PREFIX
28 /* As we have to support older gcc version, which are using underscores
29 as symbol prefix for x64, we have to check here for the user label
30 prefix defined by gcc. */
31 #ifdef __USER_LABEL_PREFIX__
32 #pragma push_macro ("_")
33 #undef _
34 #define _ 1
35 #if (__USER_LABEL_PREFIX__ + 0) != 0
36 #define __MINGW_USE_UNDERSCORE_PREFIX 1
37 #else
38 #define __MINGW_USE_UNDERSCORE_PREFIX 0
39 #endif
40 #undef _
41 #pragma pop_macro ("_")
42 #else
43 #define __MINGW_USE_UNDERSCORE_PREFIX 0
44 #endif
45 #endif
46 #else
47 /* For 32-bits we have always to prefix by underscore. */
48 #undef __MINGW_USE_UNDERSCORE_PREFIX
49 #define __MINGW_USE_UNDERSCORE_PREFIX 1
50 #endif
51
52 #if __MINGW_USE_UNDERSCORE_PREFIX == 0
53 #define __MINGW_IMP_SYMBOL(sym) __imp_##sym
54 #define __MINGW_USYMBOL(sym) sym
55 #define __MINGW_LSYMBOL(sym) _##sym
56 #else
57 #define __MINGW_IMP_SYMBOL(sym) _imp__##sym
58 #define __MINGW_USYMBOL(sym) _##sym
59 #define __MINGW_LSYMBOL(sym) sym
60 #endif
61
62 /* Use alias for msvcr80 export of get/set_output_format. */
63 #ifndef __USE_MINGW_OUTPUT_FORMAT_EMU
64 #define __USE_MINGW_OUTPUT_FORMAT_EMU 1
65 #endif
66
67 /* Set VC specific compiler target macros. */
68 #if defined(__x86_64) && defined(_X86_)
69 #undef _X86_ /* _X86_ is not for __x86_64 */
70 #endif
71
72 #if defined(_X86_) && !defined(_M_IX86) && !defined(_M_IA64) \
73 && !defined(_M_AMD64) && !defined(__x86_64)
74 #if defined(__i486__)
75 #define _M_IX86 400
76 #elif defined(__i586__)
77 #define _M_IX86 500
78 #else
79 /* This gives wrong (600 instead of 300) value if -march=i386 is specified
80 but we cannot check for__i386__ as it is defined for all 32-bit CPUs. */
81 #define _M_IX86 600
82 #endif
83 #endif
84
85 #if defined(__x86_64) && !defined(_M_IX86) && !defined(_M_IA64) \
86 && !defined(_M_AMD64)
87 #define _M_AMD64 100
88 #define _M_X64 100
89 #endif
90
91 #if defined(__ia64__) && !defined(_M_IX86) && !defined(_M_IA64) \
92 && !defined(_M_AMD64) && !defined(_X86_) && !defined(__x86_64)
93 #define _M_IA64 100
94 #endif
95
96 #ifndef __PTRDIFF_TYPE__
97 #ifdef _WIN64
98 #define __PTRDIFF_TYPE__ long long int
99 #else
100 #define __PTRDIFF_TYPE__ long int
101 #endif
102 #endif
103
104 #ifndef __SIZE_TYPE__
105 #ifdef _WIN64
106 #define __SIZE_TYPE__ long long unsigned int
107 #else
108 #define __SIZE_TYPE__ long unsigned int
109 #endif
110 #endif
111
112 #ifndef __WCHAR_TYPE__
113 #define __WCHAR_TYPE__ unsigned short
114 #endif
115 #ifndef __WINT_TYPE__
116 #define __WINT_TYPE__ unsigned short
117 #endif
118
119 #undef __MINGW_EXTENSION
120 #if defined(__GNUC__) || defined(__GNUG__)
121 #define __MINGW_EXTENSION __extension__
122 #else
123 #define __MINGW_EXTENSION
124 #endif
125
126 /* Special case nameless struct/union. */
127 #ifndef __C89_NAMELESS
128 #define __C89_NAMELESS __MINGW_EXTENSION
129
130 #define __C89_NAMELESSSTRUCTNAME
131 #define __C89_NAMELESSUNIONNAME
132 #endif
133
134 #ifndef __GNU_EXTENSION
135 #define __GNU_EXTENSION __MINGW_EXTENSION
136 #endif
137
138 /* MinGW-w64 has some additional C99 printf/scanf feature support.
139 So we add some helper macros to ease recognition of them. */
140 #define __MINGW_HAVE_ANSI_C99_PRINTF 1
141 #define __MINGW_HAVE_WIDE_C99_PRINTF 1
142 #define __MINGW_HAVE_ANSI_C99_SCANF 1
143 #define __MINGW_HAVE_WIDE_C99_SCANF 1
144
145 #endif /* _INC_CRTDEFS_MACRO */
146