configure: avoid boilerplate: var=echo $opt | ...
Add and use "assign_opt" instead of copy-pasting subshell assignment.
Slightly faster, and fixes option values with consecutive spaces,
for instance --libdir='/foo bar' where previously `echo $opt | ...`
coalesced IFS chars because $opt was unquoted. (this is still very
likely to break, but at least now not at the options parsing).
Unrelated note:
The code does eval opt=\"$opt\" for every argument, to "reproduce
autotools behavior" (commit 2e7a1af
, 2012-06-12, Thomas Preud'homme).
This is questionable, and not fun (try: --config-x='"; echo "PWNED').
I emailed the author for more info, but didn't get a reply aftre few
days, and without real-world use cases, I think it should be removed.
This commit is contained in:
parent
6f4b384e79
commit
2127206790
1 changed files with 32 additions and 26 deletions
58
configure
vendored
58
configure
vendored
|
@ -64,58 +64,64 @@ test -z "$CFLAGS" && CFLAGS="-Wall -O2"
|
|||
source_path=${0%configure}
|
||||
source_path=${source_path%/}
|
||||
|
||||
# $1: --OPTNAME=VALUE [, $2: NAME to assign-to instead of OPTNAME]
|
||||
assign_opt() {
|
||||
set -- "${2:-${1%%=*}}" "${1#*=}" # [--OPT]NAME VALUE
|
||||
eval ${1#--}=\$2 # no risk of IFS/glob in [OPT]NAME
|
||||
}
|
||||
|
||||
for opt do
|
||||
eval opt=\"$opt\"
|
||||
case "$opt" in
|
||||
--prefix=*) prefix=`echo $opt | cut -d '=' -f 2-`
|
||||
--prefix=*) assign_opt "$opt"
|
||||
;;
|
||||
--exec-prefix=*) execprefix=`echo $opt | cut -d '=' -f 2-`
|
||||
--exec-prefix=*) assign_opt "$opt" execprefix
|
||||
;;
|
||||
--tccdir=*) tccdir=`echo $opt | cut -d '=' -f 2-`
|
||||
--tccdir=*) assign_opt "$opt"
|
||||
;;
|
||||
--bindir=*) bindir=`echo $opt | cut -d '=' -f 2-`
|
||||
--bindir=*) assign_opt "$opt"
|
||||
;;
|
||||
--libdir=*) libdir=`echo $opt | cut -d '=' -f 2-`
|
||||
--libdir=*) assign_opt "$opt"
|
||||
;;
|
||||
--includedir=*) includedir=`echo $opt | cut -d '=' -f 2-`
|
||||
--includedir=*) assign_opt "$opt"
|
||||
;;
|
||||
--sharedir=*) sharedir=`echo $opt | cut -d '=' -f 2-`
|
||||
--sharedir=*) assign_opt "$opt"
|
||||
;;
|
||||
--mandir=*) mandir=`echo $opt | cut -d '=' -f 2-`
|
||||
--mandir=*) assign_opt "$opt"
|
||||
;;
|
||||
--infodir=*) infodir=`echo $opt | cut -d '=' -f 2-`
|
||||
--infodir=*) assign_opt "$opt"
|
||||
;;
|
||||
--docdir=*) docdir=`echo $opt | cut -d '=' -f 2-`
|
||||
--docdir=*) assign_opt "$opt"
|
||||
;;
|
||||
--sysroot=*) sysroot=`echo $opt | cut -d '=' -f 2-`
|
||||
--sysroot=*) assign_opt "$opt"
|
||||
;;
|
||||
--targetos=*) targetos=`echo $opt | cut -d '=' -f 2-`
|
||||
--targetos=*) assign_opt "$opt"
|
||||
;;
|
||||
--source-path=*) source_path=`echo $opt | cut -d '=' -f 2-`
|
||||
--source-path=*) assign_opt "$opt" source_path
|
||||
;;
|
||||
--cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2-`
|
||||
--cross-prefix=*) assign_opt "$opt" cross_prefix
|
||||
;;
|
||||
--cc=*) cc=`echo $opt | cut -d '=' -f 2-`
|
||||
--cc=*) assign_opt "$opt"
|
||||
;;
|
||||
--ar=*) ar=`echo $opt | cut -d '=' -f 2-` ; ar_set="yes"
|
||||
--ar=*) assign_opt "$opt" ; ar_set="yes"
|
||||
;;
|
||||
--extra-cflags=*) CFLAGS="${opt#--extra-cflags=}"
|
||||
--extra-cflags=*) assign_opt "$opt" CFLAGS
|
||||
;;
|
||||
--extra-ldflags=*) LDFLAGS="${opt#--extra-ldflags=}"
|
||||
--extra-ldflags=*) assign_opt "$opt" LDFLAGS
|
||||
;;
|
||||
--extra-libs=*) extralibs="${opt#--extra-libs=}"
|
||||
--extra-libs=*) assign_opt "$opt" extralibs
|
||||
;;
|
||||
--sysincludepaths=*) tcc_sysincludepaths=`echo $opt | cut -d '=' -f 2-`
|
||||
--sysincludepaths=*) assign_opt "$opt" tcc_sysincludepaths
|
||||
;;
|
||||
--libpaths=*) tcc_libpaths=`echo $opt | cut -d '=' -f 2-`
|
||||
--libpaths=*) assign_opt "$opt" tcc_libpaths
|
||||
;;
|
||||
--crtprefix=*) tcc_crtprefix=`echo $opt | cut -d '=' -f 2-`
|
||||
--crtprefix=*) assign_opt "$opt" tcc_crtprefix
|
||||
;;
|
||||
--elfinterp=*) tcc_elfinterp=`echo $opt | cut -d '=' -f 2-`
|
||||
--elfinterp=*) assign_opt "$opt" tcc_elfinterp
|
||||
;;
|
||||
--triplet=*) triplet=`echo $opt | cut -d '=' -f 2-`
|
||||
--triplet=*) assign_opt "$opt"
|
||||
;;
|
||||
--cpu=*) cpu=`echo $opt | cut -d '=' -f 2-`
|
||||
--cpu=*) assign_opt "$opt"
|
||||
;;
|
||||
--dwarf=*) confvars="$confvars dwarf=${opt#*=}"
|
||||
;;
|
||||
|
@ -133,7 +139,7 @@ for opt do
|
|||
;;
|
||||
--with-selinux) confvars="$confvars selinux"
|
||||
;;
|
||||
--tcc-switches=*) tcc_switches=`echo $opt | cut -d '=' -f 2-`
|
||||
--tcc-switches=*) assign_opt "$opt" tcc_switches
|
||||
;;
|
||||
--config-mingw32*) mingw32=$(echo "$opt=yes" | cut -d '=' -f 2)
|
||||
;;
|
||||
|
|
Loading…
Reference in a new issue