## Process this file with automake to produce Makefile.in.

AUTOMAKE_OPTIONS = foreign subdir-objects

ACLOCAL_AMFLAGS = -I . -I .. -I ../config -I libltdl

# May be used by various substitution variables.
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
export gcc_version

SUBDIRS = $(DIRLTDL) gcj include classpath
if TESTSUBDIR
SUBDIRS += testsuite
endif

# write_entries_to_file - writes each entry in a list
# to the specified file.  Entries are written in chunks of
# $(write_entries_to_file_split) to accomodate systems with
# severe command-line-length limitations.
# Parameters:
# $(1): variable containing entries to iterate over
# $(2): output file
write_entries_to_file_split = 50
write_entries_to_file = $(shell rm -f $(2) || :) $(shell touch $(2)) \
	$(foreach range, \
	  $(shell i=1; while test $$i -le $(words $(1)); do \
	     echo $$i; i=`expr $$i + $(write_entries_to_file_split)`; done), \
	  $(shell echo $(wordlist $(range), \
			  $(shell expr $(range) + $(write_entries_to_file_split) - 1), $(1)) \
	     | tr ' ' '\012' >> $(2)))

## ################################################################

# autoconf2.13's target_alias
target_noncanonical = @target_noncanonical@

# This is required by TL_AC_GXX_INCLUDE_DIR.
libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)

libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(gcc_version)

##
## What gets installed, and where.
##

toolexeclib_LTLIBRARIES = libgcj.la libgij.la libgcj-tools.la
toolexecmainlib_DATA = libgcj.spec

##
## These files form a closed dependency group at the lower
## edge of libjava's dependency graph, so can be separated out.
## For details of how the list was generated, see the GCC wiki:
##
##   http://gcc.gnu.org/wiki/Internal_dependencies_of_libgcj
##
LOWER_PACKAGE_FILES_LO = \
	$(propertyo_files) \
	gnu-CORBA.lo \
	gnu-java-awt-dnd-peer-gtk.lo \
	gnu-java-awt-peer-gtk.lo \
	gnu-java-awt-peer-swing.lo \
	gnu-java-lang-management.lo \
	gnu-javax-management.lo \
	gnu-javax-rmi.lo \
	gnu-javax-sound-midi.lo \
	gnu-xml-aelfred2.lo \
	gnu-xml-dom.lo \
	gnu-xml-libxmlj.lo \
	gnu-xml-pipeline.lo \
	gnu-xml-stream.lo \
	gnu-xml-transform.lo \
	gnu-xml-util.lo \
	gnu-xml-validation.lo \
	gnu-xml-xpath.lo \
	java-lang-management.lo \
	javax-imageio.lo \
	javax-rmi.lo \
	jni-libjvm.lo \
	org-omg-CORBA.lo \
	org-omg-CORBA_2_3.lo \
	org-omg-CosNaming.lo \
	org-omg-Dynamic.lo \
	org-omg-DynamicAny.lo \
	org-omg-IOP.lo \
	org-omg-Messaging.lo \
	org-omg-PortableInterceptor.lo \
	org-omg-PortableServer.lo \
	org-omg-SendingContext.lo \
	org-omg-stub.lo \
	org-relaxng.lo \
	org-xml.lo \
	META-INF/services/java.util.prefs.PreferencesFactory.in.lo \
	META-INF/services/java.util.prefs.PreferencesFactory.lo \
	META-INF/services/javax.sound.midi.spi.MidiDeviceProvider.lo \
	META-INF/services/javax.sound.midi.spi.MidiFileReader.lo \
	META-INF/services/javax.sound.midi.spi.MidiFileWriter.lo \
	META-INF/services/javax.sound.sampled.spi.AudioFileReader.lo \
	classpath/native/jni/classpath/jcl.lo \
	classpath/native/jni/classpath/jnilink.lo \
	classpath/native/jni/java-math/gnu_java_math_GMP.lo \
	classpath/tools/libgcj_tools_la-tools.lo \
	gnu/awt.lo \
	gnu/awt/j2d.lo \
	gnu/gcj/io.lo \
	gnu/gcj/io/natSimpleSHSStream.lo \
	gnu/gcj/io/shs.lo \
	gnu/gcj/tools/gcj_dbtool.lo \
	gnu/gcj/util/natDebug.lo \
	gnu/gcj/util/natGCInfo.lo \
	gnu/java/awt/dnd.lo \
	gnu/java/awt/font.lo \
	gnu/java/awt/image.lo \
	gnu/java/awt/print.lo \
	gnu/java/awt/font/autofit.lo \
	gnu/java/awt/font/opentype.lo \
	gnu/java/awt/font/opentype/truetype.lo \
	gnu/java/lang/management/natVMClassLoadingMXBeanImpl.lo \
	gnu/java/lang/management/natVMCompilationMXBeanImpl.lo \
	gnu/java/lang/management/natVMGarbageCollectorMXBeanImpl.lo \
	gnu/java/lang/management/natVMMemoryMXBeanImpl.lo \
	gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.lo \
	gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.lo \
	gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.lo \
	gnu/java/lang/management/natVMRuntimeMXBeanImpl.lo \
	gnu/java/lang/management/natVMThreadMXBeanImpl.lo \
	gnu/java/net/local.lo \
	gnu/java/net/protocol/ftp.lo \
	gnu/java/net/protocol/gcjlib.lo \
	gnu/java/net/protocol/https.lo \
	gnu/javax/imageio.lo \
	gnu/javax/print.lo \
	gnu/javax/sound.lo \
	gnu/javax/activation/viewers.lo \
	gnu/javax/imageio/bmp.lo \
	gnu/javax/imageio/gif.lo \
	gnu/javax/imageio/jpeg.lo \
	gnu/javax/imageio/png.lo \
	gnu/javax/naming/giop.lo \
	gnu/javax/naming/ictxImpl/trans.lo \
	gnu/javax/naming/jndi/url/corbaname.lo \
	gnu/javax/naming/jndi/url/rmi.lo \
	gnu/javax/print/ipp.lo \
	gnu/javax/print/ipp/attribute.lo \
	gnu/javax/print/ipp/attribute/defaults.lo \
	gnu/javax/print/ipp/attribute/job.lo \
	gnu/javax/print/ipp/attribute/printer.lo \
	gnu/javax/print/ipp/attribute/supported.lo \
	gnu/javax/security/auth/login.lo \
	gnu/javax/sound/sampled/AU.lo \
	gnu/javax/sound/sampled/WAV.lo \
	gnu/javax/swing/plaf/gnu.lo \
	gnu/javax/swing/plaf/metal.lo \
	java/sql.lo \
	java/awt/im.lo \
	java/awt/print.lo \
	java/awt/im/spi.lo \
	java/security/acl.lo \
	javax/activation.lo \
	javax/activity.lo \
	javax/management.lo \
	javax/naming.lo \
	javax/print.lo \
	javax/sql.lo \
	javax/tools.lo \
	javax/transaction.lo \
	javax/management/loading.lo \
	javax/management/openmbean.lo \
	javax/management/remote.lo \
	javax/management/remote/rmi.lo \
	javax/naming/directory.lo \
	javax/naming/event.lo \
	javax/naming/ldap.lo \
	javax/naming/spi.lo \
	javax/print/attribute.lo \
	javax/print/event.lo \
	javax/print/attribute/standard.lo \
	javax/security/cert.lo \
	javax/security/auth/kerberos.lo \
	javax/security/auth/login.lo \
	javax/security/auth/spi.lo \
	javax/sound/midi.lo \
	javax/sound/midi/spi.lo \
	javax/swing/plaf/multi.lo \
	javax/swing/plaf/synth.lo \
	javax/swing/text/rtf.lo \
	javax/swing/text/html/default.css.lo \
	javax/transaction/xa.lo \
	org/ietf/jgss.lo \
	sun/awt.lo

##
## Lists of all .lo files, and filtered core and non-core lists.
## 
ALL_PACKAGE_SOURCE_FILES_LO = $(all_packages_source_files:.list=.lo) $(propertyo_files) $(bc_objects)
NONCORE_PACKAGE_SOURCE_FILES_LO = $(filter $(LOWER_PACKAGE_FILES_LO),$(ALL_PACKAGE_SOURCE_FILES_LO))
CORE_PACKAGE_SOURCE_FILES_LO = $(filter-out $(LOWER_PACKAGE_FILES_LO),$(ALL_PACKAGE_SOURCE_FILES_LO))

##
## Assign objects to output libraries.
##
if BUILD_SUBLIBS
toolexeclib_LTLIBRARIES += libgcj-noncore.la
libgcj_noncore_la_LIBADD_SUBOBJECTS = $(NONCORE_PACKAGE_SOURCE_FILES_LO)
libgcj_la_LIBADD_SUBOBJECTS = $(CORE_PACKAGE_SOURCE_FILES_LO)
LIBJAVA_LDFLAGS_NOUNDEF = $(LIBGCJ_SUBLIB_LTFLAGS)
LIBJAVA_CORE_EXTRA = @LIBGCJ_SUBLIB_CORE_EXTRA_DEPS@
else
# If not building sublibraries, everything goes in libgcj,
# and it cannot be usefully built shared on PE platforms.
libgcj_la_LIBADD_SUBOBJECTS = $(ALL_PACKAGE_SOURCE_FILES_LO)
LIBJAVA_LDFLAGS_NOUNDEF = 
LIBJAVA_CORE_EXTRA = 
endif

if USE_LIBGCJ_BC
toolexeclib_LTLIBRARIES += install/libgcj_bc.la
noinst_LTLIBRARIES = libgcj_bc.la
endif

if XLIB_AWT
toolexeclib_LTLIBRARIES += lib-gnu-awt-xlib.la
endif

dbexec_LTLIBRARIES = libjvm.la

pkgconfigdir = $(toolexeclibdir)/pkgconfig

jardir = $(datadir)/java
jar_DATA = libgcj-$(gcc_version).jar libgcj-tools-$(gcc_version).jar
if INSTALL_ECJ_JAR
jar_DATA += $(ECJ_BUILD_JAR)
endif

if JAVA_HOME_SET
JAVA_HOME_DIR = $(JAVA_HOME)
BOOT_CLASS_PATH_DIR = $(JAVA_HOME)/lib/rt.jar
else
JAVA_HOME_DIR = $(prefix)
BOOT_CLASS_PATH_DIR = $(jardir)/libgcj-$(gcc_version).jar
endif

## Name of the default .db.
db_name = classmap.db
## Compiler specific component of the .db file
gcjsubdir = @gcjsubdir@
db_pathtail = $(gcjsubdir)/$(db_name)

## For now, only on native systems.  FIXME.
if NATIVE
bin_programs = jv-convert gij grmic grmiregistry gcj-dbtool \
	gappletviewer gjarsigner gkeytool gjar gcjh gjavah gnative2ascii \
	gorbd grmid gserialver gtnameserv gc-analyze
if CREATE_GJDOC
bin_programs += gjdoc
endif

noinst_PROGRAMS =
if INSTALL_BINARIES
bin_PROGRAMS = $(bin_programs)
else
noinst_PROGRAMS += $(bin_programs)
endif

## It is convenient to actually build and install the default database
## when gcj-dbtool is available.
dbexec_DATA = $(db_name)
endif 

bin_SCRIPTS = contrib/rebuild-gcj-db contrib/aot-compile

if INSTALL_AOT_RPM
bin_SCRIPTS += contrib/aot-compile-rpm
endif

if BUILD_ECJ1
## We build ecjx and not ecj1 because in one mode, ecjx will not work
## until after 'make install', and we don't want it to be picked up in
## the build tree by gcj via a -B option.
libexecsub_PROGRAMS = ecjx
endif

## ################################################################

##
## Compilers and compilation flags.
##

## The compiler with whatever flags we want for both -c and -C
## compiles.
GCJ_WITH_FLAGS = $(GCJ) --encoding=UTF-8 -Wno-deprecated

extra_ldflags_libjava = @extra_ldflags_libjava@
extra_ldflags = @extra_ldflags@

if ANONVERSCRIPT
if ANONVERSCRIPT_GNU
version_arg = -Wl,--version-script=$(srcdir)/libgcj.ver
libgcj_la_version_arg = $(version_arg)
libgcj_tools_la_version_arg = $(version_arg)
lib_gnu_awt_xlib_la_version_arg = $(version_arg)
libgcj_bc_la_version_arg = $(version_arg)

version_dep = $(srcdir)/libgcj.ver
libgcj_la_version_dep = $(version_dep)
libgcj_tools_la_version_dep = $(version_dep)
lib_gnu_awt_xlib_la_version_dep = $(version_dep)
libgcj_bc_la_version_dep = $(version_dep)
endif
if ANONVERSCRIPT_SUN
libgcj_la_version_arg = -Wl,-M,libgcj.ver-sun
libgcj_tools_la_version_arg = -Wl,-M,libgcj_tools.ver-sun
lib_gnu_awt_xlib_la_version_arg = -Wl,-M,lib_gnu_awt_xlib.ver-sun
libgcj_bc_la_version_arg = -Wl,-M,libgcj_bc.ver-sun

libgcj_la_version_dep = libgcj.ver-sun
libgcj_tools_la_version_dep = libgcj_tools.ver-sun
lib_gnu_awt_xlib_la_version_dep = lib_gnu_awt_xlib.ver-sun
libgcj_bc_la_version_dep = libgcj_bc.ver-sun

# The pattern rule necessary to build the *.ver-sun mapfiles is at the end
# of the file, see below.
endif
else
version_arg =
libgcj_la_version_arg = $(version_arg)
libgcj_tools_la_version_arg = $(version_arg)
lib_gnu_awt_xlib_la_version_arg = $(version_arg)
libgcj_bc_la_version_arg = $(version_arg)

version_dep =
libgcj_la_version_dep = $(version_dep)
libgcj_tools_la_version_dep = $(version_dep)
lib_gnu_awt_xlib_la_version_dep = $(version_dep)
libgcj_bc_la_version_dep = $(version_dep)
endif

LTLDFLAGS = $(shell $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
GCJLINK = $(LIBTOOL) --tag=GCJ $(LIBTOOLFLAGS) --mode=link $(GCJ) -L$(here) \
	  $(JC1FLAGS) $(LTLDFLAGS) -o $@
GCJ_FOR_ECJX = @GCJ_FOR_ECJX@
GCJ_FOR_ECJX_LINK = $(GCJ_FOR_ECJX) -o $@
LIBLINK = $(LIBTOOL) --tag=CXX $(LIBTOOLFLAGS) --mode=link $(CXX) -L$(here) \
	  $(JC1FLAGS) $(LTLDFLAGS) $(extra_ldflags_libjava) $(extra_ldflags) -o $@
CXXLINK = $(LIBTOOL) --tag=CXX $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
	  $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LTLDFLAGS) -o $@

LIBGCC_UNWIND_INCLUDE = @LIBGCC_UNWIND_INCLUDE@

WARNINGS = -Wextra -Wall
## Some systems don't allow `$' in identifiers by default, so we force
## it with -fdollars-in-identifiers.  -Wswitch-enum detects bugs in
## the verifier implementation, and maybe other places.  We need
## _GNU_SOURCE defined for some Linux builds.  It doesn't hurt to
## always define it.  Some systems, including Linux, need
## -D_FILE_OFFSET_BITS=64 to enable > 2GB file support.
AM_CXXFLAGS = \
	-fno-rtti \
	-fnon-call-exceptions \
	$(THREADCXXFLAGS) \
	-fdollars-in-identifiers \
	-Wswitch-enum \
	-D_FILE_OFFSET_BITS=64 \
	@LIBGCJ_CXXFLAGS@ \
	$(WARNINGS) \
	-D_GNU_SOURCE \
	-DPREFIX="\"$(prefix)\"" \
	-DTOOLEXECLIBDIR="\"$(toolexeclibdir)\"" \
        -DJAVA_HOME="\"$(JAVA_HOME_DIR)\"" \
        -DBOOT_CLASS_PATH="\"$(BOOT_CLASS_PATH_DIR)\"" \
	-DJAVA_EXT_DIRS="\"$(jardir)/ext\"" \
	-DGCJ_ENDORSED_DIRS="\"$(jardir)/gcj-endorsed\"" \
	-DGCJ_VERSIONED_LIBDIR="\"$(dbexecdir)\"" \
	-DPATH_SEPARATOR="\"$(CLASSPATH_SEPARATOR)\"" \
	-DECJ_JAR_FILE="\"$(ECJ_JAR)\"" \
	-DLIBGCJ_DEFAULT_DATABASE="\"$(dbexecdir)/$(db_name)\"" \
	-DLIBGCJ_DEFAULT_DATABASE_PATH_TAIL="\"$(db_pathtail)\""

AM_GCJFLAGS = \
	@LIBGCJ_JAVAFLAGS@ \
	-fclasspath= -fbootclasspath=$(BOOTCLASSPATH) \
	--encoding=UTF-8 \
	-Wno-deprecated -fbootstrap-classes

AM_CFLAGS = @LIBGCJ_CFLAGS@
if USING_GCC
AM_CFLAGS += $(WARNINGS)
endif

if SUPPRESS_LIBGCJ_BC
LIBGCJ_BC_FLAGS =
else
LIBGCJ_BC_FLAGS = -findirect-dispatch -fno-indirect-classes
endif

if BUILD_LIBGCJ_REDUCED_REFLECTION
LIBGCJ_REDUCED_REFLECTION_FLAGS = -freduced-reflection
else
LIBGCJ_REDUCED_REFLECTION_FLAGS =
endif

## Extra CFLAGS used for JNI C sources shared with GNU Classpath.
PEDANTIC_CFLAGS = -ansi -pedantic -Wall -Wno-long-long

JCFLAGS = -g
JC1FLAGS = @LIBGCJ_JAVAFLAGS@ $(GCJFLAGS)

LIBFFIINCS = @LIBFFIINCS@

AM_CPPFLAGS = -I$(top_srcdir) \
	-Iinclude -I$(top_srcdir)/include \
	-I$(top_srcdir)/classpath/include \
	-Iclasspath/include \
	-I$(top_srcdir)/classpath/native/fdlibm \
	$(GCINCS) $(THREADINCS) $(INCLTDL) \
	$(LIBGCC_UNWIND_INCLUDE) $(ZINCS) $(LIBFFIINCS)

BOOTCLASSPATH = $(srcdir)/classpath/lib

## ################################################################

##
## How to build libgcj.a and libgcj.jar
##

libgij_la_SOURCES = gij.cc
libgij_la_DEPENDENCIES = libgcj.la libgcj.spec
if BUILD_SUBLIBS
libgij_la_DEPENDENCIES += libgcj-noncore.la
endif
## See jv_convert_LDADD.
libgij_la_LIBADD = -L$(here)/.libs libgcj.la
## The mysterious backslash in the grep pattern is consumed by make.
libgij_la_LDFLAGS = -rpath $(toolexeclibdir) $(LIBJAVA_LDFLAGS_NOUNDEF) \
        -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC)
