From 2028e01ef30db15989a059a42f389052f0f3a747 Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Mon, 24 Nov 2003 22:13:42 +0000 Subject: [PATCH] * lib/Automake/Variable.pm (output): Add $(am__empty) to variable definitions that end with a line full of @substitutions@ that would confuse HP-UX Make if it were blank. (transform_variable_recursively): Make sure not to erase empty variables. * tests/Makefile.am (TESTS): Add subst2.test. * tests/subst2.test: New file. Report from Harlan Stenn. --- ChangeLog | 9 ++++++++ lib/Automake/Variable.pm | 22 +++++++++++++------ tests/Makefile.am | 1 + tests/Makefile.in | 1 + tests/subst2.test | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 6 deletions(-) create mode 100755 tests/subst2.test diff --git a/ChangeLog b/ChangeLog index 1f8be76..06b4d74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2003-11-24 Alexandre Duret-Lutz + * lib/Automake/Variable.pm (output): Add $(am__empty) to variable + definitions that end with a line full of @substitutions@ that + would confuse HP-UX Make if it were blank. + (transform_variable_recursively): Make sure not to erase empty + variables. + * tests/Makefile.am (TESTS): Add subst2.test. + * tests/subst2.test: New file. + Report from Harlan Stenn. + * lib/am/texibuild.am (%SOURCE_SUFFIX%.html): Work around a Texinfo 4.1 bug. Report from Dalibor Topic. diff --git a/lib/Automake/Variable.pm b/lib/Automake/Variable.pm index 48d21a4..5bdf8e8 100644 --- a/lib/Automake/Variable.pm +++ b/lib/Automake/Variable.pm @@ -516,8 +516,18 @@ sub output ($@) # Suppress escaped new lines. &makefile_wrap will # add them back, maybe at other places. $val =~ s/\\$//mg; - $res .= makefile_wrap ("$str$name $equals", "$str\t", - split (' ' , $val)); + my $wrap = makefile_wrap ("$str$name $equals", "$str\t", + split (' ', $val)); + + # If the last line of the definition is made only of + # @substitutions@, append an empty variable to make sure it + # cannot be substituted as a blank line (that would confuse + # HP-UX Make). + $wrap = makefile_wrap ("$str$name $equals", "$str\t", + split (' ', $val), '$(am__empty)') + if $wrap =~ /\n(\s*@\w+@)+\s*$/; + + $res .= $wrap; } else # ($def->pretty == VAR_SORTED) { @@ -1029,7 +1039,7 @@ sub variable_delete ($@) } } -=item C<$str = variables_dump ($varname)> +=item C<$str = variables_dump> Return a string describing all we know about all variables. For debugging. @@ -1038,8 +1048,6 @@ For debugging. sub variables_dump () { - my ($var) = @_; - my $text = "All variables:\n{\n"; foreach my $var (sort { $a->name cmp $b->name } variables) { @@ -1473,7 +1481,9 @@ sub transform_variable_recursively ($$$$$&) # we are trying to override a user variable. Delete # the old variable first. variable_delete ($varname) if $varname eq $var->name; - # Define for all conditions. + # Define for all conditions. Make sure we define + # an empty variable in condition TRUE otherwise. + @allresults = ([TRUE, '']) unless @allresults; foreach my $pair (@allresults) { my ($cond, @result) = @$pair; diff --git a/tests/Makefile.am b/tests/Makefile.am index 0792a68..a5284cb 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -443,6 +443,7 @@ subobjname.test \ subpkg.test \ subpkg2.test \ subst.test \ +subst2.test \ substref.test \ substtarg.test \ suffix.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 5b0b5fd..1592c3b 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -557,6 +557,7 @@ subobjname.test \ subpkg.test \ subpkg2.test \ subst.test \ +subst2.test \ substref.test \ substtarg.test \ suffix.test \ diff --git a/tests/subst2.test b/tests/subst2.test new file mode 100755 index 0000000..62fddf5 --- /dev/null +++ b/tests/subst2.test @@ -0,0 +1,56 @@ +#! /bin/sh +# Copyright (C) 2003 Free Software Foundation, Inc. +# +# This file is part of GNU Automake. +# +# GNU Automake 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 2, or (at your option) +# any later version. +# +# GNU Automake 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 Automake; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# Make sure a multi-line definition cannot be terminated by an empty +# line (when there are @substitutions@ inside). +. ./defs || exit 1 + +set -e + +cat >> configure.in << 'END' +AC_SUBST([ABCDEFGHIJKLMNOPQRSTUVWX]) +AC_SUBST([ABCDEFGHIJKLMNOPQRSTUVWXY]) +AC_SUBST([ABCDEFGHIJKLMNOPQRSTUVWXYZ]) +AC_OUTPUT +END + +cat >Makefile.am <<'END' +bin_PROGRAMS = @ABCDEFGHIJKLMNOPQRSTUVWX@ @ABCDEFGHIJKLMNOPQRSTUVWXY@ @ABCDEFGHIJKLMNOPQRSTUVWXYZ@ +EXTRA_PROGRAMS = + +EXEEXT = .bin + +print-programs: + @echo BEG: $(bin_PROGRAMS) :END +END + +$ACLOCAL +$AUTOCONF +$AUTOMAKE +./configure +$MAKE print-programs >foo +cat foo +grep 'BEG: :END' foo +$MAKE am__empty=X print-programs >foo +cat foo +grep 'BEG: X :END' foo + +# Test for another bug, where EXTRA_PROGRAMS was removed because it was empty. +grep EXTRA_PROGRAMS Makefile.in -- 2.7.4