[Top][All Lists]
[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
+:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: renamed objects and other languages,
Ralf Wildenhues <=