From: Alexandre Duret-Lutz Date: Fri, 16 Nov 2001 10:32:41 +0000 (+0000) Subject: * automake.in (SUFFIX_RULE_PATTERN): Add '_(){}$@' to the X-Git-Tag: Release-1-5b~22 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=20bd171198815e5e9dbcf9d2dc9f62d6ad14b0f8;p=automake.git * automake.in (SUFFIX_RULE_PATTERN): Add '_(){}$@' to the set of accepted characters in extensions. (rule_define): Convert '.o' and '.obj' into '$(OBJEXT)' for internall use. * tests/suffix6.test: Ensure that `.o' is handled like `.$(OBJEXT)'. --- diff --git a/ChangeLog b/ChangeLog index 8ef11b41..e7b1783a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2001-11-16 Alexandre Duret-Lutz + + * automake.in (SUFFIX_RULE_PATTERN): Add '_(){}$@' to the + set of accepted characters in extensions. + (rule_define): Convert '.o' and '.obj' into '$(OBJEXT)' for + internall use. + * tests/suffix6.test: Ensure that `.o' is handled like `.$(OBJEXT)'. + 2001-11-16 Alexandre Duret-Lutz * automake.texi (Suffixes): Don't require SUFFIXES, but document diff --git a/automake.in b/automake.in index b15a9635..d9726782 100755 --- a/automake.in +++ b/automake.in @@ -137,7 +137,7 @@ my $TARGET_PATTERN='[$a-zA-Z_.@][-.a-zA-Z0-9_(){}/$+@]*'; my $RULE_PATTERN = "^($TARGET_PATTERN(?:(?:\\\\\n|\\s)+$TARGET_PATTERN)*) *:([^=].*|)\$"; -my $SUFFIX_RULE_PATTERN = '^(\.[a-zA-Z0-9+]+)(\.[a-zA-Z0-9+]+)$'; +my $SUFFIX_RULE_PATTERN = '^(\.[a-zA-Z0-9_(){}$+@]+)(\.[a-zA-Z0-9_(){}$+@]+)$'; # Only recognize leading spaces, not leading tabs. If we recognize # leading tabs here then we need to make the reader smarter, because # otherwise it will think rules like `foo=bar; \' are errors. @@ -6609,26 +6609,32 @@ sub rule_define ($$$$) $target_conditional{$target}{$cond} = $where; } - # 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)$/) - { - $suffix_rules{$1} = $2; - verbose "Sources ending in $1 become $2"; - push @suffixes, $1, $2; - } + 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). - elsif ($target =~ /$SUFFIX_RULE_PATTERN/o) + || ($target =~ /$SUFFIX_RULE_PATTERN/o && accept_extensions($1))) { - $suffix_rules{$1} = $2; + my $internal_ext = $2; + + # When tranforming sources to objects, Automake uses the + # %suffix_rules to move from each source extension to + # `.$(OBJEXT)', not to `.o' or `.obj'. However some people + # define suffix rules for `.o' or `.obj', so internally we will + # consider these extensions equivalent to `.$(OBJEXT)'. We + # CANNOT rewrite the target (i.e., automagically replace `.o' + # and `.obj' by `.$(OBJEXT)' in the output), or warn the user + # that (s)he'd better use `.$(OBJEXT)', because Automake itself + # output suffix rules for `.o' or `.obj'... + $internal_ext = '.$(OBJEXT)' if ($2 eq '.o' || $2 eq '.obj'); + + $suffix_rules{$1} = $internal_ext; verbose "Sources ending in $1 become $2"; push @suffixes, $1, $2; - accept_extensions($1); } return 1; diff --git a/tests/suffix6.test b/tests/suffix6.test index 72bb2a1b..3ab398b1 100755 --- a/tests/suffix6.test +++ b/tests/suffix6.test @@ -1,18 +1,20 @@ #! /bin/sh # Test to make sure Automake supports implicit rules with dot-less -# extensions. +# extensions. Also make sure that `.o' is handled like `.$(OBJEXT)'. . $srcdir/defs || exit 1 cat > Makefile.am << 'END' -SUFFIXES = a b .$(OBJEXT) +SUFFIXES = a b .$(OBJEXT) c .o bin_PROGRAMS = foo -foo_SOURCES = fooa +foo_SOURCES = fooa fuc ab: cp $< $@ b.$(OBJEXT): cp $< $@ +c.o: + cp $< $@ END : > fooa @@ -20,7 +22,9 @@ END $ACLOCAL || exit 1 $AUTOMAKE || exit 1 -# Automake must figure that fooa translates to foo.o using the -# following rules: +# Automake must figure that fooa translates to foo.$(OBJEXT) and +# foo.$(OBJEXT) using the following rules: # fooa --[ab]--> foob --[b.$(OBJEXT)]--> foo.$(OBJEXT) -grep '_OBJECTS.*foo\.$(OBJEXT)' Makefile.in || exit 1 +grep '_OBJECTS.* foo\.$(OBJEXT)' Makefile.in || exit 1 +# fuc --[c.o]--> fu.$(OBJEXT) ## This is really meant ! +grep '_OBJECTS.* fu\.$(OBJEXT)' Makefile.in || exit 1