From: Bruno Haible <bruno@clisp.org>
Date: Fri, 14 Jun 2024 11:31:45 +0000 (+0200)
Subject: relocatable-prog: Implement --help and --version for all programs.
X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=f0caf1fffee582d7ef8c6f007f3a316ff2f54edf;p=gnulib.git

relocatable-prog: Implement --help and --version for all programs.

* build-aux/config.libpath (func_usage, func_version, func_fatal_error):
New functions.
Add command-line option processing.
* build-aux/libtool-reloc (func_usage, func_version, func_fatal_error):
New functions.
Add command-line option processing.
* build-aux/reloc-ldflags (func_usage, func_version, func_fatal_error):
New functions.
Add command-line option processing.
---

diff --git a/ChangeLog b/ChangeLog
index bd6d21d2c0..76d15ccf4f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2024-06-14  Bruno Haible  <bruno@clisp.org>
+
+	relocatable-prog: Implement --help and --version for all programs.
+	* build-aux/config.libpath (func_usage, func_version, func_fatal_error):
+	New functions.
+	Add command-line option processing.
+	* build-aux/libtool-reloc (func_usage, func_version, func_fatal_error):
+	New functions.
+	Add command-line option processing.
+	* build-aux/reloc-ldflags (func_usage, func_version, func_fatal_error):
+	New functions.
+	Add command-line option processing.
+
 2024-06-14  Bruno Haible  <bruno@clisp.org>
 
 	relocatable-prog-wrapper: Implement --help, --version for all programs.
diff --git a/build-aux/config.libpath b/build-aux/config.libpath
index 323b7669c8..173cd0d90b 100755
--- a/build-aux/config.libpath
+++ b/build-aux/config.libpath
@@ -23,14 +23,80 @@
 #   distribute this file as part of a program that contains a
 #   configuration script generated by Autoconf, you may include it under
 #   the same distribution terms that you use for the rest of that program.
-#
-# The first argument passed to this file is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# The environment variable LD should be set by the caller.
-#
-# The set of defined variables is at the end of this script.
+
+# func_usage
+# outputs to stdout the --help usage message.
+func_usage ()
+{
+  echo "\
+Usage: config.libpath [OPTION] HOST
+
+Prints shell variable assignments that describe how to set the
+run time search path of shared libraries in an executable at run time.
+
+The first argument passed to this file is the canonical host specification,
+   CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+or
+   CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+The environment variable LD should be set by the caller.
+
+The set of defined variables is at the end of this script.
+
+Options:
+      --help           print this help and exit
+      --version        print version information and exit
+
+Send patches and bug reports to <bug-gnulib@gnu.org>."
+}
+
+# func_version
+# outputs to stdout the --version message.
+func_version ()
+{
+  echo "config.libpath (GNU gnulib, module relocatable-prog)"
+  echo "Copyright (C) 2024 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."
+  echo
+  printf 'Written by %s.\n' "Bruno Haible"
+}
+
+# func_fatal_error message
+# outputs to stderr a fatal error message, and terminates the program.
+func_fatal_error ()
+{
+  echo "config.libpath: *** $1" 1>&2
+  echo "config.libpath: *** Stop." 1>&2
+  exit 1
+}
+
+# Command-line option processing.
+while test $# -gt 0; do
+  case "$1" in
+    --help | --hel | --he | --h )
+      func_usage
+      exit 0 ;;
+   --version | --versio | --versi | --vers | --ver | --ve | --v )
+      func_version
+      exit 0 ;;
+    -- )      # Stop option processing
+      shift; break ;;
+    -* )
+      func_fatal_error "unrecognized option: $1"
+      ;;
+    * )
+      break ;;
+  esac
+done
+
+if test $# -gt 1; then
+  func_fatal_error "too many arguments"
+fi
+if test $# -lt 1; then
+  func_fatal_error "too few arguments"
+fi
 
 host="$1"
 host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
