[PATCH] progs, libs: support _RANLIB overrides

Mike Frysinger <[email protected]>
Newsgroups gmane.comp.sysutils.automake.patches
Message-ID <[email protected]>
Much like we have per-target support for _AR and _LINK, add an _RANLIB
override too.  This allows selection of specific ranlib tools in case
a non-standard archiver tool was forced.

* bin/automake.in: Check for _RANLIB per-target settings.
* doc/automake.texi: Document _RANLIB override.
* lib/am/library.am: Change $(RANLIB) to $(%XLIBRARY%_RANLIB).
* t/ranlib_override.sh: New test.
* NEWS: Mention new feature.
---
 NEWS                 |  8 ++++++++
 bin/automake.in      |  6 +++++-
 doc/automake.texi    |  5 +++++
 lib/am/library.am    |  2 +-
 t/ranlib_override.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 68 insertions(+), 2 deletions(-)
 create mode 100644 t/ranlib_override.sh

diff --git a/NEWS b/NEWS
index 121fe820eeef..79a81f22e92f 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,14 @@ please see NEWS-2.0 and start following the advice there now.
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+New in 1.17:
+
+* New features added
+
+  - RANLIB may be overridden on a per-target basis.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 New in 1.16.5:
 
 * Bugs fixed
diff --git a/bin/automake.in b/bin/automake.in
index 28e0fe67233b..58b589495e39 100644
--- a/bin/automake.in
+++ b/bin/automake.in
@@ -2704,12 +2704,16 @@ sub handle_libraries ()
       # Canonicalize names and check for misspellings.
       my $xlib = check_canonical_spelling ($onelib, '_LIBADD', '_SOURCES',
                                            '_OBJECTS', '_DEPENDENCIES',
-                                           '_AR');
+                                           '_AR', '_RANLIB');
 
       if (! var ($xlib . '_AR'))
 	{
 	  define_variable ($xlib . '_AR', '$(AR) $(ARFLAGS)', $where);
 	}
+      if (! var ($xlib . '_RANLIB'))
+	{
+	  define_variable ($xlib . '_RANLIB', '$(RANLIB)', $where);
+	}
 
       # Generate support for conditional object inclusion in
       # libraries.
diff --git a/doc/automake.texi b/doc/automake.texi
index 9916a41d4b79..67827cf8698a 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -5811,6 +5811,11 @@ compiler likes this variable set like so:
 libmaude_a_AR = $(CXX) -ar -o
 @end example
 
+@item maude_RANLIB
+A static library's index is updated by default by invoking @samp{$(RANLIB)}
+followed by the name of the library.  You can override this by setting the
+@code{_RANLIB} variable.
+
 @item maude_LIBADD
 Extra objects can be added to a @emph{library} using the @code{_LIBADD}
 variable.  For instance, this should be used for objects determined by
diff --git a/lib/am/library.am b/lib/am/library.am
index 06af1d16821e..effaf39f93f5 100644
--- a/lib/am/library.am
+++ b/lib/am/library.am
@@ -17,4 +17,4 @@
 %LIBRARY%: $(%XLIBRARY%_OBJECTS) $(%XLIBRARY%_DEPENDENCIES) $(EXTRA_%XLIBRARY%_DEPENDENCIES) %DIRSTAMP%
 	%SILENT%-rm -f %LIBRARY%
 	%VERBOSE%$(%XLIBRARY%_AR) %LIBRARY% $(%XLIBRARY%_OBJECTS) $(%XLIBRARY%_LIBADD)
-	%SILENT%$(RANLIB) %LIBRARY%
+	%SILENT%$(%XLIBRARY%_RANLIB) %LIBRARY%
diff --git a/t/ranlib_override.sh b/t/ranlib_override.sh
new file mode 100644
index 000000000000..100e3734bc53
--- /dev/null
+++ b/t/ranlib_override.sh
@@ -0,0 +1,49 @@
+#! /bin/sh
+# Copyright (C) 2009-2022 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/>.
+
+# Test to make sure _RANLIB variables are detected and used as documented.
+
+. test-init.sh
+
+cat >> configure.ac << 'END'
+AC_PROG_CC
+AM_PROG_AR
+AC_PROG_RANLIB
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+EXTRA_LIBRARIES = libfoo.a libbar.a
+libfoo_a_SOURCES = foo.c
+libfoo_a_RANLIB = $(RANLIB)
+libbar_a_SOURCES = bar.c
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+
+# We should use libfoo_a_RANLIB not RANLIB.
+grep '.\$(libfoo_a_RANLIB) *libfoo.a' Makefile.in
+grep '.\$(RANLIB).*libfoo.a' Makefile.in && exit 1
+
+# We should use default RANLIB.
+grep '^ *libbar_a_RANLIB *=.*\$(RANLIB)' Makefile.in
+
+# Silent make rules should use AM_V_at as they're silenced.
+grep '.\$(AM_V_at)\$(libfoo_a_RANLIB)' Makefile.in
+grep '.\$(AM_V_at)\$(libbar_a_RANLIB)' Makefile.in
+
+exit 0
-- 
2.33.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.