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