This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: config-ml.in: Robustify ac_configure_args parsing.


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

Attachment: pgpVNEC64_jHx.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]