From: Alexandre Duret-Lutz Date: Fri, 29 Nov 2002 17:52:08 +0000 (+0000) Subject: For PR automake/371 and PR automake/372: X-Git-Tag: Release-1-7b~359 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=1ea7f6e853ee3669b4a6046e7233ecdbbd58fcf0;p=automake.git 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. --- diff --git a/ChangeLog b/ChangeLog index 48d7c745..70c0ba3a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2002-11-29 Alexandre Duret-Lutz + + 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 For PR automake/370: diff --git a/THANKS b/THANKS index 68ad6420..84c8016b 100644 --- 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 diff --git a/automake.in b/automake.in index 9c040de9..8540e230 100755 --- a/automake.in +++ b/automake.in @@ -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; } diff --git a/tests/Makefile.am b/tests/Makefile.am index ca44c93c..800a41fa 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -387,6 +387,7 @@ suffix7.test \ suffix8.test \ suffix9.test \ suffix10.test \ +suffix11.test \ symlink.test \ symlink2.test \ symlink3.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 1f9ac248..b71b293b 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -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 index 00000000..4dac1e52 --- /dev/null +++ b/tests/suffix11.test @@ -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 <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