OSDN Git Service

Support brace expansion in globbing patterns.
[mingw/mingw-org-wsl.git] / mingwrt / include / _mingw.h.in
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$
9  *
10  * Written by Mumit Khan  <khan@xraylith.wisc.edu>
11  * Copyright (C) 1999, 2001-2011, 2014-2017, 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           %PACKAGE_VERSION_LONG%L
50 #define __MINGW32_MAJOR_VERSION     %PACKAGE_VERSION_MAJOR%
51 #define __MINGW32_MINOR_VERSION     %PACKAGE_VERSION_MINOR%
52 #define __MINGW32_PATCHLEVEL        %PACKAGE_VERSION_PATCH%
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  * The following options, which may also be specified within _CRT_glob,
136  * are specified in terms of their glob() flags, as defined in <glob.h>
137  *
138  *    GLOB_CASEMATCH                    enable case sensitive matching for
139  *                                      globbing patterns; this is default
140  *                                      behaviour for POSIX, but because of
141  *                                      the case insensitive nature of the
142  *                                      MS-Windows file system, it is more
143  *                                      appropriate to use case insensitive
144  *                                      globbing as the MinGW default.
145  *
146  *    GLOB_BRACE                        enable expansion of GNU style brace
147  *                                      delimited expression groups within
148  *                                      the globbing pattern.
149  *
150  */
151 #define __CRT_GLOB_USE_SINGLE_QUOTE__   0x0010
152 #define __CRT_GLOB_BRACKET_GROUPS__     0x0020
153
154 /* The MinGW globbing algorithm uses the ASCII DEL control code as a marker
155  * for globbing characters which were embedded within quoted arguments; (the
156  * quotes are stripped away BEFORE the argument is globbed; the globbing code
157  * treats the marked character as immutable, and strips out the DEL markers,
158  * before storing the resultant argument).  The DEL code is mapped to this
159  * function here; DO NOT change it, without rebuilding the runtime.
160  */
161 #define __CRT_GLOB_ESCAPE_CHAR__        (char)(127)
162
163
164 /* Manifest definitions identifying the flag bits, controlling activation
165  * of MinGW features, as specified by the user in __MINGW_FEATURES__.
166  */
167 #define __MINGW_ANSI_STDIO__            0x0000000000000001ULL
168 /*
169  * The following three are not yet formally supported; they are
170  * included here, to document anticipated future usage.
171  */
172 #define __MINGW_LC_EXTENSIONS__         0x0000000000000050ULL
173 #define __MINGW_LC_MESSAGES__           0x0000000000000010ULL
174 #define __MINGW_LC_ENVVARS__            0x0000000000000040ULL
175
176
177 /* Try to avoid problems with outdated checks for GCC __attribute__ support.
178  */
179 #undef __attribute__
180
181 #if defined (__PCC__)
182 #  undef __DECLSPEC_SUPPORTED
183 # ifndef __MINGW_IMPORT
184 #  define __MINGW_IMPORT extern
185 # endif
186 # ifndef _CRTIMP
187 #  define _CRTIMP
188 # endif
189 # ifndef __cdecl
190 #  define __cdecl  _Pragma("cdecl")
191 # endif
192 # ifndef __stdcall
193 #  define __stdcall _Pragma("stdcall")
194 # endif
195 # ifndef __int64
196 #  define __int64 long long
197 # endif
198 # ifndef __int32
199 #  define __int32 long
200 # endif
201 # ifndef __int16
202 #  define __int16 short
203 # endif
204 # ifndef __int8
205 #  define __int8 char
206 # endif
207 # ifndef __small
208 #  define __small char
209 # endif
210 # ifndef __hyper
211 #  define __hyper long long
212 # endif
213 # ifndef __volatile__
214 #  define __volatile__ volatile
215 # endif
216 # ifndef __restrict__
217 #  define __restrict__ restrict
218 # endif
219 # define NONAMELESSUNION
220 #elif defined(__GNUC__)
221 # ifdef __declspec
222 #  ifndef __MINGW_IMPORT
223    /* Note the extern. This is needed to work around GCC's
224       limitations in handling dllimport attribute.  */
225 #   define __MINGW_IMPORT  extern __attribute__((__dllimport__))
226 #  endif
227 #  ifndef _CRTIMP
228 #   ifdef __USE_CRTIMP
229 #    define _CRTIMP  __attribute__((dllimport))
230 #   else
231 #    define _CRTIMP
232 #   endif
233 #  endif
234 #  define __DECLSPEC_SUPPORTED
235 # else /* __declspec */
236 #  undef __DECLSPEC_SUPPORTED
237 #  undef __MINGW_IMPORT
238 #  ifndef _CRTIMP
239 #   define _CRTIMP
240 #  endif
241 # endif /* __declspec */
242 /*
243  * The next two defines can cause problems if user code adds the
244  * __cdecl attribute like so:
245  * void __attribute__ ((__cdecl)) foo(void);
246  */
247 # ifndef __cdecl
248 #  define __cdecl  __attribute__((__cdecl__))
249 # endif
250 # ifndef __stdcall
251 #  define __stdcall __attribute__((__stdcall__))
252 # endif
253 # ifndef __int64
254 #  define __int64 long long
255 # endif
256 # ifndef __int32
257 #  define __int32 long
258 # endif
259 # ifndef __int16
260 #  define __int16 short
261 # endif
262 # ifndef __int8
263 #  define __int8 char
264 # endif
265 # ifndef __small
266 #  define __small char
267 # endif
268 # ifndef __hyper
269 #  define __hyper long long
270 # endif
271 #else /* ! __GNUC__ && ! __PCC__ */
272 # ifndef __MINGW_IMPORT
273 #  define __MINGW_IMPORT  __declspec(dllimport)
274 # endif
275 # ifndef _CRTIMP
276 #  define _CRTIMP  __declspec(dllimport)
277 # endif
278 # define __DECLSPEC_SUPPORTED
279 # define __attribute__(x) /* nothing */
280 #endif
281
282 #if defined (__GNUC__) && defined (__GNUC_MINOR__)
283 #define __MINGW_GNUC_PREREQ(major, minor) \
284   (__GNUC__ > (major) \
285    || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor)))
286 #else
287 #define __MINGW_GNUC_PREREQ(major, minor)  0
288 #endif
289
290 #ifdef __cplusplus
291 # define __CRT_INLINE    inline
292 #else
293 # if __GNUC_STDC_INLINE__
294 #  define __CRT_INLINE   extern inline __attribute__((__gnu_inline__))
295 # else
296 #  define __CRT_INLINE   extern __inline__
297 # endif
298 #endif
299
300 # ifdef __GNUC__
301   /* A special form of __CRT_INLINE is provided; it will ALWAYS request
302    * inlining when possible.  Originally specified as _CRTALIAS, this is
303    * now deprecated in favour of __CRT_ALIAS, for syntactic consistency
304    * with __CRT_INLINE itself.
305    */
306 #  define  _CRTALIAS   __CRT_INLINE __attribute__((__always_inline__))
307 #  define __CRT_ALIAS  __CRT_INLINE __attribute__((__always_inline__))
308 # else
309 #  define  _CRTALIAS   __CRT_INLINE     /* deprecated form */
310 #  define __CRT_ALIAS  __CRT_INLINE     /* preferred form */
311 # endif
312 /*
313  * Each function which is implemented as a __CRT_ALIAS should also be
314  * accompanied by an externally visible interface.  The following pair
315  * of macros provide a mechanism for implementing this, either as a stub
316  * redirecting to an alternative external function, or by compilation of
317  * the normally inlined code into free standing object code; each macro
318  * provides a way for us to offer arbitrary hints for use by the build
319  * system, while remaining transparent to the compiler.
320  */
321 #define __JMPSTUB__(__BUILD_HINT__)
322 #define __LIBIMPL__(__BUILD_HINT__)
323
324 #ifdef __cplusplus
325 # define __UNUSED_PARAM(x)
326 #else
327 # ifdef __GNUC__
328 #  define __UNUSED_PARAM(x) x __attribute__((__unused__))
329 # else
330 #  define __UNUSED_PARAM(x) x
331 # endif
332 #endif
333
334 #ifdef __GNUC__
335 #define __MINGW_ATTRIB_NORETURN __attribute__((__noreturn__))
336 #define __MINGW_ATTRIB_CONST __attribute__((__const__))
337 #else
338 #define __MINGW_ATTRIB_NORETURN
339 #define __MINGW_ATTRIB_CONST
340 #endif
341
342 #if __MINGW_GNUC_PREREQ (3, 0)
343 #define __MINGW_ATTRIB_MALLOC __attribute__((__malloc__))
344 #define __MINGW_ATTRIB_PURE __attribute__((__pure__))
345 #else
346 #define __MINGW_ATTRIB_MALLOC
347 #define __MINGW_ATTRIB_PURE
348 #endif
349
350 /* Attribute `nonnull' was valid as of gcc 3.3.  We don't use GCC's
351    variadiac macro facility, because variadic macros cause syntax
352    errors with  --traditional-cpp.  */
353 #if  __MINGW_GNUC_PREREQ (3, 3)
354 #define __MINGW_ATTRIB_NONNULL(arg) __attribute__((__nonnull__(arg)))
355 #else
356 #define __MINGW_ATTRIB_NONNULL(arg)
357 #endif /* GNUC >= 3.3 */
358
359 #if  __MINGW_GNUC_PREREQ (3, 1)
360 #define __MINGW_ATTRIB_DEPRECATED __attribute__((__deprecated__))
361 #else
362 #define __MINGW_ATTRIB_DEPRECATED
363 #endif /* GNUC >= 3.1 */
364
365 #if  __MINGW_GNUC_PREREQ (3, 3)
366 #define __MINGW_NOTHROW __attribute__((__nothrow__))
367 #else
368 #define __MINGW_NOTHROW
369 #endif /* GNUC >= 3.3 */
370
371
372 /* TODO: Mark (almost) all CRT functions as __MINGW_NOTHROW.  This will
373 allow GCC to optimize away some EH unwind code, at least in DW2 case.  */
374
375 /* Activation of MinGW specific extended features:
376  */
377 #ifndef __USE_MINGW_ANSI_STDIO
378 /* Users should not set this directly; rather, define one (or more)
379  * of the feature test macros (tabulated below), or specify any of the
380  * compiler's command line options, (e.g. -posix, -ansi, or -std=c...),
381  * which cause _POSIX_SOURCE, or __STRICT_ANSI__ to be defined.
382  *
383  * We must check this BEFORE we specifiy any implicit _POSIX_C_SOURCE,
384  * otherwise we would always implicitly choose __USE_MINGW_ANSI_STDIO,
385  * even if none of these selectors are specified explicitly...
386  */
387 # if   defined __STRICT_ANSI__  ||  defined _ISOC99_SOURCE \
388    ||  defined _POSIX_SOURCE    ||  defined _POSIX_C_SOURCE \
389    ||  defined _XOPEN_SOURCE    ||  defined _XOPEN_SOURCE_EXTENDED \
390    ||  defined _GNU_SOURCE      ||  defined _BSD_SOURCE \
391    ||  defined _SVID_SOURCE
392    /*
393     * but where any of these source code qualifiers are specified,
394     * then assume ANSI I/O standards are preferred over Microsoft's...
395     */
396 #  define __USE_MINGW_ANSI_STDIO    1
397 # else
398    /* otherwise use whatever __MINGW_FEATURES__ specifies...
399     */
400 #  define __USE_MINGW_ANSI_STDIO    (__MINGW_FEATURES__ & __MINGW_ANSI_STDIO__)
401 # endif
402 #endif
403
404 #ifndef _POSIX_C_SOURCE
405  /* Users may define this, either directly or indirectly, to explicitly
406   * enable a particular level of visibility for the subset of those POSIX
407   * features which are supported by MinGW; (notice that this offers no
408   * guarantee that any particular POSIX feature will be supported).
409   */
410 # if defined _XOPEN_SOURCE
411   /* Specifying this is the preferred method for setting _POSIX_C_SOURCE;
412    * (POSIX defines an explicit relationship to _XOPEN_SOURCE).  Note that
413    * any such explicit setting will augment the set of features which are
414    * available to any compilation unit, even if it seeks to be strictly
415    * ANSI-C compliant.
416    */
417 #  if _XOPEN_SOURCE < 500
418 #   define _POSIX_C_SOURCE  1L          /* POSIX.1-1990 / SUSv1 */
419
420 #  elif _XOPEN_SOURCE < 600
421 #   define _POSIX_C_SOURCE  199506L     /* POSIX.1-1996 / SUSv2 */
422
423 #  elif _XOPEN_SOURCE < 700
424 #   define _POSIX_C_SOURCE  200112L     /* POSIX.1-2001 / SUSv3 */
425
426 #  else
427 #   define _POSIX_C_SOURCE  200809L     /* POSIX.1-2008 / SUSv4 */
428 #  endif
429
430 # elif defined _GNU_SOURCE || defined _BSD_SOURCE || ! defined __STRICT_ANSI__
431   /*
432    * No explicit level of support has been specified; implicitly grant
433    * the most comprehensive level to any compilation unit which requests
434    * either GNU or BSD feature support, or does not seek to be strictly
435    * ANSI-C compliant.
436    */
437 #  define _POSIX_C_SOURCE  200809L
438
439 #  if ! defined _EMULATE_GLIBC && ! defined _POSIX_SOURCE
440    /* For this default case, unless it has already been specified
441     * otherwise, we enable some GNU glibc extensions, which may be
442     * considered as violations of strict POSIX.1 conformance.
443     */
444 #   define _EMULATE_GLIBC  1
445 #  endif
446
447 # elif defined _POSIX_SOURCE
448   /* Now formally deprecated by POSIX, some old code may specify this;
449    * it will enable a minimal level of POSIX support, in addition to the
450    * limited feature set enabled for strict ANSI-C conformity.
451    */
452 #  define _POSIX_C_SOURCE  1L
453 # endif
454 #endif
455
456 #ifndef _ISOC99_SOURCE
457  /* libmingwex.a provides free-standing implementations for many of the
458   * functions which were introduced in C99; MinGW headers do not expose
459   * prototypes for these, unless this feature test macro is defined, by
460   * the user, or implied by other standards.  We will use a bit-mapped
461   * representation, comprising the bit-wise sum of:
462   *
463   *   0x08  user declared
464   *   0x04  required by C compiler, supporting ISO-C99
465   *   0x02  required by C++ compiler, supporting ISO-C++11
466   *   0x01  required to support recent POSIX.1 features
467   *
468   * to ensure that we can identify the reason for implicit declaration,
469   * (in the event that we may need to discriminate).
470   */
471 # if __STDC_VERSION__ >= 199901L
472   /* This represents a compiler supporting ISO-C99; enable all potential
473    * use of ISO-C99 features, (to the maximum extent supportable), which
474    * presumably also covers all C++11 and POSIX.1 usage.
475    */
476 #  define _ISOC99_SOURCE  0x07
477
478 # elif __cplusplus >= 201103L
479   /* C++11 also incorporates many (if not all) of the ISO-C99 features,
480    * which we have guarded by _ISOC99_SOURCE; enable such features, to
481    * the required extent, (which is likely also sufficient to support
482    * any POSIX.1 dependencies).
483    */
484 #  define _ISOC99_SOURCE  0x03
485
486 # elif _POSIX_C_SOURCE >= 200112L
487   /* This represents the minimum level of ISO-C99 support, which may be
488    * required by POSIX.1, (and which may be no less than full support).
489    */
490 #  define _ISOC99_SOURCE  0x01
491 # endif
492
493 #else
494  /* The the user has explicitly declared a source level dependency on
495   * ISO-C99 features; regardless of how it was declared, redefine it to
496   * ensure that any plausible dependency is covered.
497   */
498 # undef _ISOC99_SOURCE
499 # define _ISOC99_SOURCE  0x0F
500
501 #endif  /* _ISOC99_SOURCE */
502
503 #if _ISOC99_SOURCE && __cplusplus >= 201103L && __GNUC__ < 6
504  /* Due to a configuration defect in GCC versions prior to GCC-6, when
505   * compiling C++11 code, the ISO-C99 functions may not be incorporated
506   * into the appropriate namespace(s); we may be able to mitigate this,
507   * by ensuring that this GCC configuration macro is defined.
508   */
509 # define _GLIBCXX_USE_C99  1
510 #endif
511
512 #if ! defined _MINGW32_SOURCE_EXTENDED && ! defined __STRICT_ANSI__
513  /* Enable mingw32 extensions by default, except when __STRICT_ANSI__
514   * conformity mode has been enabled.
515   */
516 # define _MINGW32_SOURCE_EXTENDED  1
517 #endif
518
519 #endif /* __MINGW_H: $RCSfile$: end of file */