1 |
#ifndef __MINGW_H |
2 |
/* |
3 |
* _mingw.h |
4 |
* |
5 |
* MinGW specific macros included by ALL mingwrt include files; (this file |
6 |
* is part of the MinGW32 runtime library package). |
7 |
* |
8 |
* $Id: _mingw.h.in,v 7daa0459f602 2016/05/03 17:40:54 keithmarshall $ |
9 |
* |
10 |
* Written by Mumit Khan <khan@xraylith.wisc.edu> |
11 |
* Copyright (C) 1999, 2001-2011, 2014-2016, MinGW.org Project |
12 |
* |
13 |
* |
14 |
* Permission is hereby granted, free of charge, to any person obtaining a |
15 |
* copy of this software and associated documentation files (the "Software"), |
16 |
* to deal in the Software without restriction, including without limitation |
17 |
* the rights to use, copy, modify, merge, publish, distribute, sublicense, |
18 |
* and/or sell copies of the Software, and to permit persons to whom the |
19 |
* Software is furnished to do so, subject to the following conditions: |
20 |
* |
21 |
* The above copyright notice and this permission notice (including the next |
22 |
* paragraph) shall be included in all copies or substantial portions of the |
23 |
* Software. |
24 |
* |
25 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
26 |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
27 |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
28 |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
29 |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
30 |
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
31 |
* DEALINGS IN THE SOFTWARE. |
32 |
* |
33 |
*/ |
34 |
#define __MINGW_H |
35 |
|
36 |
/* In previous versions, __MINGW32_VERSION was expressed as a dotted |
37 |
* numeric pair, representing major.minor; unfortunately, this doesn't |
38 |
* adapt well to the inclusion of a patch-level component, since the |
39 |
* major.minor.patch dotted triplet representation is not valid as a |
40 |
* numeric entity. Thus, for this version, we adopt a representation |
41 |
* which encodes the version as a long integer value, expressing: |
42 |
* |
43 |
* __MINGW32_VERSION = 1,000,000 * major + 1,000 * minor + patch |
44 |
* |
45 |
* DO NOT EDIT these package version assignments manually; they are |
46 |
* derived from the package version specification within configure.ac, |
47 |
* whence they are propagated automatically, at package build time. |
48 |
*/ |
49 |
#define __MINGW32_VERSION 3022001L |
50 |
#define __MINGW32_MAJOR_VERSION 3 |
51 |
#define __MINGW32_MINOR_VERSION 22 |
52 |
#define __MINGW32_PATCHLEVEL 1 |
53 |
|
54 |
#if __GNUC__ >= 3 && ! defined __PCC__ |
55 |
#pragma GCC system_header |
56 |
#endif |
57 |
|
58 |
#ifndef _MSVCRTVER_H |
59 |
/* Legacy versions of mingwrt use the macro __MSVCRT_VERSION__ to |
60 |
* enable evolving features of different MSVCRT.DLL versions. This |
61 |
* usage is no longer recommended, but the __MSVCRT_VERSION__ macro |
62 |
* remains useful when a non-freely distributable MSVCRxx.DLL is to |
63 |
* be substituted for MSVCRT.DLL; for such usage, the substitute |
64 |
* MSVCRxx.DLL may be identified as specified in... |
65 |
*/ |
66 |
# include <msvcrtver.h> |
67 |
#endif |
68 |
|
69 |
/* A better inference than __MSVCRT_VERSION__, of the capabilities |
70 |
* supported by the operating system default MSVCRT.DLL, is provided |
71 |
* by the Windows API version identification macros. |
72 |
*/ |
73 |
#include <w32api.h> |
74 |
|
75 |
/* The following are defined by the user (or by the compiler), to specify how |
76 |
* identifiers are imported from a DLL. All headers should include this first, |
77 |
* and then use __DECLSPEC_SUPPORTED to choose between the old ``__imp__name'' |
78 |
* style or the __MINGW_IMPORT style for declarations. |
79 |
* |
80 |
* __DECLSPEC_SUPPORTED Defined if dllimport attribute is supported. |
81 |
* __MINGW_IMPORT The attribute definition to specify imported |
82 |
* variables/functions. |
83 |
* _CRTIMP As above. For MS compatibility. |
84 |
* |
85 |
* Macros to enable MinGW features which deviate from standard MSVC |
86 |
* compatible behaviour; these may be specified directly in user code, |
87 |
* activated implicitly, (e.g. by specifying _POSIX_C_SOURCE or such), |
88 |
* or by inclusion in __MINGW_FEATURES__: |
89 |
* |
90 |
* __USE_MINGW_ANSI_STDIO Select a more ANSI C99 compatible |
91 |
* implementation of printf() and friends; |
92 |
* (users should not set this directly). |
93 |
* |
94 |
* Other macros: |
95 |
* |
96 |
* __int64 define to be long long. Using a typedef |
97 |
* doesn't work for "unsigned __int64" |
98 |
* |
99 |
* |
100 |
* Manifest definitions for flags to control globbing of the command line |
101 |
* during application start up, (before main() is called). The first pair, |
102 |
* when assigned as bit flags within _CRT_glob, select the globbing algorithm |
103 |
* to be used; (the MINGW algorithm overrides MSCVRT, if both are specified). |
104 |
* Prior to mingwrt-3.21, only the MSVCRT option was supported; this choice |
105 |
* may produce different results, depending on which particular version of |
106 |
* MSVCRT.DLL is in use; (in recent versions, it seems to have become |
107 |
* definitively broken, when globbing within double quotes). |
108 |
*/ |
109 |
#define __CRT_GLOB_USE_MSVCRT__ 0x0001 |
110 |
|
111 |
/* From mingwrt-3.21 onward, this should be the preferred choice; it will |
112 |
* produce consistent results, regardless of the MSVCRT.DLL version in use. |
113 |
*/ |
114 |
#define __CRT_GLOB_USE_MINGW__ 0x0002 |
115 |
|
116 |
/* When the __CRT_GLOB_USE_MINGW__ flag is set, within _CRT_glob, the |
117 |
* following additional options are also available; they are not enabled |
118 |
* by default, but the user may elect to enable any combination of them, |
119 |
* by setting _CRT_glob to the boolean sum (i.e. logical OR combination) |
120 |
* of __CRT_GLOB_USE_MINGW__ and the desired options. |
121 |
* |
122 |
* __CRT_GLOB_USE_SINGLE_QUOTE__ allows use of single (apostrophe) |
123 |
* quoting characters, analogously to |
124 |
* POSIX usage, as an alternative to |
125 |
* double quotes, for collection of |
126 |
* arguments separated by white space |
127 |
* into a single logical argument. |
128 |
* |
129 |
* __CRT_GLOB_BRACKET_GROUPS__ enable interpretation of bracketed |
130 |
* character groups as POSIX compatible |
131 |
* globbing patterns, matching any one |
132 |
* character which is either included |
133 |
* in, or excluded from the group. |
134 |
* |
135 |
* __CRT_GLOB_CASE_SENSITIVE__ enable case sensitive matching for |
136 |
* globbing patterns; this is default |
137 |
* behaviour for POSIX, but because of |
138 |
* the case insensitive nature of the |
139 |
* MS-Windows file system, it is more |
140 |
* appropriate to use case insensitive |
141 |
* globbing as the MinGW default. |
142 |
* |
143 |
*/ |
144 |
#define __CRT_GLOB_USE_SINGLE_QUOTE__ 0x0010 |
145 |
#define __CRT_GLOB_BRACKET_GROUPS__ 0x0020 |
146 |
#define __CRT_GLOB_CASE_SENSITIVE__ 0x0040 |
147 |
|
148 |
/* The MinGW globbing algorithm uses the ASCII DEL control code as a marker |
149 |
* for globbing characters which were embedded within quoted arguments; (the |
150 |
* quotes are stripped away BEFORE the argument is globbed; the globbing code |
151 |
* treats the marked character as immutable, and strips out the DEL markers, |
152 |
* before storing the resultant argument). The DEL code is mapped to this |
153 |
* function here; DO NOT change it, without rebuilding the runtime. |
154 |
*/ |
155 |
#define __CRT_GLOB_ESCAPE_CHAR__ (char)(127) |
156 |
|
157 |
|
158 |
/* Manifest definitions identifying the flag bits, controlling activation |
159 |
* of MinGW features, as specified by the user in __MINGW_FEATURES__. |
160 |
*/ |
161 |
#define __MINGW_ANSI_STDIO__ 0x0000000000000001ULL |
162 |
/* |
163 |
* The following three are not yet formally supported; they are |
164 |
* included here, to document anticipated future usage. |
165 |
*/ |
166 |
#define __MINGW_LC_EXTENSIONS__ 0x0000000000000050ULL |
167 |
#define __MINGW_LC_MESSAGES__ 0x0000000000000010ULL |
168 |
#define __MINGW_LC_ENVVARS__ 0x0000000000000040ULL |
169 |
|
170 |
|
171 |
/* Try to avoid problems with outdated checks for GCC __attribute__ support. |
172 |
*/ |
173 |
#undef __attribute__ |
174 |
|
175 |
#if defined (__PCC__) |
176 |
# undef __DECLSPEC_SUPPORTED |
177 |
# ifndef __MINGW_IMPORT |
178 |
# define __MINGW_IMPORT extern |
179 |
# endif |
180 |
# ifndef _CRTIMP |
181 |
# define _CRTIMP |
182 |
# endif |
183 |
# ifndef __cdecl |
184 |
# define __cdecl _Pragma("cdecl") |
185 |
# endif |
186 |
# ifndef __stdcall |
187 |
# define __stdcall _Pragma("stdcall") |
188 |
# endif |
189 |
# ifndef __int64 |
190 |
# define __int64 long long |
191 |
# endif |
192 |
# ifndef __int32 |
193 |
# define __int32 long |
194 |
# endif |
195 |
# ifndef __int16 |
196 |
# define __int16 short |
197 |
# endif |
198 |
# ifndef __int8 |
199 |
# define __int8 char |
200 |
# endif |
201 |
# ifndef __small |
202 |
# define __small char |
203 |
# endif |
204 |
# ifndef __hyper |
205 |
# define __hyper long long |
206 |
# endif |
207 |
# ifndef __volatile__ |
208 |
# define __volatile__ volatile |
209 |
# endif |
210 |
# ifndef __restrict__ |
211 |
# define __restrict__ restrict |
212 |
# endif |
213 |
# define NONAMELESSUNION |
214 |
#elif defined(__GNUC__) |
215 |
# ifdef __declspec |
216 |
# ifndef __MINGW_IMPORT |
217 |
/* Note the extern. This is needed to work around GCC's |
218 |
limitations in handling dllimport attribute. */ |
219 |
# define __MINGW_IMPORT extern __attribute__((__dllimport__)) |
220 |
# endif |
221 |
# ifndef _CRTIMP |
222 |
# ifdef __USE_CRTIMP |
223 |
# define _CRTIMP __attribute__((dllimport)) |
224 |
# else |
225 |
# define _CRTIMP |
226 |
# endif |
227 |
# endif |
228 |
# define __DECLSPEC_SUPPORTED |
229 |
# else /* __declspec */ |
230 |
# undef __DECLSPEC_SUPPORTED |
231 |
# undef __MINGW_IMPORT |
232 |
# ifndef _CRTIMP |
233 |
# define _CRTIMP |
234 |
# endif |
235 |
# endif /* __declspec */ |
236 |
/* |
237 |
* The next two defines can cause problems if user code adds the |
238 |
* __cdecl attribute like so: |
239 |
* void __attribute__ ((__cdecl)) foo(void); |
240 |
*/ |
241 |
# ifndef __cdecl |
242 |
# define __cdecl __attribute__((__cdecl__)) |
243 |
# endif |
244 |
# ifndef __stdcall |
245 |
# define __stdcall __attribute__((__stdcall__)) |
246 |
# endif |
247 |
# ifndef __int64 |
248 |
# define __int64 long long |
249 |
# endif |
250 |
# ifndef __int32 |
251 |
# define __int32 long |
252 |
# endif |
253 |
# ifndef __int16 |
254 |
# define __int16 short |
255 |
# endif |
256 |
# ifndef __int8 |
257 |
# define __int8 char |
258 |
# endif |
259 |
# ifndef __small |
260 |
# define __small char |
261 |
# endif |
262 |
# ifndef __hyper |
263 |
# define __hyper long long |
264 |
# endif |
265 |
#else /* ! __GNUC__ && ! __PCC__ */ |
266 |
# ifndef __MINGW_IMPORT |
267 |
# define __MINGW_IMPORT __declspec(dllimport) |
268 |
# endif |
269 |
# ifndef _CRTIMP |
270 |
# define _CRTIMP __declspec(dllimport) |
271 |
# endif |
272 |
# define __DECLSPEC_SUPPORTED |
273 |
# define __attribute__(x) /* nothing */ |
274 |
#endif |
275 |
|
276 |
#if defined (__GNUC__) && defined (__GNUC_MINOR__) |
277 |
#define __MINGW_GNUC_PREREQ(major, minor) \ |
278 |
(__GNUC__ > (major) \ |
279 |
|| (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))) |
280 |
#else |
281 |
#define __MINGW_GNUC_PREREQ(major, minor) 0 |
282 |
#endif |
283 |
|
284 |
#ifdef __cplusplus |
285 |
# define __CRT_INLINE inline |
286 |
#else |
287 |
# if __GNUC_STDC_INLINE__ |
288 |
# define __CRT_INLINE extern inline __attribute__((__gnu_inline__)) |
289 |
# else |
290 |
# define __CRT_INLINE extern __inline__ |
291 |
# endif |
292 |
#endif |
293 |
|
294 |
# ifdef __GNUC__ |
295 |
/* A special form of __CRT_INLINE is provided; it will ALWAYS request |
296 |
* inlining when possible. Originally specified as _CRTALIAS, this is |
297 |
* now deprecated in favour of __CRT_ALIAS, for syntactic consistency |
298 |
* with __CRT_INLINE itself. |
299 |
*/ |
300 |
# define _CRTALIAS __CRT_INLINE __attribute__((__always_inline__)) |
301 |
# define __CRT_ALIAS __CRT_INLINE __attribute__((__always_inline__)) |
302 |
# else |
303 |
# define _CRTALIAS __CRT_INLINE /* deprecated form */ |
304 |
# define __CRT_ALIAS __CRT_INLINE /* preferred form */ |
305 |
# endif |
306 |
/* |
307 |
* Each function which is implemented as a __CRT_ALIAS should also be |
308 |
* accompanied by an externally visible interface. The following pair |
309 |
* of macros provide a mechanism for implementing this, either as a stub |
310 |
* redirecting to an alternative external function, or by compilation of |
311 |
* the normally inlined code into free standing object code; each macro |
312 |
* provides a way for us to offer arbitrary hints for use by the build |
313 |
* system, while remaining transparent to the compiler. |
314 |
*/ |
315 |
#define __JMPSTUB__(__BUILD_HINT__) |
316 |
#define __LIBIMPL__(__BUILD_HINT__) |
317 |
|
318 |
#ifdef __cplusplus |
319 |
# define __UNUSED_PARAM(x) |
320 |
#else |
321 |
# ifdef __GNUC__ |
322 |
# define __UNUSED_PARAM(x) x __attribute__((__unused__)) |
323 |
# else |
324 |
# define __UNUSED_PARAM(x) x |
325 |
# endif |
326 |
#endif |
327 |
|
328 |
#ifdef __GNUC__ |
329 |
#define __MINGW_ATTRIB_NORETURN __attribute__((__noreturn__)) |
330 |
#define __MINGW_ATTRIB_CONST __attribute__((__const__)) |
331 |
#else |
332 |
#define __MINGW_ATTRIB_NORETURN |
333 |
#define __MINGW_ATTRIB_CONST |
334 |
#endif |
335 |
|
336 |
#if __MINGW_GNUC_PREREQ (3, 0) |
337 |
#define __MINGW_ATTRIB_MALLOC __attribute__((__malloc__)) |
338 |
#define __MINGW_ATTRIB_PURE __attribute__((__pure__)) |
339 |
#else |
340 |
#define __MINGW_ATTRIB_MALLOC |
341 |
#define __MINGW_ATTRIB_PURE |
342 |
#endif |
343 |
|
344 |
/* Attribute `nonnull' was valid as of gcc 3.3. We don't use GCC's |
345 |
variadiac macro facility, because variadic macros cause syntax |
346 |
errors with --traditional-cpp. */ |
347 |
#if __MINGW_GNUC_PREREQ (3, 3) |
348 |
#define __MINGW_ATTRIB_NONNULL(arg) __attribute__((__nonnull__(arg))) |
349 |
#else |
350 |
#define __MINGW_ATTRIB_NONNULL(arg) |
351 |
#endif /* GNUC >= 3.3 */ |
352 |
|
353 |
#if __MINGW_GNUC_PREREQ (3, 1) |
354 |
#define __MINGW_ATTRIB_DEPRECATED __attribute__((__deprecated__)) |
355 |
#else |
356 |
#define __MINGW_ATTRIB_DEPRECATED |
357 |
#endif /* GNUC >= 3.1 */ |
358 |
|
359 |
#if __MINGW_GNUC_PREREQ (3, 3) |
360 |
#define __MINGW_NOTHROW __attribute__((__nothrow__)) |
361 |
#else |
362 |
#define __MINGW_NOTHROW |
363 |
#endif /* GNUC >= 3.3 */ |
364 |
|
365 |
|
366 |
/* TODO: Mark (almost) all CRT functions as __MINGW_NOTHROW. This will |
367 |
allow GCC to optimize away some EH unwind code, at least in DW2 case. */ |
368 |
|
369 |
/* Activation of MinGW specific extended features: |
370 |
*/ |
371 |
#ifndef __USE_MINGW_ANSI_STDIO |
372 |
/* Users should not set this directly; rather, define one (or more) |
373 |
* of the feature test macros (tabulated below), or specify any of the |
374 |
* compiler's command line options, (e.g. -posix, -ansi, or -std=c...), |
375 |
* which cause _POSIX_SOURCE, or __STRICT_ANSI__ to be defined. |
376 |
* |
377 |
* We must check this BEFORE we specifiy any implicit _POSIX_C_SOURCE, |
378 |
* otherwise we would always implicitly choose __USE_MINGW_ANSI_STDIO, |
379 |
* even if none of these selectors are specified explicitly... |
380 |
*/ |
381 |
# if defined __STRICT_ANSI__ || defined _ISOC99_SOURCE \ |
382 |
|| defined _POSIX_SOURCE || defined _POSIX_C_SOURCE \ |
383 |
|| defined _XOPEN_SOURCE || defined _XOPEN_SOURCE_EXTENDED \ |
384 |
|| defined _GNU_SOURCE || defined _BSD_SOURCE \ |
385 |
|| defined _SVID_SOURCE |
386 |
/* |
387 |
* but where any of these source code qualifiers are specified, |
388 |
* then assume ANSI I/O standards are preferred over Microsoft's... |
389 |
*/ |
390 |
# define __USE_MINGW_ANSI_STDIO 1 |
391 |
# else |
392 |
/* otherwise use whatever __MINGW_FEATURES__ specifies... |
393 |
*/ |
394 |
# define __USE_MINGW_ANSI_STDIO (__MINGW_FEATURES__ & __MINGW_ANSI_STDIO__) |
395 |
# endif |
396 |
#endif |
397 |
|
398 |
#ifndef _POSIX_C_SOURCE |
399 |
/* Users may define this, either directly or indirectly, to explicitly |
400 |
* enable a particular level of visibility for the subset of those POSIX |
401 |
* features which are supported by MinGW; (notice that this offers no |
402 |
* guarantee that any particular POSIX feature will be supported). |
403 |
*/ |
404 |
# if defined _XOPEN_SOURCE |
405 |
/* Specifying this is the preferred method for setting _POSIX_C_SOURCE; |
406 |
* (POSIX defines an explicit relationship to _XOPEN_SOURCE). Note that |
407 |
* any such explicit setting will augment the set of features which are |
408 |
* available to any compilation unit, even if it seeks to be strictly |
409 |
* ANSI-C compliant. |
410 |
*/ |
411 |
# if _XOPEN_SOURCE < 500 |
412 |
# define _POSIX_C_SOURCE 1L /* POSIX.1-1990 / SUSv1 */ |
413 |
|
414 |
# elif _XOPEN_SOURCE < 600 |
415 |
# define _POSIX_C_SOURCE 199506L /* POSIX.1-1996 / SUSv2 */ |
416 |
|
417 |
# elif _XOPEN_SOURCE < 700 |
418 |
# define _POSIX_C_SOURCE 200112L /* POSIX.1-2001 / SUSv3 */ |
419 |
|
420 |
# else |
421 |
# define _POSIX_C_SOURCE 200809L /* POSIX.1-2008 / SUSv4 */ |
422 |
# endif |
423 |
|
424 |
# elif defined _GNU_SOURCE || defined _BSD_SOURCE || ! defined __STRICT_ANSI__ |
425 |
/* |
426 |
* No explicit level of support has been specified; implicitly grant |
427 |
* the most comprehensive level to any compilation unit which requests |
428 |
* either GNU or BSD feature support, or does not seek to be strictly |
429 |
* ANSI-C compliant. |
430 |
*/ |
431 |
# define _POSIX_C_SOURCE 200809L |
432 |
|
433 |
# elif defined _POSIX_SOURCE |
434 |
/* Now formally deprecated by POSIX, some old code may specify this; |
435 |
* it will enable a minimal level of POSIX support, in addition to the |
436 |
* limited feature set enabled for strict ANSI-C conformity. |
437 |
*/ |
438 |
# define _POSIX_C_SOURCE 1L |
439 |
# endif |
440 |
#endif |
441 |
|
442 |
#ifndef _ISOC99_SOURCE |
443 |
/* libmingwex.a provides free-standing implementations for many of the |
444 |
* functions which were introduced in C99; MinGW headers do not expose |
445 |
* prototypes for these, unless this feature test macro is defined, by |
446 |
* the user, or implied by other standards... |
447 |
*/ |
448 |
# if __STDC_VERSION__ >= 199901L || _POSIX_C_SOURCE >= 200112L |
449 |
# define _ISOC99_SOURCE 1 |
450 |
# endif |
451 |
#endif |
452 |
|
453 |
#if ! defined _MINGW32_SOURCE_EXTENDED && ! defined __STRICT_ANSI__ |
454 |
/* |
455 |
* Enable mingw32 extensions by default, except when __STRICT_ANSI__ |
456 |
* conformity mode has been enabled. |
457 |
*/ |
458 |
# define _MINGW32_SOURCE_EXTENDED 1 |
459 |
#endif |
460 |
|
461 |
#endif /* __MINGW_H: $RCSfile: _mingw.h.in,v $: end of file */ |