mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-20 12:58:08 +01:00
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>
78 lines
2.8 KiB
Plaintext
78 lines
2.8 KiB
Plaintext
# 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])
|
|
}
|
|
])
|