From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27199 invoked by alias); 26 Aug 2010 18:18:05 -0000 Received: (qmail 27187 invoked by uid 22791); 26 Aug 2010 18:18:03 -0000 X-SWARE-Spam-Status: No, hits=0.1 required=5.0 tests=AWL,BAYES_00,TW_KG,T_RP_MATCHES_RCVD,URIBL_BLACK X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 26 Aug 2010 18:17:57 +0000 Received: (qmail 26540 invoked from network); 26 Aug 2010 18:17:54 -0000 Received: from unknown (HELO orlando.localnet) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 26 Aug 2010 18:17:54 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: build gdbserver with -Werror by default Date: Thu, 26 Aug 2010 18:18:00 -0000 User-Agent: KMail/1.13.2 (Linux/2.6.33-29-realtime; KDE/4.4.2; x86_64; ; ) MIME-Version: 1.0 Content-Type: Text/Plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Message-Id: <201008261917.51934.pedro@codesourcery.com> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2010-08/txt/msg00446.txt.bz2 I've now applied this to build gdbserver with -Werror by default (on gcc), and the usual --disable-werror/--enable-werror commands. Tested on by building on x86_86-unknown-linux-gnu with and without --disable-werror, and observing that -Werror is included passed to gcc appropriately. This is mostly copied from gdb/configure.ac, and I brought the warning flags GDB uses, except for the -Wno-FOO settings, since gdbserver was already building with -Wall (hence, doesn't need to disable specific warnings -Wall implies). This may break the build on some targets, which just means that the target specific code should be fixed to be warning free. -- Pedro Alves 2010-08-26 Pedro Alves * Makefile.in (WARN_CFLAGS): Get it from configure. (WERROR_CFLAGS): New. (INTERNAL_CFLAGS): Add WERROR_CFLAGS. * configure.ac: Introduce --enable-werror, which adds -Werror to the compiler command line. Enabled by default. Disable with --disable-werror. Add -Wdeclaration-after-statement Wpointer-arith and -Wformat-nonliteral to warning flags. * configure: Regenerate. --- gdb/gdbserver/Makefile.in | 5 +-- gdb/gdbserver/configure | 69 +++++++++++++++++++++++++++++++++++++++++++++ gdb/gdbserver/configure.ac | 42 +++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 2 deletions(-) Index: src/gdb/gdbserver/Makefile.in =================================================================== --- src.orig/gdb/gdbserver/Makefile.in 2010-07-31 08:53:16.000000000 +0100 +++ src/gdb/gdbserver/Makefile.in 2010-08-26 18:08:58.000000000 +0100 @@ -86,14 +86,15 @@ INCLUDE_CFLAGS = -I. -I${srcdir} -I$(src GLOBAL_CFLAGS = ${MT_CFLAGS} ${MH_CFLAGS} #PROFILE_CFLAGS = -pg -WARN_CFLAGS = -Wall +WARN_CFLAGS = @WARN_CFLAGS@ +WERROR_CFLAGS = @WERROR_CFLAGS@ # CFLAGS is specifically reserved for setting from the command line # when running make. I.E. "make CFLAGS=-Wmissing-prototypes". CFLAGS = @CFLAGS@ # INTERNAL_CFLAGS is the aggregate of all other *CFLAGS macros. -INTERNAL_CFLAGS = $(WARN_CFLAGS) ${CFLAGS} ${GLOBAL_CFLAGS} \ +INTERNAL_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) ${CFLAGS} ${GLOBAL_CFLAGS} \ ${PROFILE_CFLAGS} ${INCLUDE_CFLAGS} # LDFLAGS is specifically reserved for setting from the command line Index: src/gdb/gdbserver/configure.ac =================================================================== --- src.orig/gdb/gdbserver/configure.ac 2010-07-19 15:47:22.000000000 +0100 +++ src/gdb/gdbserver/configure.ac 2010-08-26 18:55:45.000000000 +0100 @@ -93,6 +93,48 @@ fi AC_SUBST(ustlibs) AC_SUBST(ustinc) +AC_ARG_ENABLE(werror, + AS_HELP_STRING([--enable-werror], [treat compile warnings as errors]), + [case "${enableval}" in + yes | y) ERROR_ON_WARNING="yes" ;; + no | n) ERROR_ON_WARNING="no" ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;; + esac]) + +# Enable -Werror by default when using gcc +if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then + ERROR_ON_WARNING=yes +fi + +WERROR_CFLAGS="" +if test "${ERROR_ON_WARNING}" = yes ; then + WERROR_CFLAGS="-Werror" +fi + +build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \ +-Wformat-nonliteral " + +WARN_CFLAGS="" +if test "x$GCC" = xyes +then + AC_MSG_CHECKING(compiler warning flags) + # Separate out the -Werror flag as some files just cannot be + # compiled with it enabled. + for w in ${build_warnings}; do + case $w in + -Werr*) WERROR_CFLAGS=-Werror ;; + *) # Check that GCC accepts it + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $w" + AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",) + CFLAGS="$saved_CFLAGS" + esac + done + AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS}) +fi +AC_SUBST(WARN_CFLAGS) +AC_SUBST(WERROR_CFLAGS) + dnl dladdr is glibc-specific. It is used by thread-db.c but only for dnl debugging messages. It lives in -ldl which is handled below so we don't dnl use AC_CHECK_LIB (or AC_SEARCH_LIBS) here. Instead we just temporarily Index: src/gdb/gdbserver/configure =================================================================== --- src.orig/gdb/gdbserver/configure 2010-07-19 15:47:22.000000000 +0100 +++ src/gdb/gdbserver/configure 2010-08-26 18:55:49.000000000 +0100 @@ -601,6 +601,8 @@ RDYNAMIC REPORT_BUGS_TEXI REPORT_BUGS_TO PKGVERSION +WERROR_CFLAGS +WARN_CFLAGS ustinc ustlibs LIBOBJS @@ -673,6 +675,7 @@ enable_option_checking with_ust with_ust_include with_ust_lib +enable_werror with_pkgversion with_bugurl with_libthread_db @@ -1300,6 +1303,12 @@ if test -n "$ac_init_help"; then cat <<\_ACEOF +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-werror treat compile warnings as errors + Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) @@ -3914,6 +3923,66 @@ fi +# Check whether --enable-werror was given. +if test "${enable_werror+set}" = set; then : + enableval=$enable_werror; case "${enableval}" in + yes | y) ERROR_ON_WARNING="yes" ;; + no | n) ERROR_ON_WARNING="no" ;; + *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;; + esac +fi + + +# Enable -Werror by default when using gcc +if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then + ERROR_ON_WARNING=yes +fi + +WERROR_CFLAGS="" +if test "${ERROR_ON_WARNING}" = yes ; then + WERROR_CFLAGS="-Werror" +fi + +build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \ +-Wformat-nonliteral " + +WARN_CFLAGS="" +if test "x$GCC" = xyes +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking compiler warning flags" >&5 +$as_echo_n "checking compiler warning flags... " >&6; } + # Separate out the -Werror flag as some files just cannot be + # compiled with it enabled. + for w in ${build_warnings}; do + case $w in + -Werr*) WERROR_CFLAGS=-Werror ;; + *) # Check that GCC accepts it + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $w" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + WARN_CFLAGS="${WARN_CFLAGS} $w" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$saved_CFLAGS" + esac + done + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5 +$as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; } +fi + + + old_LIBS="$LIBS" LIBS="$LIBS -ldl" for ac_func in dladdr