# HG changeset patch # User duke # Date 1499269009 -7200 # Node ID 42ff13dcf62644d6ce27cdeaa39b2aa2e6939d00 # Parent b333a0dbc626dbb3cd3e8365ab5b69e776f72764# Parent 58a1c90ce7dc16ed573337f988c3413c34c2df94 Merge diff -r b333a0dbc626 -r 42ff13dcf626 .hgtags-top-repo --- a/.hgtags-top-repo Tue Mar 08 16:05:16 2011 -0800 +++ b/.hgtags-top-repo Wed Jul 05 17:36:49 2017 +0200 @@ -106,3 +106,4 @@ a6b015b59fbc2518762c17ccc35702f03ef7713a jdk7-b129 cc58c11af15411042719e9c82707fdbef60a9e0f jdk7-b130 5d86d951426aaf340b1ba84ae2d5ab5da65a71e2 jdk7-b131 +0f62a65fb666b337caa585015ab6ea2e60e709ca jdk7-b132 diff -r b333a0dbc626 -r 42ff13dcf626 Makefile --- a/Makefile Tue Mar 08 16:05:16 2011 -0800 +++ b/Makefile Wed Jul 05 17:36:49 2017 +0200 @@ -36,12 +36,6 @@ JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared endif -# For start and finish echo lines -TITLE_TEXT = Control $(PLATFORM) $(ARCH) $(RELEASE) -DATE_STAMP = `$(DATE) '+%y-%m-%d %H:%M'` -START_ECHO = echo "$(TITLE_TEXT) $@ build started: $(DATE_STAMP)" -FINISH_ECHO = echo "$(TITLE_TEXT) $@ build finished: $(DATE_STAMP)" - default: all include $(JDK_MAKE_SHARED_DIR)/Defs-control.gmk @@ -57,10 +51,6 @@ include ./make/sponsors-rules.gmk include ./make/deploy-rules.gmk -# What "all" means -all:: - @$(START_ECHO) - all:: sanity ifeq ($(SKIP_FASTDEBUG_BUILD), false) @@ -73,40 +63,44 @@ all:: all_product_build -all:: - @$(FINISH_ECHO) +all_product_build:: # Everything for a full product build -all_product_build:: - @$(START_ECHO) +ifeq ($(SKIP_PRODUCT_BUILD), false) -ifeq ($(SKIP_PRODUCT_BUILD), false) - all_product_build:: product_build ifeq ($(BUILD_INSTALL), true) all_product_build:: $(INSTALL) clobber:: install-clobber endif - + ifeq ($(BUILD_SPONSORS), true) all_product_build:: $(SPONSORS) clobber:: sponsors-clobber endif - + ifneq ($(SKIP_COMPARE_IMAGES), true) all_product_build:: compare-image endif endif -all_product_build:: - @$(FINISH_ECHO) +define StartTimer + $(MKDIR) -p $(BUILDTIMESDIR) + $(RM) $(BUILDTIMESDIR)/build_time_* + $(call RecordStartTime,TOTAL) +endef + +define StopTimer + $(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,TOTAL) && $(call ReportBuildTimes,$1),) +endef # Generic build of basic repo series generic_build_repo_series:: $(MKDIR) -p $(OUTPUTDIR) $(MKDIR) -p $(OUTPUTDIR)/j2sdk-image + @$(call StartTimer) ifeq ($(BUILD_LANGTOOLS), true) generic_build_repo_series:: langtools @@ -143,6 +137,9 @@ clobber:: deploy-clobber endif +generic_build_repo_series:: + @$(call StopTimer,$(if $(DEBUG_NAME),$(DEBUG_NAME)_build,all_product_build)) + # The debug build, fastdebug or debug. Needs special handling. # Note that debug builds do NOT do INSTALL steps, but must be done # after the product build and before the INSTALL step of the product build. @@ -167,28 +164,22 @@ FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-$(DEBUG_NAME)/j2sdk-image create_fresh_product_bootdir: FRC - @$(START_ECHO) $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ GENERATE_DOCS=false \ BOOT_CYCLE_SETTINGS= \ build_product_image - @$(FINISH_ECHO) create_fresh_debug_bootdir: FRC - @$(START_ECHO) $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ GENERATE_DOCS=false \ BOOT_CYCLE_DEBUG_SETTINGS= \ build_debug_image - @$(FINISH_ECHO) create_fresh_fastdebug_bootdir: FRC - @$(START_ECHO) $(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \ GENERATE_DOCS=false \ BOOT_CYCLE_DEBUG_SETTINGS= \ build_fastdebug_image - @$(FINISH_ECHO) # Create boot image? ifeq ($(SKIP_BOOT_CYCLE),false) @@ -197,6 +188,8 @@ endif endif + + ifeq ($(DO_BOOT_CYCLE),true) # Create the bootdir to use in the build @@ -221,27 +214,23 @@ endif build_product_image: - @$(START_ECHO) $(MAKE) \ SKIP_FASTDEBUG_BUILD=true \ SKIP_DEBUG_BUILD=true \ $(BOOT_CYCLE_SETTINGS) \ generic_build_repo_series - @$(FINISH_ECHO) # NOTE: On windows, do not use $(ABS_OUTPUTDIR)-$(DEBUG_NAME). # Due to the use of short paths in $(ABS_OUTPUTDIR), this may # not be the same location. generic_debug_build: - @$(START_ECHO) $(MAKE) \ ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-$(DEBUG_NAME) \ DEBUG_NAME=$(DEBUG_NAME) \ GENERATE_DOCS=false \ $(BOOT_CYCLE_DEBUG_SETTINGS) \ generic_build_repo_series - @$(FINISH_ECHO) build_debug_image: $(MAKE) DEBUG_NAME=debug generic_debug_build @@ -254,7 +243,8 @@ debug_build:: build_debug_image fastdebug_build:: build_fastdebug_image -clobber:: +clobber:: REPORT_BUILD_TIMES= +clobber:: $(RM) -r $(OUTPUTDIR)/* $(RM) -r $(OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-debug/* $(RM) -r $(OUTPUTDIR)/../$(PLATFORM)-$(ARCH)-fastdebug/* diff -r b333a0dbc626 -r 42ff13dcf626 hotspot/.hgtags --- a/hotspot/.hgtags Tue Mar 08 16:05:16 2011 -0800 +++ b/hotspot/.hgtags Wed Jul 05 17:36:49 2017 +0200 @@ -151,3 +151,5 @@ e9aa2ca89ad6c53420623d579765f9706ec523d7 jdk7-b130 0aa3b49089112d5faa77902ad680c582ab53f651 jdk7-b131 e9aa2ca89ad6c53420623d579765f9706ec523d7 hs21-b02 +0e531ab5ba04967a0e9aa6aef65e6eb3a0dcf632 jdk7-b132 +a8d643a4db47c7b58e0bcb49c77b5c3610de86a8 hs21-b03 diff -r b333a0dbc626 -r 42ff13dcf626 make/Defs-internal.gmk --- a/make/Defs-internal.gmk Tue Mar 08 16:05:16 2011 -0800 +++ b/make/Defs-internal.gmk Wed Jul 05 17:36:49 2017 +0200 @@ -28,21 +28,63 @@ # not contain rules. # -# Indicate that we are visiting a separate repo or component +# The build times report is turned off by setting REPORT_BUILD_TIMES to nothing. +# This is necessary for the target clobber/clean which will erase the +# directories where the buildtimes are stored. +REPORT_BUILD_TIMES=1 +# Store the build times in this directory. +BUILDTIMESDIR=$(ABS_OUTPUTDIR)/tmp/buildtimes + +# Record starting time for build of a sub repository. +define RecordStartTime +$(MKDIR) -p $(BUILDTIMESDIR) +$(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_start_$1 +$(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_start_$1_human_readable +endef + +# Indicate that we started to build a sub repository and record starting time. define MakeStart -$(PRINTF) "\n\n%s\n%s\n##### %-60.60s #####\n%s\n" \ +$(call RecordStartTime,$1) +$(PRINTF) "\n\n%s\n%s\n##### %-60.60s #####\n%s\n\n" \ "########################################################################" \ "########################################################################" \ -"Entering $1 for target $2" \ +"Entering $1 for target(s) $2" \ "########################################################################" endef -define MakeFinish -$(PRINTF) "%s\n##### %-60.60s #####\n%s\n%s\n\n" \ +# Record ending time and calculate the difference and store it in a +# easy to read format. Handles builds that cross midnight. Expects +# that a build will never take 24 hours or more. +define RecordEndTime +$(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_end_$1 +$(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_end_$1_human_readable +$(ECHO) `$(CAT) $(BUILDTIMESDIR)/build_time_start_$1` `$(CAT) $(BUILDTIMESDIR)/build_time_end_$1` $1 | \ + $(NAWK) '{ F=$$7; T=$$14; if (F > T) { T+=3600*24 }; D=T-F; H=int(D/3600); \ + M=int((D-H*3600)/60); S=D-H*3600-M*60; printf("%02d:%02d:%02d %s\n",H,M,S,$$15); }' \ + > $(BUILDTIMESDIR)/build_time_diff_$1 +endef + +# Indicate that we are done. +# Record ending time and print out the total time it took to build. +define MakeFinish +$(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,$1),) +$(PRINTF) "%s\n##### %-60.60s #####\n%s\n##### %-60.60s #####\n%s\n\n" \ "########################################################################" \ -"Leaving $1 for target $2" \ +"Leaving $1 for target(s) $2" \ "########################################################################" \ -"########################################################################" +$(if $(REPORT_BUILD_TIMES),"Build time `$(CAT) $(BUILDTIMESDIR)/build_time_diff_$1` for target(s) $2","") \ +"########################################################################" +endef + +# Find all build_time_* files and print their contents in a list sorted +# on the name of the sub repository. +define ReportBuildTimes +$(PRINTF) "-- Build times ----------\nTarget %s\nStart %s\nEnd %s\n%s\n%s\n-------------------------\n" \ +$1 \ +"`$(CAT) $(BUILDTIMESDIR)/build_time_start_TOTAL_human_readable`" \ +"`$(CAT) $(BUILDTIMESDIR)/build_time_end_TOTAL_human_readable`" \ +"`$(LS) $(BUILDTIMESDIR)/build_time_diff_* | $(GREP) -v _TOTAL | $(XARGS) $(CAT) | $(SORT) -k 2`" \ +"`$(CAT) $(BUILDTIMESDIR)/build_time_diff_TOTAL`" endef ifdef OPENJDK diff -r b333a0dbc626 -r 42ff13dcf626 make/corba-rules.gmk --- a/make/corba-rules.gmk Tue Mar 08 16:05:16 2011 -0800 +++ b/make/corba-rules.gmk Wed Jul 05 17:36:49 2017 +0200 @@ -40,17 +40,17 @@ corba: corba-build corba-build: $(MKDIR) -p $(CORBA_OUTPUTDIR) - @$(call MakeStart, corba, all) + @$(call MakeStart,corba,all) ($(CD) $(CORBA_TOPDIR)/make && \ $(MAKE) $(CORBA_BUILD_ARGUMENTS) all) - @$(call MakeFinish, corba, all) + @$(call MakeFinish,corba,all) corba-clobber:: $(MKDIR) -p $(CORBA_OUTPUTDIR) - @$(call MakeStart, corba, clobber) + @$(call MakeStart,corba,clobber) ($(CD) $(CORBA_TOPDIR)/make && \ $(MAKE) $(CORBA_BUILD_ARGUMENTS) clobber) - @$(call MakeFinish, corba, clobber) + @$(call MakeFinish,corba,clobber) .PHONY: corba corba-build corba-clobber diff -r b333a0dbc626 -r 42ff13dcf626 make/deploy-rules.gmk --- a/make/deploy-rules.gmk Tue Mar 08 16:05:16 2011 -0800 +++ b/make/deploy-rules.gmk Wed Jul 05 17:36:49 2017 +0200 @@ -116,18 +116,18 @@ deploy-build: ifeq ($(BUILD_DEPLOY), true) - @$(call MakeStart, deploy, $(DEPLOY_BUILD_TARGETS)) + @$(call MakeStart,deploy,$(DEPLOY_BUILD_TARGETS)) ($(CD) $(DEPLOY_TOPDIR)/make && \ $(MAKE) $(DEPLOY_BUILD_TARGETS) $(DEPLOY_BUILD_ARGUMENTS)) - @$(call MakeFinish, deploy, $(DEPLOY_BUILD_TARGETS)) + @$(call MakeFinish,deploy,$(DEPLOY_BUILD_TARGETS)) endif deploy-clobber:: ifeq ($(BUILD_DEPLOY), true) - @$(call MakeStart, deploy, clobber) + @$(call MakeStart,deploy,clobber) ($(CD) $(DEPLOY_TOPDIR)/make && \ $(MAKE) clobber $(DEPLOY_BUILD_ARGUMENTS)) - @$(call MakeFinish, deploy, clobber) + @$(call MakeFinish,deploy,clobber) endif deploy-sanity:: diff -r b333a0dbc626 -r 42ff13dcf626 make/hotspot-rules.gmk --- a/make/hotspot-rules.gmk Tue Mar 08 16:05:16 2011 -0800 +++ b/make/hotspot-rules.gmk Wed Jul 05 17:36:49 2017 +0200 @@ -96,10 +96,10 @@ hotspot-build:: $(MKDIR) -p $(HOTSPOT_OUTPUTDIR) $(MKDIR) -p $(HOTSPOT_EXPORT_PATH) - @$(call MakeStart, hotspot, $(HOTSPOT_TARGET)) + @$(call MakeStart,hotspot,$(HOTSPOT_TARGET)) $(CD) $(HOTSPOT_TOPDIR)/make && \ $(MAKE) $(HOTSPOT_BUILD_ARGUMENTS) $(HOTSPOT_TARGET) - @$(call MakeFinish, hotspot, $(HOTSPOT_TARGET)) + @$(call MakeFinish,hotspot,$(HOTSPOT_TARGET)) ##################### # .PHONY diff -r b333a0dbc626 -r 42ff13dcf626 make/install-rules.gmk --- a/make/install-rules.gmk Tue Mar 08 16:05:16 2011 -0800 +++ b/make/install-rules.gmk Wed Jul 05 17:36:49 2017 +0200 @@ -57,39 +57,39 @@ install-build: ifeq ($(BUILD_INSTALL), true) - @$(call MakeStart, install, $(INSTALL_BUILD_TARGETS)) + @$(call MakeStart,install,$(INSTALL_BUILD_TARGETS)) ($(CD) $(INSTALL_TOPDIR)/make && \ $(MAKE) $(INSTALL_BUILD_TARGETS) $(INSTALL_BUILD_ARGUMENTS)) - @$(call MakeFinish, install, $(INSTALL_BUILD_TARGETS)) + @$(call MakeFinish,install,$(INSTALL_BUILD_TARGETS)) endif update-patcher: ifeq ($(BUILD_INSTALL), true) if [ -r $(INSTALL_TOPDIR)/make/update/Makefile ]; then \ - $(call MakeStart, install update, all); \ + $(call MakeStart,install_update,all); \ ( $(CD) $(INSTALL_TOPDIR)/make/update && \ $(MAKE) all $(INSTALL_BUILD_ARGUMENTS) ); \ - $(call MakeFinish, install, all); \ + $(call MakeFinish,install_update,all); \ fi endif update-patchgen: ifeq ($(BUILD_INSTALL), true) if [ -r $(INSTALL_TOPDIR)/make/update/Makefile ]; then \ - $(call MakeStart, install update, patchgen); \ + $(call MakeStart,install_update,patchgen); \ ( $(CD) $(INSTALL_TOPDIR)/make/update && \ $(MAKE) patchgen $(INSTALL_BUILD_ARGUMENTS) ); \ - $(call MakeFinish, install, patchgen); \ + $(call MakeFinish,install_update,patchgen); \ fi endif installer: ifeq ($(BUILD_INSTALL), true) if [ -r $(INSTALL_TOPDIR)/make/installer/Makefile ]; then \ - $(call MakeStart, install installer, all); \ + $(call MakeStart,install_installer,all); \ ( $(CD) $(INSTALL_TOPDIR)/make/installer && \ $(MAKE) all $(INSTALL_BUILD_ARGUMENTS) ); \ - $(call MakeFinish, install, all); \ + $(call MakeFinish,install_installer,all); \ fi endif @@ -99,10 +99,10 @@ install-clobber: ifeq ($(BUILD_INSTALL), true) - @$(call MakeStart, install, clobber) + @$(call MakeStart,install,clobber) ($(CD) $(INSTALL_TOPDIR)/make && \ $(MAKE) clobber $(INSTALL_BUILD_ARGUMENTS)) - @$(call MakeFinish, install, clobber) + @$(call MakeFinish,install,clobber) endif install-sanity:: diff -r b333a0dbc626 -r 42ff13dcf626 make/jaxp-rules.gmk --- a/make/jaxp-rules.gmk Tue Mar 08 16:05:16 2011 -0800 +++ b/make/jaxp-rules.gmk Wed Jul 05 17:36:49 2017 +0200 @@ -40,17 +40,17 @@ jaxp: jaxp-build jaxp-build: $(MKDIR) -p $(JAXP_OUTPUTDIR) - @$(call MakeStart, jaxp, all) + @$(call MakeStart,jaxp,all) ($(CD) $(JAXP_TOPDIR)/make && \ $(MAKE) $(JAXP_BUILD_ARGUMENTS) all) - @$(call MakeFinish, jaxp, all) + @$(call MakeFinish,jaxp,all) jaxp-clobber:: $(MKDIR) -p $(JAXP_OUTPUTDIR) - @$(call MakeStart, jaxp, clobber) + @$(call MakeStart,jaxp,clobber) ($(CD) $(JAXP_TOPDIR)/make && \ $(MAKE) $(JAXP_BUILD_ARGUMENTS) clobber) - @$(call MakeFinish, jaxp, clobber) + @$(call MakeFinish,jaxp,clobber) .PHONY: jaxp jaxp-build jaxp-clobber diff -r b333a0dbc626 -r 42ff13dcf626 make/jaxws-rules.gmk --- a/make/jaxws-rules.gmk Tue Mar 08 16:05:16 2011 -0800 +++ b/make/jaxws-rules.gmk Wed Jul 05 17:36:49 2017 +0200 @@ -40,17 +40,17 @@ jaxws: jaxws-build jaxws-build: $(MKDIR) -p $(JAXWS_OUTPUTDIR) - @$(call MakeStart, jaxws, all) + @$(call MakeStart,jaxws,all) ($(CD) $(JAXWS_TOPDIR)/make && \ $(MAKE) $(JAXWS_BUILD_ARGUMENTS) all) - @$(call MakeFinish, jaxws, all) + @$(call MakeFinish,jaxws,all) jaxws-clobber:: $(MKDIR) -p $(JAXWS_OUTPUTDIR) - @$(call MakeStart, jaxws, clobber) + @$(call MakeStart,jaxws,clobber) ($(CD) $(JAXWS_TOPDIR)/make && \ $(MAKE) $(JAXWS_BUILD_ARGUMENTS) clobber) - @$(call MakeFinish, jaxws, clobber) + @$(call MakeFinish,jaxws,clobber) .PHONY: jaxws jaxws-build jaxws-clobber diff -r b333a0dbc626 -r 42ff13dcf626 make/jdk-rules.gmk --- a/make/jdk-rules.gmk Tue Mar 08 16:05:16 2011 -0800 +++ b/make/jdk-rules.gmk Wed Jul 05 17:36:49 2017 +0200 @@ -75,16 +75,16 @@ jdk: jdk-build jdk-build: - @$(call MakeStart, jdk, $(JDK_BUILD_TARGETS)) + @$(call MakeStart,jdk,$(JDK_BUILD_TARGETS)) ( $(CD) $(JDK_TOPDIR)/make && \ $(MAKE) $(JDK_BUILD_TARGETS) $(JDK_BUILD_ARGUMENTS) ; ) - @$(call MakeFinish, jdk, $(JDK_BUILD_TARGETS)) + @$(call MakeFinish,jdk,$(JDK_BUILD_TARGETS)) jdk-clobber:: - @$(call MakeStart, jdk, $(JDK_CLOBBER_TARGETS)) + @$(call MakeStart,jdk,$(JDK_CLOBBER_TARGETS)) ( $(CD) $(JDK_TOPDIR)/make && \ $(MAKE) $(JDK_CLOBBER_TARGETS) $(JDK_BUILD_ARGUMENTS) ; ) - @$(call MakeFinish, jdk, $(JDK_CLOBBER_TARGETS)) + @$(call MakeFinish,jdk,$(JDK_CLOBBER_TARGETS)) jdk-sanity:: ( $(CD) $(JDK_TOPDIR)/make && \ @@ -92,17 +92,17 @@ compare-images: compare-image compare-image: - @$(call MakeStart, jdk, compare-image) + @$(call MakeStart,jdk,compare-image) ( $(CD) $(JDK_TOPDIR)/make && \ $(MAKE) ALT_OUTPUTDIR=$(ABS_OUTPUTDIR) compare-image ) - @$(call MakeFinish, jdk, compare-image) + @$(call MakeFinish,jdk,compare-image) compare-images-clobber: compare-image-clobber compare-image-clobber: - @$(call MakeStart, jdk, compare-image-clobber) + @$(call MakeStart,jdk,compare-image-clobber) ( $(CD) $(JDK_TOPDIR)/make && \ $(MAKE) ALT_OUTPUTDIR=$(ABS_OUTPUTDIR) compare-image-clobber ) - @$(call MakeFinish, jdk, compare-image-clobber) + @$(call MakeFinish,jdk,compare-image-clobber) .PHONY: jdk jdk-build jdk-clobber jdk-sanity diff -r b333a0dbc626 -r 42ff13dcf626 make/langtools-rules.gmk --- a/make/langtools-rules.gmk Tue Mar 08 16:05:16 2011 -0800 +++ b/make/langtools-rules.gmk Wed Jul 05 17:36:49 2017 +0200 @@ -35,17 +35,17 @@ langtools: langtools-build langtools-build: $(MKDIR) -p $(LANGTOOLS_OUTPUTDIR) - @$(call MakeStart, langtools, all) + @$(call MakeStart,langtools,all) ($(CD) $(LANGTOOLS_TOPDIR)/make && \ $(MAKE) $(LANGTOOLS_BUILD_ARGUMENTS) all) - @$(call MakeFinish, langtools, all) + @$(call MakeFinish,langtools,all) langtools-clobber:: $(MKDIR) -p $(LANGTOOLS_OUTPUTDIR) - @$(call MakeStart, langtools, clobber) + @$(call MakeStart,langtools,clobber) ($(CD) $(LANGTOOLS_TOPDIR)/make && \ $(MAKE) $(LANGTOOLS_BUILD_ARGUMENTS) clobber) - @$(call MakeFinish, langtools, clobber) + @$(call MakeFinish,langtools,clobber) .PHONY: langtools langtools-build langtools-clobber diff -r b333a0dbc626 -r 42ff13dcf626 make/scripts/webrev.ksh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/make/scripts/webrev.ksh Wed Jul 05 17:36:49 2017 +0200 @@ -0,0 +1,3182 @@ +#!/bin/ksh -p +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# +# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. +# Use is subject to license terms. +# +# This script takes a file list and a workspace and builds a set of html files +# suitable for doing a code review of source changes via a web page. +# Documentation is available via 'webrev -h'. +# + +WEBREV_UPDATED=23.18-hg + +HTML=' + +\n' + +FRAMEHTML=' + +\n' + +STDHEAD=' + + + + + + +' + +# +# UDiffs need a slightly different CSS rule for 'new' items (we don't +# want them to be bolded as we do in cdiffs or sdiffs). +# +UDIFFCSS=' + +' + +# +# input_cmd | html_quote | output_cmd +# or +# html_quote filename | output_cmd +# +# Make a piece of source code safe for display in an HTML
block. +# +html_quote() +{ + sed -e "s/&/\&/g" -e "s/\</g" -e "s/>/\>/g" "$@" | expand +} + +# +# input_cmd | bug2url | output_cmd +# +# Scan for bugids and insert links to the relevent bug database. +# +bug2url() +{ + sed -e 's|[0-9]\{5,\}|&|g' +} + +# +# input_cmd | sac2url | output_cmd +# +# Scan for ARC cases and insert links to the relevent SAC database. +# This is slightly complicated because inside the SWAN, SAC cases are +# grouped by ARC: PSARC/2006/123. But on OpenSolaris.org, they are +# referenced as 2006/123 (without labelling the ARC). +# +sac2url() +{ + if [[ -z $Oflag ]]; then + sed -e 's|\([A-Z]\{1,2\}ARC\)[ /]\([0-9]\{4\}\)/\([0-9]\{3\}\)|\1 \2/\3|g' + else + sed -e 's|\([A-Z]\{1,2\}ARC\)[ /]\([0-9]\{4\}\)/\([0-9]\{3\}\)|\1 \2/\3|g' + fi +} + +# +# strip_unchanged| output_cmd +# +# Removes chunks of sdiff documents that have not changed. This makes it +# easier for a code reviewer to find the bits that have changed. +# +# Deleted lines of text are replaced by a horizontal rule. Some +# identical lines are retained before and after the changed lines to +# provide some context. The number of these lines is controlled by the +# variable C in the $AWK script below. +# +# The script detects changed lines as any line that has a "%%4d %%s\\n\", NR, $0}\n" + printf "function bl() {printf \"%%4d %%s\\n\", NR, $0}\n" +} + /^ {next} + /^>/ {next} + /^---/ {next} + + { + split($1, a, /[cad]/) ; + if (index($1, "a")) { + if (a[1] == 0) { + n = split(a[2], r, /,/); + if (n == 1) + printf "BEGIN\t\t{sp(1)}\n" + else + printf "BEGIN\t\t{sp(%d)}\n",\ + (r[2] - r[1]) + 1 + next + } + + printf "NR==%s\t\t{", a[1] + n = split(a[2], r, /,/); + s = r[1]; + if (n == 1) + printf "bl();printf \"\\n\"; next}\n" + else { + n = r[2] - r[1] + printf "bl();sp(%d);next}\n",\ + (r[2] - r[1]) + 1 + } + next + } + if (index($1, "d")) { + n = split(a[1], r, /,/); + n1 = r[1] + n2 = r[2] + if (n == 1) + printf "NR==%s\t\t{removed(); next}\n" , n1 + else + printf "NR==%s,NR==%s\t{removed(); next}\n" , n1, n2 + next + } + if (index($1, "c")) { + n = split(a[1], r, /,/); + n1 = r[1] + n2 = r[2] + final = n2 + d1 = 0 + if (n == 1) + printf "NR==%s\t\t{changed();" , n1 + else { + d1 = n2 - n1 + printf "NR==%s,NR==%s\t{changed();" , n1, n2 + } + m = split(a[2], r, /,/); + n1 = r[1] + n2 = r[2] + if (m > 1) { + d2 = n2 - n1 + if (d2 > d1) { + if (n > 1) printf "if (NR==%d)", final + printf "sp(%d);", d2 - d1 + } + } + printf "next}\n" ; + + next + } + } + + END { printf "{printf \"%%4d %%s\\n\", NR, $0 }\n" } + ' /tmp/$$.diffs > /tmp/$$.file1 + + # + # Now generate the HTML for the new file + # + $AWK ' + BEGIN { + printf "function sp(n) {for (i=0;i \\n\", NR, $0}\n" + printf "function changed() " + printf "{printf \"%%4d %%s\\n\", NR, $0}\n" + printf "function changed() " + printf "{printf \"%%4d %%s\\n\", NR, $0}\n" + printf "function bl() {printf \"%%4d %%s\\n\", NR, $0}\n" + } + + /^ {next} + /^>/ {next} + /^---/ {next} + + { + split($1, a, /[cad]/) ; + if (index($1, "d")) { + if (a[2] == 0) { + n = split(a[1], r, /,/); + if (n == 1) + printf "BEGIN\t\t{sp(1)}\n" + else + printf "BEGIN\t\t{sp(%d)}\n",\ + (r[2] - r[1]) + 1 + next + } + + printf "NR==%s\t\t{", a[2] + n = split(a[1], r, /,/); + s = r[1]; + if (n == 1) + printf "bl();printf \"\\n\"; next}\n" + else { + n = r[2] - r[1] + printf "bl();sp(%d);next}\n",\ + (r[2] - r[1]) + 1 + } + next + } + if (index($1, "a")) { + n = split(a[2], r, /,/); + n1 = r[1] + n2 = r[2] + if (n == 1) + printf "NR==%s\t\t{new() ; next}\n" , n1 + else + printf "NR==%s,NR==%s\t{new() ; next}\n" , n1, n2 + next + } + if (index($1, "c")) { + n = split(a[2], r, /,/); + n1 = r[1] + n2 = r[2] + final = n2 + d2 = 0; + if (n == 1) { + final = n1 + printf "NR==%s\t\t{changed();" , n1 + } else { + d2 = n2 - n1 + printf "NR==%s,NR==%s\t{changed();" , n1, n2 + } + m = split(a[1], r, /,/); + n1 = r[1] + n2 = r[2] + if (m > 1) { + d1 = n2 - n1 + if (d1 > d2) { + if (n > 1) printf "if (NR==%d)", final + printf "sp(%d);", d1 - d2 + } + } + printf "next}\n" ; + next + } + } + END { printf "{printf \"%%4d %%s\\n\", NR, $0 }\n" } + ' /tmp/$$.diffs > /tmp/$$.file2 + + # + # Post-process the HTML files by running them back through $AWK + # + html_quote < $1 | $AWK -f /tmp/$$.file1 > /tmp/$$.file1.html + + html_quote < $2 | $AWK -f /tmp/$$.file2 > /tmp/$$.file2.html + + # + # Now combine into a valid HTML file and side-by-side into a table + # + print "$HTML$STDHEAD" + print " $WNAME Sdiff $TPATH " + print "" + print "$TPATH/$TNAME
" + print "Print this page" + print "$COMMENT\n" + print "" + print "" + + framed_sdiff $TNAME $TPATH /tmp/$$.file1.html /tmp/$$.file2.html \ + "$COMMENT" +} + + +# +# framed_sdiff
" + print " " + + strip_unchanged /tmp/$$.file1.html + + print "" + print " " + + strip_unchanged /tmp/$$.file2.html + + print "+# +# Expects lefthand and righthand side html files created by sdiff_to_html. +# We use insert_anchors() to augment those with HTML navigation anchors, +# and then emit the main frame. Content is placed into: +# +# $WDIR/DIR/$TNAME.lhs.html +# $WDIR/DIR/$TNAME.rhs.html +# $WDIR/DIR/$TNAME.frames.html +# +# NOTE: We rely on standard usage of $WDIR and $DIR. +# +function framed_sdiff +{ + typeset TNAME=$1 + typeset TPATH=$2 + typeset lhsfile=$3 + typeset rhsfile=$4 + typeset comments=$5 + typeset RTOP + + # Enable html files to access WDIR via a relative path. + RTOP=$(relative_dir $TPATH $WDIR) + + # Make the rhs/lhs files and output the frameset file. + print "$HTML$STDHEAD" > $WDIR/$DIR/$TNAME.lhs.html + + cat >> $WDIR/$DIR/$TNAME.lhs.html <<-EOF + + + + + $comments
+ EOF + + cp $WDIR/$DIR/$TNAME.lhs.html $WDIR/$DIR/$TNAME.rhs.html + + insert_anchors $lhsfile >> $WDIR/$DIR/$TNAME.lhs.html + insert_anchors $rhsfile >> $WDIR/$DIR/$TNAME.rhs.html + + close='' + + print $close >> $WDIR/$DIR/$TNAME.lhs.html + print $close >> $WDIR/$DIR/$TNAME.rhs.html + + print "$FRAMEHTML$STDHEAD" > $WDIR/$DIR/$TNAME.frames.html + print "$WNAME Framed-Sdiff " \ + "$TPATH/$TNAME " >> $WDIR/$DIR/$TNAME.frames.html + cat >> $WDIR/$DIR/$TNAME.frames.html <<-EOF + +