Hi (or hello :-)),

I've attached many patches mostly updating things according to more
modern gnulib & added syntax-checks.

I think most are obvious but feel free to ask for my reasoning for
things. :)

Collin

>From 1da6145e1b05bf4414a236adb3678db48a3b8b01 Mon Sep 17 00:00:00 2001
From: Collin Funk <[email protected]>
Date: Tue, 2 Jul 2024 16:49:47 -0700
Subject: [PATCH 1/9] maint: run 'make update-copyright'

* cfg.mk (old_NEWS_hash): Update hash of NEWS to reflect copyright
date change.
---
 AUTHORS                      | 2 +-
 ChangeLog.O                  | 2 +-
 Makefile.am                  | 2 +-
 NEWS                         | 2 +-
 README                       | 2 +-
 README-dev                   | 2 +-
 THANKS                       | 2 +-
 bootstrap                    | 2 +-
 bootstrap.conf               | 2 +-
 build-aux/git-version-gen    | 2 +-
 cfg.mk                       | 4 ++--
 configure.ac                 | 2 +-
 contrib/ChangeLog            | 2 +-
 contrib/de_franconian_po.txt | 2 +-
 contrib/evolution.txt        | 2 +-
 doc/ChangeLog                | 2 +-
 doc/hello.texi               | 2 +-
 doc/local.mk                 | 2 +-
 man/ChangeLog                | 2 +-
 po/ChangeLog                 | 2 +-
 po/POTFILES.in               | 2 +-
 src/ChangeLog                | 2 +-
 src/hello.c                  | 2 +-
 src/system.h                 | 2 +-
 tests/ChangeLog              | 2 +-
 tests/atexit-1               | 2 +-
 tests/greeting-1             | 2 +-
 tests/greeting-2             | 2 +-
 tests/hello-1                | 2 +-
 tests/last-1                 | 2 +-
 tests/operand-1              | 2 +-
 tests/traditional-1          | 2 +-
 32 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/AUTHORS b/AUTHORS
index 8622d4d..441e93d 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,6 +1,6 @@
 Authors of GNU Hello.
 
-  Copyright (C) 1999-2019 Free Software Foundation, Inc.
+  Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
   Copying and distribution of this file, with or without modification,
   are permitted in any medium without royalty provided the copyright
diff --git a/ChangeLog.O b/ChangeLog.O
index 702fd18..b5b5471 100644
--- a/ChangeLog.O
+++ b/ChangeLog.O
@@ -1104,7 +1104,7 @@ Sat Apr  1 00:27:19 1978  Brian Kernighan  (bwk at research)
 
 	* Initial version.
 
-Copyright 1993-2019 Free Software Foundation, Inc.
+Copyright 1993-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification, are
 permitted in any medium without royalty provided the copyright notice
diff --git a/Makefile.am b/Makefile.am
index b0549da..427910c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,7 +2,7 @@
 # and all subdirectories).
 # Makefile for the top-level directory of GNU hello.
 #
-# Copyright 1997-2019 Free Software Foundation, Inc.
+# Copyright 1997-2024 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
diff --git a/NEWS b/NEWS
index 4674f56..1b6da9d 100644
--- a/NEWS
+++ b/NEWS
@@ -130,6 +130,6 @@ Version 2.7 (28 March 2011)
 * There is now a `NEWS' file (this one), giving a history of
   user-visible changes.
 
- Copyright (C) 1992-2019 Free Software Foundation, Inc.
+ Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
 This file is distributed under the same license as the GNU hello package.
diff --git a/README b/README
index c20cc85..1b915ff 100644
--- a/README
+++ b/README
@@ -2,7 +2,7 @@ This is the README file for the GNU Hello distribution.
 Hello prints a friendly greeting.  It also serves as a sample GNU
 package, showing practices that may be useful for GNU projects.
 
-  Copyright (C) 1992-2019 Free Software Foundation, Inc.
+  Copyright (C) 1992-2024 Free Software Foundation, Inc.
 
   Copying and distribution of this file, with or without modification,
   are permitted in any medium without royalty provided the copyright
diff --git a/README-dev b/README-dev
index cb433ff..a4a3ce7 100644
--- a/README-dev
+++ b/README-dev
@@ -1,6 +1,6 @@
 This README.dev file describes the development environment.
 
-  Copyright (C) 2002-2019 Free Software Foundation, Inc.
+  Copyright (C) 2002-2024 Free Software Foundation, Inc.
 
   Copying and distribution of this file, with or without modification,
   are permitted in any medium without royalty provided the copyright
diff --git a/THANKS b/THANKS
index 771f5f9..a23d9df 100644
--- a/THANKS
+++ b/THANKS
@@ -1,6 +1,6 @@
 Additional contributors to GNU Hello.
 
-  Copyright (C) 1999-2019 Free Software Foundation, Inc.
+  Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
   Copying and distribution of this file, with or without modification,
   are permitted in any medium without royalty provided the copyright
diff --git a/bootstrap b/bootstrap
index 5f1b1b7..62cb6d8 100755
--- a/bootstrap
+++ b/bootstrap
@@ -4,7 +4,7 @@ scriptversion=2020-11-18.17; # UTC
 
 # Bootstrap this package from checked-out sources.
 
-# Copyright (C) 2003-2020 Free Software Foundation, Inc.
+# Copyright (C) 2003-2024 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
diff --git a/bootstrap.conf b/bootstrap.conf
index d688891..2f41186 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -1,6 +1,6 @@
 # Bootstrap configuration.
 
-# Copyright (C) 2006-2019 Free Software Foundation, Inc.
+# Copyright (C) 2006-2024 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
diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen
index 3b70097..2ad0851 100755
--- a/build-aux/git-version-gen
+++ b/build-aux/git-version-gen
@@ -2,7 +2,7 @@
 # Print a version string.
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 2007-2019 Free Software Foundation, Inc.
+# Copyright (C) 2007-2024 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
diff --git a/cfg.mk b/cfg.mk
index b460277..5a6decb 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -1,6 +1,6 @@
 # Configuration for maintainer-makefile
 #
-# Copyright (c) 2012-2019 Free Software Foundation, Inc.
+# Copyright (c) 2012-2024 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
@@ -20,7 +20,7 @@ gnulib_dir = $(GNULIB_SRCDIR)
 manual_title = GNU Hello
 
 # Set format of NEWS
-old_NEWS_hash := 7342db9e652ed0319651666d5dfaadaf
+old_NEWS_hash := 581402d29da29110c15fddec73e357cf
 
 update-copyright-env = \
   UPDATE_COPYRIGHT_FORCE=1 \
diff --git a/configure.ac b/configure.ac
index 9a76cb8..47ce07e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
-dnl Copyright (C) 2004-2019 Free Software Foundation, Inc.
+dnl Copyright (C) 2004-2024 Free Software Foundation, Inc.
 
 dnl This file is free software; as a special exception the author gives
 dnl unlimited permission to copy and/or distribute it, with or without
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 877893e..5a248ca 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -24,7 +24,7 @@
 
 	* Makefile.am: New file.
 
-Copyright (C) 1999-2019 Free Software Foundation, Inc.
+Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff --git a/contrib/de_franconian_po.txt b/contrib/de_franconian_po.txt
index 6415389..32bdb9d 100644
--- a/contrib/de_franconian_po.txt
+++ b/contrib/de_franconian_po.txt
@@ -4,7 +4,7 @@ dann humorvoll:
 ----------------------------------------------------------------------
 # German messages for GNU hello.
 # Fränkische Meldungen für GNU hello.
-# Copyright (C) 1998-2019 Free Software Foundation, Inc.
+# Copyright (C) 1998-2024 Free Software Foundation, Inc.
 # Karl Eichwalder <[email protected]>, 1996-97.
 # Karl Eichwalder <[email protected]>, 1998.
 # Uwe Seifert, 2000 (translation german » franconian)
diff --git a/contrib/evolution.txt b/contrib/evolution.txt
index 9aef7ad..78c8ab1 100644
--- a/contrib/evolution.txt
+++ b/contrib/evolution.txt
@@ -1,4 +1,4 @@
-Copyright (C) 1994-2019 Free Software Foundation, Inc.
+Copyright (C) 1994-2024 Free Software Foundation, Inc.
 
 This file is distributed under the same license as the GNU hello package.
 
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 7908537..39b5552 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -172,7 +172,7 @@ Tue Dec 19 08:26:09 1995  Karl Eichwalder  <[email protected]>
 
 	* Makefile.in, version.texi: New file.
 
-Copyright 1995-2019 Free Software Foundation, Inc.
+Copyright 1995-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff --git a/doc/hello.texi b/doc/hello.texi
index c6a283f..8448a9e 100644
--- a/doc/hello.texi
+++ b/doc/hello.texi
@@ -15,7 +15,7 @@
 This manual is for GNU Hello (version @value{VERSION}, @value{UPDATED}),
 which prints a friendly greeting (and serves as an example GNU package).
 
-Copyright @copyright{} 1992-2022 Free Software Foundation, Inc.
+Copyright @copyright{} 1992--2024 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/doc/local.mk b/doc/local.mk
index d38f2de..b2785ba 100644
--- a/doc/local.mk
+++ b/doc/local.mk
@@ -1,7 +1,7 @@
 # Make hello documentation.				-*-Makefile-*-
 # This is included by the top-level Makefile.am.
 
-# Copyright (C) 1995-2023 Free Software Foundation, Inc.
+# Copyright (C) 1995-2024 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
diff --git a/man/ChangeLog b/man/ChangeLog
index 206f25b..4f1598a 100644
--- a/man/ChangeLog
+++ b/man/ChangeLog
@@ -58,7 +58,7 @@
 	* Makefile.am: New file; filled with template information from the
 	textutils package.
 
-Copyright (C) 1999-2019 Free Software Foundation, Inc.
+Copyright (C) 1999-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff --git a/po/ChangeLog b/po/ChangeLog
index 9c61e8c..51a6b44 100644
--- a/po/ChangeLog
+++ b/po/ChangeLog
@@ -572,7 +572,7 @@ Fri Dec 15 11:59:51 1995  Karl Eichwalder  <[email protected]>
 	* POTFILES.in: New file.  Lists `getopt.c', `getopt1.c',
 	`hello.c', and `version.c'.
 