libgij_la_LINK = $(CXXLINK) $(libgij_la_LDFLAGS)

if INTERPRETER
libgcj_interpret_source_files = jvmti.cc interpret.cc
else
libgcj_interpret_source_files = 
endif

libgcj_la_SOURCES = prims.cc jni.cc exception.cc stacktrace.cc \
	link.cc defineclass.cc verify.cc $(libgcj_interpret_source_files) \
	$(nat_source_files)

## We need to compile at least the interpreter this way.
interpret.lo:  AM_CXXFLAGS += -fwrapv
## Necessary so EH works on 64-bit Solaris 2.
prims.lo: AM_CXXFLAGS += -fno-omit-frame-pointer

if USING_BOEHMGC
libgcj_la_SOURCES += boehm.cc
endif

if USING_NOGC
libgcj_la_SOURCES += nogc.cc
endif

if USING_POSIX_PLATFORM
libgcj_la_SOURCES += posix.cc
endif

if USING_WIN32_PLATFORM
libgcj_la_SOURCES += win32.cc
endif

if USING_DARWIN_CRT
libgcj_la_SOURCES += darwin.cc
LIBJAVA_LDFLAGS_LIBMATH =
else
LIBJAVA_LDFLAGS_LIBMATH = -lm
endif

if USING_POSIX_THREADS
libgcj_la_SOURCES += posix-threads.cc
endif

if USING_WIN32_THREADS
libgcj_la_SOURCES += win32-threads.cc
endif

if USING_NO_THREADS
libgcj_la_SOURCES += no-threads.cc
endif

## Objects from C++ sources in subdirs.
nat_files = $(nat_source_files:.cc=.lo)
xlib_nat_files = $(xlib_nat_source_files:.cc=.lo)

# Include THREADLIBS here to ensure that the correct version of
# certain linuxthread functions get linked:
## The mysterious backslash in the grep pattern is consumed by make.
libgcj_la_LDFLAGS = -rpath $(toolexeclibdir) $(THREADLDFLAGS) $(extra_ldflags) $(THREADLIBS) \
	$(LIBLTDL) $(SYS_ZLIBS) $(LIBJAVA_LDFLAGS_NOUNDEF) \
	-version-info `grep -v '^\#' $(srcdir)/libtool-version` \
	$(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBGCJ_LD_EXPORT_ALL)
libgcj_la_LIBADD = \
	classpath/native/fdlibm/libfdlibm.la \
	java/lang/Object.lo \
	java/lang/Class.lo \
	java/process-$(PLATFORM).lo \
	$(libgcj_la_LIBADD_SUBOBJECTS) \
	$(LIBFFI) $(ZLIBS) $(GCLIBS)
libgcj_la_DEPENDENCIES = libgcj-$(gcc_version).jar \
	java/lang/Object.lo \
	java/lang/Class.lo \
	java/process-$(PLATFORM).lo \
	$(ALL_PACKAGE_SOURCE_FILES_LO) \
	$(LIBLTDL) $(libgcj_la_LIBADD) \
	$(LIBJAVA_CORE_EXTRA) \
	$(libgcj_la_version_dep)
libgcj_la_LINK = $(LIBLINK) $(libgcj_la_LDFLAGS) $(libgcj_la_version_arg)

## A hack to make sure the various gcj-related macros, like
## LTGCJCOMPILE, are defined by automake.  This is never actually
## compiled.
EXTRA_libgcj_la_SOURCES = java/lang/Object.java

if BUILD_SUBLIBS
## This extra target is invoked on windows hosts only by adding it
## to LIBGCJ_SUBLIB_CORE_EXTRA_SRCS in configure.host, which causes
## it to be linked in to the core DLL and generate a circular import
## dependency loop between the two DLLs.  This is required to fix
## PR42811 by ensuring that any application that links against
## either always loads both at runtime.
DLL_VERSION=`expr \`grep -v '^\#' $(srcdir)/libtool-version | sed -e 's/\(.*\):\(.*\):.*/\1 + \2/'\``
libgcj-noncore-dummy.dll.a : $(srcdir)/libgcj-noncore-dummy.def
	$(DLLTOOL) -d $^ -l $@ --dllname cyggcj-noncore-$(DLL_VERSION).dll 

## These are the libtool definitions for the noncore library.
libgcj_noncore_la_SOURCES =
libgcj_noncore_la_LDFLAGS = $(libgcj_la_LDFLAGS)
libgcj_noncore_la_LIBADD = $(libgcj_noncore_la_LIBADD_SUBOBJECTS) libgcj.la
libgcj_noncore_la_DEPENDENCIES = libgcj-$(gcc_version).jar $(LIBLTDL) \
		$(libgcj_noncore_la_LIBADD) libgcj.la $(libgcj_la_version_dep)
libgcj_noncore_la_LINK = $(libgcj_la_LINK)

endif	# BUILD_SUBLIBS

# We compile libgcj_tools with -findirect-dispatch so that they can
# depend on external classes: in particular, gjdoc uses antlr.  In
# addition, -fno-bootstrap-classes ensures that the tools are loaded
# by the system class loader rather than the bootstrap class loader:
# only core library classes should be loaded by the bootstrap loader.
libgcj_tools_la_SOURCES = classpath/tools/tools.zip
libgcj_tools_la_GCJFLAGS = $(AM_GCJFLAGS) -findirect-dispatch \
 -fno-bootstrap-classes -fno-indirect-classes \
 -fsource-filename=$(here)/classpath/tools/all-classes.lst
libgcj_tools_la_LDFLAGS = -rpath $(toolexeclibdir) \
 -version-info `grep -v '^\#' $(srcdir)/libtool-version` \
 $(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF) \
 $(LIBJAVA_LDFLAGS_LIBMATH)

libgcj_tools_la_LIBADD = libgcj.la
libgcj_tools_la_DEPENDENCIES = libgcj.la libgcj.spec \
 $(libgcj_tools_la_version_dep)
if BUILD_SUBLIBS
libgcj_tools_la_DEPENDENCIES += libgcj-noncore.la
endif
libgcj_tools_la_LINK = $(LIBLINK) $(libgcj_tools_la_LDFLAGS) \
 $(libgcj_tools_la_version_arg)

## libjvm.so
libjvm_la_SOURCES = jni-libjvm.cc
libjvm_la_DEPENDENCIES = libgcj.la libgcj.spec
if BUILD_SUBLIBS
libjvm_la_DEPENDENCIES += libgcj-noncore.la
endif
## See jv_convert_LDADD.
libjvm_la_LIBADD = -L$(here)/.libs libgcj.la
libjvm_la_LDFLAGS = -avoid-version $(LIBGCJ_LD_SYMBOLIC) \
 $(LIBJAVA_LDFLAGS_NOUNDEF)
libjvm_la_LINK = $(CXXLINK) $(libjvm_la_LDFLAGS)

## The .db file.  This rule is only used for native builds, so it is
## safe to invoke gcj-dbtool.
$(db_name): gcj-dbtool$(EXEEXT)
## In case it exists already.
	@rm -f $(db_name)
## We don't actually care if it fails -- if it does, just make an
## empty file.  This is simpler than trying to discover when mmap is
## not available.
	./gcj-dbtool -n $(db_name) || touch $(db_name)

lib_gnu_awt_xlib_la_SOURCES = $(xlib_nat_source_files)
lib_gnu_awt_xlib_la_LIBADD = gnu/awt/xlib.lo gnu/gcj/xlib.lo
lib_gnu_awt_xlib_la_DEPENDENCIES = libgcj-$(gcc_version).jar \
	libgcj.la libgcj.spec \
	$(lib_gnu_awt_xlib_la_version_dep) \
	$(lib_gnu_awt_xlib_la_LIBADD)
if BUILD_SUBLIBS
lib_gnu_awt_xlib_la_DEPENDENCIES += libgcj-noncore.la
endif
lib_gnu_awt_xlib_la_CPPFLAGS = \
	$(AM_CPPFLAGS) \
	$(LIBSTDCXX_RAW_CXX_CXXFLAGS)
## The mysterious backslash in the grep pattern is consumed by make.
lib_gnu_awt_xlib_la_LDFLAGS = $(LIBSTDCXX_RAW_CXX_LDFLAGS) \
	@X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ \
        -rpath $(toolexeclibdir) $(LIBJAVA_LDFLAGS_NOUNDEF) \
        -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(LIBGCJ_LD_SYMBOLIC)
lib_gnu_awt_xlib_la_LINK = $(LIBLINK) $(lib_gnu_awt_xlib_la_LDFLAGS) \
	$(lib_gnu_awt_xlib_la_version_arg)

## Support for libgcj_bc: dummy shared library.
##
## This lets us have one soname in BC objects and another in C++ ABI objects.
## This library is not linked against libgcj.
libgcj_bc_la_SOURCES = libgcj_bc.c
install_libgcj_bc_la_SOURCES = $(libgcj_bc_la_SOURCES)
libgcj_bc_la_LDFLAGS = -rpath $(toolexeclibdir) -no-static -version-info 1:0:0 \
	$(LIBGCJ_LD_SYMBOLIC_FUNCTIONS) $(LIBJAVA_LDFLAGS_NOUNDEF)
libgcj_bc_la_DEPENDENCIES = libgcj.la $(libgcj_bc_la_version_dep)
libgcj_bc_la_LINK = $(LIBLINK) $(libgcj_bc_la_LDFLAGS) \
	$(libgcj_bc_la_version_arg)
