summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefano Lattarini <stefano.lattarini@gmail.com>2012-02-29 19:50:18 +0100
committerStefano Lattarini <stefano.lattarini@gmail.com>2012-02-29 19:50:18 +0100
commit9b81d15f529aa5a67455d5e56f8e562540f4dba8 (patch)
tree6df093c9c7286eb65f3d023d92e379647919de1c
parent7828edbe2c2a4a7952d0a4932979eb193c724b14 (diff)
parent51f61dfb1e861062aaa1d73fab71278c85fe0594 (diff)
downloadautomake-9b81d15f529aa5a67455d5e56f8e562540f4dba8.tar.gz
Merge branch 'maint'
* maint: vala: fix 'valac' calls for projects with mixed Vala/C vala: expose automake bug#10894
-rw-r--r--THANKS1
-rw-r--r--automake.in27
-rw-r--r--tests/list-of-tests.mk1
-rwxr-xr-xtests/vala-mix2.test121
4 files changed, 136 insertions, 14 deletions
diff --git a/THANKS b/THANKS
index 9d3c32cd6..d6080e3be 100644
--- a/THANKS
+++ b/THANKS
@@ -299,6 +299,7 @@ Phil Nelson phil@cs.wwu.edu
Philip Fong pwlfong@users.sourceforge.net
Philip S Tellis philip@ncst.ernet.in
Пухальский Юрий Андреевич pooh@cryptopro.ru
+Quentin Glidic sardemff7+gnu@sardemff7.net
Rainer Orth ro@techfak.uni-bielefeld.de
Rafael Laboissiere laboissiere@psy.mpg.de
Rainer Tammer tammer@tammer.net
diff --git a/automake.in b/automake.in
index 8530d6a44..8ea1587b0 100644
--- a/automake.in
+++ b/automake.in
@@ -5816,20 +5816,19 @@ sub lang_vala_finish_target ($$)
my ($self, $name) = @_;
my $derived = canonicalize ($name);
- my $varname = $derived . '_SOURCES';
- my $var = var ($varname);
+ my $var = var "${derived}_SOURCES";
+ return unless $var;
- if ($var)
+ my @vala_sources = grep { /\.vala$/ } ($var->value_as_list_recursive);
+
+ foreach my $vala_file (@vala_sources)
{
- foreach my $file ($var->value_as_list_recursive)
- {
- $output_rules .= "\$(srcdir)/$file: \$(srcdir)/${derived}_vala.stamp\n"
- . "\t\@if test -f \$@; then :; else rm -f \$(srcdir)/${derived}_vala.stamp; fi\n"
- . "\t\@if test -f \$@; then :; else \\\n"
- . "\t \$(MAKE) \$(AM_MAKEFLAGS) \$(srcdir)/${derived}_vala.stamp; \\\n"
- . "\tfi\n"
- if $file =~ s/(.*)\.vala$/$1.c/;
- }
+ (my $c_file = $vala_file) =~ s/(.*)\.vala$/$1.c/;
+ $output_rules .= "\$(srcdir)/$c_file: \$(srcdir)/${derived}_vala.stamp\n"
+ . "\t\@if test -f \$@; then :; else rm -f \$(srcdir)/${derived}_vala.stamp; fi\n"
+ . "\t\@if test -f \$@; then :; else \\\n"
+ . "\t \$(MAKE) \$(AM_MAKEFLAGS) \$(srcdir)/${derived}_vala.stamp; \\\n"
+ . "\tfi\n"
}
# Add rebuild rules for generated header and vapi files
@@ -5879,7 +5878,7 @@ sub lang_vala_finish_target ($$)
my $silent = silent_flag ();
$output_rules .=
- "\$(srcdir)/${derived}_vala.stamp: \$(${derived}_SOURCES)\n".
+ "\$(srcdir)/${derived}_vala.stamp: @vala_sources\n".
# Since the C files generated from the vala sources depend on the
# ${derived}_vala.stamp file, we must ensure its timestamp is older than
# those of the C files generated by the valac invocation below (this is
@@ -5887,7 +5886,7 @@ sub lang_vala_finish_target ($$)
# Thus we need to create the stamp file *before* invoking valac, and to
# move it to its final location only after valac has been invoked.
"\t${silent}rm -f \$\@ && echo stamp > \$\@-t\n".
- "\t${verbose}\$(am__cd) \$(srcdir) && ${compile} \$(${derived}_SOURCES)\n".
+ "\t${verbose}\$(am__cd) \$(srcdir) && $compile @vala_sources\n".
"\t${silent}mv -f \$\@-t \$\@\n";
push_dist_common ("${derived}_vala.stamp");
diff --git a/tests/list-of-tests.mk b/tests/list-of-tests.mk
index 28a6b2a75..b36d76cfe 100644
--- a/tests/list-of-tests.mk
+++ b/tests/list-of-tests.mk
@@ -1158,6 +1158,7 @@ vala4.test \
vala5.test \
vala-vpath.test \
vala-mix.test \
+vala-mix2.test \
vars.test \
vars3.test \
vartar.test \
diff --git a/tests/vala-mix2.test b/tests/vala-mix2.test
new file mode 100755
index 000000000..88d281888
--- /dev/null
+++ b/tests/vala-mix2.test
@@ -0,0 +1,121 @@
+#! /bin/sh
+# Copyright (C) 2012 Free Software Foundation, Inc.
+#
+# This program 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.
+#
+# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Vala sources, C and C++ sources and C and C++ headers in the same
+# program. Functional test. See automake bug#10894.
+
+required='valac cc c++ GNUmake'
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in <<'END'
+AC_PROG_CC
+AC_PROG_CXX
+AM_PROG_VALAC
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+bin_PROGRAMS = zardoz
+AM_VALAFLAGS = --profile=posix
+zardoz_SOURCES = zardoz.vala foo.h bar.c baz.c zen.hh master.cxx
+END
+
+cat > zardoz.vala <<'END'
+int main ()
+{
+ stdout.printf ("foo is alive\n");
+ return 0;
+}
+END
+
+cat > foo.h <<'END'
+int foo;
+int bar (void);
+int baz (void);
+END
+
+cat > bar.c <<'END'
+#include "foo.h"
+int bar (void) { return foo + baz (); }
+END
+
+cat > baz.c <<'END'
+#include "foo.h"
+extern int foo = 0;
+int baz (void) { return 0; }
+END
+
+cat > zen.hh <<'END'
+#include <iostream>
+END
+
+cat > master.cxx <<'END'
+#include "zen.hh"
+void chatty (void) { std::cout << "Hello, stranger!\n"; }
+END
+
+$ACLOCAL
+$AUTOMAKE -a
+$AUTOCONF
+
+./configure
+
+$MAKE all
+ls -l # For debugging.
+
+have_generated_files ()
+{
+ test -f zardoz_vala.stamp
+ test -f zardoz.c
+}
+
+# Our vala-related rules must create stamp files and intermediate
+# C files.
+have_generated_files
+
+# Remake rules are not uselessly triggered.
+$MAKE -q
+$MAKE -n | $FGREP vala.stamp && Exit 1
+
+# But are triggered when they should.
+for file in zardoz.vala foo.h bar.c baz.c zen.hh master.cxx; do
+ $sleep
+ echo '& choke me !' >> $file
+ $MAKE && Exit 1
+ $sleep
+ sed '$d' $file > t
+ mv -f t $file
+ $MAKE
+done
+
+# Check the distribution.
+$MAKE distcheck
+
+# Stamp files and intermediate C files should *not* be removed
+# by "make clean".
+$MAKE clean
+ls -l # For debugging.
+have_generated_files
+
+# But stamp files should be removed by "maintainer-clean" (the
+# behaviour w.r.t. intermediate C files is still unclear, and
+# better left undefined for the moment).
+$MAKE maintainer-clean
+ls *vala*.stamp | grep . && Exit 1
+
+: