1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2004 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Library General Public 7 License as published by the Free Software Foundation; either 8 version 2 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Library General Public License for more details. 14 15 You should have received a copy of the GNU Library General Public 16 License along with this library; if not, write to the Free 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 19 Sam Lantinga 20 slouken@libsdl.org 21 */ 22 23 /* This file sets things up for C dynamic library function definitions, 24 static inlined functions, and structures aligned at 4-byte alignment. 25 If you don't like ugly C preprocessor code, don't look at this file. :) 26 */ 27 28 /* This shouldn't be nested -- included it around code only. */ 29 #ifdef _begin_code_h 30 #error Nested inclusion of begin_code.h 31 #endif 32 #define _begin_code_h 33 34 /* Some compilers use a special export keyword */ 35 #ifndef DECLSPEC 36 # if defined(__BEOS__) 37 # if defined(__GNUC__) 38 # define DECLSPEC __declspec(dllexport) 39 # else 40 # define DECLSPEC __declspec(export) 41 # endif 42 # elif defined(__WIN32__) 43 # ifdef __BORLANDC__ 44 # ifdef BUILD_SDL 45 # define DECLSPEC 46 # else 47 # define DECLSPEC __declspec(dllimport) 48 # endif 49 # else 50 # define DECLSPEC __declspec(dllexport) 51 # endif 52 # elif defined(__OS2__) 53 # ifdef __WATCOMC__ 54 # ifdef BUILD_SDL 55 # define DECLSPEC __declspec(dllexport) 56 # else 57 # define DECLSPEC 58 # endif 59 # else 60 # define DECLSPEC 61 # endif 62 # else 63 # if defined(__GNUC__) && __GNUC__ >= 4 64 # define DECLSPEC __attribute__ ((visibility("default"))) 65 # else 66 # define DECLSPEC 67 # endif 68 # endif 69 #endif 70 71 /* By default SDL uses the C calling convention */ 72 #ifndef SDLCALL 73 #if defined(__WIN32__) && !defined(__GNUC__) 74 #define SDLCALL __cdecl 75 #else 76 #ifdef __OS2__ 77 /* But on OS/2, we use the _System calling convention */ 78 /* to be compatible with every compiler */ 79 #define SDLCALL _System 80 #else 81 #define SDLCALL 82 #endif 83 #endif 84 #endif /* SDLCALL */ 85 86 /* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ 87 #ifdef __SYMBIAN32__ 88 #undef DECLSPEC 89 #define DECLSPEC 90 #endif /* __SYMBIAN32__ */ 91 92 /* Force structure packing at 4 byte alignment. 93 This is necessary if the header is included in code which has structure 94 packing set to an alternate value, say for loading structures from disk. 95 The packing is reset to the previous value in close_code.h 96 */ 97 #if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) 98 #ifdef _MSC_VER 99 #pragma warning(disable: 4103) 100 #endif 101 #ifdef __BORLANDC__ 102 #pragma nopackwarning 103 #endif 104 #pragma pack(push,4) 105 #elif (defined(__MWERKS__) && defined(__MACOS__)) 106 #pragma options align=mac68k4byte 107 #pragma enumsalwaysint on 108 #endif /* Compiler needs structure packing set */ 109 110 /* Set up compiler-specific options for inlining functions */ 111 #ifndef SDL_INLINE_OKAY 112 #ifdef __GNUC__ 113 #define SDL_INLINE_OKAY 114 #else 115 /* Add any special compiler-specific cases here */ 116 #if defined(_MSC_VER) || defined(__BORLANDC__) || \ 117 defined(__DMC__) || defined(__SC__) || \ 118 defined(__WATCOMC__) || defined(__LCC__) || \ 119 defined(__DECC) 120 #ifndef __inline__ 121 #define __inline__ __inline 122 #endif 123 #define SDL_INLINE_OKAY 124 #else 125 #if !defined(__MRC__) && !defined(_SGI_SOURCE) 126 #define __inline__ inline 127 #define SDL_INLINE_OKAY 128 #endif /* Not a funky compiler */ 129 #endif /* Visual C++ */ 130 #endif /* GNU C */ 131 #endif /* SDL_INLINE_OKAY */ 132 133 /* If inlining isn't supported, remove "__inline__", turning static 134 inlined functions into static functions (resulting in code bloat 135 in all files which include the offending header files) 136 */ 137 #ifndef SDL_INLINE_OKAY 138 #define __inline__ 139 #endif 140 141 /* Apparently this is needed by several Windows compilers */ 142 #if !defined(__MACH__) 143 #ifndef NULL 144 #ifdef __cplusplus 145 #define NULL 0 146 #else 147 #define NULL ((void *)0) 148 #endif 149 #endif /* NULL */ 150 #endif /* ! Mac OS X - breaks precompiled headers */ 151