Merge
authortrims
Fri, 05 Feb 2010 12:26:35 -0800
changeset 4765 415e6de72568
parent 4764 d15bb22d4d39 (current diff)
parent 4728 a30062be6d9c (diff)
child 4766 246521c00249
Merge
jdk/make/java/redist/FILES.gmk
jdk/make/sun/nio/FILES_java.gmk
jdk/src/solaris/classes/sun/nio/ch/SctpSocketDispatcher.java
--- a/.hgtags	Thu Feb 04 15:50:59 2010 -0800
+++ b/.hgtags	Fri Feb 05 12:26:35 2010 -0800
@@ -54,3 +54,5 @@
 1d0121b741f029dc4b828e4b36ba6fda92907dd7 jdk7-b77
 4061c66ba1af1a2e27c2c839ba887407dd3ce050 jdk7-b78
 e9c98378f6b9256c0595ef2985ca5899f0c0e274 jdk7-b79
+e6abd38682d237306d6c147c17538ec9e7f8e3a7 jdk7-b80
+dcc938ac40cc45f1ef454d76020b5db5d943001c jdk7-b81
--- a/.hgtags-top-repo	Thu Feb 04 15:50:59 2010 -0800
+++ b/.hgtags-top-repo	Fri Feb 05 12:26:35 2010 -0800
@@ -54,3 +54,5 @@
 1f17ca8353babb13f4908c1f87d11508232518c8 jdk7-b77
 ab4ae8f4514693a9fe17ca2fec0239d8f8450d2c jdk7-b78
 20aeeb51713990dbea6929a2e100a8bbf5df70d4 jdk7-b79
+a3242906c7747b5d9bcc3d118c7c3c69aa40f4b7 jdk7-b80
+8403096d1fe7ff5318df9708cfec84a3fd3e1cf9 jdk7-b81
--- a/corba/.hgtags	Thu Feb 04 15:50:59 2010 -0800
+++ b/corba/.hgtags	Fri Feb 05 12:26:35 2010 -0800
@@ -54,3 +54,5 @@
 6881f0383f623394b5ec73f27a5f329ff55d0467 jdk7-b77
 a7f7276b48cd74d8eb1baa83fbf3d1ef4a2603c8 jdk7-b78
 ec0421b5703b677e2226cf4bf7ae4eaafd8061c5 jdk7-b79
+0336e70ca0aeabc783cc01658f36cb6e27ea7934 jdk7-b80
+e08a42a2a94d97ea8eedb187a94dbff822c8fbba jdk7-b81
--- a/hotspot/.hgtags	Thu Feb 04 15:50:59 2010 -0800
+++ b/hotspot/.hgtags	Fri Feb 05 12:26:35 2010 -0800
@@ -54,3 +54,5 @@
 455105fc81d941482f8f8056afaa7aa0949c9300 jdk7-b77
 e703499b4b51e3af756ae77c3d5e8b3058a14e4e jdk7-b78
 a5a6adfca6ecefb5894a848debabfe442ff50e25 jdk7-b79
+3003ddd1d4330b06cb4691ae74d600d3685899eb jdk7-b80
+1f9b07674480c224828852ffe137beea36b3cab5 jdk7-b81
--- a/hotspot/make/hotspot_version	Thu Feb 04 15:50:59 2010 -0800
+++ b/hotspot/make/hotspot_version	Fri Feb 05 12:26:35 2010 -0800
@@ -35,7 +35,7 @@
 
 HS_MAJOR_VER=17
 HS_MINOR_VER=0
-HS_BUILD_NUMBER=07
+HS_BUILD_NUMBER=08
 
 JDK_MAJOR_VER=1
 JDK_MINOR_VER=7
--- a/jaxp/.hgtags	Thu Feb 04 15:50:59 2010 -0800
+++ b/jaxp/.hgtags	Fri Feb 05 12:26:35 2010 -0800
@@ -54,3 +54,5 @@
 bfadab8c7b1bf806a49d3e1bc19ec919717f057a jdk7-b77
 7a12d3789e1b07a560fc79568b991818d617ede2 jdk7-b78
 b1005c504358c18694c84e95fec16b28cdce7ae1 jdk7-b79
+9219574db5936367114b0f31469837f27d5a375a jdk7-b80
+204e59d488cdaa9eafa8cb7164ea955b5a9d4a51 jdk7-b81
--- a/jaxws/.hgtags	Thu Feb 04 15:50:59 2010 -0800
+++ b/jaxws/.hgtags	Fri Feb 05 12:26:35 2010 -0800
@@ -54,3 +54,5 @@
 5b4968c110476085225d3a71c4210fad2c1116c1 jdk7-b77
 fc1c72d1dfbb17db7d46bba8db9afc39cbbb9299 jdk7-b78
 c08894f5b6e594b9b12993e256b96c1b38099632 jdk7-b79
+447767dee56a0f8cb89acc8bf7be5f9be7d84e8b jdk7-b80
+f051045fe94a48fae1097f90cbd9227e6aae6b7e jdk7-b81
--- a/jdk/.hgtags	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/.hgtags	Fri Feb 05 12:26:35 2010 -0800
@@ -54,3 +54,5 @@
 e6a5d095c356a547cf5b3c8885885aca5e91e09b jdk7-b77
 1143e498f813b8223b5e3a696d79da7ff7c25354 jdk7-b78
 918920710d65432a2d54fdf407c1524a5571c4ad jdk7-b79
+049cfaaa9a7374e3768a79969a799e8b59ad52fa jdk7-b80
+10b993d417fcdb40480dad7032ac241f4b87f1af jdk7-b81
--- a/jdk/make/com/sun/crypto/provider/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/crypto/provider/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -249,7 +249,7 @@
 else
 $(JAR_DESTFILE): $(SIGNED_DIR)/sunjce_provider.jar
 endif
-	$(install-file)
+	$(install-non-module-file)
 
 ifndef OPENJDK
 install-prebuilt:
--- a/jdk/make/com/sun/java/pack/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/java/pack/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../../..
+MODULE  = pack200
 PACKAGE = com.sun.java.util.jar.pack
 LIBRARY = unpack
 PRODUCT = sun
@@ -123,11 +124,14 @@
 
 all: build
 
-build: prop
+build: prop pack200-tool
 
 prop:
 	$(MAKE) -C prop
 
+pack200-tool:
+	$(call make-launcher, pack200, com.sun.java.util.jar.pack.Driver, , --pack)
+
 unpacker:
 	$(MAKE) $(UNPACK_EXE) STANDALONE=true LDMAPFLAGS_OPT= LDMAPFLAGS_DBG=
 
@@ -151,6 +155,7 @@
 	$(MT) /manifest $(TEMPDIR)/unpack200$(EXE_SUFFIX).manifest /outputresource:$(TEMPDIR)/unpack200$(EXE_SUFFIX);#1
 endif
 	$(CP) $(TEMPDIR)/unpack200$(EXE_SUFFIX) $(UNPACK_EXE)
+	$(install-module-file)
 
 ifeq ($(PLATFORM), windows) 
 $(RES):: $(VERSIONINFO_RESOURCE)
--- a/jdk/make/com/sun/java/pack/prop/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/java/pack/prop/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 # to a collision of rules with Classes.gmk and Library.gmk
 
 BUILDDIR = ../../../../..
+MODULE  = pack200
 PACKAGE = com.sun.java.util.jar.pack
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/jndi/cosnaming/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/jndi/cosnaming/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../../..
+MODULE  = jndi-cosnaming
 PACKAGE = com.sun.jndi.cosnaming
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/jndi/dns/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/jndi/dns/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../../..
+MODULE  = jndi-dns
 PACKAGE = com.sun.jndi.dns
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/jndi/ldap/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/jndi/ldap/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../../..
+MODULE  = jndi-ldap
 PACKAGE = com.sun.jndi.ldap
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/jndi/rmi/registry/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/jndi/rmi/registry/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../../../..
+MODULE  = jndi-rmiregistry
 PACKAGE = com.sun.jndi.rmi.registry
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/nio/sctp/FILES_java.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/nio/sctp/FILES_java.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -57,8 +57,7 @@
 	sun/nio/ch/SctpResultContainer.java \
 	sun/nio/ch/SctpSendFailed.java \
 	sun/nio/ch/SctpServerChannelImpl.java \
-	sun/nio/ch/SctpShutdown.java \
-	sun/nio/ch/SctpSocketDispatcher.java
+	sun/nio/ch/SctpShutdown.java
 else
 FILES_java += \
 	sun/nio/ch/SctpChannelImpl.java \
--- a/jdk/make/com/sun/nio/sctp/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/nio/sctp/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../../..
+MODULE  = sctp
 PACKAGE = com.sun.nio.sctp
 LIBRARY = sctp
 PRODUCT = sun
