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 @GS_PASS_ARGUMENTS@ 77#define GS_PASS_ARGUMENTS @GS_PASS_ARGUMENTS@ 78#endif 79 80#define GS_FAKE_MAIN @GS_FAKE_MAIN@ 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 @GS_WORDS_BIGENDIAN@ 131 132/* 133 * Size definitions for standard types 134 */ 135#define GS_SIZEOF_SHORT @ac_cv_sizeof_short@ 136#define GS_SIZEOF_INT @ac_cv_sizeof_int@ 137#define GS_SIZEOF_LONG @ac_cv_sizeof_long@ 138#define GS_SIZEOF_LONG_LONG @ac_cv_sizeof_long_long@ 139#define GS_SIZEOF_FLOAT @ac_cv_sizeof_float@ 140#define GS_SIZEOF_DOUBLE @ac_cv_sizeof_double@ 141#define GS_SIZEOF_VOIDP @ac_cv_sizeof_voidp@ 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_S_SHT@ 149#define _GSC_S_INT @_GSC_S_INT@ 150#define _GSC_S_LNG @_GSC_S_LNG@ 151#define _GSC_S_LNG_LNG @_GSC_S_LNG_LNG@ 152 153/* 154 * Type definitions for types with known sizes. 155 */ 156typedef @GS_SINT8@ gss8; 157typedef @GS_UINT8@ gsu8; 158typedef @GS_SINT16@ gss16; 159typedef @GS_UINT16@ gsu16; 160typedef @GS_SINT32@ gss32; 161typedef @GS_UINT32@ gsu32; 162typedef @GS_SINT64@ gss64; 163typedef @GS_UINT64@ gsu64; 164typedef @GS_SINT128@ gss128; 165typedef @GS_UINT128@ gsu128; 166typedef @GS_FLT32@ gsf32; 167typedef @GS_FLT64@ gsf64; 168 169/* 170 * Integer type with same size as a pointer 171 */ 172typedef @GS_UADDR@ gsuaddr; 173typedef @GS_SADDR@ gssaddr; 174typedef 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 @GS_HAVE_I64@ 180#define GS_HAVE_I128 @GS_HAVE_I128@ 181 182/* 183 * Ensure some standard types are defined. 184 */ 185@INCLUDE_INTTYPES@ 186@DEFINE_INT8_T@ 187@DEFINE_UINT8_T@ 188@DEFINE_INT16_T@ 189@DEFINE_UINT16_T@ 190@DEFINE_INT32_T@ 191@DEFINE_UINT32_T@ 192@DEFINE_INT64_T@ 193@DEFINE_UINT64_T@ 194@DEFINE_INTPTR_T@ 195@DEFINE_UINTPTR_T@ 196 197/* 198 * PTR Limit information replacements for buggy headers 199 */ 200#if @BUGGY_PTR_LIMITS@ 201#undef INTPTR_MAX 202#define INTPTR_MAX @GS_INTPTR_MAX@ 203#undef INTPTR_MIN 204#define INTPTR_MIN @GS_INTPTR_MIN@ 205#undef UINTPTR_MAX 206#define UINTPTR_MAX @GS_UINTPTR_MAX@ 207#endif 208 209 210/* 211 * Do we have zlib for file handle compression? 212 */ 213#define USE_ZLIB @USE_ZLIB@ 214 215/* 216 * Do we have the GNU Multiple-precision library for NSDecimal? 217 */ 218//#define USE_GMP @USE_GMP@ 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 @NX_CONST_STRING_CLASS@ 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 */ 255typedef struct { 256 uint8_t dummy[@GS_SIZEOF_COND_T@]; 257} gs_cond_t __attribute__((aligned (@GS_ALIGNOF_COND_T@))); 258typedef struct { 259 uint8_t dummy[@GS_SIZEOF_MUTEX_T@]; 260} gs_mutex_t __attribute__((aligned (@GS_ALIGNOF_MUTEX_T@))); 261 262#define OBJC2RUNTIME @OBJC2RUNTIME@ 263#define BASE_NATIVE_OBJC_EXCEPTIONS @BASE_NATIVE_OBJC_EXCEPTIONS@ 264#define GS_NONFRAGILE @GS_NONFRAGILE@ 265#define GS_MIXEDABI @GS_MIXEDABI@ 266#define GS_USE_LIBXML @HAVE_LIBXML@ 267#define GS_USE_GNUTLS @HAVE_GNUTLS@ 268#define GS_USE_AVAHI @HAVE_AVAHI@ 269#define GS_USE_MDNS @HAVE_MDNS@ 270#define GS_USE_ICU @HAVE_ICU@ 271#define GS_USE_LIBDISPATCH @HAVE_LIBDISPATCH@ 272#define GS_USE_LIBDISPATCH_RUNLOOP @HAVE_LIBDISPATCH_RUNLOOP@ 273#define GS_HAVE_OBJC_ROOT_CLASS_ATTR @GS_HAVE_OBJC_ROOT_CLASS_ATTR@ 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 @VERSION@ 336#define GNUSTEP_BASE_MAJOR_VERSION @MAJOR_VERSION@ 337#define GNUSTEP_BASE_MINOR_VERSION @MINOR_VERSION@ 338#define GNUSTEP_BASE_SUBMINOR_VERSION @SUBMINOR_VERSION@ 339#define GNUSTEP_BASE_GCC_VERSION @GCC_VERSION@ 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