]> sourceware.org Git - automake.git/commitdiff
For PR automake/371 and PR automake/372:
authorAlexandre Duret-Lutz <adl@gnu.org>
Fri, 29 Nov 2002 17:52:08 +0000 (17:52 +0000)
committerAlexandre Duret-Lutz <adl@gnu.org>
Fri, 29 Nov 2002 17:52:08 +0000 (17:52 +0000)
* automake.in (rule_define): Honor inference rules with multiple
targets, and warn when they are used.
* tests/suffix11.test: New file.
* tests/Makefile.am (TESTS): Add suffix11.test.
Reported by Duncan Gibson.

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

index 48d7c745a5fd115ba28193f045d42ad92eac746c..70c0ba3a2f6ac0815271ee9654b005ce134a3b37 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2002-11-29  Alexandre Duret-Lutz  <adl@gnu.org>
+
+       For PR automake/371 and PR automake/372:
+       * automake.in (rule_define): Honor inference rules with multiple
+       targets, and warn when they are used.
+       * tests/suffix11.test: New file.
+       * tests/Makefile.am (TESTS): Add suffix11.test.
+       Reported by Duncan Gibson.
+
 2002-11-28  Alexandre Duret-Lutz  <adl@gnu.org>
 
        For PR automake/370:
diff --git a/THANKS b/THANKS
index 68ad6420cf249debf8c60b6544533b8287f084bd..84c8016b3caa38fb74f5d2b9e8cca5d31de60541 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -47,6 +47,7 @@ Derek R. Price                derek.price@openavenue.com
 Dieter Baron           dillo@stieltjes.smc.univie.ac.at
 Dmitry Mikhin          dmitrym@acres.com.au
 Doug Evans             devans@cygnus.com
+Duncan Gibson          duncan@thermal.esa.int
 Eleftherios Gkioulekas lf@amath.washington.edu
 Elrond                 Elrond@Wunder-Nett.org
 Enrico Scholz          enrico.scholz@informatik.tu-chemnitz.de
index 9c040de9224fa6f53df4a1d8aa3c9f7d45079878..8540e230413c096dd5555f77fb0156d811d972c0 100755 (executable)
@@ -7533,18 +7533,35 @@ sub rule_define ($$$$$)
       $target_name{$target}{$c} = $realtarget;
     }
 
-  # Check the rule for being a suffix rule. If so, store in a hash.
-  # Either it's a rule for two known extensions...
-  if ($target =~ /^($KNOWN_EXTENSIONS_PATTERN)($KNOWN_EXTENSIONS_PATTERN)$/
-      # ...or it's a rule with unknown extensions (.i.e, the rule looks like
-      # `.foo.bar:' but `.foo' or `.bar' are not declared in SUFFIXES
-      # and are not known language extensions).
-      # Automake will complete SUFFIXES from @suffixes automatically
-      # (see handle_footer).
-      || ($target =~ /$SUFFIX_RULE_PATTERN/o && accept_extensions($1)))
-    {
-      register_suffix_rule ($where, $1, $2);
-    }
+  # We honor inference rules with multiple targets because many
+  # make support this and people use it.  However this is disallowed
+  # by POSIX.  We'll print a warning later.
+  my $target_count = 0;
+  my $inference_rule_count = 0;
+  for my $t (split (' ', $target))
+    {
+      ++$target_count;
+      # Check the rule for being a suffix rule. If so, store in a hash.
+      # Either it's a rule for two known extensions...
+      if ($t =~ /^($KNOWN_EXTENSIONS_PATTERN)($KNOWN_EXTENSIONS_PATTERN)$/
+         # ...or it's a rule with unknown extensions (.i.e, the rule
+         # looks like `.foo.bar:' but `.foo' or `.bar' are not
+         # declared in SUFFIXES and are not known language
+         # extensions).  Automake will complete SUFFIXES from
+         # @suffixes automatically (see handle_footer).
+         || ($t =~ /$SUFFIX_RULE_PATTERN/o && accept_extensions($1)))
+       {
+         ++$inference_rule_count;
+         register_suffix_rule ($where, $1, $2);
+       }
+    }
+
+  # POSIX allow multiple targets befor the colon, but disallow
+  # definitions of multiple Inference rules.  It's also
+  # disallowed to mix plain targets with inference rules.
+  msg ('portability', $where,
+       "Inference rules can have only one target before the colon (POSIX).")
+    if $inference_rule_count > 0 && $target_count > 1;
 
   return @conds;
 }
index ca44c93c717d14c784a4107b24206b49dbfe59d0..800a41fa06c58136af87afca6a24948db10c93fb 100644 (file)
@@ -387,6 +387,7 @@ suffix7.test \
 suffix8.test \
 suffix9.test \
 suffix10.test \
+suffix11.test \
 symlink.test \
 symlink2.test \
 symlink3.test \
index 1f9ac248efae0e56f54ccb3f26ebd84b1495dd76..b71b293b171f9aefc5019d76114af7fb144de21b 100644 (file)
@@ -480,6 +480,7 @@ suffix7.test \
 suffix8.test \
 suffix9.test \
 suffix10.test \
+suffix11.test \
 symlink.test \
 symlink2.test \
 symlink3.test \
diff --git a/tests/suffix11.test b/tests/suffix11.test
new file mode 100755 (executable)
index 0000000..4dac1e5
--- /dev/null
@@ -0,0 +1,63 @@
+#! /bin/sh
+# Copyright (C) 2002  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 autoconf; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# Tests that Automake understand multiple suffix rules on the same line.
+# PR/371 and PR/372: Reported by Duncan Gibson.
+
+. ./defs || exit 1
+
+set -e
+
+cat >>configure.in <<EOF
+AC_PROG_CC
+AC_OUTPUT
+EOF
+
+cat >Makefile.am << 'END'
+bin_PROGRAMS = foo bar baz
+foo_SOURCES = foo.x_
+bar_SOURCES = bar.y_
+baz_SOURCES = baz1.x_ baz2.y_
+.y_.c .x_.c:
+       cp $< $@
+  .z_.c   .w_.x_ :
+       cp $< $@
+
+
+print:
+       @echo BEGIN: $(foo_OBJECTS) :END
+       @echo BEGIN: $(bar_OBJECTS) :END
+       @echo BEGIN: $(baz_OBJECTS) :END
+END
+
+$ACLOCAL
+$AUTOCONF
+# What we do is not portable.  Automake should warn.
+$AUTOMAKE -a 2>stderr && exit 1
+cat stderr
+grep 'Inference rules can have only one target before the colon' stderr
+# But this should work anyway.
+$AUTOMAKE -a -Wno-portability
+./configure
+env OBJEXT=foo $MAKE -e SHELL=/bin/sh print >stdout
+cat stdout
+grep 'BEGIN: foo.foo :END' stdout
+grep 'BEGIN: bar.foo :END' stdout
+grep 'BEGIN: baz1.foo baz2.foo :END' stdout
This page took 0.043438 seconds and 5 git commands to generate.