driver.
* tests/pr401b.test: Likewise.
* tests/pr401c.test: Likewise.
+ * tests/java-flat.test: Likewise, and properly update heading
+ comments.
+ * tests/java-nested.test: Likewise, but defining `parallel_tests'
+ to "yes" instead, for improved coverage in conjunction with the
+ sister test `java-flat.test'.
2011-05-20 Stefano Lattarini <stefano.lattarini@gmail.com>
2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+ tests defs: use `skip_' for skipping java-related tests
+ * tests/defs.in (java, javac): Use `skip_' to signal test
+ skipping.
+
+2011-05-04 Stefano Lattarini <stefano.lattarini@gmail.com>
+
tests defs: allow requirements for compilers (mostly dummy)
Most of the new requirements that are now accepted in `$required'
as consequence of this patch are still dummy. They are planned
superseded by the much more complete `maintclean.test'.
* tests/Makefile.am (TESTS): Update.
+2011-05-03 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java tests: use $PATH_SEPARATOR where appropriate
+ * tests/java-compile-run-nested.test: Use `$PATH_SEPARATOR', not
+ `:', to separate entries of extended PATH and CLASSPATH variables.
+ * tests/java-compile-run-flat.test: Likewise.
+
+2011-04-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java coverage: test JAVACFLAGS and AM_JAVACFLAGS
+ * tests/javaflags.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java coverage: test rebuild rules for java
+ * tests/java-rebuild.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-26 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java coverage: try to build and run a java program
+ * tests/java-compile-run-flat.test: New test, try to build and run
+ a "UNIX-style" java program (complete with wrapper shell script
+ and the like) with a "flat" source-tree setup (i.e., everything in
+ the top-level directory).
+ * tests/java-compile-nested.test: Likewise, but using a more
+ typical "nested" source-tree setup.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ test defs: new requirement for the default java interpreter
+ * tests/defs.in (for tool in $required): New requirement 'java'.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java tests: tweak and make stricter a couple of tests
+ * tests/javasubst.test: Use proper m4 quoting. Add trailing `:'
+ command. Enable `errexit' shell flag, and related changes.
+ Prefer cat + here-doc over echo to append to configure.in.
+ Make grepping of Makefile.in stricter. Add debugging output.
+ Improve heading comments.
+ * tests/javaprim.test: Likewise.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java coverage: add test on uninstall with JAVA primary
+ * tests/java-uninstall.test: New test.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java tests: require java compiler more properly
+ * tests/java-extra.test: Use "required=javac" instead of ad-hoc
+ configure check.
+ * tests/java-noinst.test: Likewise.
+
+2011-04-23 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java: allow both JAVA and nobase_JAVA in the same Makefile.am
+ * automake.in (handle_java): Also strip `nobase_' from the given
+ prefix, when needed.
+ * tests/java-clean.test: Update and extend.
+ * tests/java-compile-install.test: Likewise.
+ * tests/java-no-duplicate.test: Likewise.
+ * tests/java-sources.test: Likewise.
+ * tests/java-noinst.test: Likewise.
+ * tests/java-mix-dist-nodist.test: Renamed to ...
+ * tests/java-mix.test: ... this, and extended.
+ * tests/java-nobase.test: New test, still xfailing due to
+ unrelated issues.
+ * tests/Makefile.am (TESTS, XFAIL_TESTS): Update.
+
2011-04-22 Stefano Lattarini <stefano.lattarini@gmail.com>
testsuite: more environment sanitization
* NEWS: Update.
Report by Bruno Haible.
+2011-04-18 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ java: allow both dist_JAVA and nodist_JAVA in the same Makefile.am
+ Fixes automake bug#8434.
+ * automake.in (handle_java): Strip `dist_' and `nodist_' from
+ the given prefix. Define a new internal Makefile variable
+ `am__java_sources'. Related adjustments.
+ * lib/am/java.am (JAVAC, JAVAROOT, CLASSPATH_ENV): Define only the
+ first time this am file is processed.
+ (class%DIR%.stamp): Stamp file renamed ...
+ (class%NDIR%.stamp): ... to this, so that the `dist_' and `nodist_'
+ prefixes are stripped from the name of the stampfile. Adjust
+ declaration of dependencies by using the new automake-generated
+ internal variable `$(am__java_sources)'. In the rule, use `$@'
+ as the name of the target, rather than hard-coding it.
+ * tests/java.test: Update and extend.
+ * tests/java-no-duplicate.test: New test.
+ * tests/java-mix-dist-nodist.test: Likewise.
+ * tests/java-compile-and-install.test: Likewise.
+ * tests/java-clean.test: Likewise.
+ * tests/java-sources.test: Likewise.
+ * tests/Makefile.am (TESTS): Update.
+
+2011-04-06 Stefano Lattarini <stefano.lattarini@gmail.com>
+
+ coverage: more on java support EXTRA_ and noinst_ prefixes
+ * tests/java-extra.test: New test, checking support for the
+ prefix `EXTRA_' with the JAVA primary.
+ * tests/java-noinst.test: New test, checking support for the
+ prefix `noinst_' with the JAVA primary.
+ * tests/Makefile.am (TESTS): Update.
+
2011-04-10 Stefano Lattarini <stefano.lattarini@gmail.com>
test defs: fix 'javac' requirement for older JDK versions
java2.test \
java3.test \
java-check.test \
+java-clean.test \
java-empty-classpath.test \
javaprim.test \
javasubst.test \
-java-clean.test \
+javaflags.test \
+java-extra.test \
+java-noinst.test \
java-nobase.test \
java-compile-install.test \
+java-compile-run-flat.test \
+java-compile-run-nested.test \
java-sources.test \
java-no-duplicate.test \
java-mix.test \
+java-uninstall.test \
+java-rebuild.test \
ldadd.test \
ldflags.test \
lex.test \
java2.test \
java3.test \
java-check.test \
+java-clean.test \
java-empty-classpath.test \
javaprim.test \
javasubst.test \
-java-clean.test \
+javaflags.test \
+java-extra.test \
+java-noinst.test \
java-nobase.test \
java-compile-install.test \
+java-compile-run-flat.test \
+java-compile-run-nested.test \
java-sources.test \
java-no-duplicate.test \
java-mix.test \
+java-uninstall.test \
+java-rebuild.test \
ldadd.test \
ldflags.test \
lex.test \
# telling that source files are missing. Adding also the `-help'
# option seems to solve the problem.
echo "$me: running javac -version -help"
- javac -version -help || exit 77
+ javac -version -help || skip_ "java compiler not found"
+ ;;
+ java)
+ # See the comments above about `javac' for why we use also `-help'.
+ echo "$me: running java -version -help"
+ java -version -help || skip_ "java interpreter not found"
;;
makedepend)
echo "$me: running makedepend -f-"
--- /dev/null
+#! /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 <http://www.gnu.org/licenses/>.
+
+# Test on compilation and execution of Java class files.
+# Also meddle with wrapper scripts, as would be probably seen in a real
+# "UNIX-style" use case.
+# This test uses a "flat" setup for the source tree (i.e., everything in
+# the top-level directory), and forces the use of the old, non-parallel
+# testsuite driver. The sister test `java-compile-run-nested.test' do
+# similar checks with a more usual, "nested" setup, and using the newer
+# 'parallel-tests' driver.
+
+required='java javac'
+parallel_tests=no
+. ./defs || Exit 1
+
+set -e
+
+echo "AC_SUBST([PATH_SEPARATOR], ['$PATH_SEPARATOR'])" >> configure.in
+
+cat >> configure.in <<'END'
+AC_SUBST([JAVA], [java])
+AC_CONFIG_SRCDIR([PkgLocation.jin])
+AC_CONFIG_FILES([PkgLocation.java:PkgLocation.jin])
+AC_OUTPUT
+END
+
+## TOP-LEVEL SETUP AND TARGETS ##
+
+cat > Makefile.am <<'END'
+EXTRA_DIST = # Will be updated later.
+
+test-built:
+ ls -l $(srcdir) ;: For debugging.
+ test $(srcdir) = . || ls -l . ;: Likewise.
+ test -f $(srcdir)/Main.java
+ test -f $(srcdir)/HelloStream.java
+ test -f $(srcdir)/PkgLocation.jin
+ test -f PkgLocation.java
+ test -f HelloStream.class
+ test -f PkgLocation.class
+ test -f Main.class
+ test -f classjava.stamp
+
+test-installed:
+ ls -l $(javadir) ;: For debugging.
+ test -f $(javadir)/HelloStream.class
+ test -f $(javadir)/PkgLocation.class
+ test -f $(javadir)/Main.class
+ if find $(prefix) | grep '\.stamp$$'; then exit 1; else :; fi
+
+run-installed:
+ jprog_doing_installcheck=yes $(MAKE) $(AM_MAKEFLAGS) check
+
+check-local: test-built
+installcheck-local: test-installed run-installed
+
+.PHONY: test-built test-installed run-installed
+END
+
+## WRAPPER SCRIPT ##
+
+cat >> Makefile.am <<'END'
+bin_SCRIPTS = jprog
+
+edit_script = sed -e 's|[@]JAVA@|$(JAVA)|g' \
+ -e 's|[@]javadir@|$(javadir)|g' \
+ -e 's|[@]SHELL@|$(SHELL)|g' \
+ -e 's|[@]PATH_SEPARATOR@|$(PATH_SEPARATOR)|g'
+
+jprog: jprog.sh
+ rm -f $@ $@-t
+ $(edit_script) `test -f '$@.sh' || echo $(srcdir)/`$@.sh >$@-t
+ chmod a-w $@-t && chmod a+x $@-t && mv -f $@-t $@
+ sed 's/^/ | /' $@ ;: for debugging.
+
+EXTRA_DIST += jprog.sh
+CLEANFILES = jprog
+END
+
+cat > jprog.sh <<'END'
+#!@SHELL@
+CLASSPATH=${jprog_classpath-'@javadir@'}${CLASSPATH+"@PATH_SEPARATOR@$CLASSPATH"}
+export CLASSPATH
+case $# in
+ 0) exec @JAVA@ Main;;
+ *) exec @JAVA@ Main "$@";;
+esac
+END
+
+## JAVA SOURCES ##
+
+cat >> Makefile.am <<'END'
+javadir = $(pkgdatadir)/java
+
+dist_java_JAVA = Main.java HelloStream.java
+nodist_java_JAVA = PkgLocation.java
+END
+
+cat > PkgLocation.jin <<'END'
+public class PkgLocation {
+ public static String prefix() {
+ return new String("@prefix@");
+ }
+}
+END
+
+cat > Main.java <<'END'
+public class Main {
+ public static void main(String[] args) {
+ for (int i = 0; i < args.length; i++) {
+ if (args[i].equals("--print-prefix")) {
+ System.out.println(PkgLocation.prefix());
+ } else if (args[i].equals("--hello-stdout")) {
+ HelloStream.to(System.out);
+ } else if (args[i].equals("--hello-stderr")) {
+ HelloStream.to(System.err);
+ } else {
+ System.err.println("jprog: invalid option '" + args[i] +
+ "'");
+ System.exit(2);
+ }
+ }
+ System.exit(0);
+ }
+}
+END
+
+cat > HelloStream.java <<'END'
+import java.io.PrintStream;
+class HelloStream {
+ public static void to(PrintStream stream) {
+ stream.println("Hello, Stream!");
+ }
+}
+END
+
+## TESTS ##
+
+cat >> Makefile.am <<'END'
+## FIXME: Use AM_TESTS_ENVIRONMENT here when it becomes available.
+TESTS_ENVIRONMENT = \
+ if test x"$$jprog_doing_installcheck" != x"yes"; then \
+ jprog_classpath='$(abs_top_builddir):$(abs_top_srcdir)'; \
+ export jprog_classpath; \
+ PATH='$(abs_top_builddir)$(PATH_SEPARATOR)'$$PATH; \
+ export PATH; \
+ else \
+ unset jprog_classpath || :; \
+ PATH='$(prefix)/bin$(PATH_SEPARATOR)'$$PATH; \
+ export PATH; \
+ fi; \
+ config_time_prefix='@prefix@'; export config_time_prefix;
+
+TESTS = \
+ simple.test \
+ prefix.test \
+ stdout.test \
+ stderr.test \
+ badarg.test
+
+XFAIL_TESTS = badarg.test
+
+EXTRA_DIST += $(TESTS)
+END
+
+cat > simple.test <<'END'
+#!/bin/sh
+jprog
+END
+
+cat > prefix.test <<'END'
+#!/bin/sh
+jprefix=`jprog --print-prefix` || exit 1
+echo "$0: exp prefix: $config_time_prefix"
+echo "$0: got prefix: $jprefix"
+test x"$jprefix" = x"$config_time_prefix"
+END
+
+cat > stdout.test <<'END'
+#!/bin/sh
+rc=0
+jprog --hello-stdout >stdout.out 2>stdout.err || { echo \$?=$?; rc=1; }
+sed 's/^/out:/' <stdout.out # For debugging.
+sed 's/^/err:/' <stdout.err >&2 # Likewise.
+test -s stdout.err && rc=1
+test "`cat stdout.out`" = 'Hello, Stream!' || rc=1
+rm -f stdout.out stdout.err || rc=1
+exit $rc
+END
+
+cat > stderr.test <<'END'
+#!/bin/sh
+rc=0
+jprog --hello-stderr >stderr.out 2>stderr.err || { echo \$?=$?; rc=1; }
+sed 's/^/out:/' <stderr.out # For debugging.
+sed 's/^/err:/' <stderr.err >&2 # Likewise.
+test -s stderr.out && rc=1
+test "`cat stderr.err`" = 'Hello, Stream!' || rc=1
+rm -f stderr.out stderr.err || rc=1
+exit $rc
+END
+
+cat > badarg.test <<'END'
+#!/bin/sh
+jprog --bad-argument
+END
+
+chmod a+x *.test
+
+## DO CHECKS ##
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+# To have the parallel testsuite more verbose.
+VERBOSE=yes; export VERBOSE
+
+./configure --prefix="`pwd`/_inst"
+cat PkgLocation.java # For debugging.
+$MAKE check
+$MAKE install
+$MAKE test-installed
+$MAKE run-installed
+$MAKE distcheck
+
+:
--- /dev/null
+#! /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 <http://www.gnu.org/licenses/>.
+
+# Test on compilation and execution of Java class files.
+# Also meddle with wrapper scripts, as would be probably seen in a real
+# "UNIX-style" use case.
+# This test uses a typical "nested" source tree setup (i.e., different
+# components/aspects are separated into different subdirectories),
+# and uses the 'parallel-tests' testsuite driver. The sister test
+# `java-compile-run-flat.test' do similar checks with a "flat" setup
+# (i.e., everything in the top-level directory), and forcing the use
+# of the older non-parallel 'simple-tests' driver.
+
+required='java javac'
+parallel_tests=yes
+. ./defs || Exit 1
+
+set -e
+
+echo "AC_SUBST([PATH_SEPARATOR], ['$PATH_SEPARATOR'])" >> configure.in
+
+cat >> configure.in <<'END'
+AC_SUBST([JAVA], [java])
+AC_CONFIG_SRCDIR([jprog/PkgLocation.jin])
+AC_SUBST([jprogdatadir], ['${pkgdatadir}'])
+AC_SUBST([jprogclassdir], ['${jprogdatadir}/jprog'])
+AC_CONFIG_FILES([jprog/PkgLocation.java:jprog/PkgLocation.jin])
+AC_CONFIG_FILES([jprog/Makefile bin/Makefile tests/Makefile])
+AC_OUTPUT
+END
+
+## TOP-LEVEL SETUP AND TARGETS ##
+
+cat > Makefile.am <<'END'
+SUBDIRS = bin jprog tests
+
+test-built:
+ ls -l $(srcdir)/* ;: For debugging.
+ test $(srcdir) = . || ls -l * ;: Likewise.
+ test -f $(srcdir)/jprog/Main.java
+ test -f $(srcdir)/jprog/HelloStream.java
+ test -f $(srcdir)/jprog/PkgLocation.jin
+ test -f jprog/PkgLocation.java
+ test -f jprog/HelloStream.class
+ test -f jprog/Main.class
+ test -f jprog/PkgLocation.class
+ test -f jprog/classjprogclass.stamp
+
+test-installed:
+ ls -l $(jprogclassdir) ;: For debugging.
+ test -f $(jprogclassdir)/HelloStream.class
+ test -f $(jprogclassdir)/Main.class
+ test -f $(jprogclassdir)/PkgLocation.class
+ if find $(prefix) | grep '\.stamp$$'; then exit 1; else :; fi
+
+run-installed:
+ jprog_doing_installcheck=yes $(MAKE) $(AM_MAKEFLAGS) check
+
+check-local: test-built
+installcheck-local: test-installed run-installed
+
+.PHONY: test-built test-installed run-installed
+END
+
+## WRAPPER SCRIPT ##
+
+mkdir bin
+
+cat > bin/Makefile.am <<'END'
+bin_SCRIPTS = jprog
+
+edit_script = sed -e 's|[@]JAVA@|$(JAVA)|g' \
+ -e 's|[@]jprogdatadir@|$(jprogdatadir)|g' \
+ -e 's|[@]SHELL@|$(SHELL)|g' \
+ -e 's|[@]PATH_SEPARATOR@|$(PATH_SEPARATOR)|g'
+
+jprog: jprog.sh
+ rm -f $@ $@-t
+ $(edit_script) `test -f '$@.sh' || echo $(srcdir)/`$@.sh >$@-t
+ chmod a-w $@-t && chmod a+x $@-t && mv -f $@-t $@
+ sed 's/^/ | /' $@ ;: for debugging.
+
+EXTRA_DIST = jprog.sh
+CLEANFILES = jprog
+END
+
+cat > bin/jprog.sh <<'END'
+#!@SHELL@
+CLASSPATH=${jprog_classpath-'@jprogdatadir@'}${CLASSPATH+"@PATH_SEPARATOR@$CLASSPATH"}
+export CLASSPATH
+case $# in
+ 0) exec @JAVA@ jprog.Main;;
+ *) exec @JAVA@ jprog.Main "$@";;
+esac
+END
+
+## JAVA SOURCES ##
+
+mkdir jprog
+
+cat > jprog/Makefile.am <<'END'
+dist_jprogclass_JAVA = Main.java HelloStream.java
+nodist_jprogclass_JAVA = PkgLocation.java
+END
+
+cat > jprog/PkgLocation.jin <<'END'
+package jprog;
+public class PkgLocation {
+ public static String prefix() {
+ return new String("@prefix@");
+ }
+}
+END
+
+cat > jprog/Main.java <<'END'
+package jprog;
+import jprog.PkgLocation;
+import jprog.HelloStream;
+public class Main {
+ public static void main(String[] args) {
+ for (int i = 0; i < args.length; i++) {
+ if (args[i].equals("--print-prefix")) {
+ System.out.println(PkgLocation.prefix());
+ } else if (args[i].equals("--hello-stdout")) {
+ HelloStream.to(System.out);
+ } else if (args[i].equals("--hello-stderr")) {
+ HelloStream.to(System.err);
+ } else {
+ System.err.println("jprog: invalid option '" + args[i] +
+ "'");
+ System.exit(2);
+ }
+ }
+ System.exit(0);
+ }
+}
+END
+
+cat > jprog/HelloStream.java <<'END'
+package jprog;
+import java.io.PrintStream;
+class HelloStream {
+ public static void to(PrintStream stream) {
+ stream.println("Hello, Stream!");
+ }
+}
+END
+
+## TESTS ##
+
+mkdir tests
+
+cat > tests/Makefile.am <<'END'
+## FIXME: Use AM_TESTS_ENVIRONMENT here when it becomes available.
+TESTS_ENVIRONMENT = \
+ if test x"$$jprog_doing_installcheck" != x"yes"; then \
+ jprog_classpath='$(abs_top_builddir):$(abs_top_srcdir)'; \
+ export jprog_classpath; \
+ PATH='$(abs_top_builddir)/bin$(PATH_SEPARATOR)'$$PATH; \
+ export PATH; \
+ else \
+ unset jprog_classpath || :; \
+ PATH='$(prefix)/bin$(PATH_SEPARATOR)'$$PATH; \
+ export PATH; \
+ fi; \
+ config_time_prefix='@prefix@'; export config_time_prefix;
+
+TESTS = \
+ simple.test \
+ prefix.test \
+ stdout.test \
+ stderr.test \
+ badarg.test
+
+XFAIL_TESTS = badarg.test
+
+EXTRA_DIST = $(TESTS)
+END
+
+cat > tests/simple.test <<'END'
+#!/bin/sh
+jprog
+END
+
+cat > tests/prefix.test <<'END'
+#!/bin/sh
+jprefix=`jprog --print-prefix` || exit 1
+echo "$0: exp prefix: $config_time_prefix"
+echo "$0: got prefix: $jprefix"
+test x"$jprefix" = x"$config_time_prefix"
+END
+
+cat > tests/stdout.test <<'END'
+#!/bin/sh
+rc=0
+jprog --hello-stdout >stdout.out 2>stdout.err || { echo \$?=$?; rc=1; }
+sed 's/^/out:/' <stdout.out # For debugging.
+sed 's/^/err:/' <stdout.err >&2 # Likewise.
+test -s stdout.err && rc=1
+test "`cat stdout.out`" = 'Hello, Stream!' || rc=1
+rm -f stdout.out stdout.err || rc=1
+exit $rc
+END
+
+cat > tests/stderr.test <<'END'
+#!/bin/sh
+rc=0
+jprog --hello-stderr >stderr.out 2>stderr.err || { echo \$?=$?; rc=1; }
+sed 's/^/out:/' <stderr.out # For debugging.
+sed 's/^/err:/' <stderr.err >&2 # Likewise.
+test -s stderr.out && rc=1
+test "`cat stderr.err`" = 'Hello, Stream!' || rc=1
+rm -f stderr.out stderr.err || rc=1
+exit $rc
+END
+
+cat > tests/badarg.test <<'END'
+#!/bin/sh
+jprog --bad-argument
+END
+
+chmod a+x tests/*.test
+
+## DO CHECKS ##
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+# To have the parallel testsuite more verbose.
+VERBOSE=yes; export VERBOSE
+
+./configure --prefix="`pwd`/_inst"
+cat jprog/PkgLocation.java # For debugging.
+$MAKE check
+$MAKE install
+$MAKE test-installed
+$MAKE run-installed
+$MAKE distcheck
+
+:
--- /dev/null
+#! /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 <http://www.gnu.org/licenses/>.
+
+# Check use of EXTRA with the JAVA primary. Also test interaction
+# of JAVA with conditionals (it's natural to test it here, since
+# EXTRA_JAVA exists mostly for ensuring interoperation with Automake
+# conditionals).
+
+required=javac
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AM_CONDITIONAL([COND], [test x"$cond" = x"yes"])
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+javadir = $(pkgdatadir)/java
+
+EXTRA_JAVA = Class1.java Class2.java Class3.java
+
+java_JAVA = Class1.java
+
+if COND
+java_JAVA += Class2.java
+else !COND
+java_JAVA += Class3.java
+endif !COND
+
+Class3.java: Makefile
+ echo 'class Class3 {}' > $@
+CLEANFILES = Class3.java
+END
+
+echo "class Class1 {}" > Class1.java
+echo "class Class2 {}" > Class2.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure cond=yes
+$MAKE
+ls -l
+test -f Class1.class
+test -f Class2.class
+test ! -f Class3.class
+test ! -f Class3.java
+
+$MAKE distclean
+
+./configure cond=no
+$MAKE
+ls -l
+test -f Class1.class
+test ! -f Class2.class
+test -f Class3.class
+test -f Class3.java
+
+:
--- /dev/null
+#! /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 <http://www.gnu.org/licenses/>.
+
+# Make sure that noinst_JAVA causes generated *.class files not to
+# be installed.
+
+required=javac
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+noinst_JAVA = 1.java
+dist_noinst_JAVA = 2.java
+nodist_noinst_JAVA = 3.java
+nobase_noinst_JAVA = 4.java
+nobase_dist_noinst_JAVA = 5.java
+nobase_nodist_noinst_JAVA = 6.java
+END
+
+for i in 1 2 3 4 5 6; do
+ echo "class Class$i {}" > $i.java
+done
+
+$ACLOCAL
+$AUTOMAKE
+$AUTOCONF
+
+./configure --prefix="`pwd`/_inst"
+
+$MAKE
+ls -l
+for i in 1 2 3 4 5 6; do
+ test -f Class$i.class
+done
+
+$MAKE install
+test -d _inst && { ls -l _inst; Exit 1; }
+
+:
--- /dev/null
+#! /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 <http://www.gnu.org/licenses/>.
+
+# 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 ...
+
+:
--- /dev/null
+#! /bin/sh
+# Copyright (C) 1998, 2001, 2002, 2004, 2007 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/>.
+
+# Check uninstallation of Java class files.
+
+required=javac
+. ./defs || Exit 1
+
+set -e
+
+cat >> configure.in << 'END'
+AC_OUTPUT
+END
+
+cat > Makefile.am << 'END'
+javadir = $(prefix)/java
+java_JAVA = Foo.java
+nobase_java_JAVA = Foo2.java
+nobase_dist_java_JAVA = Bar.java
+nodist_java_JAVA = Baz.java
+
+# Java files are not distributed by default, so we distribute
+# one "by hand" ...
+EXTRA_DIST = Foo.java
+# ... and make the other one generated.
+Foo2.java:
+ rm -f $@ $@-t
+ echo 'class bClass {}' > $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+# Explicitly declared as `nodist_', so generate it.
+Baz.java:
+ rm -f $@ $@-t
+ echo 'class Baz {}' > $@-t
+ echo 'class Baz2 {}' >> $@-t
+ chmod a-w $@-t && mv -f $@-t $@
+
+DISTCLEANFILES = Baz.java Foo2.java
+END
+
+echo 'class aClass {}' > Foo.java
+echo 'class Zardoz {}' > Bar.java
+
+$ACLOCAL
+$AUTOCONF
+$AUTOMAKE
+
+./configure --prefix="`pwd`"/_inst
+javadir=_inst/java
+
+check_uninstallation()
+{
+ test ! -r $javadir/aClass.class
+ test ! -r $javadir/bClass.class
+ test ! -r $javadir/Zardoz.class
+ test ! -r $javadir/Baz.class
+ test ! -r $javadir/Baz2.class
+ test -f $javadir/Foo.class
+ test -f $javadir/Bar.class
+ test -f $javadir/xClass.class
+ test -f $javadir/aclass.class
+}
+
+$MAKE
+ls -l
+$MAKE install
+: > $javadir/Foo.class
+: > $javadir/Bar.class
+: > $javadir/xClass.class
+: > $javadir/aclass.class
+ls -l $javadir
+$MAKE uninstall
+ls -l $javadir
+check_uninstallation
+
+# FIXME: "make uninstall" should continue to work also after "make clean",
+# but currently this doesn't happen. See automake bug#8540.
+$MAKE install
+ls -l $javadir
+$MAKE clean
+ls -l
+$MAKE uninstall
+ls -l $javadir
+#check_uninstallation
+
+$MAKE distcheck
+
+:
--- /dev/null
+#! /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 <http://www.gnu.org/licenses/>.
+
+# Check support for $(JAVACFLAGS) and $(AM_JAVACFLAGS).
+
+. ./defs || Exit 1
+
+set -e
+
+cat > fake-javac <<'END'
+#!/bin/sh
+echo "$*" > javaflags.list
+END
+chmod a+x fake-javac
+
+# Remove JAVAC from the environment, so that it won't interfere
+# with `make -e' below.
+unset JAVAC || :
+
+cat >> configure.in <<'END'
+AC_PROG_CC
+# Simulate presence of the java compiler using our fake-javac script.
+AC_SUBST([JAVAC], ['$(abs_top_srcdir)'/fake-javac])
+AC_OUTPUT
+END
+
+cat > Makefile.am <<'END'
+foodir = $(prefix)
+foo_JAVA = bar.java
+AM_JAVACFLAGS = __am_flags__
+END
+
+$ACLOCAL
+$AUTOMAKE
+
+grep '\$(JAVACFLAGS).*\$(AM_JAVACFLAGS)' Makefile.in && Exit 1
+
+: > bar.java
+
+$AUTOCONF
+./configure
+env JAVACFLAGS=__user_flags__ $MAKE -e
+
+ls -l
+
+cat javaflags.list
+grep '__am_flags__.*__user_flags__' javaflags.list
+
+:
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# Test to make sure JAVA variable can be defined.
+# Test to make sure JAVA variable can be defined by AC_SUBST.
. ./defs || Exit 1
-echo 'AC_SUBST(JAVA)' >> configure.in
+cat >> configure.in << 'END'
+AC_SUBST([JAVA])
+END
cat > Makefile.am << 'END'
javadir = $(datadir)/java
java_JAVA = a.java b.java c.java
END
-$ACLOCAL || Exit 1
+$ACLOCAL
$AUTOMAKE
+
+grep -i java Makefile.in # For debugging.
+grep '^JAVA = *@JAVA@ *$' Makefile.in
+
+:
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-# Test to make sure redefining JAVAC works.
+# Test to make sure redefining JAVAC with AC_SUBST works.
. ./defs || Exit 1
-echo 'AC_SUBST(JAVAC)' >> configure.in
+set -e
+
+cat >> configure.in << 'END'
+AC_SUBST([JAVAC])
+END
cat > Makefile.am << 'END'
javadir = $(datadir)/java
java_JAVA = a.java b.java c.java
END
-$ACLOCAL || Exit 1
-$AUTOMAKE || Exit 1
+$ACLOCAL
+$AUTOMAKE
+
+grep -i java Makefile.in # For debugging.
+grep '^JAVAC = *@JAVAC@ *$' Makefile.in
-grep 'JAVAC.*@JAVAC@' Makefile.in
+: