#
# Copyright 1995-2005 Sun Microsystems, Inc.  All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Sun designates this
# particular file as subject to the "Classpath" exception as provided
# by Sun in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions.
#

# WARNING: This file is shared with other workspaces.
#          So when it includes other files, it must use JDK_TOPDIR.
#

include $(JDK_TOPDIR)/make/common/Rules.gmk

#
# Say you built classes into $(ALT_CLASSBINDIR) and then at the end of
# the build you might want to copy them over to $(ALT_CLASSDESTDIR);
# this rule takes care of that.  No one should really set these
# variables except the bootstrap/recompile stage of the java compiler.
#
ifdef ALT_CLASSBINDIR

# By default post-processing is copying.  Suppose you want to build
# a jar file then set ALT_CLASSES_DISPOSITION to '../../dest/nameof.jar'
# before including this file.
ifndef ALT_CLASSES_DISPOSITION
ALT_CLASSES_DISPOSITION = copy-classes
endif

build : $(ALT_CLASSES_DISPOSITION)

copy-classes: 
ifneq ($(ALT_CLASSBINDIR), $(ALT_CLASSDESTDIR))
	@if [ -s $(TEMPDIR)/.classes.list ]; then \
	  $(MKDIR) -p $(ALT_CLASSDESTDIR); \
	  $(ECHO) "Copying $(ALT_CLASSBINDIR)..."; \
	  $(ECHO) "($(CD) $(ALT_CLASSBINDIR); $(TAR) cf - .) | \
			($(CD) $(ALT_CLASSDESTDIR); $(TAR) xf -)"; \
	  ($(CD) $(ALT_CLASSBINDIR); $(TAR) cf - .) | \
			($(CD) $(ALT_CLASSDESTDIR); $(TAR) xf -); \
	fi
else # ALT_CLASSBINDIR
	@if [ -s $(TEMPDIR)/.classes.list ]; then \
	  $(ECHO) "Copy source and destination are the same: $(ALT_CLASSBINDIR) -- Copy skipped..."; \
	fi
endif # ALT_CLASSBINDIR

.PHONY: copy-classes
endif # ALT_CLASSBINDIR