-Copyright (C) 1995-2019 Free Software Foundation, Inc.
+Copyright (C) 1995-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 520921d..41fb6ac 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,4 +1,4 @@
-# Copyright (C) 2005-2019 Free Software Foundation, Inc.
+# Copyright (C) 2005-2024 Free Software Foundation, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
diff --git a/src/ChangeLog b/src/ChangeLog
index 7127715..8eefeea 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -348,7 +348,7 @@ Tue Dec 19 08:26:09 1995  Karl Eichwalder  <[email protected]>
 
 	* Makefile.in: New file.
 
-Copyright 1995-2019 Free Software Foundation, Inc.
+Copyright 1995-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff --git a/src/hello.c b/src/hello.c
index 2e7d38e..fd6cd6e 100644
--- a/src/hello.c
+++ b/src/hello.c
@@ -1,6 +1,6 @@
 /* hello.c -- print a greeting message and exit.
 
-   Copyright 1992-2019 Free Software Foundation, Inc.
+   Copyright 1992-2024 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
diff --git a/src/system.h b/src/system.h
index d39cdb9..7246460 100644
--- a/src/system.h
+++ b/src/system.h
@@ -1,6 +1,6 @@
 /* system.h: system-dependent declarations; include this first.
 
-   Copyright 1996-2019 Free Software Foundation, Inc.
+   Copyright 1996-2024 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
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 14960fd..3584bc0 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -46,7 +46,7 @@ Mon Dec 30 17:29:37 1996  Karl Eichwalder  <[email protected]>
 
 	* testdata: Copied from `../src/'.
 
-Copyright 1996-2019 Free Software Foundation, Inc.
+Copyright 1996-2024 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff --git a/tests/atexit-1 b/tests/atexit-1
index 4b055d7..ac961b8 100755
--- a/tests/atexit-1
+++ b/tests/atexit-1
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Test atexit handling.
 #
-# Copyright (C) 2019-2022 Free Software Foundation, Inc.
+# Copyright (C) 2019-2024 Free Software Foundation, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
diff --git a/tests/greeting-1 b/tests/greeting-1
index 484f037..0e4793a 100755
--- a/tests/greeting-1
+++ b/tests/greeting-1
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Test arbitrary --greeting.
 #
-# Copyright (C) 2001-2019 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
diff --git a/tests/greeting-2 b/tests/greeting-2
index b07fdf5..b04ca59 100755
--- a/tests/greeting-2
+++ b/tests/greeting-2
@@ -2,7 +2,7 @@
 # Test very long --greeting argument, and also show skipping a test.
 # (And one way to compute full moons.)
 #
-# Copyright (C) 2001-2019 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
diff --git a/tests/hello-1 b/tests/hello-1
index 96ffef8..cef734f 100755
--- a/tests/hello-1
+++ b/tests/hello-1
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Test standard GNU greeting.
 #
-# Copyright (C) 2001-2019 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
diff --git a/tests/last-1 b/tests/last-1
index 55dd56e..0f5fd19 100755
--- a/tests/last-1
+++ b/tests/last-1
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Test that last greeting option specified is what counts.
 #
-# Copyright 2008-2019 Free Software Foundation, Inc.
+# Copyright 2008-2024 Free Software Foundation, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
diff --git a/tests/operand-1 b/tests/operand-1
index a777600..bce5723 100755
--- a/tests/operand-1
+++ b/tests/operand-1
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Test extra operands fail correct way.
 #
-# Copyright (C) 2019 Free Software Foundation, Inc.
+# Copyright (C) 2019-2024 Free Software Foundation, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
diff --git a/tests/traditional-1 b/tests/traditional-1
index a2b68f3..a7fee62 100755
--- a/tests/traditional-1
+++ b/tests/traditional-1
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Test traditional greeting.
 #
-# Copyright (C) 2001-2019 Free Software Foundation, Inc.
+# Copyright (C) 2001-2024 Free Software Foundation, Inc.
 #
 # Copying and distribution of this file, with or without modification,
 # are permitted in any medium without royalty provided the copyright
-- 
2.45.2

>From d0a290d1b6a3a591559e52f930cf7ee2eff3986f Mon Sep 17 00:00:00 2001
From: Collin Funk <[email protected]>
Date: Tue, 2 Jul 2024 16:59:41 -0700
Subject: [PATCH 2/9] build: update gnulib submodule to latest

---
 gnulib | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gnulib b/gnulib
index f00af4b..50f95b4 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit f00af4baf2c7416c5d7c4674c072ef2a51e40668
+Subproject commit 50f95b448151c1e1695fca2f67cb7991b57e874b
-- 
2.45.2

>From ee4b9334bc404ffe3964ba5cd2052bbef3d71989 Mon Sep 17 00:00:00 2001
From: Collin Funk <[email protected]>
Date: Tue, 2 Jul 2024 17:00:51 -0700
Subject: [PATCH 3/9] maint: sync latest bootstrap from gnulib

---
 bootstrap | 1627 ++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 1055 insertions(+), 572 deletions(-)

diff --git a/bootstrap b/bootstrap
index 62cb6d8..ac9433e 100755
--- a/bootstrap
+++ b/bootstrap
@@ -1,34 +1,67 @@
 #! /bin/sh
-# Print a version string.
-scriptversion=2020-11-18.17; # UTC
+# DO NOT EDIT! GENERATED AUTOMATICALLY!
 
 # Bootstrap this package from checked-out sources.
 
-# Copyright (C) 2003-2024 Free Software Foundation, Inc.
+scriptversion=2024-04-13.15; # UTC
 
+# Copyright (C) 2003-2024 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 [email protected].
+
+me="$0"
+medir=`dirname "$me"`
+
+# Read the function library and the configuration.
+
+# A library of shell functions for autopull.sh, autogen.sh, and bootstrap.
+
+scriptlibversion=2024-06-29.23; # UTC
 
+# Copyright (C) 2003-2024 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/bootstrap in gnulib, however, to
-# be useful to your project, you should place a copy of it under
-# version control in the top-level directory of your project.  The
+# script is maintained as top/bootstrap-funclib.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.
 
-# Please report bugs or propose patches to [email protected].
-
 nl='
 '
 
@@ -36,84 +69,17 @@ nl='
 LC_ALL=C
 export LC_ALL
 
-# 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
-
-local_gl_dir=gl
-
 # Honor $PERL, but work even if there is none.
 PERL="${PERL-perl}"
 
-me=$0
-
-default_gnulib_url=git://git.sv.gnu.org/gnulib
-
-usage() {
-  cat <<EOF
-Usage: $me [OPTION]...
-Bootstrap this package from the checked-out sources.
-
-Options:
- --gnulib-srcdir=DIRNAME  specify 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.  Defaults to \$GNULIB_SRCDIR
- --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
-                          --gnulib-srcdir point to a correct gnulib snapshot
- --skip-po                do not download po files
-EOF
-  bootstrap_print_option_usage_hook
-  cat <<EOF
-If the file $me.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 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_SRCDIR is set (directly or via
-   --gnulib-srcdir) and is a git repository, then it is used as a reference.
-
- * Otherwise, if \$GNULIB_SRCDIR is set (directly or via --gnulib-srcdir),
-   then sources are fetched from that local directory.  If it is a git
-   repository and \$GNULIB_REVISION is set, 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.
-
- * 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_REVISION is set, then that revision is checked out.
-
- * Otherwise, the existing Gnulib sources in the 'gnulib' directory are
-   used.  If it is a git repository and \$GNULIB_REVISION is set, 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 $me.conf.
+default_gnulib_url=https://git.savannah.gnu.org/git/gnulib.git
 
-Running without arguments will suffice in most cases.
-EOF
-}
+# Copyright year, for the --version output.
+copyright_year=`echo "$scriptlibversion" | sed -e 's/[^0-9].*//'`
+copyright="Copyright (C) ${copyright_year} Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law."
 
 # warnf_ FORMAT-STRING ARG1...
 warnf_ ()
