#
# Copyright (c) 2010, 2018, 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.
#

NASGEN_SRC := $(TOPDIR)/make/nashorn/buildtools/nasgen/src
ASM_SRC := $(TOPDIR)/src/java.base/share/classes/jdk/internal/org/objectweb/asm

# Build nasgen
$(eval $(call SetupJavaCompilation, BUILD_NASGEN, \
    SETUP := GENERATE_OLDBYTECODE, \
    SRC := $(NASGEN_SRC) $(ASM_SRC), \
    BIN := $(BUILDTOOLS_OUTPUTDIR)/nasgen_classes, \
))

NASHORN_CLASSES_DIR := $(JDK_OUTPUTDIR)/modules/$(MODULE)
NASGEN_RUN_FILE := $(NASHORN_CLASSES_DIR)/_the.nasgen.run

NASGEN_OPTIONS := \
    -cp $(BUILDTOOLS_OUTPUTDIR)/nasgen_classes \
    --patch-module java.base=$(BUILDTOOLS_OUTPUTDIR)/nasgen_classes \
    --add-exports java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED \
    --add-exports java.base/jdk.internal.org.objectweb.asm.util=ALL-UNNAMED \
    #

# Run nasgen to modify classes in jdk.nashorn.internal.objects package
$(NASGEN_RUN_FILE): $(BUILD_NASGEN) $($(MODULE))
	$(ECHO) Running nasgen
	$(JAVA_SMALL) $(NASGEN_OPTIONS) \
	    jdk.nashorn.internal.tools.nasgen.Main $(@D) \
	    jdk.nashorn.internal.objects $(@D)
	$(TOUCH) $@

TARGETS += $(NASGEN_RUN_FILE)
