# Top level -*- makefile -*- fragment for the GNU compiler for the Java(TM)
# language.
#   Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
#   2005, 2006, 2007, 2008 Free Software Foundation, Inc.

#This file is part of GCC.

#GCC 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 3, or (at your option)
#any later version.

#GCC 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 GCC; see the file COPYING3.  If not see
#<http://www.gnu.org/licenses/>.

#Java and all Java-based marks are trademarks or registered trademarks
#of Sun Microsystems, Inc. in the United States and other countries.
#The Free Software Foundation is independent of Sun Microsystems, Inc.

# This file provides the language dependent support in the main Makefile.
# Each language makefile fragment must provide the following targets:
#
# foo.all.cross, foo.start.encap, foo.rest.encap,
# foo.install-common, foo.install-man, foo.install-info, foo.install-pdf,
# foo.info, foo.dvi, foo.pdf, foo.html, foo.uninstall,
# foo.mostlyclean, foo.clean, foo.distclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
# where `foo' is the name of the language.
#
# It should also provide rules for:
#
# - making any compiler driver (eg: g++)
# - the compiler proper (eg: jc1)
# - define the names for selecting the language in LANGUAGES.

# Actual names to use when installing a native compiler.
JAVA_INSTALL_NAME := $(shell echo gcj|sed '$(program_transform_name)')
JAVA_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gcj|sed '$(program_transform_name)')

GCJ = gcj

# Define the names for selecting java in LANGUAGES.
java: jc1$(exeext) $(GCJ)$(exeext) jvgenmain$(exeext) jcf-dump$(exeext)

# Define the name of target independent tools to be installed in $(bindir)
# Names are subject to changes
JAVA_TARGET_INDEPENDENT_BIN_TOOLS = jcf-dump

# Tell GNU make to ignore these if they exist.
.PHONY: java

jvspec.o: $(srcdir)/java/jvspec.c $(SYSTEM_H) coretypes.h $(TM_H) \
  $(GCC_H) $(CONFIG_H) java/jcf.h java/javaop.h
	(SHLIB_LINK='$(SHLIB_LINK)'; \
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(DRIVER_DEFINES) \
		$(INCLUDES) $(srcdir)/java/jvspec.c $(OUTPUT_OPTION))

# Create the compiler driver for $(GCJ).
$(GCJ)$(exeext): $(GCC_OBJS) jvspec.o java/jcf-path.o version.o \
	   prefix.o intl.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(GCC_OBJS) jvspec.o \
	  java/jcf-path.o prefix.o intl.o \
	  version.o $(EXTRA_GCC_OBJS) $(LIBS)

# Create a version of the $(GCJ) driver which calls the cross-compiler.
$(GCJ)-cross$(exeext): $(GCJ)$(exeext)
	-rm -f $(GCJ)-cross$(exeext)
	cp $(GCJ)$(exeext) $(GCJ)-cross$(exeext)

java.srcextra:

# Executables built by this Makefile:
JAVA_OBJS = java/class.o java/decl.o java/expr.o \
  java/constants.o java/lang.o java/typeck.o java/except.o \
  java/verify-glue.o java/verify-impl.o \
  java/zextract.o java/jcf-io.o java/win32-host.o java/jcf-parse.o java/mangle.o \
  java/mangle_name.o java/builtins.o java/resource.o \
  java/jcf-depend.o \
  java/jcf-path.o java/boehm.o java/java-gimplify.o

JCFDUMP_OBJS = java/jcf-dump.o java/jcf-io.o java/jcf-depend.o java/jcf-path.o \
		java/win32-host.o java/zextract.o errors.o version.o ggc-none.o intl.o

JVGENMAIN_OBJS = java/jvgenmain.o java/mangle_name.o errors.o intl.o

java_OBJS = $(sort $(JAVA_OBJS) $(JCFDUMP_OBJS) $(JVGENMAIN_OBJS)) jvspec.o

# Use strict warnings for this front end.
java-warn = $(STRICT_WARN)

