Nikolai Merinov <nikolai.meri...@member.fsf.org> writes: > Hi, > > Do I need to make additional changes to the patch? > > Regards, > Nikolai > > On Thu, Mar 14, 2019 at 8:08 PM Nikolai Merinov > <nikolai.meri...@member.fsf.org> wrote: > > Hi, > > During work on a same issue in the libtool code I observed that it's > necessary to fix the _AC_DO macro in same manner in order to pass > compiler checks with flags like CFLAGS='"-Wall"'. > > An updated version of the patch with changes to both _AC_DO and > _AC_DO_STDERR attached. > > Regards, > Nikolai
>From 614d16f92a75a62652dc8c99e872576d9bfb7399 Mon Sep 17 00:00:00 2001 From: Nikolai Merinov <nikolai.meri...@member.fsf.org> Date: Thu, 7 Mar 2019 22:33:13 +0500 Subject: [PATCH] _AC_DO _AC_DO_STDERR: Evaluate argument twice The `AC_COMPILE_IFELSE', `AC_LINK_IFELSE', `AC_PREPROC_IFELSE' macros use the `_AC_DO_STDERR` macro in the following manner: > ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' > _AC_DO_STDERR($ac_compile) In order to have same behavior during a configuration stage and during a compilation stage we should evaluate a passed argument twice: in second time we'll be able to unquote strings in user-supplied variables as it happens during make rules execution. The `_AC_DO' macro used through the `_AC_DO_VAR' macro in similar manner in many places and should work by same rules. * lib/autoconf/general.m4 (_AC_DO_STDERR): Reuse `_AC_DO_ECHO' trick to evaluate arguments twice if compile string have no '\"', '`', or '\\' symbols. (_AC_DO): Same changes. * tests/compile.at: Add test for CFLAGS evaluation. --- NEWS | 5 +++++ lib/autoconf/general.m4 | 22 ++++++++++++++++++---- tests/compile.at | 11 +++++++++++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index efade585..b6d0136a 100644 --- a/NEWS +++ b/NEWS @@ -123,6 +123,11 @@ GNU Autoconf NEWS - User visible changes. use with multiple languages, rather than forcing all checks in the language used by the first encounter of the macro. +- The _AC_DO_STDERR and _AC_DO macros now evaluate a COMMAND argument + twice. This change consolidate behavior for user-supplied arguments + between the AC_COMPILE_IFELSE and AC_LINK_IFELSE macros and + compilation commands used in makefiles. + ** Man pages for config.guess and config.sub are no longer provided. They were moved to the master source tree for config.guess and config.sub. diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 index e1d82b54..0af61b2a 100644 --- a/lib/autoconf/general.m4 +++ b/lib/autoconf/general.m4 @@ -2448,16 +2448,30 @@ AS_ECHO(["$ac_try_echo"])]) # Eval COMMAND, save the exit status in ac_status, and log it. # For internal use only. AC_DEFUN([_AC_DO], -[_AC_RUN_LOG([eval "$1"], - [_AC_DO_ECHO([$1])])]) +[m4_if([$1], [$ac_do], [], [ac_do="$1" +])]dnl +[[case "(($ac_do" in + *\"* | *\`* | *\\*) ac_do_command=\$ac_do;; + *) ac_do_command=$ac_do;; +esac +eval ac_do_command="\"$ac_do_command\""] +_AC_RUN_LOG([eval "$ac_do_command"], + [_AC_DO_ECHO([$ac_do])])]) # _AC_DO_STDERR(COMMAND) # ---------------------- # Like _AC_RUN_LOG_STDERR, but eval (instead of running) COMMAND. AC_DEFUN([_AC_DO_STDERR], -[_AC_RUN_LOG_STDERR([eval "$1"], - [_AC_DO_ECHO([$1])])]) +[m4_if([$1], [$ac_do_stderr], [], [ac_do_stderr="$1" +])]dnl +[[case "(($ac_do_stderr" in + *\"* | *\`* | *\\*) ac_do_stderr_command=\$ac_do_stderr;; + *) ac_do_stderr_command=$ac_do_stderr;; +esac +eval ac_do_stderr_command="\"$ac_do_stderr_command\""] +_AC_RUN_LOG_STDERR([eval "$ac_do_stderr_command"], + [_AC_DO_ECHO([$ac_do_stderr])])]) # _AC_DO_VAR(VARIABLE) diff --git a/tests/compile.at b/tests/compile.at index 29374529..9af8cb38 100644 --- a/tests/compile.at +++ b/tests/compile.at @@ -301,6 +301,17 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return 2])], AT_CHECK_AUTOCONF AT_CHECK_CONFIGURE([-q]) +AT_DATA([configure.ac], +[[AC_INIT +AC_PROG_CC +test x$GCC = xyes && CFLAGS='"-Wall"' +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return 0])], [], + [AC_MSG_ERROR([compiling trivial program failed])]) +]]) + +AT_CHECK_AUTOCONF +AT_CHECK_CONFIGURE([-q]) + AT_CLEANUP ## --------------- ## -- 2.21.0