This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[PATCH] Fix --enable-java-maintainer-mode
- From: Jakub Jelinek <jakub at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org, java-patches at gcc dot gnu dot org
- Date: Fri, 26 Jan 2007 14:17:00 -0500
- Subject: [PATCH] Fix --enable-java-maintainer-mode
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
Hi!
gcjh.stamp rule doesn't create only $(generic_header_files), but also
$(inner_nat_headers), but the Makefile rules weren't telling that
dependency to make. So, if e.g. the generated files were removed,
make -j16 would result in missing dependencies.
Also, the *.jar/*.class files in libjava/testsuite/ were all created
by hand and thus e.g. changing the testcases in --enable-java-maintainer-mode
doesn't result in their rebuilding.
Fixed thusly, tested both without and with --enable-java-maintainer-mode.
Ok for trunk?
2007-01-26 Jakub Jelinek <jakub@redhat.com>
* Makefile.am (generic_header_files): Add $(inner_nat_headers).
* testsuite/Makefile.am (check-dejaGNU): Depend on compile-tests.
(MYGCJH): New variable.
(compile-tests): New goal.
* Makefile.in: Rebuilt.
* testsuite/Makefile.in: Rebuilt.
--- libjava/Makefile.am (revision 121063)
+++ libjava/Makefile.am (revision 121204)
@@ -391,19 +391,6 @@ omitted_headers = java/lang/ClassLoader.
java/lang/reflect/Field.h java/lang/reflect/Method.h \
java/lang/reflect/Proxy.h gnu/gcj/runtime/ExtensionClassLoader.h
-generic_header_files = $(ordinary_header_files) $(xlib_nat_headers)
-
-MYGCJH = gjavah
-
-$(generic_header_files): gcjh.stamp
-
-gcjh.stamp: classpath/lib/compile-classes
-if JAVA_MAINTAINER_MODE
- $(MYGCJH) --cni --all $(srcdir)/classpath/lib \
- --cmdfile=$(srcdir)/headers.txt -d $(srcdir) --force
-endif
- echo > gcjh.stamp
-
inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \
java/io/ObjectInputStream$$GetField.h \
java/nio/DirectByteBufferImpl$$ReadWrite.h \
@@ -416,6 +403,20 @@ inner_nat_headers = java/io/ObjectOutput
gnu/java/nio/PipeImpl$$SinkChannelImpl.h \
gnu/java/nio/PipeImpl$$SourceChannelImpl.h
+generic_header_files = $(ordinary_header_files) $(inner_nat_headers) \
+ $(xlib_nat_headers)
+
+MYGCJH = gjavah
+
+$(generic_header_files): gcjh.stamp
+
+gcjh.stamp: classpath/lib/compile-classes
+if JAVA_MAINTAINER_MODE
+ $(MYGCJH) --cni --all $(srcdir)/classpath/lib \
+ --cmdfile=$(srcdir)/headers.txt -d $(srcdir) --force
+endif
+ echo > gcjh.stamp
+
nat_headers = $(ordinary_header_files) $(inner_nat_headers)
nat_headers_install = $(ordinary_header_files)
--- libjava/testsuite/Makefile.am (revision 121063)
+++ libjava/testsuite/Makefile.am (revision 121204)
@@ -19,3 +19,66 @@ RUNTEST = "`if [ -f $(top_srcdir)/../dej
## Tell dejagnu whether the interpreter is enabled.
AM_RUNTESTFLAGS = INTERPRETER=$(INTERPRETER)
+
+MYGCJH = gjavah
+
+.PHONY: compile-tests
+
+check-am: compile-tests
+
+compile-tests:
+if JAVA_MAINTAINER_MODE
+ for test in `cd $(srcdir) > /dev/null; \
+ find libjava.cni libjava.jni libjava.jvmti libjava.lang \
+ libjava.loader libjava.verify -name \*.java`; do \
+ testjar=$(srcdir)/`echo $$test | sed -e 's/\.java$$/\.jar/'`; \
+ testdep=; \
+ genheader=; \
+ case "$$test" in \
+ libjava.loader/dummy.java) \
+ testjar=$(srcdir)/libjava.loader/dummy.class;; \
+ libjava.loader/MyLoader.java) \
+ continue;; \
+ libjava.loader/*.java) \
+ testdep="libjava.loader/MyLoader.java";; \
+ libjava.jni/register2.java) \
+ ;; \
+ libjava.jni/*.java) \
+ genheader=-jni;; \
+ libjava.jvmti/*.java|libjava.cni/*.java) \
+ genheader=-cni;; \
+ esac; \
+ if test -f $$testjar; then \
+ if ! test $(srcdir)/$$test -nt $$testjar; then \
+ test -z "$$testdep" && continue; \
+ test $(srcdir)/$$testdep -nt $$testjar || continue; \
+ fi; \
+ fi; \
+ echo Compiling $$test; \
+ testtmpdir=`echo $$test | sed -e 's,/,_,g'`T; \
+ rm -rf $$testtmpdir; $(mkdir_p) $$testtmpdir; \
+ if test -n "$$testdep"; then \
+ $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+ $(top_builddir)/libgcj-$(gcc_version).jar::$testtmpdir \
+ -d $$testtmpdir $(srcdir)/$$testdep || exit; \
+ fi; \
+ $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+ $(top_builddir)/libgcj-$(gcc_version).jar:$$testtmpdir \
+ -d $$testtmpdir $(srcdir)/$$test || exit; \
+ case "$$test" in \
+ libjava.loader/dummy.java) \
+ cp $$testtmpdir/dummy.class $$testjar;; \
+ *) \
+ $(JAR) cf $$testjar \
+ `ls $$testtmpdir/*.class \
+ | sed -e 's,^,-C ,;s,/\([^/]*\.class\)$$, \1,'` || exit ;; \
+ esac; \
+ if test -n "$$genheader"; then \
+ $(MYGCJH) $$genheader $$testtmpdir/*.class \
+ -bootclasspath $(top_builddir)/libgcj-$(gcc_version).jar \
+ -d $$testtmpdir/ || exit; \
+ mv $$testtmpdir/*.h $(srcdir)/`dirname $$test`/ 2>/dev/null; \
+ fi; \
+ rm -rf $$testtmpdir; \
+ done
+endif
--- libjava/Makefile.in (revision 121063)
+++ libjava/Makefile.in (revision 121204)
@@ -7729,8 +7729,6 @@ omitted_headers = java/lang/ClassLoader.
java/lang/reflect/Field.h java/lang/reflect/Method.h \
java/lang/reflect/Proxy.h gnu/gcj/runtime/ExtensionClassLoader.h
-generic_header_files = $(ordinary_header_files) $(xlib_nat_headers)
-MYGCJH = gjavah
inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \
java/io/ObjectInputStream$$GetField.h \
java/nio/DirectByteBufferImpl$$ReadWrite.h \
@@ -7743,6 +7741,10 @@ inner_nat_headers = java/io/ObjectOutput
gnu/java/nio/PipeImpl$$SinkChannelImpl.h \
gnu/java/nio/PipeImpl$$SourceChannelImpl.h
+generic_header_files = $(ordinary_header_files) $(inner_nat_headers) \
+ $(xlib_nat_headers)
+
+MYGCJH = gjavah
nat_headers = $(ordinary_header_files) $(inner_nat_headers)
nat_headers_install = $(ordinary_header_files)
xlib_nat_headers = $(gnu_awt_xlib_header_files) $(gnu_gcj_xlib_header_files)
--- libjava/testsuite/Makefile.in (revision 121063)
+++ libjava/testsuite/Makefile.in (revision 121204)
@@ -320,6 +320,7 @@ RUNTEST = "`if [ -f $(top_srcdir)/../dej
else echo runtest; fi` $(AM_RUNTESTFLAGS)"
AM_RUNTESTFLAGS = INTERPRETER=$(INTERPRETER)
+MYGCJH = gjavah
all: all-am
.SUFFIXES:
@@ -518,6 +519,65 @@ uninstall-am: uninstall-info-am
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
uninstall uninstall-am uninstall-info-am
+
+.PHONY: compile-tests
+
+check-am: compile-tests
+
+compile-tests:
+@JAVA_MAINTAINER_MODE_TRUE@ for test in `cd $(srcdir) > /dev/null; \
+@JAVA_MAINTAINER_MODE_TRUE@ find libjava.cni libjava.jni libjava.jvmti libjava.lang \
+@JAVA_MAINTAINER_MODE_TRUE@ libjava.loader libjava.verify -name \*.java`; do \
+@JAVA_MAINTAINER_MODE_TRUE@ testjar=$(srcdir)/`echo $$test | sed -e 's/\.java$$/\.jar/'`; \
+@JAVA_MAINTAINER_MODE_TRUE@ testdep=; \
+@JAVA_MAINTAINER_MODE_TRUE@ genheader=; \
+@JAVA_MAINTAINER_MODE_TRUE@ case "$$test" in \
+@JAVA_MAINTAINER_MODE_TRUE@ libjava.loader/dummy.java) \
+@JAVA_MAINTAINER_MODE_TRUE@ testjar=$(srcdir)/libjava.loader/dummy.class;; \
+@JAVA_MAINTAINER_MODE_TRUE@ libjava.loader/MyLoader.java) \
+@JAVA_MAINTAINER_MODE_TRUE@ continue;; \
+@JAVA_MAINTAINER_MODE_TRUE@ libjava.loader/*.java) \
+@JAVA_MAINTAINER_MODE_TRUE@ testdep="libjava.loader/MyLoader.java";; \
+@JAVA_MAINTAINER_MODE_TRUE@ libjava.jni/register2.java) \
+@JAVA_MAINTAINER_MODE_TRUE@ ;; \
+@JAVA_MAINTAINER_MODE_TRUE@ libjava.jni/*.java) \
+@JAVA_MAINTAINER_MODE_TRUE@ genheader=-jni;; \
+@JAVA_MAINTAINER_MODE_TRUE@ libjava.jvmti/*.java|libjava.cni/*.java) \
+@JAVA_MAINTAINER_MODE_TRUE@ genheader=-cni;; \
+@JAVA_MAINTAINER_MODE_TRUE@ esac; \
+@JAVA_MAINTAINER_MODE_TRUE@ if test -f $$testjar; then \
+@JAVA_MAINTAINER_MODE_TRUE@ if ! test $(srcdir)/$$test -nt $$testjar; then \
+@JAVA_MAINTAINER_MODE_TRUE@ test -z "$$testdep" && continue; \
+@JAVA_MAINTAINER_MODE_TRUE@ test $(srcdir)/$$testdep -nt $$testjar || continue; \
+@JAVA_MAINTAINER_MODE_TRUE@ fi; \
+@JAVA_MAINTAINER_MODE_TRUE@ fi; \
+@JAVA_MAINTAINER_MODE_TRUE@ echo Compiling $$test; \
+@JAVA_MAINTAINER_MODE_TRUE@ testtmpdir=`echo $$test | sed -e 's,/,_,g'`T; \
+@JAVA_MAINTAINER_MODE_TRUE@ rm -rf $$testtmpdir; $(mkdir_p) $$testtmpdir; \
+@JAVA_MAINTAINER_MODE_TRUE@ if test -n "$$testdep"; then \
+@JAVA_MAINTAINER_MODE_TRUE@ $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+@JAVA_MAINTAINER_MODE_TRUE@ $(top_builddir)/libgcj-$(gcc_version).jar::$testtmpdir \
+@JAVA_MAINTAINER_MODE_TRUE@ -d $$testtmpdir $(srcdir)/$$testdep || exit; \
+@JAVA_MAINTAINER_MODE_TRUE@ fi; \
+@JAVA_MAINTAINER_MODE_TRUE@ $(GCJ) -C -g -w --encoding=UTF-8 -bootclasspath \
+@JAVA_MAINTAINER_MODE_TRUE@ $(top_builddir)/libgcj-$(gcc_version).jar:$$testtmpdir \
+@JAVA_MAINTAINER_MODE_TRUE@ -d $$testtmpdir $(srcdir)/$$test || exit; \
+@JAVA_MAINTAINER_MODE_TRUE@ case "$$test" in \
+@JAVA_MAINTAINER_MODE_TRUE@ libjava.loader/dummy.java) \
+@JAVA_MAINTAINER_MODE_TRUE@ cp $$testtmpdir/dummy.class $$testjar;; \
+@JAVA_MAINTAINER_MODE_TRUE@ *) \
+@JAVA_MAINTAINER_MODE_TRUE@ $(JAR) cf $$testjar \
+@JAVA_MAINTAINER_MODE_TRUE@ `ls $$testtmpdir/*.class \
+@JAVA_MAINTAINER_MODE_TRUE@ | sed -e 's,^,-C ,;s,/\([^/]*\.class\)$$, \1,'` || exit ;; \
+@JAVA_MAINTAINER_MODE_TRUE@ esac; \
+@JAVA_MAINTAINER_MODE_TRUE@ if test -n "$$genheader"; then \
+@JAVA_MAINTAINER_MODE_TRUE@ $(MYGCJH) $$genheader $$testtmpdir/*.class \
+@JAVA_MAINTAINER_MODE_TRUE@ -bootclasspath $(top_builddir)/libgcj-$(gcc_version).jar \
+@JAVA_MAINTAINER_MODE_TRUE@ -d $$testtmpdir/ || exit; \
+@JAVA_MAINTAINER_MODE_TRUE@ mv $$testtmpdir/*.h $(srcdir)/`dirname $$test`/ 2>/dev/null; \
+@JAVA_MAINTAINER_MODE_TRUE@ fi; \
+@JAVA_MAINTAINER_MODE_TRUE@ rm -rf $$testtmpdir; \
+@JAVA_MAINTAINER_MODE_TRUE@ done
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
Jakub