@@ -142,9 +108,13 @@ warn_ ()
 # die WORD1...
 die() { warn_ "$@"; exit 1; }
 
-# Configuration.
+# ------------------------------ Configuration. ------------------------------
+
+# Directory that contains package-specific gnulib modules and/or overrides.
+local_gl_dir=gl
 
 # Name of the Makefile.am
+# XXX Not used.
 gnulib_mk=gnulib.mk
 
 # List of gnulib modules needed.
@@ -153,21 +123,20 @@ gnulib_modules=
 # Any gnulib files needed that are not in modules.
 gnulib_files=
 
-: ${AUTOPOINT=autopoint}
-: ${AUTORECONF=autoreconf}
-
 # A function to be called for each unrecognized option.  Returns 0 if
 # the option in $1 has been processed by the function.  Returns 1 if
 # the option has not been processed by the function.  Override it via
 # your own definition in bootstrap.conf
-
 bootstrap_option_hook() { return 1; }
 
 # A function to be called in order to print the --help information
 # corresponding to user-defined command-line options.
-
 bootstrap_print_option_usage_hook() { :; }
 
+# A function to be called at the end of autopull.sh.
+# Override it via your own definition in bootstrap.conf.
+bootstrap_post_pull_hook() { :; }
+
 # A function to be called right after gnulib-tool is run.
 # Override it via your own definition in bootstrap.conf.
 bootstrap_post_import_hook() { :; }
@@ -184,7 +153,7 @@ po_download_command_format=\
  https://translationproject.org/latest/%s/";
 
 # Prefer a non-empty tarname (4th argument of AC_INIT if given), else
