[m-rev.] for review: install java grade with mmc --make
Peter Wang
novalazy at gmail.com
Tue Oct 20 13:31:48 AEDT 2009
Branches: main
Use mmc --make to install Java grades. The makefile rules in library/Mmakefile
did not install .opt files into <prefix>/lib/mercury/ints/java. When
intermodule optimisation was enabled with a Java grade, the Mercury compiler
would read the .opt files from <prefix>/lib/mercury/ints, which could be from
*any* grade (they are only installed to work around problems with Mmake).
Mmakefile:
Force mmc --make to be used to install Java grades.
browser/Mmakefile:
library/Mmakefile:
mdbcomp/Mmakefile:
ssdb/Mmakefile:
Delete rules for building libraries in the Java grade with Mmake.
Move --no-libgrade options to *_FLAGS files.
library/Mmakefile:
Create the jmercury -> ../java symlink at the `mmake depend' step.
Pass -sourcepath . to javac so it can find the jmercury/runtime/*.java
files.
browser/MDB_FLAGS.in:
compiler/COMP_FLAGS.in:
library/LIB_FLAGS.in:
mdbcomp/MDBCOMP_FLAGS.in:
ssdb/SSDB_FLAGS.in:
Add --no-libgrade options so that mmc --make libFOO.install only
installs the main grade.
Add --no-java-classpath so that the .jar files from the installed
compiler aren't used.
Tell the Java compiler about .jar files that each directory depends on.
README.Java:
Remove a mention of Mmake with the java grade.
diff --git a/Mmakefile b/Mmakefile
index cec607b..04d25ed 100644
--- a/Mmakefile
+++ b/Mmakefile
@@ -621,9 +621,9 @@ install_grades: install_main
gc_grade=`scripts/ml --grade $${grade} --print-gc-grade`; \
IWS=`/bin/pwd`/install_grade_dir.$${grade}; \
( \
- if [ "$${grade}" = "erlang" ]; then \
- MMAKE_USE_MMC_MAKE=yes; \
- fi; \
+ case $${grade} in \
+ java*|erlang*) MMAKE_USE_MMC_MAKE=yes; \
+ esac; \
scripts/prepare_install_dir $${IWS} && \
( cd $${IWS}/boehm_gc && \
$(SUBDIR_MMAKE) MC=mmc GRADE=$${grade} WORKSPACE=$${IWS} \
diff --git a/README.Java b/README.Java
index c2e06a4..3d0baf0 100644
--- a/README.Java
+++ b/README.Java
@@ -165,16 +165,10 @@ Q. So how do I enable Java-level debugging?
A. By default, javac already generates line number and source file debugging
information. You can include local variable debugging information by
- specifying "--target-debug" when invoking the Mercury compiler, or by
- setting the JAVACFLAGS variable to include "-g" when invoking mmake,
- e.g.
+ specifying "--target-debug" when invoking the Mercury compiler, e.g.
mmc --make --java --target-debug <progname>
- or
-
- mmake GRADE=java JAVACFLAGS=-g <progname>
-
You can then use Sun's "jdb" debugging tool, which comes
as part of the Java SDK distribution, to debug your program.
For more information, see the documentation for javac and jdb.
diff --git a/browser/MDB_FLAGS.in b/browser/MDB_FLAGS.in
index 54aa8f4..f7eb5b8 100644
--- a/browser/MDB_FLAGS.in
+++ b/browser/MDB_FLAGS.in
@@ -6,6 +6,7 @@
--no-shlib-linker-use-install-name
--force-disable-tracing
--no-ssdb
+--no-libgrade
--generate-mmc-deps
-I../library
-I../mdbcomp
@@ -23,4 +24,8 @@
-L../trace
-L../mdbcomp
-L../browser
+--no-java-classpath
+--java-classpath ../library/mer_rt.jar
+--java-classpath ../library/mer_std.jar
+--java-classpath ../mdbcomp/mer_mdbcomp.jar
--config-file ../scripts/Mercury.config.bootstrap
diff --git a/browser/Mmakefile b/browser/Mmakefile
index e3b023c..df29358 100644
--- a/browser/Mmakefile
+++ b/browser/Mmakefile
@@ -89,8 +89,6 @@ LD_LIBFLAGS-libmer_browser.dylib = -install_name \
#-----------------------------------------------------------------------------#
-JAVACFLAGS = -classpath $(LIBRARY_DIR):$(MDBCOMP_DIR)
-
MTAGS = $(SCRIPTS_DIR)/mtags
LN = ln
@@ -222,26 +220,6 @@ dates:
#-----------------------------------------------------------------------------#
-JARS = $(BROWSER_LIB_NAME).jar
-
-.PHONY: jars
-jars: classes
- echo jmercury/*.class > $(BROWSER_LIB_NAME).classes
- $(JAR) $(JAR_CREATE_FLAGS) $(BROWSER_LIB_NAME).jar @$(BROWSER_LIB_NAME).classes
- $(JAR) i $(BROWSER_LIB_NAME).jar
- $(RM) $(BROWSER_LIB_NAME).classes
-
-JAVAS = $(wildcard jmercury/*.java)
-
-.PHONY:
-classes: javas
- $(JAVAC) $(ALL_JAVACFLAGS) $(JAVAS)
-
-.PHONY: javas
-javas: $(BROWSER_LIB_NAME).javas
-
-#-----------------------------------------------------------------------------#
-
.PHONY: os cs ss ils
ifneq ($(MMAKE_USE_MMC_MAKE),yes)
os: $($(BROWSER_LIB_NAME).os)
@@ -272,12 +250,7 @@ realclean_local:
# Installation targets
.PHONY: install
-ifeq ("$(findstring ssdebug,$(GRADE))","ssdebug")
-# The ssdebug grade requires the interface files.
-install: install_library install_ints
-else
install: install_library
-endif
.PHONY: install_dirs
install_dirs:
@@ -302,15 +275,13 @@ install_library:
else ifneq (,$(findstring java,$(GRADE)))
.PHONY: install_ints
-install_ints: lib$(BROWSER_LIB_NAME).install_ints
+install_ints:
.PHONY: install_init
install_init:
.PHONY: install_library
-install_library: jars
- mkdir -p $(INSTALL_JAVA_LIBRARY_DIR)
- cp $(JARS) $(INSTALL_JAVA_LIBRARY_DIR)
+install_library: lib$(BROWSER_LIB_NAME).install
else
diff --git a/compiler/COMP_FLAGS.in b/compiler/COMP_FLAGS.in
index cfee1d8..fbc54ef 100644
--- a/compiler/COMP_FLAGS.in
+++ b/compiler/COMP_FLAGS.in
@@ -22,5 +22,6 @@
--erlang-include-directory ../library/Mercury/hrls
--erlang-include-directory ../mdbcomp/Mercury/hrls
--erlang-include-directory ../ssdb/Mercury/hrls
+--no-java-classpath
--no-main
--config-file ../scripts/Mercury.config.bootstrap
diff --git a/library/LIB_FLAGS.in b/library/LIB_FLAGS.in
index 3ecdab0..338cb2c 100644
--- a/library/LIB_FLAGS.in
+++ b/library/LIB_FLAGS.in
@@ -9,6 +9,7 @@
--no-shlib-linker-use-install-name
--trace minimum
--no-ssdb
+--no-libgrade
--c-include-directory ../boehm_gc
--c-include-directory ../boehm_gc/include
--c-include-directory ../runtime
@@ -19,4 +20,5 @@
-L../trace
-L../mdbcomp
-L../browser
+--no-java-classpath
--config-file ../scripts/Mercury.config.bootstrap
diff --git a/library/Mmakefile b/library/Mmakefile
index e383f70..545fcc0 100644
--- a/library/Mmakefile
+++ b/library/Mmakefile
@@ -116,6 +116,9 @@ MCFLAGS += -R$(FINAL_INSTALL_MERC_LIB_DIR) \
-R$(FINAL_INSTALL_MERC_GC_LIB_DIR)
endif
+# Let javac find jmercury/runtime/*.java files.
+JAVACFLAGS += -sourcepath .
+
MTAGS = $(SCRIPTS_DIR)/mtags
LN = ln
@@ -167,7 +170,7 @@ mercury: lib_std
#-----------------------------------------------------------------------------#
.PHONY: depend
-depend: LIB_FLAGS $(STD_LIB_NAME).depend
+depend: LIB_FLAGS java_symlinks $(STD_LIB_NAME).depend
.PHONY: check
check: $(STD_LIB_NAME).check
@@ -243,48 +246,38 @@ ils: $(STD_LIB_NAME).ils
javas: $(STD_LIB_NAME).javas
endif
-# The compiler names Java files differently to the original source files to
-# avoid keywords. Instead of replicating that logic here we just use a
-# wildcard to find the file names.
-JAVAS = $(wildcard jmercury/*.java)
-RUNTIME_JAVAS = $(wildcard jmercury/runtime/*.java)
-
-# We need to invoke javac on all of the classes at the same time,
-# rather than compiling them separately. This is needed because
-# otherwise javac doesn't handle cyclic dependencies between different
-# modules.
-classes: javas java_symlinks
- $(JAVAC) $(ALL_JAVACFLAGS) $(JAVAS)
- $(JAVAC) $(ALL_JAVACFLAGS) $(RUNTIME_JAVAS)
-
-# javac expects to find the sources for symbols named mercury.runtime.* in
-# mercury/runtime/*, but in our sources those symbols actually come from
+# javac expects to find the sources for symbols named jmercury.runtime.* in
+# jmercury/runtime/*, but in our sources those symbols actually come from
# java/runtime/*. So we set up a symbolic link to help javac find the way to
# the sources.
.PHONY: java_symlinks
+.PHONY: install_mer_rt
+
+ifeq ("$(findstring java,$(GRADE))","java")
+
java_symlinks:
[ -d jmercury ] || mkdir jmercury
[ -d jmercury/runtime ] || ln -s ../../java/runtime jmercury/runtime
-# Once all of the library classes have been compiled, we put them in a single
-# jar file. At this point we also add the runtime classes to a jar file.
-# Note that this stage makes use of the symbolic links created earlier to
-# ensure that the path names are correct within the jar files.
-# We also compile NATIVE_SO here and copy it into the library directory.
-
-JARS = $(STD_LIB_NAME).jar $(RT_LIB_NAME).jar
-
-# We list the classes in a temporary file to avoid overlong command lines.
-# We ignore the exit status of the last two commands because NATIVE_SO is not
-# an essential part of the Mercury standard library for the Java
-# implementation. Users should be able to run programs in grade Java without
-# any architecture-specific objects.
-.PHONY: jars
-jars: classes
- echo jmercury/*.class > $(STD_LIB_NAME).classes
- $(JAR) $(JAR_CREATE_FLAGS) $(STD_LIB_NAME).jar @$(STD_LIB_NAME).classes
- $(JAR) i $(STD_LIB_NAME).jar
- $(RM) $(STD_LIB_NAME).classes
+install_mer_rt: $(RT_LIB_NAME).jar
+ mkdir -p $(INSTALL_JAVA_LIBRARY_DIR)
+ cp $(RT_LIB_NAME).jar $(INSTALL_JAVA_LIBRARY_DIR)
+
+else
+
+java_symlinks:
+
+install_mer_rt:
+
+endif
+
+# mmc --make must be used to install the java grade.
+ifeq ($(MMAKE_USE_MMC_MAKE),yes)
+$(STD_LIB_NAME).jar: libmer_std
+endif
+
+$(RT_LIB_NAME).jar: java_symlinks
+ $(JAVAC) $(ALL_JAVACFLAGS) jmercury/runtime/*.java
$(JAR) $(JAR_CREATE_FLAGS) $(RT_LIB_NAME).jar jmercury/runtime/*.class
$(JAR) i $(RT_LIB_NAME).jar
# -+cd jmercury/runtime && mmake $(NATIVE_SO)
@@ -356,7 +349,7 @@ endif
ifneq ($(MMAKE_USE_MMC_MAKE),yes)
ifeq ("$(findstring java,$(GRADE))","java")
-lib_std: jars
+lib_std: $(STD_LIB_NAME).jar $(RT_LIB_NAME).jar $(NATIVE_SO)
endif
endif
@@ -456,7 +449,7 @@ realclean_local:
rm -rf jmercury
rm -f mr_int.class mr_float.class mr_char.class
rm -f mr_int\$$*.class mr_float\$$*.class mr_char\$$*.class
- rm -f $(JARS) $(NATIVE_SO)
+ rm -f $(STD_LIB_NAME).jar $(RT_LIB_NAME).jar $(NATIVE_SO)
rm -f erlang_conf.hrl
#-----------------------------------------------------------------------------#
@@ -530,46 +523,21 @@ install_strong_name: library_strong_name.sn
else
-ifneq (,$(findstring java,$(GRADE)))
-
-# Copy the jars and NATIVE_SO to INSTALL_JAVA_LIBRARY_DIR. Ignore the exit
-# status of last command, since NATIVE_SO may not be available and is not
-# essential. Note that in the java.ssdebug grade the library will still
-# be copied to INSTALL_JAVA_LIBRARY_DIR. That's okay for now, because
-# we turn off the ssdebug transformations for the library, so it is equivalent
-# to the non-ssdebug grade.
-# The int3s target is there because some modules in the browser directory need
-# the library.int3 file.
-
-.PHONY: install_library
-install_library: int3s jars
- mkdir -p $(INSTALL_JAVA_LIBRARY_DIR)
- cp $(JARS) $(INSTALL_JAVA_LIBRARY_DIR)
- # -cp $(NATIVE_SO) $(INSTALL_JAVA_LIBRARY_DIR)
-
-else
-
# we depend on lib$(STD_LIB_NAME) because lib$(STD_LIB_NAME).install_library
# doesn't make library.int3, but some modules in the browser directory need it.
.PHONY: install_library
install_library: lib$(STD_LIB_NAME) lib$(STD_LIB_NAME).install_library
-endif #ifneq (,$(findstring java,$(GRADE)))
-
endif #ifneq (,$(findstring il,$(GRADE)))
else #ifneq ($(MMAKE_USE_MMC_MAKE),yes)
-# Prevent `mmc --make' from installing the default set of grades for
-# `libFOO.install' targets.
-MCFLAGS += --no-libgrade
-
.PHONY: install_mercury
-install_mercury: lib$(STD_LIB_NAME).install
+install_mercury: install_library
.PHONY: install_library
-install_library: lib$(STD_LIB_NAME).install
+install_library: install_mer_rt lib$(STD_LIB_NAME).install
endif #ifneq ($(MMAKE_USE_MMC_MAKE),yes)
diff --git a/mdbcomp/MDBCOMP_FLAGS.in b/mdbcomp/MDBCOMP_FLAGS.in
index 5e70e70..0177634 100644
--- a/mdbcomp/MDBCOMP_FLAGS.in
+++ b/mdbcomp/MDBCOMP_FLAGS.in
@@ -5,6 +5,7 @@
--no-mercury-stdlib-dir
--generate-mmc-deps
--no-ssdb
+--no-libgrade
--no-shlib-linker-use-install-name
-I../library
--c-include-directory ../boehm_gc
@@ -19,4 +20,7 @@
-L../trace
-L../mdbcomp
-L../browser
+--no-java-classpath
+--java-classpath ../library/mer_rt.jar
+--java-classpath ../library/mer_std.jar
--config-file ../scripts/Mercury.config.bootstrap
diff --git a/mdbcomp/Mmakefile b/mdbcomp/Mmakefile
index 6b26da1..7be7ac6 100644
--- a/mdbcomp/Mmakefile
+++ b/mdbcomp/Mmakefile
@@ -78,8 +78,6 @@ LD_LIBFLAGS-libmer_mdbcomp.dylib = -install_name \
#-----------------------------------------------------------------------------#
-JAVACFLAGS = -classpath $(LIBRARY_DIR)
-
MTAGS = $(SCRIPTS_DIR)/mtags
LN = ln
@@ -121,11 +119,7 @@ all: library all-ints $(TAGS_FILE_EXISTS)
.PHONY: library
-ifeq ("$(findstring java,$(GRADE))","java")
-library: jars
-else
library: $(LIBS)
-endif
.PHONY: all-ints
all-ints: $(MDBCOMP_LIB_NAME).int3s $(MDBCOMP_LIB_NAME).ints
@@ -185,26 +179,6 @@ dates:
#-----------------------------------------------------------------------------#
-JARS = $(MDBCOMP_LIB_NAME).jar
-
-.PHONY: jars
-jars: classes
- echo jmercury/*.class > $(MDBCOMP_LIB_NAME).classes
- $(JAR) $(JAR_CREATE_FLAGS) $(MDBCOMP_LIB_NAME).jar @$(MDBCOMP_LIB_NAME).classes
- $(JAR) i $(MDBCOMP_LIB_NAME).jar
- $(RM) $(MDBCOMP_LIB_NAME).classes
-
-JAVAS = $(wildcard jmercury/*.java)
-
-.PHONY:
-classes: javas
- $(JAVAC) $(ALL_JAVACFLAGS) $(JAVAS)
-
-.PHONY: javas
-javas: $(MDBCOMP_LIB_NAME).javas
-
-#-----------------------------------------------------------------------------#
-
.PHONY: os cs ss ils
ifneq ($(MMAKE_USE_MMC_MAKE),yes)
os: $($(MDBCOMP_LIB_NAME).os)
@@ -235,13 +209,7 @@ realclean_local:
# Installation targets
.PHONY: install
-
-# The ssdebug grade requires the interface files.
-ifeq ("$(findstring ssdebug,$(GRADE))","ssdebug")
-install: install_library install_ints
-else
install: install_library
-endif
.PHONY: install_dirs
install_dirs:
@@ -266,15 +234,13 @@ install_library:
else ifneq (,$(findstring java,$(GRADE)))
.PHONY: install_ints
-install_ints: lib$(MDBCOMP_LIB_NAME).install_ints
+install_ints:
.PHONY: install_init
install_init:
.PHONY: install_library
-install_library: jars
- mkdir -p $(INSTALL_JAVA_LIBRARY_DIR)
- cp $(JARS) $(INSTALL_JAVA_LIBRARY_DIR)
+install_library: lib$(MDBCOMP_LIB_NAME).install
else
diff --git a/ssdb/Mmakefile b/ssdb/Mmakefile
index 334b1ed..6bacbbb 100644
--- a/ssdb/Mmakefile
+++ b/ssdb/Mmakefile
@@ -89,8 +89,6 @@ LD_LIBFLAGS-libmer_ssdb.dylib = -install_name \
#-----------------------------------------------------------------------------#
-JAVACFLAGS = -classpath $(LIBRARY_DIR):$(MDBCOMP_DIR):$(BROWSER_DIR)
-
MTAGS = $(SCRIPTS_DIR)/mtags
LN = ln
@@ -134,11 +132,7 @@ main: library $(TAGS_FILE_EXISTS)
all: library $(TAGS_FILE_EXISTS) browse_test declarative_test
.PHONY: library
-ifeq ("$(findstring java,$(GRADE))","java")
-library: jars
-else
library: $(LIBS)
-endif
.PHONY: depend
depend: SSDB_FLAGS $(DEPENDS)
@@ -220,25 +214,6 @@ dates:
#-----------------------------------------------------------------------------#
-JARS = $(SSDB_LIB_NAME).jar
-
-.PHONY: jars
-jars: classes
- echo jmercury/*.class > $(SSDB_LIB_NAME).classes
- $(JAR) $(JAR_CREATE_FLAGS) $(SSDB_LIB_NAME).jar @$(SSDB_LIB_NAME).classes
- $(JAR) i $(SSDB_LIB_NAME).jar
- $(RM) $(SSDB_LIB_NAME).classes
-
-JAVAS = $(wildcard jmercury/*.java)
-
-.PHONY:
-classes: javas
- $(JAVAC) $(ALL_JAVACFLAGS) $(JAVAS)
-
-javas: $(SSDB_LIB_NAME).javas
-
-#-----------------------------------------------------------------------------#
-
.PHONY: os cs ss ils
ifneq ($(MMAKE_USE_MMC_MAKE),yes)
os: $($(SSDB_LIB_NAME).os)
@@ -297,18 +272,16 @@ install_library:
else ifneq (,$(findstring java,$(GRADE)))
.PHONY: install_ints
-install_ints: lib$(SSDB_LIB_NAME).install_ints
+install_ints:
.PHONY: install_init
install_init:
.PHONY: install_hdrs
-install_hdrs: lib$(SSDB_LIB_NAME).install_hdrs
+install_hdrs:
.PHONY: install_library
-install_library: jars
- mkdir -p $(INSTALL_JAVA_LIBRARY_DIR)
- cp $(JARS) $(INSTALL_JAVA_LIBRARY_DIR)
+install_library: lib$(SSDB_LIB_NAME).install
else
diff --git a/ssdb/SSDB_FLAGS.in b/ssdb/SSDB_FLAGS.in
index c2d55c1..72d8925 100644
--- a/ssdb/SSDB_FLAGS.in
+++ b/ssdb/SSDB_FLAGS.in
@@ -6,6 +6,7 @@
--no-shlib-linker-use-install-name
--force-disable-tracing
--no-ssdb
+--no-libgrade
--generate-mmc-deps
-I../library
-I../mdbcomp
@@ -25,4 +26,8 @@
-L../trace
-L../mdbcomp
-L../browser
+--no-java-classpath
+--java-classpath ../library/mer_rt.jar
+--java-classpath ../library/mer_std.jar
+--java-classpath ../browser/mer_browser.jar
--config-file ../scripts/Mercury.config.bootstrap
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to: mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions: mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------
More information about the reviews
mailing list