Only make compiler warnings fatal with --enable-debug

While in theory I like the idea of compiler warnings always being
fatal.  In practice this causes problems when small harmless errors
cause build failures for end users.  To handle this I've updated
the build system such that -Werror is only used when --enable-debug
is passed to configure.  This is how I always build when developing
so I'll catch all build warnings and end users will not get stuck
by minor issues.
This commit is contained in:
Brian Behlendorf 2010-06-30 17:05:36 -07:00
parent 6801b7154c
commit c950d1480d
9 changed files with 89 additions and 34 deletions

View File

@ -140,6 +140,7 @@ CFLAGS = @CFLAGS@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@ CYGPATH_W = @CYGPATH_W@
DEBUG_CFLAGS = @DEBUG_CFLAGS@
DEFS = @DEFS@ DEFS = @DEFS@
DEPDIR = @DEPDIR@ DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@ DSYMUTIL = @DSYMUTIL@

View File

@ -114,6 +114,7 @@ CFLAGS = @CFLAGS@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@ CYGPATH_W = @CYGPATH_W@
DEBUG_CFLAGS = @DEBUG_CFLAGS@
DEFS = @DEFS@ DEFS = @DEFS@
DEPDIR = @DEPDIR@ DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@ DSYMUTIL = @DSYMUTIL@
@ -236,8 +237,8 @@ top_srcdir = @top_srcdir@
DEFAULT_INCLUDES = -include ${top_srcdir}/spl_config.h \ DEFAULT_INCLUDES = -include ${top_srcdir}/spl_config.h \
-I${top_srcdir}/lib -I${top_srcdir}/lib
AM_LIBTOOLFLAGS = --silent AM_LIBTOOLFLAGS = --silent
AM_CFLAGS = -Wall -Wstrict-prototypes -Werror -Wshadow \ AM_CFLAGS = -Wall -Wshadow -Wstrict-prototypes -fno-strict-aliasing \
-D__USE_LARGEFILE64 -D__USE_LARGEFILE64 ${DEBUG_CFLAGS}
spl_SOURCES = spl.c spl_SOURCES = spl.c
splat_SOURCES = splat.c splat_SOURCES = splat.c
splat_LDFLAGS = $(top_builddir)/lib/libcommon.la splat_LDFLAGS = $(top_builddir)/lib/libcommon.la

View File

@ -9,5 +9,5 @@
DEFAULT_INCLUDES = -include ${top_srcdir}/spl_config.h DEFAULT_INCLUDES = -include ${top_srcdir}/spl_config.h
AM_LIBTOOLFLAGS = --silent AM_LIBTOOLFLAGS = --silent
AM_CFLAGS = -Wall -Wstrict-prototypes -Werror -Wshadow AM_CFLAGS = -Wall -Wshadow -Wstrict-prototypes -fno-strict-aliasing
AM_CFLAGS += -D__USE_LARGEFILE64 AM_CFLAGS += -D__USE_LARGEFILE64 ${DEBUG_CFLAGS}

View File

