* top/bootstrap-funclib.sh (prepare_GNULIB_SRCDIR): Use GNULIB_REFDIR also when a submodule 'gnulib' is not configured. This greatly speeds up bootstrapping Octave when using ‘./bootstrap --gnulib-refdir=...’. * build-aux/bootstrap: Regenerate. --- ChangeLog | 9 ++++++ build-aux/bootstrap | 67 ++++++++++++++++++++++------------------ top/bootstrap-funclib.sh | 67 ++++++++++++++++++++++------------------ 3 files changed, 83 insertions(+), 60 deletions(-)
diff --git a/ChangeLog b/ChangeLog index 348fd1d27d..3f283978c3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2024-11-12 Paul Eggert <egg...@cs.ucla.edu> + + bootstrap: tune Octave bootstrap --gnulib-refdir + * top/bootstrap-funclib.sh (prepare_GNULIB_SRCDIR): + Use GNULIB_REFDIR also when a submodule 'gnulib' is not configured. + This greatly speeds up bootstrapping Octave when using + ‘./bootstrap --gnulib-refdir=...’. + * build-aux/bootstrap: Regenerate. + 2024-11-11 Paul Eggert <egg...@cs.ucla.edu> openat: port lowest-fd to native MS-Windows diff --git a/build-aux/bootstrap b/build-aux/bootstrap index 3758683da4..ca7cd84386 100755 --- a/build-aux/bootstrap +++ b/build-aux/bootstrap @@ -37,7 +37,7 @@ medir=`dirname "$me"` # A library of shell functions for autopull.sh, autogen.sh, and bootstrap. -scriptlibversion=2024-07-21.12; # UTC +scriptlibversion=2024-11-12.17; # UTC # Copyright (C) 2003-2024 Free Software Foundation, Inc. # @@ -545,38 +545,45 @@ prepare_GNULIB_SRCDIR () if test ! -d "$gnulib_path"; then # The subdirectory 'gnulib' does not yet exist. Clone into it. echo "$0: getting gnulib files..." - trap cleanup_gnulib HUP INT PIPE TERM - gnulib_url=${GNULIB_URL:-$default_gnulib_url} - 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 + if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then + # Use GNULIB_REFDIR as a reference. + git clone "$GNULIB_REFDIR" "$gnulib_path" || 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. + trap cleanup_gnulib HUP INT PIPE TERM + gnulib_url=${GNULIB_URL:-$default_gnulib_url} + 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 + (cd "$gnulib_path" && git 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" - 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 + trap - HUP INT PIPE TERM fi - trap - HUP INT PIPE TERM else # The subdirectory 'gnulib' already exists. if test -n "$GNULIB_REVISION"; then diff --git a/top/bootstrap-funclib.sh b/top/bootstrap-funclib.sh index b29e2b49e1..0d8b5a259d 100644 --- a/top/bootstrap-funclib.sh +++ b/top/bootstrap-funclib.sh @@ -1,6 +1,6 @@ # A library of shell functions for autopull.sh, autogen.sh, and bootstrap. -scriptlibversion=2024-07-21.12; # UTC +scriptlibversion=2024-11-12.17; # UTC # Copyright (C) 2003-2024 Free Software Foundation, Inc. # @@ -508,38 +508,45 @@ prepare_GNULIB_SRCDIR () if test ! -d "$gnulib_path"; then # The subdirectory 'gnulib' does not yet exist. Clone into it. echo "$0: getting gnulib files..." - trap cleanup_gnulib HUP INT PIPE TERM - gnulib_url=${GNULIB_URL:-$default_gnulib_url} - 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 + if test -n "$GNULIB_REFDIR" && test -d "$GNULIB_REFDIR"/.git; then + # Use GNULIB_REFDIR as a reference. + git clone "$GNULIB_REFDIR" "$gnulib_path" || 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. + trap cleanup_gnulib HUP INT PIPE TERM + gnulib_url=${GNULIB_URL:-$default_gnulib_url} + 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 + (cd "$gnulib_path" && git 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" - 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 + trap - HUP INT PIPE TERM fi - trap - HUP INT PIPE TERM else # The subdirectory 'gnulib' already exists. if test -n "$GNULIB_REVISION"; then -- 2.43.0