## This is specific to Linux/{Free,Net,Open}BSD/Hurd and perhaps few others.
## USE_LIBGCJ_BC shouldn't be set on other targets.
libgcj_bc_dummy_LINK = $(CC) -L$(here)/.libs $(CFLAGS) $(LDFLAGS) -shared \
	-fPIC -nostdlib

## This rule creates the libgcj_bc dummy library in the .libs directory, for use
## when testing.
libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES)
	$(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \
	$(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS) || exit; \
	rm .libs/libgcj_bc.so; \
	mv .libs/libgcj_bc.so.1.0.0 .libs/libgcj_bc.so; \
	$(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \
	-o .libs/libgcj_bc.so.1.0.0 -lgcj || exit; \
	rm .libs/libgcj_bc.so.1; \
	$(LN_S) libgcj_bc.so.1.0.0 .libs/libgcj_bc.so.1

## This rule creates the libgcj_bc library that is actually installed.
install/libgcj_bc.la: $(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_DEPENDENCIES) install/$(am__dirstamp)
	$(libgcj_bc_la_LINK) $(am_libgcj_bc_la_rpath) $(libgcj_bc_la_LDFLAGS) \
	$(libgcj_bc_la_OBJECTS) $(libgcj_bc_la_LIBADD) $(LIBS)

## Note that property_files is defined in sources.am.
propertyo_files = $(patsubst classpath/resource/%,%,$(addsuffix .lo,$(property_files)))

$(propertyo_files): %.lo: classpath/resource/%
	$(mkinstalldirs) `dirname $@`; \
	$(LTGCJCOMPILE) -o $@ -c $< -Wc,--resource,$(@:.lo=)

libgcj-$(gcc_version).jar: classpath/lib/compile-classes
## Note that this now omits the property files.
## It doesn't matter since we don't use the jar at runtime.
	here=`pwd`; cd $(srcdir)/classpath/lib; \
	find gnu java javax org sun -name .svn -prune -o -name '*.class' -print | \
	$(JAR) -cfM@ $$here/libgcj-$(gcc_version).jar

libgcj-tools-$(gcc_version).jar: classpath/tools/tools.zip
	cp $< $@

CLEANFILES = libgcj-$(gcc_version).jar libgcj-tools-$(gcc_version).jar
DISTCLEANFILES = native.dirs

mostlyclean-local:
## Use libtool rm to remove each libtool object
	find . -name '*.lo' -print | xargs $(LIBTOOL) --mode=clean rm -f

distclean-local:
## Remove every .d file that was created.
	find . -name '*.d' -print | xargs rm -f

# Just remove the objects from C++ sources, for testing the C++ compiler.
clean-nat:
	rm -f $(nat_files) $(xlib_nat_files)

SUFFIXES = .class .java .h .properties .list

## Pass the list of object files to libtool in a temporary file to
## avoid tripping platform command line length limits.
lib-gnu-awt-xlib.la: $(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_DEPENDENCIES)
	@echo Creating list of files to link...
	@: $(call write_entries_to_file,$(lib_gnu_awt_xlib_la_OBJECTS) $(lib_gnu_awt_xlib_la_LIBADD),lib_gnu_awt_xlib.objectlist)
	$(lib_gnu_awt_xlib_la_LINK) -objectlist lib_gnu_awt_xlib.objectlist \
	-rpath $(toolexeclibdir) $(lib_gnu_awt_xlib_la_LDFLAGS) $(LIBS)

## ################################################################

## Compiling a list of java sources to a single .o.

# Concurrent things use reflection internally.
java/util/concurrent.lo \
java/util/concurrent/atomic.lo \
java/util/concurrent/locks.lo: LIBGCJ_REDUCED_REFLECTION_FLAGS =

%.lo: %.list
	$(LTGCJCOMPILE) $(LIBGCJ_REDUCED_REFLECTION_FLAGS) -c -o $@ -fsource-filename=$(here)/classpath/lib/classes -MT $@ -MD -MP -MF $(basename $@).deps @$<

java/lang/Object.lo: classpath/lib/java/lang/Object.class
	$(LTGCJCOMPILE) -c -o $@ -fsource-filename=$(srcdir)/$(basename $@).java $<

java/lang/Class.lo: classpath/lib/java/lang/Class.class
	$(LTGCJCOMPILE) -c -o $@  -fsource-filename=$(srcdir)/$(basename $@).java $<

## ################################################################

## This pulls in a number of variable and target definitions.
include sources.am

## ################################################################

##
## How to build header files.
##

## We have special rules for certain headers.
omitted_headers = java/lang/ClassLoader.h java/lang/Thread.h \
	java/lang/String.h java/lang/reflect/Constructor.h \
	java/lang/reflect/Field.h java/lang/reflect/Method.h \
	java/lang/reflect/Proxy.h gnu/gcj/runtime/ExtensionClassLoader.h

inner_nat_headers = java/io/ObjectOutputStream$$PutField.h \
	java/io/ObjectInputStream$$GetField.h \
	java/nio/DirectByteBufferImpl$$ReadWrite.h \
	java/nio/channels/Pipe$$SinkChannel.h \
	java/nio/channels/Pipe$$SourceChannel.h \
	java/lang/VMProcess$ImmediateEOFInputStream.h \
	java/lang/reflect/Proxy$$ProxyData.h \
	java/lang/reflect/Proxy$$ProxyType.h \
	gnu/java/net/PlainSocketImpl$$SocketInputStream.h \
	gnu/java/net/PlainSocketImpl$$SocketOutputStream.h \
	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)

xlib_nat_headers = $(gnu_awt_xlib_header_files) $(gnu_gcj_xlib_header_files)

## Headers we maintain by hand and which we want to install.
extra_headers = java/lang/Object.h java/lang/Class.h

$(extra_headers) $(srcdir)/java/lang/Object.h $(srcdir)/java/lang/Class.h:
	@:

install-exec-hook: install-binPROGRAMS install-toolexeclibLTLIBRARIES \
	install-libexecsubPROGRAMS
## Support for libgcj_bc: dummy shared library used only at link-time.
if USE_LIBGCJ_BC
## Install libgcj_bc dummy lib in the target directory. We also need to delete
## libtool's .la file, this prevents libtool resetting the lib again 
## later.
	@echo Installing dummy lib libgcj_bc.so.1.0.0; \
	rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
	mv $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so; \
	$(libgcj_bc_dummy_LINK) -xc /dev/null -Wl,-soname,libgcj_bc.so.1 \
	-o $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1.0.0 -lgcj || exit; \
	rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \
	$(LN_S) libgcj_bc.so.1.0.0 $(DESTDIR)$(toolexeclibdir)/libgcj_bc.so.1; \
	rm $(DESTDIR)$(toolexeclibdir)/libgcj_bc.la;
endif
if BUILD_ECJ1
## Undo any prepending of the target prefix and transform
## to the actual host's executable suffix.
	mv $(DESTDIR)$(libexecsubdir)/`echo ecjx | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` $(DESTDIR)$(libexecsubdir)/ecj1$(host_exeext)
endif BUILD_ECJ1

## Install the headers.  It is fairly ugly that we have to do this by
## hand.
install_data_local_split = 50
install-data-local:
	$(PRE_INSTALL)
## Install the .pc file.
	@pc_version=`echo $(GCJVERSION) | sed -e 's/[.][^.]*$$//'`; \
	file="libgcj-$${pc_version}.pc"; \
	$(mkinstalldirs) $(DESTDIR)$(pkgconfigdir); \
	echo "  $(INSTALL_DATA) libgcj.pc $(DESTDIR)$(pkgconfigdir)/$$file"; \
	$(INSTALL_DATA) libgcj.pc $(DESTDIR)$(pkgconfigdir)/$$file
## We use a GNU make trick here so that we don't go over the command
## length limit of some shells.
	@echo Creating list of headers to install...
	@: $(call write_entries_to_file,$(nat_headers_install) $(extra_headers),tmp-ilist)
	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
	while read file; do echo "$$file $$file"; done < tmp-ilist | \
	sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
	$(AWK) 'BEGIN { files["."] = "" } \
	  { files[$$2] = files[$$2] " " $$1; \
	    if (++n[$$2] == $(install_data_local_split)) { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
	     END { for (dir in files) print dir, files[dir] }' | \
	while read dir files; do \
	  xfiles=; for file in $$files; do \
	    if test -f "$$file"; then xfiles="$$xfiles $$file"; \
	    else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
	  test -z "$$xfiles" || { \
	    test "x$$dir" = x. || { \
	      echo "$(mkinstalldirs) $(DESTDIR)$(gxx_include_dir)/$$dir"; \
	      $(mkinstalldirs) $(DESTDIR)$(gxx_include_dir)/$$dir; }; \
	    echo " $(INSTALL_DATA) $$xfiles $(DESTDIR)$(gxx_include_dir)/$$dir"; \
	    $(INSTALL_DATA) $$xfiles $(DESTDIR)$(gxx_include_dir)/$$dir; }; \
	done
	-@rm -f tmp-ilist
## Install inner class headers.
	$(INSTALL_DATA) $(srcdir)/'java/io/ObjectOutputStream$$PutField.h' $(DESTDIR)$(gxx_include_dir)/java/io/
	$(INSTALL_DATA) $(srcdir)/'java/io/ObjectInputStream$$GetField.h' $(DESTDIR)$(gxx_include_dir)/java/io/
	$(INSTALL_DATA) $(srcdir)/'java/nio/channels/Pipe$$SinkChannel.h' $(DESTDIR)$(gxx_include_dir)/java/nio/channels/
	$(INSTALL_DATA) $(srcdir)/'java/nio/channels/Pipe$$SourceChannel.h' $(DESTDIR)$(gxx_include_dir)/java/nio/channels/
	$(INSTALL_DATA) $(srcdir)/'java/lang/reflect/Proxy$$ProxyData.h' $(DESTDIR)$(gxx_include_dir)/java/lang/reflect/
	$(INSTALL_DATA) $(srcdir)/'java/lang/reflect/Proxy$$ProxyType.h' $(DESTDIR)$(gxx_include_dir)/java/lang/reflect/
	$(INSTALL_DATA) $(srcdir)/'gnu/java/net/PlainSocketImpl$$SocketInputStream.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/net/
	$(INSTALL_DATA) $(srcdir)/'gnu/java/net/PlainSocketImpl$$SocketOutputStream.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/net/
	$(INSTALL_DATA) $(srcdir)/'gnu/java/nio/PipeImpl$$SinkChannelImpl.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/nio/
	$(INSTALL_DATA) $(srcdir)/'gnu/java/nio/PipeImpl$$SourceChannelImpl.h' $(DESTDIR)$(gxx_include_dir)/gnu/java/nio/
## Don't install java/nio/DirectByteBufferImpl$$ReadWrite.h here. It's for internal use only.
## Install Python modules for aot-compile.
	$(mkinstalldirs) $(DESTDIR)$(python_mod_dir); \
	$(INSTALL_DATA) $(srcdir)/contrib/classfile.py \
	  $(DESTDIR)$(python_mod_dir)/classfile.py; \
	$(INSTALL_DATA) contrib/aotcompile.py \
	  $(DESTDIR)$(python_mod_dir)/aotcompile.py;
if CREATE_JAVA_HOME
## Create sdk style directories
	$(mkinstalldirs) $(DESTDIR)$(JRE_BIN_DIR)
	$(mkinstalldirs) $(DESTDIR)$(SDK_BIN_DIR)
	$(mkinstalldirs) $(DESTDIR)$(JRE_LIB_DIR)
	$(mkinstalldirs) $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)
	$(mkinstalldirs) $(DESTDIR)$(SDK_INCLUDE_DIR)
	$(mkinstalldirs) $(DESTDIR)$(SDK_INCLUDE_DIR)/$(OS)
	relative() { \
	  $(PERL) -e 'use File::Spec; \
	    print File::Spec->abs2rel($$ARGV[0], $$ARGV[1])' $$1 $$2; \
	}; \
	RELATIVE=$$(relative $(DESTDIR)$(bindir) $(DESTDIR)$(SDK_BIN_DIR)); \
	ln -sf $$RELATIVE/`echo gij | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/java; \
	ln -sf $$RELATIVE/`echo gjar | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/jar; \
	ln -sf $$RELATIVE/`echo gjdoc | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/javadoc; \
	ln -sf $$RELATIVE/`echo grmic | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/rmic; \
	ln -sf $$RELATIVE/`echo gjavah | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/javah; \
	ln -sf $$RELATIVE/`echo gappletviewer | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/appletviewer; \
	ln -sf $$RELATIVE/`echo gjarsigner | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/jarsigner; \
	ln -sf $$RELATIVE/`echo grmiregistry | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/rmiregistry; \
	ln -sf $$RELATIVE/`echo gkeytool | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/keytool; \
	ln -sf $$RELATIVE/`echo gorbd | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/orbd; \
	ln -sf $$RELATIVE/`echo gnative2ascii | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/native2ascii; \
	ln -sf $$RELATIVE/`echo grmid | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/rmid; \
	ln -sf $$RELATIVE/`echo gtnameserv | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/tnameserv; \
	ln -sf $$RELATIVE/`echo gserialver | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(SDK_BIN_DIR)/serialver; \
	RELATIVE=$$(relative $(DESTDIR)$(bindir) $(DESTDIR)$(JRE_BIN_DIR)); \
	ln -sf $$RELATIVE/`echo grmiregistry | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(JRE_BIN_DIR)/rmiregistry; \
	ln -sf $$RELATIVE/`echo gkeytool | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(JRE_BIN_DIR)/keytool; \
	ln -sf $$RELATIVE/`echo gij | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(JRE_BIN_DIR)/java; \
	ln -sf $$RELATIVE/`echo gorbd | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(JRE_BIN_DIR)/orbd; \
	ln -sf $$RELATIVE/`echo grmid | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(JRE_BIN_DIR)/rmid; \
	ln -sf $$RELATIVE/`echo gtnameserv | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	  $(DESTDIR)$(JRE_BIN_DIR)/tnameserv; \
	$(mkinstalldirs) $(DESTDIR)$(JVM_JAR_DIR); \
	version=$(JAVA_VERSION).$(BUILD_VERSION); \
	working_dir=`pwd`; \
	cd $(DESTDIR)$(JVM_JAR_DIR); \
	  RELATIVE=$$(relative $(DESTDIR)$(JRE_LIB_DIR) \
	    $(DESTDIR)$(JVM_JAR_DIR)); \
	  for jarname in jaas jce jdbc-stdext jndi jndi-cos jndi-dns \
	    jndi-ldap jndi-rmi jsse sasl; \
	  do \
	    ln -sf $$RELATIVE/rt.jar $$jarname-$$version.jar; \
	  done; \
	  RELATIVE=$$(relative $(DESTDIR)$(jardir) \
	    $(DESTDIR)$(JVM_JAR_DIR)); \
	  for jar in *-$$version.jar; \
	  do \
	    ln -sf $$jar $$(echo $$jar | sed "s|-$$version.jar|-$(JAVA_VERSION).jar|g"); \
	    ln -sf $$jar $$(echo $$jar | sed "s|-$$version.jar|.jar|g"); \
	  done; \
	cd $$working_dir; \
	$(mkinstalldirs) $(DESTDIR)$(JRE_LIB_DIR)/security; \
	RELATIVE=$$(relative $(DESTDIR)$(toolexeclibdir)/security \
	  $(DESTDIR)$(JRE_LIB_DIR)/security); \
	cd $(DESTDIR)$(JRE_LIB_DIR)/security; \
	  ln -sf $$RELATIVE/classpath.security java.security; \
	cd $$working_dir; \
	$(mkinstalldirs) $(DESTDIR)$(SDK_INCLUDE_DIR)/linux; \
	$(mkinstalldirs) $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/client; \
	$(mkinstalldirs) $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/server; \
	$(mkinstalldirs) $(DESTDIR)$(SDK_LIB_DIR); \
	RELATIVE=$$(relative $(DESTDIR)$(datadir)/java \
	  $(DESTDIR)$(JRE_LIB_DIR)); \
	ln -sf $$RELATIVE/libgcj-$(gcc_version).jar \
	  $(DESTDIR)$(JRE_LIB_DIR)/rt.jar; \
	RELATIVE=$$(relative $(DESTDIR)$(dbexecdir) \
	  $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)); \
	ln -sf $$RELATIVE/libjawt.so \
	  $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/libjawt.so; \
	RELATIVE=$$(relative $(DESTDIR)$(dbexecdir) \
	  $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/client); \
	ln -sf $$RELATIVE/libjvm.so \
	  $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/client/libjvm.so; \
	RELATIVE=$$(relative $(DESTDIR)$(dbexecdir) \
	  $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/server); \
	ln -sf $$RELATIVE/libjvm.so \
	  $(DESTDIR)$(JRE_LIB_DIR)/$(CPU)/server/libjvm.so;	\
	RELATIVE=$$(relative $(DESTDIR)$(datadir)/java \
	  $(DESTDIR)$(SDK_LIB_DIR)); \
	ln -sf $$RELATIVE/libgcj-tools-$(gcc_version).jar \
	  $(DESTDIR)$(SDK_LIB_DIR)/tools.jar; \
	for headername in jawt jni; do \
	  DIRECTORY=$$(dirname $$($(DESTDIR)$(bindir)/`echo gcj | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	    -print-file-name=include/$$headername.h)); \
	  RELATIVE=$$(relative $$DIRECTORY \
	    $(DESTDIR)$(SDK_INCLUDE_DIR)); \
	  ln -sf $$RELATIVE/$$headername.h \
	    $(DESTDIR)$(SDK_INCLUDE_DIR)/$$headername.h; \
	done; \
	for headername in jawt_md jni_md; do \
	  DIRECTORY=$$(dirname $$($(DESTDIR)$(bindir)/`echo gcj | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` \
	    -print-file-name=include/$$headername.h)); \
	  RELATIVE=$$(relative $$DIRECTORY \
	    $(DESTDIR)$(SDK_INCLUDE_DIR)/linux); \
	  ln -sf $$RELATIVE/$$headername.h \
	    $(DESTDIR)$(SDK_INCLUDE_DIR)/linux/$$headername.h; \
	done; \
	RELATIVE=$$(relative $(DESTDIR)$(datadir)/java \
	  $(DESTDIR)$(JVM_ROOT_DIR)/$(SDK_DIR)); 
endif

## ################################################################

##
## Additional `check' targets for maintainer convenience.
##

## This is used for maintainer-check.  FIXME: should set from
## configure using AC_CHECK_TOOL.
NM = nm

## Try to make sure our library doesn't stomp the namespace.
maintainer-check: libgcj.la
	$(NM) .libs/libgcj.a | grep ' T ' \
## Anything with `4java' is assumed to be from .java source.
	  | grep -v '4java' \
## Anything with Jv is ok.
	  | grep -v 'Jv' \
## `terminate' and `unexpected' are part of the runtime.
	  | grep -v 'terminate__Fv' | grep -v 'unexpected__Fv'

## This rule can be used to see if the headers are more or less
## correct.
header-check: libgcj-$(gcc_version).jar $(nat_headers)
	rm -f htest.cc; \
	for h in $(nat_headers); do \
	  echo "#include \"$$h\"" >> htest.cc; \
	done; \
	$(CXXCOMPILE) -fsyntax-only htest.cc

## This rule can be used to see if all the .class files verify
## correctly.
class-check: libgcj-$(gcc_version).jar
	@ok=0; find . -name '*.class' -print | fgrep -v testsuite | \
	while read f; do \
	  echo "$(GCJ_WITH_FLAGS) --syntax-only $$f"; \
	  if $(GCJ_WITH_FLAGS) --syntax-only $$f; then \
	  :; else ok=1; fi; \
	done; exit $$ok

## This rule checks whether write_entries_to_file works properly.
write-entries-to-file-check:
	@echo Creating list of files to link...
	@: $(call write_entries_to_file,$(libgcj_la_OBJECTS) $(libgcj_la_LIBADD),libgcj.objectlist)

## ################################################################

##
## The `jv-convert' program and code to rebuild the converter header
## files.
##

## it only makes sense to try to rebuild the JIS .h files on native
## systems.
if NATIVE
if MAINTAINER_MODE
noinst_PROGRAMS += gen-from-JIS

gen_from_JIS_SOURCES = \
	gnu/gcj/convert/gen-from-JIS.c \
	gnu/gcj/convert/make-trie.c \
	gnu/gcj/convert/make-trie.h

gen_from_JIS_DEPENDENCIES = \
	gnu/gcj/convert/JIS0201.h \
	gnu/gcj/convert/JIS0208.h \
	gnu/gcj/convert/JIS0212.h

$(srcdir)/gnu/gcj/convert/JIS0208_to_Unicode.cc: ./gen-from-JIS$(EXEEXT)
	 ./gen-from-JIS JIS0208 >$(srcdir)/gnu/gcj/convert/JIS0208_to_Unicode.cc

$(srcdir)/gnu/gcj/convert/JIS0212_to_Unicode.cc: ./gen-from-JIS$(EXEEXT)
	 ./gen-from-JIS JIS0212 >$(srcdir)/gnu/gcj/convert/JIS0212_to_Unicode.cc

$(srcdir)/gnu/gcj/convert/Unicode_to_JIS.cc: ./gen-from-JIS$(EXEEXT)
	 ./gen-from-JIS toJIS >$(srcdir)/gnu/gcj/convert/Unicode_to_JIS.cc

# The Unicode consortium does not permit re-distributing the file JIS0201.TXT.
# You can get it from
# ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/

$(srcdir)/gnu/gcj/convert/JIS0201.h: # gnu/gcj/convert/JIS0201.TXT
	echo '/* This file is automatically generated from Unicode tables */' > tmp-0201; \
	tr  -d '\r' <$(srcdir)/gnu/gcj/convert/JIS0201.TXT \
	| sed -n -e 's|\(0x..\).*\(0x....\).*#\(.*\)$$|MAP(0x00, \1, \2)  /*\3 */|p' \
	>> tmp-0201; \
	mv tmp-0201 $(srcdir)/gnu/gcj/convert/JIS0201.h

# The Unicode consortium does not permit re-distributing the file JIS0208.TXT.
# You can get it from
# ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/

$(srcdir)/gnu/gcj/convert/JIS0208.h: # gnu/gcj/convert/JIS0208.TXT
	echo '/* This file is automatically generated from Unicode tables */' > tmp-0208; \
	tr  -d '\r' <$(srcdir)/gnu/gcj/convert/JIS0208.TXT \
	| sed -n -e 's|\(0x....\).*0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\2, 0x\3, \4)  /*\5 */|p' \
	>> tmp-0208; \
	mv tmp-0208 $(srcdir)/gnu/gcj/convert/JIS0208.h

# The Unicode consortium does not permit re-distributing the file JIS0212.TXT.
# You can get it from
# ftp://ftp.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/JIS/

$(srcdir)/gnu/gcj/convert/JIS0212.h: # gnu/gcj/convert/JIS0212.TXT
	echo '/* This file is automatically generated from Unicode tables */' > tmp-0212; \
	tr  -d '\r' <$(srcdir)/gnu/gcj/convert/JIS0212.TXT \
	| sed -n -e 's|0x\(..\)\(..\).*\(0x....\).*#\(.*\)$$|MAP(0x\1, 0x\2, \3)  /*\4 */|p' \
	>> tmp-0212; \
	mv tmp-0212 $(srcdir)/gnu/gcj/convert/JIS0212.h

endif
endif 


jv_convert_SOURCES =
## We need -nodefaultlibs because we want to avoid gcj's `-lgcj'.  We
## need this because we are explicitly using libtool to link using the
## `.la' file.
jv_convert_LDFLAGS = --main=gnu.gcj.convert.Convert \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
jv_convert_LINK = $(GCJLINK) $(jv_convert_LDFLAGS)
## We don't explicitly link in the libraries we need; libgcj.la brings
## in all dependencies.  We need the -L so that gcj can find libgcj
## with `-lgcj', but it must come first, otherwise the -L flags
## brought in from libgcj.la would cause the install directories to be
## searched before the build-tree ones, and we'd get errors because of
## different libraries with the same SONAME from picky linkers such as
## Solaris'.  FIXME: should be _libs on some systems.
jv_convert_LDADD = -L$(here)/.libs libgcj.la
## Depend on the spec file to make sure it is up to date before
## linking this program.
jv_convert_DEPENDENCIES = libgcj.la libgcj.spec
if BUILD_SUBLIBS
jv_convert_DEPENDENCIES += libgcj-noncore.la
endif

gcj_dbtool_SOURCES = \
gnu/gcj/tools/gcj_dbtool/natMain.cc

## We need -nodefaultlibs because we want to avoid gcj's `-lgcj'.  We
## need this because we are explicitly using libtool to link using the
## `.la' file.
gcj_dbtool_LDFLAGS = --main=gnu.gcj.tools.gcj_dbtool.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gcj_dbtool_LINK = $(GCJLINK) $(gcj_dbtool_LDFLAGS)
## We don't explicitly link in the libraries we need; libgcj.la brings
## in all dependencies.  We need the -L so that gcj can find libgcj
## with `-lgcj', but it must come first, otherwise the -L flags
## brought in from libgcj.la would cause the install directories to be
## searched before the build-tree ones, and we'd get errors because of
## different libraries with the same SONAME from picky linkers such as
## Solaris'.  FIXME: should be _libs on some systems.
gcj_dbtool_LDADD = gnu/gcj/tools/gcj_dbtool.lo -L$(here)/.libs libgcj.la
## Depend on the spec file to make sure it is up to date before
## linking this program.
gcj_dbtool_DEPENDENCIES = gnu/gcj/tools/gcj_dbtool.lo libgcj.la libgcj.spec
if BUILD_SUBLIBS
gcj_dbtool_DEPENDENCIES += libgcj-noncore.la
endif

gc_analyze_SOURCES =

## We need -nodefaultlibs because we want to avoid gcj's `-lgcj'.  We
## need this because we are explicitly using libtool to link using the
## `.la' file.
gc_analyze_LDFLAGS = --main=gnu.gcj.tools.gc_analyze.MemoryAnalyze \
        -rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gc_analyze_LINK = $(GCJLINK) $(gc_analyze_LDFLAGS)
## See jv_convert_LDADD.
gc_analyze_LDADD = -L$(here)/.libs libgcj-tools.la libgcj.la
## Depend on the spec file to make sure it is up to date before
## linking this program.
gc_analyze_DEPENDENCIES = libgcj-tools.la libgcj.la libgcj.spec
if BUILD_SUBLIBS
gc_analyze_DEPENDENCIES += libgcj-noncore.la
endif

gij_SOURCES = 
## We need -nodefaultlibs because we want to avoid gcj's `-lgcj'.  We
## need this because we are explicitly using libtool to link using the
## `.la' file.
gij_LDFLAGS = -rpath $(dbexecdir) -rpath $(toolexeclibdir) \
	-shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gij_LINK = $(GCJLINK) $(gij_LDFLAGS)
## See jv_convert_LDADD.
gij_LDADD = -L$(here)/.libs libgij.la
## Depend on the spec file to make sure it is up to date before
## linking this program.
gij_DEPENDENCIES = libgij.la

## Build an ecjx from a .jar.
ecjx_SOURCES = ecjx.cc
## We use the BC ABI here so that we don't need to compile ecj.jar.
## Hopefully the user has compiled it into his system .db.
## However, even if not it will run reasonably quickly.

ECJX_BASE_FLAGS = -findirect-dispatch \
	--main=org.eclipse.jdt.internal.compiler.batch.GCCMain

if NATIVE

ecjx_LINK = $(GCJLINK) $(ecjx_LDFLAGS)

if ENABLE_SHARED
## Use ecj.jar at runtime.
ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) -Djava.class.path=$(ECJ_JAR)
else !ENABLE_SHARED
## Use ecj.jar at compile time.
ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR) -fbootclasspath=$(BOOTCLASSPATH)
endif !ENABLE_SHARED