@ -12,7 +12,7 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [
dnl # -Wall -fno-strict-aliasing -Wstrict-prototypes and other dnl # -Wall -fno-strict-aliasing -Wstrict-prototypes and other
dnl # compiler options are added by the kernel build system. dnl # compiler options are added by the kernel build system.
abs_srcdir=`readlink -f ${srcdir}` abs_srcdir=`readlink -f ${srcdir}`
KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes -Werror" KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes"
KERNELCPPFLAGS="$KERNELCPPFLAGS -I${abs_srcdir}/include" KERNELCPPFLAGS="$KERNELCPPFLAGS -I${abs_srcdir}/include"
KERNELCPPFLAGS="$KERNELCPPFLAGS -include ${abs_srcdir}/spl_config.h" KERNELCPPFLAGS="$KERNELCPPFLAGS -include ${abs_srcdir}/spl_config.h"
@ -235,6 +235,7 @@ dnl # Enable if the SPL should be compiled with internal debugging enabled.
dnl # By default this support is disabled. dnl # By default this support is disabled.
dnl # dnl #
AC_DEFUN([SPL_AC_DEBUG], [ AC_DEFUN([SPL_AC_DEBUG], [
AC_MSG_CHECKING([whether debugging is enabled])
AC_ARG_ENABLE([debug], AC_ARG_ENABLE([debug],
[AS_HELP_STRING([--enable-debug], [AS_HELP_STRING([--enable-debug],
[Enable generic debug support @<:@default=no@:>@])], [Enable generic debug support @<:@default=no@:>@])],
@ -242,10 +243,18 @@ AC_DEFUN([SPL_AC_DEBUG], [
[enable_debug=no]) [enable_debug=no])
AS_IF([test "x$enable_debug" = xyes], AS_IF([test "x$enable_debug" = xyes],
[KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG"], [
[KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"]) AC_DEFINE([DEBUG], [1], [Define to 1 to enable debug])
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror"
DEBUG_CFLAGS="-DDEBUG -Werror"
],
[
AC_DEFINE([NDEBUG], [1], [Define to 1 to enable debug])
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
DEBUG_CFLAGS="-DNDEBUG"
])
AC_MSG_CHECKING([whether debugging is enabled]) AC_SUBST(DEBUG_CFLAGS)
AC_MSG_RESULT([$enable_debug]) AC_MSG_RESULT([$enable_debug])
]) ])

83
configure vendored
View File

@ -791,6 +791,7 @@ CONFIG_KERNEL_FALSE
CONFIG_KERNEL_TRUE CONFIG_KERNEL_TRUE
CONFIG_USER_FALSE CONFIG_USER_FALSE
CONFIG_USER_TRUE CONFIG_USER_TRUE
DEBUG_CFLAGS
KERNELCPPFLAGS KERNELCPPFLAGS
KERNELMAKE_PARAMS KERNELMAKE_PARAMS
LINUX_SYMBOLS LINUX_SYMBOLS
@ -4759,13 +4760,13 @@ if test "${lt_cv_nm_interface+set}" = set; then
else else
lt_cv_nm_interface="BSD nm" lt_cv_nm_interface="BSD nm"
echo "int some_variable = 0;" > conftest.$ac_ext echo "int some_variable = 0;" > conftest.$ac_ext
(eval echo "\"\$as_me:4762: $ac_compile\"" >&5) (eval echo "\"\$as_me:4763: $ac_compile\"" >&5)
(eval "$ac_compile" 2>conftest.err) (eval "$ac_compile" 2>conftest.err)
cat conftest.err >&5 cat conftest.err >&5
(eval echo "\"\$as_me:4765: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval echo "\"\$as_me:4766: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
cat conftest.err >&5 cat conftest.err >&5
(eval echo "\"\$as_me:4768: output\"" >&5) (eval echo "\"\$as_me:4769: output\"" >&5)
cat conftest.out >&5 cat conftest.out >&5
if $GREP 'External.*some_variable' conftest.out > /dev/null; then if $GREP 'External.*some_variable' conftest.out > /dev/null; then
lt_cv_nm_interface="MS dumpbin" lt_cv_nm_interface="MS dumpbin"
@ -5971,7 +5972,7 @@ ia64-*-hpux*)
;; ;;
*-*-irix6*) *-*-irix6*)
# Find out which ABI we are using. # Find out which ABI we are using.
echo '#line 5974 "configure"' > conftest.$ac_ext echo '#line 5975 "configure"' > conftest.$ac_ext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>&5 (eval $ac_compile) 2>&5
ac_status=$? ac_status=$?
@ -7824,11 +7825,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'` -e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:7827: $lt_compile\"" >&5) (eval echo "\"\$as_me:7828: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err) (eval "$lt_compile" 2>conftest.err)
ac_status=$? ac_status=$?
cat conftest.err >&5 cat conftest.err >&5
echo "$as_me:7831: \$? = $ac_status" >&5 echo "$as_me:7832: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized # The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output. # So say no if there are warnings other than the usual output.
@ -8163,11 +8164,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'` -e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:8166: $lt_compile\"" >&5) (eval echo "\"\$as_me:8167: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err) (eval "$lt_compile" 2>conftest.err)
ac_status=$? ac_status=$?
cat conftest.err >&5 cat conftest.err >&5
echo "$as_me:8170: \$? = $ac_status" >&5 echo "$as_me:8171: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized # The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output. # So say no if there are warnings other than the usual output.
@ -8268,11 +8269,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'` -e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:8271: $lt_compile\"" >&5) (eval echo "\"\$as_me:8272: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err) (eval "$lt_compile" 2>out/conftest.err)
ac_status=$? ac_status=$?
cat out/conftest.err >&5 cat out/conftest.err >&5
echo "$as_me:8275: \$? = $ac_status" >&5 echo "$as_me:8276: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext if (exit $ac_status) && test -s out/conftest2.$ac_objext
then then
# The compiler can only warn and ignore the option if not recognized # The compiler can only warn and ignore the option if not recognized
@ -8323,11 +8324,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'` -e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:8326: $lt_compile\"" >&5) (eval echo "\"\$as_me:8327: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err) (eval "$lt_compile" 2>out/conftest.err)
ac_status=$? ac_status=$?
cat out/conftest.err >&5 cat out/conftest.err >&5
echo "$as_me:8330: \$? = $ac_status" >&5 echo "$as_me:8331: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext if (exit $ac_status) && test -s out/conftest2.$ac_objext
then then
# The compiler can only warn and ignore the option if not recognized # The compiler can only warn and ignore the option if not recognized
@ -11126,7 +11127,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11129 "configure" #line 11130 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
@ -11222,7 +11223,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11225 "configure" #line 11226 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
@ -11605,7 +11606,7 @@ $as_echo "$LINUX_SYMBOLS" >&6; }
abs_srcdir=`readlink -f ${srcdir}` abs_srcdir=`readlink -f ${srcdir}`
KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes -Werror" KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes"
KERNELCPPFLAGS="$KERNELCPPFLAGS -I${abs_srcdir}/include" KERNELCPPFLAGS="$KERNELCPPFLAGS -I${abs_srcdir}/include"
KERNELCPPFLAGS="$KERNELCPPFLAGS -include ${abs_srcdir}/spl_config.h" KERNELCPPFLAGS="$KERNELCPPFLAGS -include ${abs_srcdir}/spl_config.h"
@ -11617,6 +11618,8 @@ $as_echo "$LINUX_SYMBOLS" >&6; }
{ $as_echo "$as_me:$LINENO: checking whether debugging is enabled" >&5
$as_echo_n "checking whether debugging is enabled... " >&6; }
# Check whether --enable-debug was given. # Check whether --enable-debug was given.
if test "${enable_debug+set}" = set; then if test "${enable_debug+set}" = set; then
enableval=$enable_debug; enableval=$enable_debug;
@ -11626,14 +11629,29 @@ fi
if test "x$enable_debug" = xyes; then if test "x$enable_debug" = xyes; then
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG"
cat >>confdefs.h <<\_ACEOF
#define DEBUG 1
_ACEOF
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror"
DEBUG_CFLAGS="-DDEBUG -Werror"
else else
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
cat >>confdefs.h <<\_ACEOF
#define NDEBUG 1
_ACEOF
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
DEBUG_CFLAGS="-DNDEBUG"
fi fi
{ $as_echo "$as_me:$LINENO: checking whether debugging is enabled" >&5
$as_echo_n "checking whether debugging is enabled... " >&6; }
{ $as_echo "$as_me:$LINENO: result: $enable_debug" >&5 { $as_echo "$as_me:$LINENO: result: $enable_debug" >&5
$as_echo "$enable_debug" >&6; } $as_echo "$enable_debug" >&6; }
@ -15068,7 +15086,7 @@ $as_echo "$LINUX_SYMBOLS" >&6; }
abs_srcdir=`readlink -f ${srcdir}` abs_srcdir=`readlink -f ${srcdir}`
KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes -Werror" KERNELCPPFLAGS="$KERNELCPPFLAGS -Wstrict-prototypes"
KERNELCPPFLAGS="$KERNELCPPFLAGS -I${abs_srcdir}/include" KERNELCPPFLAGS="$KERNELCPPFLAGS -I${abs_srcdir}/include"
KERNELCPPFLAGS="$KERNELCPPFLAGS -include ${abs_srcdir}/spl_config.h" KERNELCPPFLAGS="$KERNELCPPFLAGS -include ${abs_srcdir}/spl_config.h"
@ -15080,6 +15098,8 @@ $as_echo "$LINUX_SYMBOLS" >&6; }
{ $as_echo "$as_me:$LINENO: checking whether debugging is enabled" >&5
$as_echo_n "checking whether debugging is enabled... " >&6; }
# Check whether --enable-debug was given. # Check whether --enable-debug was given.
if test "${enable_debug+set}" = set; then if test "${enable_debug+set}" = set; then
enableval=$enable_debug; enableval=$enable_debug;
@ -15089,14 +15109,29 @@ fi
if test "x$enable_debug" = xyes; then if test "x$enable_debug" = xyes; then
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG"
cat >>confdefs.h <<\_ACEOF
#define DEBUG 1
_ACEOF
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror"
DEBUG_CFLAGS="-DDEBUG -Werror"
else else
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
cat >>confdefs.h <<\_ACEOF
#define NDEBUG 1
_ACEOF
KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG"
DEBUG_CFLAGS="-DNDEBUG"
fi fi
{ $as_echo "$as_me:$LINENO: checking whether debugging is enabled" >&5
$as_echo_n "checking whether debugging is enabled... " >&6; }
{ $as_echo "$as_me:$LINENO: result: $enable_debug" >&5 { $as_echo "$as_me:$LINENO: result: $enable_debug" >&5
$as_echo "$enable_debug" >&6; } $as_echo "$enable_debug" >&6; }