-# fall back to the package name (1st argument with munging)
+# fall back to the package name (1st argument with munging).
 extract_package_name='
   /^AC_INIT(\[*/{
      s///
@@ -201,8 +170,11 @@ extract_package_name='
      p
   }
 '
-package=$(sed -n "$extract_package_name" configure.ac) \
-  || die 'cannot find package name in configure.ac'
+package=$(${AUTOCONF:-autoconf} --trace AC_INIT:\$4 configure.ac 2>/dev/null)
+if test -z "$package"; then
+  package=$(sed -n "$extract_package_name" configure.ac) \
+      || die 'cannot find package name in configure.ac'
+fi
 gnulib_name=lib$package
 
 build_aux=build-aux
@@ -238,15 +210,13 @@ COPYRIGHT_HOLDER='Free Software Foundation, Inc.'
 [email protected]
 
 # Files we don't want to import.
+# XXX Not used.
 excluded_files=
 
 # File that should exist in the top directory of a checked out hierarchy,
 # but not in a distribution tarball.
 checkout_only_file=README-hacking
 
-# Whether to use copies instead of symlinks.
-copy=false
-
 # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
 # those files to be generated in directories like lib/, m4/, and po/.
 # Or set it to 'auto' to make this script select which to use based
@@ -257,8 +227,13 @@ vc_ignore=auto
 # default.
 bootstrap_sync=false
 
-# Use git to update gnulib sources
-use_git=true
+# Override the default configuration, if necessary.
+# Make sure that bootstrap.conf is sourced from the current directory
+# if we were invoked as "sh bootstrap".
+conffile=`dirname "$me"`/bootstrap.conf
+test -r "$conffile" && . "$conffile"
+
+# ------------------------- Build-time prerequisites -------------------------
 
 check_exists() {
   if test "$1" = "--verbose"; then
@@ -275,151 +250,6 @@ check_exists() {
   test $? -lt 126
 }
 
-# find_tool ENVVAR NAMES...
-# -------------------------
-# Search for a required program.  Use the value of ENVVAR, if set,
-# otherwise find the first of the NAMES that can be run.
-# If found, set ENVVAR to the program name, die otherwise.
-#
-# FIXME: code duplication, see also gnu-web-doc-update.
-find_tool ()
-{
-  find_tool_envvar=$1
-  shift
-  find_tool_names=$@
-  eval "find_tool_res=\$$find_tool_envvar"
-  if test x"$find_tool_res" = x; then
-    for i; do
-      if check_exists $i; then
-        find_tool_res=$i
-        break
-      fi
-    done
-  fi
-  if test x"$find_tool_res" = x; then
-    warn_ "one of these is required: $find_tool_names;"
-    die   "alternatively set $find_tool_envvar to a compatible tool"
-  fi
-  eval "$find_tool_envvar=\$find_tool_res"
-  eval "export $find_tool_envvar"
-}
-
-# Override the default configuration, if necessary.
-# Make sure that bootstrap.conf is sourced from the current directory
-# if we were invoked as "sh bootstrap".
-case "$0" in
-  */*) test -r "$0.conf" && . "$0.conf" ;;
-  *) test -r "$0.conf" && . ./"$0.conf" ;;
-esac
-
-if test "$vc_ignore" = auto; then
-  vc_ignore=
-  test -d .git && vc_ignore=.gitignore
-  test -d CVS && vc_ignore="$vc_ignore .cvsignore"
-fi
-
-if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then
-  use_gnulib=false
-else
-  use_gnulib=true
-fi
-
-# Translate configuration into internal form.
-
-# Parse options.
-
-for option
-do
-  case $option in
-  --help)
-    usage
-    exit;;
-  --gnulib-srcdir=*)
-    GNULIB_SRCDIR=${option#--gnulib-srcdir=};;
-  --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
-
-$use_git || test -d "$GNULIB_SRCDIR" \
-  || die "Error: --no-git requires --gnulib-srcdir"
-
-if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
-  die "Bootstrapping from a non-checked-out distribution is risky."
-fi
-
-# Strip blank and comment lines to leave significant entries.
-gitignore_entries() {
-  sed '/^#/d; /^$/d' "$@"
-}
-
-# If $STR is not already on a line by itself in $FILE, insert it at the start.
-# Entries are inserted at the start of the ignore list to ensure existing
-# entries starting with ! are not overridden.  Such entries support
-# whitelisting exceptions after a more generic blacklist pattern.
-insert_if_absent() {
-  file=$1
-  str=$2
-  test -f $file || touch $file
-  test -r $file || die "Error: failed to read ignore file: $file"
-  duplicate_entries=$(gitignore_entries $file | sort | uniq -d)
-  if [ "$duplicate_entries" ] ; then
-    die "Error: Duplicate entries in $file: " $duplicate_entries
-  fi
-  linesold=$(gitignore_entries $file | wc -l)
-  linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l)
-  if [ $linesold != $linesnew ] ; then
-    { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \
-      || die "insert_if_absent $file $str: failed"
-  fi
-}
-
-# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
-# insert_if_absent.
-insert_vc_ignore() {
-  vc_ignore_file="$1"
-  pattern="$2"
-  case $vc_ignore_file in
-  *.gitignore)
-    # A .gitignore entry that does not start with '/' applies
-    # recursively to subdirectories, so prepend '/' to every
-    # .gitignore entry.
-    pattern=$(echo "$pattern" | sed s,^,/,);;
-  esac
-  insert_if_absent "$vc_ignore_file" "$pattern"
-}
-
-# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
-found_aux_dir=no
-grep '^[	 ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
-    >/dev/null && found_aux_dir=yes
-grep '^[	 ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
-    >/dev/null && found_aux_dir=yes
-test $found_aux_dir = yes \
-  || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it"
-
-# If $build_aux doesn't exist, create it now, otherwise some bits
-# below will malfunction.  If creating it, also mark it as ignored.
-if test ! -d $build_aux; then
-  mkdir $build_aux
-  for dot_ig in x $vc_ignore; do
-    test $dot_ig = x && continue
-    insert_vc_ignore $dot_ig $build_aux
-  done
-fi
-
 # Note this deviates from the version comparison in automake
 # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
 # but this should suffice as we won't be specifying old
@@ -447,7 +277,7 @@ sort_ver() { # sort -V is not generally available
       elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison
         echo "$1 $2"
       else # numeric, then lexicographic comparison
-        lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1)
+        lp=$(printf "%s\n%s\n" "$p1" "$p2" | LANG=C sort -n | tail -n1)
         if [ "$lp" = "$p2" ]; then
           echo "$1 $2"
         else
@@ -494,9 +324,9 @@ check_versions() {
     if test "$app" = libtool; then
       app=libtoolize
     fi
-    # Exempt git if --no-git is in effect.
+    # Exempt git if git is not needed.
     if test "$app" = git; then
-      $use_git || continue
+      $check_git || continue
     fi
     # Honor $APP variables ($TAR, $AUTOCONF, etc.)
     appvar=$(echo $app | LC_ALL=C tr '[a-z]-' '[A-Z]_')
@@ -510,7 +340,7 @@ check_versions() {
     # Handle the still-experimental Automake-NG programs specially.
     # They remain named as the mainstream Automake programs ("automake",
     # and "aclocal") to avoid gratuitous incompatibilities with
-    # pre-existing usages (by, say, autoreconf, or custom autogen.sh
+    # preexisting usages (by, say, autoreconf, or custom autogen.sh
     # scripts), but correctly identify themselves (as being part of
     # "GNU automake-ng") when asked their version.
     case $app in
@@ -569,81 +399,86 @@ print_versions() {
   # can't depend on column -t
 }
 
-# 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
-
-use_libtool=0
-# We'd like to use grep -E, to see if any of LT_INIT,
-# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
-# but that's not portable enough (e.g., for Solaris).
-grep '^[	 ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
-  && use_libtool=1
-grep '^[	 ]*LT_INIT' configure.ac >/dev/null \
-  && use_libtool=1
-if test $use_libtool = 1; then
-  find_tool LIBTOOLIZE glibtoolize libtoolize
-fi
+# check_build_prerequisites check_git
+check_build_prerequisites()
+{
+  check_git="$1"
 
-# gnulib-tool requires at least automake and autoconf.
-# If either is not listed, add it (with minimum version) as a prerequisite.
-case $buildreq in
-  *automake*) ;;
-  *) buildreq="automake 1.9
-$buildreq" ;;
-esac
-case $buildreq in
-  *autoconf*) ;;
-  *) buildreq="autoconf 2.59
+  # gnulib-tool requires at least automake and autoconf.
+  # If either is not listed, add it (with minimum version) as a prerequisite.
+  case $buildreq in
+    *automake*) ;;
+    *) buildreq="automake 1.9
 $buildreq" ;;
-esac
-
-# When we can deduce that gnulib-tool will require patch,
-# and when patch is not already listed as a prerequisite, add it, too.
-if test -d "$local_gl_dir" \
-    && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then
+  esac
   case $buildreq in
-    *patch*) ;;
-    *) buildreq="patch -
+    *autoconf*) ;;
+    *) buildreq="autoconf 2.59
 $buildreq" ;;
   esac
-fi
 
-if ! printf "$buildreq" | check_versions; then
-  echo >&2
-  if test -f README-prereq; then
-    die "See README-prereq for how to get the prerequisite programs"
-  else
-    die "Please install the prerequisite programs"
+  # When we can deduce that gnulib-tool will require patch,
+  # and when patch is not already listed as a prerequisite, add it, too.
+  if test -d "$local_gl_dir" \
+     && ! find "$local_gl_dir" -name '*.diff' -exec false {} +; then
+    case $buildreq in
+      *patch*) ;;
+      *) buildreq="patch -
+$buildreq" ;;
+    esac
   fi
-fi
 
-# Warn the user if autom4te appears to be broken; this causes known
-# issues with at least gettext 0.18.3.
-probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -)
-if test "x$probe" != xhi; then
-  warn_ "WARNING: your autom4te wrapper eats stdin;"
-  warn_ "if bootstrap fails, consider upgrading your autotools"
-fi
+  if ! printf '%s' "$buildreq" | check_versions; then
+    echo >&2
+    if test -f README-prereq; then
+      die "See README-prereq for how to get the prerequisite programs"
+    else
+      die "Please install the prerequisite programs"
+    fi
+  fi
 
-echo "$0: Bootstrapping from checked-out $package sources..."
+  # Warn the user if autom4te appears to be broken; this causes known
+  # issues with at least gettext 0.18.3.
+  probe=$(echo 'm4_quote([hi])' | autom4te -l M4sugar -t 'm4_quote:$%' -)
+  if test "x$probe" != xhi; then
+    warn_ "WARNING: your autom4te wrapper eats stdin;"
+    warn_ "if bootstrap fails, consider upgrading your autotools"
+  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"
+# find_tool ENVVAR NAMES...
+# -------------------------
+# Search for a required program.  Use the value of ENVVAR, if set,
+# otherwise find the first of the NAMES that can be run.
+# If found, set ENVVAR to the program name, die otherwise.
+#
+# FIXME: code duplication, see also gnu-web-doc-update.
+find_tool ()
+{
+  find_tool_envvar=$1
+  shift
+  find_tool_names=$@
+  eval "find_tool_res=\$$find_tool_envvar"
+  if test x"$find_tool_res" = x; then
+    for i; do
+      if check_exists $i; then
+        find_tool_res=$i
+        break
+      fi
+    done
   fi
-fi
+  if test x"$find_tool_res" = x; then
+    warn_ "one of these is required: $find_tool_names;"
+    die   "alternatively set $find_tool_envvar to a compatible tool"
+  fi
+  eval "$find_tool_envvar=\$find_tool_res"
+  eval "export $find_tool_envvar"
+}
 
+# --------------------- 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=$?
   rm -fr "$gnulib_path"
@@ -654,95 +489,378 @@ git_modules_config () {
   test -f .gitmodules && git config --file .gitmodules "$@"
 }
 
-if $use_gnulib; then
-  if $use_git; then
-    gnulib_path=$(git_modules_config submodule.gnulib.path)
-    test -z "$gnulib_path" && gnulib_path=gnulib
-  fi
-
-  # Get gnulib files.  Populate $GNULIB_SRCDIR, possibly updating a
-  # submodule, for use in the rest of the script.
-
-  case ${GNULIB_SRCDIR--} in
-  -)
-    # Note that $use_git is necessarily true in this case.
-    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 $?
-
-    elif [ ! -d "$gnulib_path" ]; then
-      echo "$0: getting gnulib files..."
-
-      trap cleanup_gnulib 1 2 13 15
-
-      shallow=
-      if test -z "$GNULIB_REVISION"; then
-        git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2'
-      fi
-      git clone $shallow ${GNULIB_URL:-$default_gnulib_url} "$gnulib_path" \
-        || cleanup_gnulib
-
-      trap - 1 2 13 15
+prepare_GNULIB_SRCDIR ()
+{
+  if test -n "$GNULIB_SRCDIR"; then
+    # Use GNULIB_SRCDIR directly.
+    # We already checked that $GNULIB_SRCDIR references a directory.
+    # Verify that it contains a gnulib checkout.
+    test -f "$GNULIB_SRCDIR/gnulib-tool" \
+      || die "Error: --gnulib-srcdir or \$GNULIB_SRCDIR is specified," \
+             "but does not contain gnulib-tool"
+    if test -n "$GNULIB_REVISION" && $use_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_SRCDIR" \
+       && { git checkout "$GNULIB_REVISION" 2>/dev/null \
+            || { git fetch origin && git checkout "$GNULIB_REVISION"; }
+          }
+      ) || exit $?
     fi
-    GNULIB_SRCDIR=$gnulib_path
-    ;;
-  *)
-    # Use GNULIB_SRCDIR directly or as a reference.
-    if $use_git && test -d "$GNULIB_SRCDIR"/.git && \
-          git_modules_config submodule.gnulib.url >/dev/null; then
-      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_SRCDIR" \
-          "$gnulib_path" || exit $?
+  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)
+    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_SRCDIR" \
-            "$(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_path='gnulib'
+      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
+        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
+        trap - HUP INT PIPE TERM
+      else
+        # The subdirectory 'gnulib' already exists.
+        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 $?
+          else
+            die "Error: GNULIB_REVISION is specified in bootstrap.conf," \
+                "but '$gnulib_path' contains no git history"
+          fi
         fi
       fi
-      GNULIB_SRCDIR=$gnulib_path
     fi
-    ;;
-  esac
-
-  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
+    # 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," \
+             "but does not contain gnulib-tool"
+    GNULIB_SRCDIR=$gnulib_path
   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.
+}
 
-  if $bootstrap_sync; then
-    cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || {
-      echo "$0: updating bootstrap and restarting..."
-      case $(sh -c 'echo "$1"' -- a) in
-        a) ignored=--;;
-        *) ignored=ignored;;
-      esac
-      exec sh -c \
-        'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \
-        $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \
-        "$0" "$@" --no-bootstrap-sync
+# -------- Upgrading bootstrap to the version found in GNULIB_SRCDIR. --------
+
+upgrade_bootstrap ()
+{
+  if test -f "$medir"/bootstrap-funclib.sh; then
+    update_lib=true
+    { cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/top/bootstrap" \
+      && cmp -s "$medir"/bootstrap-funclib.sh \
+                "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" \
+      && cmp -s "$medir"/autopull.sh "$GNULIB_SRCDIR/top/autopull.sh" \
+      && cmp -s "$medir"/autogen.sh "$GNULIB_SRCDIR/top/autogen.sh"; \
     }
-  fi
+  else
+    update_lib=false
+    cmp -s "$medir"/bootstrap "$GNULIB_SRCDIR/build-aux/bootstrap"
+  fi || {
+    if $update_lib; then
+      echo "$0: updating bootstrap & companions and restarting..."
+    else
+      echo "$0: updating bootstrap and restarting..."
+    fi
+    case $(sh -c 'echo "$1"' -- a) in
+      a) ignored=--;;
+      *) ignored=ignored;;
+    esac
+    u=$update_lib
+    exec sh -c \
+      '{ if '$u' && test -f "$1"; then cp "$1" "$3"; else cp "$2" "$3"; fi; } &&
+       { if '$u' && test -f "$4"; then cp "$4" "$5"; else rm -f "$5"; fi; } &&
+       { if '$u' && test -f "$6"; then cp "$6" "$7"; else rm -f "$7"; fi; } &&
+       { if '$u' && test -f "$8"; then cp "$8" "$9"; else rm -f "$9"; fi; } &&
+       shift && shift && shift && shift && shift &&
+       shift && shift && shift && shift &&
+       exec "${CONFIG_SHELL-/bin/sh}" "$@"' \
+      $ignored \
+      "$GNULIB_SRCDIR/top/bootstrap" "$GNULIB_SRCDIR/build-aux/bootstrap" \
+      "$medir/bootstrap" \
+      "$GNULIB_SRCDIR/top/bootstrap-funclib.sh" "$medir/bootstrap-funclib.sh" \
+      "$GNULIB_SRCDIR/top/autopull.sh" "$medir/autopull.sh" \
+      "$GNULIB_SRCDIR/top/autogen.sh" "$medir/autogen.sh" \
+      "$0" "$@" --no-bootstrap-sync
+  }
+}
+
+# ----------------------------------------------------------------------------
 
-  gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
-  <$gnulib_tool || exit $?
+if test x"$gnulib_modules$gnulib_files$gnulib_extra_files" = x; then
+  use_gnulib=false
+else
+  use_gnulib=true
 fi
 
-# Get translations.
+# -------- Fetch auxiliary files from the network.  --------------------------
+
+autopull_usage() {
+  cat <<EOF
+Usage: $me [OPTION]...
+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
+                           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               URL of the gnulib repository.  The default is
+                           $default_gnulib_url,
+                           which is Gnulib's upstream 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 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, 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 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
+   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
+}
+
+# Fetch auxiliary files that are omitted from the version control
+# repository of this package.
+autopull()
+{
+  # 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
+
+  # Parse options.
+
+  # Use git to update gnulib sources
+  use_git=true
+
+  for option
+  do
+    case $option in
+    --help)
+      autopull_usage
+      return;;
+    --version)
+      set -e
+      echo "autopull.sh $scriptlibversion"
+      echo "$copyright"
+      return 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
+
+  case $SKIP_PO in
+  '')
+    if test -d po; then
+      update_po_files po $package || return
+    fi
+
+    if test -d runtime-po; then
+      update_po_files runtime-po $package-runtime || return
+    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
+      uninit_comma=`echo "$uninitialized" | tr '\n' ',' | sed -e 's|,$|.|'`
+      die "Some git submodules are not initialized: "$uninit_comma \
+          "Either use option '--no-git'," \
+          "or run 'git submodule update --init' and bootstrap again."
+    fi
+  fi
+
+  if test -f "$medir"/autogen.sh; then
+    echo "$0: done.  Now you can run '$medir/autogen.sh'."
+  fi
+}
+
+# ----------------------------- Get translations. -----------------------------
 
 download_po_files() {
   subdir=$1
@@ -787,16 +905,99 @@ update_po_files() {
   done
 }
 
-case $SKIP_PO in
-'')
-  if test -d po; then
-    update_po_files po $package || exit
+# -------- Generate files automatically from existing sources.  --------------
+
+autogen_usage() {
+  cat <<EOF
+Usage: $me [OPTION]...
+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
+                           sources reside.  Use this if you already
+                           have gnulib sources on your machine, and
+                           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.
+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 are assumed to be present:
+  * in \$GNULIB_SRCDIR, if that environment variable is set,
+  * otherwise, in the 'gnulib' submodule, if such a submodule is configured,
+  * otherwise, in the 'gnulib' subdirectory.
+
+Running without arguments will suffice in most cases.
+EOF
+}
+
+
+version_controlled_file() {
+  parent=$1
+  file=$2
+  if test -d .git; then
+    git rm -n "$file" > /dev/null 2>&1
+  elif test -d .svn; then
+    svn log -r HEAD "$file" > /dev/null 2>&1
+  elif test -d CVS; then
+    grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null |
+             grep '^/[^/]*/[0-9]' > /dev/null
+  else
+    warn_ "no version control for $file?"
+    false
   fi
+}
 
-  if test -d runtime-po; then
-    update_po_files runtime-po $package-runtime || exit
-  fi;;
-esac
+# Strip blank and comment lines to leave significant entries.
+gitignore_entries() {
+  sed '/^#/d; /^$/d' "$@"
+}
+
+# If $STR is not already on a line by itself in $FILE, insert it at the start.
+# Entries are inserted at the start of the ignore list to ensure existing
+# entries starting with ! are not overridden.  Such entries support
+# whitelisting exceptions after a more generic blacklist pattern.
+insert_if_absent() {
+  file=$1
+  str=$2
+  test -f $file || touch $file
+  test -r $file || die "Error: failed to read ignore file: $file"
+  duplicate_entries=$(gitignore_entries $file | sort | uniq -d)
+  if [ "$duplicate_entries" ] ; then
+    die "Error: Duplicate entries in $file: " $duplicate_entries
+  fi
+  linesold=$(gitignore_entries $file | wc -l)
+  linesnew=$( { echo "$str"; cat $file; } | gitignore_entries | sort -u | wc -l)
+  if [ $linesold != $linesnew ] ; then
+    { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \
+      || die "insert_if_absent $file $str: failed"
+  fi
+}
+
+# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
+# insert_if_absent.
+insert_vc_ignore() {
+  vc_ignore_file="$1"
+  pattern="$2"
+  case $vc_ignore_file in
+  *.gitignore)
+    # A .gitignore entry that does not start with '/' applies
+    # recursively to subdirectories, so prepend '/' to every
+    # .gitignore entry.
+    pattern=$(echo "$pattern" | sed s,^,/,);;
+  esac
+  insert_if_absent "$vc_ignore_file" "$pattern"
+}
 
 symlink_to_dir()
 {
@@ -818,7 +1019,7 @@ symlink_to_dir()
       for dot_ig in x $vc_ignore; do
         test $dot_ig = x && continue
         ig=$parent/$dot_ig
-        insert_vc_ignore $ig "${dst_dir##*/}"
+        insert_vc_ignore $ig "${dst_dir##*/}/"
       done
     fi
 
@@ -867,218 +1068,500 @@ symlink_to_dir()
   }
 }
 
-version_controlled_file() {
-  parent=$1
-  file=$2
-  if test -d .git; then
-    git rm -n "$file" > /dev/null 2>&1
-  elif test -d .svn; then
-    svn log -r HEAD "$file" > /dev/null 2>&1
-  elif test -d CVS; then
-    grep -F "/${file##*/}/" "$parent/CVS/Entries" 2>/dev/null |
-             grep '^/[^/]*/[0-9]' > /dev/null
-  else
-    warn_ "no version control for $file?"
-    false
+# Regenerate all autogeneratable files that are omitted from the
+# version control repository.  In particular, regenerate all
+# aclocal.m4, config.h.in, Makefile.in, configure files with new
+# versions of autoconf or automake.
+autogen()
+{
+  # 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
+
+  # Environment variables that may be set by the user.
+  : "${AUTOPOINT=autopoint}"
+  : "${AUTORECONF=autoreconf}"
+
+  if test "$vc_ignore" = auto; then
+    vc_ignore=
+    test -d .git && vc_ignore=.gitignore
+    test -d CVS && vc_ignore="$vc_ignore .cvsignore"
   fi
-}
 
-# NOTE: we have to be careful to run both autopoint and libtoolize
-# before gnulib-tool, since gnulib-tool is likely to provide newer
-# versions of files "installed" by these two programs.
-# Then, *after* gnulib-tool (see below), we have to be careful to
-# run autoreconf in such a way that it does not run either of these
-# two just-pre-run programs.
 
-# Import from gettext.
-with_gettext=yes
-grep '^[	 ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
-    with_gettext=no
+  # Parse options.
+
+  # Whether to use copies instead of symlinks.
+  copy=false
+
+  for option
+  do
+    case $option in
+    --help)
+      autogen_usage
+      return;;
+    --version)
+      set -e
+      echo "autogen.sh $scriptlibversion"
+      echo "$copyright"
+      return 0
+      ;;
+    --force)
+      checkout_only_file=;;
+    --copy)
+      copy=true;;
+    *)
+      bootstrap_option_hook $option || die "$option: unknown option";;
+    esac
+  done
 
