[PATCH] Silent make output for custom link commands

Nick Gasson <[email protected]>
Newsgroups gmane.comp.sysutils.automake.patches
Message-ID <[email protected]>
In my project I use a custom _LINK variable for a particular target which
needs to force using the C++ linker for an otherwise C program when linking
statically against a C++ library.  I do it like this:

  if LLVM_STATIC
  # Force linking as C++ to allow LLVM static libraries
  nodist_EXTRA_bin_nvc_SOURCES = dummy.cxx   # Make sure CXXLD is defined
  bin_nvc_LINK = $(CXXLD) $(AM_CFLAGS) $(CFLAGS) $(bin_nvc_LDFLAGS) -o $@
  else
  bin_nvc_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(bin_nvc_LDFLAGS) -o $@
  endif

This works well except when using silent make rules where it prints "GEN"
instead of the usual "CCLD" or "CXXLD".  The patch below allows one to define
a AM_V_*_LINK variable which is used instead of the default AM_V_GEN.  In the
above example I would just add

  AM_V_bin_nvc_LINK = $(AM_V_CCLD)

to get the expected output.

* bin/automake.in (define_per_target_linker_variable): Use AM_V_${target}_LINK
if defined as the verbose variable name for custom link commands.
* doc/automake.texi (Program and Library Variables): Document the new
variable.
* t/link_override.sh: Add extra checks for silent make rules.
---
 bin/automake.in    | 8 ++++++--
 doc/automake.texi  | 3 +++
 t/link_override.sh | 7 +++++++
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/bin/automake.in b/bin/automake.in
index f6ebe30ea8b4..f04f5d5f5554 100644
--- a/bin/automake.in
+++ b/bin/automake.in
@@ -6360,8 +6360,12 @@ sub define_per_target_linker_variable
   my ($linker, $target) = @_;
 
   # If the user wrote a custom link command, we don't define ours.
-  return "${target}_LINK"
-    if set_seen "${target}_LINK";
+  my $custom_link = "${target}_LINK";
+  if (set_seen ($custom_link))
+    {
+      my $verbose = $custom_link if var (verbose_var ($custom_link));
+      return ($custom_link, $verbose);
+    }
 
   my $xlink = $linker ? $linker : 'LINK';
 
diff --git a/doc/automake.texi b/doc/automake.texi
index dd932ddd796a..2babde9d6ddc 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -5903,6 +5903,9 @@ and used by Automake due to the use of per-target link flags such as
 @code{_CFLAGS}, @code{_LDFLAGS} or @code{_LIBTOOLFLAGS}, in cases where
 they apply.
 
+If the variable @code{AM_V_*_LINK} exists it will be used to output a
+status line in silent mode, otherwise @code{AM_V_GEN} is used.
+
 @item maude_CCASFLAGS
 @itemx maude_CFLAGS
 @itemx maude_CPPFLAGS
diff --git a/t/link_override.sh b/t/link_override.sh
index 1ac45fc5d240..81787af914ec 100644
--- a/t/link_override.sh
+++ b/t/link_override.sh
@@ -27,6 +27,8 @@ bin_PROGRAMS = foo bar baz boo
 foo_LINK = $(LINK)
 bar_LINK = $(LINK)
 bar_LDFLAGS = $(AM_LDFLAGS)
+baz_LINK = $(LINK)
+AM_V_baz_LINK = xyz
 END
 
 $ACLOCAL
@@ -41,4 +43,9 @@ grep '.\$(LINK).*foo' Makefile.in && exit 1
 grep '^ *bar_LINK *=.*bar_LDFLAGS' Makefile.in && exit 1
 grep '.\$(bar_LINK).*bar' Makefile.in
 
+# Silent make rules should use AM_V_GEN unless overriden.
+grep '.\$(AM_V_GEN)\$(foo_LINK)' Makefile.in
+grep '.\$(AM_V_baz_LINK)\$(baz_LINK)' Makefile.in
+grep '.\$(AM_V_GEN)\$(baz_LINK)' Makefile.in && exit 1
+
 exit 0
-- 
2.30.2
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.