automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: renamed objects and other languages


From: Ralf Wildenhues
Subject: Re: renamed objects and other languages
Date: Tue, 7 Apr 2009 23:20:57 +0200
User-agent: Mutt/1.5.18 (2008-05-17)

[ <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  <address@hidden>  (tiny change)
            Stepan Kasal  <address@hidden>
            Ralf Wildenhues  <address@hidden>

        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
+:




reply via email to

[Prev in Thread] Current Thread [Next in Thread]