Try to build with GCC's -Wdeclaration-after-statement.

This will help catch things that'll cause issues on C89 compilers before we
send them on to fail on Buildbot.
This commit is contained in:
Ryan C. Gordon 2016-01-04 22:58:38 -05:00
parent 15bc7aea64
commit 1373e8909a
3 changed files with 92 additions and 12 deletions

View File

@ -334,6 +334,24 @@ set(HAVE_ASSERTIONS ${ASSERTIONS})
# Compiler option evaluation # Compiler option evaluation
if(USE_GCC OR USE_CLANG) if(USE_GCC OR USE_CLANG)
# Check for -Wall first, so later things can override pieces of it.
check_c_compiler_flag(-Wall HAVE_GCC_WALL)
if(HAVE_GCC_WALL)
list(APPEND EXTRA_CFLAGS "-Wall")
if(HAIKU)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-multichar")
endif()
endif()
check_c_compiler_flag(-Wdeclaration-after-statement HAVE_GCC_WDECLARATION_AFTER_STATEMENT)
if(HAVE_GCC_WDECLARATION_AFTER_STATEMENT)
check_c_compiler_flag(-Werror=declaration-after-statement HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT)
if(HAVE_GCC_WERROR_DECLARATION_AFTER_STATEMENT)
list(APPEND EXTRA_CFLAGS "-Werror=declaration-after-statement")
endif()
list(APPEND EXTRA_CFLAGS "-Wdeclaration-after-statement")
endif()
if(DEPENDENCY_TRACKING) if(DEPENDENCY_TRACKING)
check_c_source_compiles(" check_c_source_compiles("
#if !defined(__GNUC__) || __GNUC__ < 3 #if !defined(__GNUC__) || __GNUC__ < 3
@ -375,13 +393,6 @@ if(USE_GCC OR USE_CLANG)
endif() endif()
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
check_c_compiler_flag(-Wall HAVE_GCC_WALL)
if(HAVE_GCC_WALL)
list(APPEND EXTRA_CFLAGS "-Wall")
if(HAIKU)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-multichar")
endif()
endif()
check_c_compiler_flag(-Wshadow HAVE_GCC_WSHADOW) check_c_compiler_flag(-Wshadow HAVE_GCC_WSHADOW)
if(HAVE_GCC_WSHADOW) if(HAVE_GCC_WSHADOW)
list(APPEND EXTRA_CFLAGS "-Wshadow") list(APPEND EXTRA_CFLAGS "-Wshadow")

45
configure vendored
View File

@ -18650,6 +18650,43 @@ $as_echo "$have_gcc_preferred_stack_boundary" >&6; }
fi fi
} }
CheckDeclarationAfterStatement()
{
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC -Wdeclaration-after-statement option" >&5
$as_echo_n "checking for GCC -Wdeclaration-after-statement option... " >&6; }
have_gcc_declaration_after_statement=no
save_CFLAGS="$CFLAGS"
CFLAGS="$save_CFLAGS -Wdeclaration-after-statement -Werror=declaration-after-statement"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
int x = 0;
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
have_gcc_declaration_after_statement=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gcc_declaration_after_statement" >&5
$as_echo "$have_gcc_declaration_after_statement" >&6; }
CFLAGS="$save_CFLAGS"
if test x$have_gcc_declaration_after_statement = xyes; then
EXTRA_CFLAGS="$EXTRA_CFLAGS -Wdeclaration-after-statement -Werror=declaration-after-statement"
fi
}
CheckWarnAll() CheckWarnAll()
{ {
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC -Wall option" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC -Wall option" >&5
@ -22894,6 +22931,8 @@ fi
} }
CheckWarnAll
case "$host" in case "$host" in
*-*-linux*|*-*-uclinux*|*-*-gnu*|*-*-k*bsd*-gnu|*-*-bsdi*|*-*-freebsd*|*-*-dragonfly*|*-*-netbsd*|*-*-openbsd*|*-*-sysv5*|*-*-solaris*|*-*-hpux*|*-*-aix*|*-*-minix*) *-*-linux*|*-*-uclinux*|*-*-gnu*|*-*-k*bsd*-gnu|*-*-bsdi*|*-*-freebsd*|*-*-dragonfly*|*-*-netbsd*|*-*-openbsd*|*-*-sysv5*|*-*-solaris*|*-*-hpux*|*-*-aix*|*-*-minix*)
case "$host" in case "$host" in
@ -22962,6 +23001,7 @@ case "$host" in
*-*-minix*) ARCH=minix ;; *-*-minix*) ARCH=minix ;;
esac esac
CheckVisibilityHidden CheckVisibilityHidden
CheckDeclarationAfterStatement
CheckDummyVideo CheckDummyVideo
CheckDiskAudio CheckDiskAudio
CheckDummyAudio CheckDummyAudio
@ -23392,6 +23432,7 @@ $as_echo "#define SDL_FILESYSTEM_HAIKU 1" >>confdefs.h
ARCH=ios ARCH=ios
CheckVisibilityHidden CheckVisibilityHidden
CheckDeclarationAfterStatement
CheckDummyVideo CheckDummyVideo
CheckDiskAudio CheckDiskAudio
CheckDummyAudio CheckDummyAudio
@ -23461,6 +23502,7 @@ $as_echo "#define SDL_FILESYSTEM_HAIKU 1" >>confdefs.h
EXTRA_CFLAGS="$EXTRA_CFLAGS -DTARGET_API_MAC_OSX" EXTRA_CFLAGS="$EXTRA_CFLAGS -DTARGET_API_MAC_OSX"
CheckVisibilityHidden CheckVisibilityHidden
CheckDeclarationAfterStatement
CheckDummyVideo CheckDummyVideo
CheckDiskAudio CheckDiskAudio
CheckDummyAudio CheckDummyAudio
@ -23581,6 +23623,7 @@ $as_echo "#define SDL_AUDIO_DRIVER_EMSCRIPTEN 1" >>confdefs.h
fi fi
CheckVisibilityHidden CheckVisibilityHidden
CheckDeclarationAfterStatement
CheckDummyVideo CheckDummyVideo
CheckDiskAudio CheckDiskAudio
CheckDummyAudio CheckDummyAudio
@ -23630,8 +23673,6 @@ $as_echo "#define SDL_TIMER_UNIX 1" >>confdefs.h
;; ;;
esac esac
CheckWarnAll
# Verify that we have all the platform specific files we need # Verify that we have all the platform specific files we need
if test x$have_joystick != xyes; then if test x$have_joystick != xyes; then