ecjx_LDADD = -L$(here)/.libs $(extra_ldflags)
ecjx_DEPENDENCIES = libgcj.la libgcj.spec
if BUILD_SUBLIBS
ecjx_DEPENDENCIES += libgcj-noncore.la
endif
if USE_LIBGCJ_BC
ecjx_DEPENDENCIES += libgcj_bc.la
else
ecjx_LDADD += libgcj.la
endif

else !NATIVE

ecjx_LINK = $(GCJ_FOR_ECJX_LINK) $(ecjx_LDFLAGS)
ecjx_LDFLAGS = $(ECJX_BASE_FLAGS) $(ECJ_BUILD_JAR)
ecjx_LDADD = 
ecjx_DEPENDENCIES = 
ecjx.$(OBJEXT): ecjx.cc
	$(GCC_FOR_ECJX) -c $<

endif !NATIVE

## This is a dummy definition.
gappletviewer_SOURCES =
gappletviewer_LDFLAGS = --main=gnu.classpath.tools.appletviewer.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gappletviewer_LINK = $(GCJLINK) $(gappletviewer_LDFLAGS)
## See jv_convert_LDADD.
gappletviewer_LDADD = -L$(here)/.libs libgcj-tools.la
gappletviewer_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
gjarsigner_SOURCES =
gjarsigner_LDFLAGS = --main=gnu.classpath.tools.jarsigner.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gjarsigner_LINK = $(GCJLINK) $(gjarsigner_LDFLAGS)
## See jv_convert_LDADD.
gjarsigner_LDADD = -L$(here)/.libs libgcj-tools.la
gjarsigner_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
gkeytool_SOURCES =
gkeytool_LDFLAGS = --main=gnu.classpath.tools.keytool.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gkeytool_LINK = $(GCJLINK) $(gkeytool_LDFLAGS)
## See jv_convert_LDADD.
gkeytool_LDADD = -L$(here)/.libs libgcj-tools.la
gkeytool_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
gjar_SOURCES =
gjar_LDFLAGS = --main=gnu.classpath.tools.jar.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gjar_LINK = $(GCJLINK) $(gjar_LDFLAGS)
## See jv_convert_LDADD.
gjar_LDADD = -L$(here)/.libs libgcj-tools.la
gjar_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
gjavah_SOURCES =
gjavah_LDFLAGS = --main=gnu.classpath.tools.javah.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gjavah_LINK = $(GCJLINK) $(gjavah_LDFLAGS)
## See jv_convert_LDADD.
gjavah_LDADD = -L$(here)/.libs libgcj-tools.la
gjavah_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
gcjh_SOURCES =
gcjh_LDFLAGS = --main=gnu.classpath.tools.javah.GcjhMain \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gcjh_LINK = $(GCJLINK) $(gcjh_LDFLAGS)
## See jv_convert_LDADD.
gcjh_LDADD = -L$(here)/.libs libgcj-tools.la
gcjh_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
gnative2ascii_SOURCES =
gnative2ascii_LDFLAGS = --main=gnu.classpath.tools.native2ascii.Native2ASCII \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gnative2ascii_LINK = $(GCJLINK) $(gnative2ascii_LDFLAGS)
## See jv_convert_LDADD.
gnative2ascii_LDADD = -L$(here)/.libs libgcj-tools.la
gnative2ascii_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
gorbd_SOURCES =
gorbd_LDFLAGS = --main=gnu.classpath.tools.orbd.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gorbd_LINK = $(GCJLINK) $(gorbd_LDFLAGS)
## See jv_convert_LDADD.
gorbd_LDADD = -L$(here)/.libs libgcj-tools.la
gorbd_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
grmid_SOURCES =
grmid_LDFLAGS = --main=gnu.classpath.tools.rmid.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
grmid_LINK = $(GCJLINK) $(grmid_LDFLAGS)
## See jv_convert_LDADD.
grmid_LDADD = -L$(here)/.libs libgcj-tools.la
grmid_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
gserialver_SOURCES =
gserialver_LDFLAGS = --main=gnu.classpath.tools.serialver.SerialVer \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gserialver_LINK = $(GCJLINK) $(gserialver_LDFLAGS)
## See jv_convert_LDADD.
gserialver_LDADD = -L$(here)/.libs libgcj-tools.la
gserialver_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
gtnameserv_SOURCES =
gtnameserv_LDFLAGS = --main=gnu.classpath.tools.tnameserv.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gtnameserv_LINK = $(GCJLINK) $(gtnameserv_LDFLAGS)
## See jv_convert_LDADD.
gtnameserv_LDADD = -L$(here)/.libs libgcj-tools.la
gtnameserv_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
grmic_SOURCES =
grmic_LDFLAGS = --main=gnu.classpath.tools.rmic.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
grmic_LINK = $(GCJLINK) $(grmic_LDFLAGS)
## See jv_convert_LDADD.
grmic_LDADD = -L$(here)/.libs libgcj-tools.la
grmic_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
grmiregistry_SOURCES =
grmiregistry_LDFLAGS = --main=gnu.classpath.tools.rmiregistry.Main \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
grmiregistry_LINK = $(GCJLINK) $(grmiregistry_LDFLAGS)
## See jv_convert_LDADD.
grmiregistry_LDADD = -L$(here)/.libs libgcj-tools.la
grmiregistry_DEPENDENCIES = libgcj-tools.la

