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

default: all

include $(SPEC)
include MakeBase.gmk
include JavaCompilation.gmk
include SetupJavaCompilers.gmk

################################################################################
# Generate interim versions of the module-info.java files for the interim
# langtools modules. Each interim module has ".interim" added as suffix to the
# original module name.

INTERIM_MODULEINFO_PATTERN := \
    $(foreach m, $(INTERIM_RMIC_BASE_MODULES), -e 's/$m\([,; ]\)/$m.interim\1/g') \
    -e '/ToolProvider[,; ]/d'

$(BUILDTOOLS_OUTPUTDIR)/gensrc/%.interim/module-info.java: \
    $(TOPDIR)/src/%/share/classes/module-info.java
	$(call LogInfo, Generating module-info.java for $*.interim)
	$(call MakeDir, $(@D))
	$(SED) $(INTERIM_MODULEINFO_PATTERN) $< > $@

TARGETS += $(patsubst %, $(BUILDTOOLS_OUTPUTDIR)/gensrc/%/module-info.java, \
    $(INTERIM_RMIC_MODULES))

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

RMIC_PKGS := \
    sun/rmi/rmic \
    sun/tools/asm \
    sun/tools/java \
    sun/tools/javac \
    sun/tools/tree \
    sun/tools/util \
    #

$(eval $(call SetupJavaCompilation, BUILD_jdk.rmic.interim, \
    SETUP := GENERATE_OLDBYTECODE, \
    SRC := $(TOPDIR)/src/jdk.rmic/share/classes, \
    EXCLUDE_FILES := $(TOPDIR)/src/jdk.rmic/share/classes/module-info.java, \
    EXTRA_FILES := $(BUILDTOOLS_OUTPUTDIR)/gensrc/jdk.rmic.interim/module-info.java, \
    INCLUDES := $(RMIC_PKGS), \
    BIN := $(BUILDTOOLS_OUTPUTDIR)/interim_rmic_modules/jdk.rmic.interim, \
    COPY := .properties, \
    ADD_JAVAC_FLAGS := \
        --module-path $(BUILDTOOLS_OUTPUTDIR)/interim_rmic_modules \
        $(INTERIM_RMIC_ADD_EXPORTS), \
))

TARGETS += $(BUILD_jdk.rmic.interim)

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

all: $(TARGETS)
