You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
8.8 KiB
232 lines
8.8 KiB
6 years ago
|
commit a4ecc9eb9b15bc51a1dc4726c06d35eaea74e162
|
||
|
Author: Joseph Myers <joseph@codesourcery.com>
|
||
|
Date: Wed Dec 10 01:14:48 2014 +0000
|
||
|
|
||
|
Use -Werror by default, add --disable-werror.
|
||
|
|
||
|
As discussed starting at
|
||
|
<https://sourceware.org/ml/libc-alpha/2014-11/msg00323.html>, this
|
||
|
patch makes the glibc build use -Werror by default to avoid
|
||
|
accidentally adding new warnings to the build. The configure option
|
||
|
--disable-werror can be used to disable this.
|
||
|
|
||
|
-Wno-error=undef is temporarily used because the build isn't clean
|
||
|
regarding -Wundef warnings. The idea is that once the remaining
|
||
|
-Wundef warnings have been cleaned up (in at least one configuration),
|
||
|
-Wno-error=undef will be removed.
|
||
|
|
||
|
I get a clean build and test on x86_64 (GCC 4.9 branch) with this
|
||
|
patch. The expectation is that this may well break the build for some
|
||
|
other configurations, and people seeing such breakage should make
|
||
|
appropriate fixes to fix or suppress the warnings for their
|
||
|
configurations. In some cases that may involve using pragmas as the
|
||
|
right fix (I think that will be right for the -Wno-inline issue for
|
||
|
MIPS I referred to in
|
||
|
<https://sourceware.org/ml/libc-alpha/2012-11/msg00798.html>, for
|
||
|
example), in some cases -Wno-error in sysdeps makefiles (__restore_rt
|
||
|
in MIPS sigaction, for example), in some cases substantive fixes for
|
||
|
the warnings.
|
||
|
|
||
|
Note that if, with a view to listing all the warnings then fixing them
|
||
|
all, you just look for "warning:" in output from building and testing
|
||
|
with --disable-werror, you'll see lots of warnings from the linker
|
||
|
about functions such as tmpnam. Those warnings can be ignored - only
|
||
|
compiler warnings are relevant to -Werror, not linker warnings.
|
||
|
|
||
|
* configure.ac (--disable-werror): New configure option.
|
||
|
(enable_werror): New AC_SUBST.
|
||
|
* configure: Regenerated.
|
||
|
* config.make.in (enable-werror): New variable.
|
||
|
* Makeconfig [$(enable-werror) = yes] (+gccwarn): Add -Werror
|
||
|
-Wno-error=undef.
|
||
|
(+gccwarn-c): Do not use -Werror=implicit-function-declaration.
|
||
|
* manual/install.texi (Configuring and compiling): Document
|
||
|
--disable-werror.
|
||
|
* INSTALL: Regenerated.
|
||
|
* debug/Makefile (CFLAGS-tst-chk1.c): Add -Wno-error.
|
||
|
(CFLAGS-tst-chk2.c): Likewise.
|
||
|
(CFLAGS-tst-chk3.c): Likewise.
|
||
|
(CFLAGS-tst-chk4.cc): Likewise.
|
||
|
(CFLAGS-tst-chk5.cc): Likewise.
|
||
|
(CFLAGS-tst-chk6.cc): Likewise.
|
||
|
(CFLAGS-tst-lfschk1.c): Likewise.
|
||
|
(CFLAGS-tst-lfschk2.c): Likewise.
|
||
|
(CFLAGS-tst-lfschk3.c): Likewise.
|
||
|
(CFLAGS-tst-lfschk4.cc): Likewise.
|
||
|
(CFLAGS-tst-lfschk5.cc): Likewise.
|
||
|
(CFLAGS-tst-lfschk6.cc): Likewise.
|
||
|
|
||
|
Conflicts:
|
||
|
INSTALL
|
||
|
manual/install.texi
|
||
|
(Textual conflicts due to elision backport;
|
||
|
glibc-rh841653-0.patch and others)
|
||
|
configure.ac
|
||
|
(Change applied to configure.in instead.)
|
||
|
|
||
|
diff --git a/INSTALL b/INSTALL
|
||
|
index 264e57bc5f0316f7..82b29f5d8746f929 100644
|
||
|
--- a/INSTALL
|
||
|
+++ b/INSTALL
|
||
|
@@ -143,6 +143,13 @@ will be used, and CFLAGS sets optimization options for the compiler.
|
||
|
`--enable-lock-elision=yes'
|
||
|
Enable lock elision for pthread mutexes by default.
|
||
|
|
||
|
+`--disable-werror'
|
||
|
+ By default, the GNU C Library is built with `-Werror'. If you wish
|
||
|
+ to build without this option (for example, if building with a newer
|
||
|
+ version of GCC than this version of the GNU C Library was tested
|
||
|
+ with, so new warnings cause the build with `-Werror' to fail), you
|
||
|
+ can configure with `--disable-werror'.
|
||
|
+
|
||
|
`--build=BUILD-SYSTEM'
|
||
|
`--host=HOST-SYSTEM'
|
||
|
These options are for cross-compiling. If you specify both
|
||
|
diff --git a/Makeconfig b/Makeconfig
|
||
|
index 02f1cc1255c5ac07..6f61e4835c0a7770 100644
|
||
|
--- a/Makeconfig
|
||
|
+++ b/Makeconfig
|
||
|
@@ -644,7 +644,10 @@ else
|
||
|
+gccwarn := -Wall -Wwrite-strings -Winline
|
||
|
endif
|
||
|
+gccwarn += -Wundef
|
||
|
-+gccwarn-c = -Wstrict-prototypes -Werror=implicit-function-declaration
|
||
|
+ifeq ($(enable-werror),yes)
|
||
|
++gccwarn += -Werror -Wno-error=undef
|
||
|
+endif
|
||
|
++gccwarn-c = -Wstrict-prototypes
|
||
|
|
||
|
# We do not depend on the address of constants in different files to be
|
||
|
# actually different, so allow the compiler to merge them all.
|
||
|
diff --git a/config.make.in b/config.make.in
|
||
|
index d5490f61cd3faeba..3c65c9f03ab65a74 100644
|
||
|
--- a/config.make.in
|
||
|
+++ b/config.make.in
|
||
|
@@ -49,6 +49,7 @@ sysheaders = @sysheaders@
|
||
|
sysincludes = @SYSINCLUDES@
|
||
|
c++-sysincludes = @CXX_SYSINCLUDES@
|
||
|
all-warnings = @all_warnings@
|
||
|
+enable-werror = @enable_werror@
|
||
|
|
||
|
have-z-combreloc = @libc_cv_z_combreloc@
|
||
|
have-z-execstack = @libc_cv_z_execstack@
|
||
|
diff --git a/configure b/configure
|
||
|
index b185b400dfbc21de..769f0fa149d0ef9c 100755
|
||
|
--- a/configure
|
||
|
+++ b/configure
|
||
|
@@ -660,6 +660,7 @@ build_pt_chown
|
||
|
build_nscd
|
||
|
link_obsolete_rpc
|
||
|
libc_cv_nss_crypt
|
||
|
+enable_werror
|
||
|
all_warnings
|
||
|
force_install
|
||
|
bindnow
|
||
|
@@ -758,6 +759,7 @@ enable_static_nss
|
||
|
enable_force_install
|
||
|
enable_kernel
|
||
|
enable_all_warnings
|
||
|
+enable_werror
|
||
|
enable_multi_arch
|
||
|
enable_nss_crypt
|
||
|
enable_obsolete_rpc
|
||
|
@@ -1419,6 +1421,7 @@ Optional Features:
|
||
|
--enable-kernel=VERSION compile for compatibility with kernel not older than
|
||
|
VERSION
|
||
|
--enable-all-warnings enable all useful warnings gcc can issue
|
||
|
+ --disable-werror do not build with -Werror
|
||
|
--enable-multi-arch enable single DSO with optimizations for multiple
|
||
|
architectures
|
||
|
--enable-nss-crypt enable libcrypt to use nss
|
||
|
@@ -3803,6 +3806,15 @@ fi
|
||
|
|
||
|
|
||
|
|
||
|
+# Check whether --enable-werror was given.
|
||
|
+if test "${enable_werror+set}" = set; then :
|
||
|
+ enableval=$enable_werror; enable_werror=$enableval
|
||
|
+else
|
||
|
+ enable_werror=yes
|
||
|
+fi
|
||
|
+
|
||
|
+
|
||
|
+
|
||
|
# Check whether --enable-multi-arch was given.
|
||
|
if test "${enable_multi_arch+set}" = set; then :
|
||
|
enableval=$enable_multi_arch; multi_arch=$enableval
|
||
|
diff --git a/configure.in b/configure.in
|
||
|
index f8c36ba306e01f59..9feb463ddfed2a27 100644
|
||
|
--- a/configure.in
|
||
|
+++ b/configure.in
|
||
|
@@ -234,6 +234,13 @@ AC_ARG_ENABLE([all-warnings],
|
||
|
[])
|
||
|
AC_SUBST(all_warnings)
|
||
|
|
||
|
+AC_ARG_ENABLE([werror],
|
||
|
+ AC_HELP_STRING([--disable-werror],
|
||
|
+ [do not build with -Werror]),
|
||
|
+ [enable_werror=$enableval],
|
||
|
+ [enable_werror=yes])
|
||
|
+AC_SUBST(enable_werror)
|
||
|
+
|
||
|
AC_ARG_ENABLE([multi-arch],
|
||
|
AC_HELP_STRING([--enable-multi-arch],
|
||
|
[enable single DSO with optimizations for multiple architectures]),
|
||
|
diff --git a/debug/Makefile b/debug/Makefile
|
||
|
index e4efd9bcc687e562..6588b6327ae01205 100644
|
||
|
--- a/debug/Makefile
|
||
|
+++ b/debug/Makefile
|
||
|
@@ -89,19 +89,21 @@ CFLAGS-tst-longjmp_chk2.c = -fexceptions -fasynchronous-unwind-tables
|
||
|
CPPFLAGS-tst-longjmp_chk2.c = -D_FORTIFY_SOURCE=1
|
||
|
|
||
|
# We know these tests have problems with format strings, this is what
|
||
|
-# we are testing. Disable that warning.
|
||
|
-CFLAGS-tst-chk1.c = -Wno-format
|
||
|
-CFLAGS-tst-chk2.c = -Wno-format
|
||
|
-CFLAGS-tst-chk3.c = -Wno-format
|
||
|
-CFLAGS-tst-chk4.cc = -Wno-format
|
||
|
-CFLAGS-tst-chk5.cc = -Wno-format
|
||
|
-CFLAGS-tst-chk6.cc = -Wno-format
|
||
|
-CFLAGS-tst-lfschk1.c = -Wno-format
|
||
|
-CFLAGS-tst-lfschk2.c = -Wno-format
|
||
|
-CFLAGS-tst-lfschk3.c = -Wno-format
|
||
|
-CFLAGS-tst-lfschk4.cc = -Wno-format
|
||
|
-CFLAGS-tst-lfschk5.cc = -Wno-format
|
||
|
-CFLAGS-tst-lfschk6.cc = -Wno-format
|
||
|
+# we are testing. Disable that warning. They also generate warnings
|
||
|
+# from warning attributes, which cannot be disabled via pragmas, so
|
||
|
+# require -Wno-error to be used.
|
||
|
+CFLAGS-tst-chk1.c = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-chk2.c = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-chk3.c = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-chk4.cc = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-chk5.cc = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-chk6.cc = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-lfschk1.c = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-lfschk2.c = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-lfschk3.c = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-lfschk4.cc = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-lfschk5.cc = -Wno-format -Wno-error
|
||
|
+CFLAGS-tst-lfschk6.cc = -Wno-format -Wno-error
|
||
|
LDLIBS-tst-chk4 = -lstdc++
|
||
|
LDLIBS-tst-chk5 = -lstdc++
|
||
|
LDLIBS-tst-chk6 = -lstdc++
|
||
|
diff --git a/manual/install.texi b/manual/install.texi
|
||
|
index 7fe6e005c3fdd5fb..3799cee621ddc4f9 100644
|
||
|
--- a/manual/install.texi
|
||
|
+++ b/manual/install.texi
|
||
|
@@ -177,6 +177,13 @@ you understand and accept those risks.
|
||
|
@item --enable-lock-elision=yes
|
||
|
Enable lock elision for pthread mutexes by default.
|
||
|
|
||
|
+@item --disable-werror
|
||
|
+By default, @theglibc{} is built with @option{-Werror}. If you wish
|
||
|
+to build without this option (for example, if building with a newer
|
||
|
+version of GCC than this version of @theglibc{} was tested with, so
|
||
|
+new warnings cause the build with @option{-Werror} to fail), you can
|
||
|
+configure with @option{--disable-werror}.
|
||
|
+
|
||
|
@item --build=@var{build-system}
|
||
|
@itemx --host=@var{host-system}
|
||
|
These options are for cross-compiling. If you specify both options and
|