#
# @(#)GNUmakefile	1.52 E%
#
# Build the 1.1-compatible version of the Swing classes.
# These use the javax/swing package.
#

BUILDDIR     = ../..
include $(BUILDDIR)/Platform.gmk
PACKAGE      = javax.swing
PRODUCT      = sun
CLASSDESTDIR	= $(CLASSBINDIR11)
include $(BUILDDIR)/makefiles/Defs.gmk
CLASSBINDIR	= $(CLASSBINDIR11)

#
# Files
#
include $(MINCLUDES)com_sun_java_swing.jmk
include $(MINCLUDES)com_sun_java_swing.mmk

#
# Tell Classes.gmk that we want to do some action before any attempt
# to compile any class is made.
#
CLASSES_INIT = fetch_java_files

FILES_misc = $(MISC:classes/%.java=classes11/%.java)
FILES_java = $(JDK_1_1_FILES) $(COMMON_FILES) $(MUNGE_FILES)

#
# Rules
#
all: classes other_files html32dtd plaf

include $(BUILDDIR)/makefiles/Classes.gmk

clean:: classes.clean plaf.clean html32dtd.clean beaninfo.clean sources.clean

#
# Helper for "classes" target because source files don't come from
# src/share/classes.
#
$(CLASSDESTDIR)/%.class: $(SHARE_SRC)/classes11/%.java
	@echo $? >>.classes.list

other_files: $(MISC_FILES)

plaf:
	@echo ">>>Recursively making "$@" @ `date` ..."; \
	cd plaf; $(MAKE) RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION) all\
        || exit 1; cd ..; \
	echo "<<<Finished Recursively making "$@" @ `date`." ; \

plaf.clean:
	@echo ">>>Recursively making "$@" @ `date` ..."; \
	cd plaf; $(MAKE) RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION) clobber\
        || exit 1; cd ..; \
	echo "<<<Finished Recursively making "$@" @ `date`." ; \

beaninfo.clean:
	@echo ">>>Recursively making "$@" @ `date` ..."; \
	cd ../../javax/swing/beaninfo; $(MAKE) RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION) clobber\
        || exit 1; cd ..; \
	echo "<<<Finished Recursively making "$@" @ `date`." ; \

.PHONY: plaf plaf.clean beaninfo.clean


#
# Enable a 1.1 build environment.
#
# workaround for compiler bug 4155261
# I occasionaly get out of memory errors, so removing this.
# JAVAC_VMFLAGS = -J-Xms32m -J-Xms64m -J-Xmaxf1
JAVAC_VMFLAGS =
JAVAC_CMD  = $(LATEST_JDK12)/bin/javac -target 1.1 $(JAVAC_VMFLAGS) -sysclasspath $(JDK11DIR)/lib/classes.zip -classpath $(CLASSBINDIR11):$(VPATH11.java) -d $(CLASSDESTDIR) $(OTHER_JAVACFLAGS)

#
# Build the dtd for text.html swing package. 
#
# OPTIMIZED += html32dtd
# clean:: html32dtd.clean

html32dtd html32dtd.clean: 
	@echo ">>>Recursively making "$@" @ `date` ..."; \
	cd html32dtd; $(MAKE) RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION) $@\
        || exit 1; cd ..; \
	echo "<<<Finished Recursively making "$@" @ `date`." ; \

.PHONY: html32dtd html32dtd.clean

#
# The rest of this makefile builds jar files.
#
OPTIMIZED  += build_jars 
#DEBUG     += build_jars

LIBDIR11    = $(shell pwd)/../../1.1_lib
MANIFEST    = $(shell pwd)/manifest
SWING_PKG    = javax/swing
PLAFS_PKG    = com/sun/java/swing/plaf

SWINGJAR    = $(LIBDIR11)/swing.jar
MOTIFJAR    = $(LIBDIR11)/motif.jar
WINDOWSJAR  = $(LIBDIR11)/windows.jar
MULTIJAR    = $(LIBDIR11)/multi.jar
MACJAR      = $(LIBDIR11)/mac.jar
ALLJARS     = $(SWINGJAR) $(MOTIFJAR) $(WINDOWSJAR) $(MULTIJAR) $(MACJAR)

