[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] build: bootstrap with python gnulib-tool by default
From: |
Pádraig Brady |
Subject: |
[PATCH] build: bootstrap with python gnulib-tool by default |
Date: |
Sat, 27 Apr 2024 13:20:32 +0100 |
* gnulib: Update to support bootstrapping with python by default.
* bootstrap: Sync with gnulib.
* cfg.mk: Don't force python implementation with `make world`,
rather rely on the auto selection of python if appropriate.
---
bootstrap | 210 ++++++++++++++++++++++++++++--------------------------
cfg.mk | 2 +-
gnulib | 2 +-
3 files changed, 112 insertions(+), 102 deletions(-)
diff --git a/bootstrap b/bootstrap
index 3173829da..20913180a 100755
--- a/bootstrap
+++ b/bootstrap
@@ -3,7 +3,7 @@
# Bootstrap this package from checked-out sources.
-scriptversion=2023-12-10.18; # UTC
+scriptversion=2024-04-13.15; # UTC
# Copyright (C) 2003-2024 Free Software Foundation, Inc.
#
@@ -37,7 +37,7 @@ medir=`dirname "$me"`
# A library of shell functions for autopull.sh, autogen.sh, and bootstrap.
-scriptlibversion=2023-12-10.18; # UTC
+scriptlibversion=2024-04-13.15; # UTC
# Copyright (C) 2003-2024 Free Software Foundation, Inc.
#
@@ -478,10 +478,9 @@ find_tool ()
# --------------------- Preparing GNULIB_SRCDIR for use. ---------------------
# This is part of autopull.sh, but bootstrap needs it too, for self-upgrading.
+# cleanup_gnulib fails, removing the directory $gnulib_path first.
cleanup_gnulib() {
status=$?
- # XXX It's a bad idea to erase the submodule directory if it contains local
- # modifications.
rm -fr "$gnulib_path"
exit $status
}
@@ -499,48 +498,44 @@ prepare_GNULIB_SRCDIR ()
test -f "$GNULIB_SRCDIR/gnulib-tool" \
|| die "Error: --gnulib-srcdir or \$GNULIB_SRCDIR is specified," \
"but does not contain gnulib-tool"
- elif $use_git; then
+ if test -n "$GNULIB_REVISION" && $use_git; then
+ (cd "$GNULIB_SRCDIR" && git checkout "$GNULIB_REVISION") || exit $?
+ fi
+ else
+ if ! $use_git; then
+ die "Error: --no-git is specified," \
+ "but neither --gnulib-srcdir nor \$GNULIB_SRCDIR is specified"
+ fi
+ if git submodule -h | grep -- --reference > /dev/null; then
+ :
+ else
+ die "git version is too old, git >= 1.6.4 is required"
+ fi
gnulib_path=$(git_modules_config submodule.gnulib.path)
- test -z "$gnulib_path" && gnulib_path=gnulib
-
- # Get gnulib files. Populate $gnulib_path, possibly updating a
- # submodule, for use in the rest of the script.
-
- if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git \
- && git_modules_config submodule.gnulib.url >/dev/null; then
- # Use GNULIB_REFDIR as a reference.
- echo "$0: getting gnulib files..."
- if git submodule -h|grep -- --reference > /dev/null; then
- # Prefer the one-liner available in git 1.6.4 or newer.
- git submodule update --init --reference "$GNULIB_REFDIR" \
- "$gnulib_path" || exit $?
+ if test -n "$gnulib_path"; then
+ # A submodule 'gnulib' is configured.
+ # Get gnulib files. Populate $gnulib_path, updating the submodule.
+ if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then
+ # Use GNULIB_REFDIR as a reference.
+ echo "$0: getting gnulib files..."
+ git submodule update --init --reference "$GNULIB_REFDIR"
"$gnulib_path" \
+ || exit $?
else
- # This fallback allows at least git 1.5.5.
- if test -f "$gnulib_path"/gnulib-tool; then
- # Since file already exists, assume submodule init already complete.
+ # GNULIB_REFDIR is not set or not usable. Ignore it.
+ if git_modules_config submodule.gnulib.url >/dev/null; then
+ echo "$0: getting gnulib files..."
+ git submodule init -- "$gnulib_path" || exit $?
git submodule update -- "$gnulib_path" || exit $?
else
- # Older git can't clone into an empty directory.
- rmdir "$gnulib_path" 2>/dev/null
- git clone --reference "$GNULIB_REFDIR" \
- "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \
- && git submodule init -- "$gnulib_path" \
- && git submodule update -- "$gnulib_path" \
- || exit $?
+ die "Error: submodule 'gnulib' has no configured url"
fi
fi
else
- # GNULIB_REFDIR is not set or not usable. Ignore it.
- if git_modules_config submodule.gnulib.url >/dev/null; then
+ gnulib_path='gnulib'
+ if test ! -d "$gnulib_path"; then
+ # The subdirectory 'gnulib' does not yet exist. Clone into it.
echo "$0: getting gnulib files..."
- git submodule init -- "$gnulib_path" || exit $?
- git submodule update -- "$gnulib_path" || exit $?
-
- elif [ ! -d "$gnulib_path" ]; then
- echo "$0: getting gnulib files..."
-
trap cleanup_gnulib HUP INT PIPE TERM
-
shallow=
if test -z "$GNULIB_REVISION"; then
if git clone -h 2>&1 | grep -- --depth > /dev/null; then
@@ -562,30 +557,32 @@ prepare_GNULIB_SRCDIR ()
# is without fetching all commits. So fall back to fetching all
# commits.
git -C "$gnulib_path" init
- git -C "$gnulib_path" remote add origin \
- ${GNULIB_URL:-$default_gnulib_url}
+ git -C "$gnulib_path" remote add origin
${GNULIB_URL:-$default_gnulib_url}
git -C "$gnulib_path" fetch $shallow origin "$GNULIB_REVISION" \
|| git -C "$gnulib_path" fetch origin \
|| cleanup_gnulib
git -C "$gnulib_path" reset --hard FETCH_HEAD
+ (cd "$gnulib_path" && git checkout "$GNULIB_REVISION") ||
cleanup_gnulib
fi
-
trap - HUP INT PIPE TERM
+ else
+ # The subdirectory 'gnulib' already exists.
+ if test -n "$GNULIB_REVISION"; then
+ if test -d "$gnulib_path/.git"; then
+ (cd "$gnulib_path" && git checkout "$GNULIB_REVISION") || exit 1
+ else
+ die "Error: GNULIB_REVISION is specified in bootstrap.conf," \
+ "but '$gnulib_path' contains no git history"
+ fi
+ fi
fi
fi
- GNULIB_SRCDIR=$gnulib_path
- # Verify that the submodule contains a gnulib checkout.
+ # Verify that $gnulib_path contains a gnulib checkout.
test -f "$gnulib_path/gnulib-tool" \
- || die "Error: $gnulib_path is supposed to contain a gnulib checkout," \
+ || die "Error: '$gnulib_path' is supposed to contain a gnulib checkout,"
\
"but does not contain gnulib-tool"
+ GNULIB_SRCDIR=$gnulib_path
fi
-
- # XXX Should this be done if $use_git is false?
- if test -d "$GNULIB_SRCDIR"/.git && test -n "$GNULIB_REVISION" \
- && ! git_modules_config submodule.gnulib.url >/dev/null; then
- (cd "$GNULIB_SRCDIR" && git checkout "$GNULIB_REVISION") || cleanup_gnulib
- fi
-
# $GNULIB_SRCDIR now points to the version of gnulib to use, and
# we no longer need to use git or $gnulib_path below here.
}
@@ -647,7 +644,8 @@ fi
autopull_usage() {
cat <<EOF
Usage: $me [OPTION]...
-Bootstrap this package from the checked-out sources.
+Bootstrap this package from the checked-out sources, phase 1:
+Pull files from the network.
Optional environment variables:
GNULIB_SRCDIR Specifies the local directory where gnulib
@@ -664,18 +662,19 @@ Optional environment variables:
which is Gnulib's upstream repository.
Options:
- --bootstrap-sync if this bootstrap script is not identical to
+
+ --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
+ /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 points to a gnulib repository
+ with the correct revision.
+ --skip-po Do not download *.po files.
EOF
bootstrap_print_option_usage_hook
cat <<EOF
@@ -687,17 +686,16 @@ 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.
+ * If the environment variable GNULIB_SRCDIR is set, 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.
+ and sources are fetched from there. If the environment variable
+ GNULIB_REFDIR is set 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
@@ -890,7 +888,8 @@ update_po_files() {
autogen_usage() {
cat <<EOF
Usage: $me [OPTION]...
-Bootstrap this package from the checked-out sources.
+Bootstrap this package from the checked-out sources, phase 2:
+Generate files from local files (no network access).
Optional environment variables:
GNULIB_SRCDIR Specifies the local directory where gnulib
@@ -899,9 +898,9 @@ Optional environment variables:
you want to use these sources.
Options:
- --copy copy files instead of creating symbolic links
- --force attempt to bootstrap even if the sources seem
- not to have been checked out
+ --copy Copy files instead of creating symbolic links.
+ --force Attempt to bootstrap even if the sources seem
+ not to have been checked out.
EOF
bootstrap_print_option_usage_hook
cat <<EOF
@@ -1347,44 +1346,55 @@ 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
- do not want to waste your bandwidth downloading
- them again.
+ 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 network
- --gen Do phase 2: generate from local files.
+ --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 specify the local directory where gnulib
+ --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 specify the local directory where a gnulib
+ 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
+ Defaults to \$GNULIB_REFDIR.
+ Only used for phase 1 (--pull).
- --bootstrap-sync if this bootstrap script is not identical to
+ --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
- --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
+ /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
- --skip-po do not download po files
+ 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
@@ -1396,11 +1406,11 @@ 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.
+ * 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
@@ -1521,10 +1531,10 @@ if $pull && { $use_git || test -z "$SKIP_PO"; }; then
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"
+ autogen \
+ `if $copy; then echo ' --copy'; fi` \
+ `if test -z "$checkout_only_file"; then echo ' --force'; fi` \
+ || die "could not generate auxiliary files"
fi
# ----------------------------------------------------------------------------
diff --git a/cfg.mk b/cfg.mk
index fc292eabe..d8febadc3 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -58,7 +58,7 @@ _makefile_at_at_check_exceptions = \
_hv_file ?= $(srcdir)/tests/misc/help-version
world:
- GNULIB_TOOL_IMPL=py ./bootstrap && \
+ ./bootstrap && \
./configure --quiet && \
$(MAKE) $(AM_MAKEFLAGS) -j $$(nproc 2>/dev/null || echo 1)
diff --git a/gnulib b/gnulib
index 237cbf1c7..2905392e0 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit 237cbf1c7639ebf06117b21381e463dedbb474b8
+Subproject commit 2905392e0cff45e852e211e1d5eb7cfc5cf98a7f
--
2.44.0
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH] build: bootstrap with python gnulib-tool by default,
Pádraig Brady <=