Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2 | pj | 1 | /* Copyright (C) 1991, 92, 93, 95, 96, 97, 98 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 Library General Public License as |
||
6 | published by the Free Software Foundation; either version 2 of the |
||
7 | 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 | Library General Public License for more details. |
||
13 | |||
14 | You should have received a copy of the GNU Library General Public |
||
15 | License along with the GNU C Library; see the file COPYING.LIB. If not, |
||
16 | write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
||
17 | Boston, MA 02111-1307, USA. */ |
||
18 | |||
19 | /* from glibc 2.1.2 MODIFIED */ |
||
20 | |||
21 | #ifndef _FEATURES_H |
||
22 | #define _FEATURES_H 1 |
||
23 | |||
24 | /* These are defined by the user (or the compiler) |
||
25 | to specify the desired environment: |
||
26 | |||
27 | __STRICT_ANSI__ ISO Standard C. |
||
28 | _ISOC9X_SOURCE Extensions to ISO C 89 from ISO C 9x. |
||
29 | _POSIX_SOURCE IEEE Std 1003.1. |
||
30 | _POSIX_C_SOURCE If ==1, like _POSIX_SOURCE; if >=2 add IEEE Std 1003.2; |
||
31 | if >=199309L, add IEEE Std 1003.1b-1993; |
||
32 | if >=199506L, add IEEE Std 1003.1c-1995 |
||
33 | _XOPEN_SOURCE Includes POSIX and XPG things. Set to 500 if |
||
34 | Single Unix conformance is wanted. |
||
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 all but _GNU_SOURCE. |
||
47 | If more than one of these are defined, they accumulate. |
||
48 | For example __STRICT_ANSI__, _POSIX_SOURCE and _POSIX_C_SOURCE |
||
49 | together give you ISO C, 1003.1, and 1003.2, but nothing else. |
||
50 | |||
51 | These are defined by this file and are used by the |
||
52 | header files to decide what to declare or define: |
||
53 | |||
54 | __USE_ISOC9X Define ISO C 9X things. |
||
55 | __USE_POSIX Define IEEE Std 1003.1 things. |
||
56 | __USE_POSIX2 Define IEEE Std 1003.2 things. |
||
57 | __USE_POSIX199309 Define IEEE Std 1003.1, and .1b things. |
||
58 | __USE_POSIX199506 Define IEEE Std 1003.1, .1b, .1c and .1i things. |
||
59 | __USE_XOPEN Define XPG things. |
||
60 | __USE_XOPEN_EXTENDED Define X/Open Unix things. |
||
61 | __USE_UNIX98 Define Single Unix V2 things. |
||
62 | __USE_LARGEFILE64 Define LFS things with separate names. |
||
63 | __USE_FILE_OFFSET64 Define 64bit interface as default. |
||
64 | __USE_BSD Define 4.3BSD things. |
||
65 | __USE_SVID Define SVID things. |
||
66 | __USE_MISC Define things common to BSD and System V Unix. |
||
67 | __USE_GNU Define GNU extensions. |
||
68 | __USE_REENTRANT Define reentrant/thread-safe *_r functions. |
||
69 | __FAVOR_BSD Favor 4.3BSD things in cases of conflict. |
||
70 | |||
71 | The macros `__GNU_LIBRARY__', `__GLIBC__', and `__GLIBC_MINOR__' are |
||
72 | defined by this file unconditionally. `__GNU_LIBRARY__' is provided |
||
73 | only for compatibility. All new code should use the other symbols |
||
74 | to test for features. |
||
75 | |||
76 | All macros listed above as possibly being defined by this file are |
||
77 | explicitly undefined if they are not explicitly defined. |
||
78 | Feature-test macros that are not defined by the user or compiler |
||
79 | but are implied by the other feature-test macros defined (or by the |
||
80 | lack of any definitions) are defined by the file. */ |
||
81 | |||
82 | |||
83 | /* Undefine everything, so we get a clean slate. */ |
||
84 | #undef __USE_ISOC9X |
||
85 | #undef __USE_POSIX |
||
86 | #undef __USE_POSIX2 |
||
87 | #undef __USE_POSIX199309 |
||
88 | #undef __USE_POSIX199506 |
||
89 | #undef __USE_XOPEN |
||
90 | #undef __USE_XOPEN_EXTENDED |
||
91 | #undef __USE_UNIX98 |
||
92 | #undef __USE_LARGEFILE |
||
93 | #undef __USE_LARGEFILE64 |
||
94 | #undef __USE_FILE_OFFSET64 |
||
95 | #undef __USE_BSD |
||
96 | #undef __USE_SVID |
||
97 | #undef __USE_MISC |
||
98 | #undef __USE_GNU |
||
99 | #undef __USE_REENTRANT |
||
100 | #undef __FAVOR_BSD |
||
101 | #undef __KERNEL_STRICT_NAMES |
||
102 | |||
103 | /* Suppress kernel-name space pollution unless user expressedly asks |
||
104 | for it. */ |
||
105 | #ifndef _LOOSE_KERNEL_NAMES |
||
106 | # define __KERNEL_STRICT_NAMES |
||
107 | #endif |
||
108 | |||
109 | /* Always use ISO C things. */ |
||
110 | #define __USE_ANSI 1 |
||
111 | |||
112 | |||
113 | /* If _BSD_SOURCE was defined by the user, favor BSD over POSIX. */ |
||
114 | #if defined _BSD_SOURCE && \ |
||
115 | !(defined _POSIX_SOURCE || defined _POSIX_C_SOURCE || \ |
||
116 | defined _XOPEN_SOURCE || defined _XOPEN_SOURCE_EXTENDED || \ |
||
117 | defined _GNU_SOURCE || defined _SVID_SOURCE) |
||
118 | # define __FAVOR_BSD 1 |
||
119 | #endif |
||
120 | |||
121 | /* If _GNU_SOURCE was defined by the user, turn on all the other features. */ |
||
122 | #ifdef _GNU_SOURCE |
||
123 | # undef _ISOC9X_SOURCE |
||
124 | # define _ISOC9X_SOURCE 1 |
||
125 | # undef _POSIX_SOURCE |
||
126 | # define _POSIX_SOURCE 1 |
||
127 | # undef _POSIX_C_SOURCE |
||
128 | # define _POSIX_C_SOURCE 199506L |
||
129 | # undef _XOPEN_SOURCE |
||
130 | # define _XOPEN_SOURCE 500 |
||
131 | # undef _XOPEN_SOURCE_EXTENDED |
||
132 | # define _XOPEN_SOURCE_EXTENDED 1 |
||
133 | # undef _LARGEFILE64_SOURCE |
||
134 | # define _LARGEFILE64_SOURCE 1 |
||
135 | # undef _BSD_SOURCE |
||
136 | # define _BSD_SOURCE 1 |
||
137 | # undef _SVID_SOURCE |
||
138 | # define _SVID_SOURCE 1 |
||
139 | #endif |
||
140 | |||
141 | /* If nothing (other than _GNU_SOURCE) is defined, |
||
142 | define _BSD_SOURCE and _SVID_SOURCE. */ |
||
143 | #if (!defined __STRICT_ANSI__ && !defined _ISOC9X_SOURCE && \ |
||
144 | !defined _POSIX_SOURCE && !defined _POSIX_C_SOURCE && \ |
||
145 | !defined _XOPEN_SOURCE && !defined _XOPEN_SOURCE_EXTENDED && \ |
||
146 | !defined _BSD_SOURCE && !defined _SVID_SOURCE) |
||
147 | # define _BSD_SOURCE 1 |
||
148 | # define _SVID_SOURCE 1 |
||
149 | #endif |
||
150 | |||
151 | /* This is to enable the ISO C 9x extension. It will go away as soon |
||
152 | as this standard is officially released. */ |
||
153 | #ifdef _ISOC9X_SOURCE |
||
154 | # define __USE_ISOC9X 1 |
||
155 | #endif |
||
156 | |||
157 | /* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2 |
||
158 | (and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined). */ |
||
159 | #if (!defined __STRICT_ANSI__ && !defined _POSIX_SOURCE && \ |
||
160 | !defined _POSIX_C_SOURCE) |
||
161 | # define _POSIX_SOURCE 1 |
||
162 | # if defined _XOPEN_SOURCE && (_XOPEN_SOURCE - 0) != 500 |
||
163 | # define _POSIX_C_SOURCE 2 |
||
164 | # else |
||
165 | # define _POSIX_C_SOURCE 199506L |
||
166 | # endif |
||
167 | #endif |
||
168 | |||
169 | #if defined _POSIX_SOURCE || _POSIX_C_SOURCE >= 1 || defined _XOPEN_SOURCE |
||
170 | # define __USE_POSIX 1 |
||
171 | #endif |
||
172 | |||
173 | #if defined _POSIX_C_SOURCE && _POSIX_C_SOURCE >= 2 || defined _XOPEN_SOURCE |
||
174 | # define __USE_POSIX2 1 |
||
175 | #endif |
||
176 | |||
177 | #if (_POSIX_C_SOURCE - 0) >= 199309L |
||
178 | # define __USE_POSIX199309 1 |
||
179 | #endif |
||
180 | |||
181 | #if (_POSIX_C_SOURCE - 0) >= 199506L |
||
182 | # define __USE_POSIX199506 1 |
||
183 | #endif |
||
184 | |||
185 | #ifdef _XOPEN_SOURCE |
||
186 | # define __USE_XOPEN 1 |
||
187 | # if (_XOPEN_SOURCE - 0) == 500 |
||
188 | # define __USE_XOPEN_EXTENDED 1 |
||
189 | # define __USE_UNIX98 1 |
||
190 | # undef _LARGEFILE_SOURCE |
||
191 | # define _LARGEFILE_SOURCE 1 |
||
192 | # else |
||
193 | # ifdef _XOPEN_SOURCE_EXTENDED |
||
194 | # define __USE_XOPEN_EXTENDED 1 |
||
195 | # endif |
||
196 | # endif |
||
197 | #endif |
||
198 | |||
199 | #ifdef _LARGEFILE_SOURCE |
||
200 | # define __USE_LARGEFILE 1 |
||
201 | #endif |
||
202 | |||
203 | #ifdef _LARGEFILE64_SOURCE |
||
204 | # define __USE_LARGEFILE64 1 |
||
205 | #endif |
||
206 | |||
207 | #if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64 |
||
208 | # define __USE_FILE_OFFSET64 1 |
||
209 | #endif |
||
210 | |||
211 | #if defined _BSD_SOURCE || defined _SVID_SOURCE |
||
212 | # define __USE_MISC 1 |
||
213 | #endif |
||
214 | |||
215 | #ifdef _BSD_SOURCE |
||
216 | # define __USE_BSD 1 |
||
217 | #endif |
||
218 | |||
219 | #ifdef _SVID_SOURCE |
||
220 | # define __USE_SVID 1 |
||
221 | #endif |
||
222 | |||
223 | #ifdef _GNU_SOURCE |
||
224 | # define __USE_GNU 1 |
||
225 | #endif |
||
226 | |||
227 | #if defined _REENTRANT || defined _THREAD_SAFE |
||
228 | # define __USE_REENTRANT 1 |
||
229 | #endif |
||
230 | |||
231 | /* We do support the IEC 559 math functionality, real and complex. */ |
||
232 | #define __STDC_IEC_559__ 1 |
||
233 | #define __STDC_IEC_559_COMPLEX__ 1 |
||
234 | |||
235 | /* This macro indicates that the installed library is the GNU C Library. |
||
236 | For historic reasons the value now is 6 and this will stay from now |
||
237 | on. The use of this variable is deprecated. Use __GLIBC__ and |
||
238 | __GLIBC_MINOR__ now (see below) when you want to test for a specific |
||
239 | GNU C library version and use the values in <gnu/lib-names.h> to get |
||
240 | the sonames of the shared libraries. */ |
||
241 | //#undef __GNU_LIBRARY__ |
||
242 | //#define __GNU_LIBRARY__ 6 |
||
243 | |||
244 | /* Major and minor version number of the GNU C library package. Use |
||
245 | these macros to test for features in specific releases. */ |
||
246 | //#define __GLIBC__ 2 |
||
247 | //#define __GLIBC_MINOR__ 1 |
||
248 | |||
249 | /* This is here only because every header file already includes this one. */ |
||
250 | #ifndef __ASSEMBLER__ |
||
251 | # include <sys/cdefs.h> |
||
252 | |||
253 | /* If we don't have __REDIRECT, prototypes will be missing if |
||
254 | __USE_FILE_OFFSET64 but not __USE_LARGEFILE[64]. */ |
||
255 | # if defined __USE_FILE_OFFSET64 && !defined __REDIRECT |
||
256 | # define __USE_LARGEFILE |
||
257 | # define __USE_LARGEFILE64 |
||
258 | # endif |
||
259 | |||
260 | #endif /* !ASSEMBLER */ |
||
261 | |||
262 | /* Decide whether we can define 'extern inline' functions in headers. */ |
||
263 | #if defined __GNUC__ && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ >= 7)\ |
||
264 | && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ |
||
265 | # define __USE_EXTERN_INLINES 1 |
||
266 | #endif |
||
267 | |||
268 | /* This is here only because every header file already includes this one. */ |
||
269 | #ifndef _LIBC |
||
270 | /* Get the definitions of all the appropriate `__stub_FUNCTION' symbols. |
||
271 | <gnu/stubs.h> contains `#define __stub_FUNCTION' when FUNCTION is a stub |
||
272 | which will always return failure (and set errno to ENOSYS). |
||
273 | |||
274 | We avoid including <gnu/stubs.h> when compiling the C library itself to |
||
275 | avoid a dependency loop. stubs.h depends on every object file. If |
||
276 | this #include were done for the library source code, then every object |
||
277 | file would depend on stubs.h. */ |
||
278 | |||
279 | //#include <gnu/stubs.h> |
||
280 | #endif |
||
281 | |||
282 | #endif /* features.h */ |