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 #ifdef __SYMBIAN32__ 87 #ifndef EKA2 88 #undef DECLSPEC 89 #define DECLSPEC 90 #elif !defined(__WINS__) 91 #undef DECLSPEC 92 #define DECLSPEC __declspec(dllexport) 93 #endif //EKA2 94 #endif //__SYMBIAN32__ 95 96 /* Force structure packing at 4 byte alignment. 97 This is necessary if the header is included in code which has structure 98 packing set to an alternate value, say for loading structures from disk. 99 The packing is reset to the previous value in close_code.h 100 */ 101 #if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) 102 #ifdef _MSC_VER 103 #pragma warning(disable: 4103) 104 #endif 105 #ifdef __BORLANDC__ 106 #pragma nopackwarning 107 #endif 108 #pragma pack(push,4) 109 #elif (defined(__MWERKS__) && defined(__MACOS__)) 110 #pragma options align=mac68k4byte 111 #pragma enumsalwaysint on 112 #endif /* Compiler needs structure packing set */ 113 114 /* Set up compiler-specific options for inlining functions */ 115 #ifndef SDL_INLINE_OKAY 116 #ifdef __GNUC__ 117 #define SDL_INLINE_OKAY 118 #else 119 /* Add any special compiler-specific cases here */ 120 #if defined(_MSC_VER) || defined(__BORLANDC__) || \ 121 defined(__DMC__) || defined(__SC__) || \ 122 defined(__WATCOMC__) || defined(__LCC__) || \ 123 defined(__DECC) || defined(__EABI__) 124 #ifndef __inline__ 125 #define __inline__ __inline 126 #endif 127 #define SDL_INLINE_OKAY 128 #else 129 #if !defined(__MRC__) && !defined(_SGI_SOURCE) 130 #ifndef __inline__ 131 #define __inline__ inline 132 #endif 133 #define SDL_INLINE_OKAY 134 #endif /* Not a funky compiler */ 135 #endif /* Visual C++ */ 136 #endif /* GNU C */ 137 #endif /* SDL_INLINE_OKAY */ 138 139 /* If inlining isn't supported, remove "__inline__", turning static 140 inlined functions into static functions (resulting in code bloat 141 in all files which include the offending header files) 142 */ 143 #ifndef SDL_INLINE_OKAY 144 #define __inline__ 145 #endif 146 147 /* Apparently this is needed by several Windows compilers */ 148 #if !defined(__MACH__) 149 #ifndef NULL 150 #ifdef __cplusplus 151 #define NULL 0 152 #else 153 #define NULL ((void *)0) 154 #endif 155 #endif /* NULL */ 156 #endif /* ! Mac OS X - breaks precompiled headers */ 157