1#! /bin/sh
2# DO NOT EDIT! GENERATED AUTOMATICALLY!
3
4# Bootstrap this package from checked-out sources.
5
6scriptversion=2023-07-01.18; # UTC
7
8# Copyright (C) 2003-2023 Free Software Foundation, Inc.
9#
10# This program is free software: you can redistribute it and/or modify
11# it under the terms of the GNU General Public License as published by
12# the Free Software Foundation, either version 3 of the License, or
13# (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18# GNU General Public License for more details.
19#
20# You should have received a copy of the GNU General Public License
21# along with this program.  If not, see <https://www.gnu.org/licenses/>.
22
23# Originally written by Paul Eggert.  The canonical version of this
24# script is maintained as top/bootstrap in gnulib. However, to be
25# useful to your package, you should place a copy of it under version
26# control in the top-level directory of your package.  The intent is
27# that all customization can be done with a bootstrap.conf file also
28# maintained in your version control; gnulib comes with a template
29# build-aux/bootstrap.conf to get you started.
30
31# Please report bugs or propose patches to bug-gnulib@gnu.org.
32
33me="$0"
34medir=`dirname "$me"`
35
36# Read the function library and the configuration.
37
38# A library of shell functions for autopull.sh, autogen.sh, and bootstrap.
39
40scriptlibversion=2023-07-01.17; # UTC
41
42# Copyright (C) 2003-2023 Free Software Foundation, Inc.
43#
44# This program is free software: you can redistribute it and/or modify
45# it under the terms of the GNU General Public License as published by
46# the Free Software Foundation, either version 3 of the License, or
47# (at your option) any later version.
48#
49# This program is distributed in the hope that it will be useful,
50# but WITHOUT ANY WARRANTY; without even the implied warranty of
51# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
52# GNU General Public License for more details.
53#
54# You should have received a copy of the GNU General Public License
55# along with this program.  If not, see <https://www.gnu.org/licenses/>.
56
57# Originally written by Paul Eggert.  The canonical version of this
58# script is maintained as top/bootstrap-funclib.sh in gnulib.  However,
59# to be useful to your package, you should place a copy of it under
60# version control in the top-level directory of your package.  The
61# intent is that all customization can be done with a bootstrap.conf
62# file also maintained in your version control; gnulib comes with a
63# template build-aux/bootstrap.conf to get you started.
64
65nl='
66'
67
68# Ensure file names are sorted consistently across platforms.
69LC_ALL=C
70export LC_ALL
71
72# Honor $PERL, but work even if there is none.
73PERL="${PERL-perl}"
74
75default_gnulib_url=https://git.savannah.gnu.org/git/gnulib.git
76
77# Copyright year, for the --version output.
78copyright_year=`echo "$scriptlibversion" | sed -e 's/[^0-9].*//'`
79copyright="Copyright (C) ${copyright_year} Free Software Foundation, Inc.
80License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
81This is free software: you are free to change and redistribute it.
82There is NO WARRANTY, to the extent permitted by law."
83
84# warnf_ FORMAT-STRING ARG1...
85warnf_ ()
86{
87  warnf_format_=$1
88  shift
89  nl='
90'
91  case $* in
92    *$nl*) me_=$(printf "$me"|tr "$nl|" '??')
93       printf "$warnf_format_" "$@" | sed "s|^|$me_: |" ;;
94    *) printf "$me: $warnf_format_" "$@" ;;
95  esac >&2
96}
97
98# warn_ WORD1...
99warn_ ()
100{
101  # If IFS does not start with ' ', set it and emit the warning in a subshell.
102  case $IFS in
103    ' '*) warnf_ '%s\n' "$*";;
104    *)    (IFS=' '; warn_ "$@");;
105  esac
106}
107
108# die WORD1...
109die() { warn_ "$@"; exit 1; }
110
111# ------------------------------ Configuration. ------------------------------
112
113# Directory that contains package-specific gnulib modules and/or overrides.
114local_gl_dir=gl
115
116# Name of the Makefile.am
117# XXX Not used.
118gnulib_mk=gnulib.mk
119
120# List of gnulib modules needed.
121gnulib_modules=
122
123# Any gnulib files needed that are not in modules.
124gnulib_files=
125
126# A function to be called for each unrecognized option.  Returns 0 if
127# the option in $1 has been processed by the function.  Returns 1 if
128# the option has not been processed by the function.  Override it via
129# your own definition in bootstrap.conf
130bootstrap_option_hook() { return 1; }
131
132# A function to be called in order to print the --help information
133# corresponding to user-defined command-line options.
134bootstrap_print_option_usage_hook() { :; }
135
136# A function to be called at the end of autopull.sh.
137# Override it via your own definition in bootstrap.conf.
138bootstrap_post_pull_hook() { :; }
139
140# A function to be called right after gnulib-tool is run.
141# Override it via your own definition in bootstrap.conf.
142bootstrap_post_import_hook() { :; }
143
144# A function to be called after everything else in this script.
145# Override it via your own definition in bootstrap.conf.
146bootstrap_epilogue() { :; }
147
148# The command to download all .po files for a specified domain into a
149# specified directory.  Fill in the first %s with the destination
150# directory and the second with the domain name.
151po_download_command_format=\
152"wget --mirror --level=1 -nd -nv -A.po -P '%s' \
153 https://translationproject.org/latest/%s/"
154
155# Prefer a non-empty tarname (4th argument of AC_INIT if given), else
156# fall back to the package name (1st argument with munging).
157extract_package_name='
158  /^AC_INIT(\[*/{
159     s///
160     /^[^,]*,[^,]*,[^,]*,[ []*\([^][ ,)]\)/{
161       s//\1/
162       s/[],)].*//
163       p
164       q
165     }
166     s/[],)].*//
167     s/^GNU //
168     y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
169     s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g
170     p
171  }
172'
173package=$(${AUTOCONF:-autoconf} --trace AC_INIT:\$4 configure.ac 2>/dev/null)
174if test -z "$package"; then
175  package=$(sed -n "$extract_package_name" configure.ac) \
176      || die 'cannot find package name in configure.ac'
177fi
178gnulib_name=lib$package
179
180build_aux=build-aux
181source_base=lib
182m4_base=m4
183doc_base=doc
184tests_base=tests
185gnulib_extra_files="
186        build-aux/install-sh
187        build-aux/mdate-sh
188        build-aux/texinfo.tex
189        build-aux/depcomp
190        build-aux/config.guess
191        build-aux/config.sub
192        doc/INSTALL
193"
194
195# Additional gnulib-tool options to use.  Use "\newline" to break lines.
196gnulib_tool_option_extras=
197
198# Other locale categories that need message catalogs.
199EXTRA_LOCALE_CATEGORIES=
200
201# Additional xgettext options to use.  Use "\\\newline" to break lines.
202XGETTEXT_OPTIONS='\\\
203 --flag=_:1:pass-c-format\\\
204 --flag=N_:1:pass-c-format\\\
205 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
206'
207
208# Package bug report address and copyright holder for gettext files
209COPYRIGHT_HOLDER='Free Software Foundation, Inc.'
210MSGID_BUGS_ADDRESS=bug-$package@gnu.org
211
212# Files we don't want to import.
213# XXX Not used.
214excluded_files=
215
216# File that should exist in the top directory of a checked out hierarchy,
217# but not in a distribution tarball.
218checkout_only_file=README-hacking
219
220# Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
221# those files to be generated in directories like lib/, m4/, and po/.
222# Or set it to 'auto' to make this script select which to use based
223# on which version control system (if any) is used in the source directory.
224vc_ignore=auto
225
226# Set this to true in bootstrap.conf to enable --bootstrap-sync by
227# default.
228bootstrap_sync=false
229
230# Override the default configuration, if necessary.
231# Make sure that bootstrap.conf is sourced from the current directory
232# if we were invoked as "sh bootstrap".
233conffile=`dirname "$me"`/bootstrap.conf
234test -r "$conffile" && . "$conffile"
235
236# ------------------------- Build-time prerequisites -------------------------
237
238check_exists() {
239  if test "$1" = "--verbose"; then
240    ($2 --version </dev/null) >/dev/null 2>&1
241    if test $? -ge 126; then
242      # If not found, run with diagnostics as one may be
243      # presented with env variables to set to find the right version
244      ($2 --version </dev/null)
245    fi
246  else
247    ($1 --version </dev/null) >/dev/null 2>&1
248  fi
249
250  test $? -lt 126
251}
252
253# Note this deviates from the version comparison in automake
254# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
255# but this should suffice as we won't be specifying old
256# version formats or redundant trailing .0 in bootstrap.conf.
257# If we did want full compatibility then we should probably
258# use m4_version_compare from autoconf.
259sort_ver() { # sort -V is not generally available
260  ver1="$1"
261  ver2="$2"
262
263  # split on '.' and compare each component
264  i=1
265  while : ; do
266    p1=$(echo "$ver1" | cut -d. -f$i)
267    p2=$(echo "$ver2" | cut -d. -f$i)
268    if [ ! "$p1" ]; then
269      echo "$1 $2"
270      break
271    elif [ ! "$p2" ]; then
272      echo "$2 $1"
273      break
274    elif [ ! "$p1" = "$p2" ]; then
275      if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison
276        echo "$2 $1"
277      elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison
278        echo "$1 $2"
279      else # numeric, then lexicographic comparison
280        lp=$(printf "%s\n%s\n" "$p1" "$p2" | LANG=C sort -n | tail -n1)
281        if [ "$lp" = "$p2" ]; then
282          echo "$1 $2"
283        else
284          echo "$2 $1"
285        fi
286      fi
287      break
288    fi
289    i=$(($i+1))
290  done
291}
292
293get_version_sed='
294# Move version to start of line.
295s/.*[v ]\([0-9]\)/\1/
296
297# Skip lines that do not start with version.
298/^[0-9]/!d
299
300# Remove characters after the version.
301s/[^.a-z0-9-].*//
302
303# The first component must be digits only.
304s/^\([0-9]*\)[a-z-].*/\1/
305
306#the following essentially does s/5.005/5.5/
307s/\.0*\([1-9]\)/.\1/g
308p
309q'
310
311get_version() {
312  app=$1
313
314  $app --version >/dev/null 2>&1 || { $app --version; return 1; }
315
316  $app --version 2>&1 | sed -n "$get_version_sed"
317}
318
319check_versions() {
320  ret=0
321
322  while read app req_ver; do
323    # We only need libtoolize from the libtool package.
324    if test "$app" = libtool; then
325      app=libtoolize
326    fi
327    # Exempt git if git is not needed.
328    if test "$app" = git; then
329      $check_git || continue
330    fi
331    # Honor $APP variables ($TAR, $AUTOCONF, etc.)
332    appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_')
333    test "$appvar" = TAR && appvar=AMTAR
334    case $appvar in
335        GZIP) ;; # Do not use $GZIP:  it contains gzip options.
336        PERL::*) ;; # Keep perl modules as-is
337        *) eval "app=\${$appvar-$app}" ;;
338    esac
339
340    # Handle the still-experimental Automake-NG programs specially.
341    # They remain named as the mainstream Automake programs ("automake",
342    # and "aclocal") to avoid gratuitous incompatibilities with
343    # preexisting usages (by, say, autoreconf, or custom autogen.sh
344    # scripts), but correctly identify themselves (as being part of
345    # "GNU automake-ng") when asked their version.
346    case $app in
347      automake-ng|aclocal-ng)
348        app=${app%-ng}
349        ($app --version | grep '(GNU automake-ng)') >/dev/null 2>&1 || {
350          warn_ "Error: '$app' not found or not from Automake-NG"
351          ret=1
352          continue
353        } ;;
354      # Another check is for perl modules.  These can be written as
355      # e.g. perl::XML::XPath in case of XML::XPath module, etc.
356      perl::*)
357        # Extract module name
358        app="${app#perl::}"
359        if ! $PERL -m"$app" -e 'exit 0' >/dev/null 2>&1; then
360          warn_ "Error: perl module '$app' not found"
361          ret=1
362        fi
363        continue
364        ;;
365    esac
366    if [ "$req_ver" = "-" ]; then
367      # Merely require app to exist; not all prereq apps are well-behaved
368      # so we have to rely on $? rather than get_version.
369      if ! check_exists --verbose $app; then
370        warn_ "Error: '$app' not found"
371        ret=1
372      fi
373    else
374      # Require app to produce a new enough version string.
375      inst_ver=$(get_version $app)
376      if [ ! "$inst_ver" ]; then
377        warn_ "Error: '$app' not found"
378        ret=1
379      else
380        latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
381        if [ ! "$latest_ver" = "$inst_ver" ]; then
382          warnf_ '%s\n'                                        \
383              "Error: '$app' version == $inst_ver is too old"  \
384              "       '$app' version >= $req_ver is required"
385          ret=1
386        fi
387      fi
388    fi
389  done
390
391  return $ret
392}
393
394print_versions() {
395  echo "Program    Min_version"
396  echo "----------------------"
397  printf %s "$buildreq"
398  echo "----------------------"
399  # can't depend on column -t
400}
401
402# check_build_prerequisites check_git
403check_build_prerequisites()
404{
405  check_git="$1"
406
407  # gnulib-tool requires at least automake and autoconf.
408  # If either is not listed, add it (with minimum version) as a prerequisite.
409  case $buildreq in
410    *automake*) ;;
411    *) buildreq="automake 1.9
412$buildreq" ;;
413  esac
414  case $buildreq in
415    *autoconf*) ;;
416    *) buildreq="autoconf 2.59
417$buildreq" ;;
418  esac
419
420  # When we can deduce that gnulib-tool will require patch,
421  # and when patch is not already listed as a prerequisite, add it, too.
422  if test -d "$local_gl_dir" \
423     && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then
424    case $buildreq in
425      *patch*) ;;
426      *) buildreq="patch -
427$buildreq" ;;
428    esac
429  fi
430
431  if ! printf '%s' "$buildreq" | check_versions; then
432    echo >&2
433    if test -f README-prereq; then
434      die "See README-prereq for how to get the prerequisite programs"
435    else
436      die "Please install the prerequisite programs"
437    fi
438  fi
439
440  # Warn the user if autom4te appears to be broken; this causes known
441  # issues with at least gettext 0.18.3.
442  probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -)
443  if test "x$probe" != xhi; then
444    warn_ "WARNING: your autom4te wrapper eats stdin;"
445    warn_ "if bootstrap fails, consider upgrading your autotools"
446  fi
447}
448
449# find_tool ENVVAR NAMES...
450# -------------------------
451# Search for a required program.  Use the value of ENVVAR, if set,
452# otherwise find the first of the NAMES that can be run.
453# If found, set ENVVAR to the program name, die otherwise.
454#
455# FIXME: code duplication, see also gnu-web-doc-update.
456find_tool ()
457{
458  find_tool_envvar=$1
459  shift
460  find_tool_names=$@
461  eval "find_tool_res=\$$find_tool_envvar"
462  if test x"$find_tool_res" = x; then
463    for i; do
464      if check_exists $i; then
465        find_tool_res=$i
466        break
467      fi
468    done
469  fi
470  if test x"$find_tool_res" = x; then
471    warn_ "one of these is required: $find_tool_names;"
472    die   "alternatively set $find_tool_envvar to a compatible tool"
473  fi
474  eval "$find_tool_envvar=\$find_tool_res"
475  eval "export $find_tool_envvar"
476}
477
478# --------------------- Preparing GNULIB_SRCDIR for use. ---------------------
479# This is part of autopull.sh, but bootstrap needs it too, for self-upgrading.
480
481cleanup_gnulib() {
482  status=$?
483  # XXX It's a bad idea to erase the submodule directory if it contains local
484  #     modifications.
485  rm -fr "$gnulib_path"
486  exit $status
487}
488
489git_modules_config () {
490  test -f .gitmodules && git config --file .gitmodules "$@"
491}
492
493prepare_GNULIB_SRCDIR ()
494{
495  if test -n "$GNULIB_SRCDIR"; then
496    # Use GNULIB_SRCDIR directly.
497    # We already checked that $GNULIB_SRCDIR references a directory.
498    # Verify that it contains a gnulib checkout.
499    test -f "$GNULIB_SRCDIR/gnulib-tool" \
500      || die "Error: --gnulib-srcdir or \$GNULIB_SRCDIR is specified," \
501             "but does not contain gnulib-tool"
502  elif $use_git; then
503    gnulib_path=$(git_modules_config submodule.gnulib.path)
504    test -z "$gnulib_path" && gnulib_path=gnulib
505
506    # Get gnulib files.  Populate $gnulib_path, possibly updating a
507    # submodule, for use in the rest of the script.
508
509    if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git \
510       && git_modules_config submodule.gnulib.url >/dev/null; then
511      # Use GNULIB_REFDIR as a reference.
512      echo "$0: getting gnulib files..."
513      if git submodule -h|grep -- --reference > /dev/null; then
514        # Prefer the one-liner available in git 1.6.4 or newer.
515        git submodule update --init --reference "$GNULIB_REFDIR" \
516          "$gnulib_path" || exit $?
517      else
518        # This fallback allows at least git 1.5.5.
519        if test -f "$gnulib_path"/gnulib-tool; then
520          # Since file already exists, assume submodule init already complete.
521          git submodule update -- "$gnulib_path" || exit $?
522        else
523          # Older git can't clone into an empty directory.
524          rmdir "$gnulib_path" 2>/dev/null
525          git clone --reference "$GNULIB_REFDIR" \
526            "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \
527            && git submodule init -- "$gnulib_path" \
528            && git submodule update -- "$gnulib_path" \
529            || exit $?
530        fi
531      fi
532    else
533      # GNULIB_REFDIR is not set or not usable. Ignore it.
534      if git_modules_config submodule.gnulib.url >/dev/null; then
535        echo "$0: getting gnulib files..."
536        git submodule init -- "$gnulib_path" || exit $?
537        git submodule update -- "$gnulib_path" || exit $?
538
539      elif [ ! -d "$gnulib_path" ]; then
540        echo "$0: getting gnulib files..."
541
542        trap cleanup_gnulib HUP INT PIPE TERM
543
544        shallow=
545        if test -z "$GNULIB_REVISION"; then
546          if git clone -h 2>&1 | grep -- --depth > /dev/null; then
547            shallow='--depth 2'
548          fi
549          git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \
550            || cleanup_gnulib
551        else
552          if git fetch -h 2>&1 | grep -- --depth > /dev/null; then
553            shallow='--depth 2'
554          fi
555          mkdir -p "$gnulib_path"
556          # Only want a shallow checkout of $GNULIB_REVISION, but git does not
557          # support cloning by commit hash. So attempt a shallow fetch by commit
558          # hash to minimize the amount of data downloaded and changes needed to
559          # be processed, which can drastically reduce download and processing
560          # time for checkout. If the fetch by commit fails, a shallow fetch can
561          # not be performed because we do not know what the depth of the commit
562          # is without fetching all commits. So fall back to fetching all
563          # commits.
564          git -C "$gnulib_path" init
565          git -C "$gnulib_path" remote add origin \
566              ${GNULIB_URL:-$default_gnulib_url}
567          git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" \
568            || git -C "$gnulib_path" fetch origin \
569            || cleanup_gnulib
570          git -C "$gnulib_path" reset --hard FETCH_HEAD
571        fi
572
573        trap - HUP INT PIPE TERM
574      fi
575    fi
576    GNULIB_SRCDIR=$gnulib_path
577    # Verify that the submodule contains a gnulib checkout.
578    test -f "$gnulib_path/gnulib-tool" \
579      || die "Error: $gnulib_path is supposed to contain a gnulib checkout," \
580             "but does not contain gnulib-tool"
581  fi
582
583  # XXX Should this be done if $use_git is false?
584  if test -d "$GNULIB_SRCDIR"/.git && test -n "$GNULIB_REVISION" \
585     && ! git_modules_config submodule.gnulib.url >/dev/null; then
586    (cd "$GNULIB_SRCDIR" && git checkout "$GNULIB_REVISION") || cleanup_gnulib
587  fi
588
589  # $GNULIB_SRCDIR now points to the version of gnulib to use, and
590  # we no longer need to use git or $gnulib_path below here.
591}
592
593# -------- Upgrading bootstrap to the version found in GNULIB_SRCDIR. --------
594
595upgrade_bootstrap ()
596{
597  if test -f "$medir"/bootstrap-funclib.sh; then
598    update_lib=true
599    { cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/top/bootstrap" \
600      && cmp -s "$medir"/bootstrap-funclib.sh \
601                "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" \
602      && cmp -s "$medir"/autopull.sh "$GNULIB_SRCDIR/top/autopull.sh" \
603      && cmp -s "$medir"/autogen.sh "$GNULIB_SRCDIR/top/autogen.sh"; \
604    }
605  else
606    update_lib=false
607    cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/build-aux/bootstrap"
608  fi || {
609    if $update_lib; then
610      echo "$0: updating bootstrap & companions and restarting..."
611    else
612      echo "$0: updating bootstrap and restarting..."
613    fi
614    case $(sh -c 'echo "$1"' -- a) in
615      a) ignored=--;;
616      *) ignored=ignored;;
617    esac
618    u=$update_lib
619    exec sh -c \
620      '{ if '$u' && test -f "$1"; then cp "$1" "$3"; else cp "$2" "$3"; fi; } &&
621       { if '$u' && test -f "$4"; then cp "$4" "$5"; else rm -f "$5"; fi; } &&
622       { if '$u' && test -f "$6"; then cp "$6" "$7"; else rm -f "$7"; fi; } &&
623       { if '$u' && test -f "$8"; then cp "$8" "$9"; else rm -f "$9"; fi; } &&
624       shift && shift && shift && shift && shift &&
625       shift && shift && shift && shift &&
626       exec "${CONFIG_SHELL-/bin/sh}" "$@"' \
627      $ignored \
628      "$GNULIB_SRCDIR/top/bootstrap" "$GNULIB_SRCDIR/build-aux/bootstrap" \
629      "$medir/bootstrap" \
630      "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" "$medir/bootstrap-funclib.sh" \
631      "$GNULIB_SRCDIR/top/autopull.sh" "$medir/autopull.sh" \
632      "$GNULIB_SRCDIR/top/autogen.sh" "$medir/autogen.sh" \
633      "$0" "$@" --no-bootstrap-sync
634  }
635}
636
637# ----------------------------------------------------------------------------
638
639if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then
640  use_gnulib=false
641else
642  use_gnulib=true
643fi
644
645# -------- Fetch auxiliary files from the network.  --------------------------
646
647autopull_usage() {
648  cat <<EOF
649Usage: $me [OPTION]...
650Bootstrap this package from the checked-out sources.
651
652Optional environment variables:
653  GNULIB_SRCDIR            Specifies the local directory where gnulib
654                           sources reside.  Use this if you already
655                           have gnulib sources on your machine, and
656                           you want to use these sources.
657  GNULIB_REFDIR            Specifies the local directory where a gnulib
658                           repository (with a .git subdirectory) resides.
659                           Use this if you already have gnulib sources
660                           and history on your machine, and do not want
661                           to waste your bandwidth downloading them again.
662  GNULIB_URL               Cloneable URL of the gnulib repository.
663
664Options:
665  --bootstrap-sync         if this bootstrap script is not identical to
666                           the version in the local gnulib sources,
667                           update this script, and then restart it with
668                           /bin/sh or the shell \$CONFIG_SHELL
669  --no-bootstrap-sync      do not check whether bootstrap is out of sync
670  --force                  attempt to bootstrap even if the sources seem
671                           not to have been checked out
672  --no-git                 do not use git to update gnulib.  Requires that
673                           \$GNULIB_SRCDIR or the --gnulib-srcdir option
674                           points to a gnulib repository with the correct
675                           revision
676  --skip-po                do not download po files
677EOF
678  bootstrap_print_option_usage_hook
679  cat <<EOF
680If the file bootstrap.conf exists in the same directory as this script, its
681contents are read as shell variables to configure the bootstrap.
682
683For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
684are honored.
685
686Gnulib sources can be fetched in various ways:
687
688 * If the environment variable GNULIB_SRCDIR is set (either as an
689   environment variable or via the --gnulib-srcdir option), then sources
690   are fetched from that local directory.  If it is a git repository and
691   the configuration variable GNULIB_REVISION is set in bootstrap.conf,
692   then that revision is checked out.
693
694 * Otherwise, if this package is in a git repository with a 'gnulib'
695   submodule configured, then that submodule is initialized and updated
696   and sources are fetched from there.  If GNULIB_REFDIR is set (either
697   as an environment variable or via the --gnulib-refdir option) and is
698   a git repository, then it is used as a reference.
699
700 * Otherwise, if the 'gnulib' directory does not exist, Gnulib sources
701   are cloned into that directory using git from \$GNULIB_URL, defaulting
702   to $default_gnulib_url.
703   If the configuration variable GNULIB_REVISION is set in bootstrap.conf,
704   then that revision is checked out.
705
706 * Otherwise, the existing Gnulib sources in the 'gnulib' directory are
707   used.  If it is a git repository and the configuration variable
708   GNULIB_REVISION is set in bootstrap.conf, then that revision is
709   checked out.
710
711If you maintain a package and want to pin a particular revision of the
712Gnulib sources that has been tested with your package, then there are
713two possible approaches: either configure a 'gnulib' submodule with the
714appropriate revision, or set GNULIB_REVISION (and if necessary
715GNULIB_URL) in bootstrap.conf.
716
717Running without arguments will suffice in most cases.
718EOF
719}
720
721# Fetch auxiliary files that are omitted from the version control
722# repository of this package.
723autopull()
724{
725  # Ensure that CDPATH is not set.  Otherwise, the output from cd
726  # would cause trouble in at least one use below.
727  (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
728
729  # Parse options.
730
731  # Use git to update gnulib sources
732  use_git=true
733
734  for option
735  do
736    case $option in
737    --help)
738      autopull_usage
739      return;;
740    --version)
741      set -e
742      echo "autopull.sh $scriptlibversion"
743      echo "$copyright"
744      return 0
745      ;;
746    --skip-po)
747      SKIP_PO=t;;
748    --force)
749      checkout_only_file=;;
750    --bootstrap-sync)
751      bootstrap_sync=true;;
752    --no-bootstrap-sync)
753      bootstrap_sync=false;;
754    --no-git)
755      use_git=false;;
756    *)
757      bootstrap_option_hook $option || die "$option: unknown option";;
758    esac
759  done
760
761  $use_git || test -n "$GNULIB_SRCDIR" \
762    || die "Error: --no-git requires \$GNULIB_SRCDIR environment variable" \
763           "or --gnulib-srcdir option"
764  test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \
765    || die "Error: \$GNULIB_SRCDIR environment variable" \
766           "or --gnulib-srcdir option is specified," \
767           "but does not denote a directory"
768
769  if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
770    die "Running this script from a non-checked-out distribution is risky."
771  fi
772
773  check_build_prerequisites $use_git
774
775  if $use_gnulib || $bootstrap_sync; then
776    prepare_GNULIB_SRCDIR
777    if $bootstrap_sync; then
778      upgrade_bootstrap
779    fi
780  fi
781
782  # Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6.
783  # Also find the compatible sha1 utility on the BSDs
784  if test x"$SKIP_PO" = x; then
785    find_tool SHA1SUM sha1sum gsha1sum shasum sha1
786  fi
787
788  # See if we can use gnulib's git-merge-changelog merge driver.
789  if $use_git && test -d .git && check_exists git; then
790    if git config merge.merge-changelog.driver >/dev/null ; then
791      :
792    elif check_exists git-merge-changelog; then
793      echo "$0: initializing git-merge-changelog driver"
794      git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
795      git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
796    else
797      echo "$0: consider installing git-merge-changelog from gnulib"
798    fi
799  fi
800
801  case $SKIP_PO in
802  '')
803    if test -d po; then
804      update_po_files po $package || return
805    fi
806
807    if test -d runtime-po; then
808      update_po_files runtime-po $package-runtime || return
809    fi;;
810  esac
811
812  # ---------------------------------------------------------------------------
813
814  bootstrap_post_pull_hook \
815    || die "bootstrap_post_pull_hook failed"
816
817  # Don't proceed if there are uninitialized submodules.  In particular,
818  # autogen.sh will remove dangling links, which might be links into
819  # uninitialized submodules.
820  # But it's OK if the 'gnulib' submodule is uninitialized, as long as
821  # GNULIB_SRCDIR is set.
822  if $use_git; then
823    # Uninitialized submodules are listed with an initial dash.
824    uninitialized=`git submodule | grep '^-' | awk '{ print $2 }'`
825    if test -n "$GNULIB_SRCDIR"; then
826      uninitialized=`echo "$uninitialized" | grep -v '^gnulib$'`
827    fi
828    if test -n "$uninitialized"; then
829      uninit_comma=`echo "$uninitialized" | tr '\n' ',' | sed -e 's|,$|.|'`
830      die "Some git submodules are not initialized: "$uninit_comma \
831          "Either use option '--no-git'," \
832          "or run 'git submodule update --init' and bootstrap again."
833    fi
834  fi
835
836  if test -f "$medir"/autogen.sh; then
837    echo "$0: done.  Now you can run '$medir/autogen.sh'."
838  fi
839}
840
841# ----------------------------- Get translations. -----------------------------
842
843download_po_files() {
844  subdir=$1
845  domain=$2
846  echo "$me: getting translations into $subdir for $domain..."
847  cmd=$(printf "$po_download_command_format" "$subdir" "$domain")
848  eval "$cmd"
849}
850
851# Mirror .po files to $po_dir/.reference and copy only the new
852# or modified ones into $po_dir.  Also update $po_dir/LINGUAS.
853# Note po files that exist locally only are left in $po_dir but will
854# not be included in LINGUAS and hence will not be distributed.
855update_po_files() {
856  # Directory containing primary .po files.
857  # Overwrite them only when we're sure a .po file is new.
858  po_dir=$1
859  domain=$2
860
861  # Mirror *.po files into this dir.
862  # Usually contains *.s1 checksum files.
863  ref_po_dir="$po_dir/.reference"
864
865  test -d $ref_po_dir || mkdir $ref_po_dir || return
866  download_po_files $ref_po_dir $domain \
867    && ls "$ref_po_dir"/*.po 2>/dev/null |
868      sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return
869
870  langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g')
871  test "$langs" = '*' && langs=x
872  for po in $langs; do
873    case $po in x) continue;; esac
874    new_po="$ref_po_dir/$po.po"
875    cksum_file="$ref_po_dir/$po.s1"
876    if ! test -f "$cksum_file" ||
877        ! test -f "$po_dir/$po.po" ||
878        ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then
879      echo "$me: updated $po_dir/$po.po..."
880      cp "$new_po" "$po_dir/$po.po" \
881          && $SHA1SUM < "$new_po" > "$cksum_file" || return
882    fi
883  done
884}
885
886# -------- Generate files automatically from existing sources.  --------------
887
888autogen_usage() {
889  cat <<EOF
890Usage: $me [OPTION]...
891Bootstrap this package from the checked-out sources.
892
893Optional environment variables:
894  GNULIB_SRCDIR            Specifies the local directory where gnulib
895                           sources reside.  Use this if you already
896                           have gnulib sources on your machine, and
897                           you want to use these sources.
898
899Options:
900  --copy                   copy files instead of creating symbolic links
901  --force                  attempt to bootstrap even if the sources seem
902                           not to have been checked out
903EOF
904  bootstrap_print_option_usage_hook
905  cat <<EOF
906If the file bootstrap.conf exists in the same directory as this script, its
907contents are read as shell variables to configure the bootstrap.
908
909For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
910are honored.
911
912Gnulib sources are assumed to be present:
913  * in \$GNULIB_SRCDIR, if that environment variable is set,
914  * otherwise, in the 'gnulib' submodule, if such a submodule is configured,
915  * otherwise, in the 'gnulib' subdirectory.
916
917Running without arguments will suffice in most cases.
918EOF
919}
920
921
922version_controlled_file() {
923  parent=$1
924  file=$2
925  if test -d .git; then
926    git rm -n "$file" > /dev/null 2>&1
927  elif test -d .svn; then
928    svn log -r HEAD "$file" > /dev/null 2>&1
929  elif test -d CVS; then
930    grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null |
931             grep '^/[^/]*/[0-9]' > /dev/null
932  else
933    warn_ "no version control for $file?"
934    false
935  fi
936}
937
938# Strip blank and comment lines to leave significant entries.
939gitignore_entries() {
940  sed '/^#/d; /^$/d' "$@"
941}
942
943# If $STR is not already on a line by itself in $FILE, insert it at the start.
944# Entries are inserted at the start of the ignore list to ensure existing
945# entries starting with ! are not overridden.  Such entries support
946# whitelisting exceptions after a more generic blacklist pattern.
947insert_if_absent() {
948  file=$1
949  str=$2
950  test -f $file || touch $file
951  test -r $file || die "Error: failed to read ignore file: $file"
952  duplicate_entries=$(gitignore_entries $file | sort | uniq -d)
953  if [ "$duplicate_entries" ] ; then
954    die "Error: Duplicate entries in $file: " $duplicate_entries
955  fi
956  linesold=$(gitignore_entries $file | wc -l)
957  linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l)
958  if [ $linesold != $linesnew ] ; then
959    { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \
960      || die "insert_if_absent $file $str: failed"
961  fi
962}
963
964# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
965# insert_if_absent.
966insert_vc_ignore() {
967  vc_ignore_file="$1"
968  pattern="$2"
969  case $vc_ignore_file in
970  *.gitignore)
971    # A .gitignore entry that does not start with '/' applies
972    # recursively to subdirectories, so prepend '/' to every
973    # .gitignore entry.
974    pattern=$(echo "$pattern" | sed s,^,/,);;
975  esac
976  insert_if_absent "$vc_ignore_file" "$pattern"
977}
978
979symlink_to_dir()
980{
981  src=$1/$2
982  dst=${3-$2}
983
984  test -f "$src" && {
985
986    # If the destination directory doesn't exist, create it.
987    # This is required at least for "lib/uniwidth/cjk.h".
988    dst_dir=$(dirname "$dst")
989    if ! test -d "$dst_dir"; then
990      mkdir -p "$dst_dir"
991
992      # If we've just created a directory like lib/uniwidth,
993      # tell version control system(s) it's ignorable.
994      # FIXME: for now, this does only one level
995      parent=$(dirname "$dst_dir")
996      for dot_ig in x $vc_ignore; do
997        test $dot_ig = x && continue
998        ig=$parent/$dot_ig
999        insert_vc_ignore $ig "${dst_dir##*/}/"
1000      done
1001    fi
1002
1003    if $copy; then
1004      {
1005        test ! -h "$dst" || {
1006          echo "$me: rm -f $dst" &&
1007          rm -f "$dst"
1008        }
1009      } &&
1010      test -f "$dst" &&
1011      cmp -s "$src" "$dst" || {
1012        echo "$me: cp -fp $src $dst" &&
1013        cp -fp "$src" "$dst"
1014      }
1015    else
1016      # Leave any existing symlink alone, if it already points to the source,
1017      # so that broken build tools that care about symlink times
1018      # aren't confused into doing unnecessary builds.  Conversely, if the
1019      # existing symlink's timestamp is older than the source, make it afresh,
1020      # so that broken tools aren't confused into skipping needed builds.  See
1021      # <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00326.html>.
1022      test -h "$dst" &&
1023      src_ls=$(ls -diL "$src" 2>/dev/null) && set $src_ls && src_i=$1 &&
1024      dst_ls=$(ls -diL "$dst" 2>/dev/null) && set $dst_ls && dst_i=$1 &&
1025      test "$src_i" = "$dst_i" &&
1026      both_ls=$(ls -dt "$src" "$dst") &&
1027      test "X$both_ls" = "X$dst$nl$src" || {
1028        dot_dots=
1029        case $src in
1030        /*) ;;
1031        *)
1032          case /$dst/ in
1033          *//* | */../* | */./* | /*/*/*/*/*/)
1034             die "invalid symlink calculation: $src -> $dst";;
1035          /*/*/*/*/)    dot_dots=../../../;;
1036          /*/*/*/)      dot_dots=../../;;
1037          /*/*/)        dot_dots=../;;
1038          esac;;
1039        esac
1040
1041        echo "$me: ln -fs $dot_dots$src $dst" &&
1042        ln -fs "$dot_dots$src" "$dst"
1043      }
1044    fi
1045  }
1046}
1047
1048# Regenerate all autogeneratable files that are omitted from the
1049# version control repository.  In particular, regenerate all
1050# aclocal.m4, config.h.in, Makefile.in, configure files with new
1051# versions of autoconf or automake.
1052autogen()
1053{
1054  # Ensure that CDPATH is not set.  Otherwise, the output from cd
1055  # would cause trouble in at least one use below.
1056  (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
1057
1058  # Environment variables that may be set by the user.
1059  : "${AUTOPOINT=autopoint}"
1060  : "${AUTORECONF=autoreconf}"
1061
1062  if test "$vc_ignore" = auto; then
1063    vc_ignore=
1064    test -d .git && vc_ignore=.gitignore
1065    test -d CVS && vc_ignore="$vc_ignore .cvsignore"
1066  fi
1067
1068
1069  # Parse options.
1070
1071  # Whether to use copies instead of symlinks.
1072  copy=false
1073
1074  for option
1075  do
1076    case $option in
1077    --help)
1078      autogen_usage
1079      return;;
1080    --version)
1081      set -e
1082      echo "autogen.sh $scriptlibversion"
1083      echo "$copyright"
1084      return 0
1085      ;;
1086    --force)
1087      checkout_only_file=;;
1088    --copy)
1089      copy=true;;
1090    *)
1091      bootstrap_option_hook $option || die "$option: unknown option";;
1092    esac
1093  done
1094
1095  test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \
1096    || die "Error: \$GNULIB_SRCDIR environment variable or --gnulib-srcdir" \
1097           "option is specified, but does not denote a directory"
1098
1099  if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
1100    die "Running this script from a non-checked-out distribution is risky."
1101  fi
1102
1103  if $use_gnulib; then
1104    if test -z "$GNULIB_SRCDIR"; then
1105      gnulib_path=$(test -f .gitmodules &&
1106                    git config --file .gitmodules submodule.gnulib.path)
1107      test -z "$gnulib_path" && gnulib_path=gnulib
1108      GNULIB_SRCDIR=$gnulib_path
1109    fi
1110  fi
1111
1112  # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
1113  found_aux_dir=no
1114  grep '^[	 ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'])' configure.ac \
1115      >/dev/null && found_aux_dir=yes
1116  grep '^[	 ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
1117      >/dev/null && found_aux_dir=yes
1118  test $found_aux_dir = yes \
1119    || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it"
1120
1121  # If $build_aux doesn't exist, create it now, otherwise some bits
1122  # below will malfunction.  If creating it, also mark it as ignored.
1123  if test ! -d $build_aux; then
1124    mkdir $build_aux
1125    for dot_ig in x $vc_ignore; do
1126      test $dot_ig = x && continue
1127      insert_vc_ignore $dot_ig $build_aux/
1128    done
1129  fi
1130
1131  check_build_prerequisites false
1132
1133  use_libtool=0
1134  # We'd like to use grep -E, to see if any of LT_INIT,
1135  # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
1136  # but that's not portable enough (e.g., for Solaris).
1137  grep '^[	 ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
1138    && use_libtool=1
1139  grep '^[	 ]*LT_INIT' configure.ac >/dev/null \
1140    && use_libtool=1
1141  if test $use_libtool = 1; then
1142    find_tool LIBTOOLIZE glibtoolize libtoolize
1143  fi
1144
1145  if $use_gnulib; then
1146    gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
1147    <$gnulib_tool || return
1148  fi
1149
1150  # NOTE: we have to be careful to run both autopoint and libtoolize
1151  # before gnulib-tool, since gnulib-tool is likely to provide newer
1152  # versions of files "installed" by these two programs.
1153  # Then, *after* gnulib-tool (see below), we have to be careful to
1154  # run autoreconf in such a way that it does not run either of these
1155  # two just-pre-run programs.
1156
1157  # Import from gettext.
1158  with_gettext=yes
1159  grep '^[	 ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
1160      with_gettext=no
1161
1162  if test $with_gettext = yes || test $use_libtool = 1; then
1163
1164    tempbase=.bootstrap$$
1165    trap "rm -f $tempbase.0 $tempbase.1" HUP INT PIPE TERM
1166
1167    > $tempbase.0 > $tempbase.1 &&
1168    find . ! -type d -print | sort > $tempbase.0 || return
1169
1170    if test $with_gettext = yes; then
1171      # Released autopoint has the tendency to install macros that have been
1172      # obsoleted in current gnulib, so run this before gnulib-tool.
1173      echo "$0: $AUTOPOINT --force"
1174      $AUTOPOINT --force || return
1175    fi
1176
1177    # Autoreconf runs aclocal before libtoolize, which causes spurious
1178    # warnings if the initial aclocal is confused by the libtoolized
1179    # (or worse out-of-date) macro directory.
1180    # libtoolize 1.9b added the --install option; but we support back
1181    # to libtoolize 1.5.22, where the install action was default.
1182    if test $use_libtool = 1; then
1183      install=
1184      case $($LIBTOOLIZE --help) in
1185        *--install*) install=--install ;;
1186      esac
1187      echo "running: $LIBTOOLIZE $install --copy"
1188      $LIBTOOLIZE $install --copy
1189    fi
1190
1191    find . ! -type d -print | sort >$tempbase.1
1192    old_IFS=$IFS
1193    IFS=$nl
1194    for file in $(comm -13 $tempbase.0 $tempbase.1); do
1195      IFS=$old_IFS
1196      parent=${file%/*}
1197      version_controlled_file "$parent" "$file" || {
1198        for dot_ig in x $vc_ignore; do
1199          test $dot_ig = x && continue
1200          ig=$parent/$dot_ig
1201          insert_vc_ignore "$ig" "${file##*/}"
1202        done
1203      }
1204    done
1205    IFS=$old_IFS
1206
1207    rm -f $tempbase.0 $tempbase.1
1208    trap - HUP INT PIPE TERM
1209  fi
1210
1211  # Import from gnulib.
1212
1213  if $use_gnulib; then
1214    gnulib_tool_options="\
1215     --no-changelog\
1216     --aux-dir=$build_aux\
1217     --doc-base=$doc_base\
1218     --lib=$gnulib_name\
1219     --m4-base=$m4_base/\
1220     --source-base=$source_base/\
1221     --tests-base=$tests_base\
1222     --local-dir=$local_gl_dir\
1223     $gnulib_tool_option_extras\
1224    "
1225    if test $use_libtool = 1; then
1226      case "$gnulib_tool_options " in
1227        *' --libtool '*) ;;
1228        *) gnulib_tool_options="$gnulib_tool_options --libtool" ;;
1229      esac
1230    fi
1231    echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
1232    $gnulib_tool $gnulib_tool_options --import $gnulib_modules \
1233      || die "gnulib-tool failed"
1234
1235    for file in $gnulib_files; do
1236      symlink_to_dir "$GNULIB_SRCDIR" $file \
1237        || die "failed to symlink $file"
1238    done
1239  fi
1240
1241  bootstrap_post_import_hook \
1242    || die "bootstrap_post_import_hook failed"
1243
1244  # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
1245  # gnulib-populated directories.  Such .m4 files would cause aclocal to fail.
1246  # The following requires GNU find 4.2.3 or newer.  Considering the usual
1247  # portability constraints of this script, that may seem a very demanding
1248  # requirement, but it should be ok.  Ignore any failure, which is fine,
1249  # since this is only a convenience to help developers avoid the relatively
1250  # unusual case in which a symlinked-to .m4 file is git-removed from gnulib
1251  # between successive runs of this script.
1252  find "$m4_base" "$source_base" \
1253    -depth \( -name '*.m4' -o -name '*.[ch]' \) \
1254    -type l -xtype l -delete > /dev/null 2>&1
1255
1256  # Invoke autoreconf with --force --install to ensure upgrades of tools
1257  # such as ylwrap.
1258  AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS"
1259  AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive"
1260
1261  # Tell autoreconf not to invoke autopoint or libtoolize; they were run above.
1262  echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS"
1263  AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \
1264    || die "autoreconf failed"
1265
1266  # Get some extra files from gnulib, overriding existing files.
1267  for file in $gnulib_extra_files; do
1268    case $file in
1269      */INSTALL) dst=INSTALL;;
1270      build-aux/*) dst=$build_aux/${file#build-aux/};;
1271      *) dst=$file;;
1272    esac
1273    symlink_to_dir "$GNULIB_SRCDIR" $file $dst \
1274      || die "failed to symlink $file"
1275  done
1276
1277  if test $with_gettext = yes; then
1278    # Create gettext configuration.
1279    echo "$0: Creating po/Makevars from po/Makevars.template ..."
1280    rm -f po/Makevars
1281    sed '
1282      /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
1283      /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/
1284      /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'|
1285      /^XGETTEXT_OPTIONS *=/{
1286        s/$/ \\/
1287        a\
1288            '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
1289      }
1290    ' po/Makevars.template >po/Makevars \
1291      || die 'cannot generate po/Makevars'
1292
1293    # If the 'gettext' module is in use, grab the latest Makefile.in.in.
1294    # If only the 'gettext-h' module is in use, assume autopoint already
1295    # put the correct version of this file into place.
1296    case $gnulib_modules in
1297      *gettext-h*) ;;
1298      *gettext*)
1299        cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \
1300          || die "cannot create po/Makefile.in.in"
1301        ;;
1302    esac
1303
1304    if test -d runtime-po; then
1305      # Similarly for runtime-po/Makevars, but not quite the same.
1306      rm -f runtime-po/Makevars
1307      sed '
1308        /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
1309        /^subdir *=.*/s/=.*/= runtime-po/
1310        /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
1311        /^XGETTEXT_OPTIONS *=/{
1312          s/$/ \\/
1313          a\
1314              '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
1315        }
1316      ' po/Makevars.template >runtime-po/Makevars \
1317      || die 'cannot generate runtime-po/Makevars'
1318
1319      # Copy identical files from po to runtime-po.
1320      (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
1321    fi
1322  fi
1323
1324  bootstrap_epilogue
1325
1326  echo "$0: done.  Now you can run './configure'."
1327}
1328
1329# ----------------------------------------------------------------------------
1330
1331# Local Variables:
1332# eval: (add-hook 'before-save-hook 'time-stamp)
1333# time-stamp-start: "scriptlibversion="
1334# time-stamp-format: "%:y-%02m-%02d.%02H"
1335# time-stamp-time-zone: "UTC0"
1336# time-stamp-end: "; # UTC"
1337# End:
1338
1339usage() {
1340  cat <<EOF
1341Usage: $me [OPTION]...
1342Bootstrap this package from the checked-out sources.
1343
1344Optional environment variables:
1345  GNULIB_SRCDIR            Specifies the local directory where gnulib
1346                           sources reside.  Use this if you already
1347                           have gnulib sources on your machine, and
1348                           do not want to waste your bandwidth downloading
1349                           them again.
1350  GNULIB_URL               Cloneable URL of the gnulib repository.
1351
1352Options:
1353
1354  --pull                   Do phase 1: pull files from network
1355  --gen                    Do phase 2: generate from local files.
1356                           (The default is to do both phases.)
1357
1358  --gnulib-srcdir=DIRNAME  specify the local directory where gnulib
1359                           sources reside.  Use this if you already
1360                           have gnulib sources on your machine, and
1361                           you want to use these sources.  Defaults
1362                           to \$GNULIB_SRCDIR
1363  --gnulib-refdir=DIRNAME  specify the local directory where a gnulib
1364                           repository (with a .git subdirectory) resides.
1365                           Use this if you already have gnulib sources
1366                           and history on your machine, and do not want
1367                           to waste your bandwidth downloading them again.
1368                           Defaults to \$GNULIB_REFDIR
1369
1370  --bootstrap-sync         if this bootstrap script is not identical to
1371                           the version in the local gnulib sources,
1372                           update this script, and then restart it with
1373                           /bin/sh or the shell \$CONFIG_SHELL
1374  --no-bootstrap-sync      do not check whether bootstrap is out of sync
1375
1376  --copy                   copy files instead of creating symbolic links
1377  --force                  attempt to bootstrap even if the sources seem
1378                           not to have been checked out
1379  --no-git                 do not use git to update gnulib.  Requires that
1380                           \$GNULIB_SRCDIR or the --gnulib-srcdir option
1381                           points to a gnulib repository with the correct
1382                           revision
1383  --skip-po                do not download po files
1384EOF
1385  bootstrap_print_option_usage_hook
1386  cat <<EOF
1387If the file bootstrap.conf exists in the same directory as this script, its
1388contents are read as shell variables to configure the bootstrap.
1389
1390For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
1391are honored.
1392
1393Gnulib sources can be fetched in various ways:
1394
1395 * If the environment variable GNULIB_SRCDIR is set (either as an
1396   environment variable or via the --gnulib-srcdir option), then sources
1397   are fetched from that local directory.  If it is a git repository and
1398   the configuration variable GNULIB_REVISION is set in bootstrap.conf,
1399   then that revision is checked out.
1400
1401 * Otherwise, if this package is in a git repository with a 'gnulib'
1402   submodule configured, then that submodule is initialized and updated
1403   and sources are fetched from there.  If GNULIB_REFDIR is set (either
1404   as an environment variable or via the --gnulib-refdir option) and is
1405   a git repository, then it is used as a reference.
1406
1407 * Otherwise, if the 'gnulib' directory does not exist, Gnulib sources
1408   are cloned into that directory using git from \$GNULIB_URL, defaulting
1409   to $default_gnulib_url.
1410   If the configuration variable GNULIB_REVISION is set in bootstrap.conf,
1411   then that revision is checked out.
1412
1413 * Otherwise, the existing Gnulib sources in the 'gnulib' directory are
1414   used.  If it is a git repository and the configuration variable
1415   GNULIB_REVISION is set in bootstrap.conf, then that revision is
1416   checked out.
1417
1418If you maintain a package and want to pin a particular revision of the
1419Gnulib sources that has been tested with your package, then there are
1420two possible approaches: either configure a 'gnulib' submodule with the
1421appropriate revision, or set GNULIB_REVISION (and if necessary
1422GNULIB_URL) in bootstrap.conf.
1423
1424Running without arguments will suffice in most cases.
1425EOF
1426}
1427
1428# Parse options.
1429
1430# Whether to pull and generate.
1431pull=false
1432gen=false
1433
1434# Whether to use copies instead of symlinks.
1435copy=false
1436
1437# Use git to update gnulib sources
1438use_git=true
1439
1440for option
1441do
1442  case $option in
1443  --help)
1444    usage
1445    exit;;
1446  --version)
1447    set -e
1448    echo "bootstrap $scriptversion lib $scriptlibversion"
1449    echo "$copyright"
1450    exit 0
1451    ;;
1452  --pull)
1453    pull=true;;
1454  --gen)
1455    gen=true;;
1456  --gnulib-srcdir=*)
1457    GNULIB_SRCDIR=${option#--gnulib-srcdir=};;
1458  --gnulib-refdir=*)
1459    GNULIB_REFDIR=${option#--gnulib-refdir=};;
1460  --skip-po)
1461    SKIP_PO=t;;
1462  --force)
1463    checkout_only_file=;;
1464  --copy)
1465    copy=true;;
1466  --bootstrap-sync)
1467    bootstrap_sync=true;;
1468  --no-bootstrap-sync)
1469    bootstrap_sync=false;;
1470  --no-git)
1471    use_git=false;;
1472  *)
1473    bootstrap_option_hook $option || die "$option: unknown option";;
1474  esac
1475done
1476
1477# Default is to do both.
1478$pull || $gen || pull=true gen=true
1479
1480$use_git || test -n "$GNULIB_SRCDIR" \
1481  || die "Error: --no-git requires \$GNULIB_SRCDIR environment variable" \
1482         "or --gnulib-srcdir option"
1483test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \
1484  || die "Error: \$GNULIB_SRCDIR environment variable or --gnulib-srcdir" \
1485         "option is specified, but does not denote a directory"
1486
1487if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
1488  die "Bootstrapping from a non-checked-out distribution is risky."
1489fi
1490
1491check_build_prerequisites $use_git
1492
1493if $bootstrap_sync; then
1494  prepare_GNULIB_SRCDIR
1495  upgrade_bootstrap
1496  # Since we have now upgraded if needed, no need to try it a second time below.
1497  bootstrap_sync=false
1498fi
1499
1500echo "$0: Bootstrapping from checked-out $package sources..."
1501
1502# Pass GNULIB_SRCDIR and GNULIB_REFDIR to any subsidiary commands that care.
1503export GNULIB_SRCDIR
1504export GNULIB_REFDIR
1505
1506if $pull && { $use_git || test -z "$SKIP_PO"; }; then
1507  autopull \
1508      `if $bootstrap_sync; then
1509         echo ' --bootstrap-sync'
1510       else
1511         echo ' --no-bootstrap-sync'
1512       fi` \
1513      `if test -z "$checkout_only_file"; then echo ' --force'; fi` \
1514      `if ! $use_git; then echo ' --no-git'; fi` \
1515      `if test -n "$SKIP_PO"; then echo ' --skip-po'; fi` \
1516    || die "could not fetch auxiliary files"
1517fi
1518
1519if $gen; then
1520 autogen \
1521    `if $copy; then echo ' --copy'; fi` \
1522    `if test -z "$checkout_only_file"; then echo ' --force'; fi` \
1523  || die "could not generate auxiliary files"
1524fi
1525
1526# ----------------------------------------------------------------------------
1527
1528# Local Variables:
1529# eval: (add-hook 'before-save-hook 'time-stamp)
1530# time-stamp-start: "scriptversion="
1531# time-stamp-format: "%:y-%02m-%02d.%02H"
1532# time-stamp-time-zone: "UTC0"
1533# time-stamp-end: "; # UTC"
1534# End:
1535