From: Stefano Lattarini Date: Tue, 26 Apr 2011 08:12:43 +0000 (+0200) Subject: java coverage: test rebuild rules for java X-Git-Tag: ng-0.5a~123^2~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5a46e0340900136d66dee39450117a70a4190d45;p=thirdparty%2Fautomake.git java coverage: test rebuild rules for java * tests/java-rebuild.test: New test. * tests/Makefile.am (TESTS): Update. --- diff --git a/ChangeLog b/ChangeLog index 26c177e8c..9c7182899 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-04-26 Stefano Lattarini + + java coverage: test rebuild rules for java + * tests/java-rebuild.test: New test. + * tests/Makefile.am (TESTS): Update. + 2011-04-26 Stefano Lattarini java coverage: try to build and run a java program diff --git a/tests/Makefile.am b/tests/Makefile.am index ff56b3317..0e55109b2 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -446,6 +446,7 @@ java-sources.test \ java-no-duplicate.test \ java-mix.test \ java-uninstall.test \ +java-rebuild.test \ ldadd.test \ ldflags.test \ lex.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index ea6b48508..a0e6c7048 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -719,6 +719,7 @@ java-sources.test \ java-no-duplicate.test \ java-mix.test \ java-uninstall.test \ +java-rebuild.test \ ldadd.test \ ldflags.test \ lex.test \ diff --git a/tests/java-rebuild.test b/tests/java-rebuild.test new file mode 100755 index 000000000..75be5f733 --- /dev/null +++ b/tests/java-rebuild.test @@ -0,0 +1,126 @@ +#! /bin/sh +# Copyright (C) 2011 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 . + +# Test rebuild rules for Java class files. + +required='javac' +. ./defs || Exit 1 + +set -e + +cat >> configure.in <<'END' +AC_OUTPUT +END + +cat > Makefile.am <<'END' +AM_JAVACFLAGS = -verbose +foodir = $(datadir)/java +foo_JAVA = a.java +dist_foo_JAVA = d.java +nodist_foo_JAVA = n.java +nobase_foo_JAVA = Nobase.java +nobase_dist_foo_JAVA = NobaseDist.java +nobase_nodist_foo_JAVA = NobaseNoDist.java +END + +echo 'class _x {}' > a.java +echo 'class x_ {}' > d.java +echo 'class a {} class d {}' > n.java +echo 'class Nobase_Foo {} class Nobase_Bar {}' > Nobase.java +echo 'class NobaseDist {}' > NobaseDist.java +echo 'class NobaseNoDist {}' > NobaseNoDist.java + +$ACLOCAL +$AUTOCONF +$AUTOMAKE + +all_classes='_x x_ a d Nobase_Foo Nobase_Bar NobaseDist NobaseNoDist' + +for vpath in : false; do + + if $vpath; then + srcdir=.. + mkdir build + cd build + else + srcdir=. + fi + + $srcdir/configure + $MAKE + ls -l # For debugging. + + # Sanity check. + test -f classfoo.stamp + for cls in $all_classes; do + test -f $cls.class + done + + # When the stampfile is removed, all the *.class files should + # be considered out-of-date. + echo timestamp > older + $sleep + rm -f classfoo.stamp + $MAKE + for cls in $all_classes; do + is_newest $cls.class older + done + + # When only a java file is modified, only the *.class files derived from + # it should be updated. + # The strings we loop on here have the following format: + # ``JAVA-FILES-TO-BE-TOUCHED -- CLASSES-THAT-SHOULD-BE-UPDATED'' + for args in \ + 'a -- _x' \ + 'd -- x_' \ + 'n -- a d' \ + 'a d Nobase -- _x x_ Nobase_Foo Nobase_Bar' \ + 'n NobaseDist -- a d NobaseDist' \ + 'd NobaseNoDist -- x_ NobaseNoDist' \ + "a d n Nobase NobaseDist NobaseNoDist -- $all_classes" \ + ; do + set $args + touched_javas= + while test $# -gt 0; do + if test x"$1" = x"--"; then + shift + break + else + touched_javas="$touched_javas $1" + shift + fi + done + updated_classes=$* + echo timestamp > older + $sleep + for j in $touched_javas; do + touch $srcdir/$j.java + done + $MAKE + is_newest classfoo.stamp older + for cls in $all_classes; do + case " $updated_classes " in + *" $cls "*) is_newest $cls.class older;; + *) is_newest older $cls.class;; + esac + done + done # $args ... + + cd $srcdir + +done # $vpath ... + +: