#
# @(#)GNUmakefile	1.24 95/11/29
#
# Makefile for building javac
#

PROGRAM = javac
PACKAGE = sun.tools
PLATFORM = solaris
PRODUCT = sun

TOPDIR = ../../../..

include Classfiles.gmk					# Defines CLASSFILES
include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk
include $(TOPDIR)/build/$(PLATFORM)/makefiles/Rules.gmk
include $(TOPDIR)/build/$(PLATFORM)/java/java/Classfiles.gmk	# Defines Files.java

JAVAC = $(BINDIR)/$(ARCH)/javac
SRCDIR = $(TOPDIR)/src/share/sun
JAVASRCDIR = $(TOPDIR)/src/share/java
PKGPATH = $(TOPDIR)/src/$(PLATFORM)/sun $(SRCDIR) $(JAVASRCDIR)
COMPCLASSFILES = $(CLASSFILES:%.java=$(CLASSBINDIR)/%.class)
JAVACLASSFILES = \
	$(foreach PATH, $(PKGPATH), \
	    $(foreach FILE, $(FILES.java), \
	        $(wildcard $(PATH)/$(FILE)) \
	    ) \
	)

PROPS = $(SRCDIR)/sun/tools/javac/javac.properties

PACKAGES =  \
        java/lang \
        java/util \
        java/io \
        sun/tools/java \
        sun/tools/javac \
        sun/tools/tree \
        sun/tools/asm
 
#
# Rules
#

all debug optimized install: $(JAVAC) $(TOPDIR)/build/lib/javac.properties

properties: $(TOPDIR)/build/lib/javac.properties

clobber :: clean
	-$(RM) -fr $(JAVAC) $(JAVAC)_g

clean ::
	-$(RM) -fr genconst RuntimeConstants.java boot obj obj_g opcodes.*
	-$(RM) -fr $(CLASSBINDIR)/sun/tools/java \
		  $(CLASSBINDIR)/sun/tools/asm \
	          $(CLASSBINDIR)/sun/tools/tree \
		  $(CLASSBINDIR)/sun/tools/javac

classes: $(COMPCLASSFILES)

#
# Special rules
#

# Comment out the following line if you have screwed up the compiler
# and it fails to compile itself:
JAVAC_CMD=$(JAVAC_BOOT_CMD)

$(JAVAC) : javac.sh RuntimeConstants.java
	-$(RM) -rf boot $(JAVAC) $(JAVAC)_g ; mkdir -p boot/java
	$(JAVAC_BOOT_CMD) -depend -classpath $(SRCDIR):$(CLASSBINDIR) \
		-d $(CLASSBINDIR) RuntimeConstants.java \
		$(SRCDIR)/sun/tools/javac/Main.java
	$(JAVAC_CMD) -O -d boot -classpath $(SRCDIR):$(JAVASRCDIR) \
		RuntimeConstants.java $(SRCDIR)/sun/tools/javac/Main.java \
		$(JAVACLASSFILES)
	-$(RM) -f $(TOPDIR)/build/lib/javac.properties
	mkdir -p $(TOPDIR)/build/lib
	cp $(PROPS) $(TOPDIR)/build/lib
	-$(RM) -rf $(CLASSBINDIR)/java ; mv boot/java $(CLASSBINDIR)
	cp javac.sh $(JAVAC) ; cp javac_g.sh $(JAVAC)_g ; \
		chmod +x $(JAVAC) $(JAVAC)_g
	-$(RM) -f $(BINDIR)/javac ; ln -s .java_wrapper $(BINDIR)/javac
	-$(RM) -f $(BINDIR)/javac_g ; ln -s .java_wrapper $(BINDIR)/javac_g
	
bootstrap:
	-$(RM) -rf boot ; mkdir -p boot/java
	$(JAVAC_CMD) -O -verbose -d boot -classpath $(SRCDIR):$(JAVASRCDIR)
		RuntimeConstants.java $(SRCDIR)/sun/tools/javac/Main.java \
		$(JAVACLASSFILES)
	-$(RM) -f $(TOPDIR)/build/lib/javac.properties
	mkdir -p $(TOPDIR)/build/lib
	cp $(PROPS) $(TOPDIR)/build/lib
	-$(RM) -rf $(CLASSBINDIR)/java ; mv boot/java $(CLASSBINDIR)

RuntimeConstants.java: genconst
	(echo "/*" `date` " */";			\
         echo "package sun.tools.java;";		\
	 echo "public interface RuntimeConstants {";	\
	 ./genconst;					\
	 echo "}") > RuntimeConstants.java

genconst: genconst.c $(TOPDIR)/src/share/java/include/oobj.h
	$(CC) $(INCLUDES) -I$(TOPDIR)/build/$(PLATFORM)/java/java \
		-o genconst genconst.c

$(TOPDIR)/build/lib/javac.properties : $(PROPS)
	-$(RM) $(TOPDIR)/build/lib/javac.properties
	mkdir -p $(@D)
	cp $(PROPS) $(TOPDIR)/build/lib/javac.properties

$(CLASSBINDIR)/sun/tools/java/RuntimeConstants.class: RuntimeConstants.java
	$(JAVAC_BOOT_CMD) -classpath $(CLASSPATH) -d $(CLASSBINDIR) $(JAVACFLAGS) \
		RuntimeConstants.java

test : 
	$(JAVAC) -depend -classpath $(SRCDIR):$(CLASSBINDIR) \
		-d $(CLASSBINDIR) RuntimeConstants.java \
		$(SRCDIR)/sun/tools/javac/Main.java
	$(JAVAC) -classpath $(SRCDIR):$(JAVASRCDIR) \
		-d $(CLASSBINDIR) $(JAVACLASSFILES)


# Because we haven't included Rules.gmk
$(CLASSBINDIR)/%.class: $(SRCDIR)/%.java
	$(JAVAC_CMD) -classpath $(CLASSPATH) -d $(CLASSBINDIR) $(JAVACFLAGS) $<
$(CLASSBINDIR)/%.class: $(JAVASRCDIR)/%.java
	$(JAVAC_CMD) -classpath $(CLASSPATH) -d $(CLASSBINDIR) $(JAVACFLAGS) $<
