mirror of
git://git.savannah.gnu.org/libtool.git
synced 2024-11-21 01:40:57 +08:00
funclib: refactor quoting methods a bit
From now we have two basic functions to perform string quoting for shell evaluation -- 'func_quote_arg' to quote one argument and 'func_quote' which takes list of arguments to be quoted. New function name-scheme should be more descriptive (previously we called func_quote_for_eval with one argument and also multiple arguments, while we had confusing $func_quote_for_eval_unquoted_result which is redundant for multiple-arguments call). New abstraction allowed us (in an easy way) to implement bash-specific optimization for quoting (using 'printf -v VARNAME %q "$value"', suggested by Eric Blake), this construct may be used on those places where we don't care much about the result aesthetics (its thus not useful for '*.la' generation or for error printing). * gl/build-aux/funclib.sh (func_append_quoted): Use func_quote_arg internally (kept in 'pretty' mode for now). (func_quote): Made to be "main" high-level quoting method taking list of arguments to be quoted into single command. It replaces func_quote_for_{expand,eval}. (func_quote_portable): Implements quoting in shell, falling back to portable sed call (rare cases). (func_quotefast_eval): New internal function using fast bash-specific construct, falling back to func_quote_portable for non-Bash scripts. (func_quote_arg): New function to quote one argument. (func_quote_for_eval): Removed. All callers changed to call func_quote. (func_quote_for_expand): Likewise. * bootstrap: Sync with funclib.sh and options-parser.
This commit is contained in:
parent
16dbc070d3
commit
9187e9a231
343
bootstrap
343
bootstrap
@ -230,7 +230,7 @@ vc_ignore=
|
||||
|
||||
# Source required external libraries:
|
||||
# Set a version string for this script.
|
||||
scriptversion=2015-10-04.22; # UTC
|
||||
scriptversion=2015-10-12.13; # UTC
|
||||
|
||||
# General shell script boiler plate, and helper functions.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
@ -746,16 +746,16 @@ if test yes = "$_G_HAVE_PLUSEQ_OP"; then
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_quote_for_eval "$2"
|
||||
eval "$1+=\\ \$func_quote_for_eval_result"
|
||||
func_quote_arg pretty "$2"
|
||||
eval "$1+=\\ \$func_quote_arg_result"
|
||||
}'
|
||||
else
|
||||
func_append_quoted ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_quote_for_eval "$2"
|
||||
eval "$1=\$$1\\ \$func_quote_for_eval_result"
|
||||
func_quote_arg pretty "$2"
|
||||
eval "$1=\$$1\\ \$func_quote_arg_result"
|
||||
}
|
||||
fi
|
||||
|
||||
@ -1257,135 +1257,184 @@ func_relative_path ()
|
||||
}
|
||||
|
||||
|
||||
# func_quote ARG
|
||||
# --------------
|
||||
# Aesthetically quote one ARG, store the result into $func_quote_result. Note
|
||||
# that we keep attention to performance here (so far O(N) complexity as long as
|
||||
# func_append is O(1)).
|
||||
# func_quote_portable EVAL ARG
|
||||
# ----------------------------
|
||||
# Internal function to portably implement func_quote_arg. Note that we still
|
||||
# keep attention to performance here so we as much as possible try to avoid
|
||||
# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
|
||||
func_quote_portable ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_quote_portable_result=$2
|
||||
|
||||
# one-time-loop (easy break)
|
||||
while true
|
||||
do
|
||||
if $1; then
|
||||
func_quote_portable_result=`$ECHO "$2" | $SED \
|
||||
-e "$sed_double_quote_subst" -e "$sed_double_backslash"`
|
||||
break
|
||||
fi
|
||||
|
||||
# Quote for eval.
|
||||
case $func_quote_portable_result in
|
||||
*[\\\`\"\$]*)
|
||||
case $func_quote_portable_result in
|
||||
*[\[\*\?]*)
|
||||
func_quote_portable_result=`$ECHO "$func_quote_portable_result" | $SED "$sed_quote_subst"`
|
||||
break
|
||||
;;
|
||||
esac
|
||||
|
||||
func_quote_portable_old_IFS=$IFS
|
||||
for _G_char in '\' '`' '"' '$'
|
||||
do
|
||||
# STATE($1) PREV($2) SEPARATOR($3)
|
||||
set start "" ""
|
||||
func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
|
||||
IFS=$_G_char
|
||||
for _G_part in $func_quote_portable_result
|
||||
do
|
||||
case $1 in
|
||||
quote)
|
||||
func_append func_quote_portable_result "$3$2"
|
||||
set quote "$_G_part" "\\$_G_char"
|
||||
;;
|
||||
start)
|
||||
set first "" ""
|
||||
func_quote_portable_result=
|
||||
;;
|
||||
first)
|
||||
set quote "$_G_part" ""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
done
|
||||
IFS=$func_quote_portable_old_IFS
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
break
|
||||
done
|
||||
|
||||
func_quote_portable_unquoted_result=$func_quote_portable_result
|
||||
case $func_quote_portable_result in
|
||||
# double-quote args containing shell metacharacters to delay
|
||||
# word splitting, command substitution and variable expansion
|
||||
# for a subsequent eval.
|
||||
# many bourne shells cannot handle close brackets correctly
|
||||
# in scan sets, so we specify it separately.
|
||||
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
|
||||
func_quote_portable_result=\"$func_quote_portable_result\"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# func_quotefast_eval ARG
|
||||
# -----------------------
|
||||
# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG',
|
||||
# but optimized for speed. Result is stored in $func_quotefast_eval.
|
||||
if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
|
||||
func_quotefast_eval ()
|
||||
{
|
||||
printf -v func_quotefast_eval_result %q "$1"
|
||||
}
|
||||
else
|
||||
func_quotefast_eval ()
|
||||
{
|
||||
func_quote_portable false "$1"
|
||||
func_quotefast_eval_result=$func_quote_portable_result
|
||||
}
|
||||
fi
|
||||
|
||||
|
||||
# func_quote_arg MODEs ARG
|
||||
# ------------------------
|
||||
# Quote one ARG to be evaled later. MODEs argument may contain zero ore more
|
||||
# specifiers listed below separated by ',' character. This function returns two
|
||||
# values:
|
||||
# i) func_quote_arg_result
|
||||
# double-quoted (when needed), suitable for a subsequent eval
|
||||
# ii) func_quote_arg_unquoted_result
|
||||
# has all characters that are still active within double
|
||||
# quotes backslashified. Available only if 'unquoted' is specified.
|
||||
#
|
||||
# Available modes:
|
||||
# ----------------
|
||||
# 'eval' (default)
|
||||
# - escape shell special characters
|
||||
# 'expand'
|
||||
# - the same as 'eval'; but do not quote variable references
|
||||
# 'pretty'
|
||||
# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might
|
||||
# later used in func_quote to get output like: 'echo "a b"' instead of
|
||||
# 'echo a\ b'. This is slower than default on some shells.
|
||||
# 'unquoted'
|
||||
# - produce also $func_quote_arg_unquoted_result which does not contain
|
||||
# wrapping double-quotes.
|
||||
#
|
||||
# Examples for 'func_quote_arg pretty,unquoted string':
|
||||
#
|
||||
# string | *_result | *_unquoted_result
|
||||
# ------------+-----------------------+-------------------
|
||||
# " | \" | \"
|
||||
# a b | "a b" | a b
|
||||
# "a b" | "\"a b\"" | \"a b\"
|
||||
# * | "*" | *
|
||||
# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\"
|
||||
#
|
||||
# Examples for 'func_quote_arg pretty,unquoted,expand string':
|
||||
#
|
||||
# string | *_result | *_unquoted_result
|
||||
# --------------+---------------------+--------------------
|
||||
# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\"
|
||||
func_quote_arg ()
|
||||
{
|
||||
_G_quote_expand=false
|
||||
case ,$1, in
|
||||
*,expand,*)
|
||||
_G_quote_expand=:
|
||||
;;
|
||||
esac
|
||||
|
||||
case ,$1, in
|
||||
*,pretty,*|*,expand,*|*,unquoted,*)
|
||||
func_quote_portable $_G_quote_expand "$2"
|
||||
func_quote_arg_result=$func_quote_portable_result
|
||||
func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
|
||||
;;
|
||||
*)
|
||||
# Faster quote-for-eval for some shells.
|
||||
func_quotefast_eval "$2"
|
||||
func_quote_arg_result=$func_quotefast_eval_result
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# func_quote MODEs ARGs...
|
||||
# ------------------------
|
||||
# Quote all ARGs to be evaled later and join them into single command. See
|
||||
# func_quote_arg's description for more info.
|
||||
func_quote ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_quote_result=$1
|
||||
|
||||
case $func_quote_result in
|
||||
*[\\\`\"\$]*)
|
||||
case $func_quote_result in
|
||||
*'*'*|*'['*)
|
||||
func_quote_result=`$ECHO "$func_quote_result" | $SED "$sed_quote_subst"`
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
func_quote_old_IFS=$IFS
|
||||
for _G_char in '\' '`' '"' '$'
|
||||
do
|
||||
# STATE($1) PREV($2) SEPARATOR($3)
|
||||
set start "" ""
|
||||
func_quote_result=dummy"$_G_char$func_quote_result$_G_char"dummy
|
||||
IFS=$_G_char
|
||||
for _G_part in $func_quote_result
|
||||
do
|
||||
case $1 in
|
||||
quote)
|
||||
func_append func_quote_result "$3$2"
|
||||
set quote "$_G_part" "\\$_G_char"
|
||||
;;
|
||||
start)
|
||||
set first "" ""
|
||||
func_quote_result=
|
||||
;;
|
||||
first)
|
||||
set quote "$_G_part" ""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
IFS=$func_quote_old_IFS
|
||||
done
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# func_quote_for_eval ARG...
|
||||
# --------------------------
|
||||
# Aesthetically quote ARGs to be evaled later.
|
||||
# This function returns two values:
|
||||
# i) func_quote_for_eval_result
|
||||
# double-quoted, suitable for a subsequent eval
|
||||
# ii) func_quote_for_eval_unquoted_result
|
||||
# has all characters that are still active within double
|
||||
# quotes backslashified.
|
||||
func_quote_for_eval ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_quote_for_eval_unquoted_result=
|
||||
func_quote_for_eval_result=
|
||||
_G_func_quote_mode=$1 ; shift
|
||||
func_quote_result=
|
||||
while test 0 -lt $#; do
|
||||
func_quote "$1"
|
||||
_G_unquoted_arg=$func_quote_result
|
||||
if test -n "$func_quote_for_eval_unquoted_result"; then
|
||||
func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
|
||||
func_quote_arg "$_G_func_quote_mode" "$1"
|
||||
if test -n "$func_quote_result"; then
|
||||
func_append func_quote_result " $func_quote_arg_result"
|
||||
else
|
||||
func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
|
||||
fi
|
||||
|
||||
case $_G_unquoted_arg in
|
||||
# Double-quote args containing shell metacharacters to delay
|
||||
# word splitting, command substitution and variable expansion
|
||||
# for a subsequent eval.
|
||||
# Many Bourne shells cannot handle close brackets correctly
|
||||
# in scan sets, so we specify it separately.
|
||||
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
|
||||
_G_quoted_arg=\"$_G_unquoted_arg\"
|
||||
;;
|
||||
*)
|
||||
_G_quoted_arg=$_G_unquoted_arg
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -n "$func_quote_for_eval_result"; then
|
||||
func_append func_quote_for_eval_result " $_G_quoted_arg"
|
||||
else
|
||||
func_append func_quote_for_eval_result "$_G_quoted_arg"
|
||||
func_append func_quote_result "$func_quote_arg_result"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# func_quote_for_expand ARG
|
||||
# -------------------------
|
||||
# Aesthetically quote ARG to be evaled later; same as above,
|
||||
# but do not quote variable references.
|
||||
func_quote_for_expand ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
case $1 in
|
||||
*[\\\`\"]*)
|
||||
_G_arg=`$ECHO "$1" | $SED \
|
||||
-e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
|
||||
*)
|
||||
_G_arg=$1 ;;
|
||||
esac
|
||||
|
||||
case $_G_arg in
|
||||
# Double-quote args containing shell metacharacters to delay
|
||||
# word splitting and command substitution for a subsequent eval.
|
||||
# Many Bourne shells cannot handle close brackets correctly
|
||||
# in scan sets, so we specify it separately.
|
||||
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
|
||||
_G_arg=\"$_G_arg\"
|
||||
;;
|
||||
esac
|
||||
|
||||
func_quote_for_expand_result=$_G_arg
|
||||
}
|
||||
|
||||
|
||||
# func_stripname PREFIX SUFFIX NAME
|
||||
# ---------------------------------
|
||||
# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
|
||||
@ -1428,8 +1477,8 @@ func_show_eval ()
|
||||
_G_cmd=$1
|
||||
_G_fail_exp=${2-':'}
|
||||
|
||||
func_quote_for_expand "$_G_cmd"
|
||||
eval "func_notquiet $func_quote_for_expand_result"
|
||||
func_quote_arg pretty,expand "$_G_cmd"
|
||||
eval "func_notquiet $func_quote_arg_result"
|
||||
|
||||
$opt_dry_run || {
|
||||
eval "$_G_cmd"
|
||||
@ -1454,8 +1503,8 @@ func_show_eval_locale ()
|
||||
_G_fail_exp=${2-':'}
|
||||
|
||||
$opt_quiet || {
|
||||
func_quote_for_expand "$_G_cmd"
|
||||
eval "func_echo $func_quote_for_expand_result"
|
||||
func_quote_arg expand,pretty "$_G_cmd"
|
||||
eval "func_echo $func_quote_arg_result"
|
||||
}
|
||||
|
||||
$opt_dry_run || {
|
||||
@ -1583,7 +1632,7 @@ func_lt_ver ()
|
||||
#! /bin/sh
|
||||
|
||||
# Set a version string for this script.
|
||||
scriptversion=2015-10-07.11; # UTC
|
||||
scriptversion=2015-10-12.13; # UTC
|
||||
|
||||
# A portable, pluggable option parser for Bourne shell.
|
||||
# Written by Gary V. Vaughan, 2010
|
||||
@ -1793,8 +1842,8 @@ func_run_hooks ()
|
||||
# '
|
||||
# # No change in '$@' (ignored completely by this hook). There is
|
||||
# # no need to do the equivalent (but slower) action:
|
||||
# # func_quote_for_eval ${1+"$@"}
|
||||
# # my_options_prep_result=$func_quote_for_eval_result
|
||||
# # func_quote eval ${1+"$@"}
|
||||
# # my_options_prep_result=$func_quote_result
|
||||
# false
|
||||
# }
|
||||
# func_add_hook func_options_prep my_options_prep
|
||||
@ -1830,8 +1879,8 @@ func_run_hooks ()
|
||||
# done
|
||||
#
|
||||
# if $args_changed; then
|
||||
# func_quote_for_eval ${1+"$@"}
|
||||
# my_silent_option_result=$func_quote_for_eval_result
|
||||
# func_quote eval ${1+"$@"}
|
||||
# my_silent_option_result=$func_quote_result
|
||||
# fi
|
||||
#
|
||||
# $args_changed
|
||||
@ -1898,8 +1947,8 @@ func_options ()
|
||||
if $_G_rc_options; then
|
||||
func_options_result=$_G_res_var
|
||||
else
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
func_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
func_options_result=$func_quote_result
|
||||
fi
|
||||
|
||||
$_G_rc_options
|
||||
@ -2042,8 +2091,8 @@ func_parse_options ()
|
||||
|
||||
if $_G_rc_parse_options; then
|
||||
# save modified positional parameters for caller
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
func_parse_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
func_parse_options_result=$func_quote_result
|
||||
fi
|
||||
|
||||
$_G_rc_parse_options
|
||||
@ -2753,7 +2802,7 @@ test extract-trace = "$progname" && func_main "$@"
|
||||
# End:
|
||||
|
||||
# Set a version string for *this* script.
|
||||
scriptversion=2015-01-20.17; # UTC
|
||||
scriptversion=2015-10-12.13; # UTC
|
||||
|
||||
|
||||
## ------------------- ##
|
||||
@ -2781,8 +2830,8 @@ func_bootstrap ()
|
||||
|
||||
# Save the current positional parameters to prevent them being
|
||||
# corrupted by calls to 'set' in 'func_init'.
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
_G_saved_positional_parameters=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
_G_saved_positional_parameters=$func_quote_result
|
||||
|
||||
# Initialisation.
|
||||
func_init
|
||||
@ -4821,8 +4870,8 @@ func_show_eval ()
|
||||
_G_fail_exp=${2-':'}
|
||||
|
||||
${opt_silent-'false'} || {
|
||||
func_quote_for_eval $_G_cmd
|
||||
eval func_truncate_cmd $func_quote_for_eval_result
|
||||
func_quote eval $_G_cmd
|
||||
eval func_truncate_cmd $func_quote_result
|
||||
func_echo "running: $tc_bold$func_truncate_cmd_result$tc_reset"
|
||||
}
|
||||
|
||||
@ -5209,8 +5258,8 @@ bootstrap_options_prep ()
|
||||
opt_skip_po=false
|
||||
|
||||
# Pass back the list of options we consumed.
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
bootstrap_options_prep_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
bootstrap_options_prep_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_options_prep bootstrap_options_prep
|
||||
|
||||
@ -5260,8 +5309,8 @@ bootstrap_parse_options ()
|
||||
done
|
||||
|
||||
# save modified positional parameters for caller
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
bootstrap_parse_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
bootstrap_parse_options_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_parse_options bootstrap_parse_options
|
||||
|
||||
@ -5279,8 +5328,8 @@ bootstrap_validate_options ()
|
||||
&& func_fatal_help "too many arguments"
|
||||
|
||||
# Pass back the (empty) list of unconsumed options.
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
bootstrap_validate_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
bootstrap_validate_options_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_validate_options bootstrap_validate_options
|
||||
|
||||
|
@ -390,8 +390,8 @@ libtool_options_prep ()
|
||||
|
||||
if $_G_rc_lt_options_prep; then
|
||||
# Pass back the list of options.
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
libtool_options_prep_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
libtool_options_prep_result=$func_quote_result
|
||||
fi
|
||||
|
||||
$_G_rc_lt_options_prep
|
||||
@ -497,8 +497,8 @@ libtool_parse_options ()
|
||||
|
||||
if $_G_rc_lt_parse_options; then
|
||||
# save modified positional parameters for caller
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
libtool_parse_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
libtool_parse_options_result=$func_quote_result
|
||||
fi
|
||||
|
||||
$_G_rc_lt_parse_options
|
||||
@ -558,8 +558,8 @@ libtool_validate_options ()
|
||||
}
|
||||
|
||||
# Pass back the unparsed argument list
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
libtool_validate_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
libtool_validate_options_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_validate_options libtool_validate_options
|
||||
|
||||
@ -1525,8 +1525,8 @@ func_mode_compile ()
|
||||
esac
|
||||
done
|
||||
|
||||
func_quote_for_eval "$libobj"
|
||||
test "X$libobj" != "X$func_quote_for_eval_result" \
|
||||
func_quote_arg pretty "$libobj"
|
||||
test "X$libobj" != "X$func_quote_arg_result" \
|
||||
&& $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
|
||||
&& func_warning "libobj name '$libobj' may not contain shell special characters."
|
||||
func_dirname_and_basename "$obj" "/" ""
|
||||
@ -1599,8 +1599,8 @@ compiler."
|
||||
|
||||
func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
|
||||
srcfile=$func_to_tool_file_result
|
||||
func_quote_for_eval "$srcfile"
|
||||
qsrcfile=$func_quote_for_eval_result
|
||||
func_quote_arg pretty "$srcfile"
|
||||
qsrcfile=$func_quote_arg_result
|
||||
|
||||
# Only build a PIC object if we are building libtool libraries.
|
||||
if test yes = "$build_libtool_libs"; then
|
||||
@ -2203,8 +2203,8 @@ func_mode_install ()
|
||||
case $nonopt in *shtool*) :;; *) false;; esac
|
||||
then
|
||||
# Aesthetically quote it.
|
||||
func_quote_for_eval "$nonopt"
|
||||
install_prog="$func_quote_for_eval_result "
|
||||
func_quote_arg pretty "$nonopt"
|
||||
install_prog="$func_quote_arg_result "
|
||||
arg=$1
|
||||
shift
|
||||
else
|
||||
@ -2214,8 +2214,8 @@ func_mode_install ()
|
||||
|
||||
# The real first argument should be the name of the installation program.
|
||||
# Aesthetically quote it.
|
||||
func_quote_for_eval "$arg"
|
||||
func_append install_prog "$func_quote_for_eval_result"
|
||||
func_quote_arg pretty "$arg"
|
||||
func_append install_prog "$func_quote_arg_result"
|
||||
install_shared_prog=$install_prog
|
||||
case " $install_prog " in
|
||||
*[\\\ /]cp\ *) install_cp=: ;;
|
||||
@ -2272,12 +2272,12 @@ func_mode_install ()
|
||||
esac
|
||||
|
||||
# Aesthetically quote the argument.
|
||||
func_quote_for_eval "$arg"
|
||||
func_append install_prog " $func_quote_for_eval_result"
|
||||
func_quote_arg pretty "$arg"
|
||||
func_append install_prog " $func_quote_arg_result"
|
||||
if test -n "$arg2"; then
|
||||
func_quote_for_eval "$arg2"
|
||||
func_quote_arg pretty "$arg2"
|
||||
fi
|
||||
func_append install_shared_prog " $func_quote_for_eval_result"
|
||||
func_append install_shared_prog " $func_quote_arg_result"
|
||||
done
|
||||
|
||||
test -z "$install_prog" && \
|
||||
@ -2288,8 +2288,8 @@ func_mode_install ()
|
||||
|
||||
if test -n "$install_override_mode" && $no_mode; then
|
||||
if $install_cp; then :; else
|
||||
func_quote_for_eval "$install_override_mode"
|
||||
func_append install_shared_prog " -m $func_quote_for_eval_result"
|
||||
func_quote_arg pretty "$install_override_mode"
|
||||
func_append install_shared_prog " -m $func_quote_arg_result"
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -2585,8 +2585,8 @@ func_mode_install ()
|
||||
relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
|
||||
|
||||
$opt_quiet || {
|
||||
func_quote_for_expand "$relink_command"
|
||||
eval "func_echo $func_quote_for_expand_result"
|
||||
func_quote_arg expand,pretty "$relink_command"
|
||||
eval "func_echo $func_quote_arg_result"
|
||||
}
|
||||
if eval "$relink_command"; then :
|
||||
else
|
||||
@ -3365,8 +3365,8 @@ else
|
||||
if test \"\$libtool_execute_magic\" != \"$magic\"; then
|
||||
file=\"\$0\""
|
||||
|
||||
func_quote "$ECHO"
|
||||
qECHO=$func_quote_result
|
||||
func_quote_arg pretty "$ECHO"
|
||||
qECHO=$func_quote_arg_result
|
||||
$ECHO "\
|
||||
|
||||
# A function that is used when there is no print builtin or printf.
|
||||
@ -3376,7 +3376,7 @@ func_fallback_echo ()
|
||||
\$1
|
||||
_LTECHO_EOF'
|
||||
}
|
||||
ECHO=\"$qECHO\"
|
||||
ECHO=$qECHO
|
||||
fi
|
||||
|
||||
# Very basic option parsing. These options are (a) specific to
|
||||
@ -4719,9 +4719,9 @@ func_mode_link ()
|
||||
while test "$#" -gt 0; do
|
||||
arg=$1
|
||||
shift
|
||||
func_quote_for_eval "$arg"
|
||||
qarg=$func_quote_for_eval_unquoted_result
|
||||
func_append libtool_args " $func_quote_for_eval_result"
|
||||
func_quote_arg pretty,unquoted "$arg"
|
||||
qarg=$func_quote_arg_unquoted_result
|
||||
func_append libtool_args " $func_quote_arg_result"
|
||||
|
||||
# If the previous option needs an argument, assign it.
|
||||
if test -n "$prev"; then
|
||||
@ -5319,9 +5319,9 @@ func_mode_link ()
|
||||
save_ifs=$IFS; IFS=,
|
||||
for flag in $args; do
|
||||
IFS=$save_ifs
|
||||
func_quote_for_eval "$flag"
|
||||
func_append arg " $func_quote_for_eval_result"
|
||||
func_append compiler_flags " $func_quote_for_eval_result"
|
||||
func_quote_arg pretty "$flag"
|
||||
func_append arg " $func_quote_arg_result"
|
||||
func_append compiler_flags " $func_quote_arg_result"
|
||||
done
|
||||
IFS=$save_ifs
|
||||
func_stripname ' ' '' "$arg"
|
||||
@ -5335,10 +5335,10 @@ func_mode_link ()
|
||||
save_ifs=$IFS; IFS=,
|
||||
for flag in $args; do
|
||||
IFS=$save_ifs
|
||||
func_quote_for_eval "$flag"
|
||||
func_append arg " $wl$func_quote_for_eval_result"
|
||||
func_append compiler_flags " $wl$func_quote_for_eval_result"
|
||||
func_append linker_flags " $func_quote_for_eval_result"
|
||||
func_quote_arg pretty "$flag"
|
||||
func_append arg " $wl$func_quote_arg_result"
|
||||
func_append compiler_flags " $wl$func_quote_arg_result"
|
||||
func_append linker_flags " $func_quote_arg_result"
|
||||
done
|
||||
IFS=$save_ifs
|
||||
func_stripname ' ' '' "$arg"
|
||||
@ -5362,8 +5362,8 @@ func_mode_link ()
|
||||
|
||||
# -msg_* for osf cc
|
||||
-msg_*)
|
||||
func_quote_for_eval "$arg"
|
||||
arg=$func_quote_for_eval_result
|
||||
func_quote_arg pretty "$arg"
|
||||
arg=$func_quote_arg_result
|
||||
;;
|
||||
|
||||
# Flags to be passed through unchanged, with rationale:
|
||||
@ -5386,8 +5386,8 @@ func_mode_link ()
|
||||
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
|
||||
-O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
|
||||
-specs=*)
|
||||
func_quote_for_eval "$arg"
|
||||
arg=$func_quote_for_eval_result
|
||||
func_quote_arg pretty "$arg"
|
||||
arg=$func_quote_arg_result
|
||||
func_append compile_command " $arg"
|
||||
func_append finalize_command " $arg"
|
||||
func_append compiler_flags " $arg"
|
||||
@ -5408,15 +5408,15 @@ func_mode_link ()
|
||||
continue
|
||||
else
|
||||
# Otherwise treat like 'Some other compiler flag' below
|
||||
func_quote_for_eval "$arg"
|
||||
arg=$func_quote_for_eval_result
|
||||
func_quote_arg pretty "$arg"
|
||||
arg=$func_quote_arg_result
|
||||
fi
|
||||
;;
|
||||
|
||||
# Some other compiler flag.
|
||||
-* | +*)
|
||||
func_quote_for_eval "$arg"
|
||||
arg=$func_quote_for_eval_result
|
||||
func_quote_arg pretty "$arg"
|
||||
arg=$func_quote_arg_result
|
||||
;;
|
||||
|
||||
*.$objext)
|
||||
@ -5536,8 +5536,8 @@ func_mode_link ()
|
||||
*)
|
||||
# Unknown arguments in both finalize_command and compile_command need
|
||||
# to be aesthetically quoted because they are evaled later.
|
||||
func_quote_for_eval "$arg"
|
||||
arg=$func_quote_for_eval_result
|
||||
func_quote_arg pretty "$arg"
|
||||
arg=$func_quote_arg_result
|
||||
;;
|
||||
esac # arg
|
||||
|
||||
@ -8043,8 +8043,8 @@ EOF
|
||||
for cmd in $concat_cmds; do
|
||||
IFS=$save_ifs
|
||||
$opt_quiet || {
|
||||
func_quote_for_expand "$cmd"
|
||||
eval "func_echo $func_quote_for_expand_result"
|
||||
func_quote_arg expand,pretty "$cmd"
|
||||
eval "func_echo $func_quote_arg_result"
|
||||
}
|
||||
$opt_dry_run || eval "$cmd" || {
|
||||
lt_exit=$?
|
||||
@ -8137,8 +8137,8 @@ EOF
|
||||
eval cmd=\"$cmd\"
|
||||
IFS=$save_ifs
|
||||
$opt_quiet || {
|
||||
func_quote_for_expand "$cmd"
|
||||
eval "func_echo $func_quote_for_expand_result"
|
||||
func_quote_arg expand,pretty "$cmd"
|
||||
eval "func_echo $func_quote_arg_result"
|
||||
}
|
||||
$opt_dry_run || eval "$cmd" || {
|
||||
lt_exit=$?
|
||||
@ -8612,12 +8612,12 @@ EOF
|
||||
elif eval var_value=\$$var; test -z "$var_value"; then
|
||||
relink_command="$var=; export $var; $relink_command"
|
||||
else
|
||||
func_quote_for_eval "$var_value"
|
||||
relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
|
||||
func_quote_arg pretty "$var_value"
|
||||
relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
|
||||
fi
|
||||
done
|
||||
func_quote "(cd `pwd`; $relink_command)"
|
||||
relink_command=$func_quote_result
|
||||
func_quote_arg pretty,unquoted "(cd `pwd`; $relink_command)"
|
||||
relink_command=$func_quote_arg_unquoted_result
|
||||
fi
|
||||
|
||||
# Only actually do things if not in dry run mode.
|
||||
@ -8857,14 +8857,14 @@ EOF
|
||||
elif eval var_value=\$$var; test -z "$var_value"; then
|
||||
relink_command="$var=; export $var; $relink_command"
|
||||
else
|
||||
func_quote_for_eval "$var_value"
|
||||
relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
|
||||
func_quote_arg pretty,unquoted "$var_value"
|
||||
relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
|
||||
fi
|
||||
done
|
||||
# Quote the link command for shipping.
|
||||
relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
|
||||
func_quote "$relink_command"
|
||||
relink_command=$func_quote_result
|
||||
func_quote_arg pretty,unquoted "$relink_command"
|
||||
relink_command=$func_quote_arg_unquoted_result
|
||||
if test yes = "$hardcode_automatic"; then
|
||||
relink_command=
|
||||
fi
|
||||
|
@ -232,7 +232,7 @@ vc_ignore=
|
||||
. `echo "$0" |${SED-sed} 's|[^/]*$||'`"extract-trace"
|
||||
|
||||
# Set a version string for *this* script.
|
||||
scriptversion=2015-01-20.17; # UTC
|
||||
scriptversion=2015-10-12.13; # UTC
|
||||
|
||||
|
||||
## ------------------- ##
|
||||
@ -260,8 +260,8 @@ func_bootstrap ()
|
||||
|
||||
# Save the current positional parameters to prevent them being
|
||||
# corrupted by calls to 'set' in 'func_init'.
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
_G_saved_positional_parameters=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
_G_saved_positional_parameters=$func_quote_result
|
||||
|
||||
# Initialisation.
|
||||
func_init
|
||||
@ -2300,8 +2300,8 @@ func_show_eval ()
|
||||
_G_fail_exp=${2-':'}
|
||||
|
||||
${opt_silent-'false'} || {
|
||||
func_quote_for_eval $_G_cmd
|
||||
eval func_truncate_cmd $func_quote_for_eval_result
|
||||
func_quote eval $_G_cmd
|
||||
eval func_truncate_cmd $func_quote_result
|
||||
func_echo "running: $tc_bold$func_truncate_cmd_result$tc_reset"
|
||||
}
|
||||
|
||||
@ -2688,8 +2688,8 @@ bootstrap_options_prep ()
|
||||
opt_skip_po=false
|
||||
|
||||
# Pass back the list of options we consumed.
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
bootstrap_options_prep_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
bootstrap_options_prep_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_options_prep bootstrap_options_prep
|
||||
|
||||
@ -2739,8 +2739,8 @@ bootstrap_parse_options ()
|
||||
done
|
||||
|
||||
# save modified positional parameters for caller
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
bootstrap_parse_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
bootstrap_parse_options_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_parse_options bootstrap_parse_options
|
||||
|
||||
@ -2758,8 +2758,8 @@ bootstrap_validate_options ()
|
||||
&& func_fatal_help "too many arguments"
|
||||
|
||||
# Pass back the (empty) list of unconsumed options.
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
bootstrap_validate_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
bootstrap_validate_options_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_validate_options bootstrap_validate_options
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Set a version string for this script.
|
||||
scriptversion=2015-10-04.22; # UTC
|
||||
scriptversion=2015-10-12.13; # UTC
|
||||
|
||||
# General shell script boiler plate, and helper functions.
|
||||
# Written by Gary V. Vaughan, 2004
|
||||
@ -515,16 +515,16 @@ if test yes = "$_G_HAVE_PLUSEQ_OP"; then
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_quote_for_eval "$2"
|
||||
eval "$1+=\\ \$func_quote_for_eval_result"
|
||||
func_quote_arg pretty "$2"
|
||||
eval "$1+=\\ \$func_quote_arg_result"
|
||||
}'
|
||||
else
|
||||
func_append_quoted ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_quote_for_eval "$2"
|
||||
eval "$1=\$$1\\ \$func_quote_for_eval_result"
|
||||
func_quote_arg pretty "$2"
|
||||
eval "$1=\$$1\\ \$func_quote_arg_result"
|
||||
}
|
||||
fi
|
||||
|
||||
@ -1026,135 +1026,184 @@ func_relative_path ()
|
||||
}
|
||||
|
||||
|
||||
# func_quote ARG
|
||||
# --------------
|
||||
# Aesthetically quote one ARG, store the result into $func_quote_result. Note
|
||||
# that we keep attention to performance here (so far O(N) complexity as long as
|
||||
# func_append is O(1)).
|
||||
# func_quote_portable EVAL ARG
|
||||
# ----------------------------
|
||||
# Internal function to portably implement func_quote_arg. Note that we still
|
||||
# keep attention to performance here so we as much as possible try to avoid
|
||||
# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
|
||||
func_quote_portable ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_quote_portable_result=$2
|
||||
|
||||
# one-time-loop (easy break)
|
||||
while true
|
||||
do
|
||||
if $1; then
|
||||
func_quote_portable_result=`$ECHO "$2" | $SED \
|
||||
-e "$sed_double_quote_subst" -e "$sed_double_backslash"`
|
||||
break
|
||||
fi
|
||||
|
||||
# Quote for eval.
|
||||
case $func_quote_portable_result in
|
||||
*[\\\`\"\$]*)
|
||||
case $func_quote_portable_result in
|
||||
*[\[\*\?]*)
|
||||
func_quote_portable_result=`$ECHO "$func_quote_portable_result" | $SED "$sed_quote_subst"`
|
||||
break
|
||||
;;
|
||||
esac
|
||||
|
||||
func_quote_portable_old_IFS=$IFS
|
||||
for _G_char in '\' '`' '"' '$'
|
||||
do
|
||||
# STATE($1) PREV($2) SEPARATOR($3)
|
||||
set start "" ""
|
||||
func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
|
||||
IFS=$_G_char
|
||||
for _G_part in $func_quote_portable_result
|
||||
do
|
||||
case $1 in
|
||||
quote)
|
||||
func_append func_quote_portable_result "$3$2"
|
||||
set quote "$_G_part" "\\$_G_char"
|
||||
;;
|
||||
start)
|
||||
set first "" ""
|
||||
func_quote_portable_result=
|
||||
;;
|
||||
first)
|
||||
set quote "$_G_part" ""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
done
|
||||
IFS=$func_quote_portable_old_IFS
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
break
|
||||
done
|
||||
|
||||
func_quote_portable_unquoted_result=$func_quote_portable_result
|
||||
case $func_quote_portable_result in
|
||||
# double-quote args containing shell metacharacters to delay
|
||||
# word splitting, command substitution and variable expansion
|
||||
# for a subsequent eval.
|
||||
# many bourne shells cannot handle close brackets correctly
|
||||
# in scan sets, so we specify it separately.
|
||||
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
|
||||
func_quote_portable_result=\"$func_quote_portable_result\"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# func_quotefast_eval ARG
|
||||
# -----------------------
|
||||
# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG',
|
||||
# but optimized for speed. Result is stored in $func_quotefast_eval.
|
||||
if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
|
||||
func_quotefast_eval ()
|
||||
{
|
||||
printf -v func_quotefast_eval_result %q "$1"
|
||||
}
|
||||
else
|
||||
func_quotefast_eval ()
|
||||
{
|
||||
func_quote_portable false "$1"
|
||||
func_quotefast_eval_result=$func_quote_portable_result
|
||||
}
|
||||
fi
|
||||
|
||||
|
||||
# func_quote_arg MODEs ARG
|
||||
# ------------------------
|
||||
# Quote one ARG to be evaled later. MODEs argument may contain zero ore more
|
||||
# specifiers listed below separated by ',' character. This function returns two
|
||||
# values:
|
||||
# i) func_quote_arg_result
|
||||
# double-quoted (when needed), suitable for a subsequent eval
|
||||
# ii) func_quote_arg_unquoted_result
|
||||
# has all characters that are still active within double
|
||||
# quotes backslashified. Available only if 'unquoted' is specified.
|
||||
#
|
||||
# Available modes:
|
||||
# ----------------
|
||||
# 'eval' (default)
|
||||
# - escape shell special characters
|
||||
# 'expand'
|
||||
# - the same as 'eval'; but do not quote variable references
|
||||
# 'pretty'
|
||||
# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might
|
||||
# later used in func_quote to get output like: 'echo "a b"' instead of
|
||||
# 'echo a\ b'. This is slower than default on some shells.
|
||||
# 'unquoted'
|
||||
# - produce also $func_quote_arg_unquoted_result which does not contain
|
||||
# wrapping double-quotes.
|
||||
#
|
||||
# Examples for 'func_quote_arg pretty,unquoted string':
|
||||
#
|
||||
# string | *_result | *_unquoted_result
|
||||
# ------------+-----------------------+-------------------
|
||||
# " | \" | \"
|
||||
# a b | "a b" | a b
|
||||
# "a b" | "\"a b\"" | \"a b\"
|
||||
# * | "*" | *
|
||||
# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\"
|
||||
#
|
||||
# Examples for 'func_quote_arg pretty,unquoted,expand string':
|
||||
#
|
||||
# string | *_result | *_unquoted_result
|
||||
# --------------+---------------------+--------------------
|
||||
# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\"
|
||||
func_quote_arg ()
|
||||
{
|
||||
_G_quote_expand=false
|
||||
case ,$1, in
|
||||
*,expand,*)
|
||||
_G_quote_expand=:
|
||||
;;
|
||||
esac
|
||||
|
||||
case ,$1, in
|
||||
*,pretty,*|*,expand,*|*,unquoted,*)
|
||||
func_quote_portable $_G_quote_expand "$2"
|
||||
func_quote_arg_result=$func_quote_portable_result
|
||||
func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
|
||||
;;
|
||||
*)
|
||||
# Faster quote-for-eval for some shells.
|
||||
func_quotefast_eval "$2"
|
||||
func_quote_arg_result=$func_quotefast_eval_result
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# func_quote MODEs ARGs...
|
||||
# ------------------------
|
||||
# Quote all ARGs to be evaled later and join them into single command. See
|
||||
# func_quote_arg's description for more info.
|
||||
func_quote ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_quote_result=$1
|
||||
|
||||
case $func_quote_result in
|
||||
*[\\\`\"\$]*)
|
||||
case $func_quote_result in
|
||||
*[\[\*\?]*)
|
||||
func_quote_result=`$ECHO "$func_quote_result" | $SED "$sed_quote_subst"`
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
func_quote_old_IFS=$IFS
|
||||
for _G_char in '\' '`' '"' '$'
|
||||
do
|
||||
# STATE($1) PREV($2) SEPARATOR($3)
|
||||
set start "" ""
|
||||
func_quote_result=dummy"$_G_char$func_quote_result$_G_char"dummy
|
||||
IFS=$_G_char
|
||||
for _G_part in $func_quote_result
|
||||
do
|
||||
case $1 in
|
||||
quote)
|
||||
func_append func_quote_result "$3$2"
|
||||
set quote "$_G_part" "\\$_G_char"
|
||||
;;
|
||||
start)
|
||||
set first "" ""
|
||||
func_quote_result=
|
||||
;;
|
||||
first)
|
||||
set quote "$_G_part" ""
|
||||
;;
|
||||
esac
|
||||
done
|
||||
IFS=$func_quote_old_IFS
|
||||
done
|
||||
;;
|
||||
*) ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# func_quote_for_eval ARG...
|
||||
# --------------------------
|
||||
# Aesthetically quote ARGs to be evaled later.
|
||||
# This function returns two values:
|
||||
# i) func_quote_for_eval_result
|
||||
# double-quoted, suitable for a subsequent eval
|
||||
# ii) func_quote_for_eval_unquoted_result
|
||||
# has all characters that are still active within double
|
||||
# quotes backslashified.
|
||||
func_quote_for_eval ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
func_quote_for_eval_unquoted_result=
|
||||
func_quote_for_eval_result=
|
||||
_G_func_quote_mode=$1 ; shift
|
||||
func_quote_result=
|
||||
while test 0 -lt $#; do
|
||||
func_quote "$1"
|
||||
_G_unquoted_arg=$func_quote_result
|
||||
if test -n "$func_quote_for_eval_unquoted_result"; then
|
||||
func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
|
||||
func_quote_arg "$_G_func_quote_mode" "$1"
|
||||
if test -n "$func_quote_result"; then
|
||||
func_append func_quote_result " $func_quote_arg_result"
|
||||
else
|
||||
func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
|
||||
fi
|
||||
|
||||
case $_G_unquoted_arg in
|
||||
# Double-quote args containing shell metacharacters to delay
|
||||
# word splitting, command substitution and variable expansion
|
||||
# for a subsequent eval.
|
||||
# Many Bourne shells cannot handle close brackets correctly
|
||||
# in scan sets, so we specify it separately.
|
||||
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
|
||||
_G_quoted_arg=\"$_G_unquoted_arg\"
|
||||
;;
|
||||
*)
|
||||
_G_quoted_arg=$_G_unquoted_arg
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -n "$func_quote_for_eval_result"; then
|
||||
func_append func_quote_for_eval_result " $_G_quoted_arg"
|
||||
else
|
||||
func_append func_quote_for_eval_result "$_G_quoted_arg"
|
||||
func_append func_quote_result "$func_quote_arg_result"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# func_quote_for_expand ARG
|
||||
# -------------------------
|
||||
# Aesthetically quote ARG to be evaled later; same as above,
|
||||
# but do not quote variable references.
|
||||
func_quote_for_expand ()
|
||||
{
|
||||
$debug_cmd
|
||||
|
||||
case $1 in
|
||||
*[\\\`\"]*)
|
||||
_G_arg=`$ECHO "$1" | $SED \
|
||||
-e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
|
||||
*)
|
||||
_G_arg=$1 ;;
|
||||
esac
|
||||
|
||||
case $_G_arg in
|
||||
# Double-quote args containing shell metacharacters to delay
|
||||
# word splitting and command substitution for a subsequent eval.
|
||||
# Many Bourne shells cannot handle close brackets correctly
|
||||
# in scan sets, so we specify it separately.
|
||||
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
|
||||
_G_arg=\"$_G_arg\"
|
||||
;;
|
||||
esac
|
||||
|
||||
func_quote_for_expand_result=$_G_arg
|
||||
}
|
||||
|
||||
|
||||
# func_stripname PREFIX SUFFIX NAME
|
||||
# ---------------------------------
|
||||
# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
|
||||
@ -1197,8 +1246,8 @@ func_show_eval ()
|
||||
_G_cmd=$1
|
||||
_G_fail_exp=${2-':'}
|
||||
|
||||
func_quote_for_expand "$_G_cmd"
|
||||
eval "func_notquiet $func_quote_for_expand_result"
|
||||
func_quote_arg pretty,expand "$_G_cmd"
|
||||
eval "func_notquiet $func_quote_arg_result"
|
||||
|
||||
$opt_dry_run || {
|
||||
eval "$_G_cmd"
|
||||
@ -1223,8 +1272,8 @@ func_show_eval_locale ()
|
||||
_G_fail_exp=${2-':'}
|
||||
|
||||
$opt_quiet || {
|
||||
func_quote_for_expand "$_G_cmd"
|
||||
eval "func_echo $func_quote_for_expand_result"
|
||||
func_quote_arg expand,pretty "$_G_cmd"
|
||||
eval "func_echo $func_quote_arg_result"
|
||||
}
|
||||
|
||||
$opt_dry_run || {
|
||||
|
@ -1,7 +1,7 @@
|
||||
#! /bin/sh
|
||||
|
||||
# Set a version string for this script.
|
||||
scriptversion=2015-10-07.11; # UTC
|
||||
scriptversion=2015-10-12.13; # UTC
|
||||
|
||||
# A portable, pluggable option parser for Bourne shell.
|
||||
# Written by Gary V. Vaughan, 2010
|
||||
@ -211,8 +211,8 @@ func_run_hooks ()
|
||||
# '
|
||||
# # No change in '$@' (ignored completely by this hook). There is
|
||||
# # no need to do the equivalent (but slower) action:
|
||||
# # func_quote_for_eval ${1+"$@"}
|
||||
# # my_options_prep_result=$func_quote_for_eval_result
|
||||
# # func_quote eval ${1+"$@"}
|
||||
# # my_options_prep_result=$func_quote_result
|
||||
# false
|
||||
# }
|
||||
# func_add_hook func_options_prep my_options_prep
|
||||
@ -248,8 +248,8 @@ func_run_hooks ()
|
||||
# done
|
||||
#
|
||||
# if $args_changed; then
|
||||
# func_quote_for_eval ${1+"$@"}
|
||||
# my_silent_option_result=$func_quote_for_eval_result
|
||||
# func_quote eval ${1+"$@"}
|
||||
# my_silent_option_result=$func_quote_result
|
||||
# fi
|
||||
#
|
||||
# $args_changed
|
||||
@ -316,8 +316,8 @@ func_options ()
|
||||
if $_G_rc_options; then
|
||||
func_options_result=$_G_res_var
|
||||
else
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
func_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
func_options_result=$func_quote_result
|
||||
fi
|
||||
|
||||
$_G_rc_options
|
||||
@ -460,8 +460,8 @@ func_parse_options ()
|
||||
|
||||
if $_G_rc_parse_options; then
|
||||
# save modified positional parameters for caller
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
func_parse_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
func_parse_options_result=$func_quote_result
|
||||
fi
|
||||
|
||||
$_G_rc_parse_options
|
||||
|
@ -390,8 +390,8 @@ my_silent_option ()
|
||||
esac
|
||||
|
||||
# return modified option list
|
||||
func_quote_for_eval $@{1+"$@@"@}
|
||||
func_run_hooks_result=$func_quote_for_eval_result
|
||||
func_quote eval $@{1+"$@@"@}
|
||||
func_run_hooks_result=$func_quote_result
|
||||
@}
|
||||
func_add_hook func_parse_options my_silent_option
|
||||
@end smallexample
|
||||
|
@ -151,11 +151,11 @@ libtoolize_environment_options ()
|
||||
|
||||
# Pass back the updated list of options.
|
||||
if test -n "$envopts"; then
|
||||
func_quote_for_eval "$envopts" ${1+"$@"}
|
||||
func_quote eval "$envopts" ${1+"$@"}
|
||||
else
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
func_quote eval ${1+"$@"}
|
||||
fi
|
||||
libtoolize_environment_options_result=$func_quote_for_eval_result
|
||||
libtoolize_environment_options_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_options_prep libtoolize_environment_options
|
||||
|
||||
@ -181,8 +181,8 @@ libtoolize_options_prep ()
|
||||
ltdl_mode=
|
||||
|
||||
# Pass back the list of options.
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
libtoolize_options_prep_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
libtoolize_options_prep_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_options_prep libtoolize_options_prep
|
||||
|
||||
@ -252,8 +252,8 @@ libtoolize_parse_options ()
|
||||
done
|
||||
|
||||
# save modified positional parameters for caller
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
libtoolize_parse_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
libtoolize_parse_options_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_parse_options libtoolize_parse_options
|
||||
|
||||
@ -286,8 +286,8 @@ libtoolize_validate_options ()
|
||||
func_fatal_help "unknown additional arguments: '${1+$@}'"
|
||||
|
||||
# Pass back the empty argument list
|
||||
func_quote_for_eval ${1+"$@"}
|
||||
libtoolize_validate_options_result=$func_quote_for_eval_result
|
||||
func_quote eval ${1+"$@"}
|
||||
libtoolize_validate_options_result=$func_quote_result
|
||||
}
|
||||
func_add_hook func_validate_options libtoolize_validate_options
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user