--- a/jdk/make/com/sun/nio/sctp/mapfile-vers	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/nio/sctp/mapfile-vers	Fri Feb 05 12:26:35 2010 -0800
@@ -25,9 +25,14 @@
 
 SUNWprivate_1.1 {
 	global:
+		Java_sun_nio_ch_SctpNet_init;
 		Java_sun_nio_ch_SctpNet_socket0;
 		Java_sun_nio_ch_SctpNet_bindx;
 		Java_sun_nio_ch_SctpNet_branch0;
+		Java_sun_nio_ch_SctpNet_listen0;
+		Java_sun_nio_ch_SctpNet_connect0;
+		Java_sun_nio_ch_SctpNet_close0;
+		Java_sun_nio_ch_SctpNet_preClose0;
 		Java_sun_nio_ch_SctpNet_getLocalAddresses0;
 		Java_sun_nio_ch_SctpNet_getRemoteAddresses0;
 		Java_sun_nio_ch_SctpNet_getPrimAddrOption0;
--- a/jdk/make/com/sun/org/apache/xml/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/org/apache/xml/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../../../..
+MODULE  = security-xmldsig
 PACKAGE = com.sun.org.apache.xml
 PRODUCT = xml
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/rowset/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/rowset/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = jdbc-enterprise
 PACKAGE = com.sun.rowset
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/script/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/script/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -25,6 +25,7 @@
 
 
 BUILDDIR = ../../..
+MODULE  = scripting-rhino
 PACKAGE = com.sun.script
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/com/sun/security/auth/module/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/security/auth/module/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -26,6 +26,7 @@
 # Makefile for building auth modules.
 
 BUILDDIR = ../../../../..
+MODULE  = security-auth
 PACKAGE = com.sun.security.auth.module
 PRODUCT = sun
 
--- a/jdk/make/com/sun/servicetag/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/servicetag/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -22,6 +22,7 @@
 # have any questions.
 
 BUILDDIR = ../../..
+MODULE  = servicetag
 PACKAGE = com.sun.servicetag
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
@@ -68,7 +69,7 @@
 
 $(SERVICETAG_LIBDIR)/jdk_header.png: $(SHARE_SRC)/classes/com/sun/servicetag/resources/jdk_header.png
 	$(install-file)
-	$(CHMOD) 444 $@
+	$(call chmod-file, 444)
 
 install-servicetag-lib:
 	@$(RM) -rf $(SERVICETAG_LIBDIR)
--- a/jdk/make/com/sun/tools/attach/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/com/sun/tools/attach/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -25,6 +25,7 @@
 
 
 BUILDDIR = ../../../..
+MODULE  = attach
 PACKAGE = com.sun.tools.attach
 LIBRARY = attach
 PRODUCT = sun
@@ -65,6 +66,7 @@
 	@$(MKDIR) -p $(@D)
 	@$(RM) $@
 	@$(CAT) $< | $(SED) -e "s/^#\[$(PLATFORM)\]//" > $@
+	@$(install-module-file)
                                                                                                 
 .PHONY: copy-files
 
--- a/jdk/make/common/Defs.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/common/Defs.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -225,12 +225,6 @@
     endif
   endif 
 
-  ifeq ($(PLATFORM), windows)
-    FREETYPE_LIB = $(FREETYPE_LIB_PATH)/freetype.lib
-  else
-    FREETYPE_LIB = -L$(FREETYPE_LIB_PATH) -lfreetype
-  endif
-
   ifdef ALT_FREETYPE_HEADERS_PATH
     FREETYPE_HEADERS_PATH = $(ALT_FREETYPE_HEADERS_PATH)
   else
@@ -313,6 +307,9 @@
 # for generated class files
 CLASSBINDIR         = $(OUTPUTDIR)/classes
 DEMOCLASSDIR        = $(OUTPUTDIR)/democlasses
+# for modules
+MODULES_DIR         = $(OUTPUTDIR)/modules
+ABS_MODULES_DIR     = $(ABS_OUTPUTDIR)/modules
 # for generated tool class files
 BUILDTOOLCLASSDIR   = $(OUTPUTDIR)/btclasses
 # for build tool jar files
@@ -388,6 +385,22 @@
   UNIQUE_LOCATION_STRING += /$(THREADDIR)
 endif
 
+#
+# Build units may or may not define MODULE.  Default to "other".
+#
+# MODULE variable defines the lowest-level module name that
+# might or might not be the name of the modules created in
+# the modules build (see make/modules/modules.config and
+# modules.group).
+#
+MODULES_TEMPDIR     = $(OUTPUTDIR)/tmp/modules
+ABS_MODULES_TEMPDIR = $(ABS_OUTPUTDIR)/tmp/modules
+
+ifndef MODULE
+  MODULE = other
+endif
+override MODULE_DEST_DIR = $(MODULES_TEMPDIR)/$(MODULE)
+
 # the use of += above makes a space separated list which we need to 
 # remove for filespecs.
 #
@@ -498,6 +511,58 @@
 include $(JDK_MAKE_SHARED_DIR)/Defs-java.gmk
 
 #
+# Macros to find the module that $@ belongs to
+#
+
+UNIQUE_PATH_PATTERN = $(subst /,.,$(UNIQUE_PATH))
+MODULE_PATH_PATTERN = -e 's%.*\/classes\/%classes\/%' \
+		      -e 's%.*\/$(UNIQUE_PATH_PATTERN)\/%classes\/%' \
+		      -e 's%.*\/lib\/%lib\/%' \
+	              -e 's%.*\/bin\/%bin\/%' \
+	              -e 's%.*\/include\/%include\/%' \
+		      -e 's%.*\/demo\/%demo\/%' \
+		      -e 's%.*\/sample\/%sample\/%'
+
+# Install a file to its module
+define install-module-file
+dest=`echo $(@D)/ | $(SED) $(MODULE_PATH_PATTERN)` ; \
+$(MKDIR) -p $(MODULE_DEST_DIR)/$$dest; \
+$(CP) -f $@ $(MODULE_DEST_DIR)/$$dest
+endef
+
+# Install all files from the directory to its module
+define install-module-dir
+dest=`echo $(@D)/ | $(SED) $(MODULE_PATH_PATTERN)` ; \
+$(MKDIR) -p $(MODULE_DEST_DIR)/$$dest; \
+$(CP) -rf $(@D)/* $(MODULE_DEST_DIR)/$$dest
+endef
+
+# chmod the file in its module
+define chmod-module-file
+dest=`echo $@ | $(SED) $(MODULE_PATH_PATTERN)` ; \
+$(CHMOD) $1 $(MODULE_DEST_DIR)/$$dest
+endef
+
+# install a sym link in its module
+define install-module-sym-link
+dest=`echo $@ | $(SED) $(MODULE_PATH_PATTERN)` ; \
+$(LN) -sf $1 $(MODULE_DEST_DIR)/$$dest
+endef
+
+
+# Run MAKE $@ for a launcher:
+#   $(call make-launcher, name, mainclass, java-args, main-args)
+define make-launcher
+$(CD) $(BUILDDIR)/launchers && \
+$(MAKE) -f Makefile.launcher \
+        MODULE=$(MODULE) \
+        PROGRAM=$(strip $1) \
+        MAIN_CLASS=$(strip $2) \
+        MAIN_JAVA_ARGS="$(strip $3)" \
+        MAIN_ARGS="$(strip $4)"
+endef
+
+#
 # Convenient macros
 #
 
@@ -511,6 +576,28 @@
 define install-file
 $(prep-target)
 $(CP) $< $@
+$(install-module-file)
+endef
+
+define chmod-file
+$(CHMOD) $1 $@
+$(call chmod-module-file, $1)
+endef
+
+define install-sym-link
+$(LN) -s $1 $@
+$(call install-module-sym-link, $1)
+endef
+
+#
+# Marcos for files not belonging to any module 
+define install-non-module-file
+$(prep-target)
+$(CP) $< $@
+endef
+
+define install-manifest-file
+$(install-non-module-file)
 endef
 
 # Cleanup rule for after debug java run (hotspot.log file is left around)
@@ -712,7 +799,7 @@
 endif
 
 # Install of imported file (JDK_IMPORT_PATH, or some other external location)
-define install-import-file
+define install-importonly-file
 @$(ECHO) "ASSEMBLY_IMPORT: $@"
 $(prep-target)
 $(CP) $< $@
@@ -730,4 +817,9 @@
 fi
 endef
 
+define install-import-file
+$(install-importonly-file)
+$(install-module-file)
+endef
+
 .PHONY: all build clean clobber
--- a/jdk/make/common/Demo.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/common/Demo.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -25,6 +25,8 @@
 
 # JDK Demo building jar file.
   
+MODULE = demos
+
 # Some names are defined with LIBRARY inside the Defs.gmk file
 LIBRARY=$(DEMONAME)
 OBJDIR=$(TEMPDIR)/$(DEMONAME)
--- a/jdk/make/common/Library.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/common/Library.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -193,9 +193,18 @@
 	$(MT) /manifest $(OBJDIR)/$(@F).manifest /outputresource:$(OBJDIR)/$(@F);#2
 endif
 	$(CP) $(OBJDIR)/$(@F) $@
+	$(install-module-file)
 	$(CP) $(OBJDIR)/$(LIBRARY).map $(@D)
 	$(CP) $(OBJDIR)/$(LIBRARY).pdb $(@D)
 
+$(ACTUAL_LIBRARY):: $(ACTUAL_LIBRARY_DIR)/$(LIBRARY).map $(ACTUAL_LIBRARY_DIR)/$(LIBRARY).pdb
+
+$(ACTUAL_LIBRARY_DIR)/%.map: FORCE
+	$(install-module-file)
+
+$(ACTUAL_LIBRARY_DIR)/%.pdb: FORCE
+	$(install-module-file)
+
 endif # LIBRARY
 
 $(OBJDIR)/$(LIBRARY).lcf: $(OBJDIR)/$(LIBRARY).res $(COMPILE_FILES_o) $(FILES_m)
@@ -250,6 +259,7 @@
 	$(AR) -r $@ $(FILES_o)
 else # LIBRARY
 	$(LINKER) $(SHARED_LIBRARY_FLAG) -o $@ $(FILES_o) $(LDLIBS)
+	$(install-module-file)
 ifeq ($(WRITE_LIBVERSION),true)
 	$(MCS) -d -a "$(FULL_VERSION)" $@
 endif # WRITE_LIBVERSION
@@ -353,5 +363,7 @@
 openjdk:
 	$(MAKE) OPENJDK=true build
 
+FORCE:
+
 .PHONY: all build debug fastdebug
 
--- a/jdk/make/common/Modules.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/common/Modules.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -34,12 +34,10 @@
 #
 # Open issues that need further investigation:
 # 1. Classes in jre/lib/ext/dnsns.jar are currently put in jre/lib/jndi-dns
-#    module.
+#    module.  META-INF/services file is not installed.
 # 2. Signed jars
 #    For JDK build, signed jars are copied to the build.
 #    All jars in the module image are unsigned.
-# 3. jre/lib/security/US_export_policy.jar and local_policy.jar
-#    are not included in the module image yet.
 
 MODULE_IMAGEBINDIR = bin
 
@@ -63,7 +61,8 @@
 	@$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."
 
 # Order is important here, trim jre after jdk image is created
-modules:: sanity-module-images post-sanity-module-images  \
+modules:: gen-modules \
+	 sanity-module-images post-sanity-module-images  \
 	 $(INITIAL_MODULE_IMAGE_JRE) $(INITIAL_MODULE_IMAGE_JDK) \
 	 trim-module-image-jre trim-module-image-jdk \
 	 process-module-image-jre process-module-image-jdk
@@ -122,8 +121,33 @@
 # JRE Image
 ######################################################
 
-MODULES_TEMPDIR=$(ABS_TEMPDIR)/modules
-MODULES_LIB = $(ABS_OUTPUTDIR)/modules
+MODULES_LIST = $(MODULES_TEMPDIR)/classlist/modules.list
+
+# Modules in the jre/lib/security directory
+POLICY_MODULES = US_export_policy local_policy
+
+# Modules in the modules/ext directory
+EXT_MODULES = localedata security-sunec security-sunjce
+
+# Build PKCS#11 on all platforms except 64-bit Windows.
+PKCS11 = security-sunpkcs11
+ifeq ($(ARCH_DATA_MODEL), 64)
+  ifeq ($(PLATFORM), windows)
+    PKCS11 =
+  endif
+endif
+
+EXT_MODULES += $(PKCS11)
+
+# Build Microsoft CryptoAPI provider only on (non-64-bit) Windows platform.
+ifeq ($(PLATFORM), windows)
+  ifneq ($(ARCH_DATA_MODEL), 64)
+    EXT_MODULES += security-sunmscapi
+  endif
+endif
+
+# Modules for JDK only
+JDK_MODULES = tools
 
 gen-modules:
 	$(CD) modules; $(MAKE) all
@@ -151,7 +175,6 @@
 # Construct an initial jre image (initial jdk jre) no trimming or stripping
 initial-module-image-jre:: initial-module-image-jre-setup \
 		    $(JRE_LICENSES) $(JRE_MODULE_DOCFILES) \
-		    gen-modules \
 		    $(BUILDMETAINDEX_JARFILE)
 	@# Copy in bin directory
 	$(CD) $(OUTPUTDIR) && $(FIND) bin -depth | $(CPIO) -pdum $(JRE_MODULE_IMAGE_DIR)
@@ -162,7 +185,21 @@
 	@#
 	@# copy modules to jre/lib
 	@#
-	$(CP) -rf $(MODULES_LIB)/jre/lib/* $(JRE_MODULE_IMAGE_DIR)/lib 
+	for m in `$(NAWK) '{print $$1}' $(MODULES_LIST)` ; do \
+	    $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib ; \
+	done
+	$(MKDIR) -p $(JRE_MODULE_IMAGE_DIR)/lib/ext
+	for m in $(EXT_MODULES) ; do \
+           $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/ext ; \
+        done
+	for m in $(POLICY_MODULES) ; do \
+           $(MV) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar $(JRE_MODULE_IMAGE_DIR)/lib/security; \
+        done
+	@# Remove jdk modules
+	for m in $(JDK_MODULES) ; do \
+           $(RM) $(JRE_MODULE_IMAGE_DIR)/lib/$$m.jar ; \
+        done
+
 	@# Make sure all directories are read/execute for everyone
 	$(CHMOD) a+rx `$(FIND) $(JRE_MODULE_IMAGE_DIR) -type d`
 	@# Remove some files from the jre area
@@ -304,7 +341,9 @@
 	@# copy jdk modules to jdk/lib
 	@#
 	$(MKDIR) -p $(JDK_MODULE_IMAGE_DIR)/lib
-	$(CP) -rf $(MODULES_LIB)/lib/* $(JDK_MODULE_IMAGE_DIR)/lib 
+	for m in $(JDK_MODULES) ; do \
+	    $(CP) $(MODULES_DIR)/$$m/lib/$$m.jar $(JDK_MODULE_IMAGE_DIR)/lib ; \
+        done
   ifeq ($(PLATFORM), windows)
 	@#
 	@# lib/
--- a/jdk/make/common/Program.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/common/Program.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -50,8 +50,6 @@
 ACTUAL_PROGRAM_DIR  = $(BINDIR)
 ACTUAL_PROGRAM      = $(ACTUAL_PROGRAM_DIR)/$(ACTUAL_PROGRAM_NAME)
 
-JVMCFG = $(LIBDIR)/$(LIBARCH)/jvm.cfg
-
 # Make sure the default rule is all
 program_default_rule: all
 
@@ -116,7 +114,7 @@
 
 ifeq ($(COMPILE_IT),true)
 
-$(ACTUAL_PROGRAM):: classes $(JVMCFG) $(INIT) 
+$(ACTUAL_PROGRAM):: classes $(INIT) 
 
 #
 # Windows only
@@ -190,12 +188,13 @@
 	@$(MKDIR) -p $(TEMPDIR)
 	$(LINK_PRE_CMD) $(CC) $(CC_OBJECT_OUTPUT_FLAG)$@ $(LDFLAGS) \
 	    $(FILES_o) $(THREADLIBS) $(LDLIBS)
+	$(install-module-file)
 
 endif # PLATFORM
 
 else  # COMPILE_IT
 
-$(ACTUAL_PROGRAM):: $(JVMCFG)
+$(ACTUAL_PROGRAM)::
 
 # Copies in the file from the JDK_IMPORT_PATH area
 $(ACTUAL_PROGRAM_DIR)/%: $(JDK_IMPORT_PATH)/jre/bin/%
@@ -272,18 +271,6 @@
 		$(VERSION_DEFINES) $<
 
 #
-# How to install jvm.cfg. 
-#
-ifeq ($(ZERO_BUILD), true)
-JVMCFG_ARCH = zero
-else
-JVMCFG_ARCH = $(ARCH)
-endif
-
-$(JVMCFG): $(LAUNCHER_PLATFORM_SRC)/bin/$(JVMCFG_ARCH)/jvm.cfg 
-	$(install-file)
-
-#
 # Default dependencies
 #
 
--- a/jdk/make/common/internal/BinaryPlugs.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/common/internal/BinaryPlugs.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -116,7 +116,7 @@
 
 define import-binary-plug-file
 @$(ECHO) "PLUG IMPORT: $(@F)"
-$(install-file)
+$(install-non-module-file)
 endef # import-binary-plug-file
 
 # Import classes command
@@ -184,7 +184,7 @@
 
 define export-binary-plug-file
 @$(ECHO) "PLUG EXPORT: $(@F)"
-$(install-file)
+$(install-non-module-file)
 endef # export-binary-plug-file
 
 # OpenJDK Binary Plug License
--- a/jdk/make/common/internal/Resources.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/common/internal/Resources.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -139,7 +139,7 @@
 STRIP_PROP_options=$(TEMPDIR)/strip_prop_options
 define install-properties-file
 $(install-file)
-$(CHMOD) a+rw $@
+$(call chmod-file, a+rw)
 @$(ECHO) "# Adding to strip properties list: $@"
 $(ECHO) "$@" >> $(STRIP_PROP_options)
 endef
--- a/jdk/make/common/shared/Defs-java.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/common/shared/Defs-java.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -138,6 +138,10 @@
 # Needed for javah
 JAVAHFLAGS += -bootclasspath $(CLASSBINDIR)
 
+# Needed for javadoc to ensure it builds documentation
+# against the newly built classes
+JAVADOCFLAGS += -bootclasspath $(CLASSBINDIR)
+
 # Needed for JAVADOC and BOOT_JAVACFLAGS
 NO_PROPRIETARY_API_WARNINGS = -XDignore.symbol.file=true
 
@@ -155,14 +159,15 @@
 		-jar $(JAVAH_JAR) $(JAVAHFLAGS)
   JAVADOC_CMD = $(BOOT_JAVA_CMD) \
 		"-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \
-		-jar $(JAVADOC_JAR)
+		-jar $(JAVADOC_JAR) $(JAVADOCFLAGS)
 else
   # If no explicit tools, use boot tools (add VM flags in this case)
   JAVAC_CMD     = $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \
 		  $(JAVACFLAGS)
   JAVAH_CMD     = $(JAVA_TOOLS_DIR)/javah \
 		  $(JAVAHFLAGS)
-  JAVADOC_CMD   = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%)
+  JAVADOC_CMD   = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%) \
+  		  $(JAVADOCFLAGS)
 endif
 
 # Override of what javac to use (see deploy workspace)
--- a/jdk/make/common/shared/Sanity.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/common/shared/Sanity.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -1117,7 +1117,7 @@
 #    be checked when this represents a full control build (i.e. the
 #    HOTSPOT_IMPORT_PATH includes these files in it's 'include' directory).
 $(TEMPDIR)/%.h: $(SHARE_SRC)/javavm/export/%.h
-	@$(install-file)
+	@$(install-non-module-file)
 	@$(RM) $@.IMPORT
 	@if [ -r $(HOTSPOT_IMPORT_PATH)/include/$(@F) ]; then \
 	  $(CP) $(HOTSPOT_IMPORT_PATH)/include/$(@F) $@.IMPORT ; \
@@ -1131,7 +1131,7 @@
 	fi
 
 $(TEMPDIR)/%.h: $(PLATFORM_SRC)/javavm/export/%.h
-	@$(install-file)
+	@$(install-non-module-file)
 	@$(RM) $@.IMPORT
 	@if [ -r $(HOTSPOT_IMPORT_PATH)/include/$(PLATFORM_INCLUDE_NAME)/$(@F) ]; then \
 	  $(CP) $(HOTSPOT_IMPORT_PATH)/include/$(PLATFORM_INCLUDE_NAME)/$(@F) $@.IMPORT ; \
--- a/jdk/make/docs/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/docs/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -69,7 +69,7 @@
 THIS_YEAR := $(shell $(DATE) | $(SED) -e 's/  / /g' | $(CUT) -d' ' -f6)
 TRADEMARK = &\#x2122;
 
-IGNORED_TAGS =	beaninfo revised since.unbundled spec Note ToDo
+IGNORED_TAGS =	beaninfo revised since.unbundled spec specdefault Note ToDo
 
 JLS3_URL = http://java.sun.com/docs/books/jls/
 JLS3_CITE = <a href="$(JLS3_URL)"> \
--- a/jdk/make/java/awt/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/awt/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = awt
 PACKAGE = java.awt
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/fdlibm/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/fdlibm/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -31,6 +31,7 @@
 #
 
 BUILDDIR     = ../..
+MODULE       = base
 LIBRARY      = fdlibm
 PRODUCT      = java
 
--- a/jdk/make/java/hpi/native/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/hpi/native/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR     = ../../..
+MODULE       = base
 LIBRARY      = hpi
 PRODUCT      = java
 THREADDIR    = native_threads
--- a/jdk/make/java/hpi/windows/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/hpi/windows/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -26,8 +26,9 @@
 #
 # Makefile for Windows HPI DLL
 #
-BUILDDIR = ../../..
-LIBRARY   = hpi
+BUILDDIR     = ../../..
+MODULE       = base
+LIBRARY      = hpi
 PRODUCT      = java
 THREADDIR    = windows_threads
 LIB_LOCATION = $(BINDIR)
--- a/jdk/make/java/instrument/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/instrument/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -27,6 +27,7 @@
 # agent, supporting java.lang.instrument
 
 BUILDDIR = ../..
+MODULE  = instrument
 PACKAGE = sun.instrument
 LIBRARY = instrument
 PRODUCT = sun
--- a/jdk/make/java/java/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/java/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = base
 PACKAGE = java.lang
 LIBRARY = java
 PRODUCT = java
@@ -241,7 +242,7 @@
 
 $(GENSRCDIR)/java/lang/UNIXProcess.java: \
     $(PLATFORM_SRC)/classes/java/lang/UNIXProcess.java.$(PLATFORM)
-	$(install-file)
+	$(install-non-module-file)
 
 clean:: 
 	$(RM) $(GENSRCDIR)/java/lang/UNIXProcess.java
@@ -285,7 +286,7 @@
 
 $(TZMAP): $(TZMAPFILE)
 	$(install-file)
-	$(CHMOD) 444 $@
+	$(call chmod-file, 444)
 endif
 
 build: $(LIBDIR)/$(PROPS) $(LIBDIR)/$(CAL_PROPS) $(TZMAP)
@@ -315,7 +316,8 @@
 	$(BOOT_JAVA_CMD) -jar $(GENERATECURRENCYDATA_JARFILE) -o $@.temp \
 		< $(SHARE_SRC)/classes/java/util/CurrencyData.properties
 	$(MV) $@.temp $@
-	$(CHMOD) 444 $@
+	$(install-module-file)
+	$(call chmod-file, 444)
 
 clean:: 
 	$(RM) $(CURDATA)
@@ -369,7 +371,7 @@
 		-usecharforbyte 11 4 1
 
 $(GENSRCDIR)/java/lang/%.java : $(CHARACTERDATA)/%.java.template
-	$(install-file)
+	$(install-non-module-file)
 
 clean::
 	$(RM) $(GENSRCDIR)/java/lang/CharacterDataLatin1.java 
--- a/jdk/make/java/java_crw_demo/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/java_crw_demo/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,8 @@
 #
 
 BUILDDIR = ../..
+
+MODULE  = demos
 LIBRARY = java_crw_demo
 PRODUCT = sun
 LIBRARY_OUTPUT = java_crw_demo
--- a/jdk/make/java/java_hprof_demo/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/java_hprof_demo/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = instrument
 LIBRARY = hprof
 PRODUCT = sun
 LIBRARY_OUTPUT = hprof_jvmti
--- a/jdk/make/java/jli/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/jli/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -30,6 +30,7 @@
 # its manifestations (java, javaw, javac, ...).
 #
 BUILDDIR = ../..
+MODULE  = base
 LIBRARY = jli
 PRODUCT = java
 
--- a/jdk/make/java/jvm/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/jvm/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,8 @@
 #
 
 BUILDDIR = ../..
+MODULE   = base
+
 include $(BUILDDIR)/common/Defs.gmk
 
 #
@@ -36,15 +38,29 @@
 	  $(INCLUDEDIR)/classfile_constants.h
 
 $(INCLUDEDIR)/%.h: $(SHARE_SRC)/javavm/export/%.h
-	$(install-file)
+	$(install-non-module-file)
 
 $(PLATFORM_INCLUDE)/%.h: $(PLATFORM_SRC)/javavm/export/%.h
+	$(install-non-module-file)
+
+JVMCFG = $(LIBDIR)/$(LIBARCH)/jvm.cfg
+
+#
+# How to install jvm.cfg.
+#
+ifeq ($(ZERO_BUILD), true)
+JVMCFG_ARCH = zero
+else
+JVMCFG_ARCH = $(ARCH)
+endif
+
+$(JVMCFG): $(PLATFORM_SRC)/bin/$(JVMCFG_ARCH)/jvm.cfg
 	$(install-file)
 
 all: build
 
-build: $(FILES_h)
+build: $(FILES_h) $(JVMCFG)
 
 clean clobber:: 
-	$(RM) $(FILES_h)
+	$(RM) $(FILES_h) $(JVMCFG)
 
--- a/jdk/make/java/logging/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/logging/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = logging
 PACKAGE = java.util.logging
 PRODUCT = java
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/main/java/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/main/java/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = base
 PROGRAM = java
 PRODUCT = java
 
--- a/jdk/make/java/main/javaw/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/main/javaw/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = base
 PROGRAM = javaw
 PRODUCT = java
 
--- a/jdk/make/java/management/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/management/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = management
 PACKAGE = java.lang.management
 LIBRARY = management
 PRODUCT = java
@@ -99,7 +100,7 @@
 	@$(java-vm-cleanup)
 
 $(TEMPDIR)/manifest: $(MANIFEST)
-	$(install-file)
+	$(install-manifest-file)
 
 build: $(AGENTJAR)
 
--- a/jdk/make/java/net/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/net/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = base
 PACKAGE = java.net
 LIBRARY = net
 PRODUCT = sun
@@ -111,8 +112,7 @@
 MISC_FILES = $(LIBDIR) $(LIBDIR)/net.properties
 
 $(LIBDIR)/net.properties: $(SHARE_SRC)/lib/net.properties
-	@$(RM) $@
-	$(CP) $< $@
+	$(install-file)
 
 # 
 # SDP configuration template
--- a/jdk/make/java/nio/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/nio/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = nio
 PACKAGE = java.nio
 LIBRARY = nio
 PRODUCT = java
@@ -816,7 +817,7 @@
 	$(NAWK) '/^.*Copyright.*Sun/ { print $$3 }') 
 
 $(TEMPDIR)/$(GENSOR_SRC) : $(GENSOR_SRC)
-	$(install-file)
+	$(install-non-module-file)
 
 $(GENSOR_EXE) : $(TEMPDIR)/$(GENSOR_SRC)
 	$(prep-target)
--- a/jdk/make/java/npt/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/npt/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,9 @@
 #
 
 BUILDDIR = ../..
+
+# It's currently used by jpda and hprof.  Put it in base module for now.
+MODULE  = base
 LIBRARY = npt
 PRODUCT = sun
 LIBRARY_OUTPUT = npt
--- a/jdk/make/java/redist/FILES.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-#
-# Copyright 1998-2003 Sun Microsystems, Inc.  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.  Sun designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-#
-# List of lucida font files that we redistribute.
-#
-
-SHARED_FONTFILES =					\
-	$(LIBDIR)/fonts/LucidaTypewriterRegular.ttf	\
-	$(LIBDIR)/fonts/LucidaTypewriterBold.ttf        \
-	$(LIBDIR)/fonts/LucidaBrightRegular.ttf         \
-	$(LIBDIR)/fonts/LucidaBrightDemiBold.ttf        \
-	$(LIBDIR)/fonts/LucidaBrightItalic.ttf          \
-	$(LIBDIR)/fonts/LucidaBrightDemiItalic.ttf	\
-	$(LIBDIR)/fonts/LucidaSansRegular.ttf       	\
-	$(LIBDIR)/fonts/LucidaSansDemiBold.ttf       	\
-
-ifeq ($(PLATFORM), linux)
-
-# The oblique versions of the font are derived from the base versions
-# and since 2D can do this derivation on the fly at run time there is no
-# need to redistribute the fonts. An exception to this is on Linux.
-# The reason is that the Lucidas are specified in the font.properties files
-# on Linux, and so AWT/Motif components expect to be able to ask the Xserver
-# for these oblique fonts, but the Xserver cannot do the same derivation as
-# 2D can.
-
-OBLIQUE_FONTFILES =                                             \
-	$(LIBDIR)/oblique-fonts/LucidaTypewriterOblique.ttf     \
-	$(LIBDIR)/oblique-fonts/LucidaTypewriterBoldOblique.ttf \
-	$(LIBDIR)/oblique-fonts/LucidaSansOblique.ttf       	\
-	$(LIBDIR)/oblique-fonts/LucidaSansDemiOblique.ttf       \
-
-endif
--- a/jdk/make/java/redist/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/redist/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -35,6 +35,7 @@
 # 
 
 BUILDDIR = ../..
+MODULE   = base
 PRODUCT  = java
 include $(BUILDDIR)/common/Defs.gmk
 
@@ -61,7 +62,11 @@
 # Needed to do file copy
 ABS_BUILDDIR :=$(call FullPath,$(BUILDDIR))
 
-all: build
+SUBDIRS = fonts sajdi
+all clean clobber::
+	$(SUBDIRS-loop)
+
+all:: build
 
 # List of files created here or coming from BUILDDIR area (this workspace)
 INTERNAL_IMPORT_LIST = $(LIBDIR)/classlist
@@ -70,30 +75,6 @@
 IMPORT_LIST = $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_NAME) \
               $(LIB_LOCATION)/$(SERVER_LOCATION)/Xusage.txt
 
-# INCLUDE_SA is false on platforms where SA is not supported.
-# On platforms where it is supported, we want to allow it to
-# not be present, at least temporarily.  So,
-# if the SA files (well, just sa-jdi.jar) do not exist 
-# in the HOTSPOT_IMPORT_PATH, then we won't build SA.
-SA_EXISTS := $(shell if [ -r $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar ] ; then \
-                          $(ECHO) true; \
-                        else \
-                          $(ECHO) false; \
-                        fi)
-
-ifeq ($(SA_EXISTS), false)
-  INCLUDE_SA := false
-endif
-
-ifeq ($(INCLUDE_SA), true)
-  IMPORT_LIST += $(LIBDIR)/sa-jdi.jar \
-                 $(LIB_LOCATION)/$(SALIB_NAME)
-  ifeq ($(PLATFORM), windows)
-    IMPORT_LIST += $(LIB_LOCATION)/$(SAMAP_NAME) \
-                   $(LIB_LOCATION)/$(SAPDB_NAME)
-  endif
-endif # INCLUDE_SA
-
 # Hotspot client is only available on 32-bit non-Zero builds
 ifneq ($(ZERO_BUILD), true)
 ifeq ($(ARCH_DATA_MODEL), 32)
@@ -110,10 +91,10 @@
 # NOTE: These might actually come from BUILDDIR, depends on the settings.
 $(BINDIR)/msvcrt.dll: $(MSVCRT_DLL_PATH)/msvcrt.dll
 	$(install-import-file)
-	$(CHMOD) a+x $@
+	$(call chmod-file, a+x)
 $(BINDIR)/$(MSVCRNN_DLL): $(MSVCRNN_DLL_PATH)/$(MSVCRNN_DLL)
 	$(install-import-file)
-	$(CHMOD) a+x $@
+	$(call chmod-file, a+x)
 
 # Get the hotspot .map and .pdb files for client and server
 IMPORT_LIST += \
@@ -140,26 +121,32 @@
 $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMMAP_NAME):
 	@$(prep-target)
 	-$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVMMAP_NAME)  $@
+	@$(install-module-file)
 
 $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMMAP_NAME):
 	@$(prep-target)
 	-$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMMAP_NAME)  $@
+	@$(install-module-file)
 
 $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMMAP_NAME):
 	@$(prep-target)
 	-$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMMAP_NAME) $@
+	@$(install-module-file)
 
 $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMPDB_NAME):
 	@$(prep-target)
 	-$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVMPDB_NAME)  $@
+	@$(install-module-file)
 
 $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME):
 	@$(prep-target)
 	-$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMPDB_NAME)  $@
+	@$(install-module-file)
 
 $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME): 
 	@$(prep-target)
 	-$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMPDB_NAME) $@
+	@$(install-module-file)
 
 #  Windows     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  Windows
 else # PLATFORM
@@ -220,7 +207,7 @@
 $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME) \
 $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_NAME):
 	@$(prep-target)
-	$(LN) -s ../$(LIBJSIG_NAME) $@
+	$(call install-sym-link, ../$(LIBJSIG_NAME))
 
 $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDB_NAME)
 	$(install-import-file)
@@ -246,28 +233,6 @@
 $(LIB_LOCATION)/$(KERNEL_LOCATION)/Xusage.txt : $(HOTSPOT_KERNEL_PATH)/Xusage.txt
 	$(install-file)
 
-ifeq ($(INCLUDE_SA), true)
-# The Serviceability Agent is built in the Hotspot workspace.
-# It contains two files:
-#  - sa-jdi.jar:  This goes into the same dir as tools.jar.
-#  - a shared library:  sawindbg.dll on windows / libproc.sa on unix
-#		        This goes into the same dir as the other
-#			shared libs, eg. libjdwp.so.
-$(LIBDIR)/sa-jdi.jar: $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar
-	$(install-import-file)
-
-$(LIB_LOCATION)/$(SALIB_NAME): $(HOTSPOT_SALIB_PATH)/$(SALIB_NAME)
-	$(install-import-file)
-
-ifeq ($(PLATFORM), windows)
-$(LIB_LOCATION)/$(SAPDB_NAME): $(HOTSPOT_SALIB_PATH)/$(SAPDB_NAME)
-	$(install-import-file)
-
-$(LIB_LOCATION)/$(SAMAP_NAME): $(HOTSPOT_SALIB_PATH)/$(SAMAP_NAME)
-	$(install-import-file)
-endif # windows
-endif # INCLUDE_SA
-
 #
 # Specific to OpenJDK building
 #
@@ -288,7 +253,7 @@
 
 $(LIBDIR)/jce.jar: \
 	    $(BUILDDIR)/closed/tools/crypto/jce/jce.jar
-	$(install-file)
+	$(install-non-module-file)
 $(LIBDIR)/security/US_export_policy.jar: \
 	    $(BUILDDIR)/closed/tools/crypto/jce/US_export_policy.jar
 	$(install-file)
@@ -310,46 +275,6 @@
 	    $(CLASSSHARINGDATA_DIR)/classlist.$(PLATFORM) $@.temp
 	$(MV) $@.temp $@
 
-ifndef OPENJDK
-
-# Lucida font files are not included in the OpenJDK distribution.
-# Get names of font files
-include FILES.gmk
-
-# Copy font files into OUTPUTDIR area
-
-FONTFILES = $(SHARED_FONTFILES)
-FONTSDIR  = $(LIBDIR)/fonts
-FONTSDIRFILE  = $(FONTSDIR)/fonts.dir
-INTERNAL_IMPORT_LIST += $(FONTFILES) 
-
-ifneq ($(PLATFORM), windows)
-  INTERNAL_IMPORT_LIST += $(FONTSDIRFILE)
-endif
-
-$(LIBDIR)/fonts/%.ttf: $(CLOSED_SRC)/share/lib/fonts/%.ttf
-	$(install-file)
-
-$(FONTSDIRFILE): $(PLATFORM_SRC)/classes/sun/awt/motif/java.fonts.dir
-	$(install-file)
-
-ifeq ($(PLATFORM), linux)
-
-# The oblique fonts are only needed/wanted on Linux.
-
-OBLFONTSDIR  = $(LIBDIR)/oblique-fonts
-OBLFONTSDIRFILE	 = $(OBLFONTSDIR)/fonts.dir
-INTERNAL_IMPORT_LIST += $(OBLIQUE_FONTFILES) $(OBLFONTSDIRFILE)
-
-$(LIBDIR)/oblique-fonts/%.ttf: $(CLOSED_SRC)/share/lib/fonts/oblique/%.ttf
-	$(install-file)
-
-$(OBLFONTSDIRFILE): $(PLATFORM_SRC)/classes/sun/awt/motif/java.oblique-fonts.dir
-	$(install-file)
-
-endif # linux
-endif # !OPENJDK
-
 # Import internal files (ones that are stashed in this source tree)
 import_internal_files : $(INTERNAL_IMPORT_LIST)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/java/redist/fonts/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,111 @@
+#
+# Copyright 2009 Sun Microsystems, Inc.  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.  Sun designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+BUILDDIR = ../../..
+MODULE   = font
+PRODUCT  = java
+include $(BUILDDIR)/common/Defs.gmk
+
+
+#
+# List of lucida font files that we redistribute.
+#
+
+SHARED_FONTFILES =					\
+	$(LIBDIR)/fonts/LucidaTypewriterRegular.ttf	\
+	$(LIBDIR)/fonts/LucidaTypewriterBold.ttf        \
+	$(LIBDIR)/fonts/LucidaBrightRegular.ttf         \
+	$(LIBDIR)/fonts/LucidaBrightDemiBold.ttf        \
+	$(LIBDIR)/fonts/LucidaBrightItalic.ttf          \
+	$(LIBDIR)/fonts/LucidaBrightDemiItalic.ttf	\
+	$(LIBDIR)/fonts/LucidaSansRegular.ttf       	\
+	$(LIBDIR)/fonts/LucidaSansDemiBold.ttf       	\
+
+ifeq ($(PLATFORM), linux)
+
+# The oblique versions of the font are derived from the base versions
+# and since 2D can do this derivation on the fly at run time there is no
+# need to redistribute the fonts. An exception to this is on Linux.
+# The reason is that the Lucidas are specified in the font.properties files
+# on Linux, and so AWT/Motif components expect to be able to ask the Xserver
+# for these oblique fonts, but the Xserver cannot do the same derivation as
+# 2D can.
+
+OBLIQUE_FONTFILES =                                             \
+	$(LIBDIR)/oblique-fonts/LucidaTypewriterOblique.ttf     \
+	$(LIBDIR)/oblique-fonts/LucidaTypewriterBoldOblique.ttf \
+	$(LIBDIR)/oblique-fonts/LucidaSansOblique.ttf       	\
+	$(LIBDIR)/oblique-fonts/LucidaSansDemiOblique.ttf       \
+
+endif
+
+ifndef OPENJDK
+
+# Lucida font files are not included in the OpenJDK distribution.
+# Get names of font files
+
+# Copy font files into OUTPUTDIR area
+
+FONTFILES = $(SHARED_FONTFILES)
+FONTSDIR  = $(LIBDIR)/fonts
+FONTSDIRFILE  = $(FONTSDIR)/fonts.dir
+INTERNAL_IMPORT_LIST = $(FONTFILES) 
+
+ifneq ($(PLATFORM), windows)
+  INTERNAL_IMPORT_LIST += $(FONTSDIRFILE)
+endif
+
+$(LIBDIR)/fonts/%.ttf: $(CLOSED_SRC)/share/lib/fonts/%.ttf
+	$(install-file)
+
+$(FONTSDIRFILE): $(PLATFORM_SRC)/classes/sun/awt/motif/java.fonts.dir
+	$(install-file)
+
+ifeq ($(PLATFORM), linux)
+
+# The oblique fonts are only needed/wanted on Linux.
+
+OBLFONTSDIR  = $(LIBDIR)/oblique-fonts
+OBLFONTSDIRFILE	 = $(OBLFONTSDIR)/fonts.dir
+INTERNAL_IMPORT_LIST += $(OBLIQUE_FONTFILES) $(OBLFONTSDIRFILE)
+
+$(LIBDIR)/oblique-fonts/%.ttf: $(CLOSED_SRC)/share/lib/fonts/oblique/%.ttf
+	$(install-file)
+
+$(OBLFONTSDIRFILE): $(PLATFORM_SRC)/classes/sun/awt/motif/java.oblique-fonts.dir
+	$(install-file)
+
+endif # linux
+
+all build : $(INTERNAL_IMPORT_LIST)
+
+clean clobber::
+	$(RM) $(INTERNAL_IMPORT_LIST)
+
+else 
+
+all build clean clobber :
+
+endif # !OPENJDK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/java/redist/sajdi/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,87 @@
+#
+# Copyright 1997-2009 Sun Microsystems, Inc.  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.  Sun designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+BUILDDIR = ../../..
+MODULE   = sajdi
+PRODUCT  = java
+include $(BUILDDIR)/common/Defs.gmk
+
+ifeq ($(PLATFORM), windows)
+  LIB_LOCATION = $(BINDIR)
+else
+  LIB_LOCATION = $(LIBDIR)/$(LIBARCH)
+endif
+
+# INCLUDE_SA is false on platforms where SA is not supported.
+# On platforms where it is supported, we want to allow it to
+# not be present, at least temporarily.  So,
+# if the SA files (well, just sa-jdi.jar) do not exist
+# in the HOTSPOT_IMPORT_PATH, then we won't build SA.
+SA_EXISTS := $(shell if [ -r $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar ] ; then \
+                          $(ECHO) true; \
+                        else \
+                          $(ECHO) false; \
+                        fi)
+
+ifeq ($(SA_EXISTS), false)
+  INCLUDE_SA := false
+endif
+
+IMPORT_LIST =
+ifeq ($(INCLUDE_SA), true)
+  IMPORT_LIST += $(LIBDIR)/sa-jdi.jar \
+                 $(LIB_LOCATION)/$(SALIB_NAME)
+  ifeq ($(PLATFORM), windows)
+    IMPORT_LIST += $(LIB_LOCATION)/$(SAMAP_NAME) \
+                   $(LIB_LOCATION)/$(SAPDB_NAME)
+  endif
+endif # INCLUDE_SA
+
+
+ifeq ($(INCLUDE_SA), true)
+# The Serviceability Agent is built in the Hotspot workspace.
+# It contains two files:
+#  - sa-jdi.jar:  This goes into the same dir as tools.jar.
+#  - a shared library:  sawindbg.dll on windows / libproc.sa on unix
+#		        This goes into the same dir as the other
+#			shared libs, eg. libjdwp.so.
+$(LIBDIR)/sa-jdi.jar: $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar
+	$(install-importonly-file)
+
+$(LIB_LOCATION)/$(SALIB_NAME): $(HOTSPOT_SALIB_PATH)/$(SALIB_NAME)
+	$(install-import-file)
+
+ifeq ($(PLATFORM), windows)
+$(LIB_LOCATION)/$(SAPDB_NAME): $(HOTSPOT_SALIB_PATH)/$(SAPDB_NAME)
+	$(install-import-file)
+
+$(LIB_LOCATION)/$(SAMAP_NAME): $(HOTSPOT_SALIB_PATH)/$(SAMAP_NAME)
+	$(install-import-file)
+endif # windows
+endif # INCLUDE_SA
+
+all: $(IMPORT_LIST)
+
+clean clobber::
--- a/jdk/make/java/security/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/security/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = base
 PACKAGE = java.security
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
@@ -38,11 +39,9 @@
 #
 
 PROPS_SRC   = $(TOPDIR)/src/share/lib/security/java.security
-SUNPKCS11   =
 
 ifeq ($(PLATFORM), solaris)
 PROPS_SRC   = $(TOPDIR)/src/share/lib/security/java.security-solaris
-SUNPKCS11   = sunpkcs11
 
 else # PLATFORM
 
@@ -57,9 +56,6 @@
 
 PROPS_BUILD = $(LIBDIR)/security/java.security
 
-SUNPKCS11_SRC   = $(TOPDIR)/src/share/lib/security/sunpkcs11-solaris.cfg
-SUNPKCS11_BUILD = $(LIBDIR)/security/sunpkcs11-solaris.cfg
-
 POLICY_SRC =	$(TOPDIR)/src/share/lib/security/java.policy
 POLICY_BUILD = $(LIBDIR)/security/java.policy
 
@@ -73,14 +69,12 @@
 #
 include $(BUILDDIR)/common/Rules.gmk
 
-build: properties $(SUNPKCS11) policy cacerts
+build: properties policy cacerts
 
 install: all
 
 properties: classes  $(PROPS_BUILD)
 
-sunpkcs11: classes $(SUNPKCS11_BUILD)
-
 policy: classes  $(POLICY_BUILD)
 
 cacerts: classes $(CACERTS_BUILD)
@@ -88,9 +82,6 @@
 $(PROPS_BUILD): $(PROPS_SRC)
 	$(install-file)
 
-$(SUNPKCS11_BUILD): $(SUNPKCS11_SRC)
-	$(install-file)
-
 $(POLICY_BUILD): $(POLICY_SRC)
 	$(install-file)
 
@@ -99,7 +90,7 @@
 
 clean clobber:: .delete.classlist
 	$(RM) -r $(CLASSBINDIR)/java/security
-	$(RM) $(PROPS_BUILD) $(POLICY_BUILD) $(CACERTS_BUILD) $(SUNPKCS11_BUILD)
+	$(RM) $(PROPS_BUILD) $(POLICY_BUILD) $(CACERTS_BUILD)
 
 # Additional Rule for building sun.security.util
 $(CLASSBINDIR)/%.class: $(SHARE_SRC)/sun/%.java
--- a/jdk/make/java/sql/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/sql/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = jdbc-base
 PACKAGE = java.sql
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/text/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/text/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,7 +24,7 @@
 #
 
 BUILDDIR = ../..
-
+MODULE  = base
 PACKAGE = java.text
 PRODUCT = sun
 
--- a/jdk/make/java/verify/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/verify/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = base
 PRODUCT = java
 LIBRARY = verify
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/java/zip/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/java/zip/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -25,6 +25,7 @@
 
 
 BUILDDIR = ../..
+MODULE  = base
 PACKAGE = java.util.zip
 LIBRARY = zip
 PRODUCT = sun
--- a/jdk/make/javax/crypto/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/javax/crypto/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -108,6 +108,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = base
 PACKAGE = javax.crypto
 PRODUCT = sun
 
@@ -293,7 +294,7 @@
 
 $(UNSIGNED_POLICY_BUILDDIR)/limited/US_export_policy.jar:		\
 	    $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar
-	$(install-file)
+	$(install-non-module-file)
 
 $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar:			\
 	    policy/limited/default_local.policy				\
@@ -414,7 +415,7 @@
 else
 $(JAR_DESTFILE): $(SIGNED_DIR)/jce.jar
 endif
-	$(install-file)
+	$(install-non-module-file)
 
 #
 # Install the appropriate policy file, depending on the type of build.
@@ -425,7 +426,7 @@
 INSTALL_POLICYDIR = $(SIGNED_POLICY_BUILDDIR)
 endif
 
-install-limited: \
+install-limited-jars: \
 	    $(INSTALL_POLICYDIR)/limited/US_export_policy.jar	\
 	    $(INSTALL_POLICYDIR)/limited/local_policy.jar
 	$(MKDIR) -p $(POLICY_DESTDIR)
@@ -433,24 +434,28 @@
 	    $(POLICY_DESTDIR)/US_export_policy.jar		\
 	    $(POLICY_DESTDIR)/local_policy.jar
 	$(CP) $^ $(POLICY_DESTDIR)
+
+install-limited: install-limited-jars install-module-files
 ifndef OPENJDK
 	$(release-warning)
 endif
 
-install-unlimited: \
+install-unlimited-jars: \
 	    $(INSTALL_POLICYDIR)/unlimited/US_export_policy.jar	\
-	    $(INSTALL_POLICYDIR)/unlimited/local_policy.jar
+	    $(INSTALL_POLICYDIR)/unlimited/local_policy.jar 
 	$(MKDIR) -p $(POLICY_DESTDIR)
 	$(RM) \
 	    $(POLICY_DESTDIR)/US_export_policy.jar		\
 	    $(POLICY_DESTDIR)/local_policy.jar
 	$(CP) $^ $(POLICY_DESTDIR)
+
+install-unlimited: install-unlimited-jars install-module-files
 ifndef OPENJDK
 	$(release-warning)
 endif
 
 ifndef OPENJDK
-install-prebuilt:
+install-prebuilt-jars:
 	@$(ECHO) "\n>>>Installing prebuilt JCE framework..."
 	$(RM) $(JAR_DESTFILE) \
 	    $(POLICY_DESTDIR)/US_export_policy.jar \
@@ -460,8 +465,16 @@
 	    $(PREBUILT_DIR)/jce/US_export_policy.jar \
 	    $(PREBUILT_DIR)/jce/local_policy.jar \
 	    $(POLICY_DESTDIR)
+
+install-prebuilt: install-prebuilt-jars install-module-files
 endif
 
+install-module-files: \
+	   $(POLICY_DESTDIR)/US_export_policy.jar \
+	   $(POLICY_DESTDIR)/local_policy.jar
+
+$(POLICY_DESTDIR)/%.jar :
+	$(install-module-file)
 
 # =====================================================
 # Support routines.
--- a/jdk/make/javax/imageio/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/javax/imageio/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = imageio
 PACKAGE = javax.imageio
 PRODUCT = jiio
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/javax/print/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/javax/print/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = print
 PACKAGE = javax.print
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/javax/sound/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/javax/sound/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -26,6 +26,7 @@
 # WARNING: Make sure the OPENJDK plugs are up-to-date, see make/common/internal/BinaryPlugs.gmk
 
 BUILDDIR = ../..
+MODULE  = sound
 PACKAGE = javax.sound
 LIBRARY = jsound
 PRODUCT = sun
--- a/jdk/make/javax/sound/jsoundalsa/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/javax/sound/jsoundalsa/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = sound
 PACKAGE = javax.sound
 LIBRARY = jsoundalsa
 PRODUCT = sun
--- a/jdk/make/javax/sound/jsoundds/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/javax/sound/jsoundds/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = sound
 PACKAGE = javax.sound
 LIBRARY = jsoundds
 PRODUCT = sun
--- a/jdk/make/javax/sql/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/javax/sql/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = jdbc-enterprise
 PACKAGE = javax.sql
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/javax/swing/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/javax/swing/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR  = ../..
+MODULE    = swing
 PACKAGE   = javax.swing
 PRODUCT   = com
 SWING_SRC = $(SHARE_SRC)/classes/javax/swing
--- a/jdk/make/javax/swing/beaninfo/SwingBeans.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/javax/swing/beaninfo/SwingBeans.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -25,7 +25,7 @@
 
 #
 # Makefile to build the BeanInfo generation tool (ie, a doclet), and
-# then the beaninfo itself.  Swing versions prior to 1.2 is no longer
+# then the beaninfo itself.  Swing versions prior to 1.2 are no longer
 # built.
 #
 # This makefile could be a lot simpler if we made it more regular.
@@ -44,13 +44,12 @@
 	$(MAKE) DEBUG_FLAG=true make-swing-beans
 
 
-LOCAL_JAVADOC   = $(JAVADOC_CMD) $(JAVADOCFLAGS)
 # get the absolute path to the jar command.
 PREFIX          = 1.2
-JAVADOCFLAGS    = $(NO_PROPRIETARY_API_WARNINGS) $(LANGUAGE_VERSION)
+JAVADOCFLAGS    += $(NO_PROPRIETARY_API_WARNINGS) $(LANGUAGE_VERSION)
 SWINGPKG        = javax/swing
 LOCAL_JAVAC_FLAGS = $(OTHER_JAVACFLAGS)
-# since LOCAL_JAVADOC runs on ALT_BOOTDIR, the doclet and all its classes must be compiled to match
+# since JAVADOC_CMD runs on ALT_BOOTDIR, the doclet and all its classes must be compiled to match
 DOCLET_JAVAC_FLAGS = -source 6 -target 6
 
 include FILES.gmk
@@ -114,7 +113,7 @@
 
 .javadoc.beanlist:
 	if [ -s $(TEMPDIR)/.beans.list ]; \
-	then $(LOCAL_JAVADOC) $(DOCLETFLAGS) -x $(DEBUG_FLAG) -d $(BEANSRCDIR) -t $(DOCLETSRC)/SwingBeanInfo.template -docletpath $(DOCLETDST) \
+	then $(JAVADOC_CMD) $(DOCLETFLAGS) -x $(DEBUG_FLAG) -d $(BEANSRCDIR) -t $(DOCLETSRC)/SwingBeanInfo.template -docletpath $(DOCLETDST) \
 	    $(shell if [ -s $(TEMPDIR)/.beans.list ]; then $(CAT) $(TEMPDIR)/.beans.list; fi); \
 	fi
 	@$(java-vm-cleanup)
--- a/jdk/make/javax/swing/plaf/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/javax/swing/plaf/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR  = ../../..
+MODULE    = swing
 PACKAGE   = javax.swing.plaf
 PRODUCT   = com
 SWING_SRC = $(SHARE_SRC)/classes/javax/swing
--- a/jdk/make/jpda/back/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/jpda/back/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = debugging
 LIBRARY = jdwp
 PRODUCT = jpda
 
--- a/jdk/make/jpda/transport/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/jpda/transport/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = debugging
 PRODUCT = jpda
 include $(BUILDDIR)/common/Defs.gmk
 
--- a/jdk/make/jpda/transport/shmem/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/jpda/transport/shmem/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE   = debugging
 LIBRARY  = dt_shmem
 PRODUCT = jbug
 
--- a/jdk/make/jpda/transport/socket/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/jpda/transport/socket/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = debugging
 LIBRARY = dt_socket
 PRODUCT = jbug
 
--- a/jdk/make/jpda/tty/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/jpda/tty/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = jdb
 PACKAGE = com.sun.tools.example.debug.tty
 PRODUCT = jpda
 PROGRAM = jdb
--- a/jdk/make/launchers/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/launchers/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,33 +28,23 @@
 #
 
 BUILDDIR = ..
+MODULE  = tools
 PACKAGE = launchers
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
 
-# Run MAKE $@ for a launcher: 
+# Run MAKE $@ for a launcher for the corba module:
 #   $(call make-launcher, name, mainclass, java-args, main-args)
-define make-launcher
+define make-corba-launcher
+$(CD) $(BUILDDIR)/launchers && \
 $(MAKE) -f Makefile.launcher \
-	PROGRAM=$(strip $1) \
-	MAIN_CLASS=$(strip $2) \
-	MAIN_JAVA_ARGS="$(strip $3)" \
-	MAIN_ARGS="$(strip $4)" $@
+        MODULE=corba \
+        PROGRAM=$(strip $1) \
+        MAIN_CLASS=$(strip $2) \
+        MAIN_JAVA_ARGS="$(strip $3)" \
+        MAIN_ARGS="$(strip $4)"
 endef
 
-# Run MAKE $@ for all launchers
-ifeq ($(PLATFORM),windows)
-# Run MAKE $@ for all platform specific launchers
-define make-platform-specific-launchers
-$(call make-launcher, kinit, sun.security.krb5.internal.tools.Kinit, , )
-$(call make-launcher, klist, sun.security.krb5.internal.tools.Klist, , )
-$(call make-launcher, ktab, sun.security.krb5.internal.tools.Ktab, , )
-endef
-else
-# Run MAKE $@ for all platform specific launchers
-define make-platform-specific-launchers
-endef
-endif
 # Run MAKE $@ for all generic launchers
 define make-all-launchers
 $(call make-launcher, appletviewer, sun.applet.Main, , )
@@ -85,36 +75,29 @@
   -J-Dsun.jvm.hotspot.debugger.useWindbgDebugger, )
 $(call make-launcher, jstat, sun.tools.jstat.Jstat, , )
 $(call make-launcher, jstatd, sun.tools.jstatd.Jstatd, , )
-$(call make-launcher, keytool, sun.security.tools.KeyTool, , )
 $(call make-launcher, native2ascii, sun.tools.native2ascii.Main, , )
-$(call make-launcher, orbd, com.sun.corba.se.impl.activation.ORBD, \
+$(call make-launcher, rmic, sun.rmi.rmic.Main, , )
+$(call make-launcher, schemagen, com.sun.tools.internal.jxc.SchemaGenerator, , )
+$(call make-launcher, serialver, sun.tools.serialver.SerialVer, , )
+$(call make-launcher, xjc, com.sun.tools.internal.xjc.Driver, , )
+$(call make-launcher, wsgen, com.sun.tools.internal.ws.WsGen, , )
+$(call make-launcher, wsimport, com.sun.tools.internal.ws.WsImport, , )
+$(call make-corba-launcher, orbd, com.sun.corba.se.impl.activation.ORBD, \
   -J-Dcom.sun.CORBA.activation.DbDir=./orb.db \
   -J-Dcom.sun.CORBA.activation.Port=1049 \
   -J-Dcom.sun.CORBA.POA.ORBServerId=1, )
-$(call make-launcher, pack200, com.sun.java.util.jar.pack.Driver, , --pack)
-$(call make-launcher, policytool, sun.security.tools.PolicyTool, , )
-$(call make-launcher, rmic, sun.rmi.rmic.Main, , )
-$(call make-launcher, rmid, sun.rmi.server.Activation, , )
-$(call make-launcher, rmiregistry, sun.rmi.registry.RegistryImpl, , )
-$(call make-launcher, schemagen, com.sun.tools.internal.jxc.SchemaGenerator, , )
-$(call make-launcher, serialver, sun.tools.serialver.SerialVer, , )
-$(call make-launcher, servertool, com.sun.corba.se.impl.activation.ServerTool, , )
-$(call make-launcher, tnameserv, com.sun.corba.se.impl.naming.cosnaming.TransientNameServer, \
+$(call make-corba-launcher, servertool, com.sun.corba.se.impl.activation.ServerTool, , )
+$(call make-corba-launcher, tnameserv, com.sun.corba.se.impl.naming.cosnaming.TransientNameServer, \
   -J-Dcom.sun.CORBA.activation.DbDir=./orb.db \
   -J-Djava.util.logging.LoggingPermission=contol \
   -J-Dcom.sun.CORBA.POA.ORBServerId=1, )
-$(call make-launcher, wsgen, com.sun.tools.internal.ws.WsGen, , )
-$(call make-launcher, wsimport, com.sun.tools.internal.ws.WsImport, , )
-$(call make-launcher, xjc, com.sun.tools.internal.xjc.Driver, , )
 endef
 
 build:
 	$(make-all-launchers)
-	$(make-platform-specific-launchers)
 
 clean clobber::
 	$(make-all-launchers)
-	$(make-platform-specific-launchers)
 
 include $(BUILDDIR)/common/Rules.gmk
 
--- a/jdk/make/mkdemo/jvmti/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mkdemo/jvmti/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = demos
 PRODUCT = demos
 include $(BUILDDIR)/common/Defs.gmk
 
--- a/jdk/make/mkdemo/management/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mkdemo/management/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = demos
 PRODUCT = demos
 include $(BUILDDIR)/common/Defs.gmk
 
--- a/jdk/make/mksample/dtrace/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mksample/dtrace/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 
 BUILDDIR = ../..
 
+MODULE  = samples
 PRODUCT = java
 
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/jmx/jmx-scandir/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mksample/jmx/jmx-scandir/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 
 BUILDDIR = ../../..
 
+MODULE  = samples
 PRODUCT = java
 
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/nbproject/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mksample/nbproject/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 
 BUILDDIR = ../..
 
+MODULE  = samples
 PRODUCT = java
 
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/nio/file/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mksample/nio/file/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 
 BUILDDIR = ../../..
 
+MODULE  = samples
 PRODUCT = java
 
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/nio/multicast/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mksample/nio/multicast/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 
 BUILDDIR = ../../..
 
+MODULE  = samples
 PRODUCT = java
 
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/nio/server/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mksample/nio/server/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 
 BUILDDIR = ../../..
 
+MODULE  = samples
 PRODUCT = java
 
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/scripting/scriptpad/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mksample/scripting/scriptpad/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 
 BUILDDIR = ../../..
 
+MODULE  = samples
 PRODUCT = java
 
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/webservices/EbayClient/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mksample/webservices/EbayClient/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 
 BUILDDIR = ../../..
 
+MODULE  = samples
 PRODUCT = java
 
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/mksample/webservices/EbayServer/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/mksample/webservices/EbayServer/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 
 BUILDDIR = ../../..
 
+MODULE  = samples
 PRODUCT = java
 
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/modules/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/modules/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -23,115 +23,106 @@
 # have any questions.
 #
 
-#
-# Modularizing the JDK
-#
-
 BUILDDIR = ..
 include $(BUILDDIR)/common/Defs.gmk
 
-CLASSANALYZER_JAR=$(BUILDTOOLJARDIR)/classanalyzer.jar
-JAVA_FLAGS=$(JAVA_TOOLS_FLAGS) -Xbootclasspath:$(CLASSBINDIR)
+#
+# Modularizing the JDK
+# - Post jdk build process until the source tree is restructured
+#   for modules build
+# - <outputdir>/modules/<module> will be created for each module.
+#
+# Steps:
+# 0. During jdk build before this makefile is invoked, classes, 
+#    resource files, and other non-class files such as native libraries,
+#    properties file, images, etc are created.
+#
+#    Non-class files are copied to <outputdir>/tmp/modules/<MODULE>
+#    directory in this step to prepare for the post-build modularization. 
+#
+#    The MODULE variable defined in other makefiles specifies 
+#    the lowest-level module that the non-class files belong to.
+#    The name might or might not be the same as the name of the modules 
+#    in the resulting <outputdir>/modules directory.
+#    
+# 1. Unpack all jars in the <builddir>/lib directory to a temporary 
+#    location (<outputdir>/tmp/modules/classes) to prepare for modules
+#    creation.
+#
+# 2. Run ClassAnalyzer tool to analyze all jdk classes and generate
+#    class list for all modules and also perform dependency analysis. 
+#
+#    Input configuration files :-
+#
+#    modules.config : defines the low-level modules and specifies 
+#       what classes and resource files each module includes.
+#    modules.group  : defines the module groups and its members.
+#    jdk7.depconfig : lists the dynamic dependencies including
+#       use of reflection Class.forName and JNI FindClass and
+#       service provider.
+#    optional.depconfig : lists the optional dependencies
+#
+# 3. Create one directory for each module (<outputdir>/modules/<module>)
+#    based on the output files from (2).
+#       
+#    modules.list lists the modules to be created for the modules
+#    build and its members. For each module (m) in modules.list,
+#    a. create $m/lib/$m.jar with all classes and resource files
+#       listed in $m.classlist and $m.resources respectively.
+#    b. copy all non-class files from its members to 
+#       <outputdir>/modules/$m.
 
-MODULE_LIB = $(ABS_OUTPUTDIR)/modules
+
 MAINMANIFEST=$(JDK_TOPDIR)/make/tools/manifest.mf
 MODULE_JAR_MANIFEST_FILE=$(ABS_TEMPDIR)/manifest.tmp
 
-TMP=$(ABS_TEMPDIR)/modules
-MODULE_CLASSLIST = $(TMP)/classlist
-MODULE_CLASSES = $(TMP)/classes
-MODULE_LIST = $(MODULE_CLASSLIST)/modules.list
-
-# Modules in the modules/ext directory
-EXT_MODULES = localedata security-sunec security-sunjce
-
-# Build PKCS#11 on all platforms except 64-bit Windows.
-# We exclude windows-amd64 because we don't have any
-# 64-bit PKCS#11 implementations to test with on that platform.
-PKCS11 = security-sunpkcs11
-ifeq ($(ARCH_DATA_MODEL), 64)
-  ifeq ($(PLATFORM), windows)
-    PKCS11 =
-  endif
-endif
-
-EXT_MODULES += $(PKCS11)
-
-# Build Microsoft CryptoAPI provider only on (non-64-bit) Windows platform.
-ifeq ($(PLATFORM), windows)
-  ifneq ($(ARCH_DATA_MODEL), 64)
-    EXT_MODULES += security-sunmscapi
-  endif
-endif
-
-
-JDK_MODULES = tools
-
-SUBDIRS = tools
-all build clean clobber::
-	$(SUBDIRS-loop)
+TMP = $(ABS_MODULES_TEMPDIR)
+MODULE_CLASSLIST = $(ABS_MODULES_TEMPDIR)/classlist
+MODULE_CLASSES = $(ABS_MODULES_TEMPDIR)/classes
+MODULES_LIST = $(MODULE_CLASSLIST)/modules.list
 
 all:: unpack-jars gen-classlist modularize
 
-$(CLASSANALYZER_JAR):
-	$(CD) tools && $(MAKE) all
-
-JAR_LIST := $(shell $(FIND) $(ABS_OUTPUTDIR)/lib -name \*.jar -depth) 
+JAR_LIST := $(shell $(FIND) $(ABS_OUTPUTDIR)/lib -name \*.jar -print) 
 unpack-jars:
+	@$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."
 	$(RM) -rf $(MODULE_CLASSES)
 	$(MKDIR) -p $(MODULE_CLASSES)
 	$(CP) -rf $(CLASSBINDIR)/* $(MODULE_CLASSES)
-	for jf in  $(JAR_LIST) ; do \
+	@for jf in  $(JAR_LIST) ; do \
 	   $(CD) $(MODULE_CLASSES) && $(BOOT_JAR_CMD) xf $$jf $(BOOT_JAR_JFLAGS);\
 	done
-
-gen-classlist: $(CLASSANALYZER_JAR)
-	@$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."
-	@$(RM) -rf $(MODULE_CLASSLIST)
-	@$(MKDIR) -p $(MODULE_CLASSLIST)
+	@$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..."
 
-	@# Use java in the default tool directory.
-	@# OUTPUTDIR for solaris 64-bit doesn't have the tools.
-	$(JAVA_TOOLS_DIR)/java $(JAVA_FLAGS) \
-		-Dclassanalyzer.debug \
-		-jar $(CLASSANALYZER_JAR) \
-		-jdkhome $(OUTPUTDIR) \
-	        -config modules.config \
-	        -config modules.group \
-		-depconfig jdk7.depconfig \
-		-depconfig optional.depconfig \
-		-showdynamic \
-		-output $(MODULE_CLASSLIST)
-	@$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..."
+gen-classlist:
+	$(CD) tools && $(MAKE) all
 
 modularize: $(MODULE_JAR_MANIFEST_FILE)
 	@$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."
-	@$(RM) -rf $(MODULE_LIB)
-	@$(MKDIR) -p $(MODULE_LIB)/lib
-	@$(MKDIR) -p $(MODULE_LIB)/jre/lib/ext
+	@$(RM) -rf $(MODULES_DIR)
 
-	@# create modules
-	for m in `$(NAWK) '{print $$1}' $(MODULE_LIST)` ; do \
+	@# create jar file for modules and
+	@# copy other files from all members of this module 
+	for m in `$(NAWK) '{print $$1}' $(MODULES_LIST)` ; do \
    	   $(ECHO) "Creating module $$m" ; \
    	   $(SED) -e 's%\\%\/%g' < $(MODULE_CLASSLIST)/$$m.classlist > $(TMP)/tmp.cf ; \
 	   if [ -f $(MODULE_CLASSLIST)/$$m.resources ] ; then \
    	       $(SED) -e 's%\\%\/%g' < $(MODULE_CLASSLIST)/$$m.resources >> $(TMP)/tmp.cf ; \
            fi ; \
+           $(MKDIR) -p $(ABS_MODULES_DIR)/$$m/lib; \
 	   $(CD) $(MODULE_CLASSES) && \
                $(BOOT_JAR_CMD) c0mf $(MODULE_JAR_MANIFEST_FILE) \
-		   $(MODULE_LIB)/$$m.jar \
-		   @$(TMP)/tmp.cf \
-                   $(BOOT_JAR_JFLAGS) ; \
-	done
+		   $(ABS_MODULES_DIR)/$$m/lib/$$m.jar \
+	           @$(TMP)/tmp.cf \
+                   $(BOOT_JAR_JFLAGS); \
+	   for s in `$(GREP) "^$$m" $(MODULES_LIST)` ; do \
+               if [ -d $(TMP)/$$s ] ; then \
+               	   $(CP) -rf $(TMP)/$$s/*  $(ABS_MODULES_DIR)/$$m; \
+		   $(RM) -rf $(ABS_MODULES_DIR)/$$m/classes; \
+	       fi \
+	   done \
+        done
 	@$(CD) $(MODULE_CLASSES) && $(java-vm-cleanup)
-	@# move modules to lib, jre/lib, or jre/lib/ext
-	for m in $(EXT_MODULES) ; do \
-	   $(MV) $(MODULE_LIB)/$$m.jar $(MODULE_LIB)/jre/lib/ext ; \
-	done
-	for m in $(JDK_MODULES) ; do \
-	   $(MV) $(MODULE_LIB)/$$m.jar $(MODULE_LIB)/lib ; \
-	done
-	$(MV) $(MODULE_LIB)/*.jar $(MODULE_LIB)/jre/lib
 	@$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..."
 
 $(MODULE_JAR_MANIFEST_FILE):
@@ -139,7 +130,5 @@
 
 clean clobber::
 	$(RM) -rf $(MODULE_CLASSLIST)
-	$(RM) -rf $(MODULE_LIB)
-	$(RM) -f $(MODULE_JAR_MANIFEST_FILE)
-	$(RM) -f $(CLASSANALYZER_JAR)
-
+	$(RM) -rf $(MODULES_DIR)
+	$(RM) $(MODULE_JAR_MANIFEST_FILE)
--- a/jdk/make/modules/modules.config	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/modules/modules.config	Fri Feb 05 12:26:35 2010 -0800
@@ -372,15 +372,19 @@
 
 /**************************************************************************/
 
+module tracing {
+    // tracing
+    include com.sun.tracing.**, sun.tracing.**;
+}
+
 module instrument {
     // java.lang.instrument
     include java.lang.instrument.*, sun.instrument.*;
 
-    // tracing
-    include com.sun.tracing.**, sun.tracing.**;
-
     // HPROF support
     include com.sun.demo.jvmti.hprof.*;
+
+    include tracing;
 }
 
 /**************************************************************************/
@@ -391,15 +395,17 @@
             sun.rmi.server.InactiveGroupException;
 }
 
