1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-01-08 06:44:11 +01:00

configure: Enable compiler warnings to help add 'format' attribute

This attribute helps the compiler checking the type matching between
arguments and the specification in a printf-like format string, to
avoid invalid output. This attribute is optional, but some compilers
can suggest functions that could have it.

This patch adds the appropriate compiler flags if they are supported when
the source is being compiled with DEBUG enabled.

The patch also introduces a new macro WM_CFLAGS_CHECK_FIRST because in some
cases AX_CFLAGS_GCC_OPTION is not really efficient and in present case it
does not fits the job.

Signed-off-by: Christophe CURIS <christophe.curis@free.fr>
This commit is contained in:
Christophe CURIS
2013-11-15 18:46:38 +01:00
committed by Carlos R. Mafra
parent 68a902aa2e
commit fc825382d6
2 changed files with 83 additions and 0 deletions

View File

@@ -129,6 +129,12 @@ AS_IF([test "x$debug" = "xyes"],
dnl Having more than 1 prototype for a function makes code updates
dnl more difficult, so try to avoid it
AX_CFLAGS_GCC_OPTION([-Wredundant-decls])
dnl
dnl Proper attributes helps the compiler to produce better code
WM_CFLAGS_CHECK_FIRST([format attribute suggest],
[-Wsuggest-attribute=format dnl new gcc syntax
-Wmissing-format-attribute dnl old gcc syntax, clang
])
], [dnl
dnl When debug not enabled, we try to avoid some non-necessary
dnl messages from the compiler

77
m4/wm_cflags_check.m4 Normal file
View File

@@ -0,0 +1,77 @@
# wm_cflags_check.m4 - Macros to check options for the compiler into CFLAGS
#
# Copyright (c) 2013 Christophe CURIS
#
# 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 2 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, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
# WM_CFLAGS_CHECK_FIRST
# ---------------------
#
# For each option provided, check which one is supported and stops when
# found, adding it to CFLAGS. It extends AX_CFLAGS_GCC_OPTION which does
# not checks for fallbacks; as a bonus it uses a shared function to
# produce smaller configure script.
#
# Usage: WM_CFLAGS_CHECK_FIRST([message], [option alt_option...])
# $1 message: required, message displayed in 'Checking for...'
# $2 option_list: list of options, tested in given order
#
# The first option that works is added to CFLAGS
AC_DEFUN([WM_CFLAGS_CHECK_FIRST],
[AC_REQUIRE([_WM_SHELLFN_CHKCFLAGS])
m4_define([_wm_optlist], m4_split([$2]))dnl
AS_VAR_PUSHDEF([VAR], [wm_cv_c_check_compopt[]m4_car(_wm_optlist)])dnl
m4_define([_wm_trimmed_optlist], m4_join([ ], _wm_optlist))dnl
AC_CACHE_CHECK([CFLAGS for m4_ifnblank($1,$1,m4_car(_wm_optlist))], VAR,
[VAR="no, unknown"
for wm_option in _wm_trimmed_optlist ; do
AS_IF([wm_fn_c_try_compile_cflag "$wm_option"],
[VAR="$wm_option" ; break])
done])
AS_CASE([$VAR],
[no,*], [],
[AS_IF([echo " $CFLAGS " | grep " $VAR " 2>&1 > /dev/null],
[AC_MSG_WARN([option $VAR already present in \$CFLAGS, not appended])],
[CFLAGS="$CFLAGS $VAR"]) ])
AS_VAR_POPDEF([VAR])dnl
m4_undefine([_wm_optlist])dnl
m4_undefine([_wm_trimmed_optlist])dnl
])
# _WM_SHELLFN_CHKCFLAGS
# ---------------------
# (internal shell function)
#
# Create a shell function that tries compiling a simple program with the
# specified compiler option. Assumes the current compilation language is
# already set to C
AC_DEFUN_ONCE([_WM_SHELLFN_CHKCFLAGS],
[@%:@ wm_fn_c_try_compile_cflag CC_OPTION
@%:@ -----------------------------------
@%:@ Try compiling a function using CC_OPTION in the compiler's options
wm_fn_c_try_compile_cflag ()
{
wm_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -Werror $[]1"
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([], [])],
[wm_retval=0],
[wm_retval=1])
CFLAGS="$wm_save_CFLAGS"
AS_SET_STATUS([$wm_retval])
}
])