#
# Copyright (c) 2011, 2022, 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.
#

include GensrcCommon.gmk

################################################################################
# Translate the Java debugger wire protocol (jdwp.spec) file into a front-end
# Java implementation (JDWP.java), a back-end C header file (JDWPCommands.h) and
# an HTML documentation file (jdwp-protocol.html).

JDWP_SPEC_FILE := $(TOPDIR)/src/java.se/share/data/jdwp/jdwp.spec
HEADER_FILE := $(SUPPORT_OUTPUTDIR)/headers/jdk.jdwp.agent/JDWPCommands.h
JAVA_FILE := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdi/com/sun/tools/jdi/JDWP.java
HTML_FILE := $(SUPPORT_OUTPUTDIR)/gensrc/jdk.jdi/jdwp-protocol.html

# Both the header and java file are created using the same recipe. By declaring
# this rule and adding header file to dependencies for java file, both are
# rebuilt if either is missing
$(HEADER_FILE): $(JDWP_SPEC_FILE) $(BUILD_TOOLS_JDK)

# Touch the target of this rule at the end to avoid triggering false rebuilds
$(JAVA_FILE): $(JDWP_SPEC_FILE) $(BUILD_TOOLS_JDK) $(HEADER_FILE)
	$(call LogInfo, Creating JDWP.java and JDWPCommands.h from jdwp.spec)
	$(call MakeDir, $(@D) $(SUPPORT_OUTPUTDIR)/headers/jdk.jdwp.agent)
	$(RM) $@ $(SUPPORT_OUTPUTDIR)/headers/jdk.jdwp.agent/JDWPCommands.h
	$(TOOL_JDWPGEN) $< -jdi $@ -include \
	    $(SUPPORT_OUTPUTDIR)/headers/jdk.jdwp.agent/JDWPCommands.h
	$(TOUCH) $@

$(HTML_FILE): $(JDWP_SPEC_FILE) \
    $(BUILD_TOOLS_JDK)
	$(call LogInfo, Creating $(@F) from jdwp.spec)
	$(call MakeDir, $(@D))
	$(RM) $@
	$(TOOL_JDWPGEN) $< -doc $@

TARGETS += $(JAVA_FILE) $(HEADER_FILE) $(HTML_FILE)

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

include GensrcProperties.gmk

$(eval $(call SetupCompileProperties, COMPILE_PROPERTIES, \
    SRC_DIRS := $(TOPDIR)/src/jdk.jdi/share/classes/com/sun/tools/jdi/resources, \
    CLASS := ListResourceBundle, \
))

TARGETS += $(COMPILE_PROPERTIES)