+module rmic {
+    // rmic is included in tools
+    include sun.rmi.rmic.**;
+}
+
 module rmi {
     include java.rmi.**, sun.rmi.**, com.sun.rmi.**;
 
     // SSL factories are in rmi
     include javax.rmi.ssl.**;
 
-    // rmic is in tools
-    exclude sun.rmi.rmic.**;
-
     // supporting classes in sun.misc and dependencies
     include sun.misc.GC;
 }
@@ -468,9 +474,14 @@
     include javax.smartcardio.**, sun.security.smartcardio.**;
 }
 
+module security-auth {
+    include com.sun.security.auth.**, sun.security.util.AuthResources_*;
+}
+
 module security-misc {
-    include com.sun.security.auth.**, sun.security.util.AuthResources_*,
-            sun.security.pkcs.*,
+    include security-auth;
+
+    include sun.security.pkcs.*,
             sun.security.pkcs12.*;
 
     // this class is a candidate to be removed.
@@ -500,9 +511,8 @@
 }
 
 module jndi-dns {
+    include net-dns;
     include com.sun.jndi.dns.**, com.sun.jndi.url.dns.**;
-    include sun.net.dns.**;                 // to access DNS config.
-    include sun.net.spi.nameservice.dns.**; // for DNS-only name service.
 }
 
 module jndi-cosnaming {
@@ -677,31 +687,69 @@
 
 /**************************************************************************/
 
-module client {
+module applet {
     include java.applet.**,
-            java.awt.**,
-            javax.accessibility.*,
-            javax.imageio.**,
-            javax.print.**,
-            javax.sound.**,
-            javax.swing.**,
-            sun.applet.**,
-            sun.audio.**,
+            sun.applet.**;
+}
+
+module awt {
+    include java.awt.**,
             sun.awt.**,
-            sun.dc.**,
-            sun.font.**,
+            com.sun.awt.**;
+}
+
+module font {
+    include sun.font.**;
+}
+
+module imageio {
+    include javax.imageio.**,
+            com.sun.imageio.**;
+}
+
+module java2d {
+    include sun.dc.**,
             sun.java2d.**,
-            sun.print.**,
+            com.sun.image.**;
+}
+
+module media {
+    include com.sun.media.**;
+}
+
+module print {
+    include javax.print.**,
+            sun.print.**;
+}
+
+module sound {
+    include javax.sound.**;
+}
+
+module swing {
+    include javax.swing.**,
             sun.swing.**,
-            com.sun.accessibility.**,
-            com.sun.awt.**,
-            com.sun.image.**,
-            com.sun.imageio.**,
-            com.sun.java.swing.*,       // sajdi also contains classes in a subpackage;
-                                        // so use '*' instead of '**' 
+            // sajdi also contains classes in subpackages of com.sun.java.swing;
+            // so use '*' instead of '**' 
+            com.sun.java.swing.*,
             com.sun.java.swing.plaf.**,
-            com.sun.media.**,
             com.sun.swing.**;
+}
+
+module client {
+    include applet,
+            awt,
+            font,
+            imageio,
+            java2d,
+            media,
+            print,
+            sound,
+            swing;
+
+    include javax.accessibility.*,
+            sun.audio.**,
+            com.sun.accessibility.**;
 
     // Bidi class in client module for now
     include java.text.Bidi, sun.text.bidi.*;
@@ -723,7 +771,13 @@
 
 /**************************************************************************/
 
+module jkernel {
+    include sun.jkernel.*;
+}
+
 module deploy {
+    include jkernel;
+
     // For now, all plugin and JNLP
     include com.sun.java.browser.**,
             netscape.**,
@@ -732,8 +786,7 @@
             com.sun.deploy.**,
             com.sun.javaws.**,
             javax.jnlp.*,
-            com.sun.jnlp.*,
-            sun.jkernel.*;
+            com.sun.jnlp.*;
 
     // Hook for http authentication
     include sun.net.www.protocol.http.AuthCacheBridge;
@@ -741,6 +794,11 @@
 
 /**************************************************************************/
 
+module net-dns {
+    include sun.net.dns.**;                 // to access DNS config.
+    include sun.net.spi.nameservice.dns.**; // for DNS-only name service.
+}
+
 module net-compat {
     // NTLM authentication support
     include sun.net.www.protocol.http.ntlm.*;
@@ -824,6 +882,7 @@
             debugging,
             jaxws-tools,
             jdb,
+            rmic,
             sajdi;
 
     // include gui-tools in tools module unless the tool binaries
@@ -834,8 +893,7 @@
             com.sun.jarsigner.**,
             com.sun.javac.**,
             com.sun.javadoc.**, com.sun.source.**,
-            sun.jvmstat.**,
-            sun.rmi.rmic.**;
+            sun.jvmstat.**;
 }
 
 /**************************************************************************/
@@ -853,6 +911,19 @@
 
 /**************************************************************************/
 
+// Workaround for US export and local policy files 
+// They are currently in signed jars under the jre/lib/security directory
+module US_export_policy {
+    include default_US_export.policy;
+}
+
+module local_policy {
+    include default_local.policy,
+            exempt_local.policy;
+}
+
+/**************************************************************************/
+
 module other {
     include **;
 }
--- a/jdk/make/modules/optional.depconfig	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/modules/optional.depconfig	Fri Feb 05 12:26:35 2010 -0800
@@ -1,3 +1,28 @@
+#
+# Copyright 2009 Sun Microsystems, Inc.  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.  Sun designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
 # public final java.nio.channels.SocketChannel getChannel()
 @Optional
   sun.security.ssl.BaseSSLSocketImpl -> java.nio.channels.SocketChannel
--- a/jdk/make/modules/tools/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/modules/tools/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,58 +28,128 @@
 #
 
 BUILDDIR = ../..
-PACKAGE = com.sun.classanalyzer
-PRODUCT = tools
-PROGRAM = classanalyzer
 include $(BUILDDIR)/common/Defs.gmk
 
+PKGDIR = com/sun/classanalyzer
 BUILDTOOL_SOURCE_ROOT = src
 BUILDTOOL_MAIN        = $(PKGDIR)/ClassAnalyzer.java
 BUILTTOOL_MAINCLASS   = $(subst /,.,$(BUILDTOOL_MAIN:%.java=%))
 
 BUILDTOOL_MAIN_SOURCE_FILE = $(BUILDTOOL_SOURCE_ROOT)/$(BUILDTOOL_MAIN)
-BUILDTOOL_MANIFEST_FILE    = $(BUILDTOOLCLASSDIR)/$(PROGRAM)_manifest.mf
-BUILDTOOL_JAR_FILE         = $(BUILDTOOLJARDIR)/$(PROGRAM).jar
+BUILDTOOL_MANIFEST_FILE    = $(BUILDTOOLCLASSDIR)/classanalyzer_manifest.mf
 
 FILES_java := $(shell $(CD) $(BUILDTOOL_SOURCE_ROOT) \
-    && $(FIND) $(PKGDIR) $(SCM_DIRS_prune) -o -type f -print)
+    && $(FIND) $(PKGDIR) -type f -print)
+
 FILES_class = $(FILES_java:%.java=$(BUILDTOOLCLASSDIR)/%.class)
 
-all build: $(BUILDTOOL_JAR_FILE) tool_info
+CLASSANALYZER_JAR_FILE     = $(BUILDTOOLJARDIR)/classanalyzer.jar
+
+#
+# ClassAnalyzer depends on the com.sun.tools.classfile API.
+# The tool is compiled with the latest version of the classfile 
+# library in the langtools repo to make sure that synchronized
+# change is made if the classfile API is changed. 
+#
+# If langtools repo exists, build its own copy of the
+# classfile library and use it for compile time and runtime.
+# If not exist (the top level repo is not a forest), use 
+# the built jdk tools that imports tools.jar from the latest
+# promoted build.
+#
+# If the classfile API is changed but not yet in a promoted build,
+# the build might fail and the tool would need the langtools repo
+# to build in that case.
+#
+ifndef LANGTOOLS_TOPDIR
+  LANGTOOLS_TOPDIR=$(JDK_TOPDIR)/../langtools
+endif
+
+LANGTOOLS_TOPDIR_EXISTS := $(shell \
+  if [ -d $(LANGTOOLS_TOPDIR) ] ; then \
+    echo true; \
+  else \
+    echo false; \
+  fi)
+
+CLASSFILE_SRC = $(LANGTOOLS_TOPDIR)/src/share/classes
+CLASSFILE_PKGDIR = com/sun/tools/classfile
+
+ifeq ($(LANGTOOLS_TOPDIR_EXISTS), true)
+  FILES_classfile_java := $(shell \
+       $(CD) $(CLASSFILE_SRC) && \
+           $(FIND) $(CLASSFILE_PKGDIR) -name '*.java' -print)
+  FILES_classfile_class = $(FILES_classfile_java:%.java=$(BUILDTOOLCLASSDIR)/%.class)
+  CLASSFILE_JAR_FILE = $(BUILDTOOLJARDIR)/classfile.jar
+  BUILDTOOL_JAVAC    = $(BOOT_JAVAC_CMD) $(JAVAC_JVM_FLAGS) \
+                          $(BOOT_JAVACFLAGS) -classpath $(CLASSFILE_JAR_FILE)
+  BUILDTOOL_JAVA     = $(BOOT_JAVA_CMD) $(JAVA_TOOLS_FLAGS) \
+                          -Xbootclasspath/p:$(CLASSFILE_JAR_FILE)
+else
+  # if langtools doesn't exist, use tools from the built jdk
+  BUILDTOOL_JAVAC = $(BINDIR)/javac $(JAVAC_JVM_FLAGS) \
+                       $(BOOT_JAVACFLAGS)
+  BUILDTOOL_JAVA  = $(BINDIR)/java $(JAVA_TOOLS_FLAGS)
+endif
+
+# Location of the output modules.list, <module>.classlist
+# and other output files generated by the class analyzer tool.
+#
+MODULE_CLASSLIST = $(MODULES_TEMPDIR)/classlist
+
+all build: classanalyzer gen-classlist
+
+classanalyzer: $(CLASSFILE_JAR_FILE) $(CLASSANALYZER_JAR_FILE) 
+
+gen-classlist:
+	@$(ECHO) ">>>Making "$@" @ `$(DATE)` ..."
+	@$(RM) -rf $(MODULE_CLASSLIST)
+	@$(MKDIR) -p $(MODULE_CLASSLIST)
+	$(BUILDTOOL_JAVA) \
+                -Dclassanalyzer.debug \
+                -jar $(CLASSANALYZER_JAR_FILE) \
+                -jdkhome $(OUTPUTDIR) \
+                -config ../modules.config \
+                -config ../modules.group \
+                -depconfig ../jdk7.depconfig \
+                -depconfig ../optional.depconfig \
+                -showdynamic \
+                -output $(MODULE_CLASSLIST)
+	@$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..."
 
 $(BUILDTOOL_MANIFEST_FILE): $(BUILDTOOL_MAIN_SOURCE_FILE)
 	@$(prep-target)
 	$(ECHO) "Main-Class: $(BUILTTOOL_MAINCLASS)" > $@
 
+$(BUILDTOOLCLASSDIR)/$(CLASSFILE_PKGDIR)/%.class : $(CLASSFILE_SRC)/$(CLASSFILE_PKGDIR)/%.java
+	@$(prep-target)
+	@$(BUILDTOOL_JAVAC) \
+            -sourcepath $(CLASSFILE_SRC) \
+            -d $(BUILDTOOLCLASSDIR) $<
+
 $(BUILDTOOLCLASSDIR)/%.class : $(BUILDTOOL_SOURCE_ROOT)/%.java
 	@$(prep-target)
-	$(JAVAC_CMD) \
+	$(BUILDTOOL_JAVAC) \
             -sourcepath $(BUILDTOOL_SOURCE_ROOT) \
             -d $(BUILDTOOLCLASSDIR) $<
 
-$(BUILDTOOL_JAR_FILE): $(BUILDTOOL_MANIFEST_FILE) $(FILES_class)
+$(CLASSANALYZER_JAR_FILE): $(BUILDTOOL_MANIFEST_FILE) $(FILES_class)
 	@$(prep-target)
-	$(BOOT_JAR_CMD) cfm $@ $(BUILDTOOL_MANIFEST_FILE) \
-	    -C $(BUILDTOOLCLASSDIR) $(PKGDIR) \
-	    $(BOOT_JAR_JFLAGS) || $(RM) $@
-	$(java-vm-cleanup)
+	$(CD) $(BUILDTOOLCLASSDIR) && \
+	    $(BOOT_JAR_CMD) cfm $@ $(BUILDTOOL_MANIFEST_FILE) \
+	       $(PKGDIR) $(BOOT_JAR_JFLAGS) || $(RM) $@
+	@$(java-vm-cleanup)
 
-# Printing out a build tool information line
-define printBuildToolSetting
-if [ "$2" != "" ] ; then $(PRINTF) "%-25s %s\n" "$1:" "$2"; fi
-endef
-
-# Print out the build tool information
-tool_info:
-	@$(ECHO) "========================================================="
-	@$(call printBuildToolSetting,BUILDTOOL,$(PROGRAM))
-	@$(call printBuildToolSetting,PACKAGE,$(PACKAGE))
-	@$(call printBuildToolSetting,BUILDTOOL_SOURCE_ROOT,$(BUILDTOOL_SOURCE_ROOT))
-	@$(call printBuildToolSetting,BUILTTOOL_MAINCLASS,$(BUILTTOOL_MAINCLASS))
-	@$(call printBuildToolSetting,BUILDTOOL_JAR_FILE,$(BUILDTOOL_JAR_FILE))
-	@$(ECHO) "========================================================="
+$(BUILDTOOLJARDIR)/classfile.jar: $(FILES_classfile_class)
+	@$(prep-target)
+	$(CD) $(BUILDTOOLCLASSDIR) && \
+	    $(BOOT_JAR_CMD) cf $@ \
+	        $(CLASSFILE_PKGDIR) $(BOOT_JAR_JFLAGS) || $(RM) $@
+	@$(java-vm-cleanup)
 
 clean clobber::
 	@$(RM) -rf $(BUILDTOOLCLASSDIR)/$(PKGDIR)
+	@$(RM) -rf $(BUILDTOOLCLASSDIR)/$(CLASSFILE_PKGDIR)
 	@$(RM) $(BUILDTOOL_MANIFEST_FILE)
-	@$(RM) $(BUILDTOOL_JAR_FILE)
+	@$(RM) $(CLASSANALYZER_JAR_FILE)
+	@$(RM) $(CLASSFILE_JAR_FILE)
--- a/jdk/make/modules/tools/build.xml	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/modules/tools/build.xml	Fri Feb 05 12:26:35 2010 -0800
@@ -1,32 +1,28 @@
-<!--
- Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+<?xml version="1.0" encoding="UTF-8"?>
 
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
+<!--
+  Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
+  DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-
-   - Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
+  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.  Sun designates this
+  particular file as subject to the "Classpath" exception as provided
+  by Sun in the LICENSE file that accompanied this code.
 
-   - Neither the name of Sun Microsystems nor the names of its
-     contributors may be used to endorse or promote products derived
-     from this software without specific prior written permission.
+  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).
 
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+  CA 95054 USA or visit www.sun.com if you need additional information or
+  have any questions.
 -->
 
 <project name="classanalyzer" default="build" basedir=".">
--- a/jdk/make/modules/tools/nbproject/project.properties	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/modules/tools/nbproject/project.properties	Fri Feb 05 12:26:35 2010 -0800
@@ -1,32 +1,26 @@
 #
 # Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 #
-#   - Redistributions of source code must retain the above copyright
-#     notice, this list of conditions and the following disclaimer.
-#
-#   - Redistributions in binary form must reproduce the above copyright
-#     notice, this list of conditions and the following disclaimer in the
-#     documentation and/or other materials provided with the distribution.
+# 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.  Sun designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Sun in the LICENSE file that accompanied this code.
 #
-#   - Neither the name of Sun Microsystems nor the names of its
-#     contributors may be used to endorse or promote products derived
-#     from this software without specific prior written permission.
+# 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).
 #
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+# 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
 #
 
 application.title=classanalyzer
--- a/jdk/make/modules/tools/nbproject/project.xml	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/modules/tools/nbproject/project.xml	Fri Feb 05 12:26:35 2010 -0800
@@ -1,35 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
- Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-
-   - Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
-
-   - Neither the name of Sun Microsystems nor the names of its
-     contributors may be used to endorse or promote products derived
-     from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  Copyright 2009 Sun Microsystems, Inc.  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.  Sun designates this
+  particular file as subject to the "Classpath" exception as provided
+  by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+  CA 95054 USA or visit www.sun.com if you need additional information or
+  have any questions.
 -->
 
-<?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://www.netbeans.org/ns/project/1">
     <type>org.netbeans.modules.java.j2seproject</type>
     <configuration>
--- a/jdk/make/modules/tools/src/com/sun/classanalyzer/Module.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/modules/tools/src/com/sun/classanalyzer/Module.java	Fri Feb 05 12:26:35 2010 -0800
@@ -444,8 +444,8 @@
     }
 
     void printClassListTo(String output) throws IOException {
-        // no file created if the module doesn't have any class
-        if (classes.isEmpty()) {
+        // no file created if the module doesn't have any class nor resource
+        if (isEmpty()) {
             return;
         }
 
@@ -482,7 +482,7 @@
 
     void printDependenciesTo(String output, boolean showDynamic) throws IOException {
         // no file created if the module doesn't have any class
-        if (classes.isEmpty()) {
+        if (isEmpty()) {
             return;
         }
 
--- a/jdk/make/sun/applet/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/applet/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = applet
 PACKAGE = sun.applet
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/awt/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/awt/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = awt
 PACKAGE = sun.awt
 LIBRARY = awt
 PRODUCT = sun
@@ -312,15 +313,15 @@
 
 $(LIBDIR)/$(LIBARCH)/libxinerama.so: $(CLOSED_SRC)/solaris/lib/$(ARCH)/libxinerama.so
 	$(install-file)
-	$(CHMOD) a+x $@
+	$(call chmod-file, a+x)
 
 $(LIBDIR)/$(LIBARCH)/libjdgaSUNW%.so: $(CLOSED_SRC)/solaris/lib/$(ARCH)/libjdgaSUNW%.so
 	$(install-file)
-	$(CHMOD) a+x $@
+	$(call chmod-file, a+x)
 
 $(LIBDIR)/$(LIBARCH)/libjdgaSUNWafb.so: $(LIBDIR)/$(LIBARCH)/libjdgaSUNWffb.so
 	$(prep-target)
-	$(LN) -s libjdgaSUNWffb.so $(LIBDIR)/$(LIBARCH)/libjdgaSUNWafb.so
+	$(call install-sym-link, libjdgaSUNWffb.so)
 
 clean:: dgalib.clean
 
@@ -404,7 +405,8 @@
     $(COMPILEFONTCONFIG_JARFILE)
 	$(prep-target)
 	$(BOOT_JAVA_CMD) -jar $(COMPILEFONTCONFIG_JARFILE) $< $@
-	$(CHMOD) 444 $(@)
+	$(install-module-file)
+	$(call chmod-file, 444)
 	@$(java-vm-cleanup)
 
 fontconfigs.clean :
--- a/jdk/make/sun/cmm/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/cmm/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE   = java2d
 PRODUCT  = sun
 include $(BUILDDIR)/common/Defs.gmk
 
@@ -45,34 +46,24 @@
 	     $(ICCPROFILE_DEST_DIR)/LINEAR_RGB.pf
 
 $(ICCPROFILE_DEST_DIR)/sRGB.pf: $(ICCPROFILE_SRC_DIR)/sRGB.pf
-	$(RM) $(ICCPROFILE_DEST_DIR)/sRGB.pf
-	-$(MKDIR) -p $(ICCPROFILE_DEST_DIR)
-	$(CP) $(ICCPROFILE_SRC_DIR)/sRGB.pf $(ICCPROFILE_DEST_DIR)
-	$(CHMOD) 444 $(ICCPROFILE_DEST_DIR)/sRGB.pf
+	$(install-file)
+	$(call chmod-file, 444)
 
 $(ICCPROFILE_DEST_DIR)/GRAY.pf: $(ICCPROFILE_SRC_DIR)/GRAY.pf
-	$(RM) $(ICCPROFILE_DEST_DIR)/GRAY.pf
-	-$(MKDIR) -p $(ICCPROFILE_DEST_DIR)
-	$(CP) $(ICCPROFILE_SRC_DIR)/GRAY.pf $(ICCPROFILE_DEST_DIR)
-	$(CHMOD) 444 $(ICCPROFILE_DEST_DIR)/GRAY.pf
+	$(install-file)
+	$(call chmod-file, 444)
 
 $(ICCPROFILE_DEST_DIR)/CIEXYZ.pf: $(ICCPROFILE_SRC_DIR)/CIEXYZ.pf
-	$(RM) $(ICCPROFILE_DEST_DIR)/CIEXYZ.pf
-	-$(MKDIR) -p $(ICCPROFILE_DEST_DIR)
-	$(CP) $(ICCPROFILE_SRC_DIR)/CIEXYZ.pf $(ICCPROFILE_DEST_DIR)
-	$(CHMOD) 444 $(ICCPROFILE_DEST_DIR)/CIEXYZ.pf
+	$(install-file)
+	$(call chmod-file, 444)
 
 $(ICCPROFILE_DEST_DIR)/PYCC.pf: $(ICCPROFILE_SRC_DIR)/PYCC.pf
-	$(RM) $(ICCPROFILE_DEST_DIR)/PYCC.pf
-	-$(MKDIR) -p $(ICCPROFILE_DEST_DIR)
-	$(CP) $(ICCPROFILE_SRC_DIR)/PYCC.pf $(ICCPROFILE_DEST_DIR)
-	$(CHMOD) 444 $(ICCPROFILE_DEST_DIR)/PYCC.pf
+	$(install-file)
+	$(call chmod-file, 444)
 
 $(ICCPROFILE_DEST_DIR)/LINEAR_RGB.pf: $(ICCPROFILE_SRC_DIR)/LINEAR_RGB.pf
-	$(RM) $(ICCPROFILE_DEST_DIR)/LINEAR_RGB.pf
-	-$(MKDIR) -p $(ICCPROFILE_DEST_DIR)
-	$(CP) $(ICCPROFILE_SRC_DIR)/LINEAR_RGB.pf $(ICCPROFILE_DEST_DIR)
-	$(CHMOD) 444 $(ICCPROFILE_DEST_DIR)/LINEAR_RGB.pf
+	$(install-file)
+	$(call chmod-file, 444)
 
 iccprofiles.clean:
 	$(RM) -r $(ICCPROFILE_DEST_DIR)
--- a/jdk/make/sun/cmm/kcms/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/cmm/kcms/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = java2d
 PACKAGE = sun.java2d.cmm.kcms
 LIBRARY = kcms
 PRODUCT = sun
--- a/jdk/make/sun/cmm/lcms/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/cmm/lcms/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = java2d
 PACKAGE = sun.java2d.cmm.lcms
 LIBRARY = lcms
 PRODUCT = sun
--- a/jdk/make/sun/dcpr/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/dcpr/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -26,6 +26,7 @@
 # WARNING: Make sure the OPENJDK plugs are up-to-date, see make/common/internal/BinaryPlugs.gmk
 
 BUILDDIR = ../..
+MODULE  = java2d
 PACKAGE = sun.dc
 LIBRARY = dcpr
 PRODUCT = sun
--- a/jdk/make/sun/font/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/font/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = font
 PACKAGE = sun.font
 LIBRARY = fontmanager
 PRODUCT = sun
@@ -121,16 +122,21 @@
 #
 #TODO: rework this to avoid hardcoding library name in the makefile
 #
-library:: $(LIB_LOCATION)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX)
-
-$(LIB_LOCATION)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX):
 ifeq ($(PLATFORM), windows)
-	$(CP) $(FREETYPE_LIB_PATH)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX) $@
+    FREETYPE_LIB = $(LIB_LOCATION)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX)
+    OTHER_LDLIBS += $(FREETYPE_LIB_PATH)/freetype.lib
 else 
   ifeq ($(USING_SYSTEM_FT_LIB), false)
-	$(CP) $(FREETYPE_LIB_PATH)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX) $@.6
+    FREETYPE_LIB = $(LIB_LOCATION)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX).6
   endif
+  OTHER_LDLIBS += -L$(FREETYPE_LIB_PATH) -lfreetype
 endif 
+
+library:: $(FREETYPE_LIB)
+
+$(FREETYPE_LIB):
+	$(CP) $(FREETYPE_LIB_PATH)/$(LIB_PREFIX)freetype.$(LIBRARY_SUFFIX) $@
+	$(install-module-file)
 endif
 
 #ifeq ($(PLATFORM), solaris)
@@ -158,7 +164,6 @@
   CPPFLAGS += -I$(CLOSED_SRC)/share/native/$(PKGDIR)/t2k
 else
   CPPFLAGS += -I$(FREETYPE_HEADERS_PATH) -I$(FREETYPE_HEADERS_PATH)/freetype2
-  OTHER_LDLIBS += $(FREETYPE_LIB)
 endif
 
 ifeq ($(PLATFORM), windows)
--- a/jdk/make/sun/font/t2k/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/font/t2k/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -30,6 +30,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = font
 PACKAGE = sun.font
 LIBRARY = t2k
 PRODUCT = sun
--- a/jdk/make/sun/headless/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/headless/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -30,6 +30,7 @@
 MOTIF_VERSION_STRING=none
 LIB_LOCATION = $(LIBDIR)/$(LIBARCH)/headless
 
+MODULE  = awt
 PACKAGE = sun.awt
 LIBRARY = mawt
 LIBRARY_OUTPUT = headless
--- a/jdk/make/sun/image/generic/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/image/generic/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = media
 PACKAGE = sun.awt.medialib
 LIBRARY = mlib_image
 PRODUCT = sun
--- a/jdk/make/sun/image/vis/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/image/vis/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -27,6 +27,7 @@
 # Makefile for building the VIS (solaris-only) version of medialib
 #
 BUILDDIR = ../../..
+MODULE  = media
 PACKAGE = sun.awt.medialib
 LIBRARY = mlib_image_v
 PRODUCT = sun
--- a/jdk/make/sun/jar/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/jar/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = jar-tool
 PACKAGE = sun.tools
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/javazic/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/javazic/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -27,6 +27,7 @@
 
 
 BUILDDIR = ../..