# String length warnings
jvspec.o-warn = -Wno-error

jc1$(exeext): $(JAVA_OBJS) $(BACKEND) $(LIBDEPS) attribs.o
	rm -f $@
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ \
		$(JAVA_OBJS) $(BACKEND) $(ZLIB) $(LIBICONV) $(LIBS) attribs.o $(BACKENDLIBS)

jcf-dump$(exeext): $(JCFDUMP_OBJS) $(LIBDEPS)
	rm -f $@
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(JCFDUMP_OBJS) \
		$(CPPLIBS) $(ZLIB) $(LDEXP_LIB) $(LIBS)

jvgenmain$(exeext): $(JVGENMAIN_OBJS) $(LIBDEPS)
	rm -f $@
	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(JVGENMAIN_OBJS) $(LIBS)

#
# Build hooks:

java.all.cross: $(GCJ)-cross$(exeext)
java.start.encap: $(GCJ)$(exeext)
java.rest.encap:


java.tags: force
	cd $(srcdir)/java; etags -o TAGS.sub *.c *.h --language=none \
	  --regex='/DEFTREECODE [(]\([A-Z_]+\)/\1/' java-tree.def; \
	etags --include TAGS.sub --include ../TAGS.sub


java.info: doc/gcj.info

java.srcinfo: doc/gcj.info
	-cp -p $^ $(srcdir)/doc

java.dvi: doc/gcj.dvi

JAVA_PDFFILES = doc/gcj.pdf

java.pdf: $(JAVA_PDFFILES)

java.html: $(build_htmldir)/java/index.html

JAVA_MANFILES = doc/gcj.1 doc/jcf-dump.1 doc/gij.1 \
                doc/jv-convert.1 doc/grmic.1 \
                doc/gcj-dbtool.1 doc/gc-analyze.1 doc/aot-compile.1 \
                doc/rebuild-gcj-db.1

java.man: $(JAVA_MANFILES)

java.srcman: $(JAVA_MANFILES)
	-cp -p $^ $(srcdir)/doc

check-java :
check-java-subtargets :

# Install hooks:
# jc1, gcj, and jvgenmain are installed elsewhere as part
# of $(COMPILERS).

# Install gcj as well as the target-independent tools.
java.install-common: installdirs
	-if [ -f $(GCJ)$(exeext) ]; then \
	  rm -f $(DESTDIR)$(bindir)/$(JAVA_INSTALL_NAME)$(exeext); \
	  $(INSTALL_PROGRAM) $(GCJ)$(exeext) $(DESTDIR)$(bindir)/$(JAVA_INSTALL_NAME)$(exeext); \
	  chmod a+x $(DESTDIR)$(bindir)/$(JAVA_INSTALL_NAME)$(exeext); \
	  if [ -f $(GCJ)-cross$(exeext) ]; then \
	    true; \
	  else \
	    rm -f $(DESTDIR)$(bindir)/$(JAVA_TARGET_INSTALL_NAME)$(exeext); \
	    ( cd $(DESTDIR)$(bindir) && \
	      $(LN) $(JAVA_INSTALL_NAME)$(exeext) $(JAVA_TARGET_INSTALL_NAME)$(exeext) ); \
	  fi ; \
	fi ; \
        for tool in $(JAVA_TARGET_INDEPENDENT_BIN_TOOLS); do \
	  tool_transformed_name=`echo $$tool|sed '$(program_transform_name)'`; \
          if [ -f $$tool$(exeext) ]; then \
	    rm -f $(DESTDIR)$(bindir)/$$tool_transformed_name$(exeext); \
	    $(INSTALL_PROGRAM) $$tool$(exeext) $(DESTDIR)$(bindir)/$$tool_transformed_name$(exeext); \
	    chmod a+x $(DESTDIR)$(bindir)/$$tool_transformed_name$(exeext); \
          fi ; \
       done

java.install-man:

