#
# @(#)GNUmakefile	1.165 98/09/17
#
# Makefile for building and packaging all of the JDK and the JRE. See
# also included files.
#

#
# Most frequently used targets:
#
#    all         -- build optimized and debug versions of the core JDK.
#    ext         -- build optimized and debug versions of extensions.
#    world       -- build both "all" and "ext" targets.
#    releasedocs -- run javadoc to generate the JDK documentation.
#    alldocs     -- run javadoc on everything including sun.*
#
#  There are also some release engineering targets. See
#  ./makefiles/Release.gmk for their descriptions.
#
#  "all" should perhaps mean "world". But in the past, "all" has
#  meant opt+dbg of core, so we retain that interpretation for
#  historical reasons.
#

BUILDDIR=.
include $(BUILDDIR)/Platform.gmk
include $(TOPDIR)/build/$(PLATFORM)/makefiles/Defs.gmk

#
# Core.
#
SUBDIRS    = java javax sun sunw com corba mkdemo
all optimized debug clean clobber:: sanity
	@for i in $(SUBDIRS) ; do \
	    echo ">>>Recursively making "$$i" "$@"..."; \
	    cd $$i; $(MAKE) $@ RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION) \
            || exit 1; cd ..; \
	    echo "<<<Finished Recursively making "$$i" "$@"." ; \
	done

#
# Extensions.
#
EXTSUBDIRS = i18n iiimp
ext-all ext-optimized ext-debug ext-clean ext-clobber:: sanity
	@for i in $(EXTSUBDIRS); do \
	    dir=$(TOPDIR)/ext/$$i/build/$(PLATFORM); \
	    target=$(subst ext-,,$@); \
	    echo ">>>Recursively making "$$dir" "$$target"..."; \
	    (cd $$dir; $(MAKE) $$target RELEASE=$(RELEASE) \
		           FULL_VERSION=$(FULL_VERSION)) || exit 1; \
	    echo "<<<Finished Recursively making "$$dir" "$$target"." ; \
	done

#
# Everything.
#
world-all:       all       ext-all
world-optimized: optimized ext-optimized
world-debug:     debug     ext-debug
world-clean:     clean     ext-clean
world-clobber:   clobber   ext-clobber

clean clobber:: 
	rm -fr $(CLASSBINDIR) $(BINDIR) $(LIBDIR)

#
# Convenient aliases.
#
ext: ext-all
world: world-all

#
# A Swing distribution that runs on JDK 1.1.x. 
#
swing-1.1:
	-mkdir -p $(SHARE_SRC)/classes11
	if [ ! -d $(SHARE_SRC)/classes11/com ] ; then \
		ln -s ../classes/com $(SHARE_SRC)/classes11/com ; \
	fi
	if [ ! -d $(SHARE_SRC)/classes11/javax ] ; then \
		ln -s ../classes/javax $(SHARE_SRC)/classes11/javax ; \
	fi
	cd sun/accessibility; \
		$(MAKE) all RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION)
	cd sun/swing; \
		$(MAKE) all RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION)
	-rm $(SHARE_SRC)/classes11/com
	-rm $(SHARE_SRC)/classes11/javax
	-rmdir $(SHARE_SRC)/classes11

swing-1.1-demo:
	cd mkdemo/jfc; $(MAKE) $(@)

swing-1.1-clobber: swing-1.1-package-clobber
	cd sun/accessibility; \
		$(MAKE) clobber RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION)
	cd sun/swing; \
		$(MAKE) clobber RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION)
	rm -rf 1.1_demo
	rm -rf 1.1_javadoc
	rm -rf 1.1_swing-beans
	rm -rf 1.1_classes
	-rm $(SHARE_SRC)/classes11/com
	-rm $(SHARE_SRC)/classes11/javax
	-rmdir $(SHARE_SRC)/classes11

swing-1.1-beaninfo:
	cd javax/swing/beaninfo; $(MAKE) swing-beans

#
# A Swing distribution that runs on JDK 1.2
#
swing-1.2:
	cd javax/accessibility; \
		$(MAKE) all RELEASE=$(RELEASE) \
		FULL_VERSION=$(FULL_VERSION) NOCORE=true
	cd javax/swing; \
		$(MAKE) all RELEASE=$(RELEASE) \
		FULL_VERSION=$(FULL_VERSION) NOCORE=true

swing-1.2-demo:
	cd mkdemo/jfc; $(MAKE) $(@)

swing-1.2-clobber:
	cd javax/accessibility; \
		$(MAKE) clobber RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION)
	cd javax/swing; \
		$(MAKE) clobber RELEASE=$(RELEASE) FULL_VERSION=$(FULL_VERSION)
	rm -rf classes
	rm -rf demo

#
# Release engineering targets.
#
include $(BUILDDIR)/makefiles/Release.gmk

#
# Documentation targets "releasedocs" and "alldocs"
#
include $(BUILDDIR)/makefiles/Docs.gmk

#
# Sanity checks.  To override, set the environment variable INSANE to 'yes'.
#
ifeq ($(INSANE),yes)
sanity:
else
sanity: ; @$(SHELL) $(BUILDDIR)/../share/tools/sanityck
endif

#
# Phonies to avoid accidents.
#
.PHONY: swing-1.1 swing-1.1-clobber world ext javadocs
.PHONY: all optimized debug clean clobber sanity
.PHONY: ext-all ext-optimized ext-debug ext-clean ext-clobber
.PHONY: world-all world-optimized world-debug world-clean world-clobber
