# HG changeset patch # User erikj # Date 1477657760 -7200 # Node ID 14de1ab85d25ea16981ab36ca55f69835fe31663 # Parent 1dce857676f9bcd039ff621a36a6d7413fb40c14 8062810: Examine src.zip in JDK image and decide if source classes should be organized by module Reviewed-by: mchung, kcr diff -r 1dce857676f9 -r 14de1ab85d25 make/CompileJavaModules.gmk --- a/make/CompileJavaModules.gmk Thu Oct 27 21:21:52 2016 +0000 +++ b/make/CompileJavaModules.gmk Fri Oct 28 14:29:20 2016 +0200 @@ -473,6 +473,13 @@ jdk.localedata_EXCLUDE_FILES += sun/text/resources/ext/BreakIteratorRules_th.java ################################################################################ +# If this is an imported module that has prebuilt classes, only compile +# module-info.java. +ifneq ($(wildcard $(IMPORT_MODULES_CLASSES)/$(MODULE)), ) + $(MODULE)_INCLUDE_FILES := module-info.java +endif + +################################################################################ # Setup the compilation for the module # MODULE_SRC_DIRS := $(call FindModuleSrcDirs, $(MODULE)) diff -r 1dce857676f9 -r 14de1ab85d25 make/ZipSource.gmk --- a/make/ZipSource.gmk Thu Oct 27 21:21:52 2016 +0000 +++ b/make/ZipSource.gmk Fri Oct 28 14:29:20 2016 +0200 @@ -1,5 +1,5 @@ # -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2016, 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 @@ -28,61 +28,68 @@ include $(SPEC) include MakeBase.gmk include JavaCompilation.gmk +include Modules.gmk + +SRC_ZIP_WORK_DIR := $(SUPPORT_OUTPUTDIR)/src # Hook to include the corresponding custom file, if present. $(eval $(call IncludeCustomExtension, , ZipSource.gmk)) ################################################################################ +# Create the directory structure for src.zip using symlinks. +# //.java -# Use ?= to enable override in custom makefile -SRC_ZIP_INCLUDES ?= \ - com \ - java \ - javax \ - jdk \ - org \ - sun \ - # +# Find extra source dirs for a module that are not part of normal compilation +# but should be included in src.zip. +# $1: Module to find dirs for +ExtraSrcDirs = \ + $(wildcard $(SUPPORT_OUTPUTDIR)/rmic/$(strip $1)) -SRC_ZIP_EXCLUDES ?= +ALL_MODULES := $(FindAllModules) -SRC_ZIP_SRCS += $(wildcard \ - $(JDK_TOPDIR)/src/*/share/classes \ - $(JDK_TOPDIR)/src/*/$(OPENJDK_TARGET_OS)/classes \ - $(JDK_TOPDIR)/src/*/$(OPENJDK_TARGET_OS_API_DIR)/classes \ - $(LANGTOOLS_TOPDIR)/src/*/share/classes \ - $(CORBA_TOPDIR)/src/*/share/classes \ - $(JAXP_TOPDIR)/src/*/share/classes \ - $(JAXWS_TOPDIR)/src/*/share/classes \ - $(SUPPORT_OUTPUTDIR)/gensrc/j* \ - $(SUPPORT_OUTPUTDIR)/rmic/j* \ +# Generate the src dirs in the first make invocation and then call this makefile +# again to create src.zip. +$(foreach m, $(ALL_MODULES), \ + $(foreach d, $(call FindModuleSrcDirs, $m) $(call ExtraSrcDirs, $m), \ + $(eval $d_TARGET := $(SRC_ZIP_WORK_DIR)/$(patsubst $(TOPDIR)/%,%,$d)/$m) \ + $(if $(SRC_GENERATED), , \ + $(eval $$($d_TARGET): $d ; \ + $$(if $(filter $(TOPDIR)/%, $d), $$(link-file-relative), $$(link-file-absolute)) \ + ) \ ) \ - # + $(eval SRC_ZIP_SRCS += $$($d_TARGET)) \ + $(eval SRC_ZIP_SRCS_$m += $$($d_TARGET)) \ + ) \ +) + +TARGETS += $(SRC_ZIP_SRCS) -# Need to copy launcher src files into desired directory structure -# before zipping the sources. -$(eval $(call SetupCopyFiles,COPY_LAUNCHER_SRC, \ - SRC := $(JDK_TOPDIR)/src/java.base, \ - DEST := $(SUPPORT_OUTPUTDIR)/src/launcher, \ - FLATTEN := true, \ - FILES := $(wildcard \ - $(JDK_TOPDIR)/src/java.base/share/native/launcher/* \ - $(JDK_TOPDIR)/src/java.base/share/native/libjli/* \ - $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS_API_DIR)/native/libjli/java_md*))) +################################################################################ +# Only evaluate the creation of src.zip in a sub make call when the symlinked +# src directory structure has been generated. +ifeq ($(SRC_GENERATED), true) + $(eval $(call SetupZipArchive, BUILD_SRC_ZIP, \ + SRC := $(dir $(SRC_ZIP_SRCS)), \ + INCLUDES := $(SRC_ZIP_INCLUDES), \ + INCLUDE_FILES := $(SRC_ZIP_INCLUDE_FILES), \ + EXCLUDES := $(SRC_ZIP_EXCLUDES), \ + EXCLUDE_FILES := $(SRC_ZIP_EXCLUDE_FILES), \ + SUFFIXES := .java, \ + ZIP := $(SUPPORT_OUTPUTDIR)/src.zip, \ + )) -# This dir needs to exist before macro is evaluated to avoid warning from find. -$(call MakeDir, $(SUPPORT_OUTPUTDIR)/src) -$(eval $(call SetupZipArchive,BUILD_SRC_ZIP, \ - SRC := $(SRC_ZIP_SRCS) $(SUPPORT_OUTPUTDIR)/src, \ - INCLUDES := $(SRC_ZIP_INCLUDES) launcher, \ - EXCLUDES := $(SRC_ZIP_EXCLUDES), \ - EXCLUDE_FILES := $(SRC_ZIP_EXCLUDE_FILES), \ - SUFFIXES := .java .c .h, \ - ZIP := $(SUPPORT_OUTPUTDIR)/src.zip, \ - EXTRA_DEPS := $(COPY_LAUNCHER_SRC))) + do-zip: $(BUILD_SRC_ZIP) + + .PHONY: do-zip +endif + +zip: $(SRC_ZIP_SRCS) + +$(MAKE) $(MAKE_ARGS) -f ZipSource.gmk do-zip SRC_GENERATED=true + +TARGETS += zip ################################################################################ -all: $(BUILD_SRC_ZIP) +all: $(TARGETS) -.PHONY: default all +.PHONY: default all zip diff -r 1dce857676f9 -r 14de1ab85d25 make/common/MakeBase.gmk --- a/make/common/MakeBase.gmk Thu Oct 27 21:21:52 2016 +0000 +++ b/make/common/MakeBase.gmk Fri Oct 28 14:29:20 2016 +0200 @@ -575,25 +575,21 @@ $($(strip $1)_dotdots)/$($(strip $1)_suffix) ################################################################################ -# link-file-* works similarly to install file but creates a symlink instead on -# platforms that support it. There are two versions, either creating a relative -# or an absolute link. -ifeq ($(OPENJDK_BUILD_OS), windows) - link-file-absolute = $(install-file) - link-file-relative = $(install-file) -else - define link-file-relative +# link-file-* works similarly to install-file but creates a symlink instead. +# There are two versions, either creating a relative or an absolute link. Be +# careful when using this on Windows since the symlink created is only valid in +# the unix emulation environment. +define link-file-relative $(call MakeDir, $(@D)) $(RM) $@ $(LN) -s $(call RelativePath, $<, $(@D)) $@ - endef +endef - define link-file-absolute +define link-file-absolute $(call MakeDir, $(@D)) $(RM) $@ $(LN) -s $< $@ - endef -endif +endef ################################################################################ # Filter out duplicate sub strings while preserving order. Keeps the first occurance. diff -r 1dce857676f9 -r 14de1ab85d25 make/common/Modules.gmk --- a/make/common/Modules.gmk Thu Oct 27 21:21:52 2016 +0000 +++ b/make/common/Modules.gmk Fri Oct 28 14:29:20 2016 +0200 @@ -178,6 +178,16 @@ $(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. @@ -193,6 +203,13 @@ $(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)/*)))) diff -r 1dce857676f9 -r 14de1ab85d25 make/common/ZipArchive.gmk --- a/make/common/ZipArchive.gmk Thu Oct 27 21:21:52 2016 +0000 +++ b/make/common/ZipArchive.gmk Fri Oct 28 14:29:20 2016 +0200 @@ -73,6 +73,11 @@ else $1_ZIP_INCLUDES := $$(addprefix -i$(SPACE)$(DQUOTE),$$(addsuffix /*$(DQUOTE),$$($1_INCLUDES))) endif + else + ifneq ($$($1_SUFFIXES),) + $1_ZIP_INCLUDES := $$(foreach s,$$($1_SUFFIXES), \ + $$(addprefix -i$(SPACE)$(DQUOTE),*$$s$(DQUOTE))) + endif endif ifneq ($$($1_INCLUDE_FILES),) $1_ZIP_INCLUDES += $$(addprefix -i$(SPACE),$$($1_INCLUDE_FILES))