## This is a dummy definition.
gjdoc_SOURCES =
gjdoc_LDFLAGS = --main=gnu.classpath.tools.gjdoc.Main \
	-Djava.class.path=$(ANTLR_JAR) \
	-rpath $(toolexeclibdir) -shared-libgcc $(THREADLDFLAGS) $(extra_ldflags)
gjdoc_LINK = $(GCJLINK) $(gjdoc_LDFLAGS)
## See jv_convert_LDADD.
gjdoc_LDADD = -L$(here)/.libs libgcj-tools.la
gjdoc_DEPENDENCIES = libgcj-tools.la

## ################################################################
if INTERPRETER
nat_jdwp_source_files = \
gnu/classpath/jdwp/natVMFrame.cc \
gnu/classpath/jdwp/natVMMethod.cc \
gnu/classpath/jdwp/natVMVirtualMachine.cc

nat_jvmti_source_files = \
gnu/gcj/jvmti/natBreakpoint.cc \
gnu/gcj/jvmti/natNormalBreakpoint.cc
else
nat_jdwp_source_files = 
nat_jvmti_source_files =
endif
## This lists all the C++ source files in subdirectories.
nat_source_files = \
$(nat_jdwp_source_files) \
gnu/classpath/natConfiguration.cc \
gnu/classpath/natSystemProperties.cc \
gnu/classpath/natVMStackWalker.cc \
gnu/gcj/natCore.cc \
gnu/gcj/convert/JIS0208_to_Unicode.cc \
gnu/gcj/convert/JIS0212_to_Unicode.cc \
gnu/gcj/convert/Unicode_to_JIS.cc \
gnu/gcj/convert/natIconv.cc \
gnu/gcj/convert/natInput_EUCJIS.cc \
gnu/gcj/convert/natInput_SJIS.cc \
gnu/gcj/convert/natOutput_EUCJIS.cc \
gnu/gcj/convert/natOutput_SJIS.cc \
gnu/gcj/io/natSimpleSHSStream.cc \
gnu/gcj/io/shs.cc \
$(nat_jvmti_source_files) \
gnu/gcj/runtime/natFinalizerThread.cc \
gnu/gcj/runtime/natSharedLibLoader.cc \
gnu/gcj/runtime/natSystemClassLoader.cc \
gnu/gcj/runtime/natStringBuffer.cc \
gnu/gcj/util/natDebug.cc \
gnu/gcj/util/natGCInfo.cc \
gnu/java/lang/natMainThread.cc \
gnu/java/lang/management/natVMClassLoadingMXBeanImpl.cc \
gnu/java/lang/management/natVMCompilationMXBeanImpl.cc \
gnu/java/lang/management/natVMGarbageCollectorMXBeanImpl.cc \
gnu/java/lang/management/natVMMemoryMXBeanImpl.cc \
gnu/java/lang/management/natVMMemoryManagerMXBeanImpl.cc \
gnu/java/lang/management/natVMMemoryPoolMXBeanImpl.cc \
gnu/java/lang/management/natVMOperatingSystemMXBeanImpl.cc \
gnu/java/lang/management/natVMRuntimeMXBeanImpl.cc \
gnu/java/lang/management/natVMThreadMXBeanImpl.cc \
gnu/java/net/natPlainDatagramSocketImpl.cc \
gnu/java/net/natPlainSocketImpl.cc \
gnu/java/net/protocol/core/natCoreInputStream.cc \
gnu/java/nio/natVMPipe.cc \
gnu/java/nio/natVMSelector.cc \
gnu/java/nio/natNIOServerSocket.cc \
gnu/java/nio/natVMChannel.cc \
gnu/java/nio/channels/natFileChannelImpl.cc \
gnu/java/security/jce/prng/natVMSecureRandom.cc \
java/io/natFile.cc \
java/io/natVMConsole.cc \
java/io/natVMObjectInputStream.cc \
java/io/natVMObjectStreamClass.cc \
java/lang/natCharacter.cc \
java/lang/natClass.cc \
java/lang/natClassLoader.cc \
java/lang/natConcreteProcess.cc \
java/lang/natVMDouble.cc \
java/lang/natVMFloat.cc \
java/lang/natMath.cc \
java/lang/natObject.cc \
java/lang/natRuntime.cc	\
java/lang/natString.cc \
java/lang/natAbstractStringBuffer.cc \
java/lang/natSystem.cc \
java/lang/natThread.cc \
java/lang/natThreadLocal.cc \
java/lang/natVMClassLoader.cc \
java/lang/natVMProcess.cc \
java/lang/natVMThrowable.cc \
java/lang/ref/natReference.cc \
java/lang/reflect/natArray.cc \
java/lang/reflect/natConstructor.cc \
java/lang/reflect/natField.cc \
java/lang/reflect/natMethod.cc \
java/lang/reflect/natVMProxy.cc \
java/net/natVMInetAddress.cc \
java/net/natVMNetworkInterface.cc \
java/net/natVMURLConnection.cc \
java/nio/channels/natVMChannels.cc \
java/nio/natVMDirectByteBufferImpl.cc \
java/security/natVMAccessController.cc \
java/security/natVMAccessControlState.cc \
java/text/natCollator.cc \
java/util/natVMTimeZone.cc \
java/util/concurrent/atomic/natAtomicLong.cc \
java/util/logging/natLogger.cc \
java/util/zip/natDeflater.cc \
java/util/zip/natInflater.cc \
sun/misc/natUnsafe.cc