diff --git a/build-aux/libtool-reloc b/build-aux/libtool-reloc
index 50c571dd0c..2f6e84d038 100755
--- a/build-aux/libtool-reloc
+++ b/build-aux/libtool-reloc
@@ -16,7 +16,43 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
-# Usage: libtool-reloc libtool LIBTOOL_ARGUMENTS
+# func_usage
+# outputs to stdout the --help usage message.
+func_usage ()
+{
+  echo "\
+Usage: libtool-reloc [OPTION]... libtool LIBTOOL_ARGUMENTS
+
+Invokes GNU libtool, with support for relocatable programs.
+
+Options:
+      --help           print this help and exit
+      --version        print version information and exit
+
+Send patches and bug reports to <bug-gnulib@gnu.org>."
+}
+
+# func_version
+# outputs to stdout the --version message.
+func_version ()
+{
+  echo "libtool-reloc (GNU gnulib, module relocatable-prog)"
+  echo "Copyright (C) 2024 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."
+  echo
+  printf 'Written by %s.\n' "Bruno Haible"
+}
+
+# func_fatal_error message
+# outputs to stderr a fatal error message, and terminates the program.
+func_fatal_error ()
+{
+  echo "libtool-reloc: *** $1" 1>&2
+  echo "libtool-reloc: *** Stop." 1>&2
+  exit 1
+}
 
 # Outputs a command and runs it.
 func_verbose ()
@@ -27,6 +63,29 @@ func_verbose ()
   "$@"
 }
 
+# Command-line option processing.
+while test $# -gt 0; do
+  case "$1" in
+    --help | --hel | --he | --h )
+      func_usage
+      exit 0 ;;
+   --version | --versio | --versi | --vers | --ver | --ve | --v )
+      func_version
+      exit 0 ;;
+    -- )      # Stop option processing
+      shift; break ;;
+    -* )
+      func_fatal_error "unrecognized option: $1"
+      ;;
+    * )
+      break ;;
+  esac
+done
+
+if test $# -lt 1; then
+  func_fatal_error "too few arguments"
+fi
+
 # Determine the mode from the arguments.
 mode=
 for arg
diff --git a/build-aux/reloc-ldflags b/build-aux/reloc-ldflags
index f6b636624f..828451b4ef 100755
--- a/build-aux/reloc-ldflags
+++ b/build-aux/reloc-ldflags
@@ -1,5 +1,5 @@
 #! /bin/sh
-# Output a system dependent linker command for putting a relocatable library
+# Output a system dependent compiler option for putting a relocatable library
 # search path into an executable.
 #
 #   Copyright 2003-2024 Free Software Foundation, Inc.
@@ -22,18 +22,84 @@
 #   distribute this file as part of a program that contains a
 #   configuration script generated by Autoconf, you may include it under
 #   the same distribution terms that you use for the rest of that program.
-#
-# The first argument passed to this file is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# The environment variable LD should be set by the caller.
-#
-# The second argument is a colon separated list of directories that contain
-# the libraries at installation time.
-#
-# The third argument is the directory into which the executable is going to be
-# installed.
+
+# func_usage
+# outputs to stdout the --help usage message.
+func_usage ()
+{
+  echo "\
+Usage: reloc-ldflags [OPTION]... HOST LIBRARY_PATH_VALUE INSTALLDIR
+
+Prints a system dependent compiler option for putting a relocatable library
+search path into an executable.
+
+The first argument passed to this file is the canonical host specification,
+   CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+or
+   CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+The second argument is a colon separated list of directories that contain
+the libraries at installation time.
+
+The third argument is the directory into which the executable is going to be
+installed.
+
+The environment variable LD should be set by the caller.
+
+Options:
+      --help           print this help and exit
+      --version        print version information and exit
+
+Send patches and bug reports to <bug-gnulib@gnu.org>."
+}
+
+# func_version
+# outputs to stdout the --version message.
+func_version ()
+{
+  echo "reloc-ldflags (GNU gnulib, relocatable-prog)"
+  echo "Copyright (C) 2024 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."
+  echo
+  printf 'Written by %s.\n' "Bruno Haible"
+}
+
+# func_fatal_error message
+# outputs to stderr a fatal error message, and terminates the program.
+func_fatal_error ()
+{
+  echo "reloc-ldflags: *** $1" 1>&2
+  echo "reloc-ldflags: *** Stop." 1>&2
+  exit 1
+}
+
+# Command-line option processing.
+while test $# -gt 0; do
+  case "$1" in
+    --help | --hel | --he | --h )
+      func_usage
+      exit 0 ;;
+   --version | --versio | --versi | --vers | --ver | --ve | --v )
+      func_version
+      exit 0 ;;
+    -- )      # Stop option processing
+      shift; break ;;
+    -* )
+      func_fatal_error "unrecognized option: $1"
+      ;;
+    * )
+      break ;;
+  esac
+done
+
+if test $# -gt 3; then
+  func_fatal_error "too many arguments"
+fi
+if test $# -lt 3; then
+  func_fatal_error "too few arguments"
+fi
 
 host="$1"
 host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`