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