xlib_nat_source_files = \
gnu/gcj/xlib/natClip.cc \
gnu/gcj/xlib/natColormap.cc \
gnu/gcj/xlib/natDisplay.cc \
gnu/gcj/xlib/natDrawable.cc \
gnu/gcj/xlib/natFont.cc \
gnu/gcj/xlib/natGC.cc \
gnu/gcj/xlib/natPixmap.cc \
gnu/gcj/xlib/natScreen.cc \
gnu/gcj/xlib/natVisual.cc \
gnu/gcj/xlib/natWMSizeHints.cc \
gnu/gcj/xlib/natWindow.cc \
gnu/gcj/xlib/natWindowAttributes.cc \
gnu/gcj/xlib/natXAnyEvent.cc \
gnu/gcj/xlib/natXButtonEvent.cc \
gnu/gcj/xlib/natXColor.cc \
gnu/gcj/xlib/natXConfigureEvent.cc \
gnu/gcj/xlib/natXException.cc \
gnu/gcj/xlib/natXExposeEvent.cc \
gnu/gcj/xlib/natXImage.cc \
gnu/gcj/xlib/natXUnmapEvent.cc

## ################################################################

##
## Creating and installing sources.zip
##

## Create a zip holding all the sources.  This can be meaningfully
## used in Eclipse.
src.zip:
	-rm -f src.zip
	here=`pwd`; \
	( \
	  ( cd $(srcdir)/classpath; \
	  find java gnu javax org sun -name '*.java' -print | \
	  while read file; do \
## Ugly code to avoid "echo -C".  Must separate each entry by a newline
## Gross but easy.
	    echo "x-C" | sed -e 's/^.//'; \
	    echo $(srcdir)/classpath; \
	    echo $$file; \
	  done ); \
	  ( cd $(srcdir)/classpath/external/sax; \
	  find org -name '*.java' -print | \
	  while read file; do \
	    echo "x-C" | sed -e 's/^.//'; \
	    echo $(srcdir)/classpath/external/sax; \
	    echo $$file; \
	  done ); \
	  ( cd $(srcdir)/classpath/external/relaxngDatatype; \
	  find org -name '*.java' -print | \
	  while read file; do \
	    echo "x-C" | sed -e 's/^.//'; \
	    echo $(srcdir)/classpath/external/relaxngDatatype; \
	    echo $$file; \
	  done ); \
	  ( cd $(srcdir)/classpath/external/w3c_dom; \
	  find org -name '*.java' -print | \
	  while read file; do \
	    echo "x-C" | sed -e 's/^.//'; \
	    echo $(srcdir)/classpath/external/w3c_dom; \
	    echo $$file; \
	  done ); \
## Now the build tree.
	  ( cd classpath; \
	    find gnu java -name '*.java' -print | \
	    while read file; do \
	    echo "x-C" | sed -e 's/^.//'; \
	    echo `pwd`; \
	    echo $$file; \
	  done ); \
	) | \