+MODULE  = base
 PACKAGE = sun.javazic
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
@@ -69,6 +70,7 @@
 	$(RM) -r $(@D)
 	$(prep-target)
 	$(CP) -r $(WORKDIR)/* $(@D)
+	$(install-module-dir)
 
 clean clobber::
 	$(RM) -r $(TEMPDIR) $(INSTALLDIR)
--- a/jdk/make/sun/jawt/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/jawt/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = awt
 PACKAGE = sun.awt
 LIBRARY = jawt
 PRODUCT = sun
--- a/jdk/make/sun/jconsole/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/jconsole/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = jconsole
 PACKAGE = sun.tools.jconsole
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
@@ -79,7 +80,7 @@
 	$(install-file)
 
 $(TEMPDIR)/manifest: $(SHARE_SRC)/classes/$(PKGDIR)/manifest
-	$(install-file)
+	$(install-manifest-file)
 
 #
 # Extra rule to build jconsole.jar
--- a/jdk/make/sun/jdbc/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/jdbc/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -33,6 +33,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = jdbc-odbc
 PACKAGE = sun.jdbc.odbc
 LIBRARY = JdbcOdbc
 PRODUCT = sun
--- a/jdk/make/sun/jdga/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/jdga/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -25,6 +25,7 @@
 
 
 BUILDDIR = ../..
+MODULE  = java2d
 PACKAGE = sun.jdga
 LIBRARY = sunwjdga
 PRODUCT = sun
--- a/jdk/make/sun/jkernel/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/jkernel/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = jkernel
 PACKAGE = sun.jkernel
 LIBRARY = jkernel
 PRODUCT = sun
--- a/jdk/make/sun/jpeg/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/jpeg/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = java2d
 PACKAGE = sun.awt
 LIBRARY = jpeg
 PRODUCT = sun
--- a/jdk/make/sun/launcher/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/launcher/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = base
 PACKAGE = sun.launcher
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/management/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/management/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,8 @@
 #
 
 BUILDDIR = ../..
+MODULE   = management
+
 include $(BUILDDIR)/common/Defs.gmk
 
 MGMT_LIBDIR = $(LIBDIR)/management
@@ -56,17 +58,17 @@
 
 $(MGMT_LIBDIR)/management.properties: $(MGMT_LIB_SRC)/management.properties
 	$(install-file)
-	$(CHMOD) 644 $@
+	$(call chmod-file, 644)
 
 $(MGMT_LIBDIR)/snmp.acl.template: $(MGMT_LIB_SRC)/snmp.acl.template
 	$(install-file)
-	$(CHMOD) 444 $@
+	$(call chmod-file, 444)
 
 $(MGMT_LIBDIR)/jmxremote.password.template: $(MGMT_LIB_SRC)/jmxremote.password.template
 	$(install-file)
-	$(CHMOD) 444 $@
+	$(call chmod-file, 444)
 
 $(MGMT_LIBDIR)/jmxremote.access: $(MGMT_LIB_SRC)/jmxremote.access 
 	$(install-file)
-	$(CHMOD) 644 $@
+	$(call chmod-file, 644)
 
--- a/jdk/make/sun/native2ascii/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/native2ascii/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = tools
 PACKAGE = sun.tools.native2ascii
 PRODUCT = sun
 OTHER_JAVACFLAGS += -Xlint:serial -Werror
--- a/jdk/make/sun/net/others/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/net/others/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = base
 PACKAGE = sun.net
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/net/spi/nameservice/dns/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/net/spi/nameservice/dns/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,9 @@
 #
 
 BUILDDIR = ../../../../..
+
+# dns should probably be its own module
+MODULE  = net-dns
 PACKAGE = sun.net.spi.nameservice.dns
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/nio/FILES_java.gmk	Thu Feb 04 15:50:59 2010 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,400 +0,0 @@
-#
-# Copyright 2005-2006 Sun Microsystems, Inc.  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.  Sun designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-# CA 95054 USA or visit www.sun.com if you need additional information or
-# have any questions.
-#
-
-#
-# Character converters for lib/charsets.jar
-#
-# Core character converters are built from make/java/java.
-#
-
-FILES_src = \
-	sun/io/ByteToCharDoubleByte.java \
-	sun/io/ByteToCharDBCS_ASCII.java \
-	sun/io/ByteToCharDBCS_EBCDIC.java \
-	sun/io/ByteToCharEUC.java \
-	sun/io/CharToByteDoubleByte.java \
-	sun/io/CharToByteDBCS_ASCII.java \
-	sun/io/CharToByteDBCS_EBCDIC.java \
-	sun/io/CharToByteEUC.java \
-	sun/io/ByteToCharBig5.java \
-	sun/io/ByteToCharBig5_Solaris.java \
-	sun/io/ByteToCharBig5_HKSCS.java \
-	sun/io/ByteToCharMS950_HKSCS.java \
-	sun/io/ByteToCharHKSCS.java \
-	sun/io/ByteToCharHKSCS_2001.java \
-	sun/io/ByteToCharGB18030.java \
-	sun/io/ByteToCharGB18030DB.java \
-	sun/io/ByteToCharCp037.java \
-	sun/io/ByteToCharCp1006.java \
-	sun/io/ByteToCharCp1025.java \
-	sun/io/ByteToCharCp1026.java \
-	sun/io/ByteToCharCp1046.java \
-	sun/io/ByteToCharCp1047.java \
-	sun/io/ByteToCharCp1097.java \
-	sun/io/ByteToCharCp1098.java \
-	sun/io/ByteToCharCp1112.java \
-	sun/io/ByteToCharCp1122.java \
-	sun/io/ByteToCharCp1123.java \
-	sun/io/ByteToCharCp1124.java \
-	sun/io/ByteToCharCp1140.java \
-	sun/io/ByteToCharCp1141.java \
-	sun/io/ByteToCharCp1142.java \
-	sun/io/ByteToCharCp1143.java \
-	sun/io/ByteToCharCp1144.java \
-	sun/io/ByteToCharCp1145.java \
-	sun/io/ByteToCharCp1146.java \
-	sun/io/ByteToCharCp1147.java \
-	sun/io/ByteToCharCp1148.java \
-	sun/io/ByteToCharCp1149.java \
-	sun/io/ByteToCharCp1255.java \
-	sun/io/ByteToCharCp1256.java \
-	sun/io/ByteToCharCp1258.java \
-	sun/io/ByteToCharCp1381.java \
-	sun/io/ByteToCharCp1383.java \
-	sun/io/ByteToCharCp273.java \
-	sun/io/ByteToCharCp277.java \
-	sun/io/ByteToCharCp278.java \
-	sun/io/ByteToCharCp280.java \
-	sun/io/ByteToCharCp284.java \
-	sun/io/ByteToCharCp285.java \
-	sun/io/ByteToCharCp297.java \
-	sun/io/ByteToCharCp33722.java \
-	sun/io/ByteToCharCp420.java \
-	sun/io/ByteToCharCp424.java \
-	sun/io/ByteToCharCp437.java \
-	sun/io/ByteToCharCp500.java \
-	sun/io/ByteToCharCp737.java \
-	sun/io/ByteToCharCp775.java \
-	sun/io/ByteToCharCp834.java \
-	sun/io/ByteToCharCp838.java \
-	sun/io/ByteToCharCp850.java \
-	sun/io/ByteToCharCp852.java \
-	sun/io/ByteToCharCp855.java \
-	sun/io/ByteToCharCp856.java \
-	sun/io/ByteToCharCp857.java \
-	sun/io/ByteToCharCp858.java \
-	sun/io/ByteToCharCp860.java \
-	sun/io/ByteToCharCp861.java \
-	sun/io/ByteToCharCp862.java \
-	sun/io/ByteToCharCp863.java \
-	sun/io/ByteToCharCp864.java \
-	sun/io/ByteToCharCp865.java \
-	sun/io/ByteToCharCp866.java \
-	sun/io/ByteToCharCp868.java \
-	sun/io/ByteToCharCp869.java \
-	sun/io/ByteToCharCp870.java \
-	sun/io/ByteToCharCp871.java \
-	sun/io/ByteToCharCp874.java \
-	sun/io/ByteToCharCp875.java \
-	sun/io/ByteToCharCp918.java \
-	sun/io/ByteToCharCp921.java \
-	sun/io/ByteToCharCp922.java \
-	sun/io/ByteToCharCp930.java \
-	sun/io/ByteToCharCp933.java \
-	sun/io/ByteToCharCp935.java \
-	sun/io/ByteToCharCp937.java \
-	sun/io/ByteToCharCp939.java \
-	sun/io/ByteToCharCp942.java \
-	sun/io/ByteToCharCp942C.java \
-	sun/io/ByteToCharCp943.java \
-	sun/io/ByteToCharCp943C.java \
-	sun/io/ByteToCharCp948.java \
-	sun/io/ByteToCharCp949.java \
-	sun/io/ByteToCharCp949C.java \
-	sun/io/ByteToCharCp950.java \
-	sun/io/ByteToCharCp964.java \
-	sun/io/ByteToCharCp970.java \
-	sun/io/ByteToCharJIS0201.java \
-	sun/io/ByteToCharJIS0208.java \
-	sun/io/ByteToCharJIS0208_Solaris.java \
-	sun/io/ByteToCharJIS0212.java \
-	sun/io/ByteToCharJIS0212_Solaris.java \
-	sun/io/ByteToCharEUC_CN.java \
-	sun/io/ByteToCharEUC_JP.java \
-	sun/io/ByteToCharEUC_JP_LINUX.java \
-	sun/io/ByteToCharEUC_JP_Solaris.java \
-	sun/io/ByteToCharEUC_KR.java \
-	sun/io/ByteToCharEUC_TW.java \
-	sun/io/ByteToCharSJIS.java \
-	sun/io/ByteToCharPCK.java \
-	sun/io/ByteToCharGBK.java \
-	sun/io/ByteToCharISCII91.java \
-	sun/io/ByteToCharISO2022.java \
-	sun/io/ByteToCharISO2022CN.java \
-	sun/io/ByteToCharISO2022JP.java \
-	sun/io/ByteToCharISO2022KR.java \
-	sun/io/ByteToCharISO8859_3.java \
-	sun/io/ByteToCharISO8859_6.java \
-	sun/io/ByteToCharISO8859_8.java \
-	sun/io/ByteToCharJISAutoDetect.java \
-	sun/io/ByteToCharJohab.java \
-	sun/io/ByteToCharMS874.java \
-	sun/io/ByteToCharMS932.java \
-	sun/io/ByteToCharMS936.java \
-	sun/io/ByteToCharMS949.java \
-	sun/io/ByteToCharMS950.java \
-	sun/io/ByteToCharMacArabic.java \
-	sun/io/ByteToCharMacCentralEurope.java \
-	sun/io/ByteToCharMacCroatian.java \
-	sun/io/ByteToCharMacCyrillic.java \
-	sun/io/ByteToCharMacDingbat.java \
-	sun/io/ByteToCharMacGreek.java \
-	sun/io/ByteToCharMacHebrew.java \
-	sun/io/ByteToCharMacIceland.java \
-	sun/io/ByteToCharMacRoman.java \
-	sun/io/ByteToCharMacRomania.java \
-	sun/io/ByteToCharMacSymbol.java \
-	sun/io/ByteToCharMacThai.java \
-	sun/io/ByteToCharMacTurkish.java \
-	sun/io/ByteToCharMacUkraine.java \
-	sun/io/ByteToCharTIS620.java \
-	sun/io/CharToByteBig5.java \
-	sun/io/CharToByteBig5_Solaris.java \
-	sun/io/CharToByteBig5_HKSCS.java \
-	sun/io/CharToByteHKSCS.java \
-	sun/io/CharToByteHKSCS_2001.java \
-	sun/io/CharToByteMS950_HKSCS.java \
-	sun/io/CharToByteGB18030.java \
-	sun/io/CharToByteCp037.java \
-	sun/io/CharToByteCp1006.java \
-	sun/io/CharToByteCp1025.java \
-	sun/io/CharToByteCp1026.java \
-	sun/io/CharToByteCp1046.java \
-	sun/io/CharToByteCp1047.java \
-	sun/io/CharToByteCp1097.java \
-	sun/io/CharToByteCp1098.java \
-	sun/io/CharToByteCp1112.java \
-	sun/io/CharToByteCp1122.java \
-	sun/io/CharToByteCp1123.java \
-	sun/io/CharToByteCp1124.java \
-	sun/io/CharToByteCp1140.java \
-	sun/io/CharToByteCp1141.java \
-	sun/io/CharToByteCp1142.java \
-	sun/io/CharToByteCp1143.java \
-	sun/io/CharToByteCp1144.java \
-	sun/io/CharToByteCp1145.java \
-	sun/io/CharToByteCp1146.java \
-	sun/io/CharToByteCp1147.java \
-	sun/io/CharToByteCp1148.java \
-	sun/io/CharToByteCp1149.java \
-	sun/io/CharToByteCp1255.java \
-	sun/io/CharToByteCp1256.java \
-	sun/io/CharToByteCp1258.java \
-	sun/io/CharToByteCp1381.java \
-	sun/io/CharToByteCp1383.java \
-	sun/io/CharToByteCp273.java \
-	sun/io/CharToByteCp277.java \
-	sun/io/CharToByteCp278.java \
-	sun/io/CharToByteCp280.java \
-	sun/io/CharToByteCp284.java \
-	sun/io/CharToByteCp285.java \
-	sun/io/CharToByteCp297.java \
-	sun/io/CharToByteCp33722.java \
-	sun/io/CharToByteCp420.java \
-	sun/io/CharToByteCp424.java \
-	sun/io/CharToByteCp437.java \
-	sun/io/CharToByteCp500.java \
-	sun/io/CharToByteCp737.java \
-	sun/io/CharToByteCp775.java \
-	sun/io/CharToByteCp834.java \
-	sun/io/CharToByteCp838.java \
-	sun/io/CharToByteCp850.java \
-	sun/io/CharToByteCp852.java \
-	sun/io/CharToByteCp855.java \
-	sun/io/CharToByteCp856.java \
-	sun/io/CharToByteCp857.java \
-	sun/io/CharToByteCp858.java \
-	sun/io/CharToByteCp860.java \
-	sun/io/CharToByteCp861.java \
-	sun/io/CharToByteCp862.java \
-	sun/io/CharToByteCp863.java \
-	sun/io/CharToByteCp864.java \
-	sun/io/CharToByteCp865.java \
-	sun/io/CharToByteCp866.java \
-	sun/io/CharToByteCp868.java \
-	sun/io/CharToByteCp869.java \
-	sun/io/CharToByteCp870.java \
-	sun/io/CharToByteCp871.java \
-	sun/io/CharToByteCp874.java \
-	sun/io/CharToByteCp875.java \
-	sun/io/CharToByteCp918.java \
-	sun/io/CharToByteCp921.java \
-	sun/io/CharToByteCp922.java \
-	sun/io/CharToByteCp930.java \
-	sun/io/CharToByteCp933.java \
-	sun/io/CharToByteCp935.java \
-	sun/io/CharToByteCp937.java \
-	sun/io/CharToByteCp939.java \
-	sun/io/CharToByteCp942.java \
-	sun/io/CharToByteCp942C.java \
-	sun/io/CharToByteCp943.java \
-	sun/io/CharToByteCp943C.java \
-	sun/io/CharToByteCp948.java \
-	sun/io/CharToByteCp949.java \
-	sun/io/CharToByteCp949C.java \
-	sun/io/CharToByteCp950.java \
-	sun/io/CharToByteCp964.java \
-	sun/io/CharToByteCp970.java \
-	sun/io/CharToByteJIS0201.java \
-	sun/io/CharToByteJIS0208.java \
-	sun/io/CharToByteJIS0208_Solaris.java \
-	sun/io/CharToByteJIS0212.java \
-	sun/io/CharToByteJIS0212_Solaris.java \
-	sun/io/CharToByteEUC_CN.java \
-	sun/io/CharToByteEUC_JP.java \
-	sun/io/CharToByteEUC_JP_LINUX.java \
-	sun/io/CharToByteEUC_JP_Solaris.java \
-	sun/io/CharToByteEUC_KR.java \
-	sun/io/CharToByteEUC_TW.java \
-	sun/io/CharToByteSJIS.java \
-	sun/io/CharToBytePCK.java \
-	sun/io/CharToByteGBK.java \
-	sun/io/CharToByteISCII91.java \
-	sun/io/CharToByteISO2022.java \
-	sun/io/CharToByteISO2022CN_CNS.java \
-	sun/io/CharToByteISO2022CN_GB.java \
-	sun/io/CharToByteISO2022JP.java \
-	sun/io/CharToByteISO2022KR.java \
-	sun/io/CharToByteISO8859_3.java \
-	sun/io/CharToByteISO8859_6.java \
-	sun/io/CharToByteISO8859_8.java \
-	sun/io/CharToByteJohab.java \
-	sun/io/CharToByteMS874.java \
-	sun/io/CharToByteMS932.java \
-	sun/io/CharToByteMS936.java \
-	sun/io/CharToByteMS949.java \
-	sun/io/CharToByteMS950.java \
-	sun/io/CharToByteMacArabic.java \
-	sun/io/CharToByteMacCentralEurope.java \
-	sun/io/CharToByteMacCroatian.java \
-	sun/io/CharToByteMacCyrillic.java \
-	sun/io/CharToByteMacDingbat.java \
-	sun/io/CharToByteMacGreek.java \
-	sun/io/CharToByteMacHebrew.java \
-	sun/io/CharToByteMacIceland.java \
-	sun/io/CharToByteMacRoman.java \
-	sun/io/CharToByteMacRomania.java \
-	sun/io/CharToByteMacSymbol.java \
-	sun/io/CharToByteMacThai.java \
-	sun/io/CharToByteMacTurkish.java \
-	sun/io/CharToByteMacUkraine.java \
-	sun/io/CharToByteTIS620.java
-
-FILES_gen_extcs = \
-	sun/nio/cs/ext/IBM037.java \
-	sun/nio/cs/ext/IBM1006.java \
-	sun/nio/cs/ext/IBM1025.java \
-	sun/nio/cs/ext/IBM1026.java \
-	sun/nio/cs/ext/IBM1046.java \
-	sun/nio/cs/ext/IBM1047.java \
-	sun/nio/cs/ext/IBM1097.java \
-	sun/nio/cs/ext/IBM1098.java \
-	sun/nio/cs/ext/IBM1112.java \
-	sun/nio/cs/ext/IBM1122.java \
-	sun/nio/cs/ext/IBM1123.java \
-	sun/nio/cs/ext/IBM1124.java \
-	sun/nio/cs/ext/IBM1140.java \
-	sun/nio/cs/ext/IBM1141.java \
-	sun/nio/cs/ext/IBM1142.java \
-	sun/nio/cs/ext/IBM1143.java \
-	sun/nio/cs/ext/IBM1144.java \
-	sun/nio/cs/ext/IBM1145.java \
-	sun/nio/cs/ext/IBM1146.java \
-	sun/nio/cs/ext/IBM1147.java \
-	sun/nio/cs/ext/IBM1148.java \
-	sun/nio/cs/ext/IBM1149.java \
-	sun/nio/cs/ext/IBM273.java \
-	sun/nio/cs/ext/IBM277.java \
-	sun/nio/cs/ext/IBM278.java \
-	sun/nio/cs/ext/IBM280.java \
-	sun/nio/cs/ext/IBM284.java \
-	sun/nio/cs/ext/IBM285.java \
-	sun/nio/cs/ext/IBM297.java \
-	sun/nio/cs/ext/IBM420.java \
-	sun/nio/cs/ext/IBM424.java \
-	sun/nio/cs/ext/IBM500.java \
-	sun/nio/cs/ext/IBM838.java \
-	sun/nio/cs/ext/IBM856.java \
-	sun/nio/cs/ext/IBM860.java \
-	sun/nio/cs/ext/IBM861.java \
-	sun/nio/cs/ext/IBM863.java \
-	sun/nio/cs/ext/IBM864.java \
-	sun/nio/cs/ext/IBM865.java \
-	sun/nio/cs/ext/IBM868.java \
-	sun/nio/cs/ext/IBM869.java \
-	sun/nio/cs/ext/IBM870.java \
-	sun/nio/cs/ext/IBM871.java \
-	sun/nio/cs/ext/IBM875.java \
-	sun/nio/cs/ext/IBM918.java \
-	sun/nio/cs/ext/IBM921.java \
-	sun/nio/cs/ext/IBM922.java \
-	sun/nio/cs/ext/ISO_8859_11.java \
-	sun/nio/cs/ext/ISO_8859_3.java \
-	sun/nio/cs/ext/ISO_8859_6.java \
-	sun/nio/cs/ext/ISO_8859_8.java \
-	sun/nio/cs/ext/MS1255.java \
-	sun/nio/cs/ext/MS1256.java \
-	sun/nio/cs/ext/MS1258.java \
-	sun/nio/cs/ext/MS874.java \
-	sun/nio/cs/ext/MacArabic.java \
-	sun/nio/cs/ext/MacCentralEurope.java \
-	sun/nio/cs/ext/MacCroatian.java \
-	sun/nio/cs/ext/MacCyrillic.java \
-	sun/nio/cs/ext/MacDingbat.java \
-	sun/nio/cs/ext/MacGreek.java \
-	sun/nio/cs/ext/MacHebrew.java \
-	sun/nio/cs/ext/MacIceland.java \
-	sun/nio/cs/ext/MacRoman.java \
-	sun/nio/cs/ext/MacRomania.java \
-	sun/nio/cs/ext/MacSymbol.java \
-	sun/nio/cs/ext/MacThai.java \
-	sun/nio/cs/ext/MacTurkish.java \
-	sun/nio/cs/ext/MacUkraine.java \
-	sun/nio/cs/ext/TIS_620.java \
-        sun/nio/cs/ext/EUC_TWMapping.java \
-	sun/nio/cs/ext/IBM1381.java \
-	sun/nio/cs/ext/IBM1383.java \
-	sun/nio/cs/ext/IBM930.java \
-	sun/nio/cs/ext/IBM933.java \
-	sun/nio/cs/ext/IBM935.java \
-	sun/nio/cs/ext/IBM937.java \
-	sun/nio/cs/ext/IBM939.java \
-	sun/nio/cs/ext/IBM942.java \
-	sun/nio/cs/ext/IBM943.java \
-	sun/nio/cs/ext/IBM948.java \
-	sun/nio/cs/ext/IBM949.java \
-	sun/nio/cs/ext/IBM950.java \
-	sun/nio/cs/ext/IBM970.java \
-	sun/nio/cs/ext/EUC_CN.java \
-	sun/nio/cs/ext/EUC_KR.java \
-	sun/nio/cs/ext/Johab.java \
-	sun/nio/cs/ext/MS932.java \
-	sun/nio/cs/ext/MS936.java \
-	sun/nio/cs/ext/MS949.java \
-	sun/nio/cs/ext/MS950.java \
-	sun/nio/cs/ext/GBK.java
-
-FILES_java = $(FILES_src) $(FILES_gen_extcs)
-
--- a/jdk/make/sun/nio/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/nio/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -1,5 +1,5 @@
 #
-# Copyright 1996-2008 Sun Microsystems, Inc.  All Rights Reserved.
+# Copyright 2009 Sun Microsystems, Inc.  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
@@ -23,88 +23,12 @@
 # have any questions.
 #
 
-#
-# Makefile for character converters.
-#
-
 BUILDDIR = ../..
-
 PACKAGE = sun.nio
 PRODUCT = sun
-
-# This re-directs all the class files to a separate location
-CLASSDESTDIR = $(TEMPDIR)/classes
-
-OTHER_JAVACFLAGS += -Xlint:serial -Werror
 include $(BUILDDIR)/common/Defs.gmk
 
-#
-# Files
-#
-include FILES_java.gmk
-AUTO_FILES_JAVA_DIRS = sun/nio/cs/ext
-
-# For Cygwin, command line arguments that are paths must be converted to
-# windows style paths. These paths cannot be used as targets, however, because 
-# the ":" in them  will interfere with GNU Make rules, generating "multiple
-# target pattern" errors.
-
-# this define is for the rule:
-CHARSETS_JAR = $(LIBDIR)/charsets.jar
-
-# extcs
-FILES_genout_extcs = $(FILES_gen_extcs:%.java=$(GENSRCDIR)/%.java)
-
-#
-# Rules
-#
-include $(BUILDDIR)/common/Classes.gmk
-
-build: $(FILES_genout_extcs) $(CHARSETS_JAR)
-
-#
-# Extra rules to build character converters.
-
-SERVICE_DESCRIPTION = java.nio.charset.spi.CharsetProvider
-SERVICE_DESCRIPTION_PATH = META-INF/services/$(SERVICE_DESCRIPTION)
-
-GENCSDATASRC = $(BUILDDIR)/tools/CharsetMapping
-GENCSSRCDIR = $(BUILDDIR)/tools/src/build/tools/charsetmapping
-GENCSEXT = $(GENSRCDIR)/sun/nio/cs/ext
+SUBDIRS = cs
+all build clean clobber::
+	$(SUBDIRS-loop)
 
-FILES_MAP = $(GENCSDATASRC)/sjis0213.map
-FILES_DAT = $(CLASSDESTDIR)/sun/nio/cs/ext/sjis0213.dat
-CHARSETMAPPING_JARFILE = $(BUILDTOOLJARDIR)/charsetmapping.jar
-
-$(FILES_DAT): $(FILES_MAP)
-	@$(prep-target)
-	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) \
-		$(FILES_MAP) $(FILES_DAT) sjis0213
-
-
-$(FILES_genout_extcs): \
-                $(GENCSDATASRC)/SingleByte-X.java.template  \
-		$(GENCSDATASRC)/DoubleByte-X.java.template \
-		$(GENCSDATASRC)/extsbcs $(GENCSDATASRC)/dbcs
-	@$(prep-target)
-	$(RM) -r $(GENCSEXT)
-	$(MKDIR) -p $(GENCSEXT)
-	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE)	$(GENCSDATASRC) $(GENCSEXT) extsbcs
-	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) euctw \
-		$(GENCSSRCDIR)/GenerateEUC_TW.java
-	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) dbcs
-
-$(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH): \
-  $(SHARE_SRC)/classes/sun/nio/cs/ext/$(SERVICE_DESCRIPTION_PATH)
-	$(install-file)
-
-$(CHARSETS_JAR): $(FILES_class) $(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH) $(FILES_DAT)
-	$(BOOT_JAR_CMD) cf0 $(CHARSETS_JAR) \
-	      -C $(CLASSDESTDIR) sun \
-	      -C $(CLASSDESTDIR) $(SERVICE_DESCRIPTION_PATH)  \
-	      $(BOOT_JAR_JFLAGS)
-	@$(java-vm-cleanup)
-
-clean::
-	$(RM) -r $(CLASSDESTDIR)
-	$(RM) $(CHARSETS_JAR)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/sun/nio/cs/FILES_java.gmk	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,400 @@
+#
+# Copyright 2005-2006 Sun Microsystems, Inc.  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.  Sun designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+#
+# Character converters for lib/charsets.jar
+#
+# Core character converters are built from make/java/java.
+#
+
+FILES_src = \
+	sun/io/ByteToCharDoubleByte.java \
+	sun/io/ByteToCharDBCS_ASCII.java \
+	sun/io/ByteToCharDBCS_EBCDIC.java \
+	sun/io/ByteToCharEUC.java \
+	sun/io/CharToByteDoubleByte.java \
+	sun/io/CharToByteDBCS_ASCII.java \
+	sun/io/CharToByteDBCS_EBCDIC.java \
+	sun/io/CharToByteEUC.java \
+	sun/io/ByteToCharBig5.java \
+	sun/io/ByteToCharBig5_Solaris.java \
+	sun/io/ByteToCharBig5_HKSCS.java \
+	sun/io/ByteToCharMS950_HKSCS.java \
+	sun/io/ByteToCharHKSCS.java \
+	sun/io/ByteToCharHKSCS_2001.java \
+	sun/io/ByteToCharGB18030.java \
+	sun/io/ByteToCharGB18030DB.java \
+	sun/io/ByteToCharCp037.java \
+	sun/io/ByteToCharCp1006.java \
+	sun/io/ByteToCharCp1025.java \
+	sun/io/ByteToCharCp1026.java \
+	sun/io/ByteToCharCp1046.java \
+	sun/io/ByteToCharCp1047.java \
+	sun/io/ByteToCharCp1097.java \
+	sun/io/ByteToCharCp1098.java \
+	sun/io/ByteToCharCp1112.java \
+	sun/io/ByteToCharCp1122.java \
+	sun/io/ByteToCharCp1123.java \
+	sun/io/ByteToCharCp1124.java \
+	sun/io/ByteToCharCp1140.java \
+	sun/io/ByteToCharCp1141.java \
+	sun/io/ByteToCharCp1142.java \
+	sun/io/ByteToCharCp1143.java \
+	sun/io/ByteToCharCp1144.java \
+	sun/io/ByteToCharCp1145.java \
+	sun/io/ByteToCharCp1146.java \
+	sun/io/ByteToCharCp1147.java \
+	sun/io/ByteToCharCp1148.java \
+	sun/io/ByteToCharCp1149.java \
+	sun/io/ByteToCharCp1255.java \
+	sun/io/ByteToCharCp1256.java \
+	sun/io/ByteToCharCp1258.java \
+	sun/io/ByteToCharCp1381.java \
+	sun/io/ByteToCharCp1383.java \
+	sun/io/ByteToCharCp273.java \
+	sun/io/ByteToCharCp277.java \
+	sun/io/ByteToCharCp278.java \
+	sun/io/ByteToCharCp280.java \
+	sun/io/ByteToCharCp284.java \
+	sun/io/ByteToCharCp285.java \
+	sun/io/ByteToCharCp297.java \
+	sun/io/ByteToCharCp33722.java \
+	sun/io/ByteToCharCp420.java \
+	sun/io/ByteToCharCp424.java \
+	sun/io/ByteToCharCp437.java \
+	sun/io/ByteToCharCp500.java \
+	sun/io/ByteToCharCp737.java \
+	sun/io/ByteToCharCp775.java \
+	sun/io/ByteToCharCp834.java \
+	sun/io/ByteToCharCp838.java \
+	sun/io/ByteToCharCp850.java \
+	sun/io/ByteToCharCp852.java \
+	sun/io/ByteToCharCp855.java \
+	sun/io/ByteToCharCp856.java \
+	sun/io/ByteToCharCp857.java \
+	sun/io/ByteToCharCp858.java \
+	sun/io/ByteToCharCp860.java \
+	sun/io/ByteToCharCp861.java \
+	sun/io/ByteToCharCp862.java \
+	sun/io/ByteToCharCp863.java \
+	sun/io/ByteToCharCp864.java \
+	sun/io/ByteToCharCp865.java \
+	sun/io/ByteToCharCp866.java \
+	sun/io/ByteToCharCp868.java \
+	sun/io/ByteToCharCp869.java \
+	sun/io/ByteToCharCp870.java \
+	sun/io/ByteToCharCp871.java \
+	sun/io/ByteToCharCp874.java \
+	sun/io/ByteToCharCp875.java \
+	sun/io/ByteToCharCp918.java \
+	sun/io/ByteToCharCp921.java \
+	sun/io/ByteToCharCp922.java \
+	sun/io/ByteToCharCp930.java \
+	sun/io/ByteToCharCp933.java \
+	sun/io/ByteToCharCp935.java \
+	sun/io/ByteToCharCp937.java \
+	sun/io/ByteToCharCp939.java \
+	sun/io/ByteToCharCp942.java \
+	sun/io/ByteToCharCp942C.java \
+	sun/io/ByteToCharCp943.java \
+	sun/io/ByteToCharCp943C.java \
+	sun/io/ByteToCharCp948.java \
+	sun/io/ByteToCharCp949.java \
+	sun/io/ByteToCharCp949C.java \
+	sun/io/ByteToCharCp950.java \
+	sun/io/ByteToCharCp964.java \
+	sun/io/ByteToCharCp970.java \
+	sun/io/ByteToCharJIS0201.java \
+	sun/io/ByteToCharJIS0208.java \
+	sun/io/ByteToCharJIS0208_Solaris.java \
+	sun/io/ByteToCharJIS0212.java \
+	sun/io/ByteToCharJIS0212_Solaris.java \
+	sun/io/ByteToCharEUC_CN.java \
+	sun/io/ByteToCharEUC_JP.java \
+	sun/io/ByteToCharEUC_JP_LINUX.java \
+	sun/io/ByteToCharEUC_JP_Solaris.java \
+	sun/io/ByteToCharEUC_KR.java \
+	sun/io/ByteToCharEUC_TW.java \
+	sun/io/ByteToCharSJIS.java \
+	sun/io/ByteToCharPCK.java \
+	sun/io/ByteToCharGBK.java \
+	sun/io/ByteToCharISCII91.java \
+	sun/io/ByteToCharISO2022.java \
+	sun/io/ByteToCharISO2022CN.java \
+	sun/io/ByteToCharISO2022JP.java \
+	sun/io/ByteToCharISO2022KR.java \
+	sun/io/ByteToCharISO8859_3.java \
+	sun/io/ByteToCharISO8859_6.java \
+	sun/io/ByteToCharISO8859_8.java \
+	sun/io/ByteToCharJISAutoDetect.java \
+	sun/io/ByteToCharJohab.java \
+	sun/io/ByteToCharMS874.java \
+	sun/io/ByteToCharMS932.java \
+	sun/io/ByteToCharMS936.java \
+	sun/io/ByteToCharMS949.java \
+	sun/io/ByteToCharMS950.java \
+	sun/io/ByteToCharMacArabic.java \
+	sun/io/ByteToCharMacCentralEurope.java \
+	sun/io/ByteToCharMacCroatian.java \
+	sun/io/ByteToCharMacCyrillic.java \
+	sun/io/ByteToCharMacDingbat.java \
+	sun/io/ByteToCharMacGreek.java \
+	sun/io/ByteToCharMacHebrew.java \
+	sun/io/ByteToCharMacIceland.java \
+	sun/io/ByteToCharMacRoman.java \
+	sun/io/ByteToCharMacRomania.java \
+	sun/io/ByteToCharMacSymbol.java \
+	sun/io/ByteToCharMacThai.java \
+	sun/io/ByteToCharMacTurkish.java \
+	sun/io/ByteToCharMacUkraine.java \
+	sun/io/ByteToCharTIS620.java \
+	sun/io/CharToByteBig5.java \
+	sun/io/CharToByteBig5_Solaris.java \
+	sun/io/CharToByteBig5_HKSCS.java \
+	sun/io/CharToByteHKSCS.java \
+	sun/io/CharToByteHKSCS_2001.java \
+	sun/io/CharToByteMS950_HKSCS.java \
+	sun/io/CharToByteGB18030.java \
+	sun/io/CharToByteCp037.java \
+	sun/io/CharToByteCp1006.java \
+	sun/io/CharToByteCp1025.java \
+	sun/io/CharToByteCp1026.java \
+	sun/io/CharToByteCp1046.java \
+	sun/io/CharToByteCp1047.java \
+	sun/io/CharToByteCp1097.java \
+	sun/io/CharToByteCp1098.java \
+	sun/io/CharToByteCp1112.java \
+	sun/io/CharToByteCp1122.java \
+	sun/io/CharToByteCp1123.java \
+	sun/io/CharToByteCp1124.java \
+	sun/io/CharToByteCp1140.java \
+	sun/io/CharToByteCp1141.java \
+	sun/io/CharToByteCp1142.java \
+	sun/io/CharToByteCp1143.java \
+	sun/io/CharToByteCp1144.java \
+	sun/io/CharToByteCp1145.java \
+	sun/io/CharToByteCp1146.java \
+	sun/io/CharToByteCp1147.java \
+	sun/io/CharToByteCp1148.java \
+	sun/io/CharToByteCp1149.java \
+	sun/io/CharToByteCp1255.java \
+	sun/io/CharToByteCp1256.java \
+	sun/io/CharToByteCp1258.java \
+	sun/io/CharToByteCp1381.java \
+	sun/io/CharToByteCp1383.java \
+	sun/io/CharToByteCp273.java \
+	sun/io/CharToByteCp277.java \
+	sun/io/CharToByteCp278.java \
+	sun/io/CharToByteCp280.java \
+	sun/io/CharToByteCp284.java \
+	sun/io/CharToByteCp285.java \
+	sun/io/CharToByteCp297.java \
+	sun/io/CharToByteCp33722.java \
+	sun/io/CharToByteCp420.java \
+	sun/io/CharToByteCp424.java \
+	sun/io/CharToByteCp437.java \
+	sun/io/CharToByteCp500.java \
+	sun/io/CharToByteCp737.java \
+	sun/io/CharToByteCp775.java \
+	sun/io/CharToByteCp834.java \
+	sun/io/CharToByteCp838.java \
+	sun/io/CharToByteCp850.java \
+	sun/io/CharToByteCp852.java \
+	sun/io/CharToByteCp855.java \
+	sun/io/CharToByteCp856.java \
+	sun/io/CharToByteCp857.java \
+	sun/io/CharToByteCp858.java \
+	sun/io/CharToByteCp860.java \
+	sun/io/CharToByteCp861.java \
+	sun/io/CharToByteCp862.java \
+	sun/io/CharToByteCp863.java \
+	sun/io/CharToByteCp864.java \
+	sun/io/CharToByteCp865.java \
+	sun/io/CharToByteCp866.java \
+	sun/io/CharToByteCp868.java \
+	sun/io/CharToByteCp869.java \
+	sun/io/CharToByteCp870.java \
+	sun/io/CharToByteCp871.java \
+	sun/io/CharToByteCp874.java \
+	sun/io/CharToByteCp875.java \
+	sun/io/CharToByteCp918.java \
+	sun/io/CharToByteCp921.java \
+	sun/io/CharToByteCp922.java \
+	sun/io/CharToByteCp930.java \
+	sun/io/CharToByteCp933.java \
+	sun/io/CharToByteCp935.java \
+	sun/io/CharToByteCp937.java \
+	sun/io/CharToByteCp939.java \
+	sun/io/CharToByteCp942.java \
+	sun/io/CharToByteCp942C.java \
+	sun/io/CharToByteCp943.java \
+	sun/io/CharToByteCp943C.java \
+	sun/io/CharToByteCp948.java \
+	sun/io/CharToByteCp949.java \
+	sun/io/CharToByteCp949C.java \
+	sun/io/CharToByteCp950.java \
+	sun/io/CharToByteCp964.java \
+	sun/io/CharToByteCp970.java \
+	sun/io/CharToByteJIS0201.java \
+	sun/io/CharToByteJIS0208.java \
+	sun/io/CharToByteJIS0208_Solaris.java \
+	sun/io/CharToByteJIS0212.java \
+	sun/io/CharToByteJIS0212_Solaris.java \
+	sun/io/CharToByteEUC_CN.java \
+	sun/io/CharToByteEUC_JP.java \
+	sun/io/CharToByteEUC_JP_LINUX.java \
+	sun/io/CharToByteEUC_JP_Solaris.java \
+	sun/io/CharToByteEUC_KR.java \
+	sun/io/CharToByteEUC_TW.java \
+	sun/io/CharToByteSJIS.java \
+	sun/io/CharToBytePCK.java \
+	sun/io/CharToByteGBK.java \
+	sun/io/CharToByteISCII91.java \
+	sun/io/CharToByteISO2022.java \
+	sun/io/CharToByteISO2022CN_CNS.java \
+	sun/io/CharToByteISO2022CN_GB.java \
+	sun/io/CharToByteISO2022JP.java \
+	sun/io/CharToByteISO2022KR.java \
+	sun/io/CharToByteISO8859_3.java \
+	sun/io/CharToByteISO8859_6.java \
+	sun/io/CharToByteISO8859_8.java \
+	sun/io/CharToByteJohab.java \
+	sun/io/CharToByteMS874.java \
+	sun/io/CharToByteMS932.java \
+	sun/io/CharToByteMS936.java \
+	sun/io/CharToByteMS949.java \
+	sun/io/CharToByteMS950.java \
+	sun/io/CharToByteMacArabic.java \
+	sun/io/CharToByteMacCentralEurope.java \
+	sun/io/CharToByteMacCroatian.java \
+	sun/io/CharToByteMacCyrillic.java \
+	sun/io/CharToByteMacDingbat.java \
+	sun/io/CharToByteMacGreek.java \
+	sun/io/CharToByteMacHebrew.java \
+	sun/io/CharToByteMacIceland.java \
+	sun/io/CharToByteMacRoman.java \
+	sun/io/CharToByteMacRomania.java \
+	sun/io/CharToByteMacSymbol.java \
+	sun/io/CharToByteMacThai.java \
+	sun/io/CharToByteMacTurkish.java \
+	sun/io/CharToByteMacUkraine.java \
+	sun/io/CharToByteTIS620.java
+
+FILES_gen_extcs = \
+	sun/nio/cs/ext/IBM037.java \
+	sun/nio/cs/ext/IBM1006.java \
+	sun/nio/cs/ext/IBM1025.java \
+	sun/nio/cs/ext/IBM1026.java \
+	sun/nio/cs/ext/IBM1046.java \
+	sun/nio/cs/ext/IBM1047.java \
+	sun/nio/cs/ext/IBM1097.java \
+	sun/nio/cs/ext/IBM1098.java \
+	sun/nio/cs/ext/IBM1112.java \
+	sun/nio/cs/ext/IBM1122.java \
+	sun/nio/cs/ext/IBM1123.java \
+	sun/nio/cs/ext/IBM1124.java \
+	sun/nio/cs/ext/IBM1140.java \
+	sun/nio/cs/ext/IBM1141.java \
+	sun/nio/cs/ext/IBM1142.java \
+	sun/nio/cs/ext/IBM1143.java \
+	sun/nio/cs/ext/IBM1144.java \
+	sun/nio/cs/ext/IBM1145.java \
+	sun/nio/cs/ext/IBM1146.java \
+	sun/nio/cs/ext/IBM1147.java \
+	sun/nio/cs/ext/IBM1148.java \
+	sun/nio/cs/ext/IBM1149.java \
+	sun/nio/cs/ext/IBM273.java \
+	sun/nio/cs/ext/IBM277.java \
+	sun/nio/cs/ext/IBM278.java \
+	sun/nio/cs/ext/IBM280.java \
+	sun/nio/cs/ext/IBM284.java \
+	sun/nio/cs/ext/IBM285.java \
+	sun/nio/cs/ext/IBM297.java \
+	sun/nio/cs/ext/IBM420.java \
+	sun/nio/cs/ext/IBM424.java \
+	sun/nio/cs/ext/IBM500.java \
+	sun/nio/cs/ext/IBM838.java \
+	sun/nio/cs/ext/IBM856.java \
+	sun/nio/cs/ext/IBM860.java \
+	sun/nio/cs/ext/IBM861.java \
+	sun/nio/cs/ext/IBM863.java \
+	sun/nio/cs/ext/IBM864.java \
+	sun/nio/cs/ext/IBM865.java \
+	sun/nio/cs/ext/IBM868.java \
+	sun/nio/cs/ext/IBM869.java \
+	sun/nio/cs/ext/IBM870.java \
+	sun/nio/cs/ext/IBM871.java \
+	sun/nio/cs/ext/IBM875.java \
+	sun/nio/cs/ext/IBM918.java \
+	sun/nio/cs/ext/IBM921.java \
+	sun/nio/cs/ext/IBM922.java \
+	sun/nio/cs/ext/ISO_8859_11.java \
+	sun/nio/cs/ext/ISO_8859_3.java \
+	sun/nio/cs/ext/ISO_8859_6.java \
+	sun/nio/cs/ext/ISO_8859_8.java \
+	sun/nio/cs/ext/MS1255.java \
+	sun/nio/cs/ext/MS1256.java \
+	sun/nio/cs/ext/MS1258.java \
+	sun/nio/cs/ext/MS874.java \
+	sun/nio/cs/ext/MacArabic.java \
+	sun/nio/cs/ext/MacCentralEurope.java \
+	sun/nio/cs/ext/MacCroatian.java \
+	sun/nio/cs/ext/MacCyrillic.java \
+	sun/nio/cs/ext/MacDingbat.java \
+	sun/nio/cs/ext/MacGreek.java \
+	sun/nio/cs/ext/MacHebrew.java \
+	sun/nio/cs/ext/MacIceland.java \
+	sun/nio/cs/ext/MacRoman.java \
+	sun/nio/cs/ext/MacRomania.java \
+	sun/nio/cs/ext/MacSymbol.java \
+	sun/nio/cs/ext/MacThai.java \
+	sun/nio/cs/ext/MacTurkish.java \
+	sun/nio/cs/ext/MacUkraine.java \
+	sun/nio/cs/ext/TIS_620.java \
+        sun/nio/cs/ext/EUC_TWMapping.java \
+	sun/nio/cs/ext/IBM1381.java \
+	sun/nio/cs/ext/IBM1383.java \
+	sun/nio/cs/ext/IBM930.java \
+	sun/nio/cs/ext/IBM933.java \
+	sun/nio/cs/ext/IBM935.java \
+	sun/nio/cs/ext/IBM937.java \
+	sun/nio/cs/ext/IBM939.java \
+	sun/nio/cs/ext/IBM942.java \
+	sun/nio/cs/ext/IBM943.java \
+	sun/nio/cs/ext/IBM948.java \
+	sun/nio/cs/ext/IBM949.java \
+	sun/nio/cs/ext/IBM950.java \
+	sun/nio/cs/ext/IBM970.java \
+	sun/nio/cs/ext/EUC_CN.java \
+	sun/nio/cs/ext/EUC_KR.java \
+	sun/nio/cs/ext/Johab.java \
+	sun/nio/cs/ext/MS932.java \
+	sun/nio/cs/ext/MS936.java \
+	sun/nio/cs/ext/MS949.java \
+	sun/nio/cs/ext/MS950.java \
+	sun/nio/cs/ext/GBK.java
+
+FILES_java = $(FILES_src) $(FILES_gen_extcs)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/sun/nio/cs/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,112 @@
+#
+# Copyright 1996-2008 Sun Microsystems, Inc.  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.  Sun designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+# CA 95054 USA or visit www.sun.com if you need additional information or
+# have any questions.
+#
+
+#
+# Makefile for character converters.
+#
+
+BUILDDIR = ../../..
+
+# charsets should be separated from nio module 
+MODULE  = charsets
+PACKAGE = sun.nio
+PRODUCT = sun
+
+# This re-directs all the class files to a separate location
+CLASSDESTDIR = $(TEMPDIR)/classes
+
+OTHER_JAVACFLAGS += -Xlint:serial -Werror
+include $(BUILDDIR)/common/Defs.gmk
+
+#
+# Files
+#
+include FILES_java.gmk
+AUTO_FILES_JAVA_DIRS = sun/nio/cs/ext
+
+# For Cygwin, command line arguments that are paths must be converted to
+# windows style paths. These paths cannot be used as targets, however, because 
+# the ":" in them  will interfere with GNU Make rules, generating "multiple
+# target pattern" errors.
+
+# this define is for the rule:
+CHARSETS_JAR = $(LIBDIR)/charsets.jar
+
+# extcs
+FILES_genout_extcs = $(FILES_gen_extcs:%.java=$(GENSRCDIR)/%.java)
+
+#
+# Rules
+#
+include $(BUILDDIR)/common/Classes.gmk
+
+build: $(FILES_genout_extcs) $(CHARSETS_JAR)
+
+#
+# Extra rules to build character converters.
+
+SERVICE_DESCRIPTION = java.nio.charset.spi.CharsetProvider
+SERVICE_DESCRIPTION_PATH = META-INF/services/$(SERVICE_DESCRIPTION)
+
+GENCSDATASRC = $(BUILDDIR)/tools/CharsetMapping
+GENCSSRCDIR = $(BUILDDIR)/tools/src/build/tools/charsetmapping
+GENCSEXT = $(GENSRCDIR)/sun/nio/cs/ext
+
+FILES_MAP = $(GENCSDATASRC)/sjis0213.map
+FILES_DAT = $(CLASSDESTDIR)/sun/nio/cs/ext/sjis0213.dat
+CHARSETMAPPING_JARFILE = $(BUILDTOOLJARDIR)/charsetmapping.jar
+
+$(FILES_DAT): $(FILES_MAP)
+	@$(prep-target)
+	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) \
+		$(FILES_MAP) $(FILES_DAT) sjis0213
+
+
+$(FILES_genout_extcs): \
+                $(GENCSDATASRC)/SingleByte-X.java.template  \
+		$(GENCSDATASRC)/DoubleByte-X.java.template \
+		$(GENCSDATASRC)/extsbcs $(GENCSDATASRC)/dbcs
+	@$(prep-target)
+	$(RM) -r $(GENCSEXT)
+	$(MKDIR) -p $(GENCSEXT)
+	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE)	$(GENCSDATASRC) $(GENCSEXT) extsbcs
+	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) euctw \
+		$(GENCSSRCDIR)/GenerateEUC_TW.java
+	$(BOOT_JAVA_CMD) -jar $(CHARSETMAPPING_JARFILE) $(GENCSDATASRC) $(GENCSEXT) dbcs
+
+$(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH): \
+  $(SHARE_SRC)/classes/sun/nio/cs/ext/$(SERVICE_DESCRIPTION_PATH)
+	$(install-file)
+
+$(CHARSETS_JAR): $(FILES_class) $(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH) $(FILES_DAT)
+	$(BOOT_JAR_CMD) cf0 $(CHARSETS_JAR) \
+	      -C $(CLASSDESTDIR) sun \
+	      -C $(CLASSDESTDIR) $(SERVICE_DESCRIPTION_PATH)  \
+	      $(BOOT_JAR_JFLAGS)
+	@$(java-vm-cleanup)
+
+clean::
+	$(RM) -r $(CLASSDESTDIR)
+	$(RM) $(CHARSETS_JAR)
--- a/jdk/make/sun/org/mozilla/javascript/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/org/mozilla/javascript/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../../..
+MODULE  = scripting-rhino
 PACKAGE = sun.org.mozilla.javascript.internal
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/pisces/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/pisces/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = java2d
 PACKAGE = sun.pisces
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/rmi/cgi/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/rmi/cgi/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,8 @@
 #
 
 BUILDDIR = ../../..
+# java-rmi.cgi is a JDK tool
+MODULE  = tools
 PACKAGE = sun.rmi
 PRODUCT = sun
 PROGRAM = java-rmi
--- a/jdk/make/sun/rmi/oldtools/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/rmi/oldtools/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE   = oldjavac
 PRODUCT	 = oldjavac
 
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/rmi/registry/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/rmi/registry/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = rmi
 PACKAGE = sun.rmi.registry
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
@@ -48,3 +49,7 @@
 #
 include $(BUILDDIR)/common/Classes.gmk
 
+build: rmiregistry
+
+rmiregistry:
+	$(call make-launcher, rmiregistry, sun.rmi.registry.RegistryImpl, , )
--- a/jdk/make/sun/rmi/rmi/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/rmi/rmi/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = rmi
 PACKAGE = sun.rmi
 PRODUCT = sun
 LIBRARY = rmi
@@ -124,7 +125,7 @@
 
 $(BINDIR)/java-rmi.cgi: $(PLATFORM_SRC)/bin/java-rmi.cgi.sh
 	$(install-file)
-	$(CHMOD) a+x $@
+	$(call chmod-file, a+x)
 
 bin.clean:
 	$(RM) $(BINDIR)/java-rmi.cgi
--- a/jdk/make/sun/rmi/rmic/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/rmi/rmic/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = rmic
 PACKAGE = sun.rmi.rmic
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/rmi/rmid/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/rmi/rmid/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,11 +29,12 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = rmi-activation
 PACKAGE = sun.rmi.activation
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
 
-build: stubs 
+build: stubs rmid
 
 #
 # Resources
@@ -75,4 +76,5 @@
 #
 include $(BUILDDIR)/common/Classes.gmk
 
-
+rmid:
+	$(call make-launcher, rmid, sun.rmi.server.Activation, , )
--- a/jdk/make/sun/security/ec/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/security/ec/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -89,6 +89,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = security-sunec
 PACKAGE = sun.security.ec
 PRODUCT = sun
 
@@ -308,7 +309,7 @@
 else
 $(JAR_DESTFILE): $(SIGNED_DIR)/sunec.jar
 endif
-	$(install-file)
+	$(install-non-module-file)
 
 ifndef OPENJDK
 install-prebuilt:
--- a/jdk/make/sun/security/jgss/wrapper/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/security/jgss/wrapper/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../../../..
+MODULE  = security-kerberos
 PACKAGE = sun.security.jgss.wrapper
 PRODUCT = sun
 
--- a/jdk/make/sun/security/krb5/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/security/krb5/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = security-kerberos
 PACKAGE = sun.security.krb5
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
@@ -77,3 +78,10 @@
 else
   OTHER_LDLIBS = -ldl $(JVMLIB)
 endif
+
+build:
+ifeq ($(PLATFORM),windows)
+	$(call make-launcher, kinit, sun.security.krb5.internal.tools.Kinit, , )
+	$(call make-launcher, klist, sun.security.krb5.internal.tools.Klist, , )
+	$(call make-launcher, ktab, sun.security.krb5.internal.tools.Ktab, , )
+endif
--- a/jdk/make/sun/security/mscapi/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/security/mscapi/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -89,6 +89,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = security-sunmscapi
 PACKAGE = sun.security.mscapi
 LIBRARY = sunmscapi
 PRODUCT = sun
@@ -271,7 +272,7 @@
 else
 $(JAR_DESTFILE): $(SIGNED_DIR)/sunmscapi.jar
 endif
-	$(install-file)
+	$(install-non-module-file)
 
 ifndef OPENJDK
 install-prebuilt:
--- a/jdk/make/sun/security/pkcs11/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/security/pkcs11/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -89,6 +89,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = security-sunpkcs11
 PACKAGE = sun.security.pkcs11
 LIBRARY = j2pkcs11
 PRODUCT = sun
@@ -161,6 +162,16 @@
   OTHER_LDLIBS = -ldl $(JVMLIB)
 endif
 
+# Other config files
+SUNPKCS11_CFG   =
+
+ifeq ($(PLATFORM), solaris)
+SUNPKCS11_CFG   = sunpkcs11-cfg
+endif # PLATFORM
+
+SUNPKCS11_CFG_SRC   = $(TOPDIR)/src/share/lib/security/sunpkcs11-solaris.cfg
+SUNPKCS11_CFG_BUILD = $(LIBDIR)/security/sunpkcs11-solaris.cfg
+
 #
 # We use a variety of subdirectories in the $(TEMPDIR) depending on what
 # part of the build we're doing.  Both OPENJDK/JDK builds are initially
@@ -174,12 +185,17 @@
 #
 
 ifdef OPENJDK
-all: build-jar install-jar
+all: $(SUNPKCS11_CFG) build-jar install-jar
 else
-all: build-jar install-prebuilt
+all: $(SUNPKCS11_CFG) build-jar install-prebuilt
 	$(build-warning)
 endif
 
+sunpkcs11-cfg: $(SUNPKCS11_CFG_BUILD)
+
+$(SUNPKCS11_CFG_BUILD): $(SUNPKCS11_CFG_SRC)
+	$(install-file)
+
 include $(BUILDDIR)/javax/crypto/Defs-jce.gmk
 
 
@@ -271,7 +287,7 @@
 else
 $(JAR_DESTFILE): $(SIGNED_DIR)/sunpkcs11.jar
 endif
-	$(install-file)
+	$(install-non-module-file)
 
 ifndef OPENJDK
 install-prebuilt:
@@ -287,6 +303,7 @@
 
 clobber clean::
 	$(RM) -r $(JAR_DESTFILE) $(TEMPDIR) $(JCE_BUILD_DIR)
+	$(RM) $(SUNPKCS11_CFG_BUILD) 
 
 .PHONY: build-jar jar install-jar
 ifndef OPENJDK
--- a/jdk/make/sun/security/smartcardio/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/security/smartcardio/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = security-smartcardio
 PACKAGE = sun.security.smartcardio
 LIBRARY = j2pcsc
 PRODUCT = sun
--- a/jdk/make/sun/security/tools/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/security/tools/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../../..
+MODULE  = security-tools
 PACKAGE = sun.security.tools
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
@@ -44,3 +45,7 @@
 #
 include $(BUILDDIR)/common/Classes.gmk
 
+build:
+	$(call make-launcher, keytool, sun.security.tools.KeyTool, , )
+	$(call make-launcher, policytool, sun.security.tools.PolicyTool, , )
+
--- a/jdk/make/sun/serialver/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/serialver/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = serialver
 PACKAGE = sun.tools.serialver
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/splashscreen/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/splashscreen/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = awt
 PACKAGE = sun.awt
 LIBRARY = splashscreen
 PRODUCT = sun
--- a/jdk/make/sun/text/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/text/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 
 BUILDDIR = ../..
 
+MODULE  = localedata
 PACKAGE = sun.text
 PRODUCT = sun
 
--- a/jdk/make/sun/tools/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/tools/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -28,6 +28,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = tools
 PACKAGE = sun.tools
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
--- a/jdk/make/sun/tracing/dtrace/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/tracing/dtrace/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -27,6 +27,7 @@
 # Makefile for building dtrace extension
 #
 BUILDDIR = ../../..
+MODULE  = tracing
 PACKAGE = sun.tracing.dtrace
 LIBRARY = jsdt
 PRODUCT = sun
--- a/jdk/make/sun/xawt/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/make/sun/xawt/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 #
 
 BUILDDIR = ../..
+MODULE  = awt
 PACKAGE = sun.awt.X11
 LIBRARY = mawt
 LIBRARY_OUTPUT = xawt
--- a/jdk/src/share/classes/java/lang/Deprecated.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/java/lang/Deprecated.java	Fri Feb 05 12:26:35 2010 -0800
@@ -26,6 +26,7 @@
 package java.lang;
 
 import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
 
 /**
  * A program element annotated &#64;Deprecated is one that programmers
@@ -38,5 +39,6 @@
  */
 @Documented
 @Retention(RetentionPolicy.RUNTIME)