View File

@ -73,6 +73,7 @@ CFLAGS = @CFLAGS@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@ CYGPATH_W = @CYGPATH_W@
DEBUG_CFLAGS = @DEBUG_CFLAGS@
DEFS = @DEFS@ DEFS = @DEFS@
DEPDIR = @DEPDIR@ DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@ DSYMUTIL = @DSYMUTIL@

View File

@ -106,6 +106,7 @@ CFLAGS = @CFLAGS@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@ CYGPATH_W = @CYGPATH_W@
DEBUG_CFLAGS = @DEBUG_CFLAGS@
DEFS = @DEFS@ DEFS = @DEFS@
DEPDIR = @DEPDIR@ DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@ DSYMUTIL = @DSYMUTIL@
@ -227,8 +228,8 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
DEFAULT_INCLUDES = -include ${top_srcdir}/spl_config.h DEFAULT_INCLUDES = -include ${top_srcdir}/spl_config.h
AM_LIBTOOLFLAGS = --silent AM_LIBTOOLFLAGS = --silent
AM_CFLAGS = -Wall -Wstrict-prototypes -Werror -Wshadow \ AM_CFLAGS = -Wall -Wshadow -Wstrict-prototypes -fno-strict-aliasing \
-D__USE_LARGEFILE64 -D__USE_LARGEFILE64 ${DEBUG_CFLAGS}
noinst_LTLIBRARIES = libcommon.la noinst_LTLIBRARIES = libcommon.la
libcommon_la_SOURCES = list.c libcommon_la_SOURCES = list.c
EXTRA_DIST = list.h EXTRA_DIST = list.h

