+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:
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
$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;
}
suffix8.test \
suffix9.test \
suffix10.test \
+suffix11.test \
symlink.test \
symlink2.test \
symlink3.test \
suffix8.test \
suffix9.test \
suffix10.test \
+suffix11.test \
symlink.test \
symlink2.test \
symlink3.test \
--- /dev/null
+#! /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