+@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
 public @interface Deprecated {
 }
--- a/jdk/src/share/classes/java/lang/Error.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/java/lang/Error.java	Fri Feb 05 12:26:35 2010 -0800
@@ -26,27 +26,31 @@
 package java.lang;
 
 /**
- * An <code>Error</code> is a subclass of <code>Throwable</code>
+ * An {@code Error} is a subclass of {@code Throwable}
  * that indicates serious problems that a reasonable application
  * should not try to catch. Most such errors are abnormal conditions.
- * The <code>ThreadDeath</code> error, though a "normal" condition,
- * is also a subclass of <code>Error</code> because most applications
+ * The {@code ThreadDeath} error, though a "normal" condition,
+ * is also a subclass of {@code Error} because most applications
  * should not try to catch it.
  * <p>
- * A method is not required to declare in its <code>throws</code>
- * clause any subclasses of <code>Error</code> that might be thrown
+ * A method is not required to declare in its {@code throws}
+ * clause any subclasses of {@code Error} that might be thrown
  * during the execution of the method but not caught, since these
  * errors are abnormal conditions that should never occur.
  *
+ * That is, {@code Error} and its subclasses are regarded as unchecked
+ * exceptions for the purposes of compile-time checking of exceptions.
+ *
  * @author  Frank Yellin
  * @see     java.lang.ThreadDeath
+ * @jls3 11.2 Compile-Time Checking of Exceptions
  * @since   JDK1.0
  */
 public class Error extends Throwable {
     static final long serialVersionUID = 4980196508277280342L;
 
     /**
-     * Constructs a new error with <code>null</code> as its detail message.
+     * Constructs a new error with {@code null} as its detail message.
      * The cause is not initialized, and may subsequently be initialized by a
      * call to {@link #initCause}.
      */
@@ -69,7 +73,7 @@
     /**
      * Constructs a new error with the specified detail message and
      * cause.  <p>Note that the detail message associated with
-     * <code>cause</code> is <i>not</i> automatically incorporated in
+     * {@code cause} is <i>not</i> automatically incorporated in
      * this error's detail message.
      *
      * @param  message the detail message (which is saved for later retrieval
--- a/jdk/src/share/classes/java/lang/Exception.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/java/lang/Exception.java	Fri Feb 05 12:26:35 2010 -0800
@@ -26,19 +26,27 @@
 package java.lang;
 
 /**
- * The class <code>Exception</code> and its subclasses are a form of
- * <code>Throwable</code> that indicates conditions that a reasonable
+ * The class {@code Exception} and its subclasses are a form of
+ * {@code Throwable} that indicates conditions that a reasonable
  * application might want to catch.
  *
+ * <p>The class {@code Exception} and any subclasses that are not also
+ * subclasses of {@link RuntimeException} are <em>checked
+ * exceptions</em>.  Checked exceptions need to be declared in a
+ * method or constructor's {@code throws} clause if they can be thrown
+ * by the execution of the method or constructor and propagate outside
+ * the method or constructor boundary.
+ *
  * @author  Frank Yellin
  * @see     java.lang.Error
+ * @jls3 11.2 Compile-Time Checking of Exceptions
  * @since   JDK1.0
  */
 public class Exception extends Throwable {
     static final long serialVersionUID = -3387516993124229948L;
 
     /**
-     * Constructs a new exception with <code>null</code> as its detail message.
+     * Constructs a new exception with {@code null} as its detail message.
      * The cause is not initialized, and may subsequently be initialized by a
      * call to {@link #initCause}.
      */
@@ -61,7 +69,7 @@
     /**
      * Constructs a new exception with the specified detail message and
      * cause.  <p>Note that the detail message associated with
-     * <code>cause</code> is <i>not</i> automatically incorporated in
+     * {@code cause} is <i>not</i> automatically incorporated in
      * this exception's detail message.
      *
      * @param  message the detail message (which is saved for later retrieval
--- a/jdk/src/share/classes/java/lang/RuntimeException.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/java/lang/RuntimeException.java	Fri Feb 05 12:26:35 2010 -0800
@@ -26,22 +26,24 @@
 package java.lang;
 
 /**
- * <code>RuntimeException</code> is the superclass of those
+ * {@code RuntimeException} is the superclass of those
  * exceptions that can be thrown during the normal operation of the
  * Java Virtual Machine.
- * <p>
- * A method is not required to declare in its <code>throws</code>
- * clause any subclasses of <code>RuntimeException</code> that might
- * be thrown during the execution of the method but not caught.
  *
+ * <p>{@code RuntimeException} and its subclasses are <em>unchecked
+ * exceptions</em>.  Unchecked exceptions do <em>not</em> need to be
+ * declared in a method or constructor's {@code throws} clause if they
+ * can be thrown by the execution of the method or constructor and
+ * propagate outside the method or constructor boundary.
  *
  * @author  Frank Yellin
+ * @jls3 11.2 Compile-Time Checking of Exceptions
  * @since   JDK1.0
  */
 public class RuntimeException extends Exception {
     static final long serialVersionUID = -7034897190745766939L;
 
-    /** Constructs a new runtime exception with <code>null</code> as its
+    /** Constructs a new runtime exception with {@code null} as its
      * detail message.  The cause is not initialized, and may subsequently be
      * initialized by a call to {@link #initCause}.
      */
@@ -63,7 +65,7 @@
     /**
      * Constructs a new runtime exception with the specified detail message and
      * cause.  <p>Note that the detail message associated with
-     * <code>cause</code> is <i>not</i> automatically incorporated in
+     * {@code cause} is <i>not</i> automatically incorporated in
      * this runtime exception's detail message.
      *
      * @param  message the detail message (which is saved for later retrieval
--- a/jdk/src/share/classes/java/lang/SuppressWarnings.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/java/lang/SuppressWarnings.java	Fri Feb 05 12:26:35 2010 -0800
@@ -26,7 +26,6 @@
 package java.lang;
 
 import java.lang.annotation.*;
-import java.lang.annotation.ElementType;
 import static java.lang.annotation.ElementType.*;
 
 /**
@@ -45,7 +44,7 @@
  * @since 1.5
  * @author Josh Bloch
  */
-@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
+@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, TYPE_PARAMETER})
 @Retention(RetentionPolicy.SOURCE)
 public @interface SuppressWarnings {
     /**
--- a/jdk/src/share/classes/java/lang/Throwable.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/java/lang/Throwable.java	Fri Feb 05 12:26:35 2010 -0800
@@ -34,6 +34,11 @@
  * this class or one of its subclasses can be the argument type in a
  * <code>catch</code> clause.
  *
+ * For the purposes of compile-time checking of exceptions, {@code
+ * Throwable} and any subclass of {@code Throwable} that is not also a
+ * subclass of either {@link RuntimeException} or {@link Error} are
+ * regarded as checked exceptions.
+ *
  * <p>Instances of two subclasses, {@link java.lang.Error} and
  * {@link java.lang.Exception}, are conventionally used to indicate
  * that exceptional situations have occurred. Typically, these instances
@@ -142,6 +147,7 @@
  * @author  unascribed
  * @author  Josh Bloch (Added exception chaining and programmatic access to
  *          stack trace in 1.4.)
+ * @jls3 11.2 Compile-Time Checking of Exceptions
  * @since JDK1.0
  */
 public class Throwable implements Serializable {
--- a/jdk/src/share/classes/java/util/NavigableMap.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/java/util/NavigableMap.java	Fri Feb 05 12:26:35 2010 -0800
@@ -298,7 +298,7 @@
      * Returns a view of the portion of this map whose keys range from
      * {@code fromKey} to {@code toKey}.  If {@code fromKey} and
      * {@code toKey} are equal, the returned map is empty unless
-     * {@code fromExclusive} and {@code toExclusive} are both true.  The
+     * {@code fromInclusive} and {@code toInclusive} are both true.  The
      * returned map is backed by this map, so changes in the returned map are
      * reflected in this map, and vice-versa.  The returned map supports all
      * optional map operations that this map supports.
--- a/jdk/src/share/classes/java/util/NavigableSet.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/java/util/NavigableSet.java	Fri Feb 05 12:26:35 2010 -0800
@@ -192,7 +192,7 @@
      * Returns a view of the portion of this set whose elements range from
      * {@code fromElement} to {@code toElement}.  If {@code fromElement} and
      * {@code toElement} are equal, the returned set is empty unless {@code
-     * fromExclusive} and {@code toExclusive} are both true.  The returned set
+     * fromInclusive} and {@code toInclusive} are both true.  The returned set
      * is backed by this set, so changes in the returned set are reflected in
      * this set, and vice-versa.  The returned set supports all optional set
      * operations that this set supports.
--- a/jdk/src/share/classes/sun/nio/fs/AbstractPath.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/sun/nio/fs/AbstractPath.java	Fri Feb 05 12:26:35 2010 -0800
@@ -256,8 +256,8 @@
                 }
                 if (option == null)
                     throw new NullPointerException();
-                throw new IllegalArgumentException("'" + option +
-                    "' is not a valid copy option");
+                throw new UnsupportedOperationException("'" + option +
+                    "' is not a recognized copy option");
             }
             return result;
         }
@@ -279,9 +279,21 @@
         if (attrs.isSymbolicLink())
             throw new IOException("Copying of symbolic links not supported");
 
