Line 0
Link Here
|
|
|
1 |
/* Copyright (C) 1991-1993,1995-2003, 2004 Free Software Foundation, Inc. |
2 |
This file is part of the GNU C Library. |
3 |
|
4 |
The GNU C Library is free software; you can redistribute it and/or |
5 |
modify it under the terms of the GNU Lesser General Public |
6 |
License as published by the Free Software Foundation; either |
7 |
version 2.1 of the License, or (at your option) any later version. |
8 |
|
9 |
The GNU C Library is distributed in the hope that it will be useful, |
10 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 |
Lesser General Public License for more details. |
13 |
|
14 |
You should have received a copy of the GNU Lesser General Public |
15 |
License along with the GNU C Library; if not, write to the Free |
16 |
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
17 |
02111-1307 USA. */ |
18 |
|
19 |
#ifndef _FEATURES_H |
20 |
#define _FEATURES_H 1 |
21 |
|
22 |
/* These are defined by the user (or the compiler) |
23 |
to specify the desired environment: |
24 |
|
25 |
__STRICT_ANSI__ ISO Standard C. |
26 |
_ISOC99_SOURCE Extensions to ISO C89 from ISO C99. |
27 |
_POSIX_SOURCE IEEE Std 1003.1. |
28 |
_POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2; |
29 |
if >=199309L, add IEEE Std 1003.1b-1993; |
30 |
if >=199506L, add IEEE Std 1003.1c-1995; |
31 |
if >=200112L, all of IEEE 1003.1-2004 |
32 |
_XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if |
33 |
Single Unix conformance is wanted, to 600 for the |
34 |
upcoming sixth revision. |
35 |
_XOPEN_SOURCE_EXTENDED XPG things and X/Open Unix extensions. |
36 |
_LARGEFILE_SOURCE Some more functions for correct standard I/O. |
37 |
_LARGEFILE64_SOURCE Additional functionality from LFS for large files. |
38 |
_FILE_OFFSET_BITS=N Select default filesystem interface. |
39 |
_BSD_SOURCE ISO C, POSIX, and 4.3BSD things. |
40 |
_SVID_SOURCE ISO C, POSIX, and SVID things. |
41 |
_GNU_SOURCE All of the above, plus GNU extensions. |
42 |
_REENTRANT Select additionally reentrant object. |
43 |
_THREAD_SAFE Same as _REENTRANT, often used by other systems. |
44 |
|
45 |
The `-ansi' switch to the GNU C compiler defines __STRICT_ANSI__. |
46 |
If none of these are defined, the default is to have _SVID_SOURCE, |
47 |
_BSD_SOURCE, and _POSIX_SOURCE set to one and _POSIX_C_SOURCE set to |
48 |
199506L. If more than one of these are defined, they accumulate. |
49 |
For example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE |
50 |
together give you ISO C, 1003.1, and 1003.2, but nothing else. |
51 |
|
52 |
These are defined by this file and are used by the |
53 |
header files to decide what to declare or define: |
54 |
|
55 |
__USE_ISOC99 Define ISO C99 things. |
56 |
__USE_POSIX Define IEEE Std 1003.1 things. |
57 |
__USE_POSIX2 Define IEEE Std 1003.2 things. |
58 |
__USE_POSIX199309 Define IEEE Std 1003.1, and .1b things. |
59 |
__USE_POSIX199506 Define IEEE Std 1003.1, .1b, .1c and .1i things. |
60 |
__USE_XOPEN Define XPG things. |
61 |
__USE_XOPEN_EXTENDED Define X/Open Unix things. |
62 |
__USE_UNIX98 Define Single Unix V2 things. |
63 |
__USE_XOPEN2K Define XPG6 things. |
64 |
__USE_LARGEFILE Define correct standard I/O things. |
65 |
__USE_LARGEFILE64 Define LFS things with separate names. |
66 |
__USE_FILE_OFFSET64 Define 64bit interface as default. |
67 |
__USE_BSD Define 4.3BSD things. |
68 |
__USE_SVID Define SVID things. |
69 |
__USE_MISC Define things common to BSD and System V Unix. |
70 |
__USE_GNU Define GNU extensions. |
71 |
__USE_REENTRANT Define reentrant/thread-safe *_r functions. |
72 |
__FAVOR_BSD Favor 4.3BSD things in cases of conflict. |
73 |
|
74 |
The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are |
75 |
defined by this file unconditionally. `__GNU_LIBRARY__' is provided |
76 |
only for compatibility. All new code should use the other symbols |
77 |
to test for features. |
78 |
|
79 |
All macros listed above as possibly being defined by this file are |
80 |
explicitly undefined if they are not explicitly defined. |
81 |
Feature-test macros that are not defined by the user or compiler |
82 |
but are implied by the other feature-test macros defined (or by the |
83 |
lack of any definitions) are defined by the file. */ |
84 |
|
85 |
|
86 |
/* Undefine everything, so we get a clean slate. */ |
87 |
#undef __USE_ISOC99 |
88 |
#undef __USE_POSIX |
89 |
#undef __USE_POSIX2 |
90 |
#undef __USE_POSIX199309 |
91 |
#undef __USE_POSIX199506 |
92 |
#undef __USE_XOPEN |
93 |
#undef __USE_XOPEN_EXTENDED |
94 |
#undef __USE_UNIX98 |
95 |
#undef __USE_XOPEN2K |
96 |
#undef __USE_LARGEFILE |
97 |
#undef __USE_LARGEFILE64 |
98 |
#undef __USE_FILE_OFFSET64 |
99 |
#undef __USE_BSD |
100 |
#undef __USE_SVID |
101 |
#undef __USE_MISC |
102 |
#undef __USE_GNU |
103 |
#undef __USE_REENTRANT |
104 |
#undef __FAVOR_BSD |
105 |
#undef __KERNEL_STRICT_NAMES |
106 |
|
107 |
/* Suppress kernel-name space pollution unless user expressedly asks |
108 |
for it. */ |
109 |
#ifndef _LOOSE_KERNEL_NAMES |
110 |
# define __KERNEL_STRICT_NAMES |
111 |
#endif |
112 |
|
113 |
/* Always use ISO C things. */ |
114 |
#define __USE_ANSI 1 |
115 |
|
116 |
|
117 |
/* If _BSD_SOURCE was defined by the user, favor BSD over POSIX. */ |
118 |
#if defined _BSD_SOURCE && \ |
119 |
!(defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || \ |
120 |
defined _XOPEN_SOURCE || defined _XOPEN_SOURCE_EXTENDED || \ |
121 |
defined _GNU_SOURCE || defined _SVID_SOURCE) |
122 |
# define __FAVOR_BSD 1 |
123 |
#endif |
124 |
|
125 |
/* If _GNU_SOURCE was defined by the user, turn on all the other features. */ |
126 |
#ifdef _GNU_SOURCE |
127 |
# undef _ISOC99_SOURCE |
128 |
# define _ISOC99_SOURCE 1 |
129 |
# undef _POSIX_SOURCE |
130 |
# define _POSIX_SOURCE 1 |
131 |
# undef _POSIX_C_SOURCE |
132 |
# define _POSIX_C_SOURCE 199506L |
133 |
# undef _XOPEN_SOURCE |
134 |
# define _XOPEN_SOURCE 600 |
135 |
# undef _XOPEN_SOURCE_EXTENDED |
136 |
# define _XOPEN_SOURCE_EXTENDED 1 |
137 |
# undef _LARGEFILE64_SOURCE |
138 |
# define _LARGEFILE64_SOURCE 1 |
139 |
# undef _BSD_SOURCE |
140 |
# define _BSD_SOURCE 1 |
141 |
# undef _SVID_SOURCE |
142 |
# define _SVID_SOURCE 1 |
143 |
#endif |
144 |
|
145 |
/* If nothing (other than _GNU_SOURCE) is defined, |
146 |
define _BSD_SOURCE and _SVID_SOURCE. */ |
147 |
#if (!defined __STRICT_ANSI__ && !defined _ISOC99_SOURCE && \ |
148 |
!defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE && \ |
149 |
!defined _XOPEN_SOURCE && !defined _XOPEN_SOURCE_EXTENDED && \ |
150 |
!defined _BSD_SOURCE && !defined _SVID_SOURCE) |
151 |
# define _BSD_SOURCE 1 |
152 |
# define _SVID_SOURCE 1 |
153 |
#endif |
154 |
|
155 |
/* This is to enable the ISO C99 extension. Also recognize the old macro |
156 |
which was used prior to the standard acceptance. This macro will |
157 |
eventually go away and the features enabled by default once the ISO C99 |
158 |
standard is widely adopted. */ |
159 |
#if (defined _ISOC99_SOURCE || defined _ISOC9X_SOURCE \ |
160 |
|| (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) |
161 |
# define __USE_ISOC99 1 |
162 |
#endif |
163 |
|
164 |
/* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2 |
165 |
(and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined). */ |
166 |
#if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \ |
167 |
!defined _POSIX_C_SOURCE) |
168 |
# define _POSIX_SOURCE 1 |
169 |
# if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) < 500 |
170 |
# define _POSIX_C_SOURCE 2 |
171 |
# else |
172 |
# define _POSIX_C_SOURCE 199506L |
173 |
# endif |
174 |
#endif |
175 |
|
176 |
#if defined _POSIX_SOURCE || _POSIX_C_SOURCE >= 1 || defined _XOPEN_SOURCE |
177 |
# define __USE_POSIX 1 |
178 |
#endif |
179 |
|
180 |
#if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 2 || defined _XOPEN_SOURCE |
181 |
# define __USE_POSIX2 1 |
182 |
#endif |
183 |
|
184 |
#if (_POSIX_C_SOURCE - 0) >= 199309L |
185 |
# define __USE_POSIX199309 1 |
186 |
#endif |
187 |
|
188 |
#if (_POSIX_C_SOURCE - 0) >= 199506L |
189 |
# define __USE_POSIX199506 1 |
190 |
#endif |
191 |
|
192 |
#if (_POSIX_C_SOURCE - 0) >= 200112L |
193 |
# define __USE_XOPEN2K 1 |
194 |
#endif |
195 |
|
196 |
#ifdef _XOPEN_SOURCE |
197 |
# define __USE_XOPEN 1 |
198 |
# if (_XOPEN_SOURCE - 0) >= 500 |
199 |
# define __USE_XOPEN_EXTENDED 1 |
200 |
# define __USE_UNIX98 1 |
201 |
# undef _LARGEFILE_SOURCE |
202 |
# define _LARGEFILE_SOURCE 1 |
203 |
# if (_XOPEN_SOURCE - 0) >= 600 |
204 |
# define __USE_XOPEN2K 1 |
205 |
# undef __USE_ISOC99 |
206 |
# define __USE_ISOC99 1 |
207 |
# endif |
208 |
# else |
209 |
# ifdef _XOPEN_SOURCE_EXTENDED |
210 |
# define __USE_XOPEN_EXTENDED 1 |
211 |
# endif |
212 |
# endif |
213 |
#endif |
214 |
|
215 |
#ifdef _LARGEFILE_SOURCE |
216 |
# define __USE_LARGEFILE 1 |
217 |
#endif |
218 |
|
219 |
#ifdef _LARGEFILE64_SOURCE |
220 |
# define __USE_LARGEFILE64 1 |
221 |
#endif |
222 |
|
223 |
#if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64 |
224 |
# define __USE_FILE_OFFSET64 1 |
225 |
#endif |
226 |
|
227 |
#if defined _BSD_SOURCE || defined _SVID_SOURCE |
228 |
# define __USE_MISC 1 |
229 |
#endif |
230 |
|
231 |
#ifdef _BSD_SOURCE |
232 |
# define __USE_BSD 1 |
233 |
#endif |
234 |
|
235 |
#ifdef _SVID_SOURCE |
236 |
# define __USE_SVID 1 |
237 |
#endif |
238 |
|
239 |
#ifdef _GNU_SOURCE |
240 |
# define __USE_GNU 1 |
241 |
#endif |
242 |
|
243 |
#if defined _REENTRANT || defined _THREAD_SAFE |
244 |
# define __USE_REENTRANT 1 |
245 |
#endif |
246 |
|
247 |
/* We do support the IEC 559 math functionality, real and complex. */ |
248 |
#define __STDC_IEC_559__ 1 |
249 |
#define __STDC_IEC_559_COMPLEX__ 1 |
250 |
|
251 |
/* wchar_t uses ISO 10646-1 (2nd ed., published 2000-09-15) / Unicode 3.1. */ |
252 |
#define __STDC_ISO_10646__ 200009L |
253 |
|
254 |
/* This macro indicates that the installed library is the GNU C Library. |
255 |
For historic reasons the value now is 6 and this will stay from now |
256 |
on. The use of this variable is deprecated. Use __GLIBC__ and |
257 |
__GLIBC_MINOR__ now (see below) when you want to test for a specific |
258 |
GNU C library version and use the values in <gnu/lib-names.h> to get |
259 |
the sonames of the shared libraries. */ |
260 |
#undef __GNU_LIBRARY__ |
261 |
#define __GNU_LIBRARY__ 6 |
262 |
|
263 |
/* Major and minor version number of the GNU C library package. Use |
264 |
these macros to test for features in specific releases. */ |
265 |
#define __GLIBC__ 2 |
266 |
#define __GLIBC_MINOR__ 3 |
267 |
|
268 |
/* Convenience macros to test the versions of glibc and gcc. |
269 |
Use them like this: |
270 |
#if __GNUC_PREREQ (2,8) |
271 |
... code requiring gcc 2.8 or later ... |
272 |
#endif |
273 |
Note - they won't work for gcc1 or glibc1, since the _MINOR macros |
274 |
were not defined then. */ |
275 |
#if defined __GNUC__ && defined __GNUC_MINOR__ |
276 |
# define __GNUC_PREREQ(maj, min) \ |
277 |
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) |
278 |
#else |
279 |
# define __GNUC_PREREQ(maj, min) 0 |
280 |
#endif |
281 |
|
282 |
#define __GLIBC_PREREQ(maj, min) \ |
283 |
((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min)) |
284 |
|
285 |
/* Decide whether a compiler supports the long long datatypes. */ |
286 |
#if defined __GNUC__ \ |
287 |
|| (defined __PGI && defined __i386__ ) \ |
288 |
|| (defined __INTEL_COMPILER && (defined __i386__ || defined __ia64__)) \ |
289 |
|| (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) |
290 |
# define __GLIBC_HAVE_LONG_LONG 1 |
291 |
#endif |
292 |
|
293 |
/* This is here only because every header file already includes this one. */ |
294 |
#ifndef __ASSEMBLER__ |
295 |
# ifndef _SYS_CDEFS_H |
296 |
# include <sys/cdefs.h> |
297 |
# endif |
298 |
|
299 |
/* If we don't have __REDIRECT, prototypes will be missing if |
300 |
__USE_FILE_OFFSET64 but not __USE_LARGEFILE[64]. */ |
301 |
# if defined __USE_FILE_OFFSET64 && !defined __REDIRECT |
302 |
# define __USE_LARGEFILE 1 |
303 |
# define __USE_LARGEFILE64 1 |
304 |
# endif |
305 |
|
306 |
#endif /* !ASSEMBLER */ |
307 |
|
308 |
/* Decide whether we can define 'extern inline' functions in headers. */ |
309 |
#if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \ |
310 |
&& !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__ |
311 |
# define __USE_EXTERN_INLINES 1 |
312 |
#endif |
313 |
|
314 |
|
315 |
/* This is here only because every header file already includes this one. |
316 |
Get the definitions of all the appropriate `__stub_FUNCTION' symbols. |
317 |
<gnu/stubs.h> contains `#define __stub_FUNCTION' when FUNCTION is a stub |
318 |
that will always return failure (and set errno to ENOSYS). */ |
319 |
#include <gnu/stubs.h> |
320 |
|
321 |
|
322 |
#endif /* features.h */ |