ソースを参照

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.
Sam Lantinga 11 年 前
コミット
08fa8da77c

+ 13 - 26
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__)

+ 2 - 2
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);

+ 1 - 1
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)
 {

+ 5 - 5
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) {

+ 3 - 3
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);

+ 1 - 1
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));

+ 11 - 11
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 @@ done:
     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()) {

+ 1 - 1
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

+ 5 - 5
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];

+ 1 - 1
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;

+ 1 - 1
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;

+ 2 - 2
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);

+ 1 - 1
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)

+ 1 - 1
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) );

+ 2 - 2
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);
 }
 

+ 3 - 3
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

+ 2 - 2
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);
 }
 

+ 2 - 2
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);
 }
 

+ 4 - 4
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));

+ 1 - 1
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) );

+ 1 - 1
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;