d9492da540430103b9dcd6844eb59b508c061d66 effectively breaks builds with gcc 3.4.
... only when developer warnings are enabled.
Patch attached.
This also fixes linker issues if the compiler supports -fstack-protector but not
the linker and a "the address of ‘buf’ will never be NULL" on Solaris / gcc 4.3.3
Nils
>From bde10016e2a7543181f3a8534cbe13c94904d9b6 Mon Sep 17 00:00:00 2001
From: Nils Goroll <[email protected]>
Date: Thu, 9 Jan 2014 19:03:12 +0100
Subject: [PATCH] fix build with --enable-developer-warnings and gcc3.4 & gcc
4.3.3 on Solaris (and others maybe)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
DEVELOPER_CFLAGS:
- use -fstack-protector only if both compiler and linker support it
- use -Wno-missing-field-initializers vs -Wno-extra depending on compiler
support
- -Wno-pointer-sign only if compiler supports it
- add -Wno-address to avoid "the address of âbufâ will never be NULL"
warning in
cache_backend_cfg.c (and in other places where REPLACE() is used with local
buf variable)
---
configure.ac | 17 ++++++++++-
m4/ax_check_link_flag.m4 | 73 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 89 insertions(+), 1 deletions(-)
create mode 100644 m4/ax_check_link_flag.m4
diff --git a/configure.ac b/configure.ac
index ea2039a..25efde2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -465,7 +465,7 @@ AX_CHECK_COMPILE_FLAG([-Werror=unused-result],
OCFLAGS="${OCFLAGS} -Wno-unused-result"])])
# This corresponds to FreeBSD's WARNS level 6
-DEVELOPER_CFLAGS="-fstack-protector -Werror -Wall -Wno-format-y2k -W
-Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith
-Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter
-Wcast-align -Wchar-subscripts -Wnested-externs -Wno-pointer-sign -Wextra
-Wno-missing-field-initializers -Wno-sign-compare"
+DEVELOPER_CFLAGS="-Werror -Wall -Wno-format-y2k -W -Wstrict-prototypes
-Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings
-Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wchar-subscripts
-Wnested-externs -Wextra -Wno-sign-compare -Wno-address"
# These are not compliable yet
DEVELOPER_GCC_CFLAGS="-Wold-style-definition -Wredundant-decls "
@@ -483,6 +483,21 @@ AC_ARG_ENABLE(developer-warnings,
[enable_developer_warnings=no])
if test "x$enable_developer_warnings" != "xno"; then
+ # compiler flags not available on gcc3
+ AX_CHECK_COMPILE_FLAG([-Wno-pointer-sign],
+ [DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wno-pointer-sign"], [],
[])
+ # no known way to specifically disabling missing-field-initializers
warnings
+ # keeping the rest of Wextra
+ AX_CHECK_COMPILE_FLAG([-Wno-missing-field-initializers],
+ [DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS}
-Wno-missing-field-initializers"],
+ [DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wno-extra"],
+ [])
+
+ AX_CHECK_COMPILE_FLAG([-fstack-protector],
+ AX_CHECK_LINK_FLAG([-fstack-protector],
+ [DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -fstack-protector"], [],
[]),
+ [], [])
+
CFLAGS="${CFLAGS} ${DEVELOPER_CFLAGS}"
OCFLAGS="${OCFLAGS} ${DEVELOPER_CFLAGS}"
fi
diff --git a/m4/ax_check_link_flag.m4 b/m4/ax_check_link_flag.m4
new file mode 100644
index 0000000..db899dd
--- /dev/null
+++ b/m4/ax_check_link_flag.m4
@@ -0,0 +1,73 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE],
[EXTRA-FLAGS], [INPUT])
+#
+# DESCRIPTION
+#
+# Check whether the given FLAG works with the linker or gives an error.
+# (Warnings, however, are ignored)
+#
+# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+# success/failure.
+#
+# If EXTRA-FLAGS is defined, it is added to the linker's default flags
+# when the check is done. The check is thus made with the flags: "LDFLAGS
+# EXTRA-FLAGS FLAG". This can for example be used to force the linker to
+# issue an error when a bad flag is given.
+#
+# INPUT gives an alternative input source to AC_LINK_IFELSE.
+#
+# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+# macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Guido U. Draheim <[email protected]>
+# Copyright (c) 2011 Maarten Bosmans <[email protected]>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 3
+
+AC_DEFUN([AX_CHECK_LINK_FLAG],
+[AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl
+AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [
+ ax_check_save_flags=$LDFLAGS
+ LDFLAGS="$LDFLAGS $4 $1"
+ AC_LINK_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
+ [AS_VAR_SET(CACHEVAR,[yes])],
+ [AS_VAR_SET(CACHEVAR,[no])])
+ LDFLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
+ [m4_default([$2], :)],
+ [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_LINK_FLAGS
--
1.5.6.5
_______________________________________________
varnish-dev mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev