From 08fa8da77c3ef2f477d92b920dd3cb49faec0eeb Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 20 Oct 2013 21:56:15 -0700 Subject: [PATCH] Fixed bug 2129 - fix for bug 2121 breaks linking for mingw and throws multiple warnings Andreas Ertelt The problem in question is caused by changeset 7771 (http://hg.libsdl.org/SDL/rev/5486e579872e / https://bugzilla.libsdl.org/show_bug.cgi?id=2121) The redefinition of __inline__ (introduced by the addition of begin_code.h:128's "|| __STRICT_ANSI__") results in mingw's gcc throwing multiple warning: always_inline function might not be inlinable [-Wattributes] as well as a whole bunch of redefinitions of mingw internals which break linking of projects including the SDL2 headers. --- include/begin_code.h | 39 ++++++++---------------- src/atomic/SDL_atomic.c | 4 +-- src/audio/SDL_audiodev.c | 2 +- src/audio/alsa/SDL_alsa_audio.c | 10 +++--- src/audio/pulseaudio/SDL_pulseaudio.c | 6 ++-- src/audio/qsa/SDL_qsa_audio.c | 2 +- src/cpuinfo/SDL_cpuinfo.c | 22 ++++++------- src/events/SDL_events.c | 2 +- src/joystick/linux/SDL_sysjoystick.c | 10 +++--- src/joystick/psp/SDL_sysjoystick.c | 2 +- src/render/opengles/SDL_render_gles.c | 2 +- src/video/SDL_blit_copy.c | 4 +-- src/video/SDL_surface.c | 2 +- src/video/SDL_video.c | 2 +- src/video/bwindow/SDL_bframebuffer.cc | 4 +-- src/video/bwindow/SDL_bmodes.cc | 6 ++-- src/video/bwindow/SDL_bopengl.cc | 4 +-- src/video/bwindow/SDL_bwindow.cc | 4 +-- src/video/directfb/SDL_DirectFB_render.c | 8 ++--- src/video/directfb/SDL_DirectFB_video.h | 2 +- src/video/x11/SDL_x11messagebox.c | 2 +- 21 files changed, 63 insertions(+), 76 deletions(-) diff --git a/include/begin_code.h b/include/begin_code.h index 5261d26c1aaf0..3d4377053fc86 100644 --- a/include/begin_code.h +++ b/include/begin_code.h @@ -99,49 +99,36 @@ #endif #endif /* Compiler needs structure packing set */ -#ifndef __inline__ +#ifndef SDL_INLINE /* Set up compiler-specific options for inlining functions */ -#ifndef SDL_INLINE_OKAY -/* Add any special compiler-specific cases here */ #if defined(_MSC_VER) || defined(__BORLANDC__) || \ defined(__DMC__) || defined(__SC__) || \ defined(__WATCOMC__) || defined(__LCC__) || \ defined(__DECC) -#ifndef __inline__ -#define __inline__ __inline -#endif -#define SDL_INLINE_OKAY 1 +#define SDL_INLINE __inline #else -#if !defined(__MRC__) && !defined(_SGI_SOURCE) -#ifndef __inline__ -#define __inline__ inline -#endif -#define SDL_INLINE_OKAY 1 -#endif /* Not a funky compiler */ +#define SDL_INLINE inline #endif /* Visual C++ */ -#endif /* SDL_INLINE_OKAY */ +#endif /* SDL_INLINE not defined */ -/* If inlining isn't supported, remove "__inline__", turning static - inlined functions into static functions (resulting in code bloat - in all files which include the offending header files) +/* If inlining isn't supported, remove SDL_INLINE, turning static + inlined functions into static functions (potentially resulting in + code bloat in all files which include the offending header files) */ -#if !SDL_INLINE_OKAY || __STRICT_ANSI__ -#ifdef __inline__ -#undef __inline__ +#if __STRICT_ANSI__ +#undef SDL_INLINE +#define SDL_INLINE #endif -#define __inline__ -#endif -#endif /* __inline__ not defined */ #ifndef SDL_FORCE_INLINE #if defined(_MSC_VER) #define SDL_FORCE_INLINE __forceinline #elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) -#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ +#define SDL_FORCE_INLINE __attribute__((always_inline)) static SDL_INLINE #else -#define SDL_FORCE_INLINE static __inline__ -#endif +#define SDL_FORCE_INLINE static SDL_INLINE #endif +#endif /* SDL_FORCE_INLINE not defined */ /* Apparently this is needed by several Windows compilers */ #if !defined(__MACH__) diff --git a/src/atomic/SDL_atomic.c b/src/atomic/SDL_atomic.c index c747b12aa24ce..e9b636f3011c1 100644 --- a/src/atomic/SDL_atomic.c +++ b/src/atomic/SDL_atomic.c @@ -55,7 +55,7 @@ static SDL_SpinLock locks[32]; -static __inline__ void +static SDL_INLINE void enterLock(void *a) { uintptr_t index = ((((uintptr_t)a) >> 3) & 0x1f); @@ -63,7 +63,7 @@ enterLock(void *a) SDL_AtomicLock(&locks[index]); } -static __inline__ void +static SDL_INLINE void leaveLock(void *a) { uintptr_t index = ((((uintptr_t)a) >> 3) & 0x1f); diff --git a/src/audio/SDL_audiodev.c b/src/audio/SDL_audiodev.c index 91b60c37675ea..af45a8b90edfc 100644 --- a/src/audio/SDL_audiodev.c +++ b/src/audio/SDL_audiodev.c @@ -46,7 +46,7 @@ #define _PATH_DEV_AUDIO "/dev/audio" #endif -static inline void +static SDL_INLINE void test_device(const char *fname, int flags, int (*test) (int fd), SDL_AddAudioDevice addfn) { diff --git a/src/audio/alsa/SDL_alsa_audio.c b/src/audio/alsa/SDL_alsa_audio.c index 73bdcf2842c34..5ff4cef4c18a5 100644 --- a/src/audio/alsa/SDL_alsa_audio.c +++ b/src/audio/alsa/SDL_alsa_audio.c @@ -241,25 +241,25 @@ ALSA_WaitDevice(_THIS) tmp = ptr[3]; ptr[3] = ptr[5]; ptr[5] = tmp; \ } -static __inline__ void +static SDL_INLINE void swizzle_alsa_channels_6_64bit(_THIS) { SWIZ6(Uint64); } -static __inline__ void +static SDL_INLINE void swizzle_alsa_channels_6_32bit(_THIS) { SWIZ6(Uint32); } -static __inline__ void +static SDL_INLINE void swizzle_alsa_channels_6_16bit(_THIS) { SWIZ6(Uint16); } -static __inline__ void +static SDL_INLINE void swizzle_alsa_channels_6_8bit(_THIS) { SWIZ6(Uint8); @@ -272,7 +272,7 @@ swizzle_alsa_channels_6_8bit(_THIS) * Called right before feeding this->hidden->mixbuf to the hardware. Swizzle * channels from Windows/Mac order to the format alsalib will want. */ -static __inline__ void +static SDL_INLINE void swizzle_alsa_channels(_THIS) { if (this->spec.channels == 6) { diff --git a/src/audio/pulseaudio/SDL_pulseaudio.c b/src/audio/pulseaudio/SDL_pulseaudio.c index 7bf4accac46ce..5923eaeccefa9 100644 --- a/src/audio/pulseaudio/SDL_pulseaudio.c +++ b/src/audio/pulseaudio/SDL_pulseaudio.c @@ -49,7 +49,7 @@ #if (PA_API_VERSION < 12) /** Return non-zero if the passed state is one of the connected states */ -static __inline__ int PA_CONTEXT_IS_GOOD(pa_context_state_t x) { +static SDL_INLINE int PA_CONTEXT_IS_GOOD(pa_context_state_t x) { return x == PA_CONTEXT_CONNECTING || x == PA_CONTEXT_AUTHORIZING || @@ -57,7 +57,7 @@ static __inline__ int PA_CONTEXT_IS_GOOD(pa_context_state_t x) { x == PA_CONTEXT_READY; } /** Return non-zero if the passed state is one of the connected states */ -static __inline__ int PA_STREAM_IS_GOOD(pa_stream_state_t x) { +static SDL_INLINE int PA_STREAM_IS_GOOD(pa_stream_state_t x) { return x == PA_STREAM_CREATING || x == PA_STREAM_READY; @@ -322,7 +322,7 @@ PULSEAUDIO_CloseDevice(_THIS) } -static __inline__ int +static SDL_INLINE int squashVersion(const int major, const int minor, const int patch) { return ((major & 0xFF) << 16) | ((minor & 0xFF) << 8) | (patch & 0xFF); diff --git a/src/audio/qsa/SDL_qsa_audio.c b/src/audio/qsa/SDL_qsa_audio.c index a5286d8cbcb09..78f69c0d88cf2 100644 --- a/src/audio/qsa/SDL_qsa_audio.c +++ b/src/audio/qsa/SDL_qsa_audio.c @@ -83,7 +83,7 @@ uint32_t qsa_playback_devices; QSA_Device qsa_capture_device[QSA_MAX_DEVICES]; uint32_t qsa_capture_devices; -static inline int +static SDL_INLINE int QSA_SetError(const char *fn, int status) { return SDL_SetError("QSA: %s() failed: %s", fn, snd_strerror(status)); diff --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c index 2b81f91174829..f9b764026f8df 100644 --- a/src/cpuinfo/SDL_cpuinfo.c +++ b/src/cpuinfo/SDL_cpuinfo.c @@ -68,7 +68,7 @@ illegal_instruction(int sig) } #endif /* HAVE_SETJMP */ -static __inline__ int +static SDL_INLINE int CPU_haveCPUID(void) { int has_CPUID = 0; @@ -192,7 +192,7 @@ CPUid by definition. But it's nice to be able to prove it. :) */ a = b = c = d = 0 #endif -static __inline__ int +static SDL_INLINE int CPU_getCPUIDFeatures(void) { int features = 0; @@ -206,7 +206,7 @@ CPU_getCPUIDFeatures(void) return features; } -static __inline__ int +static SDL_INLINE int CPU_haveRDTSC(void) { if (CPU_haveCPUID()) { @@ -215,7 +215,7 @@ CPU_haveRDTSC(void) return 0; } -static __inline__ int +static SDL_INLINE int CPU_haveAltiVec(void) { volatile int altivec = 0; @@ -242,7 +242,7 @@ CPU_haveAltiVec(void) return altivec; } -static __inline__ int +static SDL_INLINE int CPU_haveMMX(void) { if (CPU_haveCPUID()) { @@ -251,7 +251,7 @@ CPU_haveMMX(void) return 0; } -static __inline__ int +static SDL_INLINE int CPU_have3DNow(void) { if (CPU_haveCPUID()) { @@ -266,7 +266,7 @@ CPU_have3DNow(void) return 0; } -static __inline__ int +static SDL_INLINE int CPU_haveSSE(void) { if (CPU_haveCPUID()) { @@ -275,7 +275,7 @@ CPU_haveSSE(void) return 0; } -static __inline__ int +static SDL_INLINE int CPU_haveSSE2(void) { if (CPU_haveCPUID()) { @@ -284,7 +284,7 @@ CPU_haveSSE2(void) return 0; } -static __inline__ int +static SDL_INLINE int CPU_haveSSE3(void) { if (CPU_haveCPUID()) { @@ -299,7 +299,7 @@ CPU_haveSSE3(void) return 0; } -static __inline__ int +static SDL_INLINE int CPU_haveSSE41(void) { if (CPU_haveCPUID()) { @@ -314,7 +314,7 @@ CPU_haveSSE41(void) return 0; } -static __inline__ int +static SDL_INLINE int CPU_haveSSE42(void) { if (CPU_haveCPUID()) { diff --git a/src/events/SDL_events.c b/src/events/SDL_events.c index 53ba23fb2c797..99845034af1f6 100644 --- a/src/events/SDL_events.c +++ b/src/events/SDL_events.c @@ -83,7 +83,7 @@ static struct } SDL_EventQ = { NULL, SDL_TRUE }; -static __inline__ SDL_bool +static SDL_INLINE SDL_bool SDL_ShouldPollJoystick() { #if !SDL_JOYSTICK_DISABLED diff --git a/src/joystick/linux/SDL_sysjoystick.c b/src/joystick/linux/SDL_sysjoystick.c index 23a5a4c98060b..72fa52cad3dc4 100644 --- a/src/joystick/linux/SDL_sysjoystick.c +++ b/src/joystick/linux/SDL_sysjoystick.c @@ -617,7 +617,7 @@ SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick) return !joystick->closed && (joystick->hwdata->item != NULL); } -static __inline__ void +static SDL_INLINE void HandleHat(SDL_Joystick * stick, Uint8 hat, int axis, int value) { struct hwdata_hat *the_hat; @@ -643,14 +643,14 @@ HandleHat(SDL_Joystick * stick, Uint8 hat, int axis, int value) } } -static __inline__ void +static SDL_INLINE void HandleBall(SDL_Joystick * stick, Uint8 ball, int axis, int value) { stick->hwdata->balls[ball].axis[axis] += value; } -static __inline__ int +static SDL_INLINE int AxisCorrect(SDL_Joystick * joystick, int which, int value) { struct axis_correct *correct; @@ -679,7 +679,7 @@ AxisCorrect(SDL_Joystick * joystick, int which, int value) return value; } -static __inline__ void +static SDL_INLINE void PollAllValues(SDL_Joystick * joystick) { struct input_absinfo absinfo; @@ -717,7 +717,7 @@ PollAllValues(SDL_Joystick * joystick) } } -static __inline__ void +static SDL_INLINE void HandleInputEvents(SDL_Joystick * joystick) { struct input_event events[32]; diff --git a/src/joystick/psp/SDL_sysjoystick.c b/src/joystick/psp/SDL_sysjoystick.c index d6ca6989eb7eb..b953372d6405f 100644 --- a/src/joystick/psp/SDL_sysjoystick.c +++ b/src/joystick/psp/SDL_sysjoystick.c @@ -60,7 +60,7 @@ static point c = { 78, 32767 }; static point d = { 128, 32767 }; /* simple linear interpolation between two points */ -static __inline__ void lerp (point *dest, point *a, point *b, float t) +static SDL_INLINE void lerp (point *dest, point *a, point *b, float t) { dest->x = a->x + (b->x - a->x)*t; dest->y = a->y + (b->y - a->y)*t; diff --git a/src/render/opengles/SDL_render_gles.c b/src/render/opengles/SDL_render_gles.c index b3ce7909670e2..3be1998d8557d 100644 --- a/src/render/opengles/SDL_render_gles.c +++ b/src/render/opengles/SDL_render_gles.c @@ -414,7 +414,7 @@ GLES_WindowEvent(SDL_Renderer * renderer, const SDL_WindowEvent *event) } } -static __inline__ int +static SDL_INLINE int power_of_2(int input) { int value = 1; diff --git a/src/video/SDL_blit_copy.c b/src/video/SDL_blit_copy.c index 6d286c31f1fe5..80519e099e8e2 100644 --- a/src/video/SDL_blit_copy.c +++ b/src/video/SDL_blit_copy.c @@ -27,7 +27,7 @@ #ifdef __SSE__ /* This assumes 16-byte aligned src and dst */ -static __inline__ void +static SDL_INLINE void SDL_memcpySSE(Uint8 * dst, const Uint8 * src, int len) { int i; @@ -56,7 +56,7 @@ SDL_memcpySSE(Uint8 * dst, const Uint8 * src, int len) #ifdef _MSC_VER #pragma warning(disable:4799) #endif -static __inline__ void +static SDL_INLINE void SDL_memcpyMMX(Uint8 * dst, const Uint8 * src, int len) { const int remain = (len & 63); diff --git a/src/video/SDL_surface.c b/src/video/SDL_surface.c index 8418bc302d44f..d4c852a16c813 100644 --- a/src/video/SDL_surface.c +++ b/src/video/SDL_surface.c @@ -951,7 +951,7 @@ SDL_ConvertSurfaceFormat(SDL_Surface * surface, Uint32 pixel_format, /* * Create a surface on the stack for quick blit operations */ -static __inline__ SDL_bool +static SDL_INLINE SDL_bool SDL_CreateSurfaceOnStack(int width, int height, Uint32 pixel_format, void * pixels, int pitch, SDL_Surface * surface, SDL_PixelFormat * format, SDL_BlitMap * blitmap) diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c index a2078a7af6573..201ba535d7ffa 100644 --- a/src/video/SDL_video.c +++ b/src/video/SDL_video.c @@ -2382,7 +2382,7 @@ SDL_GL_UnloadLibrary(void) } } -static __inline__ SDL_bool +static SDL_INLINE SDL_bool isAtLeastGL3(const char *verstr) { return ( verstr && (SDL_atoi(verstr) >= 3) ); diff --git a/src/video/bwindow/SDL_bframebuffer.cc b/src/video/bwindow/SDL_bframebuffer.cc index 6e7f8c3f2469d..69f4a43a1d9f5 100644 --- a/src/video/bwindow/SDL_bframebuffer.cc +++ b/src/video/bwindow/SDL_bframebuffer.cc @@ -37,11 +37,11 @@ extern "C" { int32 BE_UpdateOnce(SDL_Window *window); -static inline SDL_BWin *_ToBeWin(SDL_Window *window) { +static SDL_INLINE SDL_BWin *_ToBeWin(SDL_Window *window) { return ((SDL_BWin*)(window->driverdata)); } -static inline SDL_BApp *_GetBeApp() { +static SDL_INLINE SDL_BApp *_GetBeApp() { return ((SDL_BApp*)be_app); } diff --git a/src/video/bwindow/SDL_bmodes.cc b/src/video/bwindow/SDL_bmodes.cc index 41894fb788ee1..44e19dc7ea37c 100644 --- a/src/video/bwindow/SDL_bmodes.cc +++ b/src/video/bwindow/SDL_bmodes.cc @@ -48,15 +48,15 @@ typedef struct SDL_DisplayModeData { }; #endif -static inline SDL_BWin *_ToBeWin(SDL_Window *window) { +static SDL_INLINE SDL_BWin *_ToBeWin(SDL_Window *window) { return ((SDL_BWin*)(window->driverdata)); } -static inline SDL_BApp *_GetBeApp() { +static SDL_INLINE SDL_BApp *_GetBeApp() { return ((SDL_BApp*)be_app); } -static inline display_mode * _ExtractBMode(SDL_DisplayMode *mode) { +static SDL_INLINE display_mode * _ExtractBMode(SDL_DisplayMode *mode) { #if WRAP_BMODE return ((SDL_DisplayModeData*)mode->driverdata)->bmode; #else diff --git a/src/video/bwindow/SDL_bopengl.cc b/src/video/bwindow/SDL_bopengl.cc index 5acefe2cd86af..13b90ad97705b 100644 --- a/src/video/bwindow/SDL_bopengl.cc +++ b/src/video/bwindow/SDL_bopengl.cc @@ -37,11 +37,11 @@ extern "C" { #define BGL_FLAGS BGL_RGB | BGL_DOUBLE -static inline SDL_BWin *_ToBeWin(SDL_Window *window) { +static SDL_INLINE SDL_BWin *_ToBeWin(SDL_Window *window) { return ((SDL_BWin*)(window->driverdata)); } -static inline SDL_BApp *_GetBeApp() { +static SDL_INLINE SDL_BApp *_GetBeApp() { return ((SDL_BApp*)be_app); } diff --git a/src/video/bwindow/SDL_bwindow.cc b/src/video/bwindow/SDL_bwindow.cc index c6eb3aa1ae186..c898be6ba26b6 100644 --- a/src/video/bwindow/SDL_bwindow.cc +++ b/src/video/bwindow/SDL_bwindow.cc @@ -31,11 +31,11 @@ extern "C" { #endif -static inline SDL_BWin *_ToBeWin(SDL_Window *window) { +static SDL_INLINE SDL_BWin *_ToBeWin(SDL_Window *window) { return ((SDL_BWin*)(window->driverdata)); } -static inline SDL_BApp *_GetBeApp() { +static SDL_INLINE SDL_BApp *_GetBeApp() { return ((SDL_BApp*)be_app); } diff --git a/src/video/directfb/SDL_DirectFB_render.c b/src/video/directfb/SDL_DirectFB_render.c index 3e8ba475969df..219f52070aeb6 100644 --- a/src/video/directfb/SDL_DirectFB_render.c +++ b/src/video/directfb/SDL_DirectFB_render.c @@ -167,7 +167,7 @@ typedef struct #endif } DirectFB_TextureData; -static __inline__ void +static SDL_INLINE void SDLtoDFBRect(const SDL_Rect * sr, DFBRectangle * dr) { dr->x = sr->x; @@ -175,7 +175,7 @@ SDLtoDFBRect(const SDL_Rect * sr, DFBRectangle * dr) dr->h = sr->h; dr->w = sr->w; } -static __inline__ void +static SDL_INLINE void SDLtoDFBRect_Float(const SDL_FRect * sr, DFBRectangle * dr) { dr->x = sr->x; @@ -211,7 +211,7 @@ TextureHasAlpha(DirectFB_TextureData * data) #endif } -static inline IDirectFBSurface *get_dfb_surface(SDL_Window *window) +static SDL_INLINE IDirectFBSurface *get_dfb_surface(SDL_Window *window) { SDL_SysWMinfo wm_info; SDL_memset(&wm_info, 0, sizeof(SDL_SysWMinfo)); @@ -222,7 +222,7 @@ static inline IDirectFBSurface *get_dfb_surface(SDL_Window *window) return wm_info.info.dfb.surface; } -static inline IDirectFBWindow *get_dfb_window(SDL_Window *window) +static SDL_INLINE IDirectFBWindow *get_dfb_window(SDL_Window *window) { SDL_SysWMinfo wm_info; SDL_memset(&wm_info, 0, sizeof(SDL_SysWMinfo)); diff --git a/src/video/directfb/SDL_DirectFB_video.h b/src/video/directfb/SDL_DirectFB_video.h index c3630fd8f5299..b40bac0d538cd 100644 --- a/src/video/directfb/SDL_DirectFB_video.h +++ b/src/video/directfb/SDL_DirectFB_video.h @@ -88,7 +88,7 @@ #define SDL_DFB_DEBUG(x...) SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, x) -static inline DFBResult sdl_dfb_check(DFBResult ret, const char *src_file, int src_line) { +static SDL_INLINE DFBResult sdl_dfb_check(DFBResult ret, const char *src_file, int src_line) { if (ret != DFB_OK) { SDL_DFB_LOG("%s (%d):%s", src_file, src_line, DirectFBErrorString (ret) ); SDL_SetError("%s:%s", SDL_DFB_CONTEXT, DirectFBErrorString (ret) ); diff --git a/src/video/x11/SDL_x11messagebox.c b/src/video/x11/SDL_x11messagebox.c index 0d0ffb75e50d2..81c1480050de0 100644 --- a/src/video/x11/SDL_x11messagebox.c +++ b/src/video/x11/SDL_x11messagebox.c @@ -112,7 +112,7 @@ typedef struct SDL_MessageBoxDataX11 } SDL_MessageBoxDataX11; /* Maximum helper for ints. */ -static __inline__ int +static SDL_INLINE int IntMax( int a, int b ) { return ( a > b ) ? a : b;