mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-09 06:08:01 +02:00
Test compiler and linker flags with AX_COMPILER_FLAGS_* macros
The autoconf macros AX_COMPILER_FLAGS_{CFLAGS|CXXFLAGS|LDFLAGS} test
for compiler and linker support of various flags, and add the flags to
the generated output.
If the command-line option '--enable-compile-warnings' is specified to
'configure', a number of additional warning options is also added to the
output. This is the default.
The AX_COMPILER_FLAGS_* macros add stricter warnings then before. The
patch disables some of them to make dbus build without errors. A later
patch set should fix the warnings and remove the compiler flags.
This patch integrates all tests for compiler flags into the call to
AX_COMPILER_FLAGS_CFLAGS. All tests for compiler flags are now done
in a single place. The old macros have been removed.
Signed-off-by: Thomas Zimmermann <tdz@users.sourceforge.net>
[smcv: add missing $ to DISABLE_WARNINGS]
[smcv: drop -Wno-discarded-qualifiers]
[smcv: drop non-C++ option -Wpointer-sign in C++ mode]
[smcv: work around an AX_COMPILER_FLAGS_CFLAGS bug]
[smcv: this source tree is called dbus, not DBus]
Signed-off-by: Simon McVittie <smcv@debian.org>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=97357
This commit is contained in:
parent
7486899331
commit
003e5e6847
3 changed files with 61 additions and 160 deletions
129
configure.ac
129
configure.ac
|
|
@ -324,14 +324,24 @@ if test x$enable_verbose_mode = xyes; then
|
|||
AC_DEFINE(DBUS_ENABLE_VERBOSE_MODE,1,[Support a verbose mode])
|
||||
fi
|
||||
|
||||
dnl Intentional:
|
||||
dnl - $DISABLE_WARNINGS disables unused-label warnings if not
|
||||
dnl checking or not asserting (tested further below)
|
||||
dnl - missing field initializers being 0 is a C feature, not a bug
|
||||
dnl - unused-parameter is to make writing callbacks less annoying
|
||||
DISABLE_WARNINGS="$DISABLE_WARNINGS
|
||||
-Wno-missing-field-initializers
|
||||
-Wno-unused-parameter"
|
||||
|
||||
if test x$enable_asserts = xno; then
|
||||
AC_DEFINE(DBUS_DISABLE_ASSERT,1,[Disable assertion checking])
|
||||
DISABLE_UNUSED_WARNINGS="unused-label"
|
||||
DISABLE_WARNINGS="$DISABLE_WARNINGS -Wno-unused-label"
|
||||
R_DYNAMIC_LDFLAG=""
|
||||
if test x$enable_embedded_tests = xyes; then
|
||||
DISABLE_UNUSED_WARNINGS="$DISABLE_UNUSED_WARNINGS \
|
||||
unused-but-set-variable unused-variable \
|
||||
unused-function"
|
||||
DISABLE_WARNINGS="$DISABLE_WARNINGS
|
||||
-Wno-unused-but-set-variable
|
||||
-Wno-unused-variable
|
||||
-Wno-unused-function"
|
||||
fi
|
||||
else
|
||||
# -rdynamic is needed for glibc's backtrace_symbols to work.
|
||||
|
|
@ -349,7 +359,7 @@ AC_SUBST(R_DYNAMIC_LDFLAG)
|
|||
if test x$enable_checks = xno; then
|
||||
AC_DEFINE(DBUS_DISABLE_CHECKS,1,[Disable public API sanity checking])
|
||||
AC_DEFINE(G_DISABLE_CHECKS,1,[Disable GLib public API sanity checking])
|
||||
DISABLE_UNUSED_WARNINGS="unused-label"
|
||||
DISABLE_WARNINGS="$DISABLE_WARNINGS -Wno-unused-label"
|
||||
fi
|
||||
|
||||
AH_BOTTOM([
|
||||
|
|
@ -1337,77 +1347,59 @@ fi
|
|||
AC_SUBST([DBUS_X_CFLAGS])
|
||||
AC_SUBST([DBUS_X_LIBS])
|
||||
|
||||
#### gcc warning flags
|
||||
# We're treating -fno-common like a warning: it makes the linker more
|
||||
# strict, because on some systems the linker is *always* this strict
|
||||
TEST_CFLAGS="$TEST_CFLAGS -fno-common"
|
||||
|
||||
cc_supports_flag() {
|
||||
AC_MSG_CHECKING(whether $CC supports "$*")
|
||||
save_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$*"
|
||||
AC_TRY_COMPILE([], [], [rc=yes], [rc=no])
|
||||
CFLAGS="$save_CFLAGS"
|
||||
AC_MSG_RESULT([$rc])
|
||||
test "x$rc" = xyes
|
||||
}
|
||||
|
||||
TP_COMPILER_WARNINGS([WARNING_CFLAGS],
|
||||
dnl Use -Werror by default if:
|
||||
dnl - we're in developer mode (a D-Bus developer, not a distro or end-user)
|
||||
dnl Override with --enable-Werror or --disable-Werror
|
||||
[x$enable_developer = xyes],
|
||||
|
||||
dnl Enable these warnings if possible:
|
||||
[all \
|
||||
extra \
|
||||
char-subscripts \
|
||||
implicit \
|
||||
missing-declarations \
|
||||
missing-prototypes \
|
||||
nested-externs \
|
||||
pointer-arith \
|
||||
pointer-sign \
|
||||
old-style-declaration \
|
||||
old-style-definition \
|
||||
shadow \
|
||||
strict-prototypes \
|
||||
type-limits \
|
||||
cast-align \
|
||||
no-address \
|
||||
float-equal \
|
||||
declaration-after-statement \
|
||||
],
|
||||
|
||||
dnl Disable these warnings if possible, make them non-fatal if possible,
|
||||
dnl and don't enable -Werror unless we succeeded.
|
||||
dnl
|
||||
dnl Intentional:
|
||||
dnl - $DISABLE_UNUSED_WARNINGS disables unused-label warnings if not
|
||||
dnl checking or not asserting
|
||||
dnl - missing field initializers being 0 is a C feature, not a bug
|
||||
dnl - unused-parameter is to make writing callbacks less annoying
|
||||
[$DISABLE_UNUSED_WARNINGS \
|
||||
missing-field-initializers \
|
||||
unused-parameter \
|
||||
AS_IF([test "x$enable_ansi" = "xyes"],[
|
||||
TEST_CFLAGS="$TEST_CFLAGS -ansi -pedantic"
|
||||
AC_DEFINE([_POSIX_C_SOURCE],[199309L],[Define to enable POSIX features])
|
||||
AC_DEFINE([_BSD_SOURCE],[1],[Define to enable BSD features])
|
||||
])
|
||||
|
||||
if test "x$GCC" = "xyes"; then
|
||||
# We're treating -fno-common like a warning: it makes the linker more
|
||||
# strict, because on some systems the linker is *always* this strict
|
||||
TP_ADD_COMPILER_FLAG([WARNING_CFLAGS], [-fno-common])
|
||||
dnl TODO: The compiler flags below disable warnings that the
|
||||
dnl compiler emits while building dbus. Fix the source
|
||||
dnl code and remove these flags.
|
||||
DISABLE_WARNINGS="$DISABLE_WARNINGS
|
||||
-Wno-suggest-attribute=format
|
||||
-Wno-suggest-attribute=noreturn
|
||||
-Wno-switch-default
|
||||
-Wno-switch-enum
|
||||
"
|
||||
|
||||
# http://bugs.freedesktop.org/show_bug.cgi?id=10599
|
||||
TP_ADD_COMPILER_FLAG([WARNING_CFLAGS], [-fno-strict-aliasing])
|
||||
dnl We are only calling this for its side-effect of setting up
|
||||
dnl --enable-compile-warnings; the WARN_CFLAGS, etc. are ignored,
|
||||
dnl to work around https://github.com/peti/autoconf-archive/pull/96
|
||||
AX_COMPILER_FLAGS([], [], [$disable_developer])
|
||||
|
||||
if test "x$enable_ansi" = "xyes"; then
|
||||
TP_ADD_COMPILER_FLAG([WARNING_CFLAGS],
|
||||
[-ansi -D_POSIX_C_SOURCE=199309L -D_BSD_SOURCE -pedantic])
|
||||
fi
|
||||
fi
|
||||
dnl Work around https://github.com/peti/autoconf-archive/pull/96 by using
|
||||
dnl a non-default variable name here (in particular there is no way to tell
|
||||
dnl AX_COMPILER_FLAGS to not use WARN_CXXFLAGS)
|
||||
AX_COMPILER_FLAGS_CFLAGS([EXTRA_CFLAGS],
|
||||
[$disable_developer],
|
||||
[$TEST_CFLAGS],
|
||||
[-Wchar-subscripts \
|
||||
-Wfloat-equal \
|
||||
-Wpointer-sign \
|
||||
$DISABLE_WARNINGS])
|
||||
dnl cc1plus: warning: command line option ‘-Wpointer-sign’ is valid for
|
||||
dnl C/ObjC but not for C++
|
||||
AX_COMPILER_FLAGS_CXXFLAGS([EXTRA_CXXFLAGS],
|
||||
[$disable_developer],
|
||||
[],
|
||||
[-Wchar-subscripts \
|
||||
-Wfloat-equal \
|
||||
$DISABLE_WARNINGS])
|
||||
AX_COMPILER_FLAGS_LDFLAGS([EXTRA_LDFLAGS],
|
||||
[$disable_developer])
|
||||
|
||||
dnl In principle we should put WARNING_CFLAGS in each Makefile.am like
|
||||
dnl TODO: In principle we should put EXTRA_CFLAGS in each Makefile.am like
|
||||
dnl telepathy-glib does, since CFLAGS is meant to be reserved for the user...
|
||||
dnl but prepending to CFLAGS (so the user can override it with later CFLAGS)
|
||||
dnl is the next best thing
|
||||
CFLAGS="$WARNING_CFLAGS $CFLAGS"
|
||||
dnl is the next best thing.
|
||||
CFLAGS="$EXTRA_CFLAGS $CFLAGS"
|
||||
CXXFLAGS="$EXTRA_CXXFLAGS $CXXFLAGS"
|
||||
LDFLAGS="$EXTRA_LDFLAGS $LDFLAGS"
|
||||
|
||||
case $host_os in
|
||||
solaris*)
|
||||
|
|
@ -1918,6 +1910,7 @@ echo "
|
|||
cflags: ${CFLAGS}
|
||||
cppflags: ${CPPFLAGS}
|
||||
cxxflags: ${CXXFLAGS}
|
||||
ldflags: ${LDFLAGS}
|
||||
64-bit int: ${DBUS_INT64_TYPE}
|
||||
32-bit int: ${DBUS_INT32_TYPE}
|
||||
16-bit int: ${DBUS_INT16_TYPE}
|
||||
|
|
|
|||
|
|
@ -1,43 +0,0 @@
|
|||
dnl A version of AS_COMPILER_FLAG that supports both C and C++.
|
||||
dnl Based on:
|
||||
|
||||
dnl as-compiler-flag.m4 0.1.0
|
||||
dnl autostars m4 macro for detection of compiler flags
|
||||
dnl David Schleef <ds@schleef.org>
|
||||
dnl $Id: as-compiler-flag.m4,v 1.1 2005/06/18 18:02:46 burgerman Exp $
|
||||
|
||||
dnl TP_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED])
|
||||
dnl Tries to compile with the given CFLAGS and CXXFLAGS.
|
||||
dnl
|
||||
dnl Runs ACTION-IF-ACCEPTED if the compiler for the currently selected
|
||||
dnl AC_LANG can compile with the flags, and ACTION-IF-NOT-ACCEPTED otherwise.
|
||||
|
||||
AC_DEFUN([TP_COMPILER_FLAG],
|
||||
[
|
||||
AC_MSG_CHECKING([to see if compiler understands $1])
|
||||
|
||||
save_CFLAGS="$CFLAGS"
|
||||
save_CXXFLAGS="$CXXFLAGS"
|
||||
CFLAGS="$CFLAGS $1"
|
||||
CXXFLAGS="$CXXFLAGS $1"
|
||||
|
||||
AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no])
|
||||
CFLAGS="$save_CFLAGS"
|
||||
CXXFLAGS="$save_CXXFLAGS"
|
||||
|
||||
if test "X$flag_ok" = Xyes ; then
|
||||
$2
|
||||
true
|
||||
else
|
||||
$3
|
||||
true
|
||||
fi
|
||||
AC_MSG_RESULT([$flag_ok])
|
||||
])
|
||||
|
||||
dnl TP_ADD_COMPILER_FLAG(VARIABLE, CFLAGS)
|
||||
dnl Append CFLAGS to VARIABLE if the compiler supports them.
|
||||
AC_DEFUN([TP_ADD_COMPILER_FLAG],
|
||||
[
|
||||
TP_COMPILER_FLAG([$2], [$1="[$]$1 $2"])
|
||||
])
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
dnl TP_COMPILER_WARNINGS(VARIABLE, WERROR_BY_DEFAULT, DESIRABLE, UNDESIRABLE)
|
||||
dnl $1 (VARIABLE): the variable to put flags into
|
||||
dnl $2 (WERROR_BY_DEFAULT): a command returning true if -Werror should be the
|
||||
dnl default
|
||||
dnl $3 (DESIRABLE): warning flags we want (e.g. all extra shadow)
|
||||
dnl $4 (UNDESIRABLE): warning flags we don't want (e.g.
|
||||
dnl missing-field-initializers unused-parameter)
|
||||
AC_DEFUN([TP_COMPILER_WARNINGS],
|
||||
[
|
||||
AC_REQUIRE([AC_ARG_ENABLE])dnl
|
||||
AC_REQUIRE([AC_HELP_STRING])dnl
|
||||
AC_REQUIRE([TP_COMPILER_FLAG])dnl
|
||||
|
||||
tp_warnings=""
|
||||
for tp_flag in $3; do
|
||||
TP_COMPILER_FLAG([-W$tp_flag], [tp_warnings="$tp_warnings -W$tp_flag"])
|
||||
done
|
||||
|
||||
tp_error_flags="-Werror"
|
||||
TP_COMPILER_FLAG([-Werror], [tp_werror=yes], [tp_werror=no])
|
||||
|
||||
for tp_flag in $4; do
|
||||
TP_COMPILER_FLAG([-Wno-$tp_flag],
|
||||
[tp_warnings="$tp_warnings -Wno-$tp_flag"])
|
||||
dnl Yes, we do need to use both -Wno-foo and -Wno-error=foo. Simon says:
|
||||
dnl some warnings we explicitly don't want, like unused-parameter, but
|
||||
dnl they're in -Wall. when a distro using cdbs compiles us, we have:
|
||||
dnl -Werror -Wno-unused-parameter -Wall
|
||||
dnl ^ from us ^ from cdbs
|
||||
dnl which turns -Wunused-parameter back on, in effect
|
||||
TP_COMPILER_FLAG([-Wno-error=$tp_flag],
|
||||
[tp_error_flags="$tp_error_flags -Wno-error=$tp_flag"], [tp_werror=no])
|
||||
done
|
||||
|
||||
AC_ARG_ENABLE([Werror],
|
||||
AC_HELP_STRING([--disable-Werror],
|
||||
[compile without -Werror (normally enabled in development builds)]),
|
||||
tp_werror=$enableval, :)
|
||||
|
||||
if test "x$tp_werror" = xyes && $2; then
|
||||
dnl We put -Wno-error=foo before -Wno-foo because clang interprets -Wall
|
||||
dnl -Werror -Wno-foo -Wno-error=foo as “make foo a non-fatal warning”, but does
|
||||
dnl what we want if you reverse them.
|
||||
$1="$tp_error_flags $tp_warnings"
|
||||
else
|
||||
$1="$tp_warnings"
|
||||
fi
|
||||
|
||||
])
|
||||
Loading…
Add table
Reference in a new issue