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

# This must be the first rule
default: all

include $(SPEC)
include MakeBase.gmk
include JavaCompilation.gmk
include Modules.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_LANGTOOLS_BASE_MODULES), -e 's/$m\([,; ]\)/$m.interim\1/g')

$(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_LANGTOOLS_MODULES))

################################################################################
# Generate interim versions of the ToolProvider.java files for the interim
# langtools modules, which will allow to load javac from the interim
# jdk.compiler.

INTERIM_TOOL_PROVIDER_PATTERN := \
    $(foreach m, $(INTERIM_LANGTOOLS_BASE_MODULES), -e 's/"$m"/"$m.interim"/g')

$(BUILDTOOLS_OUTPUTDIR)/gensrc/java.compiler.interim/javax/tools/ToolProvider.java: \
    $(TOPDIR)/src/java.compiler/share/classes/javax/tools/ToolProvider.java
	$(call LogInfo, Generating ToolProvider.java for java.compiler.interim)
	$(call MakeDir, $(@D))
	$(SED) $(INTERIM_TOOL_PROVIDER_PATTERN) $< > $@

java.compiler.interim_EXTRA_FILES := \
     $(BUILDTOOLS_OUTPUTDIR)/gensrc/java.compiler.interim/javax/tools/ToolProvider.java

TARGETS += $(BUILDTOOLS_OUTPUTDIR)/gensrc/java.compiler.interim/javax/tools/ToolProvider.java

################################################################################
# Use the up-to-date PreviewFeature.java and NoPreview.java from the current
# sources, instead of the versions from the boot JDK, as javac may be referring
# to constants from the up-to-date versions.

$(eval $(call SetupCopyFiles, COPY_PREVIEW_FEATURES, \
    FILES := $(TOPDIR)/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java \
        $(TOPDIR)/src/java.base/share/classes/jdk/internal/javac/NoPreview.java, \
    DEST := $(BUILDTOOLS_OUTPUTDIR)/gensrc/java.base.interim/jdk/internal/javac/, \
))

TARGETS += $(COPY_PREVIEW_FEATURES)

################################################################################
# Setup the rules to build interim langtools, which is compiled by the boot
# javac and can be run on the boot jdk. This will be used to compile the rest of
# the product. Each module is compiled separately because a multi module setup
# would require the source files to be copied into directories named after the
# actual interim modules.

# Param 1 - Name of module to compile
define SetupInterimModule
  $$(eval $$(call SetupJavaCompilation, BUILD_$1.interim, \
      COMPILER := bootjdk, \
      TARGET_RELEASE := $$(TARGET_RELEASE_BOOTJDK), \
      SRC := $(BUILDTOOLS_OUTPUTDIR)/gensrc/$1.interim \
          $$(wildcard $(SUPPORT_OUTPUTDIR)/gensrc/$1) \
          $(TOPDIR)/src/$1/share/classes, \
      EXCLUDES := sun javax/tools/snippet-files, \
      EXCLUDE_FILES := $(TOPDIR)/src/$1/share/classes/module-info.java \
          $(TOPDIR)/src/$1/share/classes/javax/tools/ToolProvider.java \
          $(TOPDIR)/src/$1/share/classes/com/sun/tools/javac/launcher/Main.java \
          Standard.java, \
      EXTRA_FILES := $(BUILDTOOLS_OUTPUTDIR)/gensrc/$1.interim/module-info.java \
          $($1.interim_EXTRA_FILES), \
      COPY := .gif .png .xml .css .svg .js .js.template .txt javax.tools.JavaCompilerTool, \
      BIN := $(BUILDTOOLS_OUTPUTDIR)/interim_langtools_modules/$1.interim, \
      DISABLED_WARNINGS := module options, \
      JAVAC_FLAGS := \
          --module-path $(BUILDTOOLS_OUTPUTDIR)/interim_langtools_modules \
          $$(INTERIM_LANGTOOLS_ADD_EXPORTS) \
          --patch-module java.base=$(BUILDTOOLS_OUTPUTDIR)/gensrc/java.base.interim \
          --add-exports java.base/jdk.internal.javac=java.compiler.interim \
          --add-exports java.base/jdk.internal.javac=jdk.compiler.interim \
          --add-exports jdk.internal.opt/jdk.internal.opt=jdk.compiler.interim \
          --add-exports jdk.internal.opt/jdk.internal.opt=jdk.javadoc.interim, \
  ))

  $1_DEPS_INTERIM := $$(addsuffix .interim, $$(filter \
      $$(INTERIM_LANGTOOLS_BASE_MODULES), $$(call FindTransitiveDepsForModule, $1)))

  $$(BUILD_$1.interim): $$(foreach d, $$($1_DEPS_INTERIM), $$(BUILD_$$d)) $(COPY_PREVIEW_FEATURES)

  TARGETS += $$(BUILD_$1.interim)
endef

$(foreach m, $(INTERIM_LANGTOOLS_BASE_MODULES), \
  $(eval $(call SetupInterimModule,$m)) \
)

################################################################################
# Setup the compilation of the javac server build tool. Technically, this is not
# really "interim" langtools, but just like it, it is needed henceforth for all
# java compilation using the interim compiler.
$(eval $(call SetupJavaCompilation, BUILD_JAVAC_SERVER, \
    COMPILER := bootjdk, \
    TARGET_RELEASE := $(TARGET_RELEASE_BOOTJDK), \
    SRC := $(TOPDIR)/make/langtools/tools, \
    INCLUDES := javacserver, \
    BIN := $(BUILDTOOLS_OUTPUTDIR)/langtools_javacserver_classes, \
))

TARGETS += $(BUILD_JAVAC_SERVER)

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


all: $(TARGETS)