View File

@ -1124,6 +1124,30 @@ CheckStackBoundary()
fi fi
} }
dnl See if GCC's -Wdeclaration-after-statement is supported.
dnl This lets us catch things that would fail on a C89 compiler when using
dnl a modern GCC.
CheckDeclarationAfterStatement()
{
AC_MSG_CHECKING(for GCC -Wdeclaration-after-statement option)
have_gcc_declaration_after_statement=no
save_CFLAGS="$CFLAGS"
CFLAGS="$save_CFLAGS -Wdeclaration-after-statement -Werror=declaration-after-statement"
AC_TRY_COMPILE([
int x = 0;
],[
],[
have_gcc_declaration_after_statement=yes
])
AC_MSG_RESULT($have_gcc_declaration_after_statement)
CFLAGS="$save_CFLAGS"
if test x$have_gcc_declaration_after_statement = xyes; then
EXTRA_CFLAGS="$EXTRA_CFLAGS -Wdeclaration-after-statement -Werror=declaration-after-statement"
fi
}
dnl See if GCC's -Wall is supported. dnl See if GCC's -Wall is supported.
CheckWarnAll() CheckWarnAll()
{ {
@ -2801,6 +2825,9 @@ AC_HELP_STRING([--enable-rpath], [use an rpath when linking SDL [[default=yes]]]
, enable_rpath=yes) , enable_rpath=yes)
} }
dnl Do this on all platforms, before everything else (other things might want to override it).
CheckWarnAll
dnl Set up the configuration based on the host platform! dnl Set up the configuration based on the host platform!
case "$host" in case "$host" in
*-*-linux*|*-*-uclinux*|*-*-gnu*|*-*-k*bsd*-gnu|*-*-bsdi*|*-*-freebsd*|*-*-dragonfly*|*-*-netbsd*|*-*-openbsd*|*-*-sysv5*|*-*-solaris*|*-*-hpux*|*-*-aix*|*-*-minix*) *-*-linux*|*-*-uclinux*|*-*-gnu*|*-*-k*bsd*-gnu|*-*-bsdi*|*-*-freebsd*|*-*-dragonfly*|*-*-netbsd*|*-*-openbsd*|*-*-sysv5*|*-*-solaris*|*-*-hpux*|*-*-aix*|*-*-minix*)
@ -2870,6 +2897,7 @@ case "$host" in
*-*-minix*) ARCH=minix ;; *-*-minix*) ARCH=minix ;;
esac esac
CheckVisibilityHidden CheckVisibilityHidden
CheckDeclarationAfterStatement
CheckDummyVideo CheckDummyVideo
CheckDiskAudio CheckDiskAudio
CheckDummyAudio CheckDummyAudio
@ -3196,6 +3224,7 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau
ARCH=ios ARCH=ios
CheckVisibilityHidden CheckVisibilityHidden
CheckDeclarationAfterStatement
CheckDummyVideo CheckDummyVideo
CheckDiskAudio CheckDiskAudio
CheckDummyAudio CheckDummyAudio
@ -3265,6 +3294,7 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau
EXTRA_CFLAGS="$EXTRA_CFLAGS -DTARGET_API_MAC_OSX" EXTRA_CFLAGS="$EXTRA_CFLAGS -DTARGET_API_MAC_OSX"
CheckVisibilityHidden CheckVisibilityHidden
CheckDeclarationAfterStatement
CheckDummyVideo CheckDummyVideo
CheckDiskAudio CheckDiskAudio
CheckDummyAudio CheckDummyAudio
@ -3366,6 +3396,7 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau
fi fi
CheckVisibilityHidden CheckVisibilityHidden
CheckDeclarationAfterStatement
CheckDummyVideo CheckDummyVideo
CheckDiskAudio CheckDiskAudio
CheckDummyAudio CheckDummyAudio
@ -3407,9 +3438,6 @@ AC_HELP_STRING([--enable-render-d3d], [enable the Direct3D render driver [[defau
;; ;;
esac esac
dnl Do this on all platforms, after everything else.
CheckWarnAll
# Verify that we have all the platform specific files we need # Verify that we have all the platform specific files we need
if test x$have_joystick != xyes; then if test x$have_joystick != xyes; then