1 /* Machine/OS specific configuration information for GNUstep
2 
3    Please NOTE - GSConfig.h is generated by the configure script from the
4    file GSConfig.h.in - changes/fixes need to be made to the original file,
5    not to the GSConfig.h generated from it.
6 
7    Copyright (C) 1998-2010 Free Software Foundation, Inc.
8 
9    Written by:  Richard frith-Macdonald <richard@brainstorm.co.uk>
10 
11    This file is part of the GNUstep Base Library.
12 
13    This library is free software; you can redistribute it and/or
14    modify it under the terms of the GNU Lesser General Public
15    License as published by the Free Software Foundation; either
16    version 2 of the License, or (at your option) any later version.
17 
18    This library is distributed in the hope that it will be useful,
19    but WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21    Library General Public License for more details.
22 
23    You should have received a copy of the GNU Lesser General Public
24    License along with this library; if not, write to the Free
25    Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
26    Boston, MA 02111 USA.
27    */
28 
29 #ifndef	included_GSConfig_h
30 #define	included_GSConfig_h
31 
32 /* Check the compiler to see if we are building on/for ms-windows.
33  * Whatever the compiler uses, we want a standard setting of _WIN64
34  * to indicate 64bit AND _WIN32 to indicate ms-windows.
35  * These are defined by gcc, clang, and microsoft compilers anyway.
36  */
37 #if     defined(__WIN32__) \
38 	|| defined(__MS_WIN32__) \
39 	|| defined(__MINGW32__)
40 #  if	!defined(_WIN32)
41 #    define _WIN32
42 #  endif
43 #endif
44 #if     defined(__WIN64__) \
45 	|| defined(__MS_WIN64__) \
46 	|| defined(__MINGW64__)
47 #  if	!defined(__WIN64__)
48 #    define __WIN64__
49 #  endif
50 #  if	!defined(_WIN32)
51 #    define _WIN32
52 #  endif
53 #endif
54 
55 /* Check to see if this is a MINGW build (all we currently support)
56  */
57 #if	defined(__MINGW32__) || defined(__MINGW64__)
58 #  if	!defined(__MINGW__)
59 #    define __MINGW__
60 #  endif
61 #endif
62 
63 // Make sure we expose the constants that we use in ObjC++ mode
64 #ifndef __STDC_CONSTANT_MACROS
65 #define __STDC_CONSTANT_MACROS 1
66 #endif
67 #ifndef __STDC_LIMIT_MACROS
68 #define __STDC_LIMIT_MACROS 1
69 #endif
70 
71 #if !defined(NeXT_Foundation_LIBRARY)
72 
73 /* An alternate to GS_FAKE_MAIN which forces the user to call the
74    NSProcessInfo initialization in 'main', GS_FAKE_MAIN must also
75    be undefined. */
76 #if 0
77 #define GS_PASS_ARGUMENTS 0
78 #endif
79 
80 #define GS_FAKE_MAIN	0
81 #if	GS_FAKE_MAIN
82 
83 /*
84  * NOTE - if GS_FAKE_MAIN (above) is set to 1, this hack applies - and you
85  * must make sure that this file is included in any file that implements
86  * the 'main()' function and links with the GNUstep base libarary.
87  * You should NOT include this file in a program that does not link with
88  * the base library.
89  * This file is included automatically in NSObject.h and Foundation.h
90  *
91  * The Foundation classe NSProcessInfo need access to the argc, argv,
92  * and env variables of the main() function. The purpose of this (ugly hack)
93  * definition is to give the gstep-base library the opportunity to implement
94  * its own main function with private access to the global vars. The private
95  * main() implementation (in NSProcessInfo.m) will then call the user defined
96  * gnustep_base_user_main() function.
97  *
98  * The original hack was -
99  ** Written by:  Georg Tuparev, EMBL & Academia Naturalis,
100  **              Heidelberg, Germany
101  **              Tuparev@EMBL-Heidelberg.de
102  **
103  **  NOTE! This is very dirty and dangerous trick. I spend several hours
104  ** on thinking and man pages browsing, but couldn't find better solution.
105  ** I know that I will spend 666 years in the Computer Hell for writing
106  ** this hack, and the master devil (Bully Boy) will send me to write
107  ** Windowz software.
108  ** BTW, for writing this hack I got personal congratulations from Dennis
109  ** Ritchie and Bjarne Stroustrup sent me a bunch of flowers and asked me
110  ** to participate in the standardization committee for C-- v.6.0 as
111  ** responsible for the new Tab-Overriding-Operator and Scope-Sensitive-
112  ** Comments ... but this makes my situation even worse ;-)
113  ** - Georg
114  *
115  * On some systems, there are other relatively clean workarounds, if this
116  * applies to the system you are running on, your configuration script
117  * should have set GS_FAKE_MAIN to zero, so that this define hack will
118  * not be used.
119  */
120 
121 #define main gnustep_base_user_main
122 
123 #endif	/* GS_FAKE_MAIN */
124 #endif
125 
126 /*
127  * Definition to specify if your processor stores words with the most
128  * significant byte first (like Motorola and SPARC, unlike Intel and VAX).
129  */
130 #define GS_WORDS_BIGENDIAN	0
131 
132 /*
133  *	Size definitions for standard types
134  */
135 #define	GS_SIZEOF_SHORT		2
136 #define	GS_SIZEOF_INT		4
137 #define	GS_SIZEOF_LONG		8
138 #define	GS_SIZEOF_LONG_LONG	8
139 #define	GS_SIZEOF_FLOAT		4
140 #define	GS_SIZEOF_DOUBLE	8
141 #define	GS_SIZEOF_VOIDP		8
142 
143 /*
144  *	Size information to be places in bits 5 and 6 of type encoding bytes
145  *	in archives (bits 0 to 4 are used for basic type info and bit 7 is
146  *	used to mark cross-references to previously encoded objects).
147  */
148 #define	_GSC_S_SHT	_GSC_I16
149 #define	_GSC_S_INT	_GSC_I32
150 #define	_GSC_S_LNG	_GSC_I64
151 #define	_GSC_S_LNG_LNG	_GSC_I64
152 
153 /*
154  * Type definitions for types with known sizes.
155  */
156 typedef signed char gss8;
157 typedef unsigned char gsu8;
158 typedef signed short gss16;
159 typedef unsigned short gsu16;
160 typedef signed int gss32;
161 typedef unsigned int gsu32;
162 typedef signed long gss64;
163 typedef unsigned long gsu64;
164 typedef struct { gsu8 a[16]; } gss128;
165 typedef struct { gsu8 a[16]; } gsu128;
166 typedef float gsf32;
167 typedef double gsf64;
168 
169 /*
170  * Integer type with same size as a pointer
171  */
172 typedef	unsigned long gsuaddr;
173 typedef	long gssaddr;
174 typedef	gsuaddr gsaddr;
175 
176 /*
177  *	Do we have real 64-bit and 128-bit integers or are we just pretending.
178  */
179 #define GS_HAVE_I64	1
180 #define GS_HAVE_I128	0
181 
182 /*
183  * Ensure some standard types are defined.
184  */
185 #include <inttypes.h>
186 
187 
188 
189 
190 
191 
192 
193 
194 
195 
196 
197 /*
198  * PTR Limit information replacements for buggy headers
199  */
200 #if 0
201 #undef INTPTR_MAX
202 #define INTPTR_MAX
203 #undef INTPTR_MIN
204 #define INTPTR_MIN
205 #undef UINTPTR_MAX
206 #define UINTPTR_MAX
207 #endif
208 
209 
210 /*
211  *	Do we have zlib for file handle compression?
212  */
213 #define USE_ZLIB	1
214 
215 /*
216  *	Do we have the GNU Multiple-precision library for NSDecimal?
217  */
218 //#define USE_GMP	1
219 #define USE_GMP	0
220 
221 #ifdef	GS_WITH_GC
222 #undef  GS_WITH_GC
223 #endif
224 #define	GS_WITH_GC	0
225 
226 /*
227  * Define to say if we use NXConstantString or NSConstantString
228  */
229 #define NXConstantString	NSConstantString
230 
231 
232 /*
233  * Wide unicode character type.
234  */
235 #ifndef	UTF32Char
236 #define	UTF32Char	uint32_t
237 #endif
238 
239 /*
240  * Native character type for use in systemcalls etc.
241  */
242 
243 #if	defined(__MINGW__)
244 #  define	GSNativeChar	uint16_t
245 #else
246 #  define	GSNativeChar	char
247 #endif
248 
249 /*
250  * Types used to avoid exposing pthread header in NSLock.h
251  * NB. These types should *never* be used except to provide enough space
252  * in a class layout for the type of data actually used by the pthread
253  * implementation of the current platform.
254  */
255 typedef	struct {
256   uint8_t	dummy[48];
257 } gs_cond_t	__attribute__((aligned (8)));
258 typedef	struct {
259   uint8_t	dummy[40];
260 } gs_mutex_t	__attribute__((aligned (8)));
261 
262 #define	OBJC2RUNTIME 1
263 #define BASE_NATIVE_OBJC_EXCEPTIONS     1
264 #define GS_NONFRAGILE     0
265 #define GS_MIXEDABI     0
266 #define GS_USE_LIBXML 0
267 #define GS_USE_GNUTLS 0
268 #define GS_USE_AVAHI 0
269 #define GS_USE_MDNS 0
270 #define GS_USE_ICU 0
271 #define GS_USE_LIBDISPATCH 0
272 #define GS_USE_LIBDISPATCH_RUNLOOP 0
273 #define GS_HAVE_OBJC_ROOT_CLASS_ATTR 0
274 
275 #ifndef __has_include
276 #  define __has_include(x) 0
277 #endif
278 #ifndef __has_feature
279 #  define __has_feature(x) 0
280 #endif
281 #ifndef __has_builtin
282 #  define __has_builtin(x) 0
283 #endif
284 
285 /*
286  * __has_extension has slightly different semantics from __has_feature.
287  * It evaluates to true if the feature is supported by by clang for the
288  * current compilation unit (language and -f switches), regardless of
289  * whether it is part of the language standard or just a (non-standard)
290  * extension.
291  */
292 #ifndef __has_extension
293 #  define __has_extension(x) __has_feature(x)
294 #endif
295 
296 #if defined(_WIN32)
297 #define BOOL WinBOOL
298 #define __OBJC_BOOL 1
299 #include <w32api.h>
300 #ifndef _WIN32_WINNT
301 #define _WIN32_WINNT Windows2000
302 #endif
303 #if	!defined(WINVER)
304 #define WINVER Windows2000
305 #elif (WINVER < Windows2000)
306 #undef	WINVER
307 #define WINVER Windows2000
308 #endif
309 
310 #if defined(__WIN64__)
311 #include <winsock2.h>
312 #include <windows.h>
313 #else
314 #include <windows.h>
315 #include <winsock2.h>
316 #endif
317 
318 #undef __OBJC_BOOL
319 #undef  BOOL
320 #endif
321 
322 /* Include the blocks runtime header if it's available (It shouldn't matter
323  * that this doesn't work on compilers that don't support __has_include(),
324  * because they also don't support blocks).
325  */
326 #if __has_include(<objc/block_runtime.h>)
327 #  include <objc/block_runtime.h>
328 #endif
329 
330 #ifndef _WIN32
331 #include <sys/param.h> /* Hack to get rid of warning in GNU libc 2.0.3. */
332 #endif
333 
334 /* The following group of lines maintained by the gstep-base configure */
335 #define GNUSTEP_BASE_VERSION            1.26.0
336 #define GNUSTEP_BASE_MAJOR_VERSION      1
337 #define GNUSTEP_BASE_MINOR_VERSION      26
338 #define GNUSTEP_BASE_SUBMINOR_VERSION   0
339 #define GNUSTEP_BASE_GCC_VERSION        4.0.0
340 
341 /* Do not use the following macros!
342  */
343 #define OBJC_DEP(M) \
344   ({ static BOOL beenHere = NO; if (beenHere == NO) {\
345     beenHere = YES; fprintf(stderr, "%s:%d %s", __FILE__, __LINE__, (M));}})
346 
347 #define OBJC_MALLOC(VAR, TYPE, NUM) \
348    (OBJC_DEP("OBJC_MALLOC is deprecated ... use malloc\n"),(VAR) = (TYPE *) malloc ((unsigned)(NUM)*sizeof(TYPE)))
349 #define OBJC_VALLOC(VAR, TYPE, NUM) \
350    (OBJC_DEP("OBJC_VALLOC is deprecated\n"),(VAR) = (TYPE *) valloc ((unsigned)(NUM)*sizeof(TYPE)))
351 #define OBJC_ATOMIC_MALLOC(VAR, TYPE, NUM) \
352    (OBJC_DEP("OBJC_ATOMIC_MALLOC is deprecated\n"),(VAR) = (TYPE *) malloc ((unsigned)(NUM)*sizeof(TYPE)))
353 #define OBJC_REALLOC(VAR, TYPE, NUM) \
354    (OBJC_DEP("OBJC_REALLOC is deprecated ... use realloc\n"),(VAR) = (TYPE *) realloc ((VAR), (unsigned)(NUM)*sizeof(TYPE)))
355 #define OBJC_CALLOC(VAR, TYPE, NUM) \
356    (OBJC_DEP("OBJC_CALLOC is deprecated ... use calloc\n"),(VAR) = (TYPE *) calloc ((unsigned)(NUM), sizeof(TYPE)))
357 #define OBJC_FREE(PTR) (OBJC_DEP("OBJC_FREE is deprecated ... use free\n"), free (PTR))
358 
359 #ifndef MAX
360 #define MAX(a,b) \
361        ({__typeof__(a) _MAX_a = (a); __typeof__(b) _MAX_b = (b);  \
362          _MAX_a > _MAX_b ? _MAX_a : _MAX_b; })
363 #endif
364 
365 #ifndef MIN
366 #define MIN(a,b) \
367        ({__typeof__(a) _MIN_a = (a); __typeof__(b) _MIN_b = (b);  \
368          _MIN_a < _MIN_b ? _MIN_a : _MIN_b; })
369 #endif
370 
371 #ifndef ABS
372 #define ABS(a) \
373        ({__typeof__(a) _ABS_a = (a); \
374          _ABS_a < 0 ? -_ABS_a : _ABS_a; })
375 #endif
376 
377 #ifndef STRINGIFY
378 #define STRINGIFY(s) XSTRINGIFY(s)
379 #define XSTRINGIFY(s) #s
380 #endif
381 
382 #ifndef OBJC_STRINGIFY
383 #define OBJC_STRINGIFY(s) OBJC_XSTRINGIFY(s)
384 #define OBJC_XSTRINGIFY(s) @#s
385 #endif
386 
387 #ifndef PTR2LONG
388 #define PTR2LONG(P) (((char*)(P))-(char*)0)
389 #endif
390 #ifndef LONG2PTR
391 #define LONG2PTR(L) (((char*)0)+(L))
392 #endif
393 
394 #if VSPRINTF_RETURNS_LENGTH
395 #define VSPRINTF_LENGTH(VSPF_CALL) (VSPF_CALL)
396 #else
397 #define VSPRINTF_LENGTH(VSPF_CALL) strlen((VSPF_CALL))
398 #endif /* VSPRINTF_RETURNS_LENGTH */
399 
400 #if VASPRINTF_RETURNS_LENGTH
401 #define VASPRINTF_LENGTH(VASPF_CALL) (VASPF_CALL)
402 #else
403 #define VASPRINTF_LENGTH(VASPF_CALL) strlen((VASPF_CALL))
404 #endif /* VSPRINTF_RETURNS_LENGTH */
405 
406 /* Evil hack to stop gcc-4.1 complaining about a dealloc method which
407  * does not call the superclass implementation.
408  */
409 #define	GSNOSUPERDEALLOC	if (0) [super dealloc]
410 
411 #ifndef CF_EXCLUDE_CSTD_HEADERS
412 #include <sys/types.h>
413 #include <stdarg.h>
414 #include <assert.h>
415 #include <ctype.h>
416 #include <errno.h>
417 #include <float.h>
418 #include <limits.h>
419 #include <locale.h>
420 #include <math.h>
421 #include <setjmp.h>
422 #include <signal.h>
423 #include <stddef.h>
424 #include <stdio.h>
425 #include <stdlib.h>
426 #include <string.h>
427 #include <time.h>
428 #include <stdbool.h>
429 #endif
430 
431 #if !__has_feature(objc_arc)
432 // NetBSD > 6 defines __weak in cdefs_elf.h
433 #ifdef __NetBSD__
434 #undef __weak
435 #endif
436 #  if !defined(__weak)
437 #    define __weak
438 #  endif
439 #  if !defined(__strong)
440 #    define __strong
441 #  endif
442 #endif
443 
444 #ifndef __unsafe_unretained
445 #  if !__has_feature(objc_arc)
446 #    define __unsafe_unretained
447 #  endif
448 #endif
449 #ifndef __bridge
450 #  if !__has_feature(objc_arc)
451 #    define __bridge
452 #  endif
453 #endif
454 
455 #if __has_builtin(__builtin_unreachable)
456 #  define GS_UNREACHABLE() __builtin_unreachable()
457 #else
458 #  define GS_UNREACHABLE() abort()
459 #endif
460 
461 #endif	/* included_GSConfig_h */
462 
463