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. ##