source: Daodan/MinGW/include/_mingw.h@ 1075

Last change on this file since 1075 was 1046, checked in by alloc, 8 years ago

Daodan: Added Windows MinGW and build batch file

File size: 15.9 KB
Line 
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
367allow 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 */
Note: See TracBrowser for help on using the repository browser.