| Cut and paste the pieces of build-aux/options-parser inline into the main |
| ltmain.sh code. This removes a performance degradation caused by the |
| repeated calls to func_quote_for_eval, the mechanism funclib uses |
| to construct the functions used for option parsing. |
| |
| Upstream-Status: Submitted [Being discussed on mailing list Feb 2015] |
| |
| diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in |
| index d5cf07a..0f54303 100644 |
| --- a/build-aux/ltmain.in |
| +++ b/build-aux/ltmain.in |
| @@ -342,11 +342,15 @@ _LT_EOF |
| # libtool_options_prep [ARG]... |
| # ----------------------------- |
| # Preparation for options parsed by libtool. |
| -libtool_options_prep () |
| -{ |
| +#libtool_options_prep () |
| +#{ |
| $debug_mode |
| |
| # Option defaults: |
| + opt_verbose=false |
| + opt_warning_types= |
| + |
| + # Option defaults: |
| opt_config=false |
| opt_dlopen= |
| opt_dry_run=false |
| @@ -382,19 +386,14 @@ libtool_options_prep () |
| shift; set dummy --mode uninstall ${1+"$@"}; shift |
| ;; |
| esac |
| - |
| - # Pass back the list of options. |
| - func_quote_for_eval ${1+"$@"} |
| - libtool_options_prep_result=$func_quote_for_eval_result |
| -} |
| -func_add_hook func_options_prep libtool_options_prep |
| +#} |
| |
| |
| # libtool_parse_options [ARG]... |
| # --------------------------------- |
| # Provide handling for libtool specific options. |
| -libtool_parse_options () |
| -{ |
| +#libtool_parse_options () |
| +#{ |
| $debug_cmd |
| |
| # Perform our own loop to consume as many options as possible in |
| @@ -474,29 +473,90 @@ libtool_parse_options () |
| func_append preserve_args " $_G_opt" |
| ;; |
| |
| - # An option not handled by this hook function: |
| - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; |
| - esac |
| - done |
| + --debug|-x) debug_cmd='set -x' |
| + func_echo "enabling shell trace mode" |
| + $debug_cmd |
| + ;; |
| |
| + --no-warnings|--no-warning|--no-warn) |
| + set dummy --warnings none ${1+"$@"} |
| + shift |
| + ;; |
| |
| - # save modified positional parameters for caller |
| - func_quote_for_eval ${1+"$@"} |
| - libtool_parse_options_result=$func_quote_for_eval_result |
| -} |
| -func_add_hook func_parse_options libtool_parse_options |
| + --warnings|--warning|-W) |
| + test $# = 0 && func_missing_arg $_G_opt && break |
| + case " $warning_categories $1" in |
| + *" $1 "*) |
| + # trailing space prevents matching last $1 above |
| + func_append_uniq opt_warning_types " $1" |
| + ;; |
| + *all) |
| + opt_warning_types=$warning_categories |
| + ;; |
| + *none) |
| + opt_warning_types=none |
| + warning_func=: |
| + ;; |
| + *error) |
| + opt_warning_types=$warning_categories |
| + warning_func=func_fatal_error |
| + ;; |
| + *) |
| + func_fatal_error \ |
| + "unsupported warning category: '$1'" |
| + ;; |
| + esac |
| + shift |
| + ;; |
| + |
| + --verbose|-v) opt_verbose=: ;; |
| + --version) func_version ;; |
| + -\?|-h) func_usage ;; |
| + --help) func_help ;; |
| + |
| + # Separate optargs to long options (plugins may need this): |
| + --*=*) func_split_equals "$_G_opt" |
| + set dummy "$func_split_equals_lhs" \ |
| + "$func_split_equals_rhs" ${1+"$@"} |
| + shift |
| + ;; |
| + |
| + # Separate optargs to short options: |
| + -W*) |
| + func_split_short_opt "$_G_opt" |
| + set dummy "$func_split_short_opt_name" \ |
| + "$func_split_short_opt_arg" ${1+"$@"} |
| + shift |
| + ;; |
| + |
| + # Separate non-argument short options: |
| + -\?*|-h*|-v*|-x*) |
| + func_split_short_opt "$_G_opt" |
| + set dummy "$func_split_short_opt_name" \ |
| + "-$func_split_short_opt_arg" ${1+"$@"} |
| + shift |
| + ;; |
| + |
| + --) break ;; |
| + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; |
| + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; |
| + esac |
| + done |
| +#} |
| |
| +# Display all warnings if -W was not given. |
| +test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" |
| |
| |
| # libtool_validate_options [ARG]... |
| # --------------------------------- |
| # Perform any sanity checks on option settings and/or unconsumed |
| # arguments. |
| -libtool_validate_options () |
| -{ |
| +#libtool_validate_options () |
| +#{ |
| # save first non-option argument |
| if test 0 -lt $#; then |
| - nonopt=$1 |
| + nonopt=$_G_opt |
| shift |
| fi |
| |
| @@ -537,20 +597,10 @@ libtool_validate_options () |
| generic_help=$help |
| help="Try '$progname --help --mode=$opt_mode' for more information." |
| } |
| +#} |
| |
| - # Pass back the unparsed argument list |
| - func_quote_for_eval ${1+"$@"} |
| - libtool_validate_options_result=$func_quote_for_eval_result |
| -} |
| -func_add_hook func_validate_options libtool_validate_options |
| - |
| - |
| -# Process options as early as possible so that --help and --version |
| -# can return quickly. |
| -func_options ${1+"$@"} |
| -eval set dummy "$func_options_result"; shift |
| - |
| - |
| +# Bail if the options were screwed! |
| +$exit_cmd $EXIT_FAILURE |
| |
| ## ----------- ## |
| ## Main. ## |