3 # Bootstrap an Autotooled package from checked-out sources.
4 # Written by Gary V. Vaughan, 2010
6 # Copyright (C) 2010-2013 Free Software Foundation, Inc.
7 # This is free software; see the source for copying conditions. There is NO
8 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10 # Source required external libraries:
11 # Set a version string for this script.
12 scriptversion
=2013-08-23.20
; # UTC
14 # General shell script boiler plate, and helper functions.
15 # Written by Gary V. Vaughan, 2004
17 # Copyright (C) 2004-2013 Free Software Foundation, Inc.
18 # This is free software; see the source for copying conditions. There is NO
19 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 # This program is free software; you can redistribute it and/or modify
22 # it under the terms of the GNU General Public License as published by
23 # the Free Software Foundation; either version 3 of the License, or
24 # (at your option) any later version.
26 # As a special exception to the GNU General Public License, if you distribute
27 # this file as part of a program or library that is built using GNU Libtool,
28 # you may include this file under the same distribution terms that you use
29 # for the rest of that program.
31 # This program is distributed in the hope that it will be useful,
32 # but WITHOUT ANY WARRANTY; without even the implied warranty of
33 # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
34 # General Public License for more details.
36 # You should have received a copy of the GNU General Public License
37 # along with this program. If not, see <http://www.gnu.org/licenses/>.
39 # Please report bugs or propose patches to gary@gnu.org.
46 # Evaluate this file near the top of your script to gain access to
47 # the functions and variables defined here:
49 # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
51 # If you need to override any of the default environment variable
52 # settings, do that before evaluating this file.
55 ## -------------------- ##
56 ## Shell normalisation. ##
57 ## -------------------- ##
59 # Some shells need a little help to be as Bourne compatible as possible.
60 # Before doing anything else, make sure all that help has been provided!
62 DUALCASE
=1; export DUALCASE
# for MKS sh
63 if test -n "${ZSH_VERSION+set}" && (emulate sh
) >/dev
/null
2>&1; then :
66 # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
67 # is contrary to our usage. Disable this feature.
68 alias -g '${1+"$@"}'='"$@"'
71 case `(set -o) 2>/dev/null` in *posix
*) set -o posix
;; esac
74 # NLS nuisances: We save the old values in case they are required later.
77 for _G_var
in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
79 eval "if test set = \"\${$_G_var+set}\"; then
80 save_$_G_var=\$$_G_var
83 _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
84 _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
89 (unset CDPATH
) >/dev
/null
2>&1 && unset CDPATH
91 # Make sure IFS has a sensible default
97 # There are still modern systems that have problems with 'echo' mis-
98 # handling backslashes, among others, so make sure $bs_echo is set to a
99 # command that correctly interprets backslashes.
100 # (this code from Autoconf 2.68)
102 # Printing a long string crashes Solaris 7 /usr/bin/printf.
103 bs_echo
='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
104 bs_echo=$bs_echo$bs_echo$bs_echo$bs_echo$bs_echo
105 bs_echo=$bs_echo$bs_echo$bs_echo$bs_echo$bs_echo$bs_echo
106 # Prefer a ksh shell builtin over an external printf program on Solaris,
107 # but without wasting forks for bash or zsh.
108 if test -z "$BASH_VERSION$ZSH_VERSION" \
109 && (test "X`print -r -- $bs_echo`" = "X$bs_echo") 2>/dev/null; then
110 bs_echo='print
-r --'
111 bs_echo_n='print
-rn --'
112 elif (test "X`printf %s $bs_echo`" = "X$bs_echo") 2>/dev/null; then
113 bs_echo='printf %s
\n'
114 bs_echo_n='printf %s
'
116 if test "X`(/usr/ucb/echo -n -n $bs_echo) 2>/dev/null`" = "X-n $bs_echo"; then
117 bs_echo_body='eval /usr
/ucb
/echo -n "$1$nl"'
118 bs_echo_n='/usr
/ucb
/echo -n'
120 bs_echo_body='eval expr "X$1" : "X\\(.*\\)"'
125 expr "X$arg" : "X\\(.*\\)$nl";
126 arg
=`expr "X$arg" : ".*$nl\\(.*\\)"`;;
128 expr "X$arg" : "X\\(.*\\)" |
tr -d "$nl"
130 export bs_echo_n_body
131 bs_echo_n='sh
-c $bs_echo_n_body bs_echo
'
134 bs_echo='sh
-c $bs_echo_body bs_echo
'
138 ## ------------------------------- ##
139 ## User overridable command paths. ##
140 ## ------------------------------- ##
142 # All uppercase variable names are used for environment variables. These
143 # variables can be overridden by the user before calling a script that
144 # uses them if a suitable command of that name is not already available
145 # in the command search PATH.
158 : ${SHELL="${CONFIG_SHELL-/bin/sh}"}
161 ## -------------------- ##
162 ## Useful sed snippets. ##
163 ## -------------------- ##
165 sed_dirname='s|
/[^
/]*$||
'
166 sed_basename='s|^.
*/||
'
168 # Sed substitution that helps us do robust quoting. It backslashifies
169 # metacharacters that are still active within double-quoted strings.
170 sed_quote_subst='s|\
([`"$\\]\)|\\\1|g'
172 # Same as above, but do not quote variable references.
173 sed_double_quote_subst='s/\(["`\\]\
)/\\\
1/g
'
175 # Sed substitution that turns a string into a regex matching for the
177 sed_make_literal_regex='s|
[].
[^$
\\*\
/]|
\\&|g
'
179 # Sed substitution that converts a w32 file name or path
180 # that contains forward slashes, into one that contains
181 # (escaped) backslashes. A very naive implementation.
182 sed_naive_backslashify='s|
\\\\*|
\\|g
;s|
/|
\\|g
;s|
\\|
\\\\|g
'
184 # Re-'\' parameter expansions
in output of sed_double_quote_subst that
185 # were '\'-ed in input to the same. If an odd number of '\' preceded a
186 # '$' in input to sed_double_quote_subst, that '$' was protected from
187 # expansion. Since each input '\' is now two '\'s, look for any number
188 # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'.
193 sed_double_backslash
="\
196 s/^$_G_bs2$_G_dollar/$_G_bs&/
197 s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
201 ## ----------------- ##
202 ## Global variables. ##
203 ## ----------------- ##
205 # Except for the global variables explicitly listed below, the following
206 # functions in the '^func_' namespace, and the '^require_' namespace
207 # variables initialised in the 'Resource management' section, sourcing
208 # this file will not pollute your global namespace with anything
209 # else. There's no portable way to scope variables in Bourne shell
210 # though, so actually running these functions will sometimes place
211 # results into a variable named after the function, and often use
212 # temporary variables in the '^_G_' namespace. If you are careful to
213 # avoid using those namespaces casually in your sourcing script, things
214 # should continue to work as you expect. And, of course, you can freely
215 # overwrite any of the functions or variables defined here before
216 # calling anything to customize them.
220 EXIT_MISMATCH
=63 # $? = 63 is used to indicate version mismatch to missing.
221 EXIT_SKIP
=77 # $? = 77 is used to indicate a skipped test to automake.
223 # Allow overriding, eg assuming that you follow the convention of
224 # putting '$debug_cmd' at the start of all your functions, you can get
225 # bash to show function call trace with:
227 # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
228 debug_cmd
=${debug_cmd-":"}
231 # By convention, finish your script with:
235 # so that you can set exit_status to non-zero if you want to indicate
236 # something went wrong during execution without actually bailing out at
237 # the point of failure.
238 exit_status
=$EXIT_SUCCESS
240 # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
241 # is ksh but when the shell is invoked as "sh" and the current value of
242 # the _XPG environment variable is not equal to 1 (one), the special
243 # positional parameter $0, within a function call, is the name of the
247 # The name of this program.
248 progname
=`$bs_echo "$progpath" |$SED "$sed_basename"`
250 # Make sure we have an absolute progpath for reexecution:
252 [\\/]*|
[A-Za-z
]:\\*) ;;
254 progdir
=`$bs_echo "$progpath" |$SED "$sed_dirname"`
255 progdir
=`cd "$progdir" && pwd`
256 progpath
=$progdir/$progname
260 IFS
=${PATH_SEPARATOR-:}
261 for progdir
in $PATH; do
263 test -x "$progdir/$progname" && break
266 test -n "$progdir" || progdir
=`pwd`
267 progpath
=$progdir/$progname
272 ## ----------------- ##
273 ## Standard options. ##
274 ## ----------------- ##
276 # The following options affect the operation of the functions defined
277 # below, and should be set appropriately depending on run-time para-
278 # meters passed on the command line.
284 # Categories 'all' and 'none' are always available. Append any others
285 # you will pass as the first argument to func_warning from your own
289 # By default, display warnings according to 'opt_warning_types'. Set
290 # 'warning_func' to ':' to elide all warnings, or func_fatal_error to
291 # treat the next displayed warning as a fatal error.
292 warning_func
=func_warn_and_continue
294 # Set to 'all' to display all warnings, 'none' to suppress all
295 # warnings, or a space delimited list of some subset of
296 # 'warning_categories' to display only the listed warnings.
297 opt_warning_types
=all
300 ## -------------------- ##
301 ## Resource management. ##
302 ## -------------------- ##
304 # This section contains definitions for functions that each ensure a
305 # particular resource (a file, or a non-empty configuration variable for
306 # example) is available, and if appropriate to extract default values
307 # from pertinent package files. Call them using their associated
308 # 'require_*' variable to ensure that they are executed, at most, once.
310 # It's entirely deliberate that calling these functions can set
311 # variables that don't obey the namespace limitations obeyed by the rest
312 # of this file, in order that that they be as useful as possible to
316 # require_term_colors
317 # -------------------
318 # Allow display of bold text on terminals that support it.
319 require_term_colors
=func_require_term_colors
320 func_require_term_colors
()
325 # COLORTERM and USE_ANSI_COLORS environment variables take
326 # precedence, because most terminfo databases neglect to describe
327 # whether color sequences are supported.
328 test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
330 if test 1 = "$USE_ANSI_COLORS"; then
331 # Standard ANSI escape sequences
333 tc_bold
='\e[1m'; tc_standout
='\e[7m'
334 tc_red
='\e[31m'; tc_green
='\e[32m'
335 tc_blue
='\e[34m'; tc_cyan
='\e[36m'
337 # Otherwise trust the terminfo database after all.
338 test -n "`tput sgr0 2>/dev/null`" && {
340 test -n "`tput bold 2>/dev/null`" && tc_bold
=`tput bold`
342 test -n "`tput smso 2>/dev/null`" && tc_standout
=`tput smso`
343 test -n "`tput setaf 1 2>/dev/null`" && tc_red
=`tput setaf 1`
344 test -n "`tput setaf 2 2>/dev/null`" && tc_green
=`tput setaf 2`
345 test -n "`tput setaf 4 2>/dev/null`" && tc_blue
=`tput setaf 4`
346 test -n "`tput setaf 5 2>/dev/null`" && tc_cyan
=`tput setaf 5`
351 require_term_colors
=:
355 ## ----------------- ##
356 ## Function library. ##
357 ## ----------------- ##
359 # This section contains a variety of useful functions to call in your
360 # scripts. Take note of the portable wrappers for features provided by
361 # some modern shells, which will fall back to slower equivalents on
362 # less featureful shells.
365 # func_append VAR VALUE
366 # ---------------------
367 # Append VALUE onto the existing contents of VAR.
369 # We should try to minimise forks, especially on Windows where they are
370 # unreasonably slow, so skip the feature probes when bash or zsh are
372 if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
373 : ${_G_HAVE_ARITH_OP="yes"}
374 : ${_G_HAVE_XSI_OPS="yes"}
375 # The += operator was introduced in bash 3.1
376 case $BASH_VERSION in
377 [12].
* |
3.0 |
3.0*) ;;
379 : ${_G_HAVE_PLUSEQ_OP="yes"}
385 # Can be empty, in which case the shell is probed, "yes" if += is
386 # useable or anything else if it does not work.
387 test -z "$_G_HAVE_PLUSEQ_OP" \
388 && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev
/null \
389 && _G_HAVE_PLUSEQ_OP
=yes
391 if test yes = "$_G_HAVE_PLUSEQ_OP"
393 # This is an XSI compatible shell, allowing a faster implementation...
401 # ...otherwise fall back to using expr, which is often a shell builtin.
411 # func_append_quoted VAR VALUE
412 # ----------------------------
413 # Quote VALUE and append to the end of shell variable VAR, separated
415 if test yes = "$_G_HAVE_PLUSEQ_OP"; then
416 eval 'func_append_quoted ()
420 func_quote_for_eval "$2"
421 eval "$1+=\\ \$func_quote_for_eval_result"
424 func_append_quoted
()
428 func_quote_for_eval
"$2"
429 eval "$1=\$$1\\ \$func_quote_for_eval_result"
434 # func_append_uniq VAR VALUE
435 # --------------------------
436 # Append unique VALUE onto the existing contents of VAR, assuming
437 # entries are delimited by the first character of VALUE. For example:
439 # func_append_uniq options " --another-option option-argument"
441 # will only append to $options if " --another-option option-argument "
442 # is not already present somewhere in $options already (note spaces at
443 # each end implied by leading space in second argument).
448 eval _G_current_value
='`$bs_echo $'$1'`'
449 _G_delim
=`expr "$2" : '\(.\)'`
451 case $_G_delim$_G_current_value$_G_delim in
453 *) func_append
"$@" ;;
460 # Set func_arith_result to the result of evaluating TERMs.
461 test -z "$_G_HAVE_ARITH_OP" \
462 && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev
/null \
463 && _G_HAVE_ARITH_OP
=yes
465 if test yes = "$_G_HAVE_ARITH_OP"; then
470 func_arith_result=$(( $* ))
477 func_arith_result
=`expr "$@"`
484 # Set func_basename_result to FILE with everything up to and including
485 # the last / stripped.
486 if test yes = "$_G_HAVE_XSI_OPS"; then
487 # If this shell supports suffix pattern removal, then use it to avoid
488 # forking. Hide the definitions single quotes in case the shell chokes
489 # on unsupported syntax...
490 _b
='func_basename_result=${1##*/}'
492 */*) func_dirname_result=${1%/*}$2 ;;
493 * ) func_dirname_result=$3 ;;
497 # ...otherwise fall back to using sed.
498 _b
='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
499 _d
='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"`
500 if test "X$func_dirname_result" = "X$1"; then
501 func_dirname_result=$3
503 func_append func_dirname_result "$2"
507 eval 'func_basename ()
515 # func_dirname FILE APPEND NONDIR_REPLACEMENT
516 # -------------------------------------------
517 # Compute the dirname of FILE. If nonempty, add APPEND to the result,
518 # otherwise set result to NONDIR_REPLACEMENT.
519 eval 'func_dirname ()
527 # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
528 # --------------------------------------------------------
529 # Perform func_basename and func_dirname in a single function
531 # dirname: Compute the dirname of FILE. If nonempty,
532 # add APPEND to the result, otherwise set result
533 # to NONDIR_REPLACEMENT.
534 # value returned in "$func_dirname_result"
535 # basename: Compute filename of FILE.
536 # value retuned in "$func_basename_result"
537 # For efficiency, we do not delegate to the functions above but instead
538 # duplicate the functionality here.
539 eval 'func_dirname_and_basename ()
550 # Echo program name prefixed message.
559 for _G_line
in $_G_message; do
561 $bs_echo "$progname: $_G_line"
567 # func_echo_all ARG...
568 # --------------------
569 # Invoke $ECHO with all args, space-separated.
576 # func_echo_infix_1 INFIX ARG...
577 # ------------------------------
578 # Echo program name, followed by INFIX on the first line, with any
579 # additional lines not showing INFIX.
588 _G_prefix
="$progname: $_G_infix: "
591 # Strip color escape sequences before counting printable length
592 for _G_tc
in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
594 test -n "$_G_tc" && {
595 _G_esc_tc
=`$bs_echo "$_G_tc" | sed "$sed_make_literal_regex"`
596 _G_indent
=`$bs_echo "$_G_indent" | sed "s|$_G_esc_tc||g"`
599 _G_indent
="$progname: "`echo "$_G_indent" | sed 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes
601 func_echo_infix_1_IFS
=$IFS
603 for _G_line
in $_G_message; do
604 IFS
=$func_echo_infix_1_IFS
605 $bs_echo "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
608 IFS
=$func_echo_infix_1_IFS
614 # Echo program name prefixed message to standard error.
621 func_echo_infix_1
" $tc_standout${tc_red}error$tc_reset" "$*" >&2
625 # func_fatal_error ARG...
626 # -----------------------
627 # Echo program name prefixed message to standard error, and exit.
637 # func_grep EXPRESSION FILENAME
638 # -----------------------------
639 # Check whether EXPRESSION matches any line of FILENAME, without output.
644 $GREP "$1" "$2" >/dev
/null
2>&1
650 # Set func_len_result to the length of STRING. STRING may not
651 # start with a hyphen.
652 test -z "$_G_HAVE_XSI_OPS" \
654 test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev
/null \
655 && _G_HAVE_XSI_OPS
=yes
657 if test yes = "$_G_HAVE_XSI_OPS"; then
662 func_len_result=${#1}
669 func_len_result
=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
674 # func_mkdir_p DIRECTORY-PATH
675 # ---------------------------
676 # Make sure the entire path to DIRECTORY-PATH is available.
684 if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
686 # Protect directory names starting with '-'
687 case $_G_directory_path in
688 -*) _G_directory_path
=.
/$_G_directory_path ;;
691 # While some portion of DIR does not yet exist...
692 while test ! -d "$_G_directory_path"; do
693 # ...make a list in topmost first order. Use a colon delimited
694 # list incase some portion of path contains whitespace.
695 _G_dir_list
=$_G_directory_path:$_G_dir_list
697 # If the last portion added has no slash in it, the list is done
698 case $_G_directory_path in */*) ;; *) break ;; esac
700 # ...otherwise throw away the child directory and loop
701 _G_directory_path
=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
703 _G_dir_list
=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
705 func_mkdir_p_IFS
=$IFS; IFS
=:
706 for _G_dir
in $_G_dir_list; do
707 IFS
=$func_mkdir_p_IFS
708 # mkdir can fail with a 'File exist' error if two processes
709 # try to create one of the directories concurrently. Don't
711 $MKDIR "$_G_dir" 2>/dev
/null ||
:
713 IFS
=$func_mkdir_p_IFS
715 # Bail out if we (or some other process) failed to create a directory.
716 test -d "$_G_directory_path" || \
717 func_fatal_error
"Failed to create '$1'"
722 # func_mktempdir [BASENAME]
723 # -------------------------
724 # Make a temporary directory that won't clash with other running
725 # libtool processes, and avoids race conditions if possible. If
726 # given, BASENAME is the basename for that directory.
731 _G_template
=${TMPDIR-/tmp}/${1-$progname}
733 if test : = "$opt_dry_run"; then
734 # Return a directory name, but don't create it in dry-run mode
735 _G_tmpdir
=$_G_template-$$
738 # If mktemp works, use that first and foremost
739 _G_tmpdir
=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
741 if test ! -d "$_G_tmpdir"; then
742 # Failing that, at least try and use $RANDOM to avoid a race
743 _G_tmpdir
=$_G_template-${RANDOM-0}$$
745 func_mktempdir_umask
=`umask`
748 umask $func_mktempdir_umask
751 # If we're not in dry-run mode, bomb out on failure
752 test -d "$_G_tmpdir" || \
753 func_fatal_error
"cannot create temporary directory '$_G_tmpdir'"
760 # func_normal_abspath PATH
761 # ------------------------
762 # Remove doubled-up and trailing slashes, "." path components,
763 # and cancel out any ".." path components in PATH after making
764 # it an absolute path.
765 func_normal_abspath
()
769 # These SED scripts presuppose an absolute path with a trailing slash.
770 _G_pathcar
='s|^/\([^/]*\).*$|\1|'
771 _G_pathcdr
='s|^/[^/]*||'
772 _G_removedotparts
=':dotsl
776 _G_collapseslashes
='s|/\{1,\}|/|g'
777 _G_finalslash
='s|/*$|/|'
779 # Start from root dir and reassemble the path.
780 func_normal_abspath_result
=
781 func_normal_abspath_tpath
=$1
782 func_normal_abspath_altnamespace
=
783 case $func_normal_abspath_tpath in
785 # Empty path, that just means $cwd.
786 func_stripname
'' '/' "`pwd`"
787 func_normal_abspath_result
=$func_stripname_result
790 # The next three entries are used to spot a run of precisely
791 # two leading slashes without using negated character classes;
792 # we take advantage of case's first-match behaviour.
794 # Unusual form of absolute path, do nothing.
797 # Not necessarily an ordinary path; POSIX reserves leading '//'
798 # and for example Cygwin uses it to access remote file shares
799 # over CIFS/SMB, so we conserve a leading double slash if found.
800 func_normal_abspath_altnamespace
=/
803 # Absolute path, do nothing.
806 # Relative path, prepend $cwd.
807 func_normal_abspath_tpath
=`pwd`/$func_normal_abspath_tpath
811 # Cancel out all the simple stuff to save iterations. We also want
812 # the path to end with a slash for ease of parsing, so make sure
813 # there is one (and only one) here.
814 func_normal_abspath_tpath
=`$ECHO "$func_normal_abspath_tpath" | $SED \
815 -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
817 # Processed it all yet?
818 if test / = "$func_normal_abspath_tpath"; then
819 # If we ascended to the root using ".." the result may be empty now.
820 if test -z "$func_normal_abspath_result"; then
821 func_normal_abspath_result
=/
825 func_normal_abspath_tcomponent
=`$ECHO "$func_normal_abspath_tpath" | $SED \
827 func_normal_abspath_tpath
=`$ECHO "$func_normal_abspath_tpath" | $SED \
829 # Figure out what to do with it
830 case $func_normal_abspath_tcomponent in
832 # Trailing empty path component, ignore it.
835 # Parent dir; strip last assembled component from result.
836 func_dirname
"$func_normal_abspath_result"
837 func_normal_abspath_result
=$func_dirname_result
840 # Actual path component, append it.
841 func_append func_normal_abspath_result
"/$func_normal_abspath_tcomponent"
845 # Restore leading double-slash if one was found on entry.
846 func_normal_abspath_result
=$func_normal_abspath_altnamespace$func_normal_abspath_result
850 # func_notquiet ARG...
851 # --------------------
852 # Echo program name prefixed message only when not in quiet mode.
857 $opt_quiet || func_echo
${1+"$@"}
859 # A bug in bash halts the script if the last line of a function
860 # fails when set -e is in force, so we need another command to
866 # func_relative_path SRCDIR DSTDIR
867 # --------------------------------
868 # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
869 func_relative_path
()
873 func_relative_path_result
=
874 func_normal_abspath
"$1"
875 func_relative_path_tlibdir
=$func_normal_abspath_result
876 func_normal_abspath
"$2"
877 func_relative_path_tbindir
=$func_normal_abspath_result
879 # Ascend the tree starting from libdir
881 # check if we have found a prefix of bindir
882 case $func_relative_path_tbindir in
883 $func_relative_path_tlibdir)
884 # found an exact match
885 func_relative_path_tcancelled
=
888 $func_relative_path_tlibdir*)
889 # found a matching prefix
890 func_stripname
"$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
891 func_relative_path_tcancelled
=$func_stripname_result
892 if test -z "$func_relative_path_result"; then
893 func_relative_path_result
=.
898 func_dirname
$func_relative_path_tlibdir
899 func_relative_path_tlibdir
=$func_dirname_result
900 if test -z "$func_relative_path_tlibdir"; then
901 # Have to descend all the way to the root!
902 func_relative_path_result
=..
/$func_relative_path_result
903 func_relative_path_tcancelled
=$func_relative_path_tbindir
906 func_relative_path_result
=..
/$func_relative_path_result
911 # Now calculate path; take care to avoid doubling-up slashes.
912 func_stripname
'' '/' "$func_relative_path_result"
913 func_relative_path_result
=$func_stripname_result
914 func_stripname
'/' '/' "$func_relative_path_tcancelled"
915 if test -n "$func_stripname_result"; then
916 func_append func_relative_path_result
"/$func_stripname_result"
919 # Normalisation. If bindir is libdir, return '.' else relative path.
920 if test -n "$func_relative_path_result"; then
921 func_stripname
'./' '' "$func_relative_path_result"
922 func_relative_path_result
=$func_stripname_result
925 test -n "$func_relative_path_result" || func_relative_path_result
=.
931 # func_quote_for_eval ARG...
932 # --------------------------
933 # Aesthetically quote ARGs to be evaled later.
934 # This function returns two values:
935 # i) func_quote_for_eval_result
936 # double-quoted, suitable for a subsequent eval
937 # ii) func_quote_for_eval_unquoted_result
938 # has all characters that are still active within double
939 # quotes backslashified.
940 func_quote_for_eval
()
944 func_quote_for_eval_unquoted_result
=
945 func_quote_for_eval_result
=
946 while test 0 -lt $#; do
949 _G_unquoted_arg=`printf '%s\n' "$1" |
$SED "$sed_quote_subst"` ;;
951 _G_unquoted_arg=$1 ;;
953 if test -n "$func_quote_for_eval_unquoted_result"; then
954 func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
956 func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
959 case $_G_unquoted_arg in
960 # Double-quote args containing shell metacharacters to delay
961 # word splitting, command substitution and variable expansion
962 # for a subsequent eval.
963 # Many Bourne shells cannot handle close brackets correctly
964 # in scan sets, so we specify it separately.
965 *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
966 _G_quoted_arg=\"$_G_unquoted_arg\"
969 _G_quoted_arg=$_G_unquoted_arg
973 if test -n "$func_quote_for_eval_result"; then
974 func_append func_quote_for_eval_result " $_G_quoted_arg"
976 func_append func_quote_for_eval_result "$_G_quoted_arg"
983 # func_quote_for_expand ARG
984 # -------------------------
985 # Aesthetically quote ARG to be evaled later; same as above,
986 # but do not quote variable references.
987 func_quote_for_expand ()
993 _G_arg
=`$ECHO "$1" | $SED \
994 -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
1000 # Double-quote args containing shell metacharacters to delay
1001 # word splitting and command substitution for a subsequent eval.
1002 # Many Bourne shells cannot handle close brackets correctly
1003 # in scan sets, so we specify it separately.
1004 *[\
[\~\
#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
1009 func_quote_for_expand_result
=$_G_arg
1013 # func_stripname PREFIX SUFFIX NAME
1014 # ---------------------------------
1015 # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
1016 # PREFIX and SUFFIX must not contain globbing or regex special
1017 # characters, hashes, percent signs, but SUFFIX may contain a leading
1018 # dot (in which case that matches only a dot).
1019 if test yes = "$_G_HAVE_XSI_OPS"; then
1020 eval 'func_stripname ()
1024 # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
1025 # positional parameters, so assign one to ordinary variable first.
1026 func_stripname_result=$3
1027 func_stripname_result=${func_stripname_result#"$1"}
1028 func_stripname_result=${func_stripname_result%"$2"}
1036 .
*) func_stripname_result
=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
1037 *) func_stripname_result
=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
1043 # func_show_eval CMD [FAIL_EXP]
1044 # -----------------------------
1045 # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
1046 # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
1047 # is given, then evaluate it.
1053 _G_fail_exp
=${2-':'}
1055 func_quote_for_expand
"$_G_cmd"
1056 eval "func_notquiet $func_quote_for_expand_result"
1061 if test 0 -ne "$_G_status"; then
1062 eval "(exit $_G_status); $_G_fail_exp"
1068 # func_show_eval_locale CMD [FAIL_EXP]
1069 # ------------------------------------
1070 # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is
1071 # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
1072 # is given, then evaluate it. Use the saved locale for evaluation.
1073 func_show_eval_locale
()
1078 _G_fail_exp
=${2-':'}
1081 func_quote_for_expand
"$_G_cmd"
1082 eval "func_echo $func_quote_for_expand_result"
1086 eval "$_G_user_locale
1089 eval "$_G_safe_locale"
1090 if test 0 -ne "$_G_status"; then
1091 eval "(exit $_G_status); $_G_fail_exp"
1099 # Turn $1 into a string suitable for a shell variable name.
1100 # Result is stored in $func_tr_sh_result. All characters
1101 # not in the set a-zA-Z0-9_ are replaced with '_'. Further,
1102 # if $1 begins with a digit, a '_' is prepended as well.
1108 [0-9]* |
*[!a-zA-Z0-9_
]*)
1109 func_tr_sh_result
=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
1112 func_tr_sh_result
=$1
1118 # func_verbose ARG...
1119 # -------------------
1120 # Echo program name prefixed message in verbose mode only.
1125 $opt_verbose && func_echo
"$*"
1131 # func_warn_and_continue ARG...
1132 # -----------------------------
1133 # Echo program name prefixed warning message to standard error.
1134 func_warn_and_continue
()
1138 $require_term_colors
1140 func_echo_infix_1
"${tc_red}warning$tc_reset" "$*" >&2
1144 # func_warning CATEGORY ARG...
1145 # ----------------------------
1146 # Echo program name prefixed warning message to standard error. Warning
1147 # messages can be filtered according to CATEGORY, where this function
1148 # elides messages where CATEGORY is not listed in the global variable
1149 # 'opt_warning_types'.
1154 # CATEGORY must be in the warning_categories list!
1155 case " $warning_categories " in
1157 *) func_internal_error
"invalid warning category '$1'" ;;
1163 case " $opt_warning_types " in
1164 *" $_G_category "*) $warning_func ${1+"$@"} ;;
1170 # mode: shell-script
1172 # eval: (add-hook 'write-file-hooks 'time-stamp)
1173 # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1174 # time-stamp-time-zone: "UTC"
1178 # Set a version string for this script.
1179 scriptversion
=2012-10-21.11
; # UTC
1181 # A portable, pluggable option parser for Bourne shell.
1182 # Written by Gary V. Vaughan, 2010
1184 # Copyright (C) 2010-2013 Free Software Foundation, Inc.
1185 # This is free software; see the source for copying conditions. There is NO
1186 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1188 # This program is free software: you can redistribute it and/or modify
1189 # it under the terms of the GNU General Public License as published by
1190 # the Free Software Foundation, either version 3 of the License, or
1191 # (at your option) any later version.
1193 # This program is distributed in the hope that it will be useful,
1194 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1195 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1196 # GNU General Public License for more details.
1198 # You should have received a copy of the GNU General Public License
1199 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1201 # Please report bugs or propose patches to gary@gnu.org.
1208 # This file is a library for parsing options in your shell scripts along
1209 # with assorted other useful supporting features that you can make use
1212 # For the simplest scripts you might need only:
1215 # . relative/path/to/funclib.sh
1216 # . relative/path/to/options-parser
1218 # func_options ${1+"$@"}
1219 # eval set dummy "$func_options_result"; shift
1220 # ...rest of your script...
1222 # In order for the '--version' option to work, you will need to have a
1223 # suitably formatted comment like the one at the top of this file
1224 # starting with '# Written by ' and ending with '# warranty; '.
1226 # For '-h' and '--help' to work, you will also need a one line
1227 # description of your script's purpose in a comment directly above the
1228 # '# Written by ' line, like the one at the top of this file.
1230 # The default options also support '--debug', which will turn on shell
1231 # execution tracing (see the comment above debug_cmd below for another
1232 # use), and '--verbose' and the func_verbose function to allow your script
1233 # to display verbose messages only when your user has specified
1236 # After sourcing this file, you can plug processing for additional
1237 # options by amending the variables from the 'Configuration' section
1238 # below, and following the instructions in the 'Option parsing'
1239 # section further down.
1241 ## -------------- ##
1242 ## Configuration. ##
1243 ## -------------- ##
1245 # You should override these variables in your script after sourcing this
1246 # file so that they reflect the customisations you have added to the
1249 # The usage line for option parsing errors and the start of '-h' and
1250 # '--help' output messages. You can embed shell variables for delayed
1251 # expansion at the time the message is displayed, but you will need to
1252 # quote other shell meta-characters carefully to prevent them being
1253 # expanded when the contents are evaled.
1254 usage
='$progpath [OPTION]...'
1256 # Short help message in response to '-h' and '--help'. Add to this or
1257 # override it after sourcing this library to reflect the full set of
1258 # options your script accepts.
1260 --debug enable verbose shell tracing
1261 -W, --warnings=CATEGORY
1262 report the warnings falling in CATEGORY [all]
1263 -v, --verbose verbosely report processing
1264 --version print version information and exit
1265 -h, --help print short or long help message and exit
1268 # Additional text appended to 'usage_message' in response to '--help'.
1270 Warning categories include:
1271 'all' show all warnings
1272 'none' turn off all the warnings
1273 'error' warnings are treated as fatal errors"
1275 # Help message printed before fatal option parsing errors.
1276 fatal_help
="Try '\$progname --help' for more information."
1280 ## ------------------------- ##
1281 ## Hook function management. ##
1282 ## ------------------------- ##
1284 # This section contains functions for adding, removing, and running hooks
1285 # to the main code. A hook is just a named list of of function, that can
1286 # be run in order later on.
1288 # func_hookable FUNC_NAME
1289 # -----------------------
1290 # Declare that FUNC_NAME will run hooks added with
1291 # 'func_add_hook FUNC_NAME ...'.
1296 func_append hookable_fns
" $1"
1300 # func_add_hook FUNC_NAME HOOK_FUNC
1301 # ---------------------------------
1302 # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must
1303 # first have been declared "hookable" by a call to 'func_hookable'.
1308 case " $hookable_fns " in
1310 *) func_fatal_error
"'$1' does not accept hook functions." ;;
1313 eval func_append
${1}_hooks
'" $2"'
1317 # func_remove_hook FUNC_NAME HOOK_FUNC
1318 # ------------------------------------
1319 # Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
1324 eval ${1}_hooks
='`$bs_echo "\$'$1'_hooks" |$SED "s| '$2'||"`'
1328 # func_run_hooks FUNC_NAME [ARG]...
1329 # ---------------------------------
1330 # Run all hook functions registered to FUNC_NAME.
1331 # It is assumed that the list of hook functions contains nothing more
1332 # than a whitespace-delimited list of legal shell function names, and
1333 # no effort is wasted trying to catch shell meta-characters or preserve
1339 case " $hookable_fns " in
1341 *) func_fatal_error
"'$1' does not support hook funcions.n" ;;
1344 eval _G_hook_fns
=\$
$1_hooks; shift
1346 for _G_hook
in $_G_hook_fns; do
1347 eval $_G_hook '"$@"'
1349 # store returned options list back into positional
1350 # parameters for next 'cmd' execution.
1351 eval _G_hook_result
=\$
${_G_hook}_result
1352 eval set dummy
"$_G_hook_result"; shift
1355 func_quote_for_eval
${1+"$@"}
1356 func_run_hooks_result
=$func_quote_for_eval_result
1361 ## --------------- ##
1362 ## Option parsing. ##
1363 ## --------------- ##
1365 # In order to add your own option parsing hooks, you must accept the
1366 # full positional parameter list in your hook function, remove any
1367 # options that you action, and then pass back the remaining unprocessed
1368 # options in '<hooked_function_name>_result', escaped suitably for
1369 # 'eval'. Like this:
1371 # my_options_prep ()
1375 # # Extend the existing usage message.
1376 # usage_message=$usage_message'
1377 # -s, --silent don'\''t print informational messages
1380 # func_quote_for_eval ${1+"$@"}
1381 # my_options_prep_result=$func_quote_for_eval_result
1383 # func_add_hook func_options_prep my_options_prep
1386 # my_silent_option ()
1390 # # Note that for efficiency, we parse as many options as we can
1391 # # recognise in a loop before passing the remainder back to the
1392 # # caller on the first unrecognised argument we encounter.
1393 # while test $# -gt 0; do
1396 # --silent|-s) opt_silent=: ;;
1397 # # Separate non-argument short options:
1398 # -s*) func_split_short_opt "$_G_opt"
1399 # set dummy "$func_split_short_opt_name" \
1400 # "-$func_split_short_opt_arg" ${1+"$@"}
1403 # *) set dummy "$_G_opt" "$*"; shift; break ;;
1407 # func_quote_for_eval ${1+"$@"}
1408 # my_silent_option_result=$func_quote_for_eval_result
1410 # func_add_hook func_parse_options my_silent_option
1413 # my_option_validation ()
1417 # $opt_silent && $opt_verbose && func_fatal_help "\
1418 # '--silent' and '--verbose' options are mutually exclusive."
1420 # func_quote_for_eval ${1+"$@"}
1421 # my_option_validation_result=$func_quote_for_eval_result
1423 # func_add_hook func_validate_options my_option_validation
1425 # You'll alse need to manually amend $usage_message to reflect the extra
1426 # options you parse. It's preferable to append if you can, so that
1427 # multiple option parsing hooks can be added safely.
1430 # func_options [ARG]...
1431 # ---------------------
1432 # All the functions called inside func_options are hookable. See the
1433 # individual implementations for details.
1434 func_hookable func_options
1439 func_options_prep
${1+"$@"}
1440 eval func_parse_options \
1441 ${func_options_prep_result+"$func_options_prep_result"}
1442 eval func_validate_options \
1443 ${func_parse_options_result+"$func_parse_options_result"}
1445 eval func_run_hooks func_options \
1446 ${func_validate_options_result+"$func_validate_options_result"}
1448 # save modified positional parameters for caller
1449 func_options_result
=$func_run_hooks_result
1453 # func_options_prep [ARG]...
1454 # --------------------------
1455 # All initialisations required before starting the option parse loop.
1456 # Note that when calling hook functions, we pass through the list of
1457 # positional parameters. If a hook function modifies that list, and
1458 # needs to propogate that back to rest of this script, then the complete
1459 # modified list must be put in 'func_run_hooks_result' before
1461 func_hookable func_options_prep
1462 func_options_prep
()
1470 func_run_hooks func_options_prep
${1+"$@"}
1472 # save modified positional parameters for caller
1473 func_options_prep_result
=$func_run_hooks_result
1477 # func_parse_options [ARG]...
1478 # ---------------------------
1479 # The main option parsing loop.
1480 func_hookable func_parse_options
1481 func_parse_options
()
1485 func_parse_options_result
=
1487 # this just eases exit handling
1488 while test $# -gt 0; do
1489 # Defer to hook functions for initial option parsing, so they
1490 # get priority in the event of reusing an option name.
1491 func_run_hooks func_parse_options
${1+"$@"}
1493 # Adjust func_parse_options positional parameters to match
1494 eval set dummy
"$func_run_hooks_result"; shift
1496 # Break out of the loop if we already parsed every option.
1497 test $# -gt 0 ||
break
1502 --debug|
-x) debug_cmd
='set -x'
1503 func_echo
"enabling shell trace mode"
1507 --no-warnings|
--no-warning|
--no-warn)
1508 set dummy
--warnings none
${1+"$@"}
1512 --warnings|
--warning|
-W)
1513 test $# = 0 && func_missing_arg
$_G_opt && break
1514 case " $warning_categories $1" in
1516 # trailing space prevents matching last $1 above
1517 func_append_uniq opt_warning_types
" $1"
1520 opt_warning_types
=$warning_categories
1523 opt_warning_types
=none
1527 opt_warning_types
=$warning_categories
1528 warning_func
=func_fatal_error
1532 "unsupported warning category: '$1'"
1538 --verbose|
-v) opt_verbose
=: ;;
1539 --version) func_version
;;
1540 -\?|
-h) func_usage
;;
1541 --help) func_help
;;
1543 # Separate optargs to long options (plugins may need this):
1544 --*=*) func_split_equals
"$_G_opt"
1545 set dummy
"$func_split_equals_lhs" \
1546 "$func_split_equals_rhs" ${1+"$@"}
1550 # Separate optargs to short options:
1552 func_split_short_opt
"$_G_opt"
1553 set dummy
"$func_split_short_opt_name" \
1554 "$func_split_short_opt_arg" ${1+"$@"}
1558 # Separate non-argument short options:
1560 func_split_short_opt
"$_G_opt"
1561 set dummy
"$func_split_short_opt_name" \
1562 "-$func_split_short_opt_arg" ${1+"$@"}
1567 -*) func_fatal_help
"unrecognised option: '$_G_opt'" ;;
1568 *) set dummy
"$_G_opt" ${1+"$@"}; shift; break ;;
1572 # save modified positional parameters for caller
1573 func_quote_for_eval
${1+"$@"}
1574 func_parse_options_result
=$func_quote_for_eval_result
1578 # func_validate_options [ARG]...
1579 # ------------------------------
1580 # Perform any sanity checks on option settings and/or unconsumed
1582 func_hookable func_validate_options
1583 func_validate_options
()
1587 # Display all warnings if -W was not given.
1588 test -n "$opt_warning_types" || opt_warning_types
=" $warning_categories"
1590 func_run_hooks func_validate_options
${1+"$@"}
1592 # Bail if the options were screwed!
1593 $exit_cmd $EXIT_FAILURE
1595 # save modified positional parameters for caller
1596 func_validate_options_result
=$func_run_hooks_result
1601 ## ------------------##
1602 ## Helper functions. ##
1603 ## ------------------##
1605 # This section contains the helper functions used by the rest of the
1606 # hookable option parser framework in ascii-betical order.
1609 # func_fatal_help ARG...
1610 # ----------------------
1611 # Echo program name prefixed message to standard error, followed by
1612 # a help hint, and exit.
1617 eval \
$bs_echo \""Usage: $usage"\"
1618 eval \
$bs_echo \""$fatal_help"\"
1619 func_error
${1+"$@"}
1626 # Echo long help message to standard output and exit.
1632 $bs_echo "$long_help_message"
1637 # func_missing_arg ARGNAME
1638 # ------------------------
1639 # Echo program name prefixed message to standard error and set global
1645 func_error
"Missing argument for '$1'."
1650 # func_split_equals STRING
1651 # ------------------------
1652 # Set func_split_equals_lhs and func_split_equals_rhs shell variables after
1653 # splitting STRING at the '=' sign.
1654 test -z "$_G_HAVE_XSI_OPS" \
1656 test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev
/null \
1657 && _G_HAVE_XSI_OPS
=yes
1659 if test yes = "$_G_HAVE_XSI_OPS"
1661 # This is an XSI compatible shell, allowing a faster implementation...
1662 eval 'func_split_equals ()
1666 func_split_equals_lhs=${1%%=*}
1667 func_split_equals_rhs=${1#*=}
1668 test "x$func_split_equals_lhs" = "x$1" \
1669 && func_split_equals_rhs=
1672 # ...otherwise fall back to using expr, which is often a shell builtin.
1673 func_split_equals
()
1677 func_split_equals_lhs
=`expr "x$1" : 'x\([^=]*\)'`
1678 func_split_equals_rhs
=
1679 test "x$func_split_equals_lhs" = "x$1" \
1680 || func_split_equals_rhs
=`expr "x$1" : 'x[^=]*=\(.*\)$'`
1682 fi #func_split_equals
1685 # func_split_short_opt SHORTOPT
1686 # -----------------------------
1687 # Set func_split_short_opt_name and func_split_short_opt_arg shell
1688 # variables after splitting SHORTOPT after the 2nd character.
1689 if test yes = "$_G_HAVE_XSI_OPS"
1691 # This is an XSI compatible shell, allowing a faster implementation...
1692 eval 'func_split_short_opt ()
1696 func_split_short_opt_arg=${1#??}
1697 func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
1700 # ...otherwise fall back to using expr, which is often a shell builtin.
1701 func_split_short_opt
()
1705 func_split_short_opt_name
=`expr "x$1" : 'x-\(.\)'`
1706 func_split_short_opt_arg
=`expr "x$1" : 'x-.\(.*\)$'`
1708 fi #func_split_short_opt
1713 # Echo short help message to standard output and exit.
1719 $bs_echo "Run '$progname --help |${PAGER-more}' for full usage"
1724 # func_usage_message
1725 # ------------------
1726 # Echo short help message to standard output.
1727 func_usage_message
()
1731 eval \
$bs_echo \""Usage: $usage"\"
1738 /^Written by/q' < "$progpath"
1740 eval \
$bs_echo \""$usage_message"\"
1746 # Echo version message to standard output and exit.
1751 printf '%s\n' "$progname $scriptversion"
1761 /^# Written by /,/# warranty; / {
1764 s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
1771 /^warranty; /q' < "$progpath"
1778 # mode: shell-script
1780 # eval: (add-hook 'write-file-hooks 'time-stamp)
1781 # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
1782 # time-stamp-time-zone: "UTC"
1786 # Extract macro arguments from autotools input with GNU M4.
1787 # Written by Gary V. Vaughan, 2010
1789 # Copyright (C) 2010-2013 Free Software Foundation, Inc.
1790 # This is free software; see the source for copying conditions. There is NO
1791 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1793 # Make sure we've evaluated scripts we depend on.
1794 test -z "$progpath" && .
`echo "$0" |${SED-sed} 's|[^/]*$||'`/funclib.sh
1795 test extract-trace
= "$progname" && .
`echo "$0" |${SED-sed} 's|[^/]*$||'`/options-parser
1797 # Set a version string.
1798 scriptversion
=2013-08-22.10
; # UTC
1800 # This program is free software: you can redistribute it and/or modify
1801 # it under the terms of the GNU General Public License as published by
1802 # the Free Software Foundation, either version 3 of the License, or
1803 # (at your option) any later version.
1805 # This program is distributed in the hope that it will be useful,
1806 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1807 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1808 # GNU General Public License for more details.
1810 # You should have received a copy of the GNU General Public License
1811 # along with this program. If not, see <http://www.gnu.org/licenses/>.
1813 # Please report bugs or propose patches to gary@gnu.org.
1820 # Run './extract-trace --help' for help with using this script from the
1823 # Or source first 'options-parser' and then this file into your own
1824 # scripts in order to make use of the function and variable framework
1825 # they define, and also to avoid the overhead of forking to run this
1826 # script in its own process on every call.
1830 ## ------------------##
1831 ## Helper functions. ##
1832 ## ------------------##
1834 # This section contains the helper functions used by the rest of
1838 # func_autoconf_configure MAYBE-CONFIGURE-FILE
1839 # --------------------------------------------
1840 # Ensure that MAYBE-CONFIGURE-FILE is the name of a file in the current
1841 # directory that contains an uncommented call to AC_INIT.
1842 func_autoconf_configure
()
1852 # If we were passed a genuine file, make sure it calls AC_INIT.
1854 && _G_ac_init
=`$SED "$_G_sed_no_comment" "$1" |grep AC_INIT`
1856 # Otherwise it is not a genuine Autoconf input file.
1857 test -n "$_G_ac_init"
1860 test 0 -ne "$_G_status" \
1861 && func_verbose
"'$1' not using Autoconf"
1867 # func_find_tool ENVVAR NAMES...
1868 # ------------------------------
1869 # Search for a required program. Use the value of ENVVAR, if set,
1870 # otherwise find the first of the NAMES that can be run (i.e.,
1871 # supports --version). If found, set ENVVAR to the program name,
1877 _G_find_tool_envvar
=$1
1879 _G_find_tool_names
=$@
1880 eval "_G_find_tool_res=\$$_G_find_tool_envvar"
1881 if test -n "$_G_find_tool_res"; then
1882 _G_find_tool_error_prefix
="\$$find_tool_envvar: "
1886 if func_tool_version_output
$_G_prog >/dev
/null
; then
1887 _G_find_tool_res
=$_G_prog
1892 if test -n "$_G_find_tool_res"; then
1893 func_tool_version_output
>/dev
/null
$_G_find_tool_res "\
1894 ${_G_find_tool_error_prefix}Cannot run '$_G_find_tool_res --version'"
1896 # Make sure the result is exported to the environment for children
1898 eval "$_G_find_tool_envvar=\$_G_find_tool_res"
1899 eval "export $_G_find_tool_envvar"
1902 One of these is required:
1903 $_G_find_tool_names"
1908 # func_tool_version_output CMD [FATAL-ERROR-MSG]
1909 # ----------------------------------------------
1910 # Attempt to run 'CMD --version', discarding errors. The output can be
1911 # ignored by redirecting stdout, and this function used simply to test
1912 # whether the command exists and exits normally when passed a
1913 # '--version' argument.
1914 # When FATAL-ERROR-MSG is given, then this function will display the
1915 # message and exit if running 'CMD --version' returns a non-zero exit
1917 func_tool_version_output
()
1922 _G_fatal_error_msg
=$2
1924 # Some tools, like 'git2cl' produce thousands of lines of output
1925 # unless stdin is /dev/null - in that case we want to return
1926 # successfully without saving all of that output. Other tools,
1927 # such as 'help2man' exit with a non-zero status when stdin comes
1928 # from /dev/null, so we re-execute without /dev/null if that
1929 # happens. This means that occasionally, the output from both calls
1930 # ends up in the result, but the alternative would be to discard the
1931 # output from one call, and hope the other produces something useful.
1932 { $_G_cmd --version </dev
/null ||
$_G_cmd --version; } 2>/dev
/null
1935 test 0 -ne "$_G_status" && test -n "$_G_fatal_error_msg" \
1936 && func_fatal_error
"$_G_fatal_error_msg"
1942 ## -------------------- ##
1943 ## Resource management. ##
1944 ## -------------------- ##
1946 # This section contains definitions for functions that each ensure a
1947 # particular resource (a file, or a non-empty configuration variable for
1948 # example) is available, and if appropriate to extract default values
1949 # from pertinent package files. Where a variable already has a non-
1950 # empty value (as set by the package's 'bootstrap.conf'), that value is
1951 # used in preference to deriving the default. Call them using their
1952 # associated 'require_*' variable to ensure that they are executed, at
1955 # It's entirely deliberate that calling these functions can set
1956 # variables that don't obey the namespace limitations obeyed by the rest
1957 # of this file, in order that that they be as useful as possible to
1961 # require_configure_ac
1962 # --------------------
1963 # Ensure that there is a 'configure.ac' or 'configure.in' file in the
1964 # current directory that contains an uncommented call to AC_INIT, and
1965 # that '$configure_ac' contains its name.
1966 require_configure_ac
=func_require_configure_ac
1967 func_require_configure_ac
()
1971 test -z "$configure_ac" \
1972 && func_autoconf_configure configure.ac
&& configure_ac
=configure.ac
1973 test -z "$configure_ac" \
1974 && func_autoconf_configure configure.
in && configure_ac
=configure.
in
1975 test -z "$configure_ac" \
1976 || func_verbose
"found '$configure_ac'"
1978 require_configure_ac
=:
1984 # Search for GNU M4, and export it in $M4.
1985 require_gnu_m4
=func_require_gnu_m4
1986 func_require_gnu_m4
()
1991 # Find the first m4 binary that responds to --version.
1992 func_find_tool M4 gm4 gnum4
m4
1995 test -n "$M4" || func_fatal_error
"\
1996 Please install GNU M4, or 'export M4=/path/to/gnu/m4'."
1998 func_verbose
"export M4='$M4'"
2000 # Make sure the search result is visible to subshells
2007 ## --------------- ##
2008 ## Core functions. ##
2009 ## --------------- ##
2011 # This section contains the high level functions used when calling this
2012 # file as a script. 'func_extract_trace' is probably the only one that you
2013 # won't want to replace if you source this file into your own script.
2016 # func_extract_trace MACRO_NAMES [FILENAME]...
2017 # --------------------------------------------
2018 # set '$func_extract_trace_result' to a colon delimited list of arguments
2019 # to any of the comma separated list of MACRO_NAMES in FILENAME. If no
2020 # FILENAME is given, then '$configure_ac' is assumed.
2021 func_extract_trace
()
2025 $require_configure_ac
2028 _G_m4_traces
=`$bs_echo "--trace=$1" |$SED 's%,% --trace=%g'`
2029 _G_re_macros
=`$bs_echo "($1)" |$SED 's%,%|%g'`
2030 _G_macros
="$1"; shift
2032 set dummy
$configure_ac
2036 # Generate an error if the first file is missing
2039 # Sadly, we can't use 'autom4te' tracing to extract macro arguments,
2040 # because it complains about things we want to ignore at bootstrap
2041 # time - like missing m4_include files; AC_PREREQ being newer than
2042 # the installed autoconf; and returns nothing when tracing
2043 # 'AM_INIT_AUTOMAKE' when aclocal hasn't been generated yet.
2045 # The following tries to emulate a less persnickety version of (and
2046 # due to not having to wait for Perl startup on every invocation,
2047 # it's probably faster too):
2049 # autom4te --language=Autoconf --trace=$my_macro:\$% "$@"
2051 # First we give a minimal set of macro declarations to M4 to prime
2052 # it for reading Autoconf macros, while still providing some of the
2053 # functionality generally used at m4-time to supply dynamic
2054 # arguments to Autocof functions, but without following
2055 # 'm4_s?include' files.
2059 m4_define([m4_copy], [m4_define([$2], m4_defn([$1]))])
2060 m4_define([m4_rename], [m4_copy([$1], [$2])m4_undefine([$1])])
2062 # Disable these macros.
2063 m4_undefine([m4_dnl])
2064 m4_undefine([m4_include])
2065 m4_undefine([m4_m4exit])
2066 m4_undefine([m4_m4wrap])
2067 m4_undefine([m4_maketemp])
2069 # Copy and rename macros not handled by "m4 --prefix".
2070 m4_define([dnl], [m4_builtin([dnl])])
2071 m4_copy([m4_define], [m4_defun])
2072 m4_rename([m4_ifelse], [m4_if])
2073 m4_ifdef([m4_mkstemp], [m4_undefine([m4_mkstemp])])
2074 m4_rename([m4_patsubst], [m4_bpatsubst])
2075 m4_rename([m4_regexp], [m4_bregexp])
2077 # "m4sugar.mini" - useful m4-time macros for dynamic arguments.
2078 # If we discover packages that need more m4 macros defined in
2079 # order to bootstrap correctly, add them here:
2080 m4_define([m4_bmatch],
2081 [m4_if([$#], 0, [], [$#], 1, [], [$#], 2, [$2],
2082 [m4_if(m4_bregexp([$1], [$2]), -1,
2083 [$0([$1], m4_shift3($@))], [$3])])])
2084 m4_define([m4_ifndef], [m4_ifdef([$1], [$3], [$2])])
2085 m4_define([m4_ifset],
2086 [m4_ifdef([$1], [m4_ifval(m4_defn([$1]), [$2], [$3])], [$3])])
2087 m4_define([m4_require], [$1])
2088 m4_define([m4_shift3], [m4_shift(m4shift(m4shift($@)))])
2090 # "autoconf.mini" - things from autoconf macros we care about.
2091 m4_copy([m4_defun], [AC_DEFUN])
2093 # Dummy definitions for the macros we want to trace.
2094 # AM_INIT_AUTOMAKE at least produces no trace without this.
2099 for _G_macro
in $_G_macros; do
2101 func_append _G_mini
"AC_DEFUN([$_G_macro])$nl"
2105 # We discard M4's stdout, but the M4 trace output from reading our
2106 # "autoconf.mini" followed by any other files passed to this
2107 # function is then scanned by sed to transform it into a colon
2108 # delimited argument list assigned to a shell variable.
2109 _G_transform
='s|#.*$||; s|^dnl .*$||; s| dnl .*$||;'
2111 # Unfortunately, alternation in regexp addresses doesn't work in at
2112 # least BSD (and hence Mac OS X) sed, so we have to append a capture
2113 # and print block for each traced macro to the sed transform script.
2116 for _G_macro
in $_G_macros; do
2118 func_append _G_transform
'
2119 /^m4trace: -1- '"$_G_macro"'/ {
2120 s|^m4trace: -1- '"$_G_macro"'[([]*||
2129 # Save the command pipeline results for further use by callers of
2131 func_extract_trace_result
=`$bs_echo "$_G_mini" \
2132 |$M4 -daq --prefix $_G_m4_traces - "$@" 2>&1 1>/dev/null \
2133 |$SED -n -e "$_G_transform"`
2137 # func_extract_trace_first MACRO_NAMES [FILENAME]...
2138 # --------------------------------------------------
2139 # Exactly like func_extract_trace, except that only the first argument
2140 # to the first invocation of one of the comma separated MACRO_NAMES is
2141 # returned in '$func_extract_trace_first_result'.
2142 func_extract_trace_first
()
2146 func_extract_trace
${1+"$@"}
2147 func_extract_trace_first_result
=`$bs_echo "$func_extract_trace_result" \
2148 |$SED -e 's|:.*$||g' -e 1q`
2152 # func_main [ARG]...
2153 # ------------------
2159 usage
='$progname MACRO_NAME FILE [...]'
2162 The first argument to this program is the name of an autotools macro
2163 whose arguments you want to extract by examining the files listed in the
2164 remaining arguments using the same tool that Autoconf and Automake use,
2167 The arguments are returned separated by colons, with each traced call
2168 on a separate line.'
2170 # Option processing.
2172 eval set dummy
"$func_options_result"; shift
2174 # Validate remaining non-option arguments.
2176 || func_fatal_help
"not enough arguments"
2178 # Pass non-option arguments to extraction function.
2179 func_extract_trace
"$@"
2182 test -n "$func_extract_trace_result" \
2183 && $bs_echo "$func_extract_trace_result"
2190 ## --------------------------- ##
2191 ## Actually perform the trace. ##
2192 ## --------------------------- ##
2194 # Only call 'func_main' if this script was called directly.
2195 test extract-trace
= "$progname" && func_main
"$@"
2198 # mode: shell-script
2200 # eval: (add-hook 'write-file-hooks 'time-stamp)
2201 # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
2202 # time-stamp-time-zone: "UTC"
2205 # Set a version string for *this* script.
2206 scriptversion
=2013-09-15.06
; # UTC
2208 # This program is free software: you can redistribute it and/or modify
2209 # it under the terms of the GNU General Public License as published by
2210 # the Free Software Foundation, either version 3 of the License, or
2211 # (at your option) any later version.
2213 # This program is distributed in the hope that it will be useful,
2214 # but WITHOUT ANY WARRANTY; without even the implied warranty of
2215 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2216 # GNU General Public License for more details.
2218 # You should have received a copy of the GNU General Public License
2219 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2221 # Originally written by Paul Eggert. The canonical version of this
2222 # script is maintained as build-aux/bootstrap in gnulib, however, to
2223 # be useful to your project, you should place a copy of it under
2224 # version control in the top-level directory of your project. The
2225 # intent is that all customization can be done with a bootstrap.conf
2226 # file also maintained in your version control; gnulib comes with a
2227 # template build-aux/bootstrap.conf to get you started.
2229 # Please report bugs or propose patches to bug-gnulib@gnu.org.
2236 # Most GNUish projects do not keep all of the generated Autotool
2237 # files under version control, but running all of the right tools
2238 # with the right arguments, in the correct order to regenerate
2239 # all of those files in readiness for configuration and building
2240 # can be surprisingly involved! Many projects have a 'bootstrap'
2241 # script under version control to invoke Autotools and perform
2242 # other assorted book-keeping with version numbers and the like.
2244 # This bootstrap script aims to probe the configure.ac and top
2245 # Makefile.am of your project to automatically determine what
2246 # the correct ordering and arguments are and then run the tools for
2247 # you. In order to use it, you can generate an initial standalone
2250 # gl/build-aux/inline-source gl/build-aux/bootstrap.in > bootstrap
2252 # You should then store than script in version control for other
2253 # developers in you project. It will give you instructions about
2254 # how to keep it up to date if the sources change.
2256 # See gl/doc/bootstrap.texi for documentation on how to write
2257 # a bootstrap.conf to customize it for your project's
2261 ## ================================================================== ##
2263 ## DO NOT EDIT THIS FILE, CUSTOMIZE IT USING A BOOTSTRAP.CONF ##
2265 ## ================================================================== ##
2267 ## ------------------------------- ##
2268 ## User overridable command paths. ##
2269 ## ------------------------------- ##
2271 # All uppercase denotes values stored in the environment. These
2272 # variables should generally be overridden by the user - however, we do
2273 # set them to 'true' in some parts of this script to prevent them being
2274 # called at the wrong time by other tools that we call ('autoreconf',
2277 # We also allow 'LIBTOOLIZE', 'M4', 'SHA1SUM' and some others to be
2278 # overridden, and export the result for child processes, but they are
2279 # handled by the function 'func_find_tool' and not defaulted in this
2282 : ${ACLOCAL="aclocal"}
2283 : ${AUTOCONF="autoconf"}
2284 : ${AUTOHEADER="autoheader"}
2285 : ${AUTOM4TE="autom4te"}
2286 : ${AUTOHEADER="autoheader"}
2287 : ${AUTOMAKE="automake"}
2288 : ${AUTOPOINT="autopoint"}
2289 : ${AUTORECONF="autoreconf"}
2291 : ${CONFIG_SHELL="/bin/sh"}
2293 : ${EGREP="grep -E"}
2294 : ${FGREP="grep -F"}
2312 ## -------------- ##
2313 ## Configuration. ##
2314 ## -------------- ##
2316 # A newline delimited list of triples of programs (that respond to
2317 # --version), the minimum version numbers required (or just '-' in the
2318 # version field if any version will be sufficient) and homepage URLs
2319 # to help locate missing packages.
2322 # Name of a file containing instructions on installing missing packages
2323 # required in 'buildreq'.
2324 buildreq_readme
=README-hacking
2326 # These are extracted from AC_INIT in configure.ac, though you can
2327 # override those values in 'bootstrap.conf' if you prefer.
2335 # These are extracted from 'gnulib-cache.m4', or else fall-back
2336 # automatically on the gnulib defaults; unless you set the values
2337 # manually in 'bootstrap.conf'.
2345 # The list of gnulib modules required at 'gnulib-tool' time. If you
2346 # check 'gnulib-cache.m4' into your repository, then this list will be
2347 # extracted automatically.
2350 # Extra gnulib files that are not in modules, which override files of
2351 # the same name installed by other bootstrap tools.
2352 gnulib_non_module_files
="
2354 build-aux/install-sh
2356 build-aux/texinfo.tex
2358 build-aux/config.guess
2359 build-aux/config.sub
2363 # Relative path to the local gnulib submodule, and url to the upstream
2364 # git repository. If you have a gnulib entry in your .gitmodules file,
2365 # these values are ignored.
2369 # Additional gnulib-tool options to use.
2370 gnulib_tool_options
="
2374 # bootstrap removes any macro-files that are not included by aclocal.m4,
2375 # except for files listed in this variable that are always kept.
2380 # When truncating long commands for display, always allow at least this
2381 # many characters before truncating.
2384 # The command to download all .po files for a specified domain into
2385 # a specified directory. Fill in the first %s is the domain name, and
2386 # the second with the destination directory. Use rsync's -L and -r
2387 # options because the latest/%s directory and the .po files within are
2389 po_download_command_format
=\
2390 "rsync --delete --exclude '*.s1' -Lrtvz \
2391 'translationproject.org::tp/latest/%s/' '%s'"
2393 # Other locale categories that need message catalogs.
2394 extra_locale_categories
=
2396 # Additional xgettext options to use. Gnulib might provide you with an
2397 # extensive list of additional options to append to this, but gettext
2398 # 0.16.1 and newer appends them automaticaly, so you can safely ignore
2399 # the complaints from 'gnulib-tool' if your $configure_ac states:
2401 # AM_GNU_GETTEXT_VERSION([0.16.1])
2403 --flag=_:1:pass-c-format
2404 --flag=N_:1:pass-c-format
2407 # Package copyright holder for gettext files. Defaults to FSF if unset.
2410 # File that should exist in the top directory of a checked out hierarchy,
2411 # but not in a distribution tarball.
2414 # Whether to use copies instead of symlinks by default (if set to true,
2415 # the --copy option has no effect).
2418 # Set this to ".cvsignore .gitignore" in 'bootstrap.conf' if you want
2419 # those files to be generated in directories like 'lib/', 'm4/', and 'po/',
2420 # or set it to "auto" to make this script select what to use based
2421 # on what version control system (if any) is used in the source directory.
2422 # Or set it to "none" to ignore VCS ignore files entirely. Default is
2427 ## ------------------- ##
2428 ## Hookable functions. ##
2429 ## ------------------- ##
2431 # After 'bootstrap.conf' has been sourced, execution proceeds by calling
2432 # 'func_bootstrap'. Wherever a function is decorated with
2433 # 'func_hookable func_name', you will find a matching 'func_run_hooks
2434 # func_name', which executes all functions added with 'func_add_hook
2435 # func_name my_func'.
2437 # You might notice that many of these functions begin with a series of
2438 # '$require_foo' lines. See the docu-comments at the start of the
2439 # 'Resource management' section for a description of what these are.
2442 # func_bootstrap [ARG]...
2443 # -----------------------
2444 # All the functions called inside func_bootstrap are hookable. See the
2445 # the individual implementations for details.
2450 # Save the current positional parameters to prevent them being
2451 # corrupted by calls to 'set' in 'func_init'.
2452 func_quote_for_eval
${1+"$@"}
2453 _G_saved_positional_parameters
=$func_quote_for_eval_result
2458 # Option processing.
2459 eval func_options
"$_G_saved_positional_parameters"
2461 # Post-option preparation.
2464 # Reconfigure the package.
2467 # Ensure .version is up-to-date.
2468 func_update_dotversion
2477 # Any early initialisations can be hooked to this function. Consider
2478 # whether you can hook onto 'func_prep' instead, because if you hook
2479 # any slow to execute code in here, it will also add to the time before
2480 # './bootstrap --version' can respond.
2481 func_hookable func_init
2486 func_run_hooks func_init
2492 # Function to perform preparation for remaining bootstrap process. If
2493 # your hooked code relies on the outcome of 'func_options' hook it here
2494 # rather than to 'func_init'.
2496 # All the functions called inside func_prep are hookable. See the
2497 # individual implementations for details.
2498 func_hookable func_prep
2503 $require_buildtools_uptodate
2504 $require_checkout_only_file
2506 $require_gnulib_merge_changelog
2508 # fetch update files from the translation project
2509 func_update_translations
2511 func_run_hooks func_prep
2515 # func_update_translations
2516 # ------------------------
2517 # Update package po files and translations.
2518 func_hookable func_update_translations
2519 func_update_translations
()
2527 func_update_po_files po
$package ||
exit $?
2530 func_run_hooks func_update_translations
2537 # Reconfigure the current package by running the appropriate autotools in a
2539 func_hookable func_reconfigure
2544 # Ensure ChangeLog presence.
2545 if test -n "$gnulib_modules"; then
2546 func_ifcontains
"$gnulib_modules" gitlog-to-changelog \
2547 func_ensure_changelog
2549 $require_gnulib_cache
2550 if sed -n '/^gl_MODULES(\[/,/^])$/p' $gnulib_cache 2>/dev
/null |
2551 func_grep_q gitlog-to-changelog
2553 func_ensure_changelog
2557 # Released 'autopoint' has the tendency to install macros that have
2558 # been obsoleted in current 'gnulib., so run this before 'gnulib-tool'.
2561 # Autoreconf runs 'aclocal' before 'libtoolize', which causes spurious
2562 # warnings if the initial 'aclocal' is confused by the libtoolized
2563 # (or worse: out-of-date) macro directory.
2566 # If you need to do anything after 'gnulib-tool' is done, but before
2567 # 'autoreconf' runs, you don't need to override this whole function,
2568 # because 'func_gnulib_tool' is hookable.
2573 func_run_hooks func_reconfigure
2579 # Run 'gnulib-tool' to fetch gnulib modules into the current package.
2581 # It's assumed that since you are using gnulib's 'bootstrap' script,
2582 # you're also using gnulib elsewhere in your package. If not, then
2583 # you can replace this function in 'bootstrap.conf' with:
2585 # func_gnulib_tool () { :; }
2587 # (although the function returns immediately if $gnulib_tool is set to
2588 # true in any case).
2589 func_hookable func_gnulib_tool
2594 $require_gnulib_tool
2597 test true
= "$gnulib_tool" ||
{
2598 # bootstrap.conf written for gnulib bootstrap expects
2599 # gnulib_tool_option_extras to which --no-changelog is appended,
2600 # but libtool bootstrap expects you to append to gnulib_tool_options
2601 # so that you can override the --no-changelog default: make sure we
2602 # support both styles so users can migrate between them easily.
2603 gnulib_tool_all_options
="$gnulib_tool_options $gnulib_tool_option_extras"
2605 if test -n "$gnulib_modules"; then
2606 $require_gnulib_cache
2607 $require_gnulib_tool_base_options
2609 gnulib_mode
=--import
2611 # Try not to pick up any stale values from 'gnulib-cache.m4'.
2612 rm -f "$gnulib_cache"
2614 test -n "$gnulib_tool_base_options" \
2615 && func_append_uniq gnulib_tool_all_options
" $gnulib_tool_base_options"
2616 test -n "$gnulib_mk" \
2617 && func_append_uniq gnulib_tool_all_options
" --makefile-name=$gnulib_mk"
2618 test -n "$tests_base" && {
2619 func_append_uniq gnulib_tool_all_options
" --tests-base=$tests_base"
2620 func_append_uniq gnulib_tool_all_options
" --with-tests"
2624 # 'gnulib_modules' and others are cached in 'gnulib-cache.m4':
2625 # Use 'gnulib --update' to fetch gnulib modules.
2626 gnulib_mode
=--update
2629 # Add a sensible default libtool option to gnulib_tool_options.
2630 # The embedded echo is to squash whitespace before globbing.
2631 case `echo " "$gnulib_tool_all_options" "` in
2632 *" --no-libtool "*|
*" --libtool "*) ;;
2633 *) if test true
= "$LIBTOOLIZE"; then
2634 func_append_uniq gnulib_tool_all_options
" --no-libtool"
2636 func_append_uniq gnulib_tool_all_options
" --libtool"
2641 $opt_copy || func_append_uniq gnulib_tool_all_options
" --symlink"
2643 func_append_uniq gnulib_tool_all_options
" $gnulib_mode"
2644 func_append gnulib_tool_all_options
" $gnulib_modules"
2646 # The embedded echo is to squash whitespace before display.
2647 gnulib_cmd
=`echo $gnulib_tool $gnulib_tool_all_options`
2649 func_show_eval
"$gnulib_cmd" 'exit $?'
2651 # Use 'gnulib-tool --copy-file' to install non-module files.
2652 func_install_gnulib_non_module_files
2655 func_run_hooks func_gnulib_tool
2661 # Function to perform all finalisation for the bootstrap process.
2662 func_hookable func_fini
2667 func_gettext_configuration
2668 func_clean_dangling_symlinks
2669 func_clean_unused_macros
2670 func_skip_po_recommendation
2672 func_run_hooks func_fini
2674 $require_bootstrap_uptodate
2676 func_echo
"Done. Now you can run './configure'."
2680 # func_gettext_configuration
2681 # --------------------------
2682 # Edit configuration values into po/Makevars.
2683 func_hookable func_gettext_configuration
2684 func_gettext_configuration
()
2690 test true
= "$AUTOPOINT" ||
{
2691 $require_copyright_holder
2692 $require_extra_locale_categories
2693 $require_package_bugreport
2695 # Escape xgettext options for sed Makevars generation below.
2696 # We have to delete blank lines in a separate script so that we don't
2697 # append \\\ to the penultimate line, and then delete the last empty
2698 # line, which messes up the variable substitution later in this
2699 # function. Note that adding a literal \\\ requires double escaping
2700 # here, once for the execution subshell, and again for the assignment,
2701 # which is why there are actually 12 (!!) backslashes in the script.
2702 _G_xgettext_options
=`echo "$xgettext_options$nl" |$SED '/^$/d' |$SED '
2704 s|$| \\\\\\\\\\\\|'`
2706 # Create gettext configuration.
2707 func_echo
"Creating po/Makevars from po/Makevars.template ..."
2710 /^EXTRA_LOCALE_CATEGORIES *=/s|=.*|= '"$extra_locale_categories"'|
2711 /^COPYRIGHT_HOLDER *=/s|=.*|= '"$copyright_holder"'|
2712 /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$package_bugreport"'|
2713 /^XGETTEXT_OPTIONS *=/{
2716 '"$_G_xgettext_options"' \\\
2717 $${end_of_xgettext_options+}
2719 ' po
/Makevars.template
>po
/Makevars ||
exit 1
2722 func_run_hooks func_gettext_configuration
2727 ## --------------- ##
2728 ## Core functions. ##
2729 ## --------------- ##
2731 # This section contains the main functions called from the 'Hookable
2732 # functions' (shown above), and are the ones you're most likely
2733 # to want to replace with your own implementations in 'bootstrap.conf'.
2738 # If this package uses gettext, then run 'autopoint'.
2745 test true
= "$AUTOPOINT" \
2746 || func_show_eval
"$AUTOPOINT --force" 'exit $?'
2752 # If this package uses libtool, then run 'libtoolize'.
2759 test true
= "$LIBTOOLIZE" ||
{
2760 _G_libtoolize_options
=
2761 $opt_copy && func_append _G_libtoolize_options
" --copy"
2762 $opt_force && func_append _G_libtoolize_options
" --force"
2763 $opt_verbose || func_append _G_libtoolize_options
" --quiet"
2764 func_show_eval
"$LIBTOOLIZE$_G_libtoolize_options" 'exit $?'
2769 # func_gnulib_tool_copy_file SRC DEST
2770 # -----------------------------------
2771 # Copy SRC, a path relative to the gnulib sub-tree, to DEST, a path
2772 # relative to the top-level source directory using gnulib-tool so that
2773 # any patches or replacements in $local_gl_dir are applied.
2774 func_gnulib_tool_copy_file
()
2778 $require_gnulib_tool
2781 if test true
= "$gnulib_tool"; then
2782 # If gnulib-tool is not available (e.g. bootstrapping in a
2783 # distribution tarball), make sure that at least we have some
2784 # version of the required file already in place.
2785 test -f "$2" || func_fatal_error
"\
2786 Can't find, copy or download '$2', a required
2787 gnulib supplied file, please provide the location of a
2788 complete 'gnulib' tree by setting 'gnulib_path' in your
2789 'bootstrap.conf' or with the '--gnulib-srcdir' option -
2790 or else specify the location of your 'git' binary by
2791 setting 'GIT' in the environment so that a fresh
2792 'gnulib' submodule can be cloned."
2794 $require_gnulib_copy_cmd
2796 $gnulib_copy_cmd $1 $2 2>/dev
/null ||
{
2797 $require_gnulib_path
2799 func_error
"'$gnulib_path/$1' does not exist"
2806 # func_install_gnulib_non_module_files
2807 # ------------------------------------
2808 # Get additional non-module files from gnulib, overriding existing files.
2809 func_install_gnulib_non_module_files
()
2814 $require_gnulib_tool
2816 test -n "$gnulib_non_module_files" && {
2819 for file in $gnulib_non_module_files; do
2821 */COPYING
*) dest
=COPYING
;;
2822 */INSTALL
) dest
=INSTALL
;;
2823 build-aux
/missing
) dest
=
2824 func_warning settings
"\
2825 Please remove build-aux/missing from gnulib_module_files in
2826 'bootstrap.conf', as it may clash with Automake's version."
2828 build-aux
/*) dest
=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
2832 # Be sure to show all copying errors before bailing out
2834 || func_gnulib_tool_copy_file
"$file" "$dest" \
2835 || maybe_exit_cmd
="exit $EXIT_FAILURE"
2843 # func_ensure_changelog
2844 # ---------------------
2845 # Even with 'gitlog-to-changelog' generated ChangeLogs, automake
2846 # will not run to completion with no ChangeLog file.
2847 func_ensure_changelog
()
2851 test -f ChangeLog
&& mv -f ChangeLog ChangeLog~
2853 cat >ChangeLog
<<'EOT'
2854 ## ---------------------- ##
2855 ## DO NOT EDIT THIS FILE! ##
2856 ## ---------------------- ##
2858 ChangeLog is generated by gitlog-to-changelog.
2861 _G_message
="creating dummy 'ChangeLog'"
2862 test -f ChangeLog~ \
2863 && func_append _G_message
' (backup in ChangeLog~)'
2864 func_verbose
"$_G_message"
2872 # Being careful not to re-run 'autopoint' or 'libtoolize', and not to
2873 # try to run 'autopoint', 'libtoolize' or 'autoheader' on packages that
2874 # don't use them, defer to 'autoreconf' for execution of the remaining
2875 # autotools to bootstrap this package.
2881 $require_build_aux # automake and others put files in here
2882 $require_macro_dir # aclocal and others put files in here
2884 # We ran these manually already, and autoreconf won't exec ':'
2885 save_AUTOPOINT
=$AUTOPOINT; AUTOPOINT
=true
2886 save_LIBTOOLIZE
=$LIBTOOLIZE; LIBTOOLIZE
=true
2888 _G_autoreconf_options
=
2889 $opt_copy || func_append _G_autoreconf_options
" --symlink"
2890 $opt_force && func_append _G_autoreconf_options
" --force"
2891 $opt_verbose && func_append _G_autoreconf_options
" --verbose"
2892 func_show_eval
"$AUTORECONF$_G_autoreconf_options --install" 'exit $?'
2894 AUTOPOINT
=$save_AUTOPOINT
2895 LIBTOOLIZE
=$save_LIBTOOLIZE
2899 # func_check_configuration VARNAME [CONFIGURE_MACRO]
2900 # --------------------------------------------------
2901 # Exit with a suitable diagnostic for an important configuration change
2902 # that needs to be made before bootstrap can run correctly.
2903 func_check_configuration
()
2907 $require_configure_ac
2909 eval 'test -n "$'$1'"' ||
{
2910 _G_error_msg
="please set '$1' in 'bootstrap.conf'"
2911 if test -n "$configure_ac" && test -n "$2"; then
2912 func_append _G_error_msg
"
2913 or add the following (or similar) to your '$configure_ac':
2917 func_fatal_error
"$_G_error_msg"
2922 # func_clean_dangling_symlinks
2923 # ----------------------------
2924 # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
2925 # gnulib-populated directories. Such .m4 files would cause aclocal to
2926 # fail. The following requires GNU find 4.2.3 or newer. Considering
2927 # the usual portability constraints of this script, that may seem a very
2928 # demanding requirement, but it should be ok. Ignore any failure,
2929 # which is fine, since this is only a convenience to help developers
2930 # avoid the relatively unusual case where a symlinked-to .m4 file is
2931 # git-removed from gnulib between successive runs of this script.
2932 func_clean_dangling_symlinks
()
2937 $require_source_base
2939 func_verbose
"cleaning dangling symlinks"
2941 find "$macro_dir" "$source_base" \
2942 -depth \
( -name '*.m4' -o -name '*.[ch]' \
) \
2943 -type l
-xtype l
-delete > /dev
/null
2>&1
2947 # func_clean_unused_macros
2948 # ------------------------
2949 # Autopoint can result in over-zealously adding macros into $macro_dir
2950 # even though they are not actually used, for example tests to help
2951 # build the 'intl' directory even though you have specified
2952 # 'AM_GNU_GETTEXT([external])' in your configure.ac. This function
2953 # looks removes any macro files that can be found in gnulib, but
2954 # are not 'm4_include'd by 'aclocal.m4'.
2955 func_clean_unused_macros
()
2959 $require_gnulib_path
2962 test -n "$gnulib_path" && test -f aclocal.
m4 && {
2963 aclocal_m4s
=`find . -name aclocal.m4 -print`
2965 # We use 'ls|grep' instead of 'ls *.m4' to avoid exceeding
2966 # command line length limits in some shells.
2967 for file in `cd "$macro_dir" && ls -1 |grep '\.m4$'`; do
2969 # Remove a macro file when aclocal.m4 does not m4_include it...
2970 func_grep_q
'm4_include([[]'$macro_dir/$file'])' $aclocal_m4s \
2971 ||
test ! -f "$gnulib_path/m4/$file" ||
{
2973 # ...and there is an identical file in gnulib...
2974 if func_cmp_s
"$gnulib_path/m4/$file" "$macro_dir/$file"; then
2976 # ...and it's not in the precious list ('echo' is needed
2977 # here to squash whitespace for the match expression).
2978 case " "`echo $gnulib_precious`" " in
2980 *) rm -f "$macro_dir/$file"
2982 "removing unused gnulib file '$macro_dir/$file'"
2991 # func_skip_po_recommendation
2992 # ---------------------------
2993 # If there is a po directory, and '--skip-po' wasn't passed, let the
2994 # user know that they can use '--skip-po' on subsequent invocations.
2995 func_skip_po_recommendation
()
3001 || func_warning recommend
"\
3002 If your pofiles are up-to-date, you can rerun bootstrap
3003 as '$progname --skip-po' to avoid redownloading."
3007 # func_update_dotversion
3008 # ----------------------
3009 # Even with 'gitlog-to-changelog' generated ChangeLogs, automake
3010 # will not run to completion with no ChangeLog file.
3011 func_update_dotversion
()
3015 test -f "$build_aux/git-version-gen" && {
3016 _G_message
="updating .version"
3017 test -f .version
&& {
3018 mv .version .version~
3019 func_append _G_message
" (backup in .version~)"
3021 func_verbose
"updating .version"
3023 $build_aux/git-version-gen dummy-arg
> .version
3029 ## -------------------- ##
3030 ## Resource management. ##
3031 ## -------------------- ##
3033 # This section contains definitions for functions that each ensure a
3034 # particular resource (a file, or a non-empty configuration variable for
3035 # example) is available, and if appropriate to extract default values
3036 # from pertinent package files. Where a variable already has a non-
3037 # empty value (as set by the package's 'bootstrap.conf'), that value is
3038 # used in preference to deriving the default. Call them using their
3039 # associated 'require_*' variable to ensure that they are executed, at
3043 # require_checkout_only_file
3044 # --------------------------
3045 # Bail out if this package only bootstraps properly from a repository
3047 require_checkout_only_file
=func_require_checkout_only_file
3048 func_require_checkout_only_file
()
3053 test -n "$checkout_only_file" && test ! -f "$checkout_only_file" \
3054 && func_fatal_error
"\
3055 Bootstrapping from a non-checked-out distribution is risky.
3056 If you wish to bootstrap anyway, use the '--force' option."
3059 require_checkout_only_file
=:
3063 # require_aclocal_amflags
3064 # -----------------------
3065 # Ensure '$aclocal_amflags' has a sensible default, extracted from
3066 # 'Makefile.am' if necessary.
3067 require_aclocal_amflags
=func_require_aclocal_amflags
3068 func_require_aclocal_amflags
()
3072 $require_makefile_am
3074 _G_sed_extract_aclocal_amflags
='s|#.*$||
3075 /^[ ]*ACLOCAL_AMFLAGS[ ]*=/ {
3076 s|^.*=[ ]*\(.*\)|aclocal_amflags="\1"|
3080 _G_aclocal_flags_cmd
=`$SED -n "$_G_sed_extract_aclocal_amflags" \
3082 eval "$_G_aclocal_flags_cmd"
3084 func_verbose
"ACLOCAL_AMFLAGS='$aclocal_amflags'"
3086 require_aclocal_amflags
=:
3090 # require_autoheader
3091 # ------------------
3092 # Skip autoheader if it's not needed.
3093 require_autoheader
=func_require_autoheader
3094 func_require_autoheader
()
3098 test true
= "$AUTOHEADER" ||
{
3099 func_extract_trace AC_CONFIG_HEADERS
3100 test -n "$func_extract_trace_result" \
3101 || func_extract_trace AC_CONFIG_HEADER
3103 test -n "$func_extract_trace_result" ||
{
3106 func_verbose
"export AUTOHEADER='$AUTOHEADER'"
3108 # Make sure the search result is visible to subshells
3113 require_autoheader
=:
3119 # Skip autopoint if it's not needed.
3120 require_autopoint
=func_require_autopoint
3121 func_require_autopoint
()
3125 test true
= "$AUTOPOINT" ||
{
3126 func_extract_trace AM_GNU_GETTEXT_VERSION
3128 test -n "$func_extract_trace_result" ||
{
3131 func_verbose
"export AUTOPOINT='$AUTOPOINT'"
3133 # Make sure the search result is visible to subshells
3142 # require_bootstrap_uptodate
3143 # --------------------------
3144 # Complain if the version of bootstrap in the gnulib directory differs
3145 # from the one we are running.
3146 require_bootstrap_uptodate
=func_require_bootstrap_uptodate
3147 func_require_bootstrap_uptodate
()
3153 _G_bootstrap_sources
="
3154 $build_aux/bootstrap.in
3155 $build_aux/extract-trace
3156 $build_aux/funclib.sh
3157 $build_aux/options-parser
3160 _G_missing_bootstrap_sources
=false
3161 for _G_src
in $_G_bootstrap_sources; do
3162 test -f "$_G_src" || _G_missing_bootstrap_sources
=:
3165 if $_G_missing_bootstrap_sources; then
3166 func_warning upgrade
"\
3167 Please add bootstrap to your gnulib_modules list in
3168 'bootstrap.conf', so that I can tell you when there are
3171 $build_aux/inline-source
$build_aux/bootstrap.
in > bootstrap.new
3173 if func_cmp_s
"$progpath" bootstrap.new
; then
3175 func_verbose
"bootstrap script up to date"
3177 func_warning upgrade
"\
3178 An updated bootstrap script has been generated for you in
3179 'bootstrap.new'. After you've verified that you want
3180 the changes, you can update with:
3181 cat bootstrap.new > $progname
3184 Or you can disable this check permanently by adding the
3185 following to 'bootstrap.conf':
3186 require_bootstrap_uptodate=:"
3190 require_bootstrap_uptodate
=:
3196 # Ensure that '$build_aux' is set, and if it doesn't already point to an
3197 # existing directory, create one.
3198 require_build_aux
=func_require_build_aux
3199 func_require_build_aux
()
3203 test -n "$build_aux" ||
{
3204 func_extract_trace_first AC_CONFIG_AUX_DIR
3205 build_aux
=$func_extract_trace_first_result
3206 func_check_configuration build_aux \
3207 "AC_CONFIG_AUX_DIR([name of a directory for build scripts])"
3209 func_verbose
"build_aux='$build_aux'"
3212 $require_vc_ignore_files
3214 # If the build_aux directory doesn't exist, create it now, and mark it
3215 # as ignored for the VCS.
3216 if test ! -d "$build_aux"; then
3217 func_show_eval
"mkdir '$build_aux'"
3219 test -n "$vc_ignore_files" \
3220 || func_insert_if_absent
"$build_aux" $vc_ignore_files
3227 # require_buildreq_autobuild
3228 # --------------------------
3229 # Try to find whether the bootstrap requires autobuild.
3230 require_buildreq_autobuild
=func_require_buildreq_autobuild
3231 func_require_buildreq_autobuild
()
3237 test -f "$macro_dir/autobuild.m4" \
3238 ||
printf '%s\n' "$buildreq" |func_grep_q
'^[ ]*autobuild' \
3240 func_extract_trace AB_INIT
3241 test -n "$func_extract_trace_result" && {
3242 func_append buildreq
'autobuild - http://josefsson.org/autobuild/
3244 func_verbose
"auto-adding 'autobuild' to build requirements"
3248 require_buildreq_autobuild
=:
3252 # require_buildreq_autoconf
3253 # require_buildreq_autopoint
3254 # require_buildreq_libtoolize
3255 # ---------------------------
3256 # Try to find the minimum compatible version of autoconf/libtool
3257 # required to bootstrap successfully, and add it to '$buildreq'.
3258 for tool
in autoconf libtoolize autopoint
; do
3260 v
=require_buildreq_
${tool}
3263 autoconf
) m
=AC_PREREQ
;;
3264 libtoolize
) m
=LT_PREREQ
; b
=libtool
;;
3265 autopoint
) m
=AM_GNU_GETTEXT_VERSION b
=gettext ;;
3273 # The following is ignored if undefined, but might be necessary
3274 # in order for `func_find_tool` to run.
3275 ${require_'$tool'-:}
3277 printf '\''%s\n'\'' "$buildreq" |func_grep_q '\''^[ ]*'$tool\'' || {
3278 func_extract_trace '$m'
3279 _G_version=$func_extract_trace_result
3280 test -n "$_G_version" && {
3281 func_append buildreq "\
3282 '$tool' $_G_version http://www.gnu.org/s/'$b'
3285 "auto-adding '\'$tool'-'$_G_version\'' to build requirements"
3295 # require_buildreq_automake
3296 # -------------------------
3297 # Try to find the minimum compatible version of automake required to
3298 # bootstrap successfully, and add it to '$buildreq'.
3299 require_buildreq_automake
=func_require_buildreq_automake
3300 func_require_buildreq_automake
()
3304 # if automake is not already listed in $buildreq...
3305 printf '%s\n' "$buildreq" |func_grep_q automake ||
{
3306 func_extract_trace AM_INIT_AUTOMAKE
3308 # ...and AM_INIT_AUTOMAKE is declared...
3309 test -n "$func_extract_trace_result" && {
3310 automake_version
=`$bs_echo "$func_extract_trace_result" \
3311 |$SED -e 's|[^0-9]*||' -e 's| .*$||'`
3312 test -n "$automake_version" || automake_version
=-
3314 func_append buildreq
"\
3315 automake $automake_version http://www.gnu.org/s/automake
3318 "auto-adding 'automake-$automake_version' to build requirements"
3322 require_buildreq_automake
=:
3326 # require_buildreq_patch
3327 # ----------------------
3328 # Automatically add a patch build-requirement if there are diff files
3330 require_buildreq_patch
=func_require_buildreq_patch
3331 func_require_buildreq_patch
()
3335 $require_local_gl_dir
3337 # This ensures PATCH is set appropriately by the time
3338 # func_check_versions enforces $buildreq.
3341 # If patch is not already listed in $buildreq...
3342 printf '%s\n' "$buildreq" |func_grep_q
'^[ ]*patch' ||
{
3343 # The ugly find invocation is necessary to exit with non-zero
3344 # status for old find binaries that don't support -exec fully.
3345 if test ! -d "$local_gl_dir" \
3346 ||
find "$local_gl_dir" -name *.
diff -exec false
{} \
; ; then :
3348 func_append buildreq
'patch - http://www.gnu.org/s/patch
3353 require_buildreq_patch
=:
3357 # require_buildtools_uptodate
3358 # ---------------------------
3359 # Ensure all the packages listed in BUILDREQS are available on the build
3360 # machine at the minimum versions or better.
3361 require_buildtools_uptodate
=func_require_buildtools_uptodate
3362 func_require_buildtools_uptodate
()
3366 $require_buildreq_autobuild
3367 $require_buildreq_autoconf
3368 $require_buildreq_automake
3369 $require_buildreq_libtoolize
3370 $require_buildreq_autopoint
3371 $require_buildreq_patch
3373 test -n "$buildreq" && {
3376 func_check_versions
$buildreq
3377 $func_check_versions_result ||
{
3378 test -n "$buildreq_readme" \
3379 && test -f "$buildreq_readme" \
3381 $buildreq_readme explains how to obtain these prerequisite programs:
3383 func_strtable
0 11 12 36 \
3384 "Program" "Min_version" "Homepage" $buildreq
3385 func_fatal_error
"$_G_error_hdr$func_strtable_result"
3389 require_buildtools_uptodate
=:
3393 # require_copyright_holder
3394 # ------------------------
3395 # Ensure there is a sensible non-empty default value in '$copyright_holder'.
3396 require_copyright_holder
=func_require_copyright_holder
3397 func_require_copyright_holder
()
3401 test -n "$copyright_holder" ||
{
3402 copyright_holder
='Free Software Foundation, Inc.'
3403 func_warning settings
"\
3404 Please set copyright_holder explicitly in 'bootstrap.conf';
3405 defaulting to '$copyright_holder'."
3408 require_copyright_holder
=:
3414 # Ensure doc_base has a sensible value, extracted from 'gnulib-cache.m4'
3415 # if possible, otherwise letting 'gnulib-tool' pick a default.
3416 require_doc_base
=func_require_doc_base
3417 func_require_doc_base
()
3421 $require_gnulib_cache
3423 test -f "$gnulib_cache" && test -z "$doc_base" && {
3424 func_extract_trace_first
"gl_DOC_BASE" "$gnulib_cache"
3425 doc_base
=$func_extract_trace_first_result
3427 test -n "$doc_base" && func_verbose
"doc_base='$doc_base'"
3434 # require_dotgitmodules
3435 # ---------------------
3436 # Ensure we have a '.gitmodules' file, with appropriate 'gnulib' settings.
3437 require_dotgitmodules
=func_require_dotgitmodules
3438 func_require_dotgitmodules
()
3444 test true
= "$GIT" ||
{
3445 # A gnulib entry in .gitmodules always takes precedence.
3446 _G_path
=`$GIT config --file .gitmodules submodule.gnulib.path 2>/dev/null`
3448 test -n "$_G_path" ||
{
3449 $require_vc_ignore_files
3451 func_verbose
"creating '.gitmodules'"
3453 # If the .gitmodules file doesn't exist, create it now, and mark
3454 # it as ignored for the VCS.
3455 test -n "$gnulib_path" || gnulib_path
=gnulib
3456 test -n "$gnulib_url" || gnulib_url
=git
://git.sv.gnu.org
/gnulib
3459 echo '[submodule "gnulib"]'
3460 echo " path = $gnulib_path"
3461 echo " url = $gnulib_url"
3464 test -n "$vc_ignore_files" \
3465 || func_insert_if_absent
".gitmodules" $vc_ignore_files
3469 require_dotgitmodules
=:
3473 # require_extra_locale_categories
3474 # -------------------------------
3475 # Ensure there is a default value in '$extra_locale_categories'
3476 require_extra_locale_categories
=func_require_extra_locale_categories
3477 func_require_extra_locale_categories
()
3481 # Defaults to empty, so run with whatever value may have been set in
3483 require_extra_locale_categories
=:
3489 # Ignore git if it's not available, or we're not in a git checkout tree.
3490 require_git
=func_require_git
3495 $opt_skip_git && GIT
=true
3497 test true
= "$GIT" ||
{
3498 if test -f .gitignore
&& ($GIT --version) >/dev
/null
2>&1; then :; else
3503 func_verbose
"GIT='$GIT'"
3509 # require_gnulib_cache
3510 # --------------------
3511 # Ensure there is a non-empty default for '$gnulib_cache', and that it
3512 # names an existing file.
3513 require_gnulib_cache
=func_require_gnulib_cache
3514 func_require_gnulib_cache
()
3520 test -n "$gnulib_cache" \
3521 || gnulib_cache
=$macro_dir/gnulib-cache.
m4
3523 func_verbose
"found '$gnulib_cache'"
3525 require_gnulib_cache
=:
3529 # require_gnulib_copy_cmd
3530 # -----------------------
3531 # Only calculate the options for copying files with gnulib once.
3532 require_gnulib_copy_cmd
=func_require_gnulib_copy_cmd
3533 func_require_gnulib_copy_cmd
()
3537 $require_gnulib_tool
3538 $require_gnulib_tool_base_options
3540 gnulib_copy_cmd
="$gnulib_tool $gnulib_tool_base_options --copy-file"
3541 $opt_copy || func_append gnulib_copy_cmd
" --symlink"
3542 $opt_quiet || func_append gnulib_copy_cmd
" --verbose"
3544 require_gnulib_copy_cmd
=:
3548 # require_gnulib_merge_changelog
3549 # ------------------------------
3550 # See if we can use gnulib's git-merge-changelog merge driver.
3551 require_gnulib_merge_changelog
=func_require_gnulib_merge_changelog
3552 func_require_gnulib_merge_changelog
()
3556 test -f ChangeLog
&& {
3559 func_grep_q
'^\(/\|\)ChangeLog$' .gitignore ||
test true
= "$GIT" ||
{
3560 if $GIT config merge.merge-changelog.driver
>/dev
/null
; then
3562 elif (git-merge-changelog
--version) >/dev
/null
2>&1; then
3563 func_echo
"initializing git-merge-changelog driver"
3564 $GIT config merge.merge-changelog.name
'GNU-style ChangeLog merge driver'
3565 $GIT config merge.merge-changelog.driver
'git-merge-changelog %O %A %B'
3567 func_warning recommend \
3568 "Consider installing git-merge-changelog from gnulib."
3573 require_gnulib_merge_changelog
=:
3579 # Ensure gnulib_mk has a sensible value, extracted from 'gnulib-cache.m4'
3580 # if possible, otherwise letting 'gnulib-tool' pick a default.
3581 require_gnulib_mk
=func_require_gnulib_mk
3582 func_require_gnulib_mk
()
3586 $require_gnulib_cache
3588 test -f "$gnulib_cache" && test -z "$gnulib_mk" && {
3589 func_extract_trace_first
"gl_MAKEFILE_NAME" "$gnulib_cache"
3590 gnulib_mk
=$func_extract_trace_first_result
3592 test -n "$gnulib_mk" && func_verbose
"gnulib_mk='$gnulib_mk'"
3599 # require_gnulib_name
3600 # -------------------
3601 # Ensure gnulib_name has a sensible value, extracted from 'gnulib-cache.m4'
3602 # if possible, otherwise letting 'gnulib-tool' pick a default.
3603 require_gnulib_name
=func_require_gnulib_name
3604 func_require_gnulib_name
()
3608 $require_gnulib_cache
3610 test -f "$gnulib_cache" && test -z "$gnulib_name" && {
3611 func_extract_trace_first
"gl_LIB" "$gnulib_cache"
3612 gnulib_name
=$func_extract_trace_first_result
3614 test -n "$gnulib_name" && func_verbose
"gnulib_name='$gnulib_name'"
3617 require_gnulib_name
=:
3621 # require_gnulib_path
3622 # require_gnulib_url
3623 # -------------------
3624 # Ensure 'gnulib_path' and 'gnulib_url' are set.
3625 require_gnulib_path
=func_require_dotgitmodules_parameters
3626 require_gnulib_url
=func_require_dotgitmodules_parameters
3627 func_require_dotgitmodules_parameters
()
3633 test true
= "$GIT" && {
3634 # If we can't find git (or if the user specified '--skip-git'),
3635 # then use an existing gnulib directory specified with
3636 # '--gnulib-srcdir' if possible.
3637 test -n "$gnulib_path" \
3638 ||
test ! -x "$opt_gnulib_srcdir/gnulib-tool" \
3639 || gnulib_path
=$opt_gnulib_srcdir
3643 $require_dotgitmodules
3645 test -f .gitmodules
&& {
3646 # Extract the parameters with sed, since git may be missing
3647 test -n "$gnulib_path" \
3648 || gnulib_path
=`$SED -e '/^.submodule "gnulib".$/,${
3650 s|[ ]*||g;s|^[^=]*=||;p
3653 d' .gitmodules |$SED 1q`
3654 test -n "$gnulib_url" \
3655 || gnulib_url
=`$SED -e '/^.submodule "gnulib".$/,${
3657 s|[ ]*||g;s|^[^=]*=||;p
3660 d' .gitmodules |$SED 1q`
3662 func_verbose
"gnulib_path='$gnulib_path'"
3663 func_verbose
"gnulib_url='$gnulib_url'"
3666 require_gnulib_path
=:
3667 require_gnulib_url
=:
3671 # require_gnulib_submodule
3672 # ------------------------
3673 # Ensure that there is a current gnulib submodule at '$gnulib_path'.
3674 require_gnulib_submodule
=func_require_gnulib_submodule
3675 func_require_gnulib_submodule
()
3681 if test true
= "$GIT"; then
3682 func_warning recommend \
3683 "No 'git' found; imported gnulib modules may be outdated."
3685 $require_gnulib_path
3688 if test -f .gitmodules
&& test -f "$gnulib_path/gnulib-tool"; then
3689 : All present and correct.
3691 elif test -n "$opt_gnulib_srcdir"; then
3692 # Older git can't clone into an empty directory.
3693 rmdir "$gnulib_path" 2>/dev
/null
3694 func_show_eval
"$GIT clone --reference '$opt_gnulib_srcdir' \
3695 '$gnulib_url' '$gnulib_path'" \
3696 || func_fatal_error
"Unable to fetch gnulib submodule."
3698 # Without --gnulib-srcdir, and no existing checked out submodule, we
3699 # create a new shallow clone of the remote gnulib repository.
3701 trap func_cleanup_gnulib
1 2 13 15
3704 $GIT clone
-h 2>&1 |func_grep_q
-- --depth \
3705 && shallow
='--depth 365'
3707 func_show_eval
"$GIT clone $shallow '$gnulib_url' '$gnulib_path'" \
3710 # FIXME: Solaris /bin/sh will try to execute '-' if any of
3711 # these signals are caught after this.
3715 # Make sure we've checked out the correct revision of gnulib.
3716 func_show_eval
"$GIT submodule init" \
3717 && func_show_eval
"$GIT submodule update" \
3718 || func_fatal_error
"Unable to update gnulib submodule."
3721 require_gnulib_submodule
=:
3725 # require_gnulib_tool
3726 # -------------------
3727 # Ensure that '$gnulib_tool' is set, and points to an executable file,
3728 # or else fall back to using the binary 'true' if the main gnulib
3729 # files appear to have been imported already.
3730 require_gnulib_tool
=func_require_gnulib_tool
3731 func_require_gnulib_tool
()
3735 test true
= "$gnulib_tool" ||
{
3736 $require_gnulib_submodule
3737 $require_gnulib_path
3739 test -n "$gnulib_tool" \
3740 || gnulib_tool
=$gnulib_path/gnulib-tool
3742 test -x "$gnulib_tool" ||
{
3744 func_warning recommend \
3745 "No 'gnulib-tool' found; gnulib modules may be missing."
3748 test true
= "$gnulib_tool" \
3749 || func_verbose
"found '$gnulib_tool'"
3752 require_gnulib_tool
=:
3756 # require_gnulib_tool_base_options
3757 # --------------------------------
3758 # Ensure that '$gnulib_tool_base_options' contains all the base options
3759 # required according to user configuration from bootstrap.conf.
3760 require_gnulib_tool_base_options
=func_require_gnulib_tool_base_options
3761 func_require_gnulib_tool_base_options
()
3765 $require_gnulib_tool
3767 gnulib_tool_base_options
=
3769 test true
= "$gnulib_tool" ||
{
3770 # 'gnulib_modules' and others are maintained in 'bootstrap.conf':
3771 # Use 'gnulib --import' to fetch gnulib modules.
3773 test -n "$build_aux" \
3774 && func_append_uniq gnulib_tool_base_options
" --aux-dir=$build_aux"
3776 test -n "$macro_dir" \
3777 && func_append_uniq gnulib_tool_base_options
" --m4-base=$macro_dir"
3779 test -n "$doc_base" \
3780 && func_append_uniq gnulib_tool_base_options
" --doc-base=$doc_base"
3781 $require_gnulib_name
3782 test -n "$gnulib_name" \
3783 && func_append_uniq gnulib_tool_base_options
" --lib=$gnulib_name"
3784 $require_local_gl_dir
3785 test -n "$local_gl_dir" \
3786 && func_append_uniq gnulib_tool_base_options
" --local-dir=$local_gl_dir"
3787 $require_source_base
3788 test -n "$source_base" \
3789 && func_append_uniq gnulib_tool_base_options
" --source-base=$source_base"
3792 require_gnulib_tool_base_options
=:
3796 # require_libtoolize
3797 # ------------------
3798 # Skip libtoolize if it's not needed.
3799 require_libtoolize
=func_require_libtoolize
3800 func_require_libtoolize
()
3804 # Unless we're not searching for libtool use by this package, set
3805 # LIBTOOLIZE to true if none of 'LT_INIT', 'AC_PROG_LIBTOOL' and
3806 # 'AM_PROG_LIBTOOL' are used in configure.
3807 test true
= "$LIBTOOLIZE" ||
{
3808 func_extract_trace LT_INIT
3809 test -n "$func_extract_trace_result" || func_extract_trace AC_PROG_LIBTOOL
3810 test -n "$func_extract_trace_result" || func_extract_trace AM_PROG_LIBTOOL
3811 test -n "$func_extract_trace_result" || LIBTOOLIZE
=true
3814 test -n "$LIBTOOLIZE" ||
{
3815 # Find libtoolize, named glibtoolize in Mac Ports, but prefer
3816 # user-installed libtoolize to ancient glibtoolize shipped by
3817 # Apple with Mac OS X when Mac Ports is not installed.
3818 func_find_tool LIBTOOLIZE libtoolize glibtoolize
3821 func_verbose
"export LIBTOOLIZE='$LIBTOOLIZE'"
3823 # Make sure the search result is visible to subshells
3826 require_libtoolize
=:
3830 # require_local_gl_dir
3831 # --------------------
3832 # Ensure local_gl_dir has a sensible value, extracted from 'gnulib-cache.m4'
3833 # if possible, otherwise letting 'gnulib-tool' pick a default.
3834 require_local_gl_dir
=func_require_local_gl_dir
3835 func_require_local_gl_dir
()
3839 $require_gnulib_cache
3841 test -f "$gnulib_cache" && test -z "$local_gl_dir" && {
3842 func_extract_trace_first
"gl_LOCAL_DIR" "$gnulib_cache"
3843 local_gl_dir
=$func_extract_trace_first_result
3845 test -n "$local_gl_dir" && func_verbose
"local_gl_dir='$local_gl_dir'"
3848 require_local_gl_dir
=:
3854 # Ensure that '$macro_dir' is set, and if it doesn't already point to an
3855 # existing directory, create one.
3856 require_macro_dir
=func_require_macro_dir
3857 func_require_macro_dir
()
3861 # Sometimes this is stored in 'configure.ac'.
3862 test -n "$macro_dir" ||
{
3863 # AC_CONFIG_MACRO_DIRS takes a space delimited list of directories,
3864 # but we only care about the first one in bootstrap.
3865 func_extract_trace_first AC_CONFIG_MACRO_DIRS
3866 macro_dir
=`expr "x$func_extract_trace_first_result" : 'x\([^ ]*\)'`
3868 test -n "$macro_dir" ||
{
3869 func_extract_trace_first AC_CONFIG_MACRO_DIR
3870 macro_dir
=$func_extract_trace_first_result
3873 # Otherwise we might find it in 'Makefile.am'.
3874 test -n "$macro_dir" ||
{
3875 $require_aclocal_amflags
3877 # Take the argument following the first '-I', if any.
3878 _G_minus_I_seen
=false
3879 for _G_arg
in $aclocal_amflags; do
3880 case $_G_minus_I_seen,$_G_arg in
3881 :,*) macro_dir
=$_G_arg; break ;;
3882 *,-I) _G_minus_I_seen
=: ;;
3883 *,-I*) macro_dir
=`expr x$_G_arg : 'x-I\(.*\)$'`; break ;;
3888 func_verbose
"macro_dir='$macro_dir'"
3890 func_check_configuration macro_dir \
3891 "AC_CONFIG_MACRO_DIRS([name of a directory for configure m4 files])"
3893 $require_vc_ignore_files
3895 # If the macro_dir directory doesn't exist, create it now, and mark it
3896 # as ignored for the VCS.
3897 if test ! -d "$macro_dir"; then
3898 mkdir
"$macro_dir" || func_permissions_error
"$macro_dir"
3900 test -n "$vc_ignore_files" \
3901 || func_insert_if_absent
"$macro_dir" $vc_ignore_files
3908 # require_makefile_am
3909 # -------------------
3910 # Ensure there is a 'Makefile.am' in the current directory.
3911 # names an existing file.
3912 require_makefile_am
=func_require_makefile_am
3913 func_require_makefile_am
()
3917 test -n "$makefile_am" \
3918 || makefile_am
=Makefile.am
3922 func_verbose
"found '$makefile_am'"
3924 require_makefile_am
=:
3930 # Ensure that '$package' contains a sensible default value.
3931 require_package
=func_require_package
3932 func_require_package
()
3936 test -n "$package" ||
{
3937 $require_package_name
3939 package
=`echo "$package_name" \
3940 |$SED -e 's/GNU //' \
3941 -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
3944 func_verbose
"package='$package'"
3950 # require_package_bugreport
3951 # -------------------------
3952 # Ensure that this has a sensible value, extracted from 'configure.ac'
3953 # if appropriate (and possible!).
3954 require_package_bugreport
=func_require_package_bugreport
3955 func_require_package_bugreport
()
3959 func_extract_trace AC_INIT
3963 set dummy
$func_extract_trace_result
3967 test -n "$package_bugreport" || package_bugreport
=$3
3968 func_check_configuration package_bugreport \
3969 "AC_INIT([$package_name], [$package_version], [bug-$package@gnu.org])"
3970 func_verbose
"package_bugreport='$package_bugreport'"
3972 require_package_bugreport
=:
3976 # require_package_name
3977 # --------------------
3978 # Ensure that this has a sensible value, extracted from 'configure.ac'
3979 # if appropriate (and possible!).
3980 require_package_name
=func_require_package_name
3981 func_require_package_name
()
3985 func_extract_trace AC_INIT
3989 set dummy
$func_extract_trace_result
3993 test -n "$package_name" || package_name
=$1
3994 func_check_configuration package_name \
3995 "AC_INIT([name of your package], [package version number])"
3996 func_verbose
"package_name='$package_name'"
3998 require_package_name
=:
4002 # require_package_version
4003 # -----------------------
4004 # Ensure that this has a sensible value, extracted from 'configure.ac'
4005 # if appropriate (and possible!). While we might have set all the
4006 # parameters extracted from AC_INIT at once, 'package_version' in
4007 # particular is not necessarily available as early as the others, since
4008 # 'git-version-gen' is often involved, and until then we can't rely on
4009 # getting a correct version number from an AC_INIT extraction.
4010 require_package_version
=func_require_package_version
4011 func_require_package_version
()
4015 func_extract_trace AC_INIT
4019 set dummy
$func_extract_trace_result
4023 test -n "$package_version" || package_version
=$2
4024 test -n "$package_version" ||
{
4025 # The embedded echo is to squash whitespace before globbing.
4026 case " "`echo $gnulib_modules`" " in
4027 *" git-version-gen "*)
4029 cannot \$require_package_version in bootstrap.conf before
4030 func_gnulib_tool has installed the 'git-version-gen' script."
4033 func_check_configuration package_version \
4034 "AC_INIT([name of your package], [package version number])"
4038 func_verbose
"package_version='$package_version'"
4040 require_package_version
=:
4046 # Find patch, according to the PATCH environment variable, or else
4047 # searching the user's PATH.
4048 require_patch
=func_require_patch
4049 func_require_patch
()
4053 test -n "$PATCH" ||
{
4054 # Find a patch program, preferring gpatch, which is usually better
4055 # than the vendor patch.
4056 func_find_tool PATCH gpatch
patch
4059 func_verbose
"export PATCH='$PATCH'"
4061 # Make sure the search result is visible to subshells
4068 # require_source_base
4069 # -------------------
4070 # Ensure that source_base has a sensible value, extracted from
4071 # 'gnulib-cache.m4' if possible.
4072 require_source_base
=func_require_source_base
4073 func_require_source_base
()
4077 $require_gnulib_cache
4079 test -f "$gnulib_cache" && test -z "$source_base" && {
4080 func_extract_trace_first
"gl_SOURCE_BASE" "$gnulib_cache"
4082 source_base
=$func_extract_trace_first_result
4084 func_verbose
"source_base='$source_base'"
4087 require_source_base
=:
4091 # require_vc_ignore_files
4092 # -----------------------
4093 # Ensure that '$vc_ignore' has been processed to list VCS ignore files
4094 # in '$vc_ignore_files'
4095 require_vc_ignore_files
=func_require_vc_ignore_files
4096 func_require_vc_ignore_files
()
4100 test -n "$vc_ignore" || vc_ignore
=auto
4102 if test auto
= "$vc_ignore" && test -z "$vc_ignore_files"; then
4104 test -d .git
&& vc_ignore_files
=.gitignore
4105 test -d CVS
&& vc_ignore_files
="$vc_ignore_files .cvsignore"
4107 vc_ignore_files
=$vc_ignore
4110 func_verbose
"vc_ignore_files='$vc_ignore_files'"
4112 require_vc_ignore_files
=:
4116 ## ------------------##
4117 ## Helper functions. ##
4118 ## ------------------##
4120 # This section contains the helper functions used by the rest of 'bootstrap'.
4124 # STRING may not start with a hyphen.
4125 if (eval 'x=123; test x${#x} = "x3"') 2>/dev
/null
4127 # This is an XSI compatible shell, allowing a faster implementation...
4132 func_len_result=${#1}
4135 # ...otherwise fall back to using expr, which is often a shell builtin.
4140 func_len_result
=`expr "$1" : ".*" 2>/dev/null || echo 0`
4147 # Portably unset VAR.
4148 # In some shells, an 'unset VAR' statement leaves a non-zero return
4149 # status if VAR is already unset, which might be problematic if the
4150 # statement is used at the end of a function (thus poisoning its return
4151 # value) or when 'set -e' is active (causing even a spurious abort of
4152 # the script in this case).
4155 { eval $1=; unset $1; }
4160 # func_cmp_s FILE1 FILE2
4161 # ----------------------
4162 # Return non-zero exit status unless FILE1 and FILE2 are identical, without
4163 # any output at all, even error messages.
4168 # This function relies on non-zero exit status, which will cause the
4169 # program to exit when running in 'set -e' mode.
4170 $CMP "$@" >/dev
/null
2>&1
4174 # func_grep_q EXPRESSION [FILENAME..]
4175 # -----------------------------------
4176 # Check whether EXPRESSION matches any line of any listed FILENAME,
4177 # without any output at all, even error messages.
4182 # This function relies on non-zero exit status, which will cause the
4183 # program to exit when running in 'set -e' mode.
4184 $GREP "$@" >/dev
/null
2>&1
4188 # func_ifcontains LIST MEMBER YES-CMD [NO-CMD]
4189 # --------------------------------------------
4190 # If whitespace-separated LIST contains MEMBER then execute YES-CMD,
4191 # otherwise if NO-CMD was give, execute that.
4196 # The embedded echo is to squash whitespace before globbing.
4197 _G_wslist
=`$bs_echo " "$1" "`
4213 test 0 -eq "$_G_status" ||
exit $_G_status
4217 # func_strpad STR WIDTH CHAR
4218 # --------------------------
4219 # Trim STR, or pad with CHAR to force a total length of WIDTH.
4224 _G_width
=`expr "$2" - 1`
4225 func_strpad_result
=`$bs_echo "$1" |$SED '
4227 s|^.\{0,'"$_G_width"'\}$|&'"$3"'|
4233 # func_strrpad STR WIDTH CHAR
4234 # ---------------------------
4235 # Trim STR, or right-justify-pad with CHAR to force a total length of
4241 _G_width
=`expr "$2" - 1`
4242 func_strrpad_result
=`$bs_echo "$1" |$SED '
4244 s|^.\{0,'"$_G_width"'\}$|'"$3"'&|
4250 # func_strrow INDENT FIELD WIDTH [FIELDn WIDTHn]...
4251 # -------------------------------------------------
4252 # Return a string containing each FIELD left justified to WIDTH, with
4253 # the whole thing indented by INDENT spaces. This function is used to
4254 # render one row of aligned columns for a table by func_strtable().
4259 func_strrow_linelen
=$1; shift
4262 while test $# -gt 0; do
4263 func_strrow_linelen
=`expr $func_strrow_linelen + $2`
4264 func_strpad
"$1" $2 " "
4265 func_append _G_row
"$func_strpad_result"
4269 func_strrpad
"$_G_row" $func_strrow_linelen " "
4270 func_strrow_result
=$func_strrpad_result
4274 # func_strtable INDENT WIDTH1...WIDTHn HEADER1...HEADERn FIELD1...FIELDn
4275 # ----------------------------------------------------------------------
4276 # Generate a string of newline-separated rows arranged in lined-up
4277 # columns of the given WIDTHs, with the entire table indented by INDENT
4278 # spaces. The number of columns is determined by the number of integer
4279 # valued WIDTH arguments following INDENT. The next set (i.e. a number
4280 # of arguments equal to the number of WIDTH arguments) of fields are
4281 # treated as the table's column HEADERs, and are separated from the
4282 # remainder of the table by an indented row of '-' characters. Remaining
4283 # arguments are each aligned below the next available header, wrapping
4284 # to a new row as necessary. Finally another row of '-' characters is
4285 # added to mark the end of the table.
4287 # For example an unindented 3 column table with 2 rows of data would be
4288 # generated by this call:
4290 # func_strtable 3 20 10 25 \
4291 # Header1 Header2 Header3 \
4292 # Row1Col1 Row1Col2 Row1Col3 \
4293 # Row2Col1 Row2Col2 Row2Col3
4295 # returning the following string:
4297 # " Header1 Header2 Header3
4298 # -------------------------------------------------------
4299 # Row1Col1 Row1Col2 Row1Col3
4300 # Row2Col1 Row2Col2 Row2Col3
4301 # -------------------------------------------------------"
4306 # Save the indent value, we'll need it for each row we render.
4309 # Collect remaining numeric args into a list for reuse between
4310 # members of each row when we call func_strrow later.
4312 while test 0 -lt `expr "$1" : '[1-9][0-9]*$'`; do
4313 func_append _G_widths
" $1"; shift
4316 # Extract the same number of positional parameters as there are
4317 # width elements - we'll do the header rows separately so that
4318 # we can insert a divider line.
4319 _G_header
=$_G_indent
4320 for _G_width
in $_G_widths; do
4321 func_append _G_header
" $1 $_G_width"; shift
4323 func_strrow
$_G_header
4325 # Strip off the indent, and make a divider with '-' chars, then
4327 _G_divider
=`$bs_echo "$func_strrow_result" \
4334 # Append the header and divider to the running result.
4335 func_append func_strtable_result
"\
4340 # The remaining rows are zipped between the width values we
4341 # unwound earlier just like the header row above.
4342 while test $# -gt 0; do
4344 for _G_width
in $_G_widths; do
4345 func_append _G_row
" $1 $_G_width"; shift
4348 func_append func_strtable_result
"\
4353 # Mark the end of the table with a final divider line.
4354 func_append func_strtable_result
"$_G_divider"
4358 # func_internal_error ARG...
4359 # --------------------------
4360 # Echo program name prefixed message to standard error, and exit.
4361 func_internal_error
()
4364 INTERNAL: " ${1+"$@"} "
4365 Please report this bug to 'bug-gnulib@gnu.org'
4366 in as much detail as possible."
4370 # func_permissions_error FILE-OR-DIRECTORY
4371 # ----------------------------------------
4372 # Echo program name prefixed permissions error message to standard
4374 func_permissions_error
()
4378 func_fatal_error
"Failed to create '$1', check permissions."
4382 # func_show_eval CMD [FAIL_EXP]
4383 # -----------------------------
4384 # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
4385 # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
4386 # is given, then evaluate it.
4391 $require_term_colors
4394 _G_fail_exp
=${2-':'}
4396 ${opt_silent-'false'} ||
{
4397 func_quote_for_eval
$_G_cmd
4398 eval func_truncate_cmd
$func_quote_for_eval_result
4399 func_echo
"running: $tc_bold$func_truncate_cmd_result$tc_reset"
4402 ${opt_dry_run-'false'} ||
{
4405 test 0 -eq "$_G_status" ||
eval "(exit $_G_status); $_G_fail_exp"
4410 # func_truncate_cmd CMD [ARG]...
4411 # ------------------------------
4412 # For unreasonably long commands (such as a gnulib-tool invocation with
4413 # the full module list for import), truncate CMD after the second non-
4415 func_truncate_cmd
()
4419 _G_last_arg_opt_p
=false
4420 func_truncate_cmd_result
=
4422 set dummy
"$@"; shift
4424 while test $# -gt 0; do
4427 test -n "$func_truncate_cmd_result" \
4428 && func_append func_truncate_cmd_result
' '
4429 func_append func_truncate_cmd_result
"$_G_opt"
4431 func_len
"x$func_truncate_cmd_result"
4434 -*) _G_last_arg_opt_p
=: ;;
4435 *) $_G_last_arg_opt_p \
4436 ||
test "$min_cmd_len" -gt "$func_len_result" \
4438 _G_last_arg_opt_p
=false
4443 test $# -gt 0 && func_append func_truncate_cmd_result
"..."
4447 # func_gitignore_entries FILE...
4448 # ------------------------------
4449 # Strip blank and comment lines to leave significant entries.
4450 func_gitignore_entries
()
4454 sed -e '/^#/d' -e '/^$/d' "$@"
4458 # func_insert_if_absent STR FILE...
4459 # ---------------------------------
4460 # If $STR is not already on a line by itself in $FILE, insert it, at the
4461 # start. Entries are inserted at the start of the ignore list to ensure
4462 # existing entries starting with ! are not overridden. Such entries
4463 # support whilelisting exceptions after a more generic blacklist pattern.
4464 # sorting the new contents of the file and replacing $FILE with the result.
4465 func_insert_if_absent
()
4474 test -f "$file" ||
touch "$file"
4476 duplicate_entries
=`func_gitignore_entries "$file" |sort |uniq -d`
4477 test -n "$duplicate_entries" \
4478 && func_error
"duplicate entries in $file: " $duplicate_entries
4480 func_grep_q
"^$str\$" "$file" \
4481 || func_verbose
"inserting '$str' into '$file'"
4483 linesold
=`func_gitignore_entries "$file" |wc -l`
4484 linesnew
=`{ $bs_echo "$str"; cat "$file"; } \
4485 |func_gitignore_entries |sort -u |wc -l`
4486 test "$linesold" -eq "$linesnew" \
4487 ||
{ sed "1i\\$nl$str$nl" "$file" >"$file"T
&& mv "$file"T
"$file"; } \
4488 || func_permissions_error
"$file"
4493 # func_sort_ver VER1 VER2
4494 # -----------------------
4495 # 'sort -V' is not generally available.
4496 # Note this deviates from the version comparison in automake
4497 # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
4498 # but this should suffice as we won't be specifying old
4499 # version formats or redundant trailing .0 in bootstrap.conf.
4500 # If we did want full compatibility then we should probably
4501 # use m4_version_compare from autoconf.
4509 # Split on '.' and compare each component.
4512 p1
=`echo "$ver1" |cut -d. -f$i`
4513 p2
=`echo "$ver2" |cut -d. -f$i`
4514 if test ! "$p1"; then
4517 elif test ! "$p2"; then
4520 elif test ! "$p1" = "$p2"; then
4521 if test "$p1" -gt "$p2" 2>/dev
/null
; then # numeric comparison
4523 elif test "$p2" -gt "$p1" 2>/dev
/null
; then # numeric comparison
4525 else # numeric, then lexicographic comparison
4526 lp=`printf "$p1\n$p2\n" |sort -n |tail -n1`
4527 if test "$lp" = "$p2"; then
4540 # func_get_version APP
4541 # --------------------
4542 # echo the version number (if any) of APP, which is looked up along your
4550 # Rather than uncomment the sed script in-situ, strip the comments
4551 # programatically before passing the result to $SED for evaluation.
4552 sed_get_version
=`$bs_echo '# extract version within line
4553 s|.*[v ]\{1,\}\([0-9]\{1,\}\.[.a-z0-9-]*\).*|\1|
4556 # extract version at start of line
4557 s|^\([0-9]\{1,\}\.[.a-z0-9-]*\).*|\1|
4563 # the following essentially does s|5.005|5.5|
4564 s|\.0*\([1-9]\)|.\1|g
4567 |$SED '/^[ ]*#.*$/d'`
4569 func_tool_version_output
$_G_app >/dev
/null
4572 test 0 -ne "$_G_status" \
4573 ||
$_G_app --version 2>&1 |
$SED -n "$sed_get_version"
4579 # func_check_tool APP
4580 # -------------------
4581 # Search PATH for an executable at APP.
4586 func_check_tool_result
=
4590 test -x "$1" && func_check_tool_result
=$1
4595 for _G_check_tool_path
in $PATH; do
4597 if test -x "$_G_check_tool_path/$1"; then
4598 func_check_tool_result
=$_G_check_tool_path/$1
4608 # func_check_versions APP1 VER1 URL1 ...[APPN VERN URLN]
4609 # ------------------------------------------------------
4610 func_check_versions
()
4614 func_check_versions_result
=:
4616 while test $# -gt 0; do
4621 # Diagnose bad buildreq formatting.
4623 [a-z
]*://*) ;; # looks like a url
4624 *) func_fatal_error
"\
4625 '$_G_url' from the buildreq table in
4626 'bootstrap.conf' does not look like the URL for downloading
4627 $_G_app. Please ensure that buildreq is a strict newline
4628 delimited list of triples; 'program min-version url'."
4632 # Honor $APP variables ($TAR, $AUTOCONF, etc.)
4633 _G_appvar
=`echo $_G_app |tr '[a-z]' '[A-Z]'`
4634 test TAR
= "$_G_appvar" && _G_appvar
=AMTAR
4635 eval "_G_app=\${$_G_appvar-$_G_app}"
4637 # Fail if no version specified, but the program can't be found.
4638 if test x-
= "x$_G_reqver"; then
4639 func_check_tool
$_G_app
4640 if test -z "$func_check_tool_result"; then
4641 func_error
"Prerequisite '$_G_app' not not found. Please install it, or
4642 'export $_G_appvar=/path/to/$_G_app'."
4643 func_check_versions_result
=false
4645 func_verbose
"found '$func_check_tool_result' for $_G_appvar."
4648 _G_instver
=`func_get_version $_G_app`
4650 test -z "$_G_instver" \
4651 || func_verbose
"found '$_G_app' version $_G_instver."
4653 # Fail if --version didn't work.
4654 if test -z "$_G_instver"; then
4655 func_error
"Prerequisite '$_G_app' not found. Please install it, or
4656 'export $_G_appvar=/path/to/$_G_app'."
4657 func_check_versions_result
=false
4659 # Fail if a newer version than what we have is required.
4661 _G_newer
=`func_sort_ver $_G_reqver $_G_instver |cut -d' ' -f2`
4662 test "$_G_newer" != "$_G_instver" && {
4664 '$_G_app' version == $_G_instver is too old
4665 '$_G_app' version >= $_G_reqver is required"
4666 func_check_versions_result
=false
4674 # func_cleanup_gnulib
4675 # -------------------
4676 # Recursively delete everything below the path in the global variable
4678 func_cleanup_gnulib
()
4683 $RM -fr "$gnulib_path"
4688 # func_download_po_files SUBDIR DOMAIN
4689 # ------------------------------------
4690 func_download_po_files
()
4694 func_echo
"getting translations into $1 for $2..."
4695 _G_cmd
=`printf "$po_download_command_format" "$2" "$1"`
4700 # func_update_po_files PO_DIR DOMAIN
4701 # ----------------------------------
4702 # Mirror .po files to $po_dir/.reference and copy only the new
4703 # or modified ones into $po_dir. Also update $po_dir/LINGUAS.
4704 # Note po files that exist locally only are left in $po_dir but will
4705 # not be included in LINGUAS and hence will not be distributed.
4706 func_update_po_files
()
4710 # Directory containing primary .po files.
4711 # Overwrite them only when we're sure a .po file is new.
4715 # Mirror *.po files into this dir.
4716 # Usually contains *.s1 checksum files.
4717 _G_ref_po_dir
=$_G_po_dir/.reference
4719 test -d "$_G_ref_po_dir" || mkdir
$_G_ref_po_dir ||
return
4720 func_download_po_files
$_G_ref_po_dir $_G_domain \
4721 && ls "$_G_ref_po_dir"/*.po
2>/dev
/null \
4722 |
$SED -e 's|.*/||' -e 's|\.po$||' > "$_G_po_dir/LINGUAS" ||
return
4724 # Find sha1sum, named gsha1sum on MacPorts, and shasum on MacOS 10.6+.
4725 func_find_tool SHA1SUM
sha1sum gsha1sum shasum sha1
4727 _G_langs
=`cd $_G_ref_po_dir && echo *.po|$SED 's|\.po||g'`
4728 test '*' = "$_G_langs" && _G_langs
=x
4729 for _G_po
in $_G_langs; do
4730 case $_G_po in x
) continue;; esac
4731 _G_new_po
=$_G_ref_po_dir/$_G_po.po
4732 _G_cksum_file
=$_G_ref_po_dir/$_G_po.s1
4733 if ! test -f "$_G_cksum_file" ||
4734 ! test -f "$_G_po_dir/$_G_po.po" ||
4735 ! $SHA1SUM -c "$_G_cksum_file" \
4736 < "$_G_new_po" > /dev
/null
; then
4737 echo "updated $_G_po_dir/$_G_po.po..."
4738 cp "$_G_new_po" "$_G_po_dir/$_G_po.po" \
4739 && $SHA1SUM < "$_G_new_po" > "$_G_cksum_file" ||
return
4746 ## --------------- ##
4747 ## Option parsing. ##
4748 ## --------------- ##
4750 # Hook in the functions to make sure our own options are parsed during
4751 # the option parsing loop.
4753 usage
='$progpath [OPTION]...'
4755 # Short help message in response to '-h'. Add to this in 'bootstrap.conf'
4756 # if you accept any additional options.
4757 usage_message
="Common Bootstrap Options:
4758 -c, --copy copy files instead of creating symbolic links.
4759 --debug enable verbose shell tracing
4760 -n, --dry-run print commands rather than running them
4761 -f, --force attempt to bootstrap even if the sources seem not
4762 to have been checked out.
4763 --gnulib-srcdir=DIRNAME
4764 specify a local directory where gnulib sources
4765 reside. Use this if you already have the gnulib
4766 sources on your machine, and don't want to waste
4767 your bandwidth downloading them again. Defaults to
4769 --no-warnings equivalent to '-Wnone'
4770 --skip-git do not fetch files from remote repositories
4771 --skip-po do not download po files.
4772 -v, --verbose verbosely report processing
4773 --version print version information and exit
4774 -W, --warnings=CATEGORY
4775 report the warnings falling in CATEGORY [all]
4776 -h, --help print short or long help message and exit
4779 # Additional text appended to 'usage_message' in response to '--help'.
4780 long_help_message
=$long_help_message"
4781 'recommend' show warnings about missing recommended packages
4782 'settings' show warnings about missing '$progname.conf' settings
4783 'upgrade' show warnings about out-dated files
4785 If the file '$progname.conf' exists in the same directory as this
4786 script, its contents are read as shell variables to configure the
4789 For build prerequisites, environment variables like \$AUTOCONF and
4790 \$AMTAR are honored.
4792 Running without arguments will suffice in most cases.
4795 # Warning categories used by 'bootstrap', append others if you use them
4796 # in your 'bootstrap.conf'.
4797 warning_categories
='recommend settings upgrade'
4800 # bootstrap_options_prep [ARG]...
4801 # -------------------------------
4802 # Preparation for options parsed by Bootstrap.
4803 bootstrap_options_prep
()
4808 opt_copy
=${copy-'false'}
4811 opt_gnulib_srcdir
=$GNULIB_SRCDIR
4815 # Pass back the list of options we consumed.
4816 func_quote_for_eval
${1+"$@"}
4817 bootstrap_options_prep_result
=$func_quote_for_eval_result
4819 func_add_hook func_options_prep bootstrap_options_prep
4822 # bootstrap_parse_options [ARG]...
4823 # --------------------------------
4824 # Provide handling for Bootstrap specific options.
4825 bootstrap_parse_options
()
4829 # Perform our own loop to consume as many options as possible in
4831 while test $# -gt 0; do
4835 --dry-run|
--dryrun|
-n)
4837 --copy|
-c) opt_copy
=: ;;
4838 --force|
-f) opt_force
=: ;;
4841 test $# = 0 && func_missing_arg
$_G_opt && break
4842 opt_gnulib_srcdir
=$1
4846 --skip-git|
--no-git)
4854 # Separate non-argument short options:
4856 func_split_short_opt
"$_G_opt"
4857 set dummy
"$func_split_short_opt_name" \
4858 "-$func_split_short_opt_arg" ${1+"$@"}
4862 *) set dummy
"$_G_opt" ${1+"$@"}; shift; break ;;
4866 # save modified positional parameters for caller
4867 func_quote_for_eval
${1+"$@"}
4868 bootstrap_parse_options_result
=$func_quote_for_eval_result
4870 func_add_hook func_parse_options bootstrap_parse_options
4873 # bootstrap_validate_options [ARG]...
4874 # -----------------------------------
4875 # Perform any sanity checks on option settings and/or unconsumed
4877 bootstrap_validate_options
()
4883 && func_fatal_help
"too many arguments"
4885 # Pass back the (empty) list of unconsumed options.
4886 func_quote_for_eval
${1+"$@"}
4887 bootstrap_validate_options_result
=$func_quote_for_eval_result
4889 func_add_hook func_validate_options bootstrap_validate_options
4892 ## -------------------------------------------------- ##
4893 ## Source package customisations in 'bootstrap.conf'. ##
4894 ## -------------------------------------------------- ##
4896 # Override the default configuration, if necessary.
4897 # Make sure that bootstrap.conf is sourced from the current directory
4898 # if we were invoked as "sh bootstrap".
4900 */*) test -r "$0.conf" && .
"$0.conf" ;;
4901 *) test -r "$0.conf" && . .
/"$0.conf" ;;
4905 ## ------------------------------- ##
4906 ## Actually perform the bootstrap. ##
4907 ## ------------------------------- ##
4909 func_bootstrap
${1+"$@"}
4912 exit ${exit_status-$EXIT_SUCCESS}
4915 # mode: shell-script
4917 # eval: (add-hook 'write-file-hooks 'time-stamp)
4918 # time-stamp-pattern: "20/scriptversion=%:y-%02m-%02d.%02H; # UTC"
4919 # time-stamp-time-zone: "UTC"