-        // delete target file
-        if (opts.replaceExisting)
-            target.deleteIfExists();
+        // check if target exists
+        boolean exists;
+        if (opts.replaceExisting) {
+            try {
+                target.deleteIfExists();
+                exists = false;
+            } catch (DirectoryNotEmptyException x) {
+                // let exception translate to FileAlreadyExistsException (6895012)
+                exists = true;
+            }
+        } else {
+            exists = target.exists();
+        }
+        if (exists)
+            throw new FileAlreadyExistsException(target.toString());
 
         // create directory or file
         if (attrs.isDirectory()) {
@@ -318,7 +330,7 @@
         ReadableByteChannel rbc = newByteChannel();
         try {
             // open target file for writing
-            SeekableByteChannel sbc = target.newByteChannel(CREATE, WRITE);
+            SeekableByteChannel sbc = target.newByteChannel(CREATE_NEW, WRITE);
 
             // simple copy loop
             try {
--- a/jdk/src/share/classes/sun/nio/fs/AbstractWatchKey.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/sun/nio/fs/AbstractWatchKey.java	Fri Feb 05 12:26:35 2010 -0800
@@ -88,26 +88,24 @@
     final void signalEvent(WatchEvent.Kind<?> kind, Object context) {
         synchronized (this) {
             int size = events.size();
-            if (size > 1) {
-                // don't let list get too big
-                if (size >= MAX_EVENT_LIST_SIZE) {
-                    kind = StandardWatchEventKind.OVERFLOW;
-                    context = null;
+            if (size > 0) {
+                // if the previous event is an OVERFLOW event or this is a
+                // repeated event then we simply increment the counter
+                WatchEvent<?> prev = events.get(size-1);
+                if ((prev.kind() == StandardWatchEventKind.OVERFLOW) ||
+                    ((kind == prev.kind() &&
+                     Objects.equals(context, prev.context()))))
+                {
+                    ((Event<?>)prev).increment();
+                    return;
                 }
 
-                // repeated event
-                WatchEvent<?> prev = events.get(size-1);
-                if (kind == prev.kind()) {
-                    boolean isRepeat;
-                    if (context == null) {
-                        isRepeat = (prev.context() == null);
-                    } else {
-                        isRepeat = context.equals(prev.context());
-                    }
-                    if (isRepeat) {
-                        ((Event<?>)prev).increment();
-                        return;
-                    }
+                // if the list has reached the limit then drop pending events
+                // and queue an OVERFLOW event
+                if (size >= MAX_EVENT_LIST_SIZE) {
+                    events.clear();
+                    kind = StandardWatchEventKind.OVERFLOW;
+                    context = null;
                 }
             }
 
--- a/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabEntry.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/sun/security/krb5/internal/ktab/KeyTabEntry.java	Fri Feb 05 12:26:35 2010 -0800
@@ -75,7 +75,7 @@
     public String getKeyString() {
         StringBuffer sb = new StringBuffer("0x");
         for (int i = 0; i < keyblock.length; i++) {
-            sb.append(Integer.toHexString(keyblock[i]&0xff));
+            sb.append(String.format("%02x", keyblock[i]&0xff));
         }
         return sb.toString();
     }
--- a/jdk/src/share/classes/sun/security/provider/certpath/OCSPResponse.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/share/classes/sun/security/provider/certpath/OCSPResponse.java	Fri Feb 05 12:26:35 2010 -0800
@@ -574,10 +574,18 @@
                             (singleExtDer.length);
                     for (int i = 0; i < singleExtDer.length; i++) {
                         Extension ext = new Extension(singleExtDer[i]);
-                        singleExtensions.put(ext.getId(), ext);
                         if (DEBUG != null) {
                             DEBUG.println("OCSP single extension: " + ext);
                         }
+                        // We don't support any extensions yet. Therefore, if it
+                        // is critical we must throw an exception because we
+                        // don't know how to process it.
+                        if (ext.isCritical()) {
+                            throw new IOException(
+                                "Unsupported OCSP critical extension: " +
+                                ext.getExtensionId());
+                        }
+                        singleExtensions.put(ext.getId(), ext);
                     }
                 } else {
                     singleExtensions = Collections.emptyMap();
--- a/jdk/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/SctpChannelImpl.java	Fri Feb 05 12:26:35 2010 -0800
@@ -38,7 +38,6 @@
 import java.nio.channels.ClosedChannelException;
 import java.nio.channels.ConnectionPendingException;
 import java.nio.channels.NoConnectionPendingException;
-import java.nio.channels.AlreadyBoundException;
 import java.nio.channels.AlreadyConnectedException;
 import java.nio.channels.NotYetBoundException;
 import java.nio.channels.NotYetConnectedException;
@@ -54,7 +53,6 @@
 import com.sun.nio.sctp.NotificationHandler;
 import com.sun.nio.sctp.SctpChannel;
 import com.sun.nio.sctp.SctpSocketOption;
-import sun.nio.ch.NativeDispatcher;
 import sun.nio.ch.PollArrayWrapper;
 import sun.nio.ch.SelChImpl;
 import static com.sun.nio.sctp.SctpStandardSocketOption.*;
@@ -69,9 +67,6 @@
 public class SctpChannelImpl extends SctpChannel
     implements SelChImpl
 {
-    /* Used to make native close and preClose calls */
-    private static NativeDispatcher nd;
-
     private final FileDescriptor fd;
 
     private final int fdVal;
@@ -182,7 +177,7 @@
                 synchronized (stateLock) {
                     ensureOpenAndUnconnected();
                     if (isBound())
-                        throw new AlreadyBoundException();
+                        SctpNet.throwAlreadyBoundException();
                     InetSocketAddress isa = (local == null) ?
                         new InetSocketAddress(0) : Net.checkAddress(local);
                     Net.bind(fd, isa.getAddress(), isa.getPort());
@@ -234,7 +229,7 @@
                     if (add) {
                         for (InetSocketAddress addr : localAddresses) {
                             if (addr.getAddress().equals(address)) {
-                                throw new AlreadyBoundException();
+                                SctpNet.throwAlreadyBoundException();
                             }
                         }
                     } else { /*removing */
@@ -370,7 +365,7 @@
                                 InetAddress ia = isa.getAddress();
                                 if (ia.isAnyLocalAddress())
                                     ia = InetAddress.getLocalHost();
-                                n = Net.connect(fd, ia, isa.getPort());
+                                n = SctpNet.connect(fdVal, ia, isa.getPort());
                                 if (  (n == IOStatus.INTERRUPTED)
                                       && isOpen())
                                     continue;
@@ -556,7 +551,7 @@
     @Override
     public void implCloseSelectableChannel() throws IOException {
         synchronized (stateLock) {
-            nd.preClose(fd);
+            SctpNet.preClose(fdVal);
 
             if (receiverThread != 0)
                 NativeThread.signal(receiverThread);
@@ -662,7 +657,7 @@
             /* Postpone the kill if there is a waiting reader
              * or writer thread. */
             if (receiverThread == 0 && senderThread == 0) {
-                nd.close(fd);
+                SctpNet.close(fdVal);
                 state = ChannelState.KILLED;
             } else {
                 state = ChannelState.KILLPENDING;
@@ -874,8 +869,8 @@
         public HandlerResult handleNotification(
                 AssociationChangeNotification not, T unused) {
             if (not.event().equals(
-                    AssociationChangeNotification.AssocChangeEvent.COMM_UP)) {
-                assert association == null;
+                    AssociationChangeNotification.AssocChangeEvent.COMM_UP) &&
+                    association == null) {
                 SctpAssocChange sac = (SctpAssocChange) not;
                 association = new SctpAssociationImpl
                        (sac.assocId(), sac.maxInStreams(), sac.maxOutStreams());
@@ -987,17 +982,17 @@
         SocketAddress target = messageInfo.address();
         boolean unordered = messageInfo.isUnordered();
         int ppid = messageInfo.payloadProtocolID();
-        int pos = src.position();
-        int lim = src.limit();
-
-        assert (pos <= lim && streamNumber >= 0);
-        int rem = (pos <= lim ? lim - pos : 0);
 
         if (src instanceof DirectBuffer)
-            return sendFromNativeBuffer(fd, src, rem, pos, target, streamNumber,
+            return sendFromNativeBuffer(fd, src, target, streamNumber,
                     unordered, ppid);
 
         /* Substitute a native buffer */
+        int pos = src.position();
+        int lim = src.limit();
+        assert (pos <= lim && streamNumber >= 0);
+
+        int rem = (pos <= lim ? lim - pos : 0);
         ByteBuffer bb = Util.getTemporaryDirectBuffer(rem);
         try {
             bb.put(src);
@@ -1005,7 +1000,7 @@
             /* Do not update src until we see how many bytes were written */
             src.position(pos);
 
-            int n = sendFromNativeBuffer(fd, bb, rem, pos, target, streamNumber,
+            int n = sendFromNativeBuffer(fd, bb, target, streamNumber,
                     unordered, ppid);
             if (n > 0) {
                 /* now update src */
@@ -1019,13 +1014,16 @@
 
     private int sendFromNativeBuffer(int fd,
                                      ByteBuffer bb,
-                                     int rem,
-                                     int pos,
                                      SocketAddress target,
                                      int streamNumber,
                                      boolean unordered,
                                      int ppid)
             throws IOException {
+        int pos = bb.position();
+        int lim = bb.limit();
+        assert (pos <= lim);
+        int rem = (pos <= lim ? lim - pos : 0);
+
         int written = send0(fd, ((DirectBuffer)bb).address() + pos,
                             rem, target, -1 /*121*/, streamNumber, unordered, ppid);
         if (written > 0)
@@ -1097,6 +1095,5 @@
         java.security.AccessController.doPrivileged(
                 new sun.security.action.LoadLibraryAction("sctp"));
         initIDs();
-        nd = new SctpSocketDispatcher();
     }
 }
--- a/jdk/src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/SctpMultiChannelImpl.java	Fri Feb 05 12:26:35 2010 -0800
@@ -38,7 +38,6 @@
 import java.util.HashMap;
 import java.nio.ByteBuffer;
 import java.nio.channels.SelectionKey;
-import java.nio.channels.AlreadyBoundException;
 import java.nio.channels.ClosedChannelException;
 import java.nio.channels.NotYetBoundException;
 import java.nio.channels.spi.SelectorProvider;
@@ -63,9 +62,6 @@
 public class SctpMultiChannelImpl extends SctpMultiChannel
     implements SelChImpl
 {
-    /* Used to make native close and preClose calls */
-    private static NativeDispatcher nd;
-
     private final FileDescriptor fd;
 
     private final int fdVal;
@@ -140,7 +136,7 @@
                 synchronized (stateLock) {
                     ensureOpen();
                     if (isBound())
-                        throw new AlreadyBoundException();
+                        SctpNet.throwAlreadyBoundException();
                     InetSocketAddress isa = (local == null) ?
                         new InetSocketAddress(0) : Net.checkAddress(local);
 
@@ -155,7 +151,7 @@
                     if (isa.getAddress().isAnyLocalAddress())
                         wildcard = true;
 
-                    Net.listen(fd, backlog < 1 ? 50 : backlog);
+                    SctpNet.listen(fdVal, backlog < 1 ? 50 : backlog);
                 }
             }
         }
@@ -196,7 +192,7 @@
                     if (add) {
                         for (InetSocketAddress addr : localAddresses) {
                             if (addr.getAddress().equals(address)) {
-                                throw new AlreadyBoundException();
+                                SctpNet.throwAlreadyBoundException();
                             }
                         }
                     } else { /*removing */
@@ -284,7 +280,7 @@
     @Override
     public void implCloseSelectableChannel() throws IOException {
         synchronized (stateLock) {
-            nd.preClose(fd);
+            SctpNet.preClose(fdVal);
 
             if (receiverThread != 0)
                 NativeThread.signal(receiverThread);
@@ -375,7 +371,7 @@
 
             /* Postpone the kill if there is a thread sending or receiving. */
             if (receiverThread == 0 && senderThread == 0) {
-                nd.close(fd);
+                SctpNet.close(fdVal);
                 state = ChannelState.KILLED;
             } else {
                 state = ChannelState.KILLPENDING;
@@ -846,16 +842,17 @@
         int streamNumber = messageInfo.streamNumber();
         boolean unordered = messageInfo.isUnordered();
         int ppid = messageInfo.payloadProtocolID();
+
+        if (src instanceof DirectBuffer)
+            return sendFromNativeBuffer(fd, src, target, assocId,
+                    streamNumber, unordered, ppid);
+
+        /* Substitute a native buffer */
         int pos = src.position();
         int lim = src.limit();
         assert (pos <= lim && streamNumber >= 0);
+
         int rem = (pos <= lim ? lim - pos : 0);
-
-        if (src instanceof DirectBuffer)
-            return sendFromNativeBuffer(fd, src, rem, pos, target, assocId,
-                    streamNumber, unordered, ppid);
-
-        /* Substitute a native buffer */
         ByteBuffer bb = Util.getTemporaryDirectBuffer(rem);
         try {
             bb.put(src);
@@ -863,7 +860,7 @@
             /* Do not update src until we see how many bytes were written */
             src.position(pos);
 
-            int n = sendFromNativeBuffer(fd, bb, rem, pos, target, assocId,
+            int n = sendFromNativeBuffer(fd, bb, target, assocId,
                     streamNumber, unordered, ppid);
             if (n > 0) {
                 /* now update src */
@@ -877,14 +874,17 @@
 
     private int sendFromNativeBuffer(int fd,
                                      ByteBuffer bb,
-                                     int rem,
-                                     int pos,
                                      SocketAddress target,
                                      int assocId,
                                      int streamNumber,
                                      boolean unordered,
                                      int ppid)
             throws IOException {
+        int pos = bb.position();
+        int lim = bb.limit();
+        assert (pos <= lim);
+        int rem = (pos <= lim ? lim - pos : 0);
+
         int written = send0(fd, ((DirectBuffer)bb).address() + pos,
                             rem, target, assocId, streamNumber, unordered, ppid);
         if (written > 0)
@@ -981,6 +981,5 @@
         Util.load();   /* loads nio & net native libraries */
         java.security.AccessController.doPrivileged(
                 new sun.security.action.LoadLibraryAction("sctp"));
-        nd = new SctpSocketDispatcher();
     }
 }
--- a/jdk/src/solaris/classes/sun/nio/ch/SctpNet.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/SctpNet.java	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,7 @@
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.SocketAddress;
+import java.nio.channels.AlreadyBoundException;
 import java.util.Set;
 import java.util.HashSet;
 import java.security.AccessController;
@@ -52,8 +53,29 @@
         return false;
     }
 
+    static boolean throwAlreadyBoundException() throws IOException {
+        throw new AlreadyBoundException();
+    }
+
+    static void listen(int fd, int backlog) throws IOException {
+        listen0(fd, backlog);
+    }
+
+    static int connect(int fd, InetAddress remote, int remotePort)
+            throws IOException {
+        return connect0(fd, remote, remotePort);
+    }
+
+    static void close(int fd) throws IOException {
+        close0(fd);
+    }
+
+    static void preClose(int fd) throws IOException {
+        preClose0(fd);
+    }
+
     /**
-     * @param  oneToone
+     * @param  oneToOne
      *         if {@code true} returns a one-to-one sctp socket, otherwise
      *         returns a one-to-many sctp socket
      */
@@ -240,6 +262,15 @@
     /* Native Methods */
     static native int socket0(boolean oneToOne) throws IOException;
 
+    static native void listen0(int fd, int backlog) throws IOException;
+
+    static native int connect0(int fd, InetAddress remote, int remotePort)
+        throws IOException;
+
+    static native void close0(int fd) throws IOException;
+
+    static native void preClose0(int fd) throws IOException;
+
     static native void bindx(int fd, InetAddress[] addrs, int port, int length,
             boolean add, boolean preferIPv6) throws IOException;
 
@@ -271,5 +302,11 @@
             throws IOException;
 
     static native void shutdown0(int fd, int assocId);
+
+    static native void init();
+
+    static {
+        init();
+    }
 }
 
--- a/jdk/src/solaris/classes/sun/nio/ch/SctpServerChannelImpl.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/solaris/classes/sun/nio/ch/SctpServerChannelImpl.java	Fri Feb 05 12:26:35 2010 -0800
@@ -33,7 +33,6 @@
 import java.util.Set;
 import java.util.HashSet;
 import java.nio.channels.SelectionKey;
-import java.nio.channels.AlreadyBoundException;
 import java.nio.channels.ClosedChannelException;
 import java.nio.channels.NotYetBoundException;
 import java.nio.channels.spi.SelectorProvider;
@@ -49,9 +48,6 @@
 public class SctpServerChannelImpl extends SctpServerChannel
     implements SelChImpl
 {
-    /* Used to make native close and preClose calls */
-    private static NativeDispatcher nd;
-
     private final FileDescriptor fd;
 
     private final int fdVal;
@@ -103,7 +99,7 @@
                 if (!isOpen())
                     throw new ClosedChannelException();
                 if (isBound())
-                    throw new AlreadyBoundException();
+                    SctpNet.throwAlreadyBoundException();
 
                 InetSocketAddress isa = (local == null) ?
                     new InetSocketAddress(0) : Net.checkAddress(local);
@@ -118,7 +114,7 @@
                     if (isa.getAddress().isAnyLocalAddress())
                         wildcard = true;
 
-                Net.listen(fd, backlog < 1 ? 50 : backlog);
+                SctpNet.listen(fdVal, backlog < 1 ? 50 : backlog);
             }
         }
         return this;
@@ -156,7 +152,7 @@
                 if (add) {
                     for (InetSocketAddress addr : localAddresses) {
                         if (addr.getAddress().equals(address)) {
-                            throw new AlreadyBoundException();
+                            SctpNet.throwAlreadyBoundException();
                         }
                     }
                 } else { /*removing */
@@ -261,7 +257,7 @@
     @Override
     public void implCloseSelectableChannel() throws IOException {
         synchronized (stateLock) {
-            nd.preClose(fd);
+            SctpNet.preClose(fdVal);
             if (thread != 0)
                 NativeThread.signal(thread);
             if (!isRegistered())
@@ -282,7 +278,7 @@
 
             // Postpone the kill if there is a thread in accept
             if (thread == 0) {
-                nd.close(fd);
+                SctpNet.close(fdVal);
                 state = ChannelState.KILLED;
             } else {
                 state = ChannelState.KILLPENDING;
@@ -423,7 +419,6 @@
         Util.load();   // loads nio & net native libraries
         java.security.AccessController.doPrivileged(
                 new sun.security.action.LoadLibraryAction("sctp"));
-        nd = new SctpSocketDispatcher();
         initIDs();
     }
 }
--- a/jdk/src/solaris/classes/sun/nio/ch/SctpSocketDispatcher.java	Thu Feb 04 15:50:59 2010 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * Copyright 2009 Sun Microsystems, Inc.  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.  Sun designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- */
-package sun.nio.ch;
-
-import java.io.IOException;
-import java.io.FileDescriptor;
-
-/**
- * Only used for {@code close} and {@code preclose}. All other methods
- * throw {@code IOException}.
- */
-class SctpSocketDispatcher extends NativeDispatcher {
-    @Override
-    @SuppressWarnings("unused")
-    int read(FileDescriptor fd, long address, int len) throws IOException {
-         throw new IOException("Operation Unsupported");
-    }
-
-    @Override
-    @SuppressWarnings("unused")
-    long readv(FileDescriptor fd, long address, int len) throws IOException {
-         throw new IOException("Operation Unsupported");
-    }
-
-    @Override
-    @SuppressWarnings("unused")
-    int write(FileDescriptor fd, long address, int len) throws IOException {
-         throw new IOException("Operation Unsupported");
-    }
-
-    @Override
-    @SuppressWarnings("unused")
-    long writev(FileDescriptor fd, long address, int len) throws IOException {
-         throw new IOException("Operation Unsupported");
-    }
-
-    @Override
-    void close(FileDescriptor fd) throws IOException {
-        FileDispatcherImpl.close0(fd);
-    }
-
-    @Override
-    void preClose(FileDescriptor fd) throws IOException {
-        FileDispatcherImpl.preClose0(fd);
-    }
-}
--- a/jdk/src/solaris/native/sun/nio/ch/SctpNet.c	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/solaris/native/sun/nio/ch/SctpNet.c	Fri Feb 05 12:26:35 2010 -0800
@@ -48,6 +48,9 @@
     return JNI_VERSION_1_2;
 }
 
+static int preCloseFD = -1;     /* File descriptor to which we dup other fd's
+                                   before closing them for real */
+
 /**
  * Loads the native sctp library that contains the socket extension
  * functions, as well as locating the individual functions.
@@ -107,6 +110,55 @@
     return JNI_TRUE;
 }
 
+jint
+handleSocketError(JNIEnv *env, jint errorValue)
+{
+    char *xn;
+    switch (errorValue) {
+        case EINPROGRESS:     /* Non-blocking connect */
+            return 0;
+        case EPROTO:
+            xn= JNU_JAVANETPKG "ProtocolException";
+            break;
+        case ECONNREFUSED:
+            xn = JNU_JAVANETPKG "ConnectException";
+            break;
+        case ETIMEDOUT:
+            xn = JNU_JAVANETPKG "ConnectException";
+            break;
+        case EHOSTUNREACH:
+            xn = JNU_JAVANETPKG "NoRouteToHostException";
+            break;
+        case EADDRINUSE:  /* Fall through */
+        case EADDRNOTAVAIL:
+            xn = JNU_JAVANETPKG "BindException";
+            break;
+        default:
+            xn = JNU_JAVANETPKG "SocketException";
+            break;
+    }
+    errno = errorValue;
+    JNU_ThrowByNameWithLastError(env, xn, "NioSocketError");
+    return IOS_THROWN;
+}
+
+/*
+ * Class:     sun_nio_ch_SctpNet
+ * Method:    init
+ * Signature: ()V
+ */
+JNIEXPORT void JNICALL
+Java_sun_nio_ch_SctpNet_init
+  (JNIEnv *env, jclass cl) {
+    int sp[2];
+    if (socketpair(PF_UNIX, SOCK_STREAM, 0, sp) < 0) {
+        JNU_ThrowIOExceptionWithLastError(env, "socketpair failed");
+        return;
+    }
+    preCloseFD = sp[0];
+    close(sp[1]);
+}
+
 /*
  * Class:     sun_nio_ch_SctpNet
  * Method:    socket0
@@ -184,6 +236,76 @@
     free(sap);
 }
 
+/*
+ * Class:     sun_nio_ch_SctpNet
+ * Method:    listen0
+ * Signature: (II)V
+ */
+JNIEXPORT void JNICALL
+Java_sun_nio_ch_SctpNet_listen0
+  (JNIEnv *env, jclass cl, jint fd, jint backlog) {
+    if (listen(fd, backlog) < 0)
+        handleSocketError(env, errno);
+}
+
+/*
+ * Class:     sun_nio_ch_SctpNet
+ * Method:    connect0
+ * Signature: (ILjava/net/InetAddress;I)I
+ */
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_SctpNet_connect0
+  (JNIEnv *env, jclass clazz, int fd, jobject iao, jint port) {
+    SOCKADDR sa;
+    int sa_len = SOCKADDR_LEN;
+    int rv;
+
+    if (NET_InetAddressToSockaddr(env, iao, port, (struct sockaddr *) &sa,
+                                  &sa_len, JNI_TRUE) != 0) {
+        return IOS_THROWN;
+    }
+
+    rv = connect(fd, (struct sockaddr *)&sa, sa_len);
+    if (rv != 0) {
+        if (errno == EINPROGRESS) {
+            return IOS_UNAVAILABLE;
+        } else if (errno == EINTR) {
+            return IOS_INTERRUPTED;
+        }
+        return handleSocketError(env, errno);
+    }
+    return 1;
+}
+
+/*
+ * Class:     sun_nio_ch_SctpNet
+ * Method:    close0
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL
+Java_sun_nio_ch_SctpNet_close0
+  (JNIEnv *env, jclass clazz, jint fd) {
+    if (fd != -1) {
+        int rv = close(fd);
+        if (rv < 0)
+            JNU_ThrowIOExceptionWithLastError(env, "Close failed");
+    }
+}
+
+/*
+ * Class:     sun_nio_ch_SctpNet
+ * Method:    preClose0
+ * Signature: (I)V
+ */
+JNIEXPORT void JNICALL
+Java_sun_nio_ch_SctpNet_preClose0
+  (JNIEnv *env, jclass clazz, jint fd) {
+    if (preCloseFD >= 0) {
+        if (dup2(preCloseFD, fd) < 0)
+            JNU_ThrowIOExceptionWithLastError(env, "dup2 failed");
+    }
+}
+
 void initializeISA
   (JNIEnv* env) {
     if (isaCls == 0) {
@@ -394,7 +516,7 @@
         arglen = sizeof(arg);
     }
 
-    if (setsockopt(fd, klevel, kopt, parg, arglen) < 0) {
+    if (NET_SetSockOpt(fd, klevel, kopt, parg, arglen) < 0) {
         JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
                                      "sun_nio_ch_SctpNet.setIntOption0");
     }
@@ -427,7 +549,7 @@
         arglen = sizeof(result);
     }
 
-    if (getsockopt(fd, klevel, kopt, arg, &arglen) < 0) {
+    if (NET_GetSockOpt(fd, klevel, kopt, arg, &arglen) < 0) {
         JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
                                      "sun.nio.ch.Net.getIntOption");
         return -1;
--- a/jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/windows/classes/sun/nio/ch/WindowsAsynchronousFileChannelImpl.java	Fri Feb 05 12:26:35 2010 -0800
@@ -445,20 +445,17 @@
                 // allocate OVERLAPPED
                 overlapped = ioCache.add(result);
 
-                // synchronize on result to allow this thread handle the case
-                // where the read completes immediately.
-                synchronized (result) {
-                    n = readFile(handle, address, rem, position, overlapped);
-                    if (n == IOStatus.UNAVAILABLE) {
-                        // I/O is pending
-                        return;
-                    }
-                    // read completed immediately:
-                    // 1. update buffer position
-                    // 2. release waiters
-                    updatePosition(n);
+                // initiate read
+                n = readFile(handle, address, rem, position, overlapped);
+                if (n == IOStatus.UNAVAILABLE) {
+                    // I/O is pending
+                    return;
+                } else if (n == IOStatus.EOF) {
                     result.setResult(n);
+                } else {
+                    throw new InternalError("Unexpected result: " + n);
                 }
+
             } catch (Throwable x) {
                 // failed to initiate read
                 result.setFailure(toIOException(x));
@@ -466,12 +463,9 @@
                 end();
             }
 
-            // read failed or EOF so completion port will not be notified
-            if (n < 0 && overlapped != 0L) {
+            // release resources
+            if (overlapped != 0L)
                 ioCache.remove(overlapped);
-            }
-
-            // return direct buffer to cache if substituted
             releaseBufferIfSubstituted();
 
             // invoke completion handler
@@ -634,20 +628,15 @@
                 // allocate an OVERLAPPED structure
                 overlapped = ioCache.add(result);
 
-                // synchronize on result to allow this thread handle the case
-                // where the read completes immediately.
-                synchronized (result) {
-                    n = writeFile(handle, address, rem, position, overlapped);
-                    if (n == IOStatus.UNAVAILABLE) {
-                        // I/O is pending
-                        return;
-                    }
-                    // read completed immediately:
-                    // 1. update buffer position
-                    // 2. release waiters
-                    updatePosition(n);
-                    result.setResult(n);
+                // initiate the write
+                n = writeFile(handle, address, rem, position, overlapped);
+                if (n == IOStatus.UNAVAILABLE) {
+                    // I/O is pending
+                    return;
+                } else {
+                    throw new InternalError("Unexpected result: " + n);
                 }
+
             } catch (Throwable x) {
                 // failed to initiate read:
                 result.setFailure(toIOException(x));
--- a/jdk/src/windows/native/sun/nio/ch/WindowsAsynchronousFileChannelImpl.c	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/src/windows/native/sun/nio/ch/WindowsAsynchronousFileChannelImpl.c	Fri Feb 05 12:26:35 2010 -0800
@@ -39,7 +39,6 @@
     jlong handle, jlong address, jint len, jlong offset, jlong ov)
 {
     BOOL res;
-    DWORD nread = 0;
 
     OVERLAPPED* lpOverlapped = (OVERLAPPED*)jlong_to_ptr(ov);
     lpOverlapped->Offset = (DWORD)offset;
@@ -49,7 +48,7 @@
     res = ReadFile((HANDLE) jlong_to_ptr(handle),
                    (LPVOID) jlong_to_ptr(address),
                    (DWORD)len,
-                   &nread,
+                   NULL,
                    lpOverlapped);
 
     if (res == 0) {
@@ -62,7 +61,7 @@
         return IOS_THROWN;
     }
 
-    return (jint)nread;
+    return IOS_UNAVAILABLE;
 }
 
 JNIEXPORT jint JNICALL
@@ -70,7 +69,6 @@
     jlong handle, jlong address, jint len, jlong offset, jlong ov)
 {
     BOOL res;
-    DWORD nwritten = 0;
 
     OVERLAPPED* lpOverlapped = (OVERLAPPED*)jlong_to_ptr(ov);
     lpOverlapped->Offset = (DWORD)offset;
@@ -80,18 +78,18 @@
     res = WriteFile((HANDLE)jlong_to_ptr(handle),
                    (LPVOID) jlong_to_ptr(address),
                    (DWORD)len,
-                   &nwritten,
+                   NULL,
                    lpOverlapped);
 
     if (res == 0) {
         int error = GetLastError();
-        if (error == ERROR_IO_PENDING) {
+        if (error == ERROR_IO_PENDING)
             return IOS_UNAVAILABLE;
-        }
         JNU_ThrowIOExceptionWithLastError(env, "WriteFile failed");
         return IOS_THROWN;
     }
-    return (jint)nwritten;
+
+    return IOS_UNAVAILABLE;
 }
 
 JNIEXPORT jint JNICALL
--- a/jdk/test/com/sun/jdi/ProcessAttachTest.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/jdi/ProcessAttachTest.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -54,10 +54,14 @@
 OS=`uname -s`
 
 case "$OS" in
-  Windows* | CYGWIN_NT*)
+  Windows*)
     PS=";"
     OS="Windows"
     ;;
+  CYGWIN*)
+    PS=";"
+    OS="CYGWIN"
+    ;;
   * )
     PS=":"
     ;;
@@ -67,16 +71,23 @@
 {
   OUTPUTFILE=${TESTCLASSES}/Debuggee.out
   ${JAVA} "$@" > ${OUTPUTFILE} &
-  pid="$!"
+  startpid="$!"
+  pid="${startpid}"
                                                                                                      
+  # CYGWIN startpid is not the native windows PID we want, get the WINPID
+  if [ "${OS}" = "CYGWIN" ]; then
+    sleep 2
+    ps -l -p ${startpid}
+    pid=`ps -l -p ${startpid} | tail -1 | awk '{print $4;}'`
+  fi
+  
   # MKS creates an intermediate shell to launch ${JAVA} so
-  # ${pid} is not the actual pid. We have put in a small sleep
+  # ${startpid} is not the actual pid. We have put in a small sleep
   # to give the intermediate shell process time to launch the
   # "java" process.
   if [ "$OS" = "Windows" ]; then
     sleep 2
-    realpid=`ps -o pid,ppid,comm|grep ${pid}|grep "java"|cut -c1-6`
-    pid=${realpid}
+    pid=`ps -o pid,ppid,comm|grep ${startpid}|grep "java"|cut -c1-6`
   fi
                                                                                                      
   echo "Waiting for Debuggee to initialize..."
@@ -91,7 +102,7 @@
     echo "Waiting $attempts second(s) ..."
   done
 
-  echo "Debuggee is process $pid"
+  echo "Debuggee is process $pid (startpid=${startpid})"
 }
 
 stopDebuggee()
@@ -100,7 +111,7 @@
   if [ $? != 0 ] ; then
     echo "Error: ShutdownDebuggee failed"
     failures=`expr $failures + 1`
-    kill -9 $pid
+    kill -9 ${startpid}
   fi
 }
 
@@ -123,7 +134,7 @@
   -agentlib:jdwp=transport=dt_socket,server=y,suspend=n \
   -classpath "${TESTCLASSES}" ProcessAttachDebuggee "${PORTFILE}"
 
-$JAVA -classpath ${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar \
+$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
   ProcessAttachDebugger $pid 2>&1
 if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
 
@@ -141,7 +152,7 @@
   -agentlib:jdwp=transport=dt_socket,server=y,suspend=y \
   -classpath "${TESTCLASSES}" ProcessAttachDebuggee "${PORTFILE}"
 
-$JAVA -classpath ${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar \
+$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
   ProcessAttachDebugger $pid 2>&1
 
 # The debuggee is suspended and doesn't run until the debugger
--- a/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/jdi/connect/spi/JdiLoadedByCustomLoader.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -51,7 +51,7 @@
   Linux )
     PS=":"
     ;;
-  Windows* )
+  Windows* | CYGWIN*)
     PS=";"
     ;;
   * )
@@ -71,7 +71,7 @@
 $JAVAC -d "${TESTCLASSES}" "${TESTSRC}"/JdiLoadedByCustomLoader.java
 
 mkdir "${SOMEOTHERDIR}"
-$JAVAC -d "${SOMEOTHERDIR}" -classpath ${TESTSRC}${PS}${TESTJAVA}/lib/tools.jar \
+$JAVAC -d "${SOMEOTHERDIR}" -classpath "${TESTSRC}${PS}${TESTJAVA}/lib/tools.jar" \
     "${TESTSRC}"/ListConnectors.java
 
 # Run the test 
--- a/jdk/test/com/sun/nio/sctp/SctpChannel/Connect.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/nio/sctp/SctpChannel/Connect.java	Fri Feb 05 12:26:35 2010 -0800
@@ -192,6 +192,18 @@
             testCCE(new Callable<Void>() {
                 public Void call() throws IOException {
                     cceChannel.finishConnect(); return null; } });
+
+            /* TEST 8: IOException: Connection refused. Exercises handleSocketError.
+             *         Assumption: no sctp socket listening on 3456 */
+            SocketAddress addr = new InetSocketAddress("localhost", 3456);
+            channel = SctpChannel.open();
+            try {
+                channel.connect(addr);
+                fail("should have thrown ConnectException: Connection refused");
+            } catch (IOException ioe) {
+                pass();
+            }
+
         } catch (IOException ioe) {
             unexpected(ioe);
         } finally {
--- a/jdk/test/com/sun/nio/sctp/SctpChannel/Send.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/nio/sctp/SctpChannel/Send.java	Fri Feb 05 12:26:35 2010 -0800
@@ -112,9 +112,6 @@
             /* Receive CommUp */
             channel.receive(buffer, null, handler);
 
-            /* save for TEST 8 */
-            Association association = channel.association();
-
             /* TEST 2: send small message */
             int streamNumber = 0;
             debug("sending on stream number: " + streamNumber);
@@ -250,6 +247,29 @@
                 pass();
                 debug("OK, caught " + e);
             }
+
+            /* TEST 9: Send from heap buffer to force implementation to
+             * substitute with a native buffer, then check that its position
+             * is updated correctly */
+            buffer.clear();
+            info = MessageInfo.createOutgoing(null, 0);
+            buffer.put(Util.SMALL_MESSAGE.getBytes("ISO-8859-1"));
+            buffer.flip();
+            final int offset = 1;
+            buffer.position(offset);
+            remaining = buffer.remaining();
+
+            debug("sending small message: " + buffer);
+            try {
+                sent = channel.send(buffer, info);
+
+                check(sent == remaining, "sent should be equal to remaining");
+                check(buffer.position() == (offset + sent),
+                        "buffers position should have been incremented by sent");
+            } catch (IllegalArgumentException iae) {
+                fail(iae + ", Error updating buffers position");
+            }
+
         } catch (IOException ioe) {
             unexpected(ioe);
         } finally {
@@ -335,6 +355,30 @@
                 /* TEST 7 ++ */
                 sc2 = ssc.accept();
 
+                /* TEST 9 */
+                ByteBuffer expected = ByteBuffer.allocate(Util.SMALL_BUFFER);
+                expected.put(Util.SMALL_MESSAGE.getBytes("ISO-8859-1"));
+                expected.flip();
+                final int offset = 1;
+                expected.position(offset);
+                buffer.clear();
+                do {
+                    info = sc2.receive(buffer, null, null);
+                    if (info == null) {
+                        fail("Server: unexpected null from receive");
+                        return;
+                    }
+                } while (!info.isComplete());
+
+                buffer.flip();
+                check(info != null, "info is null");
+                check(info.streamNumber() == 0, "message not sent on the correct stream");
+                check(info.bytes() == expected.remaining(),
+                      "bytes received not equal to message length");
+                check(info.bytes() == buffer.remaining(), "bytes != remaining");
+                check(expected.equals(buffer),
+                    "received message not the same as sent message");
+
                 clientFinishedLatch.await(10L, TimeUnit.SECONDS);
                 serverFinishedLatch.countDown();
             } catch (IOException ioe) {
--- a/jdk/test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/nio/sctp/SctpChannel/SocketOptionTests.java	Fri Feb 05 12:26:35 2010 -0800
@@ -104,7 +104,9 @@
             sc.setOption(SCTP_NODELAY, true);
             checkOption(sc, SCTP_NODELAY, true);
             sc.setOption(SO_SNDBUF, 16*1024);
+            checkOption(sc, SO_SNDBUF, 16*1024);
             sc.setOption(SO_RCVBUF, 16*1024);
+            checkOption(sc, SO_RCVBUF, 16*1024);
             checkOption(sc, SO_LINGER, -1);  /* default should be negative */
             sc.setOption(SO_LINGER, 2000);
             checkOption(sc, SO_LINGER, 2000);
--- a/jdk/test/com/sun/nio/sctp/SctpMultiChannel/Send.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/nio/sctp/SctpMultiChannel/Send.java	Fri Feb 05 12:26:35 2010 -0800
@@ -185,6 +185,27 @@
             /* TEST 5: getRemoteAddresses(Association) */
             channel.getRemoteAddresses(assoc);
 
+            /* TEST 6: Send from heap buffer to force implementation to
+             * substitute with a native buffer, then check that its position
+             * is updated correctly */
+            info = MessageInfo.createOutgoing(assoc, null, 0);
+            buffer.clear();
+            buffer.put(Util.SMALL_MESSAGE.getBytes("ISO-8859-1"));
+            buffer.flip();
+            final int offset = 1;
+            buffer.position(offset);
+            remaining = buffer.remaining();
+
+            try {
+                sent = channel.send(buffer, info);
+
+                check(sent == remaining, "sent should be equal to remaining");
+                check(buffer.position() == (offset + sent),
+                        "buffers position should have been incremented by sent");
+            } catch (IllegalArgumentException iae) {
+                fail(iae + ", Error updating buffers position");
+            }
+
         } catch (IOException ioe) {
             unexpected(ioe);
         } finally {
@@ -284,6 +305,30 @@
                 bytes = serverChannel.send(buffer, info);
                 debug("Server: sent " + bytes + "bytes");
 
+                /* TEST 6 */
+                ByteBuffer expected = ByteBuffer.allocate(Util.SMALL_BUFFER);
+                expected.put(Util.SMALL_MESSAGE.getBytes("ISO-8859-1"));
+                expected.flip();
+                final int offset = 1;
+                expected.position(offset);
+                buffer.clear();
+                do {
+                    info = serverChannel.receive(buffer, null, null);
+                    if (info == null) {
+                        fail("Server: unexpected null from receive");
+                        return;
+                    }
+                } while (!info.isComplete());
+
+                buffer.flip();
+                check(info != null, "info is null");
+                check(info.streamNumber() == 0, "message not sent on the correct stream");
+                check(info.bytes() == expected.remaining(),
+                    "bytes received not equal to message length");
+                check(info.bytes() == buffer.remaining(), "bytes != remaining");
+                check(expected.equals(buffer),
+                    "received message not the same as sent message");
+
                 clientFinishedLatch.await(10L, TimeUnit.SECONDS);
                 serverFinishedLatch.countDown();
             } catch (IOException ioe) {
--- a/jdk/test/com/sun/tools/attach/ApplicationSetup.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/tools/attach/ApplicationSetup.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -49,7 +49,11 @@
   # "java" process.
   if [ "$OS" = "Windows" ]; then
     sleep 2
-    realpid=`ps -o pid,ppid,comm|grep ${pid}|grep "java"|cut -c1-6`
+    if [ "${isCygwin}" = "true" ] ; then
+      realpid=`ps -p ${pid} | tail -1 | awk '{print $4;}'`
+    else
+      realpid=`ps -o pid,ppid,comm|grep ${pid}|grep "java"|cut -c1-6`
+    fi
     pid=${realpid}
   fi
                                                                                                                   
@@ -57,7 +61,7 @@
   attempts=0
   while true; do
     sleep 1
-    port=`tail -1 ${OUTPUTFILE}`
+    port=`tail -1 ${OUTPUTFILE} | sed -e 's@\\r@@g' `
     if [ ! -z "$port" ]; then
       # In case of errors wait time for output to be flushed
       sleep 1
--- a/jdk/test/com/sun/tools/attach/BasicTests.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/tools/attach/BasicTests.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -48,7 +48,7 @@
 
 echo "Running tests ..."
 
-$JAVA -classpath ${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar \
+$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
   BasicTests $pid $agent $badagent $redefineagent 2>&1
 if [ $? != 0 ]; then failures=`expr $failures + 1`; fi
 
--- a/jdk/test/com/sun/tools/attach/CommonSetup.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/tools/attach/CommonSetup.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -49,6 +49,12 @@
     OS="Windows"
     FS="\\"
     ;;
+  CYGWIN* )
+    PS=";"
+    OS="Windows"
+    FS="\\"
+    isCygwin=true
+    ;;
   * )
     echo "Unrecognized system!"
     exit 1;
--- a/jdk/test/com/sun/tools/attach/PermissionTests.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/tools/attach/PermissionTests.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -48,7 +48,7 @@
 
 echo "Deny test"
 # deny 
-$JAVA -classpath ${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar \
+$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
     -Djava.security.manager \
     -Djava.security.policy=${TESTSRC}/java.policy.deny \
     PermissionTest $pid true 2>&1
@@ -56,7 +56,7 @@
 
 # allow
 echo "Allow test"
-$JAVA -classpath ${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar \
+$JAVA -classpath "${TESTCLASSES}${PS}${TESTJAVA}/lib/tools.jar" \
     -Djava.security.manager \
     -Djava.security.policy=${TESTSRC}/java.policy.allow \
     PermissionTest $pid false 2>&1 
--- a/jdk/test/com/sun/tools/attach/ProviderTests.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/com/sun/tools/attach/ProviderTests.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -46,6 +46,6 @@
 echo "Running test ..."
 
 $JAVA -classpath \
-  ${TESTCLASSES}${PS}${TESTCLASSES}/SimpleProvider.jar${PS}${TESTJAVA}/lib/tools.jar \
+  "${TESTCLASSES}${PS}${TESTCLASSES}/SimpleProvider.jar${PS}${TESTJAVA}/lib/tools.jar" \
   ProviderTest
 
--- a/jdk/test/java/beans/Introspector/Test5102804.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/beans/Introspector/Test5102804.java	Fri Feb 05 12:26:35 2010 -0800
@@ -24,6 +24,7 @@
 /*
  * @test
  * @bug 5102804
+ * @ignore This test is not predictable with regards to GC
  * @summary Tests memory leak
  * @author Sergey Malenkov
  */
--- a/jdk/test/java/io/File/Basic.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/io/File/Basic.java	Fri Feb 05 12:26:35 2010 -0800
@@ -75,7 +75,7 @@
         if (!f.canRead()) fail(f, "is not readable");
         if (f.canWrite() != writeable)
             fail(f, writeable ? "is not writeable" : "is writeable");
-        int rwLen = (File.separatorChar == '/' ? 6 : 7);
+        int rwLen = 6;
         if (f.length() != length) fail(f, "has wrong length");
     }
 
@@ -89,7 +89,7 @@
         if (nonExistantFile.exists()) fail(nonExistantFile, "exists");
 
         show(rwFile);
-        testFile(rwFile, true, File.separatorChar == '/' ? 6 : 7);
+        testFile(rwFile, true, 6);
         rwFile.delete();
         if (rwFile.exists())
             fail(rwFile, "could not delete");
--- a/jdk/test/java/io/File/basic.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/io/File/basic.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -32,10 +32,10 @@
 
 rm -rf x.Basic.*
 rm -f x.Basic.non
-echo xyzzy > x.Basic.rw
+printf "%s" "xyzzyN" > x.Basic.rw
 touch x.Basic.ro; chmod ugo-w x.Basic.ro
 mkdir x.Basic.dir
-if $TESTJAVA/bin/java $* -classpath $TESTCLASSES Basic; then
+if $TESTJAVA/bin/java $* -classpath "$TESTCLASSES" Basic; then
   [ -f x.Basic.rw ] && (echo "x.Basic.rw not deleted"; exit 1)
   ([ -d x.Basic.dir ] || [ \! -d x.Basic.dir2 ]) \
     && (echo "x.Basic.dir not renamed"; exit 1)
--- a/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/io/Serializable/evolution/RenamePackage/run.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -43,7 +43,7 @@
 case "$OS" in
 SunOS | Linux )
   PS=":"  ;;
-Windows* )
+Windows* | CYGWIN* )
   PS=";"  ;;
 * )
   echo "Unrecognized system!"
@@ -85,14 +85,14 @@
 ${JAVAC} -d ${TESTCLASSES}/nclasses ${TESTSRC}/install/SerialDriver.java
 
 # Run Case 1. Map test.SerialDriver within stream to install.SerialDriver.
-CLASSPATH=${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share; export CLASSPATH;
+CLASSPATH="${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
 ${JAVA} test.SerialDriver -s
-CLASSPATH=${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share; export CLASSPATH;
+CLASSPATH="${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
 ${JAVA} install.SerialDriver -d
 rm stream.ser
 
 # Run Case 2. Map install.SerialDriver within stream to test.SerialDriver.
-CLASSPATH=${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share; export CLASSPATH;
+CLASSPATH="${TESTCLASSES}/nclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
 ${JAVA} install.SerialDriver -s
-CLASSPATH=${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share; export CLASSPATH;
+CLASSPATH="${TESTCLASSES}/oclasses${PS}${TESTCLASSES}/share"; export CLASSPATH;
 ${JAVA} test.SerialDriver -d
--- a/jdk/test/java/io/Serializable/serialver/classpath/run.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/io/Serializable/serialver/classpath/run.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -49,7 +49,7 @@
 case "$OS" in
   SunOS | Linux )
     PS=":"    ;;
-  Windows* )
+  Windows* | CYGWIN* )
     PS=";"    ;;
   * )
     echo "Unrecognized system!"
--- a/jdk/test/java/io/Serializable/serialver/nested/run.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/io/Serializable/serialver/nested/run.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -49,7 +49,7 @@
 case "$OS" in
   SunOS | Linux )
     PS=":"    ;;
-  Windows* )
+  Windows* | CYGWIN* )
     PS=";"    ;;
   * )
     echo "Unrecognized system!"
--- a/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -55,7 +55,7 @@
   Linux )
     FS="/"
     ;;
-  Windows* )
+  Windows* | CYGWIN* )
     FS="\\"
     ;;
 esac
--- a/jdk/test/java/lang/StringCoding/CheckEncodings.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/lang/StringCoding/CheckEncodings.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -31,7 +31,7 @@
 OS=`uname -s`
 case "$OS" in
   SunOS | Linux ) ;;
-  Windows* )
+  Windows* | CYGWIN* )
     echo "Passed"; exit 0 ;;
   * ) echo "Unrecognized system!" ;  exit 1 ;;
 esac
--- a/jdk/test/java/lang/System/finalization/FinExit.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/lang/System/finalization/FinExit.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -24,7 +24,9 @@
 #
 
 #
-x=`$TESTJAVA/bin/java -cp $TESTCLASSES FinExit`
+
+# We only want the first character, Windows might add CRLF
+x=`$TESTJAVA/bin/java -cp "$TESTCLASSES" FinExit | cut -c1`
 echo $x
 if [ "x$x" != "x1" ]; then
   echo On-exit finalizer invoked twice
--- a/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/lang/annotation/loaderLeak/LoaderLeak.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -49,6 +49,11 @@
     PS=":"
     FS="/"
     ;;
+  CYGWIN* )
+    NULL=/dev/null
+    PS=";"
+    FS="/"
+    ;;
   Windows* )
     NULL=NUL
     PS=";"
--- a/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/lang/instrument/appendToClassLoaderSearch/CommonSetup.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -43,11 +43,17 @@
     PS=":"
     FS="/"
     ;;
-  Windows* | CYGWIN*)
+  Windows*)
     PS=";"
     OS="Windows"
     FS="\\"
     ;;
+  CYGWIN*)
+    PS=";"
+    OS="Windows"
+    FS="\\"
+    isCygwin=true
+    ;;
   * )
     echo "Unrecognized system!"
     exit 1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/channels/AsynchronousFileChannel/LotsOfWrites.java	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,162 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  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.
+ *
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6913877
+ * @summary Stress AsynchronousFileChannel.write
+ */
+
+import java.io.*;
+import java.nio.ByteBuffer;
+import static java.nio.file.StandardOpenOption.*;
+import java.nio.channels.*;
+import java.util.Random;
+import java.util.concurrent.CountDownLatch;
+
+public class LotsOfWrites {
+    static final Random rand = new Random();
+
+    /**
+     * Asynchronously writes a known pattern to a file up to a given size,
+     * counting down a latch to release waiters when done.
+     */
+    static class Writer implements CompletionHandler<Integer,ByteBuffer> {
+        private final File file;
+        private final long size;
+        private final CountDownLatch latch;
+        private final AsynchronousFileChannel channel;
+
+        private volatile long position;
+        private volatile byte nextByte;
+
+        private long updatePosition(long nwrote) {
+            position += nwrote;
+            return position;
+        }
+
+        private ByteBuffer genNextBuffer() {
+            int n = Math.min(8192 + rand.nextInt(8192), (int)(size - position));
+            ByteBuffer buf = ByteBuffer.allocate(n);
+            for (int i=0; i<n; i++) {
+                buf.put(nextByte++);
+            }
+            buf.flip();
+            return buf;
+        }
+
+        // close channel and release any waiters
+        private void done() {
+            try {
+                channel.close();
+            } catch (IOException ignore) { }
+            latch.countDown();
+        }
+
+        Writer(File file, long size, CountDownLatch latch) throws IOException {
+            this.file = file;
+            this.size = size;
+            this.latch = latch;
+            this.channel = AsynchronousFileChannel.open(file.toPath(), WRITE);
+        }
+
+        File file() {
+            return file;
+        }
+
+        long size() {
+            return size;
+        }
+
+        // initiate first write
+        void start() {
+            ByteBuffer buf = genNextBuffer();
+            channel.write(buf, 0L, buf, this);
+        }
+
+        @Override
+        public void completed(Integer nwrote, ByteBuffer buf) {
+            long pos = updatePosition(nwrote);
+            if (!buf.hasRemaining()) {
+                // buffer has been completely written; decide if we need to
+                // write more
+                if (position >= size) {
+                    done();
+                    return;
+                }
+                buf = genNextBuffer();
+            }
+            channel.write(buf, pos, buf, this);
+        }
+
+        @Override
+        public void failed(Throwable exc, ByteBuffer buf) {
+            exc.printStackTrace();
+            done();
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        // random number of writers
+        int count = 20 + rand.nextInt(16);
+        Writer[] writers = new Writer[count];
+        CountDownLatch latch = new CountDownLatch(count);
+
+        // initiate writing to each file
+        for (int i=0; i<count; i++) {
+            long size = 512*1024 + rand.nextInt(512*1024);
+            File blah = File.createTempFile("blah", null);
+            blah.deleteOnExit();
+            Writer writer = new Writer(blah, size, latch);
+            writers[i] = writer;
+            writer.start();
+        }
+
+        // wait for writing to complete
+        latch.await();
+
+        // verify content of each file
+        byte[] buf = new byte[8192];
+        for (int i=0; i<count ;i++) {
+            Writer writer = writers[i];
+            FileInputStream in = new FileInputStream(writer.file());
+            try {
+                long size = 0L;
+                byte expected = 0;
+                int nread = in.read(buf);
+                while (nread > 0) {
+                    for (int j=0; j<nread; j++) {
+                        if (buf[j] != expected)
+                            throw new RuntimeException("Unexpected byte");
+                        expected++;
+                    }
+                    size += nread;
+                    nread = in.read(buf);
+                }
+                if (size != writer.size())
+                    throw new RuntimeException("Unexpected size");
+            } finally {
+                in.close();
+            }
+        }
+    }
+}
--- a/jdk/test/java/nio/channels/Selector/lots_of_updates.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/nio/channels/Selector/lots_of_updates.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -30,7 +30,7 @@
 
 OS=`uname -s`
 case "$OS" in
-    Windows_* )
+    Windows_* | CYGWIN* )
         echo "ulimit not on Windows"
         exit 0
         ;;
--- a/jdk/test/java/nio/channels/spi/AsynchronousChannelProvider/custom_provider.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/nio/channels/spi/AsynchronousChannelProvider/custom_provider.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -38,7 +38,7 @@
 
 OS=`uname -s`
 case "$OS" in
-    Windows_* )
+    Windows_* | CYGWIN* )
         CLASSPATH="${TESTCLASSES};${TESTSRC}"
         ;;
     * )
--- a/jdk/test/java/nio/file/Files/walk_file_tree.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/nio/file/Files/walk_file_tree.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -39,7 +39,7 @@
 
 OS=`uname -s`
 case "$OS" in
-    Windows_* )
+    Windows_* | CYGWIN* )
         echo "This test does not run on Windows" 
         exit 0
         ;;
--- a/jdk/test/java/nio/file/Path/CopyAndMove.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/nio/file/Path/CopyAndMove.java	Fri Feb 05 12:26:35 2010 -0800
@@ -22,10 +22,10 @@
  */
 
 /* @test
- * @bug 4313887 6838333
+ * @bug 4313887 6838333 6917021
  * @summary Unit test for java.nio.file.Path copyTo/moveTo methods
  * @library ..
- * @build CopyAndMove
+ * @build CopyAndMove PassThroughFileSystem
  * @run main/othervm CopyAndMove
  */
 
