#
# Copyright (c) 2011, 2014, 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.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

# Cache all finds needed for this file. Only used on windows.
$(eval $(call FillCacheFind, $(JDK_TOPDIR)/make/src/classes))

TOOLS_SRC := $(JDK_TOPDIR)/make/src/classes

ifeq ($(findstring $(OPENJDK_TARGET_OS),windows macosx),)
  TOOLS_SRC += $(JDK_TOPDIR)/src/solaris/classes/sun/awt/X11/generator
endif

# The exception handling of swing beaninfo which have the own tool directory
ifeq (, $(BUILD_TOOLS))
  $(eval $(call SetupJavaCompilation,BUILD_TOOLS, \
      SETUP := GENERATE_OLDBYTECODE, \
      SRC := $(TOOLS_SRC), \
      BIN := $(JDK_OUTPUTDIR)/btclasses))
endif

$(JDK_OUTPUTDIR)/btclasses/build/tools/generatenimbus/resources/%.template: \
    $(JDK_TOPDIR)/src/share/classes/javax/swing/plaf/nimbus/%.template
	$(call install-file)

BUILD_TOOLS += $(foreach i, $(wildcard $(JDK_TOPDIR)/src/share/classes/javax/swing/plaf/nimbus/*.template), $(JDK_OUTPUTDIR)/btclasses/build/tools/generatenimbus/resources/$(notdir $i))

# Resource used by CheckDeps tool
$(JDK_OUTPUTDIR)/btclasses/build/tools/deps/refs.allowed: \
    $(JDK_TOPDIR)/make/data/checkdeps/refs.allowed
	$(call install-file)

BUILD_TOOLS += $(JDK_OUTPUTDIR)/btclasses/build/tools/deps/refs.allowed

# Add a checksum ("jsum") to the end of a text file. Prevents trivial tampering with class lists.
TOOL_ADDJSUM = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.addjsum.AddJsum

# The buildmetaindex tool creates a meta-index to make core class loaders lazier.
TOOL_BUILDMETAINDEX = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.buildmetaindex.BuildMetaIndex

TOOL_COMPILEFONTCONFIG = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.compilefontconfig.CompileFontConfig

TOOL_COMPILEPROPERTIES = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.compileproperties.CompileProperties

TOOL_STRIPPROPERTIES = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.stripproperties.StripProperties

TOOL_JARREORDER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.jarreorder.JarReorder

TOOL_GENERATECHARACTER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.generatecharacter.GenerateCharacter

TOOL_CHARACTERNAME = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.generatecharacter.CharacterName

TOOL_DTDBUILDER = $(JAVA_SMALL) -Ddtd_home=$(JDK_TOPDIR)/make/data/dtdbuilder \
    -Djava.awt.headless=true \
    -cp $(JDK_OUTPUTDIR)/btclasses build.tools.dtdbuilder.DTDBuilder

TOOL_GENERATEBREAKITERATORDATA = $(JAVA_SMALL) \
    -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.generatebreakiteratordata.GenerateBreakIteratorData

TOOL_GENERATECURRENCYDATA = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.generatecurrencydata.GenerateCurrencyData

TOOL_HASHER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.hasher.Hasher

TOOL_TZDB = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.tzdb.TzdbZoneRulesCompiler


# TODO: There are references to the jdwpgen.jar in jdk/make/netbeans/jdwpgen/build.xml
# and nbproject/project.properties in the same dir. Needs to be looked at.
TOOL_JDWPGEN = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.jdwpgen.Main

# TODO: Lots of files in jdk/make/tools/CharsetMapping dir
TOOL_CHARSETMAPPING = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.charsetmapping.Main

TOOL_SPP = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses build.tools.spp.Spp

# Nimbus is used somewhere in the swing build.
TOOL_GENERATENIMBUS = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.generatenimbus.Generator

TOOL_WRAPPERGENERATOR = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    WrapperGenerator

TOOL_AWT_TOBIN = $(JAVA_SMALL) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.icondata.awt.ToBin

TOOL_OSX_TOBIN = $(JAVA_SMALL) -Djava.awt.headless=true -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.icondata.osxapp.ToBin

TOOL_CLDRCONVERTER = $(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.cldrconverter.CLDRConverter

TOOL_REMOVEMETHODS = $(JAVA_SMALL) -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
    -cp '$(JDK_OUTPUTDIR)/btclasses$(PATH_SEP)$(JDK_OUTPUTDIR)' \
    build.tools.classfile.RemoveMethods

TOOL_CHECKDEPS = $(JAVA_SMALL) -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
    -cp '$(JDK_OUTPUTDIR)/btclasses$(PATH_SEP)$(JDK_OUTPUTDIR)' \
    build.tools.deps.CheckDeps

TOOL_ADDTORESTRICTEDPKGS=$(JAVA_SMALL) -cp $(JDK_OUTPUTDIR)/btclasses \
    build.tools.addtorestrictedpkgs.AddToRestrictedPkgs

##########################################################################################

# Tools needed on solaris because OBJCOPY is broken.

ifeq ($(OPENJDK_TARGET_OS), solaris)
$(eval $(call SetupNativeCompilation,ADD_GNU_DEBUGLINK, \
    SRC := $(JDK_TOPDIR)/make/src/native/add_gnu_debuglink, \
    LANG := C, \
    CC := $(BUILD_CC), \
    LDEXE := $(BUILD_LD), \
    LDFLAGS := -lelf, \
    OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/add_gnu_debuglink, \
    OUTPUT_DIR := $(JDK_OUTPUTDIR)/btbin, \
    PROGRAM := add_gnu_debuglink))

$(eval $(call SetupNativeCompilation,FIX_EMPTY_SEC_HDR_FLAGS, \
    SRC := $(JDK_TOPDIR)/make/src/native/fix_empty_sec_hdr_flags, \
    LANG := C, \
    CC := $(BUILD_CC), \
    LDEXE := $(BUILD_LD), \
    LDFLAGS := -lelf, \
    OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/fix_empty_sec_hdr_flags, \
    OUTPUT_DIR := $(JDK_OUTPUTDIR)/btbin, \
    PROGRAM := fix_empty_sec_hdr_flags))
endif
