[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: linewrap problem?
From: |
Alexandre Duret-Lutz |
Subject: |
Re: linewrap problem? |
Date: |
Mon, 24 Nov 2003 23:13:27 +0100 |
User-agent: |
Gnus/5.1003 (Gnus v5.10.3) Emacs/21.3 (gnu/linux) |
>>> "Harlan" == Harlan Stenn <address@hidden> writes:
Harlan> ntp's util/Makefile.am has a line that looked something like:
Harlan> bin_PROGRAMS = @A@ @B@ @C@
Harlan> and was almost 80 characters long.
Harlan> automake-1.7.7 (and 1.7.8, apparently) have a problem
Harlan> in that they wrap the line (adding a \ continuation).
Harlan> The problem is that if the conditional programs are not
Harlan> being built are at the end of the line, I'm getting a
Harlan> blank line after the continuation character, and some
Harlan> "make" programs hate that.
Good catch, thanks. I'm installing the following patch.
Harlan> I also notice that bin_PROGRAMS is appearing twice in
Harlan> the Makefile.in,
This is already fixed in the betas.
2003-11-24 Alexandre Duret-Lutz <address@hidden>
* 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.
Index: lib/Automake/Variable.pm
===================================================================
RCS file: /cvs/automake/automake/lib/Automake/Variable.pm,v
retrieving revision 1.22
diff -u -r1.22 Variable.pm
--- lib/Automake/Variable.pm 11 Nov 2003 00:07:16 -0000 1.22
+++ lib/Automake/Variable.pm 24 Nov 2003 22:08:31 -0000
@@ -516,8 +516,18 @@
# 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(address@hidden@)+\s*$/;
+
+ $res .= $wrap;
}
else # ($def->pretty == VAR_SORTED)
{
@@ -1029,7 +1039,7 @@
}
}
-=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 @@
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 @@
# 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;
Index: tests/Makefile.am
===================================================================
RCS file: /cvs/automake/automake/tests/Makefile.am,v
retrieving revision 1.533
diff -u -r1.533 Makefile.am
--- tests/Makefile.am 22 Nov 2003 18:05:35 -0000 1.533
+++ tests/Makefile.am 24 Nov 2003 22:08:31 -0000
@@ -443,6 +443,7 @@
subpkg.test \
subpkg2.test \
subst.test \
+subst2.test \
substref.test \
substtarg.test \
suffix.test \
Index: tests/Makefile.in
===================================================================
RCS file: /cvs/automake/automake/tests/Makefile.in,v
retrieving revision 1.687
diff -u -r1.687 Makefile.in
--- tests/Makefile.in 22 Nov 2003 18:05:35 -0000 1.687
+++ tests/Makefile.in 24 Nov 2003 22:08:31 -0000
@@ -557,6 +557,7 @@
subpkg.test \
subpkg2.test \
subst.test \
+subst2.test \
substref.test \
substtarg.test \
suffix.test \
Index: tests/subst2.test
===================================================================
RCS file: tests/subst2.test
diff -N tests/subst2.test
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ tests/subst2.test 24 Nov 2003 22:08:32 -0000
@@ -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
--
Alexandre Duret-Lutz
- linewrap problem?, Harlan Stenn, 2003/11/20
- Re: linewrap problem?,
Alexandre Duret-Lutz <=