make/common/Modules.gmk
author hb
Fri, 19 Jan 2018 13:46:27 +0530
branchjmx-rest-api
changeset 56026 bd531f08d7c7
parent 56003 4f7f76f6be2f
permissions -rw-r--r--
1. Removed all changes to Java SE APIs 2. Changed module name to jdk.management.rest 3. Rest Adapter invoked via Module service provider 4. changed package name to jdk.internal.management.remote.rest 5. rest module and httpserver module part of platform modules

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

ifndef _MODULES_GMK
_MODULES_GMK := 1

################################################################################
#
# BOOT_MODULES are modules defined by the boot loader
# PLATFORM_MODULES are modules defined by the platform loader
# JRE_TOOL_MODULES are tools included in JRE and defined by the application loader
#
# All other modules not declared below are defined by the application loader
# and are not included in JRE.

BOOT_MODULES :=
PLATFORM_MODULES :=
JRE_TOOL_MODULES :=
UPGRADEABLE_MODULES :=
AGGREGATOR_MODULES :=
DOCS_MODULES :=

# Hook to include the corresponding custom file, if present.
$(eval $(call IncludeCustomExtension, common/Modules.gmk))

BOOT_MODULES += \
    java.base \
    java.datatransfer \
    java.desktop \
    java.instrument \
    java.logging \
    java.management \
    java.management.rmi \
    java.naming \
    java.prefs \
    java.rmi \
    java.security.sasl \
    java.xml \
    jdk.internal.vm.ci \
    jdk.management \
    jdk.management.agent \
    jdk.net \
    jdk.sctp \
    jdk.unsupported \
    #

# to be deprivileged
BOOT_MODULES += \
    jdk.naming.rmi \
    #

# Modules that directly or indirectly requiring upgradeable modules
# should carefully be considered if it should be upgradeable or not.
UPGRADEABLE_MODULES += \
    java.activation \
    java.compiler \
    java.corba \
    java.transaction \
    java.xml.bind \
    java.xml.ws \
    java.xml.ws.annotation \
    jdk.internal.vm.compiler \
    #

UPGRADEABLE_TOOL_MODULES += \
    jdk.xml.bind \
    jdk.xml.ws \
    #

AGGREGATOR_MODULES += \
    java.se \
    java.se.ee \
    #

PLATFORM_MODULES += \
    $(UPGRADEABLE_MODULES) \
    $(AGGREGATOR_MODULES)
    #

PLATFORM_MODULES += \
    java.scripting \
    java.security.jgss \
    java.smartcardio \
    jdk.management.rest \
    java.sql \
    java.sql.rowset \
    java.xml.crypto \
    jdk.accessibility \
    jdk.charsets \
    jdk.crypto.cryptoki \
    jdk.crypto.ec \
    jdk.dynalink \
    jdk.httpserver \
    jdk.incubator.httpclient \
    jdk.internal.vm.compiler.management \
    jdk.jsobject \
    jdk.localedata \
    jdk.naming.dns \
    jdk.httpserver \
    jdk.scripting.nashorn \
    jdk.security.auth \
    jdk.security.jgss \
    jdk.xml.dom \
    jdk.zipfs \
    #

ifeq ($(OPENJDK_TARGET_OS), windows)
  PLATFORM_MODULES += jdk.crypto.mscapi
endif

ifeq ($(OPENJDK_TARGET_OS), solaris)
  PLATFORM_MODULES += jdk.crypto.ucrypto
endif

JRE_TOOL_MODULES += \
    jdk.jdwp.agent \
    jdk.pack \
    jdk.scripting.nashorn.shell \
    #

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