View File

@ -68,6 +68,7 @@ CFLAGS = @CFLAGS@
CPP = @CPP@ CPP = @CPP@
CPPFLAGS = @CPPFLAGS@ CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@ CYGPATH_W = @CYGPATH_W@
DEBUG_CFLAGS = @DEBUG_CFLAGS@
DEFS = @DEFS@ DEFS = @DEFS@
DEPDIR = @DEPDIR@ DEPDIR = @DEPDIR@
DSYMUTIL = @DSYMUTIL@ DSYMUTIL = @DSYMUTIL@

View File

@ -3,6 +3,9 @@
/* Atomic types use spinlocks */ /* Atomic types use spinlocks */
#undef ATOMIC_SPINLOCK #undef ATOMIC_SPINLOCK
/* Define to 1 to enable debug */
#undef DEBUG
/* Define to 1 to enable basic kmem accounting */ /* Define to 1 to enable basic kmem accounting */
#undef DEBUG_KMEM #undef DEBUG_KMEM
@ -208,6 +211,9 @@
*/ */
#undef LT_OBJDIR #undef LT_OBJDIR
/* Define to 1 to enable debug */
#undef NDEBUG
/* get_zone_counts() is needed */ /* get_zone_counts() is needed */
#undef NEED_GET_ZONE_COUNTS #undef NEED_GET_ZONE_COUNTS