## Many of the above circumlocutions were because ZIP used to be a
## relative path to fastjar.  It didn't seem worthwhile to change the
## code when we moved to an external jar.
	$(JAR) -cfM@ $$here/src.zip
## Override GNU Classpath sources with libgcj replacements.
	here=`pwd`; \
	( \
	  ( cd $(srcdir); \
	  find gnu java -name '*.java' -print | \
	  while read file; do \
	    echo "x-C" | sed -e 's/^.//'; \
	    echo $(srcdir); \
	    echo $$file; \
	  done ); \
	) | \
	$(JAR) -ufM@ $$here/src.zip

## We use a variable for this in case the user wants to override it.
sourcesdir = $(jardir)

install-src.zip: src.zip
	$(INSTALL_DATA) src.zip $(DESTDIR)$(sourcesdir)/src-$(gcc_version).zip


## ################################################################

##
## Dependency tracking madness.
##

## This is an evil hack to work around an automake limitation.  We
## need to ensure that all CNI headers are built, not just the ones
## used internally by libgcj. We can't make the .o files depend on
## nat_headers, because in that case we'll force a complete rebuild of
## the C++ code whenever any .java file is touched.  So instead we
## have a dummy rule which is only used once, namely the first time a
## build is done.  On subsequent builds, the dependency tracking for
## the .cc compilations will have picked up the .h files, and these
## will be built directly as needed.

headers.stamp:
## Note that we don't use a real dependency here, since we don't want
## to rebuild all the headers here when the header list changes.  If
## we did rebuild here, then any addition of a .java file would cause
## a large number of recompilations.
	$(MAKE) create-headers
	@echo > headers.stamp

headers_to_make = $(nat_headers)
if XLIB_AWT
headers_to_make += $(xlib_nat_headers)
endif

create-headers: $(headers_to_make)

.PHONY: create-headers

$(libgcj_la_OBJECTS) $(gcj_dbtool_OBJECTS) $(xlib_nat_files): headers.stamp
$(libgij_la_OBJECTS): headers.stamp
$(libjvm_la_OBJECTS): headers.stamp

## ################################################################

##
## This section is for make and multilib madness.
##

# Work around what appears to be a GNU make bug handling MAKEFLAGS
# values defined in terms of make variables, as is the case for CC and
# friends when we are called from the top level Makefile.
AM_MAKEFLAGS = \
	"AR_FLAGS=$(AR_FLAGS)" \
	"CC_FOR_BUILD=$(CC_FOR_BUILD)" \
	"CFLAGS=$(CFLAGS)" \
	"CXXFLAGS=$(CXXFLAGS)" \
	"CPPFLAGS=$(CPPFLAGS)" \
	"CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \
	"CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET)" \
	"INSTALL=$(INSTALL)" \
	"INSTALL_DATA=$(INSTALL_DATA)" \
	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
	"INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
	"GCJFLAGS=$(GCJFLAGS)" \
	"LDFLAGS=$(LDFLAGS)" \
	"LIBCFLAGS=$(LIBCFLAGS)" \
	"LIBCFLAGS_FOR_TARGET=$(LIBCFLAGS_FOR_TARGET)" \
	"MAKE=$(MAKE)" \
	"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" \
	"PICFLAG=$(PICFLAG)" \
	"PICFLAG_FOR_TARGET=$(PICFLAG_FOR_TARGET)" \
	"SHELL=$(SHELL)" \
	"RUNTESTFLAGS=$(RUNTESTFLAGS)" \
	"exec_prefix=$(exec_prefix)" \
	"datadir=$(datadir)" \
	"infodir=$(infodir)" \
	"libdir=$(libdir)" \
	"mandir=$(mandir)" \
	"prefix=$(prefix)" \
	"gxx_include_dir=$(gxx_include_dir)" \
	"AR=$(AR)" \
	"AS=$(AS)" \
	"DLLTOOL=$(DLLTOOL)" \
	"LD=$(LD)" \
	"LIBCFLAGS=$(LIBCFLAGS)" \
	"NM=$(NM)" \
	"PICFLAG=$(PICFLAG)" \
	"RANLIB=$(RANLIB)" \
	"DESTDIR=$(DESTDIR)" \
	"JAR=$(JAR)"

# Subdir rules rely on $(FLAGS_TO_PASS)
FLAGS_TO_PASS = $(AM_MAKEFLAGS)

CONFIG_STATUS_DEPENDENCIES = $(srcdir)/configure.host

MAKEOVERRIDES=

# Multilib support variables.
MULTISRCTOP =
MULTIBUILDTOP =
MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true

# Multilib support.
.PHONY: all-multi mostlyclean-multi clean-multi distclean-multi \
	maintainer-clean-multi

all-recursive: all-multi
install-recursive: install-multi
mostlyclean-recursive: mostlyclean-multi
clean-recursive: clean-multi
distclean-recursive: distclean-multi
maintainer-clean-recursive: maintainer-clean-multi

all-multi:
	: $(MAKE) ; exec $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do
install-multi:
	$(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do
mostlyclean-multi:
	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean
clean-multi:
	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean
distclean-multi:
	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean
maintainer-clean-multi:
	$(MULTICLEAN) $(AM_MAKEFLAGS) DO=maintainer-clean multi-clean

if ANONVERSCRIPT
if ANONVERSCRIPT_SUN
# This must be at the end of the Makefile, otherwise .SECONDEXPANSION
# causes expansion of filenames with $ in their names, which breaks the build.
# .SECONDEXPANSION is necessary to allow the use of automatic variables ($@
# in this case) in the requisites of pattern rules.
.SECONDEXPANSION:

%.ver-sun : $(srcdir)/libgcj.ver \
		$(top_srcdir)/../contrib/make_sunver.pl \
		$$($$(basename $$@)_la_OBJECTS) $$($$(basename $$@)_la_LIBADD)
	perl $(top_srcdir)/../contrib/make_sunver.pl \
	  $(srcdir)/libgcj.ver \
	 `echo $($(basename $@)_la_OBJECTS) $($(basename $@)_la_LIBADD) | \
	    sed 's,\([^/ 	]*\)\.l\([ao]\),.libs/\1.\2,g'` \
	 > $@ || (rm -f $@ ; exit 1)
endif
endif
