summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--config/include-Makefile.am2
-rw-r--r--configure.ac15
-rw-r--r--m4/warnings.m438
4 files changed, 55 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 8b078deaa..21a68f3ed 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,3 +49,4 @@ config/ltmain.sh
# util-linux specific macros
!m4/ul.m4
+!m4/warnings.m4
diff --git a/config/include-Makefile.am b/config/include-Makefile.am
index 9c769a9dd..4983b3c19 100644
--- a/config/include-Makefile.am
+++ b/config/include-Makefile.am
@@ -2,7 +2,7 @@ AM_CPPFLAGS = \
-include $(top_builddir)/config.h \
-I$(top_srcdir)/include \
-DLOCALEDIR=\"$(localedir)\"
-AM_CFLAGS = -fsigned-char
+AM_CFLAGS = -fsigned-char $(WARN_CFLAGS)
AM_LDFLAGS =
# Automake (at least up to 1.10) mishandles dist_man_MANS inside conditionals.
diff --git a/configure.ac b/configure.ac
index 74b3ad303..2280e7e51 100644
--- a/configure.ac
+++ b/configure.ac
@@ -81,6 +81,21 @@ AC_C_CONST
AC_C_VOLATILE
AC_C_BIGENDIAN
+dnl Compiler warnings
+UL_WARN_ADD([-Wextra])
+UL_WARN_ADD([-Wno-missing-field-initializers])
+UL_WARN_ADD([-Wsign-compare])
+UL_WARN_ADD([-Wtype-limits])
+UL_WARN_ADD([-Wuninitialized])
+UL_WARN_ADD([-Werror=sequence-point])
+UL_WARN_ADD([-Wunused-parameter])
+UL_WARN_ADD([-fno-common])
+UL_WARN_ADD([-Wmissing-parameter-type])
+UL_WARN_ADD([-Wunused-result])
+UL_WARN_ADD([-Wunused-but-set-parameter])
+UL_WARN_ADD([-Wunused-but-set-variable])
+AC_SUBST([WARN_CFLAGS])
+
dnl libtool-2
LT_INIT
diff --git a/m4/warnings.m4 b/m4/warnings.m4
new file mode 100644
index 000000000..33160a960
--- /dev/null
+++ b/m4/warnings.m4
@@ -0,0 +1,38 @@
+# warnings.m4 serial 5
+dnl Copyright (C) 2008-2011 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Simon Josefsson
+dnl -- derivated from coreutils
+
+# UL_AS_VAR_APPEND(VAR, VALUE)
+# ----------------------------
+# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it.
+m4_ifdef([AS_VAR_APPEND],
+[m4_copy([AS_VAR_APPEND], [UL_AS_VAR_APPEND])],
+[m4_define([UL_AS_VAR_APPEND],
+[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])])
+
+# UL_WARN_ADD(PARAMETER, [VARIABLE = WARN_CFLAGS])
+# ------------------------------------------------
+# Adds parameter to WARN_CFLAGS if the compiler supports it. For example,
+# UL_WARN_ADD([-Wparentheses]).
+AC_DEFUN([UL_WARN_ADD],
+dnl FIXME: ul_Warn must be used unquoted until we can assume
+dnl autoconf 2.64 or newer.
+[AS_VAR_PUSHDEF([ul_Warn], [ul_cv_warn_$1])dnl
+AC_CACHE_CHECK([whether compiler handles $1], m4_defn([ul_Warn]), [
+ ul_save_CPPFLAGS="$CPPFLAGS"
+ CPPFLAGS="${CPPFLAGS} $1"
+ AC_PREPROC_IFELSE([AC_LANG_PROGRAM([])],
+ [AS_VAR_SET(ul_Warn, [yes])],
+ [AS_VAR_SET(ul_Warn, [no])])
+ CPPFLAGS="$ul_save_CPPFLAGS"
+])
+AS_VAR_IF(ul_Warn, [yes],
+ [UL_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])])
+AS_VAR_POPDEF([ul_Warn])dnl
+m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])], [])])dnl
+])