* automake.in (check_trailing_slash): New function (variation on
authorAlexandre Duret-Lutz <adl@gnu.org>
Thu, 3 Apr 2003 21:38:39 +0000 (21:38 +0000)
committerAlexandre Duret-Lutz <adl@gnu.org>
Thu, 3 Apr 2003 21:38:39 +0000 (21:38 +0000)
a patch by Peter Muir).  Diagnose whitespaces following trailing
backslash.
(read_am_file): Use it.
* tests/backsl4.test: New file.
* tests/Makefile.am (TESTS): Add backsl4.test.
Reported by Peter Muir.

ChangeLog
automake.in
tests/Makefile.am
tests/Makefile.in
tests/backsl4.test [new file with mode: 0755]

index 2e2eaa4..be2bb66 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2003-04-03  Alexandre Duret-Lutz  <adl@gnu.org>
+
+       * automake.in (check_trailing_slash): New function (variation on
+       a patch by Peter Muir).  Diagnose whitespaces following trailing
+       backslash.
+       (read_am_file): Use it.
+       * tests/backsl4.test: New file.
+       * tests/Makefile.am (TESTS): Add backsl4.test.
+       Reported by Peter Muir.
+
 2003-03-29  Raja R Harinath  <harinath@acm.org>
 
        Speedup Automake::DisjConditions::invert().
@@ -12,7 +22,7 @@
        * lib/Automake/tests/Condition.pl (test_reduce): Rename to ...
        (test_reduce_and): ... this.
        (test_reduce_or): New.
-       * lib/Automake/tests/DisjConditions.pl 
+       * lib/Automake/tests/DisjConditions.pl
        (test_invert): Update to reflect effect of reduce_or().
        (test_simplify): Don't skip invert() on larger inputs.
 
index 4f9df1e..5983ce9 100755 (executable)
@@ -7365,6 +7365,25 @@ sub target_defined
 
 ################################################################
 
+# &check_trailing_slash ($WHERE, $LINE)
+# --------------------------------------
+# Return 1 iff $LINE ends with a slash.
+# Might modify $LINE.
+sub check_trailing_slash ($\$)
+{
+  my ($where, $line) = @_;
+
+  # Ignore `##' lines.
+  return 0 if $$line =~ /$IGNORE_PATTERN/o;
+
+  # Catch and fix a common error.
+  msg "syntax", $where, "whitespace following trailing backslash"
+    if $$line =~ s/\\\s+\n$/\\\n/;
+
+  return $$line =~ /\\$/;
+}
+
+
 # &append_comments ($VARIABLE, $SPACING, $COMMENT)
 # ------------------------------------------------
 # Append $COMMENT to the other comments for $VARIABLE, using
@@ -7437,7 +7456,7 @@ sub read_am_file ($$)
        {
            last;
        }
-       $saw_bk = /\\$/ && ! /$IGNORE_PATTERN/o;
+       $saw_bk = check_trailing_slash ($where, $_);
     }
 
     # We save the conditional stack on entry, and then check to make
@@ -7464,7 +7483,7 @@ sub read_am_file ($$)
        $_ =~ s/\@MAINT\@//g
            unless $seen_maint_mode;
 
-       my $new_saw_bk = /\\$/ && ! /$IGNORE_PATTERN/o;
+       my $new_saw_bk = check_trailing_slash ($where, $_);
 
        if (/$IGNORE_PATTERN/o)
        {
index a357521..864dc61 100644 (file)
@@ -42,6 +42,7 @@ auxdir2.test \
 backsl.test \
 backsl2.test \
 backsl3.test \
+backsl4.test \
 badline.test \
 badprog.test \
 block.test \
index 9eebb14..69cafd7 100644 (file)
@@ -136,6 +136,7 @@ auxdir2.test \
 backsl.test \
 backsl2.test \
 backsl3.test \
+backsl4.test \
 badline.test \
 badprog.test \
 block.test \
diff --git a/tests/backsl4.test b/tests/backsl4.test
new file mode 100755 (executable)
index 0000000..a593249
--- /dev/null
@@ -0,0 +1,51 @@
+#! /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 we diagnose and fix white spaces following backslash.
+# Report from Peter Muir.
+
+. ./defs || exit 1
+
+set -e
+
+echo AC_OUTPUT >>configure.in
+
+# Note: trailing whitespaces used during the test should not appear as
+# trailing whitespaces in this file, or they will get stripped by any
+# reasonable editor.
+
+echo 'bin_SCRIPTS = foo \ ' >Makefile.am
+cat >>Makefile.am <<'END'
+bar
+ok:
+       :
+END
+echo 'data_DATA = baz \  ' >>Makefile.am
+echo ' fum' >>Makefile.am
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE 2>stderr && exit 1
+cat stderr
+grep ':1:.*whitespace' stderr
+grep ':5:.*whitespace' stderr
+./configure
+# Older versions of Automake used to produce invalid Makefiles such input.
+$MAKE ok