-if test $with_gettext = yes || test $use_libtool = 1; then
+  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"
 
-  tempbase=.bootstrap$$
-  trap "rm -f $tempbase.0 $tempbase.1" 1 2 13 15
+  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
 
-  > $tempbase.0 > $tempbase.1 &&
-  find . ! -type d -print | sort > $tempbase.0 || exit
+  if $use_gnulib; then
+    if test -z "$GNULIB_SRCDIR"; then
+      gnulib_path=$(test -f .gitmodules &&
+                    git config --file .gitmodules submodule.gnulib.path)
+      test -z "$gnulib_path" && gnulib_path=gnulib
+      GNULIB_SRCDIR=$gnulib_path
+    fi
+  fi
 
-  if test $with_gettext = yes; then
-    # Released autopoint has the tendency to install macros that have been
-    # obsoleted in current gnulib, so run this before gnulib-tool.
-    echo "$0: $AUTOPOINT --force"
-    $AUTOPOINT --force || exit
+  # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
+  found_aux_dir=no
+  grep '^[	 ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'])' configure.ac \
+      >/dev/null && found_aux_dir=yes
+  grep '^[	 ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
+      >/dev/null && found_aux_dir=yes
+  test $found_aux_dir = yes \
+    || die "configure.ac lacks 'AC_CONFIG_AUX_DIR([$build_aux])'; add it"
+
+  # If $build_aux doesn't exist, create it now, otherwise some bits
+  # below will malfunction.  If creating it, also mark it as ignored.
+  if test ! -d $build_aux; then
+    mkdir $build_aux
+    for dot_ig in x $vc_ignore; do
+      test $dot_ig = x && continue
+      insert_vc_ignore $dot_ig $build_aux/
+    done
   fi
 