@@ -40,22 +40,31 @@
 public class CopyAndMove {
     static final Random rand = new Random();
     static boolean heads() { return rand.nextBoolean(); }
-    static boolean supportsLinks;
 
     public static void main(String[] args) throws Exception {
         Path dir1 = TestUtil.createTemporaryDirectory();
         try {
-            supportsLinks = TestUtil.supportsLinks(dir1);
-
-            // Exercise copyTo
-            doCopyTests(dir1);
+            // Same directory
+            doCopyTests(dir1, dir1, TestUtil.supportsLinks(dir1));
+            doMoveTests(dir1, dir1, TestUtil.supportsLinks(dir1));
 
-            // Exercise moveTo
-            // if test.dir differs to temporary file system then can test
-            // moving between devices
-            String testDir = System.getProperty("test.dir");
-            Path dir2 = (testDir != null) ? Paths.get(testDir) : dir1;
-            doMoveTests(dir1, dir2);
+            // Different directories. Use test.dir if possible as it might be
+            // a different volume/file system and so improve test coverage.
+            String testDir = System.getProperty("test.dir", ".");
+            Path dir2 = TestUtil.createTemporaryDirectory(testDir);
+            try {
+                boolean testSymbolicLinks =
+                    TestUtil.supportsLinks(dir1) && TestUtil.supportsLinks(dir2);
+                doCopyTests(dir1, dir2, testSymbolicLinks);
+                doMoveTests(dir1, dir2, testSymbolicLinks);
+            } finally {
+                TestUtil.removeAll(dir2);
+            }
+
+            // Target is location associated with custom provider
+            Path dir3 = PassThroughFileSystem.create().getPath(dir1.toString());
+            doCopyTests(dir1, dir3, false);
+            doMoveTests(dir1, dir3, false);
 
         } finally {
             TestUtil.removeAll(dir1);
@@ -186,30 +195,37 @@
         checkBasicAttributes(basicAttributes,
             Attributes.readBasicFileAttributes(target, NOFOLLOW_LINKS));
 
-        // verify POSIX attributes
-        if (posixAttributes != null && !basicAttributes.isSymbolicLink()) {
-            checkPosixAttributes(posixAttributes,
-                Attributes.readPosixFileAttributes(target, NOFOLLOW_LINKS));
-        }
+        // verify other attributes when same provider
+        if (source.getFileSystem().provider() == target.getFileSystem().provider()) {
+
+            // verify POSIX attributes
+            if (posixAttributes != null && !basicAttributes.isSymbolicLink()) {
+                checkPosixAttributes(posixAttributes,
+                    Attributes.readPosixFileAttributes(target, NOFOLLOW_LINKS));
+            }
 
-        // verify DOS attributes
-        if (dosAttributes != null && !basicAttributes.isSymbolicLink()) {
-            checkDosAttributes(dosAttributes,
-                Attributes.readDosFileAttributes(target, NOFOLLOW_LINKS));
-        }
+            // verify DOS attributes
+            if (dosAttributes != null && !basicAttributes.isSymbolicLink()) {
+                checkDosAttributes(dosAttributes,
+                    Attributes.readDosFileAttributes(target, NOFOLLOW_LINKS));
+            }
 
-        // verify named attributes
-        if (namedAttributes != null &&
-            target.getFileStore().supportsFileAttributeView("xattr"))
-        {
-            checkUserDefinedFileAttributes(namedAttributes, readUserDefinedFileAttributes(target));
+            // verify named attributes
+            if (namedAttributes != null &&
+                target.getFileStore().supportsFileAttributeView("xattr"))
+            {
+                checkUserDefinedFileAttributes(namedAttributes,
+                                               readUserDefinedFileAttributes(target));
+            }
         }
     }
 
     /**
      * Tests all possible ways to invoke moveTo
      */
-    static void doMoveTests(Path dir1, Path dir2) throws IOException {
+    static void doMoveTests(Path dir1, Path dir2, boolean supportsLinks)
+        throws IOException
+    {
         Path source, target, entry;
 
         boolean sameDevice = dir1.getFileStore().equals(dir2.getFileStore());
@@ -220,7 +236,7 @@
          * Test: move regular file, target does not exist
          */
         source = createSourceFile(dir1);
-        target = getTargetFile(dir1);
+        target = getTargetFile(dir2);
         moveAndVerify(source, target);
         target.delete();
 
@@ -228,7 +244,7 @@
          * Test: move regular file, target exists
          */
         source = createSourceFile(dir1);
-        target = getTargetFile(dir1).createFile();
+        target = getTargetFile(dir2).createFile();
         try {
             moveAndVerify(source, target);
             throw new RuntimeException("FileAlreadyExistsException expected");
@@ -248,7 +264,7 @@
          * Test: move regular file, target does not exist
          */
         source = createSourceFile(dir1);
-        target = getTargetFile(dir1);
+        target = getTargetFile(dir2);
         moveAndVerify(source, target, REPLACE_EXISTING);
         target.delete();
 
@@ -256,7 +272,7 @@
          * Test: move regular file, target exists
          */
         source = createSourceFile(dir1);
-        target = getTargetFile(dir1).createFile();
+        target = getTargetFile(dir2).createFile();
         moveAndVerify(source, target, REPLACE_EXISTING);
         target.delete();
 
@@ -264,7 +280,7 @@
          * Test: move regular file, target exists and is empty directory
          */
         source = createSourceFile(dir1);
-        target = getTargetFile(dir1).createDirectory();
+        target = getTargetFile(dir2).createDirectory();
         moveAndVerify(source, target, REPLACE_EXISTING);
         target.delete();
 
@@ -272,7 +288,7 @@
          * Test: move regular file, target exists and is non-empty directory
          */
         source = createSourceFile(dir1);
-        target = getTargetFile(dir1).createDirectory();
+        target = getTargetFile(dir2).createDirectory();
         entry = target.resolve("foo").createFile();
         try {
             moveAndVerify(source, target);
@@ -311,7 +327,7 @@
          * Test: move empty directory, target does not exist
          */
         source = createSourceDirectory(dir1);
-        target = getTargetFile(dir1);
+        target = getTargetFile(dir2);
         moveAndVerify(source, target);
         target.delete();
 
@@ -319,7 +335,7 @@
          * Test: move empty directory, target exists
          */
         source = createSourceDirectory(dir1);
-        target = getTargetFile(dir1).createFile();
+        target = getTargetFile(dir2).createFile();
         try {
             moveAndVerify(source, target);
             throw new RuntimeException("FileAlreadyExistsException expected");
@@ -339,7 +355,7 @@
          * Test: move empty directory, target does not exist
          */
         source = createSourceDirectory(dir1);
-        target = getTargetFile(dir1);
+        target = getTargetFile(dir2);
         moveAndVerify(source, target, REPLACE_EXISTING);
         target.delete();
 
@@ -347,7 +363,7 @@
          * Test: move empty directory, target exists
          */
         source = createSourceDirectory(dir1);
-        target = getTargetFile(dir1).createFile();
+        target = getTargetFile(dir2).createFile();
         moveAndVerify(source, target, REPLACE_EXISTING);
         target.delete();
 
@@ -355,7 +371,7 @@
          * Test: move empty, target exists and is empty directory
          */
         source = createSourceDirectory(dir1);
-        target = getTargetFile(dir1).createDirectory();
+        target = getTargetFile(dir2).createDirectory();
         moveAndVerify(source, target, REPLACE_EXISTING);
         target.delete();
 
@@ -363,7 +379,7 @@
          * Test: move empty directory, target exists and is non-empty directory
          */
         source = createSourceDirectory(dir1);
-        target = getTargetFile(dir1).createDirectory();
+        target = getTargetFile(dir2).createDirectory();
         entry = target.resolve("foo").createFile();
         try {
             moveAndVerify(source, target, REPLACE_EXISTING);
@@ -418,7 +434,7 @@
         if (supportsLinks) {
             Path tmp = createSourceFile(dir1);
             source = dir1.resolve("link").createSymbolicLink(tmp);
-            target = getTargetFile(dir1);
+            target = getTargetFile(dir2);
             moveAndVerify(source, target);
             target.delete();
             tmp.delete();
@@ -429,7 +445,7 @@
          */
         if (supportsLinks) {
             source = dir1.resolve("link").createSymbolicLink(dir2);
-            target = getTargetFile(dir1);
+            target = getTargetFile(dir2);
             moveAndVerify(source, target);
             target.delete();
         }
@@ -440,7 +456,7 @@
         if (supportsLinks) {
             Path tmp = Paths.get("doesnotexist");
             source = dir1.resolve("link").createSymbolicLink(tmp);
-            target = getTargetFile(dir1);
+            target = getTargetFile(dir2);
             moveAndVerify(source, target);
             target.delete();
         }
@@ -450,7 +466,7 @@
          */
         if (supportsLinks) {
             source = dir1.resolve("link").createSymbolicLink(dir2);
-            target = getTargetFile(dir1).createFile();
+            target = getTargetFile(dir2).createFile();
             try {
                 moveAndVerify(source, target);
                 throw new RuntimeException("FileAlreadyExistsException expected");
@@ -465,7 +481,7 @@
          */
         if (supportsLinks) {
             source = dir1.resolve("link").createSymbolicLink(dir2);
-            target = getTargetFile(dir1).createFile();
+            target = getTargetFile(dir2).createFile();
             moveAndVerify(source, target, REPLACE_EXISTING);
             target.delete();
         }
@@ -475,7 +491,7 @@
          */
         if (supportsLinks) {
             source = dir1.resolve("link").createSymbolicLink(dir2);
-            target = getTargetFile(dir1).createDirectory();
+            target = getTargetFile(dir2).createDirectory();
             moveAndVerify(source, target, REPLACE_EXISTING);
             target.delete();
         }
@@ -485,7 +501,7 @@
          */
         if (supportsLinks) {
             source = dir1.resolve("link").createSymbolicLink(dir2);
-            target = getTargetFile(dir1).createDirectory();
+            target = getTargetFile(dir2).createDirectory();
             entry = target.resolve("foo").createFile();
             try {
                 moveAndVerify(source, target);
@@ -502,7 +518,7 @@
          */
         if (supportsLinks) {
             source = dir1.resolve("link").createSymbolicLink(dir1);
-            target = getTargetFile(dir1).createFile();
+            target = getTargetFile(dir2).createFile();
             moveAndVerify(source, target, REPLACE_EXISTING);
             target.delete();
         }
@@ -513,7 +529,7 @@
          * Test nulls
          */
         source = createSourceFile(dir1);
-        target = getTargetFile(dir1);
+        target = getTargetFile(dir2);
         try {
             source.moveTo(null);
             throw new RuntimeException("NullPointerException expected");
@@ -533,7 +549,7 @@
          * Test UOE
          */
         source = createSourceFile(dir1);
-        target = getTargetFile(dir1);
+        target = getTargetFile(dir2);
         try {
             source.moveTo(target, new CopyOption() { });
         } catch (UnsupportedOperationException x) { }
@@ -577,28 +593,32 @@
             checkBasicAttributes(basicAttributes,
                 Attributes.readBasicFileAttributes(source, linkOptions));
 
-            // check POSIX attributes are copied
-            String os = System.getProperty("os.name");
-            if (os.equals("SunOS") || os.equals("Linux")) {
-                checkPosixAttributes(
-                    Attributes.readPosixFileAttributes(source, linkOptions),
-                    Attributes.readPosixFileAttributes(target, linkOptions));
-            }
+            // verify other attributes when same provider
+            if (source.getFileSystem().provider() == target.getFileSystem().provider()) {
+
+                // check POSIX attributes are copied
+                String os = System.getProperty("os.name");
+                if (os.equals("SunOS") || os.equals("Linux")) {
+                    checkPosixAttributes(
+                        Attributes.readPosixFileAttributes(source, linkOptions),
+                        Attributes.readPosixFileAttributes(target, linkOptions));
+                }
 
-            // check DOS attributes are copied
-            if (os.startsWith("Windows")) {
-                checkDosAttributes(
-                    Attributes.readDosFileAttributes(source, linkOptions),
-                    Attributes.readDosFileAttributes(target, linkOptions));
-            }
+                // check DOS attributes are copied
+                if (os.startsWith("Windows")) {
+                    checkDosAttributes(
+                        Attributes.readDosFileAttributes(source, linkOptions),
+                        Attributes.readDosFileAttributes(target, linkOptions));
+                }
 
-            // check named attributes are copied
-            if (followLinks &&
-                source.getFileStore().supportsFileAttributeView("xattr") &&
-                target.getFileStore().supportsFileAttributeView("xattr"))
-            {
-                checkUserDefinedFileAttributes(readUserDefinedFileAttributes(source),
-                                     readUserDefinedFileAttributes(target));
+                // check named attributes are copied
+                if (followLinks &&
+                    source.getFileStore().supportsFileAttributeView("xattr") &&
+                    target.getFileStore().supportsFileAttributeView("xattr"))
+                {
+                    checkUserDefinedFileAttributes(readUserDefinedFileAttributes(source),
+                                                   readUserDefinedFileAttributes(target));
+                }
             }
         }
     }
@@ -606,7 +626,9 @@
     /**
      * Tests all possible ways to invoke copyTo
      */
-    static void doCopyTests(Path dir) throws IOException {
+    static void doCopyTests(Path dir1, Path dir2, boolean supportsLinks)
+        throws IOException
+    {
         Path source, target, link, entry;
 
         // -- regular file --
@@ -614,8 +636,8 @@
         /**
          * Test: move regular file, target does not exist
          */
-        source = createSourceFile(dir);
-        target = getTargetFile(dir);
+        source = createSourceFile(dir1);
+        target = getTargetFile(dir2);
         copyAndVerify(source, target);
         source.delete();
         target.delete();
@@ -623,8 +645,8 @@
         /**
          * Test: copy regular file, target exists
          */
-        source = createSourceFile(dir);
-        target = getTargetFile(dir).createFile();
+        source = createSourceFile(dir1);
+        target = getTargetFile(dir2).createFile();
         try {
             copyAndVerify(source, target);
             throw new RuntimeException("FileAlreadyExistsException expected");
@@ -643,8 +665,8 @@
         /**
          * Test: copy regular file, target does not exist
          */
-        source = createSourceFile(dir);
-        target = getTargetFile(dir);
+        source = createSourceFile(dir1);
+        target = getTargetFile(dir2);
         copyAndVerify(source, target, REPLACE_EXISTING);
         source.delete();
         target.delete();
@@ -652,8 +674,8 @@
         /**
          * Test: copy regular file, target exists
          */
-        source = createSourceFile(dir);
-        target = getTargetFile(dir).createFile();
+        source = createSourceFile(dir1);
+        target = getTargetFile(dir2).createFile();
         copyAndVerify(source, target, REPLACE_EXISTING);
         source.delete();
         target.delete();
@@ -661,8 +683,8 @@
         /**
          * Test: copy regular file, target exists and is empty directory
          */
-        source = createSourceFile(dir);
-        target = getTargetFile(dir).createDirectory();
+        source = createSourceFile(dir1);
+        target = getTargetFile(dir2).createDirectory();
         copyAndVerify(source, target, REPLACE_EXISTING);
         source.delete();
         target.delete();
@@ -670,8 +692,8 @@
         /**
          * Test: copy regular file, target exists and is non-empty directory
          */
-        source = createSourceFile(dir);
-        target = getTargetFile(dir).createDirectory();
+        source = createSourceFile(dir1);
+        target = getTargetFile(dir2).createDirectory();
         entry = target.resolve("foo").createFile();
         try {
             copyAndVerify(source, target);
@@ -685,8 +707,8 @@
         /**
          * Test: copy regular file + attributes
          */
-        source = createSourceFile(dir);
-        target = getTargetFile(dir);
+        source = createSourceFile(dir1);
+        target = getTargetFile(dir2);
         copyAndVerify(source, target, COPY_ATTRIBUTES);
         source.delete();
         target.delete();
@@ -697,8 +719,8 @@
         /*
          * Test: copy directory, target does not exist
          */
-        source = createSourceDirectory(dir);
-        target = getTargetFile(dir);
+        source = createSourceDirectory(dir1);
+        target = getTargetFile(dir2);
         copyAndVerify(source, target);
         source.delete();
         target.delete();
@@ -706,8 +728,8 @@
         /**
          * Test: copy directory, target exists
          */
-        source = createSourceDirectory(dir);
-        target = getTargetFile(dir).createFile();
+        source = createSourceDirectory(dir1);
+        target = getTargetFile(dir2).createFile();
         try {
             copyAndVerify(source, target);
             throw new RuntimeException("FileAlreadyExistsException expected");
@@ -726,8 +748,8 @@
         /**
          * Test: copy directory, target does not exist
          */
-        source = createSourceDirectory(dir);
-        target = getTargetFile(dir);
+        source = createSourceDirectory(dir1);
+        target = getTargetFile(dir2);
         copyAndVerify(source, target, REPLACE_EXISTING);
         source.delete();
         target.delete();
@@ -735,8 +757,8 @@
         /**
          * Test: copy directory, target exists
          */
-        source = createSourceDirectory(dir);
-        target = getTargetFile(dir).createFile();
+        source = createSourceDirectory(dir1);
+        target = getTargetFile(dir2).createFile();
         copyAndVerify(source, target, REPLACE_EXISTING);
         source.delete();
         target.delete();
@@ -744,8 +766,8 @@
         /**
          * Test: copy directory, target exists and is empty directory
          */
-        source = createSourceDirectory(dir);
-        target = getTargetFile(dir).createDirectory();
+        source = createSourceDirectory(dir1);
+        target = getTargetFile(dir2).createDirectory();
         copyAndVerify(source, target, REPLACE_EXISTING);
         source.delete();
         target.delete();
@@ -753,8 +775,8 @@
         /**
          * Test: copy directory, target exists and is non-empty directory
          */
-        source = createSourceDirectory(dir);
-        target = getTargetFile(dir).createDirectory();
+        source = createSourceDirectory(dir1);
+        target = getTargetFile(dir2).createDirectory();
         entry = target.resolve("foo").createFile();
         try {
             copyAndVerify(source, target, REPLACE_EXISTING);
@@ -768,8 +790,8 @@
         /*
          * Test: copy directory + attributes
          */
-        source = createSourceDirectory(dir);
-        target = getTargetFile(dir);
+        source = createSourceDirectory(dir1);
+        target = getTargetFile(dir2);
         copyAndVerify(source, target, COPY_ATTRIBUTES);
         source.delete();
         target.delete();
@@ -780,9 +802,9 @@
          * Test: Follow link
          */
         if (supportsLinks) {
-            source = createSourceFile(dir);
-            link = dir.resolve("link").createSymbolicLink(source);
-            target = getTargetFile(dir);
+            source = createSourceFile(dir1);
+            link = dir1.resolve("link").createSymbolicLink(source);
+            target = getTargetFile(dir2);
             copyAndVerify(link, target);
             link.delete();
             source.delete();
@@ -792,9 +814,9 @@
          * Test: Copy link (to file)
          */
         if (supportsLinks) {
-            source = createSourceFile(dir);
-            link = dir.resolve("link").createSymbolicLink(source);
-            target = getTargetFile(dir);
+            source = createSourceFile(dir1);
+            link = dir1.resolve("link").createSymbolicLink(source);
+            target = getTargetFile(dir2);
             copyAndVerify(link, target, NOFOLLOW_LINKS);
             link.delete();
             source.delete();
@@ -804,9 +826,9 @@
          * Test: Copy link (to directory)
          */
         if (supportsLinks) {
-            source = dir.resolve("mydir").createDirectory();
-            link = dir.resolve("link").createSymbolicLink(source);
-            target = getTargetFile(dir);
+            source = dir1.resolve("mydir").createDirectory();
+            link = dir1.resolve("link").createSymbolicLink(source);
+            target = getTargetFile(dir2);
             copyAndVerify(link, target, NOFOLLOW_LINKS);
             link.delete();
             source.delete();
@@ -817,8 +839,8 @@
          */
         if (supportsLinks) {
             assertTrue(source.notExists());
-            link = dir.resolve("link").createSymbolicLink(source);
-            target = getTargetFile(dir);
+            link = dir1.resolve("link").createSymbolicLink(source);
+            target = getTargetFile(dir2);
             copyAndVerify(link, target, NOFOLLOW_LINKS);
             link.delete();
         }
@@ -830,8 +852,8 @@
             System.getProperty("os.name").startsWith("Windows"))
         {
             Path unc = Paths.get("\\\\rialto\\share\\file");
-            link = dir.resolve("link").createSymbolicLink(unc);
-            target = getTargetFile(dir);
+            link = dir1.resolve("link").createSymbolicLink(unc);
+            target = getTargetFile(dir2);
             copyAndVerify(link, target, NOFOLLOW_LINKS);
             link.delete();
         }
@@ -841,8 +863,8 @@
         /**
          * Test nulls
          */
-        source = createSourceFile(dir);
-        target = getTargetFile(dir);
+        source = createSourceFile(dir1);
+        target = getTargetFile(dir2);
         try {
             source.copyTo(null);
             throw new RuntimeException("NullPointerException expected");
@@ -861,8 +883,8 @@
         /**
          * Test UOE
          */
-        source = createSourceFile(dir);
-        target = getTargetFile(dir);
+        source = createSourceFile(dir1);
+        target = getTargetFile(dir2);
         try {
             source.copyTo(target, new CopyOption() { });
         } catch (UnsupportedOperationException x) { }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/file/Path/PassThroughFileSystem.java	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,554 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  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.
+ *
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import java.nio.file.*;
+import java.nio.file.attribute.*;
+import java.nio.file.spi.FileSystemProvider;
+import java.nio.channels.SeekableByteChannel;
+import java.net.URI;
+import java.util.*;
+import java.io.*;
+
+/**
+ * A "pass through" file system implementation that passes through, or delegates,
+ * everything to the default file system.
+ */
+
+class PassThroughFileSystem extends FileSystem {
+    private final FileSystemProvider provider;
+    private final FileSystem delegate;
+
+    PassThroughFileSystem(FileSystemProvider provider, FileSystem delegate) {
+        this.provider = provider;
+        this.delegate = delegate;
+    }
+
+    /**
+     * Creates a new "pass through" file system. Useful for test environments
+     * where the provider might not be deployed.
+     */
+    static FileSystem create() throws IOException {
+        FileSystemProvider provider = new PassThroughProvider();
+        Map<String,?> env = Collections.emptyMap();
+        URI uri = URI.create("pass:///");
+        return provider.newFileSystem(uri, env);
+    }
+
+    @Override
+    public FileSystemProvider provider() {
+        return provider;
+    }
+
+    @Override
+    public void close() throws IOException {
+        delegate.close();
+    }
+
+    @Override
+    public boolean isOpen() {
+        return delegate.isOpen();
+    }
+
+    @Override
+    public boolean isReadOnly() {
+        return delegate.isReadOnly();
+    }
+
+    @Override
+    public String getSeparator() {
+        return delegate.getSeparator();
+    }
+
+    @Override
+    public Iterable<Path> getRootDirectories() {
+        final Iterable<Path> roots = delegate.getRootDirectories();
+        return new Iterable<Path>() {
+            @Override
+            public Iterator<Path> iterator() {
+                final Iterator<Path> itr = roots.iterator();
+                return new Iterator<Path>() {
+                    @Override
+                    public boolean hasNext() {
+                        return itr.hasNext();
+                    }
+                    @Override
+                    public Path next() {
+                        return new PassThroughPath(delegate, itr.next());
+                    }
+                    @Override
+                    public void remove() {
+                        itr.remove();
+                    }
+                };
+            }
+        };
+    }
+
+    @Override
+    public Iterable<FileStore> getFileStores() {
+        // assume that unwrapped objects aren't exposed
+        return delegate.getFileStores();
+    }
+
+    @Override
+    public Set<String> supportedFileAttributeViews() {
+        // assume that unwrapped objects aren't exposed
+        return delegate.supportedFileAttributeViews();
+    }
+
+    @Override
+    public Path getPath(String path) {
+        return new PassThroughPath(this, delegate.getPath(path));
+    }
+
+    @Override
+    public PathMatcher getPathMatcher(String syntaxAndPattern) {
+        final PathMatcher matcher = delegate.getPathMatcher(syntaxAndPattern);
+        return new PathMatcher() {
+            @Override
+            public boolean matches(Path path) {
+                return matcher.matches(PassThroughPath.unwrap(path));
+            }
+        };
+    }
+
+    @Override
+    public UserPrincipalLookupService getUserPrincipalLookupService() {
+        // assume that unwrapped objects aren't exposed
+        return delegate.getUserPrincipalLookupService();
+    }
+
+    @Override
+    public WatchService newWatchService() throws IOException {
+        // to keep it simple
+        throw new UnsupportedOperationException();
+    }
+
+    static class PassThroughProvider extends FileSystemProvider {
+        private static final String SCHEME = "pass";
+        private static volatile PassThroughFileSystem delegate;
+
+        public PassThroughProvider() { }
+
+        @Override
+        public String getScheme() {
+            return SCHEME;
+        }
+
+        private void checkScheme(URI uri) {
+            if (!uri.getScheme().equalsIgnoreCase(SCHEME))
+                throw new IllegalArgumentException();
+        }
+
+        private void checkUri(URI uri) {
+            checkScheme(uri);
+            if (!uri.getSchemeSpecificPart().equals("///"))
+                throw new IllegalArgumentException();
+        }
+
+        @Override
+        public FileSystem newFileSystem(URI uri, Map<String,?> env)
+            throws IOException
+        {
+            checkUri(uri);
+            synchronized (PassThroughProvider.class) {
+                if (delegate != null)
+                    throw new FileSystemAlreadyExistsException();
+                PassThroughFileSystem result =
+                    new PassThroughFileSystem(this, FileSystems.getDefault());
+                delegate = result;
+                return result;
+            }
+        }
+
+        @Override
+        public FileSystem getFileSystem(URI uri) {
+            checkUri(uri);
+            FileSystem result = delegate;
+            if (result == null)
+                throw new FileSystemNotFoundException();
+            return result;
+        }
+
+        @Override
+        public Path getPath(URI uri) {
+            checkScheme(uri);
+            if (delegate == null)
+                throw new FileSystemNotFoundException();
+            uri = URI.create(delegate.provider().getScheme() + ":" +
+                             uri.getSchemeSpecificPart());
+            return new PassThroughPath(delegate, delegate.provider().getPath(uri));
+        }
+    }
+
+    static class PassThroughPath extends Path {
+        private final FileSystem fs;
+        private final Path delegate;
+
+        PassThroughPath(FileSystem fs, Path delegate) {
+            this.fs = fs;
+            this.delegate = delegate;
+        }
+
+        private Path wrap(Path path) {
+            return (path != null) ? new PassThroughPath(fs, path) : null;
+        }
+
+        static Path unwrap(Path wrapper) {
+            if (!(wrapper instanceof PassThroughPath))
+                throw new ProviderMismatchException();
+            return ((PassThroughPath)wrapper).delegate;
+        }
+
+        @Override
+        public FileSystem getFileSystem() {
+            return fs;
+        }
+
+        @Override
+        public boolean isAbsolute() {
+            return delegate.isAbsolute();
+        }
+
+        @Override
+        public Path getRoot() {
+            return wrap(delegate.getRoot());
+        }
+
+
+        @Override
+        public Path getName() {
+            return wrap(delegate.getName());
+        }
+
+        @Override
+        public Path getParent() {
+            return wrap(delegate.getParent());
+        }
+
+        @Override
+        public int getNameCount() {
+            return delegate.getNameCount();
+        }
+
+        @Override
+        public Path getName(int index) {
+            return wrap(delegate.getName(index));
+        }
+
+        @Override
+        public Path subpath(int beginIndex, int endIndex) {
+            return wrap(delegate.subpath(beginIndex, endIndex));
+        }
+
+        @Override
+        public boolean startsWith(Path other) {
+            return delegate.startsWith(unwrap(other));
+        }
+
+        @Override
+        public boolean endsWith(Path other) {
+            return delegate.endsWith(unwrap(other));
+        }
+
+        @Override
+        public Path normalize() {
+            return wrap(delegate.normalize());
+        }
+
+        @Override
+        public Path resolve(Path other) {
+            return wrap(delegate.resolve(unwrap(other)));
+        }
+
+        @Override
+        public Path resolve(String other) {
+            return wrap(delegate.resolve(other));
+        }
+
+        @Override
+        public Path relativize(Path other) {
+            return wrap(delegate.relativize(unwrap(other)));
+        }
+
+        @Override
+        public void setAttribute(String attribute, Object value, LinkOption... options)
+            throws IOException
+        {
+            delegate.setAttribute(attribute, value, options);
+        }
+
+        @Override
+        public Object getAttribute(String attribute, LinkOption... options)
+            throws IOException
+        {
+            // assume that unwrapped objects aren't exposed
+            return delegate.getAttribute(attribute, options);
+        }
+
+        @Override
+        public Map<String,?> readAttributes(String attributes, LinkOption... options)
+            throws IOException
+        {
+            // assume that unwrapped objects aren't exposed
+            return delegate.readAttributes(attributes, options);
+        }
+
+        @Override
+        public <V extends FileAttributeView> V getFileAttributeView(Class<V> type,
+                                                                    LinkOption... options)
+        {
+            return delegate.getFileAttributeView(type, options);
+        }
+
+        @Override
+        public void delete() throws IOException {
+            delegate.delete();
+        }
+
+        @Override
+        public void deleteIfExists() throws IOException {
+            delegate.deleteIfExists();
+        }
+
+        @Override
+        public Path createSymbolicLink(Path target, FileAttribute<?>... attrs)
+            throws IOException
+        {
+            delegate.createSymbolicLink(unwrap(target), attrs);
+            return this;
+        }
+
+        @Override
+        public Path createLink(Path existing) throws IOException {
+            delegate.createLink(unwrap(existing));
+            return this;
+        }
+
+        @Override
+        public Path readSymbolicLink() throws IOException {
+            return wrap(delegate.readSymbolicLink());
+        }
+
+        @Override
+        public URI toUri() {
+            String ssp = delegate.toUri().getSchemeSpecificPart();
+            return URI.create(fs.provider().getScheme() + ":" + ssp);
+        }
+
+        @Override
+        public Path toAbsolutePath() {
+            return wrap(delegate.toAbsolutePath());
+        }
+
+        @Override
+        public Path toRealPath(boolean resolveLinks) throws IOException {
+            return wrap(delegate.toRealPath(resolveLinks));
+        }
+
+        @Override
+        public Path copyTo(Path target, CopyOption... options) throws IOException {
+            return wrap(delegate.copyTo(unwrap(target), options));
+        }
+
+        @Override
+        public Path moveTo(Path target, CopyOption... options) throws IOException {
+            return wrap(delegate.copyTo(unwrap(target), options));
+        }
+
+        private DirectoryStream<Path> wrap(final DirectoryStream<Path> stream) {
+            return new DirectoryStream<Path>() {
+                @Override
+                public Iterator<Path> iterator() {
+                    final Iterator<Path> itr = stream.iterator();
+                    return new Iterator<Path>() {
+                        @Override
+                        public boolean hasNext() {
+                            return itr.hasNext();
+                        }
+                        @Override
+                        public Path next() {
+                            return wrap(itr.next());
+                        }
+                        @Override
+                        public void remove() {
+                            itr.remove();
+                        }
+                    };
+                }
+                @Override
+                public void close() throws IOException {
+                    stream.close();
+                }
+            };
+        }
+
+        @Override
+        public DirectoryStream<Path> newDirectoryStream() throws IOException {
+            return wrap(delegate.newDirectoryStream());
+        }
+
+        @Override
+        public DirectoryStream<Path> newDirectoryStream(String glob)
+            throws IOException
+        {
+            return wrap(delegate.newDirectoryStream(glob));
+        }
+
+        @Override
+        public DirectoryStream<Path> newDirectoryStream(DirectoryStream.Filter<? super Path> filter)
+            throws IOException
+        {
+            return wrap(delegate.newDirectoryStream(filter));
+        }
+
+        @Override
+        public Path createFile(FileAttribute<?>... attrs) throws IOException {
+            delegate.createFile(attrs);
+            return this;
+        }
+
+        @Override
+        public Path createDirectory(FileAttribute<?>... attrs)
+            throws IOException
+        {
+            delegate.createDirectory(attrs);
+            return this;
+        }
+
+        @Override
+        public SeekableByteChannel newByteChannel(Set<? extends OpenOption> options,
+                                                       FileAttribute<?>... attrs)
+            throws IOException
+        {
+            return delegate.newByteChannel(options, attrs);
+        }
+
+        @Override
+        public SeekableByteChannel newByteChannel(OpenOption... options)
+            throws IOException
+        {
+            return delegate.newByteChannel(options);
+        }
+
+        @Override
+        public InputStream newInputStream(OpenOption... options) throws IOException {
+            return delegate.newInputStream();
+        }
+
+        @Override
+        public OutputStream newOutputStream(OpenOption... options)
+            throws IOException
+        {
+            return delegate.newOutputStream(options);
+        }
+
+        @Override
+        public boolean isHidden() throws IOException {
+            return delegate.isHidden();
+        }
+
+        @Override
+        public void checkAccess(AccessMode... modes) throws IOException {
+            delegate.checkAccess(modes);
+        }
+
+        @Override
+        public boolean exists() {
+            return delegate.exists();
+        }
+
+        @Override
+        public boolean notExists() {
+            return delegate.notExists();
+        }
+
+        @Override
+        public FileStore getFileStore() throws IOException {
+            return delegate.getFileStore();
+        }
+
+        @Override
+        public WatchKey register(WatchService watcher,
+                                      WatchEvent.Kind<?>[] events,
+                                      WatchEvent.Modifier... modifiers)
+        {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public  WatchKey register(WatchService watcher,
+                                      WatchEvent.Kind<?>... events)
+        {
+            throw new UnsupportedOperationException();
+        }
+
+
+        @Override
+        public Iterator<Path> iterator() {
+            final Iterator<Path> itr = delegate.iterator();
+            return new Iterator<Path>() {
+                @Override
+                public boolean hasNext() {
+                    return itr.hasNext();
+                }
+                @Override
+                public Path next() {
+                    return wrap(itr.next());
+                }
+                @Override
+                public void remove() {
+                    itr.remove();
+                }
+            };
+        }
+
+        @Override
+        public int compareTo(Path other) {
+            return delegate.compareTo(unwrap(other));
+        }
+
+        @Override
+        public boolean isSameFile(Path other) throws IOException {
+            return delegate.isSameFile(unwrap(other));
+        }
+
+
+        @Override
+        public boolean equals(Object other) {
+            if (!(other instanceof PassThroughPath))
+                return false;
+            return delegate.equals(unwrap((PassThroughPath)other));
+        }
+
+        @Override
+        public int hashCode() {
+            return delegate.hashCode();
+        }
+
+        @Override
+        public String toString() {
+            return delegate.toString();
+        }
+    }
+}
--- a/jdk/test/java/nio/file/Path/delete_on_close.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/nio/file/Path/delete_on_close.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -40,7 +40,7 @@
 
 OS=`uname -s`
 case "$OS" in
-    Windows_* )
+    Windows_* | CYGWIN* )
         CLASSPATH="${TESTCLASSES};${TESTSRC}"
         ;;
     * )
--- a/jdk/test/java/nio/file/TestUtil.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/nio/file/TestUtil.java	Fri Feb 05 12:26:35 2010 -0800
@@ -30,17 +30,20 @@
     private TestUtil() {
     }
 
-    public static Path createTemporaryDirectory() throws IOException {
-        Path tmpdir = Paths.get(System.getProperty("java.io.tmpdir"));
+    static Path createTemporaryDirectory(String where) throws IOException {
+        Path top = FileSystems.getDefault().getPath(where);
         Random r = new Random();
-
         Path dir;
         do {
-            dir = tmpdir.resolve("name" + r.nextInt());
+            dir = top.resolve("name" + r.nextInt());
         } while (dir.exists());
         return dir.createDirectory();
     }
 
+    static Path createTemporaryDirectory() throws IOException {
+        return createTemporaryDirectory(System.getProperty("java.io.tmpdir"));
+    }
+
     static void removeAll(Path dir) {
         Files.walkFileTree(dir, new FileVisitor<Path>() {
             @Override
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/file/WatchService/OverflowEventIsLoner.java	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  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.
+ *
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6907760
+ * @summary Check that the OVERFLOW event is not retrieved with other events
+ * @library ..
+ */
+
+import java.nio.file.*;
+import static java.nio.file.StandardWatchEventKind.*;
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+public class OverflowEventIsLoner {
+
+    static void drainEvents(WatchService watcher,
+                            WatchEvent.Kind<?> expectedKind,
+                            int count)
+        throws IOException, InterruptedException
+    {
+        // wait for key to be signalled - the timeout is long to allow for
+        // polling implementations
+        WatchKey key = watcher.poll(15, TimeUnit.SECONDS);
+        if (key != null && count == 0)
+            throw new RuntimeException("Key was signalled (unexpected)");
+        if (key == null && count > 0)
+            throw new RuntimeException("Key not signalled (unexpected)");
+
+        int nread = 0;
+        boolean gotOverflow = false;
+        do {
+            List<WatchEvent<?>> events = key.pollEvents();
+            for (WatchEvent<?> event: events) {
+                WatchEvent.Kind<?> kind = event.kind();
+                if (kind == expectedKind) {
+                    // expected event kind
+                    if (++nread > count)
+                        throw new RuntimeException("More events than expected!!");
+                } else if (kind == OVERFLOW) {
+                    // overflow event should not be retrieved with other events
+                    if (events.size() > 1)
+                        throw new RuntimeException("Overflow retrieved with other events");
+                    gotOverflow = true;
+                } else {
+                    throw new RuntimeException("Unexpected event '" + kind + "'");
+                }
+            }
+            if (!key.reset())
+                throw new RuntimeException("Key is no longer valid");
+            key = watcher.poll(2, TimeUnit.SECONDS);
+        } while (key != null);
+
+        // check that all expected events were received or there was an overflow
+        if (nread < count && !gotOverflow)
+            throw new RuntimeException("Insufficient events");
+    }
+
+
+    static void test(Path dir) throws IOException, InterruptedException {
+        WatchService watcher = dir.getFileSystem().newWatchService();
+        try {
+            WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE);
+
+            // create a lot of files
+            int n = 1024;
+            Path[] files = new Path[n];
+            for (int i=0; i<n; i++) {
+                files[i] = dir.resolve("foo" + i).createFile();
+            }
+
+            // give time for events to accumulate (improve chance of overflow)
+            Thread.sleep(1000);
+
+            // check that we see the create events (or overflow)
+            drainEvents(watcher, ENTRY_CREATE, n);
+
+            // delete the files
+            for (int i=0; i<n; i++) {
+                files[i].delete();
+            }
+
+            // give time for events to accumulate (improve chance of overflow)
+            Thread.sleep(1000);
+
+            // check that we see the delete events (or overflow)
+            drainEvents(watcher, ENTRY_DELETE, n);
+        } finally {
+            watcher.close();
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        Path dir = TestUtil.createTemporaryDirectory();
+        try {
+            test(dir);
+        } finally {
+            TestUtil.removeAll(dir);
+        }
+    }
+}
--- a/jdk/test/java/security/Provider/Turkish.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/security/Provider/Turkish.java	Fri Feb 05 12:26:35 2010 -0800
@@ -25,6 +25,7 @@
  * @test
  * @bug 6220064
  * @summary make sure everything works ok in the Turkish local (dotted/dotless i problem)
+ * @run main/othervm Turkish
  * @author Andreas Sterbenz
  */
 
--- a/jdk/test/java/util/Currency/PropertiesTest.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/util/Currency/PropertiesTest.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -34,7 +34,7 @@
     PS=":"
     FS="/"
     ;;
-  Windows* )
+  Windows* | CYGWIN* )
     PS=";"
     FS="\\"
     ;;
--- a/jdk/test/java/util/PluggableLocale/ExecTest.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/util/PluggableLocale/ExecTest.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -62,7 +62,7 @@
     PS=":"
     FS="/"
     ;;
-  Windows* )
+  Windows* | CYGWIN* )
     PS=";"
     FS="\\"
     ;;
--- a/jdk/test/java/util/ResourceBundle/Bug6299235Test.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/util/ResourceBundle/Bug6299235Test.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -35,7 +35,7 @@
     PATHSEP=":"
     FILESEP="/"
     ;;
-  Windows* )
+  Windows* | CYGWIN* )
     PATHSEP=";"
     FILESEP="\\"
     ;;
@@ -63,7 +63,7 @@
 fi
 
 if [ -d "${JRE_EXT_DIR}" ]; then
-    NEW_EXT_DIR=${JRE_EXT_DIR}${PATHSEP}${TESTSRC}
+    NEW_EXT_DIR="${JRE_EXT_DIR}${PATHSEP}${TESTSRC}"
 else
     NEW_EXT_DIR=${TESTSRC}
 fi
--- a/jdk/test/java/util/ResourceBundle/Control/ExpirationTest.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/util/ResourceBundle/Control/ExpirationTest.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -69,7 +69,7 @@
 HAS_S=NO
 
 case "`uname`" in
-Windows*)
+Windows* | CYGWIN* )
     DEL=";"
     ;;
 SunOS)
--- a/jdk/test/java/util/ServiceLoader/basic.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/java/util/ServiceLoader/basic.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -50,9 +50,9 @@
       SEP='\;' ;;
 esac
 
-JARD=`pwd`/x.jar
-EXTD=`pwd`/x.ext
-TESTD=`pwd`/x.test
+JARD=x.jar
+EXTD=x.ext
+TESTD=x.test
 
 if [ \! -d $EXTD ]; then
     # Initialize
--- a/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/javax/imageio/stream/StreamCloserLeak/run_test.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -92,7 +92,7 @@
       TMP="/tmp"
       ;;
 
-   Windows_95 | Windows_98 | Windows_NT | Windows_ME )
+   Windows_95 | Windows_98 | Windows_NT | Windows_ME | CYGWIN* )
       VAR="A different value for Win32"
       DEFAULT_JDK=/usr/local/java/jdk1.2/win32
       FILESEP="\\"
--- a/jdk/test/javax/script/CommonSetup.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/javax/script/CommonSetup.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -49,6 +49,12 @@
     OS="Windows"
     FS="\\"
     ;;
+  CYGWIN* )
+    PS=";"
+    OS="Windows"
+    FS="\\"
+    isCygwin=true
+    ;;
   * )
     echo "Unrecognized system!"
     exit 1;
--- a/jdk/test/javax/script/ProviderTest.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/javax/script/ProviderTest.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -46,5 +46,5 @@
 echo "Running test ..."
 
 $JAVA -classpath \
-  ${TESTCLASSES}${PS}${TESTCLASSES}/dummy.jar \
+  "${TESTCLASSES}${PS}${TESTCLASSES}/dummy.jar" \
   ProviderTest
--- a/jdk/test/sun/jvmstat/testlibrary/utils.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/sun/jvmstat/testlibrary/utils.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -40,7 +40,7 @@
 
     OS=`uname -s`
     case ${OS} in
-    Windows_*)
+    Windows_* | CYGWIN*)
         PS=";"
         FS="\\"
         ;;
@@ -54,7 +54,7 @@
 verify_os() {
     OS=`uname -s`
     case ${OS} in
-    Windows_95 | Windows_98 | Windows_ME)
+    Windows_95 | Windows_98 | Windows_ME | CYGWIN* )
         echo "Test bypassed: jvmstat feature not supported on ${OS}"
         exit 0
         ;;
--- a/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -45,7 +45,7 @@
 s^@TEST-SRC@/^${TESTCLASSES}${DFILESEP}^g
 EOF
     ;;
-Windows_95 | Windows_98 | Windows_NT | Windows_ME)
+Windows_95 | Windows_98 | Windows_NT | Windows_ME | CYGWIN*)
     PATHSEP=";"
     FILESEP="\\"
     DFILESEP=$FILESEP$FILESEP
--- a/jdk/test/sun/misc/URLClassPath/ClassnameCharTest.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/sun/misc/URLClassPath/ClassnameCharTest.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -44,7 +44,7 @@
     PS=":"
     FS="/"
     ;;
-  Windows* )
+  Windows* | CYGWIN* )
     PS=";"
     FS="\\"
     ;;
@@ -59,6 +59,6 @@
 ${TESTJAVA}${FS}bin${FS}jar xvf testclasses.jar "fo o.class"
 ${TESTJAVA}${FS}bin${FS}javac -d ${TESTCLASSES} ${TESTSRC}${FS}ClassnameCharTest.java
 
-${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES}${PS}${TESTCLASSES}${FS}sun${FS}misc${FS}URLClassPath ClassnameCharTest
+${TESTJAVA}${FS}bin${FS}java -classpath "${TESTCLASSES}${PS}${TESTCLASSES}${FS}sun${FS}misc${FS}URLClassPath" ClassnameCharTest
 
 rm -rf "fo o.class" testclasses.jar
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/ktab/KeyString.java	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  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.
+ *
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+/*
+ * @test
+ * @bug 6917791
+ * @summary KeyTabEntry, when the byte value smaller then 16, the string drop '0'
+ */
+
+import sun.security.krb5.internal.ktab.KeyTabEntry;
+
+public class KeyString {
+    public static void main(String[] args) throws Exception {
+        KeyTabEntry e = new KeyTabEntry(null, null, null, 1, 1, new byte[8]);
+        // "0x" plus eight "00"
+        if (e.getKeyString().length() != 18) {
+            throw new Exception("key bytes length not correct");
+        }
+    }
+}
--- a/jdk/test/sun/tools/common/ApplicationSetup.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/sun/tools/common/ApplicationSetup.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -45,7 +45,11 @@
   # "java" process.
   if [ "$OS" = "Windows" ]; then
     sleep 2
-    realpid=`ps -o pid,ppid,comm|grep ${pid}|grep "java"|cut -c1-6`
+    if [ "${isCygwin}" = "true" ] ; then
+      realpid=`ps -p ${pid} | tail -1 | awk '{print $4;}'`
+    else
+      realpid=`ps -o pid,ppid,comm|grep ${pid}|grep "java"|cut -c1-6`
+    fi
     pid=${realpid}
   fi
                                                                                                      
--- a/jdk/test/sun/tools/common/CommonSetup.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/sun/tools/common/CommonSetup.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -67,6 +67,11 @@
     PS=";"
     OS="Windows"
     ;;
+  CYGWIN* )
+    PS=";"
+    OS="Windows"
+    isCygwin=true
+    ;;
   * )
     PS=":"
     ;;
--- a/jdk/test/sun/tools/jps/jps-help.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/sun/tools/jps/jps-help.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -35,7 +35,7 @@
 rm -f jps.out 2>/dev/null
 ${JPS} -? > jps.out 2>&1
 
-diff jps.out ${TESTSRC}/usage.out
+diff -w jps.out ${TESTSRC}/usage.out
 if [ $? != 0 ]
 then
   echo "Output of jps -? differ from expected output. Failed."
@@ -46,7 +46,7 @@
 rm -f jps.out 2>/dev/null
 ${JPS} -help > jps.out 2>&1
 
-diff jps.out ${TESTSRC}/usage.out
+diff -w jps.out ${TESTSRC}/usage.out
 if [ $? != 0 ]
 then
   echo "Output of jps -help differ from expected output. Failed."
--- a/jdk/test/sun/tools/jstat/jstatHelp.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/sun/tools/jstat/jstatHelp.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -35,7 +35,7 @@
 rm -f jstat.out 2>/dev/null
 ${JSTAT} -? > jstat.out 2>&1
 
-diff jstat.out ${TESTSRC}/usage.out
+diff -w jstat.out ${TESTSRC}/usage.out
 if [ $? != 0 ]
 then
   echo "Output of jstat -? differ from expected output. Failed."
@@ -45,7 +45,7 @@
 rm -f jstat.out 2>/dev/null
 ${JSTAT} -help > jstat.out 2>&1
 
-diff jstat.out ${TESTSRC}/usage.out
+diff -w jstat.out ${TESTSRC}/usage.out
 if [ $? != 0 ]
 then
   echo "Output of jstat -help differ from expected output. Failed."
--- a/jdk/test/sun/tools/jstat/jstatOptions1.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/sun/tools/jstat/jstatOptions1.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -35,4 +35,4 @@
 rm -f jstat.out 2>/dev/null
 ${JSTAT} -options > jstat.out 2>&1
 
-diff jstat.out ${TESTSRC}/options1.out
+diff -w jstat.out ${TESTSRC}/options1.out
--- a/jdk/test/sun/tools/jstatd/jstatdUsage1.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/sun/tools/jstatd/jstatdUsage1.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -37,7 +37,7 @@
 
 ${JSTATD} -? > ${JSTATD_1_OUT} 2>&1
 
-diff ${JSTATD_1_OUT} ${TESTSRC}/usage.out
+diff -w ${JSTATD_1_OUT} ${TESTSRC}/usage.out
 if [ $? != 0 ]
 then
   echo "Output of jstatd -? differs from expected output. Failed."
@@ -46,7 +46,7 @@
 
 ${JSTATD} -help > ${JSTATD_2_OUT} 2>&1
 
-diff ${JSTATD_2_OUT} ${TESTSRC}/usage.out
+diff -w ${JSTATD_2_OUT} ${TESTSRC}/usage.out
 if [ $? != 0 ]
 then
   echo "Output of jstatd -help differs from expected output. Failed."
--- a/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/sun/tools/native2ascii/Native2AsciiTests.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -32,7 +32,7 @@
 if [ "${TESTJAVA}" = "" ]; then TESTJAVA=$1; shift; fi
 
 case `uname -s` in
-  Windows*) OS=Windows;;
+  Windows* | CYGWIN*) OS=Windows;;
   SunOS|Linux) OS=Unix;;
 esac
 
