| #! /bin/sh | |
| # Bootstrap this package from checked-out sources. | |
| scriptversion=2025-06-10.02; # UTC | |
| # Copyright (C) 2003-2026 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 top/bootstrap 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. | |
| # Please report bugs or propose patches to bug-gnulib@gnu.org. | |
| me="$0" | |
| medir=`dirname "$me"` | |
| # Read the function library and the configuration. | |
| . "$medir"/bootstrap-funclib.sh | |
| 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. | |
| Only used for phase 1 (--pull). | |
| GNULIB_URL URL of the gnulib repository. The default is | |
| $default_gnulib_url, | |
| which is Gnulib's upstream repository. | |
| Only used for phase 1 (--pull). | |
| Options: | |
| --pull Do phase 1: Pull files from the network. | |
| --gen Do phase 2: Generate files from local files | |
| (no network access). | |
| (The default is to do both phases.) | |
| --gnulib-srcdir=DIRNAME 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. Defaults | |
| to \$GNULIB_SRCDIR. | |
| --gnulib-refdir=DIRNAME 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. | |
| Defaults to \$GNULIB_REFDIR. | |
| Only used for phase 1 (--pull). | |
| --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. | |
| --copy Copy files instead of creating symbolic links. | |
| Only used for phase 2 (--gen). | |
| --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. | |
| Only used for phase 1 (--pull). | |
| --skip-po Do not download *.po files. | |
| Only used for phase 1 (--pull). | |
| 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 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 GNULIB_REFDIR is set and is a git repository | |
| its contents may be used to accelerate the process. | |
| 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. | |
| # Whether to pull and generate. | |
| pull=false | |
| gen=false | |
| # Whether to use copies instead of symlinks. | |
| copy=false | |
| # Use git to update gnulib sources | |
| use_git=true | |
| for option | |
| do | |
| case $option in | |
| --help) | |
| usage | |
| exit;; | |
| --version) | |
| set -e | |
| echo "bootstrap $scriptversion lib $scriptlibversion" | |
| echo "$copyright" | |
| exit 0 | |
| ;; | |
| --pull) | |
| pull=true;; | |
| --gen) | |
| gen=true;; | |
| --gnulib-srcdir=*) | |
| GNULIB_SRCDIR=${option#--gnulib-srcdir=};; | |
| --gnulib-refdir=*) | |
| GNULIB_REFDIR=${option#--gnulib-refdir=};; | |
| --skip-po) | |
| SKIP_PO=t;; | |
| --force) | |
| checkout_only_file=;; | |
| --copy) | |
| copy=true;; | |
| --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 | |
| # Default is to do both. | |
| $pull || $gen || pull=true gen=true | |
| $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 "Bootstrapping from a non-checked-out distribution is risky." | |
| fi | |
| check_build_prerequisites $use_git | |
| if $bootstrap_sync; then | |
| prepare_GNULIB_SRCDIR | |
| upgrade_bootstrap "$@" | |
| # Since we have now upgraded if needed, no need to try it a second time below. | |
| bootstrap_sync=false | |
| fi | |
| echo "$0: Bootstrapping from checked-out $package sources..." | |
| # Pass GNULIB_SRCDIR and GNULIB_REFDIR to any subsidiary commands that care. | |
| export GNULIB_SRCDIR | |
| export GNULIB_REFDIR | |
| if $pull && { $use_git || test -z "$SKIP_PO"; }; then | |
| autopull \ | |
| `if $bootstrap_sync; then | |
| echo ' --bootstrap-sync' | |
| else | |
| echo ' --no-bootstrap-sync' | |
| fi` \ | |
| `if test -z "$checkout_only_file"; then echo ' --force'; fi` \ | |
| `if ! $use_git; then echo ' --no-git'; fi` \ | |
| `if test -n "$SKIP_PO"; then echo ' --skip-po'; fi` \ | |
| || die "could not fetch auxiliary files" | |
| fi | |
| if $gen; then | |
| autogen \ | |
| `if $copy; then echo ' --copy'; fi` \ | |
| `if test -z "$checkout_only_file"; then echo ' --force'; fi` \ | |
| || die "could not generate auxiliary files" | |
| fi | |
| # ---------------------------------------------------------------------------- | |
| # Local Variables: | |
| # eval: (add-hook 'before-save-hook 'time-stamp nil t) | |
| # time-stamp-start: "scriptversion=" | |
| # time-stamp-format: "%Y-%02m-%02d.%02H" | |
| # time-stamp-time-zone: "UTC0" | |
| # time-stamp-end: "; # UTC" | |
| # End: |