-  # Autoreconf runs aclocal before libtoolize, which causes spurious
-  # warnings if the initial aclocal is confused by the libtoolized
-  # (or worse out-of-date) macro directory.
-  # libtoolize 1.9b added the --install option; but we support back
-  # to libtoolize 1.5.22, where the install action was default.
+  check_build_prerequisites false
+
+  use_libtool=0
+  # We'd like to use grep -E, to see if any of LT_INIT,
+  # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
+  # but that's not portable enough (e.g., for Solaris).
+  grep '^[	 ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
+    && use_libtool=1
+  grep '^[	 ]*LT_INIT' configure.ac >/dev/null \
+    && use_libtool=1
   if test $use_libtool = 1; then
-    install=
-    case $($LIBTOOLIZE --help) in
-      *--install*) install=--install ;;
-    esac
-    echo "running: $LIBTOOLIZE $install --copy"
-    $LIBTOOLIZE $install --copy
+    find_tool LIBTOOLIZE glibtoolize libtoolize
   fi
 
-  find . ! -type d -print | sort >$tempbase.1
-  old_IFS=$IFS
-  IFS=$nl
-  for file in $(comm -13 $tempbase.0 $tempbase.1); do
-    IFS=$old_IFS
-    parent=${file%/*}
-    version_controlled_file "$parent" "$file" || {
-      for dot_ig in x $vc_ignore; do
-        test $dot_ig = x && continue
-        ig=$parent/$dot_ig
-        insert_vc_ignore "$ig" "${file##*/}"
-      done
-    }
-  done
-  IFS=$old_IFS
+  if $use_gnulib; then
+    gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
+    <$gnulib_tool || return
+  fi
 
-  rm -f $tempbase.0 $tempbase.1
-  trap - 1 2 13 15
-fi
+  # NOTE: we have to be careful to run both autopoint and libtoolize
+  # before gnulib-tool, since gnulib-tool is likely to provide newer
+  # versions of files "installed" by these two programs.
+  # Then, *after* gnulib-tool (see below), we have to be careful to
+  # run autoreconf in such a way that it does not run either of these
+  # two just-pre-run programs.
 
-# Import from gnulib.
-
-if $use_gnulib; then
-  gnulib_tool_options="\
-   --no-changelog\
-   --aux-dir=$build_aux\
-   --doc-base=$doc_base\
-   --lib=$gnulib_name\
-   --m4-base=$m4_base/\
-   --source-base=$source_base/\
-   --tests-base=$tests_base\
-   --local-dir=$local_gl_dir\
-   $gnulib_tool_option_extras\
-  "
-  if test $use_libtool = 1; then
-    case "$gnulib_tool_options " in
-      *' --libtool '*) ;;
-      *) gnulib_tool_options="$gnulib_tool_options --libtool" ;;
-    esac
-  fi
-  echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
-  $gnulib_tool $gnulib_tool_options --import $gnulib_modules \
-    || die "gnulib-tool failed"
+  # Import from gettext.
+  with_gettext=yes
+  grep '^[	 ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
+      with_gettext=no
 
-  for file in $gnulib_files; do
-    symlink_to_dir "$GNULIB_SRCDIR" $file \
-      || die "failed to symlink $file"
-  done
-fi
+  if test $with_gettext = yes || test $use_libtool = 1; then
 
-bootstrap_post_import_hook \
-  || die "bootstrap_post_import_hook failed"
+    tempbase=.bootstrap$$
+    trap "rm -f $tempbase.0 $tempbase.1" HUP INT PIPE TERM
 
-# Don't proceed if there are uninitialized submodules.  In particular,
-# the next step will remove dangling links, which might be links into
-# uninitialized submodules.
-#
-# Uninitialized submodules are listed with an initial dash.
-if $use_git && git submodule | grep '^-' >/dev/null; then
-  die "some git submodules are not initialized. "     \
-      "Run 'git submodule update --init' and bootstrap again."
-fi
+    > $tempbase.0 > $tempbase.1 &&
+    find . ! -type d -print | sort > $tempbase.0 || return
 
-# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
-# gnulib-populated directories.  Such .m4 files would cause aclocal to fail.
-# The following requires GNU find 4.2.3 or newer.  Considering the usual
-# portability constraints of this script, that may seem a very demanding
-# requirement, but it should be ok.  Ignore any failure, which is fine,
-# since this is only a convenience to help developers avoid the relatively
-# unusual case in which a symlinked-to .m4 file is git-removed from gnulib
-# between successive runs of this script.
-find "$m4_base" "$source_base" \
-  -depth \( -name '*.m4' -o -name '*.[ch]' \) \
-  -type l -xtype l -delete > /dev/null 2>&1
-
-# Invoke autoreconf with --force --install to ensure upgrades of tools
-# such as ylwrap.
-AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS"
-
-# Some systems (RHEL 5) are using ancient autotools, for which the
-# --no-recursive option had not been invented.  Detect that lack and
-# omit the option when it's not supported.  FIXME in 2017: remove this
-# hack when RHEL 5 autotools are updated, or when they become irrelevant.
-case $($AUTORECONF --help) in
-  *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";;
-esac
-
-# Tell autoreconf not to invoke autopoint or libtoolize; they were run above.
-echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS"
-AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \
-  || die "autoreconf failed"
-
-# Get some extra files from gnulib, overriding existing files.
-for file in $gnulib_extra_files; do
-  case $file in
-  */INSTALL) dst=INSTALL;;
-  build-aux/*) dst=$build_aux/${file#build-aux/};;
-  *) dst=$file;;
-  esac
-  symlink_to_dir "$GNULIB_SRCDIR" $file $dst \
-    || die "failed to symlink $file"
-done
+    if test $with_gettext = yes; then
+      # Released autopoint has the tendency to install macros that have been
+      # obsoleted in current gnulib, so run this before gnulib-tool.
+      echo "$0: $AUTOPOINT --force"
+      $AUTOPOINT --force || return
+    fi
 
-if test $with_gettext = yes; then
-  # Create gettext configuration.
-  echo "$0: Creating po/Makevars from po/Makevars.template ..."
-  rm -f po/Makevars
-  sed '
-    /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
-    /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/
-    /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'|
-    /^XGETTEXT_OPTIONS *=/{
-      s/$/ \\/
-      a\
-          '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
-    }
-  ' po/Makevars.template >po/Makevars \
-    || die 'cannot generate po/Makevars'
-
-  # If the 'gettext' module is in use, grab the latest Makefile.in.in.
-  # If only the 'gettext-h' module is in use, assume autopoint already
-  # put the correct version of this file into place.
-  case $gnulib_modules in
-  *gettext-h*) ;;
-  *gettext*)
-    cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \
-      || die "cannot create po/Makefile.in.in"
-    ;;
-  esac
+    # Autoreconf runs aclocal before libtoolize, which causes spurious
+    # warnings if the initial aclocal is confused by the libtoolized
+    # (or worse out-of-date) macro directory.
+    # libtoolize 1.9b added the --install option; but we support back
+    # to libtoolize 1.5.22, where the install action was default.
+    if test $use_libtool = 1; then
+      install=
+      case $($LIBTOOLIZE --help) in
+        *--install*) install=--install ;;
+      esac
+      echo "running: $LIBTOOLIZE $install --copy"
+      $LIBTOOLIZE $install --copy
+    fi
+
+    find . ! -type d -print | sort >$tempbase.1
+    old_IFS=$IFS
+    IFS=$nl
+    for file in $(comm -13 $tempbase.0 $tempbase.1); do
+      IFS=$old_IFS
+      parent=${file%/*}
+      version_controlled_file "$parent" "$file" || {
+        for dot_ig in x $vc_ignore; do
+          test $dot_ig = x && continue
+          ig=$parent/$dot_ig
+          insert_vc_ignore "$ig" "${file##*/}"
+        done
+      }
+    done
+    IFS=$old_IFS
+
+    rm -f $tempbase.0 $tempbase.1
+    trap - HUP INT PIPE TERM
+  fi
 
