[ <http://thread.gmane.org/gmane.comp.sysutils.automake.patches/2767> ]
Hello Florian, Stepan, I just found a two-year-old bug report of you, with a patch and a test. Please accept my apologies for having overlooked this one; it looks good. * Florian Briegel at mpia-hd wrote on Tue, May 01, 2007 at 05:32:02PM CEST: > > this patch fixes a problem using foreign languages (Qt, Ice, ...) with > renamed > objects. E.g. you have the language .baz and want to include it into your > c-program: > > AUTOMAKE_OPTIONS = subdir-objects > SUFFIXES = .baz .c > # we fake here: > .baz.c: > cp $< $@ > > bin_PROGRAMS = foo > foo_SOURCES = foo.c sub/bar.baz > foo_CFLAGS = -I. > > The current automake produces this: > > --- snip ---- > sub/foo-bar.o: sub/bar.baz > @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) > $(AM_CPPFLAGS) $(CPPFLAGS) $(foo_CFLAGS) $(CFLAGS) -MT sub/foo-bar.o -M > D -MP -MF sub/$(DEPDIR)/foo-bar.Tpo -c -o sub/foo-bar.o > `test -f 'sub/bar.baz' || echo '$(srcdir)/'`sub/bar.baz [...] > Which is wrong. Indeed. > The patch feeds the generated c-file to the c-compiler instead of the > baz-file: > I have also included a testscript suffix13.test. It is not in the diff, > because "svn diff -u" has not included it in the diff file. Thank you. I have applied the patch as shown below to the git 'next' branch of Automake (it will be in version 1.11), and added you to THANKS. Cheers, Ralf 2009-04-07 Florian Briegel <brie...@zone42.de> (tiny change) Stepan Kasal <ska...@redhat.com> Ralf Wildenhues <ralf.wildenh...@gmx.de> Fix renamed objects with subdir-objects and other languages. * automake.in: Fixed bug when building with renamed objects and foreign languages. * tests/suffix13.test: New test. * tests/Makefile.am: Adjust. * THANKS: Update. Reports by Florian Briegel and Stepan Kasal. diff --git a/automake.in b/automake.in index 1be3e18..2577ffb 100755 --- a/automake.in +++ b/automake.in @@ -1919,7 +1919,16 @@ sub handle_single_transform ($$$$$%) { my $obj_sans_ext = substr ($object, 0, - length ($this_obj_ext)); - my $full_ansi = $full; + my $full_ansi; + if ($directory ne '') + { + $full_ansi = $directory . '/' . $base . $extension; + } + else + { + $full_ansi = $base . $extension; + } + if ($lang->ansi && option 'ansi2knr') { $full_ansi =~ s/$KNOWN_EXTENSIONS_PATTERN$/\$U$&/; diff --git a/tests/Makefile.am b/tests/Makefile.am index b0bb273..d90eb6c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -645,6 +645,7 @@ suffix9.test \ suffix10.test \ suffix11.test \ suffix12.test \ +suffix13.test \ symlink.test \ symlink2.test \ symlink3.test \ diff --git a/tests/suffix13.test b/tests/suffix13.test new file mode 100755 index 0000000..dda4cfb --- /dev/null +++ b/tests/suffix13.test @@ -0,0 +1,75 @@ +#! /bin/sh +# Copyright (C) 2002, 2003, 2006, 2009 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., 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +# Tests that Automake understands suffix rules with renamed objects +# and subdir objects. +# Reported by Florian Briegel. + +. ./defs || exit 1 + +set -e + +cat >>configure.in <<EOF +AC_PROG_CC +AM_PROG_CC_C_O +AC_OUTPUT +EOF + +cat >Makefile.am << 'END' +AUTOMAKE_OPTIONS = subdir-objects +SUFFIXES = .baz .c +.baz.c: + case $@ in sub/*) $(MKDIR_P) sub;; *) :;; esac + cp $< $@ + +DISTCLEANFILES = sub/bar.c + +bin_PROGRAMS = foo +foo_SOURCES = foo.c sub/bar.baz +foo_CFLAGS = +END + +mkdir sub +cat > sub/bar.baz <<'END' +extern int foo (); +int main () { return foo (); } +END +cat > foo.c <<'END' +int foo () { return 0; } +END + +$ACLOCAL +$AUTOCONF +$AUTOMAKE -a +./configure +$MAKE + +$MAKE distcheck +$MAKE distclean + +# Should also work without subdir-objects + +sed '/subdir-objects/d' < Makefile.am > t +mv -f t Makefile.am +$AUTOMAKE --force +./configure +$MAKE +$MAKE distcheck +: