From 8d92800b88010574d928f2ef4b1fc0c6a6bc59ed Mon Sep 17 00:00:00 2001 From: Vincent Bernat Date: Wed, 13 May 2015 08:21:09 +0200 Subject: [PATCH] build: cleaner way to not alter CFLAGS/CPPFLAGS/LDFLAGS --- configure.ac | 53 ++++++++-------- m4/ax_cflags_gcc_option.m4 | 127 ++----------------------------------- m4/ax_ld_check_flag.m4 | 40 ++++-------- m4/os.m4 | 10 +-- 4 files changed, 50 insertions(+), 180 deletions(-) diff --git a/configure.ac b/configure.ac index 8265d570..eac2c65d 100644 --- a/configure.ac +++ b/configure.ac @@ -67,26 +67,26 @@ DX_PS_FEATURE(OFF) DX_INIT_DOXYGEN([lldpd], [doxygen.cfg], [doxygen]) # Check some compiler flags -AX_CFLAGS_GCC_OPTION([-fdiagnostics-show-option]) -AX_CFLAGS_GCC_OPTION([-fdiagnostics-color=auto]) -AX_CFLAGS_GCC_OPTION([-pipe]) -AX_CFLAGS_GCC_OPTION([-Wall]) -AX_CFLAGS_GCC_OPTION([-W]) -AX_CFLAGS_GCC_OPTION([-Wextra]) -AX_CFLAGS_GCC_OPTION([-Wformat]) -AX_CFLAGS_GCC_OPTION([-Wformat-security]) -AX_CFLAGS_GCC_OPTION([-Wfatal-errors]) -AX_CFLAGS_GCC_OPTION([-Wcast-align]) -AX_CFLAGS_GCC_OPTION([-Winline]) -AX_CFLAGS_GCC_OPTION([-fstack-protector]) -AX_CFLAGS_GCC_OPTION([-fstack-protector-strong]) -AX_CFLAGS_GCC_OPTION([-fno-omit-frame-pointer]) -AX_CFLAGS_GCC_OPTION([-D_FORTIFY_SOURCE=2], [CPPFLAGS]) -AX_CFLAGS_GCC_OPTION([-Wno-unused-parameter]) -AX_CFLAGS_GCC_OPTION([-Wno-missing-field-initializers]) -AX_CFLAGS_GCC_OPTION([-Wno-sign-compare]) dnl Should be fixed later -AX_LDFLAGS_OPTION([-Wl,-z,relro]) -AX_LDFLAGS_OPTION([-Wl,-z,now]) +AX_CFLAGS_GCC_OPTION([-fdiagnostics-show-option], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-fdiagnostics-color=auto], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-pipe], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-Wall], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-W], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-Wextra], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-Wformat], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-Wformat-security], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-Wfatal-errors], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-Wcast-align], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-Winline], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-fstack-protector], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-fstack-protector-strong], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-fno-omit-frame-pointer], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-D_FORTIFY_SOURCE=2], [LLDP_CPPFLAGS]) +AX_CFLAGS_GCC_OPTION([-Wno-unused-parameter], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-Wno-missing-field-initializers], [LLDP_CFLAGS]) +AX_CFLAGS_GCC_OPTION([-Wno-sign-compare], [LLDP_CFLAGS]) dnl Should be fixed later +AX_LDFLAGS_OPTION([-Wl,-z,relro], [LLDP_LDFLAGS]) +AX_LDFLAGS_OPTION([-Wl,-z,now], [LLDP_LDFLAGS]) # OS lldp_CHECK_OS @@ -282,12 +282,9 @@ lldp_ARG_ENABLE([oldies], [compatibility with Linux kernel older than 2.6.18], [ ####################### # Output results -AC_SUBST([LLDP_CFLAGS], [$CFLAGS]) -AC_SUBST([LLDP_CPPFLAGS], [$CPPFLAGS]) -AC_SUBST([LLDP_LDFLAGS], [$LDFLAGS]) -CFLAGS= -CPPFLAGS= -LDFLAGS= +AC_SUBST([LLDP_CFLAGS]) +AC_SUBST([LLDP_CPPFLAGS]) +AC_SUBST([LLDP_LDFLAGS]) AM_CONDITIONAL([HAVE_CHECK], [test x"$have_check" = x"yes"]) AM_CONDITIONAL([USE_SNMP], [test x"$with_snmp" = x"yes"]) AM_CONDITIONAL([USE_XML], [test x"$with_xml" = x"yes"]) @@ -309,8 +306,8 @@ cat < +# to ensure that the shell variable the option is added to is +# prepended to the test variable (like a regular CFLAGS). +# # See also: AX_CFLAGS_SUN_OPTION, AX_CFLAGS_HPUX_OPTION, # AX_CFLAGS_AIX_OPTION, and AX_CFLAGS_IRIX_OPTION. # @@ -72,83 +73,12 @@ # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. -AC_DEFUN([AX_CFLAGS_GCC_OPTION_OLD], [dnl -AS_VAR_PUSHDEF([FLAGS],[CFLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ac_cv_cflags_gcc_option_$2])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for gcc m4_ifval($2,$2,-option)], -VAR,[AS_VAR_SET([VAR], ["no, unknown"]) - AC_LANG_SAVE - AC_LANG_C - ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-pedantic -Werror % m4_ifval($2,$2,-option)" dnl GCC - "-pedantic % m4_ifval($2,$2,-option) %% no, obsolete" dnl new GCC - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_TRY_COMPILE([],[return 0;], - [AS_VAR_SET([VAR],[`echo $ac_arg | sed -e 's,.*% *,,'`]) ; break]) -done - FLAGS="$ac_save_[]FLAGS" - AC_LANG_RESTORE -]) -AS_VAR_COPY([ac_res], [VAR]) -case ".${ac_res}" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_ifvaln($4,$4) ;; - *) m4_ifvaln($3,$3,[ - if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " ${ac_res} " 2>&1 >/dev/null - then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain ${ac_res}]) - else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) ${ac_res}"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) ${ac_res}" - fi ]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -AS_VAR_POPDEF([FLAGS])dnl -]) - - -dnl the only difference - the LANG selection... and the default FLAGS - -AC_DEFUN([AX_CXXFLAGS_GCC_OPTION_OLD], [dnl -AS_VAR_PUSHDEF([FLAGS],[CXXFLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ac_cv_cxxflags_gcc_option_$2])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for gcc m4_ifval($2,$2,-option)], -VAR,[AS_VAR_SET([VAR],["no, unknown"]) - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-pedantic -Werror % m4_ifval($2,$2,-option)" dnl GCC - "-pedantic % m4_ifval($2,$2,-option) %% no, obsolete" dnl new GCC - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_TRY_COMPILE([],[return 0;], - [AS_VAR_SET([VAR],[`echo $ac_arg | sed -e 's,.*% *,,'`]) ; break]) -done - FLAGS="$ac_save_[]FLAGS" - AC_LANG_RESTORE -]) -AS_VAR_COPY([ac_res], [VAR]) -case ".${ac_res}" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_ifvaln($4,$4) ;; - *) m4_ifvaln($3,$3,[ - if echo " $[]m4_ifval($1,$1,FLAGS) " | grep " ${VAR} " 2>&1 >/dev/null - then AC_RUN_LOG([: m4_ifval($1,$1,FLAGS) does contain ${ac_res}]) - else AC_RUN_LOG([: m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) ${ac_res}"]) - m4_ifval($1,$1,FLAGS)="$m4_ifval($1,$1,FLAGS) ${ac_res}" - fi ]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -AS_VAR_POPDEF([FLAGS])dnl -]) - dnl ------------------------------------------------------------------------- -AC_DEFUN([AX_CFLAGS_GCC_OPTION_NEW], [dnl +AC_DEFUN([AX_CFLAGS_GCC_OPTION], [dnl AS_VAR_PUSHDEF([FLAGS],[CFLAGS])dnl AS_VAR_PUSHDEF([VAR],[ac_cv_cflags_gcc_option_$1])dnl -AC_CACHE_CHECK([m4_ifval($2,$2,FLAGS) for gcc m4_ifval($1,$1,-option)], +AC_CACHE_CHECK([FLAGS for gcc m4_ifval($1,$1,-option)], VAR,[AS_VAR_SET([VAR],["no, unknown"]) AC_LANG_SAVE AC_LANG_C @@ -157,44 +87,7 @@ for ac_arg dnl in "-pedantic -Werror % m4_ifval($1,$1,-option)" dnl GCC "-pedantic % m4_ifval($1,$1,-option) %% no, obsolete" dnl new GCC # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_TRY_COMPILE([],[return 0;], - [AS_VAR_SET([VAR],[`echo $ac_arg | sed -e 's,.*% *,,'`]) ; break]) -done - FLAGS="$ac_save_[]FLAGS" - AC_LANG_RESTORE -]) -AS_VAR_COPY([ac_res], [VAR]) -case ".${ac_res}" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_ifvaln($4,$4) ;; - *) m4_ifvaln($3,$3,[ - if echo " $[]m4_ifval($2,$2,FLAGS) " | grep " ${ac_res} " 2>&1 >/dev/null - then AC_RUN_LOG([: m4_ifval($2,$2,FLAGS) does contain ${ac_res}]) - else AC_RUN_LOG([: m4_ifval($2,$2,FLAGS)="$m4_ifval($2,$2,FLAGS) ${ac_res}"]) - m4_ifval($2,$2,FLAGS)="$m4_ifval($2,$2,FLAGS) ${ac_res}" - fi ]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -AS_VAR_POPDEF([FLAGS])dnl -]) - - -dnl the only difference - the LANG selection... and the default FLAGS - -AC_DEFUN([AX_CXXFLAGS_GCC_OPTION_NEW], [dnl -AS_VAR_PUSHDEF([FLAGS],[CXXFLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ac_cv_cxxflags_gcc_option_$1])dnl -AC_CACHE_CHECK([m4_ifval($2,$2,FLAGS) for gcc m4_ifval($1,$1,-option)], -VAR,[AS_VAR_SET([VAR],["no, unknown"]) - AC_LANG_SAVE - AC_LANG_CPLUSPLUS - ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-pedantic -Werror % m4_ifval($1,$1,-option)" dnl GCC - "-pedantic % m4_ifval($1,$1,-option) %% no, obsolete" dnl new GCC - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` +do FLAGS="$ac_save_[]FLAGS $[]m4_ifval($2,$2,) "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` AC_TRY_COMPILE([],[return 0;], [AS_VAR_SET([VAR],[`echo $ac_arg | sed -e 's,.*% *,,'`]) ; break]) done @@ -215,9 +108,3 @@ esac AS_VAR_POPDEF([VAR])dnl AS_VAR_POPDEF([FLAGS])dnl ]) - -AC_DEFUN([AX_CFLAGS_GCC_OPTION],[ifelse(m4_bregexp([$2],[-]),-1, -[AX_CFLAGS_GCC_OPTION_NEW($@)],[AX_CFLAGS_GCC_OPTION_OLD($@)])]) - -AC_DEFUN([AX_CXXFLAGS_GCC_OPTION],[ifelse(m4_bregexp([$2],[-]),-1, -[AX_CXXFLAGS_GCC_OPTION_NEW($@)],[AX_CXXFLAGS_GCC_OPTION_OLD($@)])]) diff --git a/m4/ax_ld_check_flag.m4 b/m4/ax_ld_check_flag.m4 index 2f560c68..4d59c9d1 100644 --- a/m4/ax_ld_check_flag.m4 +++ b/m4/ax_ld_check_flag.m4 @@ -4,26 +4,19 @@ # # SYNOPSIS # -# AX_LD_CHECK_FLAG(FLAG-TO-CHECK,[PROLOGUE],[BODY],[ACTION-IF-SUCCESS],[ACTION-IF-FAILURE]) +# AX_LDFLAGS_OPTION(FLAG-TO-CHECK,[VAR]) # # DESCRIPTION # -# This macro tests if the C++ compiler supports the flag FLAG-TO-CHECK. If -# successfull execute ACTION-IF-SUCCESS otherwise ACTION-IF-FAILURE. -# PROLOGUE and BODY are optional and should be used as in AC_LANG_PROGRAM -# macro. -# -# Example: -# -# AX_LD_CHECK_FLAG([-Wl,-L/usr/lib],[],[],[ -# ... -# ],[ -# ... -# ]) +# This macro tests if the C compiler supports the flag FLAG-TO-CHECK. If +# successfull add it to VAR. # # This code is inspired from KDE_CHECK_COMPILER_FLAG macro. Thanks to # Bogdan Drozdowski for testing and bug fixes. # +# This version has been (heavily) modified by Vincent Bernat +# to match AX_CFLAGS_GCC_OPTION. +# # LICENSE # # Copyright (c) 2008 Francesco Salvestrini @@ -56,9 +49,8 @@ #serial 6 -AC_DEFUN([AX_LD_CHECK_FLAG],[ +AC_DEFUN([AX_LDFLAGS_OPTION],[ AC_PREREQ([2.61]) - AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PROG_SED]) flag=`echo "$1" | $SED 'y% .=/+-(){}<>:*,%_______________%'` @@ -66,12 +58,13 @@ AC_DEFUN([AX_LD_CHECK_FLAG],[ AC_CACHE_CHECK([whether the linker accepts the $1 flag], [ax_cv_ld_check_flag_$flag],[ - #AC_LANG_PUSH([C]) + AC_LANG_SAVE + AC_LANG_C save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $1" + LDFLAGS="$LDFLAGS $[]m4_ifval($2,$2,) $1" AC_LINK_IFELSE([ - AC_LANG_PROGRAM([$2],[$3]) + AC_LANG_PROGRAM([],[]) ],[ eval "ax_cv_ld_check_flag_$flag=yes" ],[ @@ -80,18 +73,11 @@ AC_DEFUN([AX_LD_CHECK_FLAG],[ LDFLAGS="$save_LDFLAGS" - #AC_LANG_POP + AC_LANG_RESTORE ]) AS_IF([eval "test \"`echo '$ax_cv_ld_check_flag_'$flag`\" = yes"],[ - : - $4 - ],[ - : - $5 + m4_ifval($2,$2,LDFLAGS)="$[]m4_ifval($2,$2,LDFLAGS) $1" ]) ]) - -AC_DEFUN([AX_LDFLAGS_OPTION],[ - AX_LD_CHECK_FLAG([$1],[],[],[LDFLAGS="$LDFLAGS $1"])]) diff --git a/m4/os.m4 b/m4/os.m4 index 521d1793..feaa49a3 100644 --- a/m4/os.m4 +++ b/m4/os.m4 @@ -35,16 +35,16 @@ AC_DEFUN([lldp_CHECK_OS], [ # Enable some additional CFLAGS depending on the OS AC_DEFUN([lldp_CFLAGS_OS], [ # Most of what we want can be enabled nowadays with _GNU_SOURCE - AX_CFLAGS_GCC_OPTION([-D_GNU_SOURCE], [CPPFLAGS]) dnl GNU systems (asprintf, ...) + AX_CFLAGS_GCC_OPTION([-D_GNU_SOURCE], [LLDP_CPPFLAGS]) dnl GNU systems (asprintf, ...) case $host_os in solaris*) - AX_CFLAGS_GCC_OPTION([-D__EXTENSIONS__], [CPPFLAGS]) dnl (CMSG_*) - AX_CFLAGS_GCC_OPTION([-D_XPG4_2], [CPPFLAGS]) dnl (CMSG_*) + AX_CFLAGS_GCC_OPTION([-D__EXTENSIONS__], [LLDP_CPPFLAGS]) dnl (CMSG_*) + AX_CFLAGS_GCC_OPTION([-D_XPG4_2], [LLDP_CPPFLAGS]) dnl (CMSG_*) ;; hpux*) - AX_CFLAGS_GCC_OPTION([-D_XOPEN_SOURCE=500], [CPPFLAGS]) dnl HP-UX - AX_CFLAGS_GCC_OPTION([-D_XOPEN_SOURCE_EXTENDED], [CPPFLAGS]) dnl HP-UX + AX_CFLAGS_GCC_OPTION([-D_XOPEN_SOURCE=500], [LLDP_CPPFLAGS]) dnl HP-UX + AX_CFLAGS_GCC_OPTION([-D_XOPEN_SOURCE_EXTENDED], [LLDP_CPPFLAGS]) dnl HP-UX ;; esac ]) -- 2.39.5