123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- #!/bin/sh
- # Convenience script for fetching auxiliary files that are omitted from
- # the version control repository of this package.
- # Copyright (C) 2003-2023 Free Software Foundation, Inc.
- #
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <https://www.gnu.org/licenses/>.
- # Originally written by Paul Eggert. The canonical version of this
- # script is maintained as build-aux/autopull.sh in gnulib. However,
- # to be useful to your package, you should place a copy of it under
- # version control in the top-level directory of your package. The
- # intent is that all customization can be done with a bootstrap.conf
- # file also maintained in your version control; gnulib comes with a
- # template build-aux/bootstrap.conf to get you started.
- #
- # Alternatively, you can use an autopull.sh script that is specific
- # to your package.
- scriptversion=2022-07-24.15; # UTC
- me="$0"
- medir=`dirname "$me"`
- # Read the function library and the configuration.
- . "$medir"/bootstrap-funclib.sh
- # Ensure that CDPATH is not set. Otherwise, the output from cd
- # would cause trouble in at least one use below.
- (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
- usage() {
- cat <<EOF
- Usage: $me [OPTION]...
- Bootstrap this package from the checked-out sources.
- Optional environment variables:
- GNULIB_SRCDIR Specifies the local directory where gnulib
- sources reside. Use this if you already
- have gnulib sources on your machine, and
- you want to use these sources.
- GNULIB_REFDIR Specifies the local directory where a gnulib
- repository (with a .git subdirectory) resides.
- Use this if you already have gnulib sources
- and history on your machine, and do not want
- to waste your bandwidth downloading them again.
- GNULIB_URL Cloneable URL of the gnulib repository.
- Options:
- --bootstrap-sync if this bootstrap script is not identical to
- the version in the local gnulib sources,
- update this script, and then restart it with
- /bin/sh or the shell \$CONFIG_SHELL
- --no-bootstrap-sync do not check whether bootstrap is out of sync
- --force attempt to bootstrap even if the sources seem
- not to have been checked out
- --no-git do not use git to update gnulib. Requires that
- \$GNULIB_SRCDIR or the --gnulib-srcdir option
- points to a gnulib repository with the correct
- revision
- --skip-po do not download po files
- EOF
- bootstrap_print_option_usage_hook
- cat <<EOF
- If the file bootstrap.conf exists in the same directory as this script, its
- contents are read as shell variables to configure the bootstrap.
- For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
- are honored.
- Gnulib sources can be fetched in various ways:
- * If the environment variable GNULIB_SRCDIR is set (either as an
- environment variable or via the --gnulib-srcdir option), then sources
- are fetched from that local directory. If it is a git repository and
- the configuration variable GNULIB_REVISION is set in bootstrap.conf,
- then that revision is checked out.
- * Otherwise, if this package is in a git repository with a 'gnulib'
- submodule configured, then that submodule is initialized and updated
- and sources are fetched from there. If GNULIB_REFDIR is set (either
- as an environment variable or via the --gnulib-refdir option) and is
- a git repository, then it is used as a reference.
- * Otherwise, if the 'gnulib' directory does not exist, Gnulib sources
- are cloned into that directory using git from \$GNULIB_URL, defaulting
- to $default_gnulib_url.
- If the configuration variable GNULIB_REVISION is set in bootstrap.conf,
- then that revision is checked out.
- * Otherwise, the existing Gnulib sources in the 'gnulib' directory are
- used. If it is a git repository and the configuration variable
- GNULIB_REVISION is set in bootstrap.conf, then that revision is
- checked out.
- If you maintain a package and want to pin a particular revision of the
- Gnulib sources that has been tested with your package, then there are
- two possible approaches: either configure a 'gnulib' submodule with the
- appropriate revision, or set GNULIB_REVISION (and if necessary
- GNULIB_URL) in bootstrap.conf.
- Running without arguments will suffice in most cases.
- EOF
- }
- # Parse options.
- # Use git to update gnulib sources
- use_git=true
- for option
- do
- case $option in
- --help)
- usage
- exit;;
- --version)
- set -e
- echo "autopull.sh $scriptversion"
- echo "$copyright"
- exit 0
- ;;
- --skip-po)
- SKIP_PO=t;;
- --force)
- checkout_only_file=;;
- --bootstrap-sync)
- bootstrap_sync=true;;
- --no-bootstrap-sync)
- bootstrap_sync=false;;
- --no-git)
- use_git=false;;
- *)
- bootstrap_option_hook $option || die "$option: unknown option";;
- esac
- done
- $use_git || test -n "$GNULIB_SRCDIR" \
- || die "Error: --no-git requires \$GNULIB_SRCDIR environment variable or --gnulib-srcdir option"
- test -z "$GNULIB_SRCDIR" || test -d "$GNULIB_SRCDIR" \
- || die "Error: \$GNULIB_SRCDIR environment variable or --gnulib-srcdir option is specified, but does not denote a directory"
- if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
- die "Running this script from a non-checked-out distribution is risky."
- fi
- check_build_prerequisites $use_git
- if $use_gnulib || $bootstrap_sync; then
- prepare_GNULIB_SRCDIR
- if $bootstrap_sync; then
- upgrade_bootstrap
- fi
- fi
- # Find sha1sum, named gsha1sum on MacPorts, shasum on Mac OS X 10.6.
- # Also find the compatible sha1 utility on the BSDs
- if test x"$SKIP_PO" = x; then
- find_tool SHA1SUM sha1sum gsha1sum shasum sha1
- fi
- # See if we can use gnulib's git-merge-changelog merge driver.
- if $use_git && test -d .git && check_exists git; then
- if git config merge.merge-changelog.driver >/dev/null ; then
- :
- elif check_exists git-merge-changelog; then
- echo "$0: initializing git-merge-changelog driver"
- git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
- git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
- else
- echo "$0: consider installing git-merge-changelog from gnulib"
- fi
- fi
- # ----------------------------- Get translations. -----------------------------
- download_po_files() {
- subdir=$1
- domain=$2
- echo "$me: getting translations into $subdir for $domain..."
- cmd=$(printf "$po_download_command_format" "$subdir" "$domain")
- eval "$cmd"
- }
- # Mirror .po files to $po_dir/.reference and copy only the new
- # or modified ones into $po_dir. Also update $po_dir/LINGUAS.
- # Note po files that exist locally only are left in $po_dir but will
- # not be included in LINGUAS and hence will not be distributed.
- update_po_files() {
- # Directory containing primary .po files.
- # Overwrite them only when we're sure a .po file is new.
- po_dir=$1
- domain=$2
- # Mirror *.po files into this dir.
- # Usually contains *.s1 checksum files.
- ref_po_dir="$po_dir/.reference"
- test -d $ref_po_dir || mkdir $ref_po_dir || return
- download_po_files $ref_po_dir $domain \
- && ls "$ref_po_dir"/*.po 2>/dev/null |
- sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return
- langs=$(cd $ref_po_dir && echo *.po | sed 's/\.po//g')
- test "$langs" = '*' && langs=x
- for po in $langs; do
- case $po in x) continue;; esac
- new_po="$ref_po_dir/$po.po"
- cksum_file="$ref_po_dir/$po.s1"
- if ! test -f "$cksum_file" ||
- ! test -f "$po_dir/$po.po" ||
- ! $SHA1SUM -c "$cksum_file" < "$new_po" > /dev/null 2>&1; then
- echo "$me: updated $po_dir/$po.po..."
- cp "$new_po" "$po_dir/$po.po" \
- && $SHA1SUM < "$new_po" > "$cksum_file" || return
- fi
- done
- }
- case $SKIP_PO in
- '')
- if test -d po; then
- update_po_files po $package || exit
- fi
- if test -d runtime-po; then
- update_po_files runtime-po $package-runtime || exit
- fi;;
- esac
- # -----------------------------------------------------------------------------
- bootstrap_post_pull_hook \
- || die "bootstrap_post_pull_hook failed"
- # Don't proceed if there are uninitialized submodules. In particular,
- # autogen.sh will remove dangling links, which might be links into
- # uninitialized submodules.
- # But it's OK if the 'gnulib' submodule is uninitialized, as long as
- # GNULIB_SRCDIR is set.
- if $use_git; then
- # Uninitialized submodules are listed with an initial dash.
- uninitialized=`git submodule | grep '^-' | awk '{ print $2 }'`
- if test -n "$GNULIB_SRCDIR"; then
- uninitialized=`echo "$uninitialized" | grep -v '^gnulib$'`
- fi
- if test -n "$uninitialized"; then
- die "Some git submodules are not initialized: "`echo "$uninitialized" | tr '\n' ',' | sed -e 's|,$|.|'`" Either use option '--no-git', or run 'git submodule update --init' and bootstrap again."
- fi
- fi
- echo "$0: done. Now you can run './autogen.sh'."
- # ----------------------------------------------------------------------------
- # Local Variables:
- # eval: (add-hook 'before-save-hook 'time-stamp)
- # time-stamp-start: "scriptversion="
- # time-stamp-format: "%:y-%02m-%02d.%02H"
- # time-stamp-time-zone: "UTC0"
- # time-stamp-end: "; # UTC"
- # End:
|