-  if test -d runtime-po; then
-    # Similarly for runtime-po/Makevars, but not quite the same.
-    rm -f runtime-po/Makevars
+  # Import from gnulib.
+
+  if $use_gnulib; then
+    gnulib_tool_options="\
+     --no-changelog\
+     --aux-dir=$build_aux\
+     --doc-base=$doc_base\
+     --lib=$gnulib_name\
+     --m4-base=$m4_base/\
+     --source-base=$source_base/\
+     --tests-base=$tests_base\
+     --local-dir=$local_gl_dir\
+     $gnulib_tool_option_extras\
+    "
+    if test $use_libtool = 1; then
+      case "$gnulib_tool_options " in
+        *' --libtool '*) ;;
+        *) gnulib_tool_options="$gnulib_tool_options --libtool" ;;
+      esac
+    fi
+    echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
+    $gnulib_tool $gnulib_tool_options --import $gnulib_modules \
+      || die "gnulib-tool failed"
+
+    for file in $gnulib_files; do
+      symlink_to_dir "$GNULIB_SRCDIR" $file \
+        || die "failed to symlink $file"
+    done
+  fi
+
+  bootstrap_post_import_hook \
+    || die "bootstrap_post_import_hook failed"
+
+  # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
+  # gnulib-populated directories.  Such .m4 files would cause aclocal to fail.
+  # The following requires GNU find 4.2.3 or newer.  Considering the usual
+  # portability constraints of this script, that may seem a very demanding
+  # requirement, but it should be ok.  Ignore any failure, which is fine,
+  # since this is only a convenience to help developers avoid the relatively
+  # unusual case in which a symlinked-to .m4 file is git-removed from gnulib
+  # between successive runs of this script.
+  find "$m4_base" "$source_base" \
+    -depth \( -name '*.m4' -o -name '*.[ch]' \) \
+    -type l -xtype l -delete > /dev/null 2>&1
+
+  # Invoke autoreconf with --force --install to ensure upgrades of tools
+  # such as ylwrap.
+  AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS"
+  AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive"
+
+  # Tell autoreconf not to invoke autopoint or libtoolize; they were run above.
+  echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS"
+  AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \
+    || die "autoreconf failed"
+
+  # Get some extra files from gnulib, overriding existing files.
+  for file in $gnulib_extra_files; do
+    case $file in
+      */INSTALL) dst=INSTALL;;
+      build-aux/*) dst=$build_aux/${file#build-aux/};;
+      *) dst=$file;;
+    esac
+    symlink_to_dir "$GNULIB_SRCDIR" $file $dst \
+      || die "failed to symlink $file"
+  done
+
+  if test $with_gettext = yes; then
+    # Create gettext configuration.
+    echo "$0: Creating po/Makevars from po/Makevars.template ..."
+    rm -f po/Makevars
     sed '
-      /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
-      /^subdir *=.*/s/=.*/= runtime-po/
-      /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
+      /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
+      /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/
+      /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'|
       /^XGETTEXT_OPTIONS *=/{
         s/$/ \\/
         a\
-            '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
+            '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
       }
-    ' po/Makevars.template >runtime-po/Makevars \
-    || die 'cannot generate runtime-po/Makevars'
+    ' po/Makevars.template >po/Makevars \
+      || die 'cannot generate po/Makevars'
+
+    # If the 'gettext' module is in use, grab the latest Makefile.in.in.
+    # If only the 'gettext-h' module is in use, assume autopoint already
+    # put the correct version of this file into place.
+    case $gnulib_modules in
+      *gettext-h*) ;;
+      *gettext*)
+        cp $GNULIB_SRCDIR/build-aux/po/Makefile.in.in po/Makefile.in.in \
+          || die "cannot create po/Makefile.in.in"
+        ;;
+    esac
+
+    if test -d runtime-po; then
+      # Similarly for runtime-po/Makevars, but not quite the same.
+      rm -f runtime-po/Makevars
+      sed '
+        /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
+        /^subdir *=.*/s/=.*/= runtime-po/
+        /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
+        /^XGETTEXT_OPTIONS *=/{
+          s/$/ \\/
+          a\
+              '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
+        }
+      ' po/Makevars.template >runtime-po/Makevars \
+      || 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)
+      # Copy identical files from po to runtime-po.
+      (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
+    fi
   fi
+
+  bootstrap_epilogue
+
+  echo "$0: done.  Now you can run './configure'."
+}
+
+# ----------------------------------------------------------------------------
+
+# Local Variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptlibversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
+
+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 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
 
-bootstrap_epilogue
+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
 
-echo "$0: done.  Now you can run './configure'."
+# ----------------------------------------------------------------------------
 
-# Local variables:
+# Local Variables:
 # eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "scriptversion="
 # time-stamp-format: "%:y-%02m-%02d.%02H"
-- 
2.45.2

>From 8b33094301d45ccc953b61f3aed0e7cdc2c2c9f6 Mon Sep 17 00:00:00 2001
From: Collin Funk <[email protected]>
Date: Tue, 2 Jul 2024 17:16:57 -0700
Subject: [PATCH 4/9] maint: reformat code according to GNU coding standards

* cfg.mk (local-checks-to-skip): Add sc_indent.
* src/hello.c (print_help): Limit lines to 79 characters. Use spaces
instead of tabs. Use foo () instead of foo().
(parse_options): Likewise. Allow short enums on a single line.
(main): Use foo () instead of foo().
---
 cfg.mk      |  4 ++++
 src/hello.c | 54 ++++++++++++++++++++++++++---------------------------
 2 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/cfg.mk b/cfg.mk
index 5a6decb..8e8778f 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -19,6 +19,10 @@ GNULIB_SRCDIR ?= $(srcdir)/gnulib
 gnulib_dir = $(GNULIB_SRCDIR)
 manual_title = GNU Hello
 
+# Tests not to run as part of "make distcheck".
+local-checks-to-skip = \
+  sc_indent
+
 # Set format of NEWS
 old_NEWS_hash := 581402d29da29110c15fddec73e357cf
 
diff --git a/src/hello.c b/src/hello.c
index fd6cd6e..9a9fb84 100644
--- a/src/hello.c
+++ b/src/hello.c
@@ -60,23 +60,25 @@ print_help (FILE *restrict out)
   /* TRANSLATORS: --help output 3: options
      no-wrap */
   fputs (_("  -t, --traditional       use traditional greeting\n"), out);
-  fputs (_("  -g, --greeting=TEXT     use TEXT as the greeting message\n"), out);
+  fputs (_("  -g, --greeting=TEXT     use TEXT as the greeting message\n"),
+         out);
   fputs ("\n", out);
   fputs (_("      --help     display this help and exit\n"), out);
   fputs (_("      --version  output version information and exit\n"), out);
-  emit_bug_reporting_address();
+  emit_bug_reporting_address ();
   /* Don't output this redundant message for English locales.
      Note we still output for 'C' so that it gets included in the man page.  */
   if (lc_messages && STRNCMP_LIT (lc_messages, "en_"))
     {
       /* TRANSLATORS: Replace LANG_CODE in this URL with your language code
-	 <https://translationproject.org/team/LANG_CODE.html> to form one of
-	 the URLs at https://translationproject.org/team/.  Otherwise, replace
-	 the entire URL with your translation team's email address.  */
+         <https://translationproject.org/team/LANG_CODE.html> to form one of
+         the URLs at https://translationproject.org/team/.  Otherwise, replace
+         the entire URL with your translation team's email address.  */
       fprintf (out, _("Report %s translation bugs to "
-		"<https://translationproject.org/team/>\n"), PACKAGE_NAME);
+                      "<https://translationproject.org/team/>\n"),
+               PACKAGE_NAME);
     }
-  exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
+  exit (out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
 }
 
 static void
@@ -84,10 +86,7 @@ parse_options (int argc, char *argv[], const char **greeting_msg)
 {
   int optc;
   int lose = 0;
-  enum {
-    OPT_HELP = CHAR_MAX + 1,
-    OPT_VERSION
-  };
+  enum { OPT_HELP = CHAR_MAX + 1, OPT_VERSION };
   static const struct option longopts[] = {
     {"greeting", required_argument, NULL, 'g'},
     {"traditional", no_argument, NULL, 't'},
@@ -99,21 +98,22 @@ parse_options (int argc, char *argv[], const char **greeting_msg)
   while ((optc = getopt_long (argc, argv, "g:t", longopts, NULL)) != -1)
     switch (optc)
       {
-	/* --help and --version exit immediately, per GNU coding standards.  */
+        /* --help and --version exit immediately, per GNU coding standards.  */
       case OPT_VERSION:
-	version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, PACKAGE_VERSION, AUTHORS, (char *) NULL);
-	exit (EXIT_SUCCESS);
+        version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, PACKAGE_VERSION,
+                     AUTHORS, (char *) NULL);
+        exit (EXIT_SUCCESS);
       case 'g':
-	*greeting_msg = optarg;
-	break;
+        *greeting_msg = optarg;
+        break;
       case OPT_HELP:
-	print_help (stdout);
+        print_help (stdout);
       case 't':
-	*greeting_msg = _("hello, world");
-	break;
+        *greeting_msg = _("hello, world");
+        break;
       default:
-	lose = 1;
-	break;
+        lose = 1;
+        break;
       }
 
   if (lose || optind < argc)
