From 86f823b5f342005b4ddd8838b7ab922b4944879a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=BCtzel?= Date: Thu, 14 Nov 2024 17:50:52 +0100 Subject: [PATCH] Update to gnulib revision 72abb08f4495bf232736f4d13a24bced72a9c327 (bug #66399). * bootstrap.conf: Update GNULIB_REVISION to a commit that contains fixes for issues with large files on Windows. --- bootstrap | 7 ++- bootstrap-funclib.sh | 139 ++++++++++++++++++++++++++++--------------- bootstrap.conf | 2 +- 3 files changed, 96 insertions(+), 52 deletions(-) diff --git a/bootstrap b/bootstrap index 4beae0e912..6acad165a3 100755 --- a/bootstrap +++ b/bootstrap @@ -1,7 +1,7 @@ #! /bin/sh # Bootstrap this package from checked-out sources. -scriptversion=2024-04-13.15; # UTC +scriptversion=2024-07-04.10; # UTC # Copyright (C) 2003-2024 Free Software Foundation, Inc. # @@ -117,7 +117,8 @@ Gnulib sources can be fetched in various ways: * 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. + 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. @@ -237,7 +238,7 @@ fi # ---------------------------------------------------------------------------- # Local Variables: -# eval: (add-hook 'before-save-hook 'time-stamp) +# 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" diff --git a/bootstrap-funclib.sh b/bootstrap-funclib.sh index f7905eb208..7c125533e0 100644 --- a/bootstrap-funclib.sh +++ b/bootstrap-funclib.sh @@ -1,6 +1,6 @@ # A library of shell functions for autopull.sh, autogen.sh, and bootstrap. -scriptlibversion=2024-04-28.09; # UTC +scriptlibversion=2024-11-12.21; # UTC # Copyright (C) 2003-2024 Free Software Foundation, Inc. # @@ -468,11 +468,10 @@ prepare_GNULIB_SRCDIR () # if the GNULIB_REVISION is a commit hash that only exists in # origin. In this case, we need a 'git fetch' and then retry # 'git checkout "$GNULIB_REVISION"'. - (cd "$GNULIB_SRCDIR" \ - && { git checkout "$GNULIB_REVISION" 2>/dev/null \ - || { git fetch origin && git checkout "$GNULIB_REVISION"; } - } - ) || exit $? + git -C "$GNULIB_SRCDIR" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$GNULIB_SRCDIR" fetch origin \ + && git -C "$GNULIB_SRCDIR" checkout "$GNULIB_REVISION"; } \ + || exit $? fi else if ! $use_git; then @@ -491,7 +490,7 @@ prepare_GNULIB_SRCDIR () 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" \ + git submodule update --init --reference "$GNULIB_REFDIR" "$gnulib_path"\ || exit $? else # GNULIB_REFDIR is not set or not usable. Ignore it. @@ -509,33 +508,65 @@ prepare_GNULIB_SRCDIR () # The subdirectory 'gnulib' does not yet exist. Clone into it. 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 - shallow='--depth 2' - fi - git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \ - || cleanup_gnulib + gnulib_url=${GNULIB_URL:-$default_gnulib_url} + if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then + # Use GNULIB_REFDIR as a reference. + git clone "$GNULIB_REFDIR" "$gnulib_path" \ + && git -C "$gnulib_path" remote set-url origin "$gnulib_url" \ + && if test -z "$GNULIB_REVISION"; then + git -C "$gnulib_path" pull origin \ + && { + # We want the default branch of "$gnulib_url" (since that's + # the behaviour if GNULIB_REFDIR is not specified), not the + # current branch of "$GNULIB_REFDIR". + default_branch=`LC_ALL=C git -C "$gnulib_path" \ + remote show origin \ + | sed -n -e 's/^ *HEAD branch: //p'` + test -n "$default_branch" || default_branch='master' + git -C "$gnulib_path" checkout "$default_branch" + } + else + # The 'git checkout "$GNULIB_REVISION"' command succeeds if the + # GNULIB_REVISION is a commit hash that exists locally, or if it + # is a branch name that can be fetched from origin. It fails, + # however, if the GNULIB_REVISION is a commit hash that only + # exists in origin. In this case, we need a 'git fetch' and then + # retry 'git checkout "$GNULIB_REVISION"'. + git -C "$gnulib_path" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$gnulib_path" fetch origin \ + && git -C "$gnulib_path" checkout "$GNULIB_REVISION"; } + fi \ + || cleanup_gnulib else - if git fetch -h 2>&1 | grep -- --depth > /dev/null; then - shallow='--depth 2' + # GNULIB_REFDIR is not set or not usable. Ignore it. + shallow= + if test -z "$GNULIB_REVISION"; then + if git clone -h 2>&1 | grep -- --depth > /dev/null; then + shallow='--depth 2' + fi + git clone $shallow "$gnulib_url" "$gnulib_path" \ + || cleanup_gnulib + else + if git fetch -h 2>&1 | grep -- --depth > /dev/null; then + shallow='--depth 2' + fi + mkdir -p "$gnulib_path" + # Only want a shallow checkout of $GNULIB_REVISION, but git does not + # support cloning by commit hash. So attempt a shallow fetch by + # commit hash to minimize the amount of data downloaded and changes + # needed to be processed, which can drastically reduce download and + # processing time for checkout. If the fetch by commit fails, a + # shallow fetch can not be performed because we do not know what the + # depth of the commit 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" + 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 + git -C "$gnulib_path" checkout "$GNULIB_REVISION" || cleanup_gnulib fi - mkdir -p "$gnulib_path" - # Only want a shallow checkout of $GNULIB_REVISION, but git does not - # support cloning by commit hash. So attempt a shallow fetch by commit - # hash to minimize the amount of data downloaded and changes needed to - # be processed, which can drastically reduce download and processing - # time for checkout. If the fetch by commit fails, a shallow fetch can - # not be performed because we do not know what the depth of the commit - # 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" 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 @@ -543,16 +574,15 @@ prepare_GNULIB_SRCDIR () if test -n "$GNULIB_REVISION"; then if test -d "$gnulib_path/.git"; then # The 'git checkout "$GNULIB_REVISION"' command succeeds if the - # GNULIB_REVISION is a commit hash that exists locally, or if it is - # branch name that can be fetched from origin. It fails, however, - # if the GNULIB_REVISION is a commit hash that only exists in - # origin. In this case, we need a 'git fetch' and then retry - # 'git checkout "$GNULIB_REVISION"'. - (cd "$gnulib_path" \ - && { git checkout "$GNULIB_REVISION" 2>/dev/null \ - || { git fetch origin && git checkout "$GNULIB_REVISION"; } - } - ) || exit $? + # GNULIB_REVISION is a commit hash that exists locally, or if it + # is a branch name that can be fetched from origin. It fails, + # however, if the GNULIB_REVISION is a commit hash that only + # exists in origin. In this case, we need a 'git fetch' and then + # retry 'git checkout "$GNULIB_REVISION"'. + git -C "$gnulib_path" checkout "$GNULIB_REVISION" 2>/dev/null \ + || { git -C "$gnulib_path" fetch origin \ + && git -C "$gnulib_path" checkout "$GNULIB_REVISION"; } \ + || exit $? else die "Error: GNULIB_REVISION is specified in bootstrap.conf," \ "but '$gnulib_path' contains no git history" @@ -682,7 +712,8 @@ Gnulib sources can be fetched in various ways: * 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. + 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. @@ -850,9 +881,7 @@ update_po_files() { && 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 + for po in x $(ls $ref_po_dir | sed -n 's/\.po$//p'); do case $po in x) continue;; esac new_po="$ref_po_dir/$po.po" cksum_file="$ref_po_dir/$po.s1" @@ -1216,6 +1245,20 @@ autogen() $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ || die "gnulib-tool failed" + if test $with_gettext = yes && test ! -f $m4_base/gettext.m4; then + # The gnulib-tool invocation has removed $m4_base/gettext.m4, that the + # AUTOPOINT invocation had installed. This can occur when the gnulib + # module 'gettext' was previously present but is now not present any more. + # Repeat the AUTOPOINT invocation and the gnulib-tool invocation. + + echo "$0: $AUTOPOINT --force" + $AUTOPOINT --force || return + + echo "$0: $gnulib_tool $gnulib_tool_options --import ..." + $gnulib_tool $gnulib_tool_options --import $gnulib_modules \ + || die "gnulib-tool failed" + fi + for file in $gnulib_files; do symlink_to_dir "$GNULIB_SRCDIR" $file \ || die "failed to symlink $file" @@ -1301,7 +1344,7 @@ autogen() || die 'cannot generate runtime-po/Makevars' # Copy identical files from po to runtime-po. - (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) + cp -p po/Makefile.in.in po/*-quot po/*.header po/*.sed po/*.sin runtime-po fi fi @@ -1313,7 +1356,7 @@ autogen() # ---------------------------------------------------------------------------- # Local Variables: -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "scriptlibversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" diff --git a/bootstrap.conf b/bootstrap.conf index 7db7dad7bd..19e3d83aa6 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -204,7 +204,7 @@ source_base="libgnu" # # See also: https://lists.gnu.org/archive/html/bug-gnulib/2020-08/msg00150.html -: ${GNULIB_REVISION=6213c5bd72d15ca5e1ea9c34122899e02fed448c} +: ${GNULIB_REVISION=72abb08f4495bf232736f4d13a24bced72a9c327} # Don't check for translations since we don't have any in Octave yet. # This avoids the need for sha1sum or compatible utility in bootstrap.