# DOCS_MODULES defines the root modules for javadoc generation.
# All of their `require transitive` modules directly and indirectly will be included.
DOCS_MODULES += \
    java.se.ee \
    java.smartcardio \
    jdk.accessibility \
    jdk.attach \
    jdk.charsets \
    jdk.compiler \
    jdk.crypto.cryptoki \
    jdk.crypto.ec \
    jdk.dynalink \
    jdk.editpad \
    jdk.hotspot.agent \
    jdk.httpserver \
    jdk.incubator.httpclient \
    jdk.jartool \
    jdk.javadoc \
    jdk.jcmd \
    jdk.jconsole \
    jdk.jdeps \
    jdk.jdi \
    jdk.jdwp.agent \
    jdk.jlink \
    jdk.jsobject \
    jdk.jshell \
    jdk.jstatd \
    jdk.localedata \
    jdk.management \
    jdk.management.agent \
    jdk.naming.dns \
    jdk.naming.rmi \
    jdk.net \
    jdk.pack \
    jdk.rmic \
    jdk.scripting.nashorn \
    jdk.sctp \
    jdk.security.auth \
    jdk.security.jgss \
    jdk.xml.dom \
    jdk.zipfs \
    #

# These modules are included in the interim image which is used to run profiling
# before building the real images.
INTERIM_IMAGE_MODULES := java.base java.logging

LANGTOOLS_MODULES := \
    java.compiler \
    jdk.compiler \
    jdk.javadoc \
    jdk.jdeps \
    jdk.jshell \
    #

CORBA_MODULES := java.corba

HOTSPOT_MODULES := \
    jdk.aot \
    jdk.hotspot.agent \
    jdk.internal.vm.ci \
    jdk.internal.vm.compiler \
    #

################################################################################
# Some platforms don't have the serviceability agent

ifeq ($(INCLUDE_SA), false)
  MODULES_FILTER += jdk.hotspot.agent
endif

################################################################################
# Filter out Graal specific modules if Graal build is disabled

ifeq ($(INCLUDE_GRAAL), false)
  MODULES_FILTER += jdk.internal.vm.compiler
  MODULES_FILTER += jdk.internal.vm.compiler.management
endif

################################################################################
# Filter out aot specific modules if aot is disabled

ifeq ($(ENABLE_AOT), false)
  MODULES_FILTER += jdk.aot
endif

################################################################################
# Module list macros

# Use append so that the custom extension may add to these variables

GENERATED_SRC_DIRS += \
    $(SUPPORT_OUTPUTDIR)/gensrc \
    #

TOP_SRC_DIRS += \
    $(TOPDIR)/src \
    #

SRC_SUBDIRS += $(OPENJDK_TARGET_OS)/classes
ifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE))
  SRC_SUBDIRS += $(OPENJDK_TARGET_OS_TYPE)/classes
endif
SRC_SUBDIRS += share/classes

SPEC_SUBDIRS += share/specs

# Find all module-info.java files for the current build target platform and
# configuration.
# Param 1 - Module to find for, set to * for finding all
FindAllModuleInfos = \
    $(sort $(wildcard \
        $(foreach sub, $(SRC_SUBDIRS), \
          $(patsubst %,%/$(strip $1)/$(sub)/module-info.java, $(TOP_SRC_DIRS))) \
        $(patsubst %,%/$(strip $1)/module-info.java, $(IMPORT_MODULES_SRC))))

# Find module-info.java files in the specific source dir
# Param 1 - Src dir to find module-info.java files in
FindModuleInfosForSrcDir = \
    $(wildcard \
        $(foreach sub, $(SRC_SUBDIRS), \
          $(patsubst %,%/*/$(sub)/module-info.java, $(strip $1)) \
        ) \
        $(patsubst %,%/*/module-info.java, $(strip $1)) \
    )

# Extract the module names from the paths of module-info.java files. The
# position of the module directory differs depending on if this is an imported
# src dir or not.
GetModuleNameFromModuleInfo = \
    $(strip $(foreach mi, $1, \
      $(if $(filter $(addsuffix %, $(IMPORT_MODULES_SRC)), $(mi)), \
        $(notdir $(patsubst %/,%, $(dir $(mi)))), \
        $(notdir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(patsubst %/,%, $(dir $(mi)))))))))))

# Find all modules by looking for module-info.java files and looking at parent
# directories.
FindAllModules = \
    $(sort $(filter-out $(MODULES_FILTER), \
    $(call GetModuleNameFromModuleInfo, $(MODULE_INFOS))))

