config-ml.in: Robustify ac_configure_args parsing.
Thomas Schwinge
thomas@codesourcery.com
Thu May 22 10:58:00 GMT 2014
Hi!
Ping.
On Fri, 14 Mar 2014 12:22:29 +0100, I wrote:
> $ ../configure --enable-foo='--enable-a=1 --enable-b=2 --enable-c=3'
> [...]
> $ make configure-zlib
> config.status: creating Makefile
> config.status: executing default-1 commands
> ../../zlib/../config-ml.in: eval: line 142: unexpected EOF while looking for matching `''
> ../../zlib/../config-ml.in: eval: line 143: syntax error: unexpected end of file
> make: *** [configure-zlib] Error 1
>
> 140 case $enableopt in
> 141 enable_shared | enable_static) ;;
> 142 *) eval $enableopt="$optarg" ;;
> 143 esac
> 144 ;;
>
> $ grep ac_configure_args < zlib/config.status
> ac_configure_args=" '--cache-file=./config.cache' '--enable-foo=--enable-a=1 --enable-b=2 --enable-c=3' '--enable-languages=c,c++,fortran,java,lto,objc' '--program-transform-name=s,y,y,' '--disable-option-checking' '--build=x86_64-unknown-linux-gnu' '--host=x86_64-unknown-linux-gnu' '--target=x86_64-unknown-linux-gnu' '--srcdir=../../zlib' 'build_alias=x86_64-unknown-linux-gnu' 'host_alias=x86_64-unknown-linux-gnu' 'target_alias=x86_64-unknown-linux-gnu'"
>
> These are quoted correctly; the error happens because the
> ac_configure_args parsing logic in config-ml.in will parse this as:
>
> 1. '--enable-foo=--enable-a=1
> 2. --enable-b=2
> 3. --enable-c=3'
>
> Below I'm proposing a patch using a shell function and eval to properly
> handle such configure arguments. Instead of a shell function, we could
> also use:
>
> eval set x "${ac_configure_args}" && shift
> for option
> do
> [...]
> done
>
> ..., as done in top-level configure.ac for baseargs etc., but as the
> config-ml.in script is sourced in different contexts, it is not obvious
> to me that we're permitted to overwrite the shell's positional parameters
> here.
>
> OK for trunk? (Will properly indent scan_arguments before commit.)
>
> commit bc6f99e9840994309eaf4e88679c3ba50d5e4918
> Author: Thomas Schwinge <thomas@codesourcery.com>
> Date: Thu Mar 13 19:54:58 2014 +0100
>
> * config-ml.in: Robustify ac_configure_args parsing.
>
> diff --git config-ml.in config-ml.in
> index 1198346..0cd7db3 100644
> --- config-ml.in
> +++ config-ml.in
> @@ -105,10 +105,13 @@ ml_realsrcdir=${srcdir}
>
> # Scan all the arguments and set all the ones we need.
>
> +scan_arguments ()
> +{
> ml_verbose=--verbose
> -for option in ${ac_configure_args}
> +for option
> do
> - # strip single quotes surrounding individual options
> + # Strip single quotes surrounding individual options, that is, remove one
> + # level of shell quoting for these.
> case $option in
> \'*\') eval option=$option ;;
> esac
> @@ -139,7 +142,7 @@ do
> # Don't undo its work.
> case $enableopt in
> enable_shared | enable_static) ;;
> - *) eval $enableopt="$optarg" ;;
> + *) eval $enableopt='$optarg' ;;
> esac
> ;;
> --norecursion | --no-recursion)
> @@ -157,7 +160,7 @@ do
> *) optarg=yes ;;
> esac
> withopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'`
> - eval $withopt="$optarg"
> + eval $withopt='$optarg'
> ;;
> --without-*)
> withopt=`echo ${option} | sed 's:^--::;s:out::;s:-:_:g'`
> @@ -165,6 +168,11 @@ do
> ;;
> esac
> done
> +}
> +# Use eval to properly handle configure arguments such as
> +# --enable-foo='--enable-a=1 --enable-b=2 --enable-c=3'.
> +eval scan_arguments "${ac_configure_args}"
> +unset scan_arguments
>
> # Only do this if --enable-multilib.
> if [ "${enable_multilib}" = yes ]; then
> @@ -860,7 +868,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then
>
> if eval ${ml_config_env} ${ml_config_shell} ${ml_recprog} \
> --with-multisubdir=${ml_dir} --with-multisrctop=${multisrctop} \
> - ${ac_configure_args} ${ml_config_env} ${ml_srcdiroption} ; then
> + "${ac_configure_args}" ${ml_config_env} ${ml_srcdiroption} ; then
> true
> else
> exit 1
Grüße,
Thomas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 472 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20140522/9852e547/attachment.sig>
More information about the Gcc-patches
mailing list