#
# @(#)GNUmakefile	1.27 98/12/16
#
# Makefile for core Java libraries
# (java.lang, java.lang.ref, java.lang.reflect, java.io)
#

BUILDDIR = ../..
include $(BUILDDIR)/Platform.gmk
PACKAGE = java.lang
LIBRARY = java
PRODUCT = java

#
# Directories
#

# We need ARCH *before* we do the include that gets us Defs-solaris.gmk
# [23-Apr-97 22:29:12 this appears to no longer be the case (?)]
ARCH = $(shell uname -p)
include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk

#
# Files common to all ports: Solaris and thread package-specifc files
# are added later.
#
include $(MINCLUDES)java_java.cmk

#
# Add to the default C file search paths
#
vpath %.c $(PLATFORM_SRC)/native/java/lang:$(SHARE_SRC)/native/java/lang
vpath %.c $(SHARE_SRC)/native/java/lang/ref
vpath %.c $(SHARE_SRC)/native/java/lang/reflect
vpath %.c $(SHARE_SRC)/native/java/io
vpath %.c $(PLATFORM_SRC)/native/java/io
vpath %.c $(SHARE_SRC)/native/java/security
vpath %.c $(SHARE_SRC)/native/common
vpath %.c $(SHARE_SRC)/native/sun/misc
vpath %.c $(SHARE_SRC)/native/java/sql

#
# Includes the fdlibm header file.
#
OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/lang/fdlibm/include

#
# Also include the io_util.h header file.
#
OTHER_INCLUDES += -I$(SHARE_SRC)/native/java/io

#
# Is the altzone extern documented in ctime(3C) available?
#
HAVE_ALTZONE=true
ifeq ($(HAVE_ALTZONE),true)
OTHER_CPPFLAGS += -DHAVE_ALTZONE
endif

#
# System.c needs RELEASE.
# java_props_md.c needs ARCH on non-Solaris platforms.
#
OTHER_CPPFLAGS += $(VERSION_DEFINES)
ifeq ($(CC_VERSION),gcc)
OTHER_CPPFLAGS += -DARCH='"$(ARCH)"'
endif

#
# Is the key in the call nl_langinfo(CODESET) called something other than
# CODESET?
#
ifdef ALT_CODESET_KEY
OTHER_CPPFLAGS += -DALT_CODESET_KEY=$(ALT_CODESET_KEY)
endif

#
# The next two included files define FILES_java and FILES_export
#
include $(MINCLUDES)java_java.jmk
include Exportedfiles.gmk

FILES_java += $(TARGDIR)java/lang/UNIXProcess.java
FILES_c += $(TARGDIR)UNIXProcess_md.c
FILES_c += $(TARGDIR)UnixFileSystem_md.c
FILES_c += $(TARGDIR)canonicalize_md.c

FILES_java += $(TARGDIR)java/io/UnixFileSystem.java

include $(TOPDIR)/build/$(PLATFORM)/makefiles/Library.gmk

#
# Bootstrap stage.
#
JAVAC_CMD = $(JAVAC_BOOT_CMD)
JAVAH_CMD = $(JAVAH_BOOT_CMD)

#
# Has been converted to the JNI: generate JNI-style header files
#
JAVAHFLAGS += -jni

$(JAVAH): FORCE
	@echo ">>>Recursively making javah..."
	@cd ../javah; $(MAKE) $(@)
	@echo "<<<Finished Recursively making javah."

LIBSOCKET = -lsocket
OTHER_LDLIBS += $(LIBSOCKET) -lnsl -ldl -L../fdlibm -lfdlibm$(SUFFIX).$(ARCH)

#
# Verifier needs these 2 header files from the VM.
#
VERIFIER_JVMFILES = opcodes.h opcodes.length
$(OBJDIR)/check_code.o: $(VERIFIER_JVMFILES)
opcodes.h: $(SHARE_SRC)/javavm/include/opcodes.h
	@rm -f $@
	cp $< $@
opcodes.length: $(SHARE_SRC)/javavm/include/opcodes.length
	@rm -f $@
	cp $< $@

#
# Now that the body of the runtime is in a shared object, it is built
# as a library using Library.gmk rather than Program.gmk.  Library.gmk
# doesn't expect to clean up as much, so we have to do more here.
#
clean :: FORCE
	rm -rf CClassHeaders
	rm -rf $(OBJROOTS)
	rm -f classstubs.c .program* .library* .classes*
	$(RM) $(VERIFIER_JVMFILES)

clobber :: FORCE
	rm -f $(OPTIMIZED) $(DEBUG) $(PRODUCT) $(PRODUCT)_g
	rm -fr 	$(CLASSBINDIR)/java/io $(CLASSBINDIR)/java/lang \
		$(CLASSBINDIR)/java/security $(CLASSBINDIR)/java/util \
		$(CLASSBINDIR)/sun/io $(CLASSBINDIR)/sun/misc \
		$(CLASSBINDIR)/sun/tools/debug

# Rule for building BreakpointHandler.class
$(CLASSBINDIR)/%.class: $(SHARE_SRC)/sun/%.java
	@echo $? >>.classes.list

#
# Additional rule from sun/net/GNUmakefile to copy content-type.properties
# file so that the MimeTable class won't complain while bootstrapping...
#
PROPS = content-types.properties

$(OPTIMIZED) $(DEBUG) :: .lib.dirs $(LIBDIR)/$(PROPS)

$(LIBDIR)/$(PROPS): $(PLATFORM_SRC)/lib/$(PROPS)
	rm -rf $@
	cp $< $@

clean :: FORCE
	rm -rf .lib.* $(LIBDIR)/$(PROPS)

.lib.dirs:
	mkdir -p $(LIBDIR)
	touch .lib.dirs