java.uninstall:
	-rm -rf $(DESTDIR)$(bindir)/$(JAVA_INSTALL_NAME)$(exeext)
	-rm -rf $(DESTDIR)$(man1dir)/$(JAVA_INSTALL_NAME)$(man1ext)
	-rm -rf $(DESTDIR)$(man1dir)/jcf-dump$(man1ext)
	-rm -rf $(DESTDIR)$(man1dir)/gij$(man1ext)
	-rm -rf $(DESTDIR)$(man1dir)/jv-convert$(man1ext)
	-rm -rf $(DESTDIR)$(man1dir)/gcj-dbtool$(man1ext)
	-rm -rf $(DESTDIR)$(man1dir)/aot-compile$(man1ext)
	-rm -rf $(DESTDIR)$(man1dir)/rebuild-gcj-db$(man1ext)

java.install-info: $(DESTDIR)$(infodir)/gcj.info

java.install-pdf: $(JAVA_PDFFILES)
	@$(NORMAL_INSTALL)
	test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)"
	@list='$(JAVA_PDFFILES)'; for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  f=$(pdf__strip_dir) \
	  echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
	  $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
	done

#
# Clean hooks:
# A lot of the ancillary files are deleted by the main makefile.
# We just have to delete files specific to us.

java.mostlyclean:
	-rm -f java/*$(objext) $(DEMANGLER_PROG)
	-rm -f java/*$(coverageexts)
	-rm -f jc1$(exeext) $(GCJ)$(exeext) jvgenmain$(exeext) \
          jcf-dump$(exeext) s-java
java.clean:
java.distclean:
	-rm -f java/config.status java/Makefile
java.maintainer-clean:
	-rm -f $(docobjdir)/gcj.1
	-rm -f $(docobjdir)/jcf-dump.1
	-rm -f $(docobjdir)/gij.1
	-rm -f $(docobjdir)/jv-convert.1
	-rm -f $(docobjdir)/grmic.1
	-rm -f $(docobjdir)/gcj-dbtool.1
	-rm -f $(docobjdir)/gc-analyze.1
	-rm -f $(docobjdir)/aot-compile.1
	-rm -f $(docobjdir)/rebuild-gcj-db.1
#
# Stage hooks:
# The main makefile has already created stage?/java.

java.stage1: stage1-start
	-mv java/*$(objext) stage1/java
java.stage2: stage2-start
	-mv java/*$(objext) stage2/java
java.stage3: stage3-start
	-mv java/*$(objext) stage3/java
java.stage4: stage4-start
	-mv java/*$(objext) stage4/java
java.stageprofile: stageprofile-start
	-mv java/*$(objext) stageprofile/java
java.stagefeedback: stageprofile-start
	-mv java/*$(objext) stagefeedback/java

#
# .o:.h dependencies.
JAVA_TREE_H = $(TREE_H) $(HASHTAB_H) java/java-tree.h

java/jcf-dump.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(JAVA_TREE_H) \
  java/jcf-dump.c java/jcf-reader.c java/jcf.h java/javaop.h java/javaop.def \
  version.h $(GGC_H) intl.h java/zipfile.h
java/boehm.o: java/boehm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  $(TREE_H) $(JAVA_TREE_H) java/parse.h toplev.h
java/builtins.o: java/builtins.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  $(JAVA_TREE_H) $(GGC_H) $(FLAGS_H) $(OPTABS_H) $(EXPR_H) langhooks.h \
  gt-java-builtins.h
java/class.o: java/class.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  $(JAVA_TREE_H) $(RTL_H) java/jcf.h java/parse.h toplev.h output.h $(GGC_H) \
  $(TARGET_H) $(FUNCTION_H) gt-java-class.h $(CGRAPH_H) $(TM_P_H)
java/constants.o: java/constants.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \
  toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) gt-java-constants.h
java/decl.o: java/decl.c $(CONFIG_H) $(JAVA_TREE_H) $(RTL_H) java/jcf.h \
  toplev.h $(FLAGS_H) $(SYSTEM_H) coretypes.h $(TM_H) $(FUNCTION_H) $(EXPR_H) \
  libfuncs.h except.h java/java-except.h $(GGC_H) $(REAL_H) gt-java-decl.h \
  $(TARGET_H) $(CGRAPH_H) langhooks.h
java/except.o: java/except.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h $(REAL_H) \
  $(RTL_H) java/javaop.h java/java-opcodes.h except.h java/java-except.h \
  toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(FUNCTION_H) 
java/expr.o: java/expr.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h $(REAL_H) \
  $(RTL_H) $(EXPR_H) java/javaop.h java/java-opcodes.h except.h \
  java/java-except.h java/java-except.h java/parse.h toplev.h \
  $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) gt-java-expr.h $(TARGET_H) \
  tree-iterator.h $(TM_P_H)
java/jcf-depend.o: java/jcf-depend.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
  $(TM_H) java/jcf.h
java/jcf-parse.o: java/jcf-parse.c $(CONFIG_H) $(JAVA_TREE_H) $(FLAGS_H) \
  input.h java/java-except.h $(SYSTEM_H) coretypes.h $(TM_H) toplev.h \
  java/parse.h $(GGC_H) debug.h $(REAL_H) gt-java-jcf-parse.h $(TM_P_H) \
  java/jcf-reader.c java/zipfile.h java/jcf.h
java/jvgenmain.o: java/jvgenmain.c $(CONFIG_H) $(JAVA_TREE_H) $(SYSTEM_H) \
  coretypes.h $(TM_H) intl.h
java/lang.o: java/lang.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h input.h \
  toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(EXPR_H) $(DIAGNOSTIC_H) \
  langhooks.h $(LANGHOOKS_DEF_H) gt-java-lang.h opts.h options.h
java/mangle.o: java/mangle.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) $(SYSTEM_H) \
  coretypes.h $(TM_H) toplev.h $(GGC_H) gt-java-mangle.h $(LANGHOOKS_DEF_H)
java/mangle_name.o: java/mangle_name.c $(CONFIG_H) java/jcf.h $(JAVA_TREE_H) \
  $(SYSTEM_H) coretypes.h $(TM_H) toplev.h $(GGC_H)
java/resource.o: java/resource.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  $(JAVA_TREE_H) $(RTL_H) java/jcf.h java/parse.h toplev.h output.h $(GGC_H) \
  $(TARGET_H) $(FUNCTION_H) gt-java-resource.h $(EXPR_H)
java/typeck.o: java/typeck.c $(CONFIG_H) $(JAVA_TREE_H) java/jcf.h \
  toplev.h $(SYSTEM_H) coretypes.h $(TM_H) $(GGC_H) $(REAL_H)
java/win32-host.o: java/win32-host.c $(CONFIG_H) $(SYSTEM_H) coretypes.h java/jcf.h
java/verify-glue.o: java/verify-glue.c $(CONFIG_H) $(SYSTEM_H) $(JAVA_TREE_H) \
  coretypes.h $(TM_H) java/verify.h toplev.h
java/verify-impl.o: java/verify-impl.c $(CONFIG_H) java/verify.h $(SYSTEM_H) \
  coretypes.h  java/jcf.h $(JAVA_TREE_H)
java/zextract.o: java/zextract.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  java/zipfile.h
java/java-gimplify.o: java/java-gimplify.c $(CONFIG_H) $(SYSTEM_H) \
  coretypes.h $(TM_H) $(JAVA_TREE_H) $(GIMPLE_H) toplev.h

# jcf-io.o needs $(ZLIBINC) added to cflags.
java/jcf-io.o: java/jcf-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  $(JAVA_TREE_H) java/zipfile.h
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(ZLIBINC) \
		$(srcdir)/java/jcf-io.c $(OUTPUT_OPTION)

# jcf-path.o needs a -D.
java/jcf-path.o: java/jcf-path.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
  java/jcf.h
	$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
	  -DLIBGCJ_ZIP_FILE='"$(datadir)/java/libgcj-$(version).jar"' \
	  -DDEFAULT_TARGET_VERSION=\"$(version)\" \
	  $(srcdir)/java/jcf-path.c $(OUTPUT_OPTION)

TEXI_JAVA_FILES = java/gcj.texi $(gcc_docdir)/include/fdl.texi		\
	 $(gcc_docdir)/include/gpl_v3.texi $(gcc_docdir)/include/gcc-common.texi   \
	 gcc-vers.texi

# Documentation
doc/gcj.info: $(TEXI_JAVA_FILES)
	if test "x$(BUILD_INFO)" = xinfo; then \
	  rm -f doc/gcj.info*; \
	  $(MAKEINFO) $(MAKEINFOFLAGS) -I $(gcc_docdir) \
		-I $(gcc_docdir)/include -o $@ $<; \
	else true; fi

doc/gcj.dvi: $(TEXI_JAVA_FILES)
	$(TEXI2DVI) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<

doc/gcj.pdf: $(TEXI_JAVA_FILES)
	$(TEXI2PDF) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<

$(build_htmldir)/java/index.html: $(TEXI_JAVA_FILES)
	$(mkinstalldirs) $(@D)
	rm -f $(@D)/*
	$(TEXI2HTML) -I $(gcc_docdir) -I $(gcc_docdir)/include \
		-I $(srcdir)/java -o $(@D) $<

.INTERMEDIATE: gcj.pod jcf-dump.pod gij.pod \
  jv-convert.pod grmic.pod gcj-dbtool.pod gc-analyze.pod

gcj.pod: java/gcj.texi
	-$(TEXI2POD) -D gcj < $< > $@
jcf-dump.pod: java/gcj.texi
	-$(TEXI2POD) -D jcf-dump < $< > $@
gij.pod: java/gcj.texi
	-$(TEXI2POD) -D gij < $< > $@
jv-convert.pod: java/gcj.texi
	-$(TEXI2POD) -D jv-convert < $< > $@
grmic.pod: java/gcj.texi
	-$(TEXI2POD) -D grmic < $< > $@
gcj-dbtool.pod: java/gcj.texi
	-$(TEXI2POD) -D gcj-dbtool < $< > $@
gc-analyze.pod: java/gcj.texi
	-$(TEXI2POD) -D gc-analyze < $< > $@
aot-compile.pod: java/gcj.texi
	-$(TEXI2POD) -D aot-compile < $< > $@
rebuild-gcj-db.pod: java/gcj.texi
	-$(TEXI2POD) -D rebuild-gcj-db < $< > $@

# Install the man pages.
java.install-man: installdirs \
                  $(DESTDIR)$(man1dir)/$(JAVA_INSTALL_NAME)$(man1ext) \
		  $(JAVA_TARGET_INDEPENDENT_BIN_TOOLS:%=doc/%.1) \
		  doc/gij.1 doc/jv-convert.1 doc/grmic.1 \
		  doc/gcj-dbtool.1 doc/gc-analyze.1 \
		  doc/aot-compile.1 doc/rebuild-gcj-db.1
	for tool in $(JAVA_TARGET_INDEPENDENT_BIN_TOOLS) \
		gij jv-convert grmic gcj-dbtool gc-analyze aot-compile \
		rebuild-gcj-db; do \
	  tool_transformed_name=`echo $$tool|sed '$(program_transform_name)'`; \
	  man_name=$(DESTDIR)$(man1dir)/$${tool_transformed_name}$(man1ext); \
	  rm -f $$man_name ; \
	  for source_name in doc/$${tool}.1 $(srcdir)/doc/$${tool}.1 ; do \
	    if test -f $$source_name; then \
	      $(INSTALL_DATA) $$source_name $$man_name; \
	      break; \
	      else : ; \
	    fi; \
	  done ; \
	  chmod a-x $$man_name ; \
	done

$(DESTDIR)$(man1dir)/$(JAVA_INSTALL_NAME)$(man1ext): doc/gcj.1 installdirs
	-rm -f $@
	-$(INSTALL_DATA) $< $@
	-chmod a-x $@