@@ -45,12 +45,14 @@
 
   # Strip carriage returns from output when comparing with n2a test output
   # on win32 systems
-  if [ OS = Windows ]; then
-     tr -d '\015' <$out >$out.1
+  if [ ${OS} = Windows ]; then
+     sed -e 's@\\r@@g' $out >$out.1
+     sed -e 's@\\r@@g' $expected >$out.expected
   else
      cp $out $out.1
+     cp $expected $out.expected
   fi
-  if (set -x; diff -c $expected $out.1); then
+  if (set -x; diff -c $out.expected $out.1); then
     echo "$bug passed"
   else
     echo "$bug failed"
--- a/jdk/test/tools/launcher/ChangeDataModel.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/tools/launcher/ChangeDataModel.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -29,6 +29,9 @@
 
 OS=`uname -s`;
 
+# To remove CR from output, needed for java apps in CYGWIN, harmless otherwise
+SED_CR="sed -e s@\\r@@g"
+
 case "$OS" in
 	Windows* | CYGWIN* )
 	  PATHSEP=";"
@@ -79,10 +82,10 @@
 
 # Verify data model flag for default data model is accepted
 
-DM=`$JAVA GetDataModel`
+DM=`$JAVA GetDataModel | ${SED_CR}`
 case "$DM" in
         32 )
-		DM2=`${JAVA} -d32 GetDataModel`	
+		DM2=`${JAVA} -d32 GetDataModel | ${SED_CR}`	
 		if [ "${DM2}" != "32" ]
 		then
 	  	echo "Data model flag -d32 not accepted or had improper effect."
@@ -91,7 +94,7 @@
         ;;
 
         64 )
-		DM2=`${JAVA} -d64 GetDataModel`	
+		DM2=`${JAVA} -d64 GetDataModel | ${SED_CR}`	
 		if [ "${DM2}" != "64" ]
 		then
 	  	echo "Data model flag -d64 not accepted or had improper effect."
@@ -227,10 +230,10 @@
 else
 # Negative tests for non-dual mode platforms to ensure the other data model is 
 # rejected
-	DM=`$JAVA GetDataModel`
+	DM=`$JAVA GetDataModel | ${SED_CR}`
 	case "$DM" in
 	   32 )
-		DM2=`${JAVA} -d64 GetDataModel`	
+		DM2=`${JAVA} -d64 GetDataModel | ${SED_CR}`	
 		if [ "x${DM2}" != "x" ]
 		then
 		   echo "Data model flag -d64 was accepted."
@@ -239,7 +242,7 @@
            ;;
 
 	   64 )
-		DM2=`${JAVA} -d32 GetDataModel`	
+		DM2=`${JAVA} -d32 GetDataModel | ${SED_CR}`	
 		if [ "x${DM2}" != "x" ]
 		  then
 		    echo "Data model flag -d32 was accepted."
--- a/jdk/test/tools/launcher/ClassPathWildCard.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/tools/launcher/ClassPathWildCard.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -145,7 +145,7 @@
 
 OS=`uname -s`
 case $OS in 
-    Windows*|Cygwin*)
+    Windows*|CYGWIN*)
         PATHSEP=";"
         ExecJava "" "${PATHSEP}NOOPDIR"
         ExecJava "w" "${PATHSEP}NOOPDIR"
--- a/jdk/test/tools/launcher/DefaultLocaleTest.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/tools/launcher/DefaultLocaleTest.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -48,7 +48,7 @@
 OS=`uname`
 
 case "$OS" in
-        Windows* | CYGWIN* )
+        Windows* )
             JAVAC="${TESTJAVA}/bin/javac -d . "
             JAVA="${TESTJAVA}/bin/java -classpath . "
             JAVAW="${TESTJAVA}/bin/javaw -classpath . "
@@ -64,6 +64,22 @@
             echo "Test passes"
             exit 0
         ;;
+        CYGWIN* )
+            JAVAC="${TESTJAVA}/bin/javac -d . "
+            JAVA="${TESTJAVA}/bin/java -classpath . "
+            JAVAW="${TESTJAVA}/bin/javaw -classpath . "
+
+            ${JAVAC} ${TESTSRC}/DefaultLocaleTest.java
+            ${JAVA} DefaultLocaleTest | sed -e s@\\r@@g > x.out
+            ${JAVAW} DefaultLocaleTest `cat x.out`
+            if [ $? -ne 0 ]
+            then
+                echo "Test fails"
+                exit 1
+            fi
+            echo "Test passes"
+            exit 0
+        ;;
         * )
         echo "Non-windows environment; test vacuously succeeds."
         exit 0;
--- a/jdk/test/tools/launcher/UnicodeTest.sh	Thu Feb 04 15:50:59 2010 -0800
+++ b/jdk/test/tools/launcher/UnicodeTest.sh	Fri Feb 05 12:26:35 2010 -0800
@@ -54,7 +54,7 @@
 
 echo "creating test source files"
 "$JAVAC" -d . "${TESTSRC}"/UnicodeTest.java
-CLASS_NAME=`"$JAVA" UnicodeTest`
+CLASS_NAME=`"$JAVA" UnicodeTest | sed -e 's@\\r@@g' `
 
 if [ "$CLASS_NAME" = "" ]
 then
--- a/langtools/.hgtags	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/.hgtags	Fri Feb 05 12:26:35 2010 -0800
@@ -54,3 +54,5 @@
 0398ae15b90ac76d87ee21844453e95ff8613e43 jdk7-b77
 acc1e40a5874ebf32bebcb6ada565b3b40b7461c jdk7-b78
 ac5b4c5644ce54585e5287563dde2b006fa664f4 jdk7-b79
+f0074aa48d4e2a4c03c92b9c4f880679fea0306c jdk7-b80
+cfabfcf9f110ef896cbdd382903d20eefbceefe0 jdk7-b81
--- a/langtools/make/Makefile	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/make/Makefile	Fri Feb 05 12:26:35 2010 -0800
@@ -144,8 +144,8 @@
   ifdef ALT_JDK_TOPDIR
     ANT_OPTIONS += -Dimport.jdk=$(ALT_JDK_TOPDIR)
   else 
-    ifdef ALT_JDK_IMPORT_DIR
-      ANT_OPTIONS += -Dimport.jdk=$(ALT_JDK_IMPORT_DIR)
+    ifdef ALT_JDK_IMPORT_PATH
+      ANT_OPTIONS += -Dimport.jdk=$(ALT_JDK_IMPORT_PATH)
     endif
   endif
 endif
--- a/langtools/make/build.xml	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/make/build.xml	Fri Feb 05 12:26:35 2010 -0800
@@ -107,14 +107,21 @@
         ignoresystemclasses="true"
         classpath="${import.jdk}/jre/lib/rt.jar" classname="java.nio.file.Path"/>
 
+    <!-- Set the default value of the sourcepath used for javac. -->
     <condition property="javac.sourcepath" value="${build.genstubs.dir}" else="">
         <isset property="import.jdk.src.dir"/>
     </condition>
 
+    <!-- Set the default value of the classpath used for javac. -->
     <property name="javac.classpath" value=""/>
 
+    <!-- Set the default bootclasspath option used for javac. 
+	Note that different variants of the option are used, meaning we can't just 
+	define the value for the option.
+	Note the explicit use of the standard property ${path.separator} in the following.
+	This is because Ant is not clever enough to handle direct use of : or ; -->
     <condition property="javac.bootclasspath.opt"
-            value="-Xbootclasspath:${build.classes.dir}:${import.jdk.jar}"
+            value="-Xbootclasspath:${build.classes.dir}${path.separator}${import.jdk.jar}"
             else="-Xbootclasspath/p:${build.classes.dir}">
         <isset property="import.jdk.jar"/>
     </condition>
--- a/langtools/make/tools/CompileProperties/CompileProperties.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/make/tools/CompileProperties/CompileProperties.java	Fri Feb 05 12:26:35 2010 -0800
@@ -101,7 +101,7 @@
         boolean ok = true;
         /* Original usage */
         if (args.length == 2 && args[0].charAt(0) != '-' ) {
-            ok = createFile(args[0], args[1], "ListResourceBundle");
+            ok = createFile(args[0], args[1], "java.util.ListResourceBundle");
         } else if (args.length == 3) {
             ok = createFile(args[0], args[1], args[2]);
         } else if (args.length == 0) {
@@ -285,9 +285,9 @@
         log.info("    java CompileProperties {-compile path_to_properties_file path_to_java_output_file super_class} -or- -optionsfile filename");
         log.info("");
         log.info("Example:");
-        log.info("    java CompileProperties -compile test.properties test.java ListResourceBundle");
+        log.info("    java CompileProperties -compile test.properties test.java java.util.ListResourceBundle");
         log.info("    java CompileProperties -optionsfile option_file");
-        log.info("option_file contains: -compile test.properties test.java ListResourceBundle");
+        log.info("option_file contains: -compile test.properties test.java java.util.ListResourceBundle");
     }
 
     private static String escape(String theString) {
@@ -379,7 +379,6 @@
 
     private static final String FORMAT =
             "{0}" +
-            "import java.util.ListResourceBundle;\n\n" +
             "public final class {1} extends {2} '{'\n" +
             "    protected final Object[][] getContents() '{'\n" +
             "        return new Object[][] '{'\n" +
--- a/langtools/make/tools/CompileProperties/CompilePropertiesTask.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/make/tools/CompileProperties/CompilePropertiesTask.java	Fri Feb 05 12:26:35 2010 -0800
@@ -45,6 +45,7 @@
         this.superclass = superclass;
     }
 
+    @Override
     public void execute() {
         CompileProperties.Log log = new CompileProperties.Log() {
             public void error(String msg, Exception e) {
@@ -84,7 +85,7 @@
             log("Generating " + count + " resource files to " + destDir, Project.MSG_INFO);
             CompileProperties cp = new CompileProperties();
             cp.setLog(log);
-            boolean ok = cp.run((String[])mainOpts.toArray(new String[mainOpts.size()]));
+            boolean ok = cp.run(mainOpts.toArray(new String[mainOpts.size()]));
             if (!ok)
                 throw new BuildException("CompileProperties failed.");
         }
--- a/langtools/make/tools/GenStubs/GenStubs.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/make/tools/GenStubs/GenStubs.java	Fri Feb 05 12:26:35 2010 -0800
@@ -22,6 +22,7 @@
  * CA 95054 USA or visit www.sun.com if you need additional information or
  * have any questions.
  */
+
 import java.io.*;
 import java.util.*;
 import javax.tools.JavaFileObject;
@@ -41,15 +42,22 @@
 import com.sun.tools.javac.code.Flags;
 import com.sun.tools.javac.code.TypeTags;
 import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.JCBlock;
 import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
+import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
+import com.sun.tools.javac.tree.JCTree.JCIdent;
+import com.sun.tools.javac.tree.JCTree.JCImport;
 import com.sun.tools.javac.tree.JCTree.JCLiteral;
 import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
 import com.sun.tools.javac.tree.JCTree.JCModifiers;
-import com.sun.tools.javac.tree.JCTree.JCStatement;
 import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
 import com.sun.tools.javac.tree.Pretty;
+import com.sun.tools.javac.tree.TreeMaker;
+import com.sun.tools.javac.tree.TreeScanner;
 import com.sun.tools.javac.tree.TreeTranslator;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.ListBuffer;
+import com.sun.tools.javac.util.Name;
+import javax.tools.JavaFileManager;
 
 /**
  * Generate stub source files by removing implementation details from input files.
@@ -161,6 +169,7 @@
 
     void makeStub(StandardJavaFileManager fm, CompilationUnitTree tree) throws IOException {
         CompilationUnitTree tree2 = new StubMaker().translate(tree);
+        CompilationUnitTree tree3 = new ImportCleaner(fm).removeRedundantImports(tree2);
 
         String className = fm.inferBinaryName(StandardLocation.SOURCE_PATH, tree.getSourceFile());
         JavaFileObject fo = fm.getJavaFileForOutput(StandardLocation.SOURCE_OUTPUT,
@@ -168,7 +177,7 @@
         // System.err.println("Writing " + className + " to " + fo.getName());
         Writer out = fo.openWriter();
         try {
-            new Pretty(out, true).printExpr((JCTree) tree2);
+            new Pretty(out, true).printExpr((JCTree) tree3);
         } finally {
             out.close();
         }
@@ -272,6 +281,53 @@
         }
     }
 
+    class ImportCleaner extends TreeScanner {
+        private Set<Name> names = new HashSet<Name>();
+        private TreeMaker m;
+
+        ImportCleaner(JavaFileManager fm) {
+            // ImportCleaner itself doesn't require a filemanager, but instantiating
+            // a TreeMaker does, indirectly (via ClassReader, sigh)
+            Context c = new Context();
+            c.put(JavaFileManager.class, fm);
+            m = TreeMaker.instance(c);
+        }
+
+        CompilationUnitTree removeRedundantImports(CompilationUnitTree t) {
+            JCCompilationUnit tree = (JCCompilationUnit) t;
+            tree.accept(this);
+            ListBuffer<JCTree> defs = new ListBuffer<JCTree>();
+            for (JCTree def: tree.defs) {
+                if (def.getTag() == JCTree.IMPORT) {
+                    JCImport imp = (JCImport) def;
+                    if (imp.qualid.getTag() == JCTree.SELECT) {
+                        JCFieldAccess qualid = (JCFieldAccess) imp.qualid;
+                        if (!qualid.name.toString().equals("*")
+                                && !names.contains(qualid.name)) {
+                            continue;
+                        }
+                    }
+                }
+                defs.add(def);
+            }
+            return m.TopLevel(tree.packageAnnotations, tree.pid, defs.toList());
+        }
+
+        @Override
+        public void visitImport(JCImport tree) { } // ignore names found in imports
+
+        @Override
+        public void visitIdent(JCIdent tree) {
+            names.add(tree.name);
+        }
+
+        @Override
+        public void visitSelect(JCFieldAccess tree) {
+            super.visitSelect(tree);
+            names.add(tree.name);
+        }
+    }
+
     //---------- Ant Invocation ------------------------------------------------
 
     public static class Ant extends MatchingTask {
--- a/langtools/src/share/bin/launcher.sh-template	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/src/share/bin/launcher.sh-template	Fri Feb 05 12:26:35 2010 -0800
@@ -38,7 +38,7 @@
 # dependent jar files for additional dependencies.
 
 if [ "$LANGTOOLS_USE_BOOTCLASSPATH" != "no" ]; then
-   cp=`unzip -c $mylib/#PROGRAM#.jar META-INF/MANIFEST.MF |
+   cp=`unzip -c "$mylib/#PROGRAM#.jar" META-INF/MANIFEST.MF |
        grep "Class-Path:" |
        sed -e 's|Class-Path: *||' -e 's|\([a-z]*\.jar\) *|'"$mylib"'/\1:|g'`
    bcp="$mylib/#PROGRAM#.jar":$cp 
--- a/langtools/src/share/classes/com/sun/tools/javac/nio/PathFileObject.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/nio/PathFileObject.java	Fri Feb 05 12:26:35 2010 -0800
@@ -309,7 +309,7 @@
     }
 
     protected static String toBinaryName(String relativePath, String sep) {
-        return removeExtension(relativePath).replaceAll(sep, ".");
+        return removeExtension(relativePath).replace(sep, ".");
     }
 
     protected static String removeExtension(String fileName) {
--- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Fri Feb 05 12:26:35 2010 -0800
@@ -2613,12 +2613,12 @@
             body = toP(F.at(identPos).AnonymousClassDef(mods1, defs));
         }
         if (args.isEmpty() && body == null)
-            createPos = Position.NOPOS;
-        JCIdent ident = F.at(Position.NOPOS).Ident(enumName);
+            createPos = identPos;
+        JCIdent ident = F.at(identPos).Ident(enumName);
         JCNewClass create = F.at(createPos).NewClass(null, typeArgs, ident, args, body);
-        if (createPos != Position.NOPOS)
+        if (createPos != identPos)
             storeEnd(create, S.prevEndPos());
-        ident = F.at(Position.NOPOS).Ident(enumName);
+        ident = F.at(identPos).Ident(enumName);
         JCTree result = toP(F.at(pos).VarDef(mods, name, ident, create));
         attach(result, dc);
         return result;
--- a/langtools/src/share/classes/com/sun/tools/javac/parser/Keywords.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/parser/Keywords.java	Fri Feb 05 12:26:35 2010 -0800
@@ -51,12 +51,10 @@
         return instance;
     }
 
-    private final Log log;
     private final Names names;
 
     protected Keywords(Context context) {
         context.put(keywordsKey, this);
-        log = Log.instance(context);
         names = Names.instance(context);
 
         for (Token t : Token.values()) {
--- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties	Fri Feb 05 12:26:35 2010 -0800
@@ -704,7 +704,7 @@
     {0}; overridden method is a bridge method
 
 compiler.warn.pkg-info.already.seen=\
-    [package-info] a package-info.java file has already been seen for package {0}
+    a package-info.java file has already been seen for package {0}
 compiler.warn.path.element.not.found=\
     [path] bad path element "{0}": no such file or directory
 compiler.warn.possible.fall-through.into.case=\
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/Pretty.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/Pretty.java	Fri Feb 05 12:26:35 2010 -0800
@@ -468,6 +468,10 @@
                 print(" throws ");
                 printExprs(tree.thrown);
             }
+            if (tree.defaultValue != null) {
+                print(" default ");
+                printExpr(tree.defaultValue);
+            }
             if (tree.body != null) {
                 print(" ");
                 printStat(tree.body);
@@ -1148,20 +1152,7 @@
 
     // Prints the inner element type of a nested array
     private void printBaseElementType(JCTree tree) throws IOException {
-        switch (tree.getTag()) {
-        case JCTree.TYPEARRAY:
-            printBaseElementType(((JCArrayTypeTree)tree).elemtype);
-            return;
-        case JCTree.WILDCARD:
-            printBaseElementType(((JCWildcard)tree).inner);
-            return;
-        case JCTree.ANNOTATED_TYPE:
-            printBaseElementType(((JCAnnotatedType)tree).underlyingType);
-            return;
-        default:
-            printExpr(tree);
-            return;
-        }
+        printExpr(TreeInfo.innermostType(tree));
     }
 
     // prints the brackets of a nested array in reverse order
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Fri Feb 05 12:26:35 2010 -0800
@@ -891,4 +891,17 @@
             throw new AssertionError("Unexpected type tree: " + tree);
         }
     }
+
+    public static JCTree innermostType(JCTree type) {
+        switch (type.getTag()) {
+        case JCTree.TYPEARRAY:
+            return innermostType(((JCArrayTypeTree)type).elemtype);
+        case JCTree.WILDCARD:
+            return innermostType(((JCWildcard)type).inner);
+        case JCTree.ANNOTATED_TYPE:
+            return innermostType(((JCAnnotatedType)type).underlyingType);
+        default:
+            return type;
+        }
+    }
 }
--- a/langtools/src/share/classes/com/sun/tools/javac/util/LayoutCharacters.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/LayoutCharacters.java	Fri Feb 05 12:26:35 2010 -0800
@@ -49,7 +49,7 @@
 
     /** Tabulator character.
      */
-    final static byte TAB   = 0x8;
+    final static byte TAB   = 0x9;
 
     /** Line feed character.
      */
--- a/langtools/src/share/classes/com/sun/tools/javac/util/Log.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/util/Log.java	Fri Feb 05 12:26:35 2010 -0800
@@ -145,7 +145,10 @@
         private int getIntOption(Options options, String optionName, int defaultValue) {
             String s = options.get(optionName);
             try {
-                if (s != null) return Integer.parseInt(s);
+                if (s != null) {
+                    int n = Integer.parseInt(s);
+                    return (n <= 0 ? Integer.MAX_VALUE : n);
+                }
             } catch (NumberFormatException e) {
                 // silently ignore ill-formed numbers
             }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T6326754.java	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  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.
+ *
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6326754
+ * @summary Compiler will fail to handle -Xmaxerrs with -ve numbers
+ *
+ * @compile/fail/ref=T6326754.out -XDrawDiagnostics -Xmaxerrs -1 T6326754.java
+ * @compile/fail/ref=T6326754.out -XDrawDiagnostics -Xmaxerrs  0 T6326754.java
+ * @compile/fail/ref=T6326754.out -XDrawDiagnostics -Xmaxerrs 10 T6326754.java
+ * @compile/fail/ref=T6326754.out -XDrawDiagnostics              T6326754.java
+ */
+class TestConstructor<T,K>{
+    T t;
+    K k;
+    public TestConstructor(T t,K k){
+        this.t =t;
+    }
+    public TestConstructor(K k){
+        this.k = k;
+        this.t = null;
+    }
+    public TestConstructor(T t){
+        this.t=t;
+        this.k=null;
+    }
+    public void setT(T t){
+        this.t=t;
+        this.k=null;
+    }
+    public void setT(K k){
+        this.k = k;
+        this.t = null;
+    }
+    public void setT(T t,K k){
+        this.t = t;
+        this.k = k;
+    }
+}
+class TestC<T>{
+    T t;
+    public <T>void setT(T t){
+        this.t = t;
+    }
+}
+public class T6326754{
+    public static void main(String... arg){
+        TestC tC =new TestC();
+        tC.setT();
+        TestConstructor tc = new TestConstructor("saaa");
+        tc.setT("sasa");
+        TestC<Integer> tC1 = new TestC();
+        tC1.setT(545);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T6326754.out	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,7 @@
+T6326754.java:44:12: compiler.err.name.clash.same.erasure: TestConstructor(T), TestConstructor(K)
+T6326754.java:52:17: compiler.err.name.clash.same.erasure: setT(K), setT(T)
+T6326754.java:64:18: compiler.err.prob.found.req: (compiler.misc.incompatible.types), T, T
+T6326754.java:70:11: compiler.err.cant.apply.symbol: kindname.method, setT, java.lang.Object, compiler.misc.no.args, kindname.class, TestC<T>, null
+- compiler.note.unchecked.filename: T6326754.java
+- compiler.note.unchecked.recompile
+4 errors
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T6472751.java	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2006-2010 Sun Microsystems, Inc.  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.
+ *
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6472751
+ * @summary SourcePositions.getStartPos returns incorrect value for enum constants
+ * @author Peter Ahe
+ */
+
+import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.tree.Tree;
+import com.sun.source.tree.Tree.Kind;
+import com.sun.source.util.JavacTask;
+import com.sun.source.util.SourcePositions;
+import com.sun.source.util.TreeScanner;
+import com.sun.source.util.Trees;
+import com.sun.tools.javac.util.List;
+import java.io.IOException;
+import java.net.URI;
+import javax.tools.JavaCompiler;
+import javax.tools.JavaFileObject;
+import javax.tools.SimpleJavaFileObject;
+import javax.tools.ToolProvider;
+
+public class T6472751 {
+    static class MyFileObject extends SimpleJavaFileObject {
+        public MyFileObject() {
+            super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
+        }
+        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
+            return "public enum Test { ABC, DEF; }";
+        }
+    }
+    static Trees trees;
+    static SourcePositions positions;
+    public static void main(String[] args) throws IOException {
+        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+        JavacTask task = (JavacTask) compiler.getTask(null, null, null, null, null, List.of(new MyFileObject()));
+        trees = Trees.instance(task);
+        positions = trees.getSourcePositions();
+        Iterable<? extends CompilationUnitTree> asts = task.parse();
+        for (CompilationUnitTree ast : asts) {
+            new MyVisitor().scan(ast, null);
+        }
+    }
+
+    static class MyVisitor extends TreeScanner<Void,Void> {
+        @Override
+        public Void scan(Tree node, Void ignored) {
+            if (node == null)
+                return null;
+            Kind k = node.getKind();
+            long pos = positions.getStartPosition(null,node);
+            System.out.format("%s: %s%n", k, pos);
+            if (k != Kind.MODIFIERS && pos < 0)
+                throw new Error("unexpected position found");
+            return super.scan(node, ignored);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T6567414.java	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,11 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 6567414
+ * @summary javac compiler reports no source file or line on enum constant declaration error
+ * @compile/fail/ref=T6567414.out -XDrawDiagnostics T6567414.java
+ */
+enum Test {
+  FOO;
+  Test() throws Exception {}
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T6567414.out	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,2 @@
+T6567414.java:8:3: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
+1 error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T6665791.java	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  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.
+ *
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6665791
+ * @summary com.sun.source.tree.MethodTree.toString() does not output default values
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import javax.tools.JavaCompiler;
+import javax.tools.JavaFileObject;
+import javax.tools.StandardJavaFileManager;
+import javax.tools.ToolProvider;
+import com.sun.source.tree.ClassTree;
+import com.sun.source.util.JavacTask;
+import com.sun.source.util.TreeScanner;
+import java.io.FileWriter;
+
+public class T6665791 {
+    static String test = "public @interface Annotation { boolean booleanProperty() default false; }";
+    static File test_java = new File("Test.java");
+
+    public static void main(String[] args) throws Exception {
+        write(test_java, test);
+
+        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+        StandardJavaFileManager manager =
+                compiler.getStandardFileManager(null, null, null);
+        Iterable<? extends JavaFileObject> units = manager.getJavaFileObjects(test_java);
+        final StringWriter sw = new StringWriter();
+        JavacTask task = (JavacTask) compiler.getTask(sw, manager, null, null,
+                null, units);
+
+        new TreeScanner<Boolean, Void>() {
+            @Override
+            public Boolean visitClass(ClassTree arg0, Void arg1) {
+                sw.write(arg0.toString());
+                return super.visitClass(arg0, arg1);
+            }
+        }.scan(task.parse(), null);
+
+        System.out.println("output:");
+        System.out.println(sw.toString());
+        String found = sw.toString().replaceAll("\\s+", " ").trim();
+        String expect = test.replaceAll("\\s+", " ").trim();
+        if (!expect.equals(found)) {
+            System.out.println("expect: " + expect);
+            System.out.println("found:  " + found);
+            throw new Exception("unexpected output");
+        }
+    }
+
+    static void write(File file, String body) throws IOException {
+        FileWriter out = new FileWriter(file);
+        out.write(body);
+        out.close();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T6855236.java	Fri Feb 05 12:26:35 2010 -0800
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  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.
+ *
+ * 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ * @test
+ * @bug 6855236
+ * @summary Compiler Tree API TreePath class generates NullPointerException from Iterator
+ * @compile T6855236.java
+ * @compile -processor T6855236 -proc:only T6855236.java
+ */
+
+import java.util.*;
+
+import javax.annotation.processing.*;
+import javax.lang.model.*;
+import javax.lang.model.element.*;
+
+import com.sun.source.tree.*;
+import com.sun.source.util.*;
+
+@SupportedSourceVersion(SourceVersion.RELEASE_6)
+@SupportedAnnotationTypes("*")
+public class T6855236 extends AbstractProcessor {
+
+    private Trees trees;
+
+    @Override
+    public void init(ProcessingEnvironment pe) {
+        super.init(pe);
+        trees = Trees.instance(pe);
+    }
+
+    @Override
+    public boolean process(Set<? extends TypeElement> arg0, RoundEnvironment roundEnvironment) {
+        // Scanner class to scan through various component elements
+        CodeVisitor visitor = new CodeVisitor();
+
+        for (Element e : roundEnvironment.getRootElements()) {
+            TreePath tp = trees.getPath(e);
+            visitor.scan(tp, trees);
+        }
+
+        return true;
+    }
+
+    class CodeVisitor extends TreePathScanner<Object, Trees> {
+
+        @Override
+        public Object visitMethodInvocation(MethodInvocationTree node, Trees p) {
+            System.out.print("current path: ");
+            for (Tree t : getCurrentPath()) {
+                System.out.print('/');
+                System.out.print(t);
+           }
+            System.out.println();
+            System.out.println("parent path: " + getCurrentPath().getParentPath());
+            System.out.println("method select: " + node.getMethodSelect().toString());
+            for (ExpressionTree arg : node.getArguments()) {
+                System.out.println("argument: " + arg.toString());
+            }
+            return super.visitMethodInvocation(node, p);
+        }
+
+        @Override
+        public Object visitExpressionStatement(ExpressionStatementTree node, Trees p) {
+            ExpressionTree t = node.getExpression();
+            System.out.println("expression statement: " + t.toString());
+            return super.visitExpressionStatement(node, p);
+        }
+
+    }
+
+}
+
+
--- a/langtools/test/tools/javac/nio/compileTest/CompileTest.java	Thu Feb 04 15:50:59 2010 -0800
+++ b/langtools/test/tools/javac/nio/compileTest/CompileTest.java	Fri Feb 05 12:26:35 2010 -0800
@@ -23,7 +23,9 @@
 
 /**
  * @test
- * @compile HelloPathWorld.java
+ * @bug 6906175 6915476 6915497
+ * @summary Path-based JavaFileManager
+ * @compile -g HelloPathWorld.java
  * @run main CompileTest
  */
 
@@ -92,7 +94,8 @@
         options.addAll(Arrays.asList(opts));
         options.addAll(Arrays.asList(
                 "-verbose", "-XDverboseCompilePolicy",
-                "-d", classes.toString()
+                "-d", classes.toString(),
+                "-g"
         ));
         Iterable<? extends JavaFileObject> compilationUnits =
                 fm.getJavaFileObjects(testSrcDir.resolve(className + ".java"));
@@ -109,6 +112,8 @@
         File expect = new File("classes." + count + "/" + className + ".class");
         if (!expect.exists())
             throw new Exception("expected file not found: " + expect);
+        // Note that we explicitly specify -g for compiling both the actual class and the expected class.
+        // This isolates the expected class from javac options that might be given to jtreg.
         long expectedSize = new File(testClassesDir.toString(), className + ".class").length();
         long actualSize = expect.length();
         if (expectedSize != actualSize)