# Find all modules in a specific src dir
# Param 1 - Src dir to find modules in
FindModulesForSrcDir = \
    $(sort $(filter-out $(MODULES_FILTER), \
        $(call GetModuleNameFromModuleInfo, $(call FindModuleInfosForSrcDir, $1)) \
    ))

FindImportedModules = \
    $(filter-out $(MODULES_FILTER), \
    $(if $(IMPORT_MODULES_CLASSES), $(notdir $(wildcard $(IMPORT_MODULES_CLASSES)/*))))

# Find all source dirs for a particular module
# $1 - Module to find source dirs for
FindModuleSrcDirs = \
    $(strip $(wildcard \
        $(addsuffix /$(strip $1), $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
        $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))

# Find all specs dirs for a particular module
# $1 - Module to find specs dirs for
FindModuleSpecsDirs = \
    $(strip $(wildcard \
        $(foreach sub, $(SPEC_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS)))))

# Construct the complete module source path
GetModuleSrcPath = \
    $(call PathList, \
        $(addsuffix /*, $(GENERATED_SRC_DIRS) $(IMPORT_MODULES_SRC)) \
        $(foreach sub, $(SRC_SUBDIRS), $(addsuffix /*/$(sub), $(TOP_SRC_DIRS))))

################################################################################
# Extract module dependencies from module-info.java files, both normal
# dependencies ("requires"), and indirect exports ("requires transitive").

MODULE_DEPS_MAKEFILE := $(MAKESUPPORT_OUTPUTDIR)/module-deps.gmk

MODULE_INFOS := $(call FindAllModuleInfos, *)

$(MODULE_DEPS_MAKEFILE): $(MODULE_INFOS) \
    $(call DependOnVariable, MODULE_INFOS, $(MAKESUPPORT_OUTPUTDIR)/MODULE_INFOS.vardeps)
	$(MKDIR) -p $(@D)
	$(RM) $@
	$(foreach m, $(MODULE_INFOS), \
	    ( $(PRINTF) "DEPS_$(call GetModuleNameFromModuleInfo, $m) :=" && \
	      $(NAWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\
	          BEGIN      { if (MODULE != "java.base") printf(" java.base"); } \
	          /^ *requires/ { sub(/;/, ""); \
	                          sub(/requires /, " "); \
	                          sub(/ static /, " "); \
	                          sub(/ transitive /, " "); \
	                          sub(/\/\/.*/, ""); \
	                          sub(/\/\*.*\*\//, ""); \
	                          gsub(/^ +\*.*/, ""); \
	                          gsub(/ /, ""); \
	                          printf(" %s", $$0) } \
	          END           { printf("\n") }' $m && \
	      $(PRINTF) "TRANSITIVE_MODULES_$(call GetModuleNameFromModuleInfo, $m) :=" && \
	      $(NAWK) -v MODULE=$(call GetModuleNameFromModuleInfo, $m) '\
	          BEGIN      { if (MODULE != "java.base") printf(" java.base"); } \
	          /^ *requires  *transitive/ { \
	                          sub(/;/, ""); \
	                          sub(/requires/, ""); \
	                          sub(/transitive/, ""); \
	                          sub(/\/\/.*/, ""); \
	                          sub(/\/\*.*\*\//, ""); \
	                          gsub(/^ +\*.*/, ""); \
	                          gsub(/ /, ""); \
	                          printf(" %s", $$0) } \
	          END           { printf("\n") }' $m \
	    ) >> $@ $(NEWLINE))

-include $(MODULE_DEPS_MAKEFILE)

# Find dependencies ("requires") for a given module.
# Param 1: Module to find dependencies for.
FindDepsForModule = \
  $(DEPS_$(strip $1))

# Find dependencies ("requires") transitively in 3 levels for a given module.
# Param 1: Module to find dependencies for.
FindTransitiveDepsForModule = \
    $(sort $(call FindDepsForModule, $1) \
        $(foreach m, $(call FindDepsForModule, $1), \
            $(call FindDepsForModule, $m) \
            $(foreach n, $(call FindDepsForModule, $m), \
                 $(call FindDepsForModule, $n))))

# Find dependencies ("requires") transitively in 3 levels for a set of modules.
# Param 1: List of modules to find dependencies for.
FindTransitiveDepsForModules = \
    $(sort $(foreach m, $1, $(call FindTransitiveDepsForModule, $m)))

# Find indirect exported modules ("requires transitive") for a given module .
# Param 1: Module to find indirect exported modules for.
FindIndirectExportsForModule = \
  $(TRANSITIVE_MODULES_$(strip $1))

# Finds indirect exported modules transitively in 3 levels for a given module.
# Param 1: Module to find indirect exported modules for.
FindTransitiveIndirectDepsForModule = \
    $(sort $(call FindIndirectExportsForModule, $1) \
        $(foreach m, $(call FindIndirectExportsForModule, $1), \
            $(call FindIndirectExportsForModule, $m) \
            $(foreach n, $(call FindIndirectExportsForModule, $m), \
                 $(call FindIndirectExportsForModule, $n))))

# Finds indirect exported modules transitively in 3 levels for a set of modules.
# Param 1: List of modules to find indirect exported modules for.
FindTransitiveIndirectDepsForModules = \
    $(sort $(foreach m, $1, $(call FindTransitiveIndirectDepsForModule, $m)))

# Upgradeable modules are those that are either defined as upgradeable or that
# require an upradeable module.
FindAllUpgradeableModules = \
    $(sort $(filter-out $(MODULES_FILTER), $(UPGRADEABLE_MODULES) $(UPGRADEABLE_TOOL_MODULES)))


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

LEGAL_SUBDIRS += $(OPENJDK_TARGET_OS)/legal
ifneq ($(OPENJDK_TARGET_OS), $(OPENJDK_TARGET_OS_TYPE))
  LEGAL_SUBDIRS += $(OPENJDK_TARGET_OS_TYPE)/legal
endif
LEGAL_SUBDIRS += share/legal

# Find all legal dirs for a particular module
# $1 - Module to find legal dirs for
FindModuleLegalDirs = \
    $(strip $(wildcard \
        $(addsuffix /$(strip $1), $(SUPPORT_OUTPUTDIR)/modules_legal \
            $(IMPORT_MODULES_LEGAL)) \
        $(foreach sub, $(LEGAL_SUBDIRS), $(addsuffix /$(strip $1)/$(sub), $(TOP_SRC_DIRS))) \
    ))

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

# Param 1 - Name of module
define ReadSingleImportMetaData
    ifneq ($$(wildcard $(IMPORT_MODULES_MAKE)/$$(strip $1)/build.properties), )
      classloader :=
      include_in_jre :=
      include_in_jdk :=
      include $(IMPORT_MODULES_MAKE)/$$(strip $1)/build.properties
      ifeq ($$(include_in_jre), true)
        JRE_MODULES += $1
      endif
      ifeq ($$(include_in_jdk), true)
        JDK_MODULES += $1
      endif
      ifeq ($$(classloader), boot)
        BOOT_MODULES += $1
      else ifeq ($$(classloader), ext)
        PLATFORM_MODULES += $1
      endif
      ifneq ($$(include_in_docs), false)
        # defaults to true if unspecified
        DOCS_MODULES += $1
      endif
    else
      # Default to include in all
      JRE_MODULES += $1
      JDK_MODULES += $1
    endif
endef

# Reading the imported modules metadata has a cost, so to make it available,
# a makefile needs to eval-call this macro first. After calling this, the
# following variables are populated with data from the imported modules:
# * JRE_MODULES
# * JDK_MODULES
# * BOOT_MODULES
# * PLATFORM_MODULES
# * JRE_TOOL_MODULES
define ReadImportMetaData
    IMPORTED_MODULES := $$(call FindImportedModules)
    $$(foreach m, $$(IMPORTED_MODULES), \
      $$(eval $$(call ReadSingleImportMetaData, $$m)))
endef

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

endif # _MODULES_GMK