@@ -154,17 +154,17 @@ main (int argc, char *argv[])
      This is implemented in the Gnulib module "closeout".  */
   atexit (close_stdout);
 
-  parse_options(argc, argv, &greeting_msg);
+  parse_options (argc, argv, &greeting_msg);
 
-  len = strlen(greeting_msg) + 1;
-  mb_greeting = xmalloc(len * sizeof(wchar_t));
-  len = mbsrtowcs(mb_greeting, &greeting_msg, len, &mbstate);
-  if (len == (size_t)-1)
+  len = strlen (greeting_msg) + 1;
+  mb_greeting = xmalloc (len * sizeof (wchar_t));
+  len = mbsrtowcs (mb_greeting, &greeting_msg, len, &mbstate);
+  if (len == (size_t) -1)
     error (EXIT_FAILURE, errno, _("conversion to a multibyte string failed"));
 
   /* Print greeting message and exit. */
   wprintf (L"%ls\n", mb_greeting);
-  free(mb_greeting);
+  free (mb_greeting);
 
   exit (EXIT_SUCCESS);
 }
-- 
2.45.2

>From e35f8e00a1742234bf319414f05a0dcb51fffdfd Mon Sep 17 00:00:00 2001
From: Collin Funk <[email protected]>
Date: Tue, 2 Jul 2024 17:24:39 -0700
Subject: [PATCH 5/9] maint: prefer #include <...> for gnulib substitute
 headers

* src/hello.c: Change #include "errno.h" to #include <errno.h>.
Change #include "error.h" to #include <error.h>.
---
 src/hello.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/hello.c b/src/hello.c
index 9a9fb84..e51316d 100644
--- a/src/hello.c
+++ b/src/hello.c
@@ -17,6 +17,8 @@
 
 #include <config.h>
 
+#include <errno.h>
+#include <error.h>
 #include <getopt.h>
 #include <stdnoreturn.h>
 #include <wchar.h>
@@ -26,8 +28,6 @@
 #include "closeout.h"
 #include "configmake.h"
 #include "dirname.h"
-#include "errno.h"
-#include "error.h"
 #include "gettext.h"
 #include "progname.h"
 #include "propername.h"
-- 
2.45.2

>From 70110f55174c2e1dfb406932dfd17acde466bd85 Mon Sep 17 00:00:00 2001
From: Collin Funk <[email protected]>
Date: Tue, 2 Jul 2024 17:29:57 -0700
Subject: [PATCH 6/9] maint: don't use the deprecated stdnoreturn module

* bootstrap.conf (gnulib_modules): Remove stdnoreturn.
* src/hello.c: Don't include <stdnoreturn.h>. Gnulib will define
_Noreturn in <config.h> if the compiler does not support the C11
keyword.
---
 bootstrap.conf | 1 -
 src/hello.c    | 1 -
 2 files changed, 2 deletions(-)

diff --git a/bootstrap.conf b/bootstrap.conf
index 2f41186..2f2470e 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -36,7 +36,6 @@ gnulib_modules="
     progname
     propername
     readme-release
-    stdnoreturn
     update-copyright
     version-etc-fsf
     wchar
diff --git a/src/hello.c b/src/hello.c
index e51316d..35151df 100644
--- a/src/hello.c
+++ b/src/hello.c
@@ -20,7 +20,6 @@
 #include <errno.h>
 #include <error.h>
 #include <getopt.h>
-#include <stdnoreturn.h>
 #include <wchar.h>
 
 #include "system.h"
-- 
2.45.2

>From 7f5ddda26436d8d3c62f02156f8863a78b5e08f5 Mon Sep 17 00:00:00 2001
From: Collin Funk <[email protected]>
Date: Tue, 2 Jul 2024 17:39:43 -0700
Subject: [PATCH 7/9] maint: copy fdl.texi instead of using the gnulib module

Using the module gives the following message:

    $ gnulib-tool --extract-notice fdl
      Don't use this module! Instead, copy the referenced license \
      file into your version control repository.

* bootstrap.conf (gnulib_modules): Remove fdl.
* doc/.gitignore (/fdl.texi): Remove entry.
* doc/fdl.texi: Add file from Gnulib.
---
 bootstrap.conf |   1 -
 doc/.gitignore |   1 -
 doc/fdl.texi   | 505 +++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 505 insertions(+), 2 deletions(-)
 create mode 100644 doc/fdl.texi

diff --git a/bootstrap.conf b/bootstrap.conf
index 2f2470e..9348224 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -24,7 +24,6 @@ gnulib_modules="
     do-release-commit-and-tag
     dirname
     error
-    fdl
     gendocs
     getopt-gnu
     gettext
diff --git a/doc/.gitignore b/doc/.gitignore
index cc78a11..1cae109 100644
--- a/doc/.gitignore
+++ b/doc/.gitignore
@@ -1,4 +1,3 @@
-/fdl.texi
 /version.texi
 /gendocs_template
 /gendocs_template_min
diff --git a/doc/fdl.texi b/doc/fdl.texi
new file mode 100644
index 0000000..eaf3da0
--- /dev/null
+++ b/doc/fdl.texi
@@ -0,0 +1,505 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+@uref{https://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The ``Document'', below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as ``you''.  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, La@TeX{} input
+format, SGML or XML using a publicly available
+DTD, and standard-conforming simple HTML,
+PostScript or PDF designed for human modification.  Examples
+of transparent image formats include PNG, XCF and
+JPG@.  Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, SGML or
+XML for which the DTD and/or processing tools are
+not generally available, and the machine-generated HTML,
+PostScript or PDF produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document).  You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page.  If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on.  These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles.  Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''.  Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''.  You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time.  Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.  See
+@uref{https://www.gnu.org/licenses/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+  Copyright (C)  @var{year}  @var{your name}.
+  Permission is granted to copy, distribute and/or modify this document
+  under the terms of the GNU Free Documentation License, Version 1.3
+  or any later version published by the Free Software Foundation;
+  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+  Texts.  A copy of the license is included in the section entitled ``GNU
+  Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.''@: line with this:
+
+@smallexample
+@group
+    with the Invariant Sections being @var{list their titles}, with
+    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+    being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
-- 
2.45.2

>From 3e31deaba95937ae817d61e87dca2e49c2e75f74 Mon Sep 17 00:00:00 2001
From: Collin Funk <[email protected]>
Date: Tue, 2 Jul 2024 17:48:15 -0700
Subject: [PATCH 8/9] maint: use mbszero

* bootstrap.conf (gnulib_modules): Add mbszero.
* src/hello.c (main): Use mbszero to set the initial conversion state.
---
 bootstrap.conf | 1 +
 src/hello.c    | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/bootstrap.conf b/bootstrap.conf
index 9348224..a8fdd41 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -32,6 +32,7 @@ gnulib_modules="
     gnupload
     maintainer-makefile
     mbsrtowcs
+    mbszero
     progname
     propername
     readme-release
diff --git a/src/hello.c b/src/hello.c
index 35151df..f3e64e5 100644
--- a/src/hello.c
+++ b/src/hello.c
@@ -130,7 +130,7 @@ main (int argc, char *argv[])
 {
   const char *greeting_msg;
   wchar_t *mb_greeting;
-  mbstate_t mbstate = { 0, };
+  mbstate_t mbstate; mbszero (&mbstate);
   size_t len;
 
   set_program_name (argv[0]);
-- 
2.45.2

>From 6d87538a97117882d85e74d94d3b1222ce4a3cec Mon Sep 17 00:00:00 2001
From: Collin Funk <[email protected]>
Date: Tue, 2 Jul 2024 18:04:21 -0700
Subject: [PATCH 9/9] maint: remove the obsolete gettext module

* bootstrap.conf (gnulib_modules): Remove gettext. Use the gettext-h
module instead.
* Makefile.am (hello_LDADD): Update libraries according to current
./bootstrap invocation.
---
 Makefile.am    | 9 ++++++++-
 bootstrap.conf | 2 +-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 427910c..d0f4a11 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -37,7 +37,14 @@ SUBDIRS = po
 bin_PROGRAMS = hello
 hello_SOURCES = src/hello.c src/system.h
 
-hello_LDADD = $(LIBINTL) $(top_builddir)/lib/lib$(PACKAGE).a
+hello_LDADD = $(top_builddir)/lib/lib$(PACKAGE).a \
+	$(HARD_LOCALE_LIB) \
+	$(LIBC32CONV) \
+	$(LIBICONV) \
+	$(LIBINTL) \
+	$(LIBUNISTRING) \
+	$(MBRTOWC_LIB) \
+	$(SETLOCALE_NULL_LIB)
 
 localedir = $(datadir)/locale
 DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
diff --git a/bootstrap.conf b/bootstrap.conf
index a8fdd41..4a81c79 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -26,7 +26,7 @@ gnulib_modules="
     error
     gendocs
     getopt-gnu
-    gettext
+    gettext-h
     gitlog-to-changelog
     gnu-web-doc-update
     gnupload
-- 
2.45.2

Reply via email to