# These classes get listed in the manifest file used during JAR creation.
BEANS       = \
	$(SWING_PKG)/JApplet.class				\
	$(SWING_PKG)/JButton.class 				\
	$(SWING_PKG)/JCheckBox.class 				\
	$(SWING_PKG)/JCheckBoxMenuItem.class 			\
	$(SWING_PKG)/JComboBox.class				\
	$(SWING_PKG)/JDialog.class				\
	$(SWING_PKG)/JEditorPane.class				\
	$(SWING_PKG)/JFrame.class  				\
	$(SWING_PKG)/JInternalFrame.class			\
	$(SWING_PKG)/JLabel.class 				\
	$(SWING_PKG)/JList.class 				\
	$(SWING_PKG)/JMenu.class 				\
	$(SWING_PKG)/JMenuBar.class 				\
	$(SWING_PKG)/JMenuItem.class 				\
	$(SWING_PKG)/JOptionPane.class				\
	$(SWING_PKG)/JPanel.class      				\
	$(SWING_PKG)/JPasswordField.class			\
	$(SWING_PKG)/JPopupMenu.class 				\
	$(SWING_PKG)/JProgressBar.class				\
	$(SWING_PKG)/JRadioButton.class 			\
	$(SWING_PKG)/JRadioButtonMenuItem.class 		\
	$(SWING_PKG)/JScrollBar.class 				\
	$(SWING_PKG)/JScrollPane.class 				\
	$(SWING_PKG)/JSeparator.class				\
	$(SWING_PKG)/JSlider.class 				\
	$(SWING_PKG)/JSplitPane.class 				\
	$(SWING_PKG)/JTabbedPane.class 				\
	$(SWING_PKG)/JTable.class				\
	$(SWING_PKG)/JTextArea.class				\
	$(SWING_PKG)/JTextField.class				\
	$(SWING_PKG)/JTextPane.class				\
	$(SWING_PKG)/JToggleButton.class			\
	$(SWING_PKG)/JToolBar.class 				\
	$(SWING_PKG)/JTree.class				\
	$(SWING_PKG)/JWindow.class

clean::
	$(RM) $(MANIFEST)
	$(RM) $(SWINGJAR) $(MOTIFJAR) \
	      $(WINDOWSJAR) $(MULTIJAR) $(MACJAR)


build_jars: $(LIBDIR11) $(ALLJARS)

$(LIBDIR11):
	@mkdir -p $@

$(SWINGJAR): FORCE
	@echo Creating $(MANIFEST)
	@$(RM) $(MANIFEST)
	@for i in $(BEANS); do \
		echo "Name: "$$i >> $(MANIFEST) ; \
		echo "Java-Bean: True" >> $(MANIFEST) ; \
		echo "" >> $(MANIFEST) ; \
	done
	@$(RM) $(SWINGJAR)
	(cd $(CLASSBINDIR11); $(JAR_JDK11_CMD) cfm $(SWINGJAR) $(MANIFEST) \
	    `find javax -name multi -prune -o -type f -print | sort`)
	@$(RM) $(MANIFEST)

#
# The funny $(subst .jar,,$(@F)) actually produces the strings
# "motif", "windows", "multi", etc.
#
$(MOTIFJAR) $(WINDOWSJAR) $(MACJAR): FORCE
	@$(RM) $@
	(cd $(CLASSBINDIR11); $(JAR_JDK11_CMD) cf $@ \
		`find $(PLAFS_PKG)/$(subst .jar,,$(@F))/ -type f -print`)

$(MULTIJAR): FORCE
	@$(RM) $@
	(cd $(CLASSBINDIR11); $(JAR_JDK11_CMD) cf $@ \
		`find $(SWING_PKG)/plaf/$(subst .jar,,$(@F))/ -type f -print`)

#
# Installing resources.
#
$(CLASSBINDIR11)/javax/%.gif: $(SHARE_SRC)/classes/javax/%.gif
	@mkdir -p `dirname $@`
	@$(RM) $@
	cp $? $@

$(CLASSBINDIR11)/javax/%.css: $(SHARE_SRC)/classes/javax/%.css
	@mkdir -p `dirname $@`
	@$(RM) $@
	cp $? $@

$(CLASSBINDIR11)/javax/%.bdtd: $(SHARE_SRC)/classes/javax/%.bdtd
	@mkdir -p `dirname $@`
	@$(RM) $@
	cp $? $@

$(CLASSBINDIR11)/javax/%.txt: $(SHARE_SRC)/classes/javax/%.txt
	@mkdir -p `dirname $@`
	@$(RM) $@
	cp $? $@

#
# A target for all the sources that Swing generates.
#
fetch_java_files: $(FILES_misc)


# For making the sources. Almost all of this is done in
# Release.gmk, we just add the munged files.

MUNGE_DIR = 1.1_src

FILES_source = $(MUNGE_FILES:%.java=$(MUNGE_DIR)/%.java)

CONVERT_CMD = $(LATEST_JDK12)/bin/java Munge

$(MUNGE_DIR):	
	mkdir $(MUNGE_DIR)

sources.clean:
	@$(RM) -rf $(MUNGE_DIR)
	@$(RM) Munge.class

Munge.class: ../../../share/tools/munge/Munge.java
	$(LATEST_JDK12)/bin/javac -d . $?

sources: swing_sources FORCE
	(cd $(MUNGE_DIR); zip ../$(SRC_ZIP_FILE) `find javax -type f -print`)
	zip -d $(SRC_ZIP_FILE) $(subst $(TARGDIR),,$(JDK_1_2_FILES))

swing_sources: $(MUNGE_DIR) Munge.class $(FILES_source)
	@echo $(FILES_source)

$(MUNGE_DIR)/%.java: $(SHARE_SRC)/classes/%.java
	@mkdir -p `dirname $@`
	$(CONVERT_CMD) $? > $@
