#
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. 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.
#
# 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#  
#

# JPRT rule to build this workspace

JPRT_ARCHIVE_BUNDLE=$(ABS_OUTPUTDIR)/$(JPRT_BUILD_FLAVOR)-bundle.zip

ifeq ($(OSNAME),windows)
  ZIPFLAGS=-q
else
  # store symbolic links as the link
  ZIPFLAGS=-q -y
endif

jprt_build_productEmb:
	$(MAKE) JAVASE_EMBEDDED=true MINIMIZE_RAM_USAGE=true jprt_build_product

jprt_build_debugEmb:
	$(MAKE) JAVASE_EMBEDDED=true MINIMIZE_RAM_USAGE=true jprt_build_debug

jprt_build_fastdebugEmb:
	$(MAKE) JAVASE_EMBEDDED=true MINIMIZE_RAM_USAGE=true jprt_build_fastdebug

jprt_build_optimizedEmb:
	$(MAKE) JAVASE_EMBEDDED=true MINIMIZE_RAM_USAGE=true jprt_build_optimized

jprt_build_productOpen:
	$(MAKE) OPENJDK=true jprt_build_product

jprt_build_debugOpen:
	$(MAKE) OPENJDK=true jprt_build_debug

jprt_build_fastdebugOpen:
	$(MAKE) OPENJDK=true jprt_build_fastdebug

jprt_build_optimizedOpen:
	$(MAKE) OPENJDK=true jprt_build_optimized

jprt_build_product: all_product copy_product_jdk export_product_jdk
	( $(CD) $(JDK_IMAGE_DIR) && \
	  $(ZIPEXE) $(ZIPFLAGS) -r $(JPRT_ARCHIVE_BUNDLE) . )

jprt_build_fastdebug: all_fastdebug copy_fastdebug_jdk export_fastdebug_jdk
	( $(CD) $(JDK_IMAGE_DIR)/fastdebug && \
	  $(ZIPEXE) $(ZIPFLAGS) -r $(JPRT_ARCHIVE_BUNDLE) . )

jprt_build_debug: all_debug copy_debug_jdk export_debug_jdk
	( $(CD) $(JDK_IMAGE_DIR)/debug && \
	  $(ZIPEXE) $(ZIPFLAGS) -r $(JPRT_ARCHIVE_BUNDLE) . )

jprt_build_optimized: all_optimized copy_optimized_jdk export_optimized_jdk
	( $(CD) $(JDK_IMAGE_DIR)/optimized && \
	  $(ZIPEXE) $(ZIPFLAGS) -r $(JPRT_ARCHIVE_BUNDLE) . )

.PHONY: jprt_build_product jprt_build_fastdebug jprt_build_debug jprt_build_optimized

