Home | History | Annotate | Download | only in SDL
      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 (at) 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