diff --git a/.hgtags b/.hgtags
index 0a9d18f4c8b..8999ea0fe0d 100644
--- a/.hgtags
+++ b/.hgtags
@@ -154,3 +154,7 @@ e070119aa56ee4dc5506c19d2c4d2eecab8ad429 jdk8-b29
23da7804aca0c9c4e6e86532a1453125a76d95ee jdk8-b30
bac81e9f7d57b75fba5ab31b571f3fe0dc08af69 jdk8-b31
2c5208ccb863db936eab523f49450b3fcd230348 jdk8-b32
+a6e6d42203e6d35f9e8b31eac25b0021b4dd58ad jdk8-b33
+0ae89825c75c9492e44efb3aca3d9ee3d8a209df jdk8-b34
+f151d5833912a82cd4f203944da0305c3be83ecc jdk8-b35
+98ce9816ae089c959ba1e70fba98423a31c4e9fa jdk8-b36
diff --git a/.hgtags-top-repo b/.hgtags-top-repo
index bb2fe0a118b..432c46d8709 100644
--- a/.hgtags-top-repo
+++ b/.hgtags-top-repo
@@ -154,3 +154,7 @@ cc771d92284f71765eca14d6d08703c4af254c04 jdk8-b21
6cea54809b51db92979c22fd8aa8fcb1cb13d12e jdk8-b30
0b66f43b89a6c0ac1c15d7ec51992c541cdc9089 jdk8-b31
88176171e940f02916a312c265a34c32552a8376 jdk8-b32
+42f275168fa5d9e7c70b246614dca8cf81f52c2e jdk8-b33
+894a478d2c4819a1a0f230bd7bdd09f3b2de9a8c jdk8-b34
+5285317ebb4e8e4f6d8d52b5616fa801e2ea844d jdk8-b35
+6a6ba0a07f33d37a2f97b1107e60c6a9a69ec84d jdk8-b36
diff --git a/common/autoconf/Makefile.in b/common/autoconf/Makefile.in
new file mode 100644
index 00000000000..629fadf5e8a
--- /dev/null
+++ b/common/autoconf/Makefile.in
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Generated Makefile @DATE_WHEN_CONFIGURED@
+SPEC:=@OUTPUT_ROOT@/spec.gmk
+include @SRC_ROOT@/common/makefiles/Makefile
diff --git a/common/autoconf/autogen.sh b/common/autoconf/autogen.sh
new file mode 100644
index 00000000000..7e4c3b0ea57
--- /dev/null
+++ b/common/autoconf/autogen.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+autoconf configure.ac > configure
+rm -rf config.status config.log autom4te.cache
diff --git a/common/autoconf/build-aux/config.guess b/common/autoconf/build-aux/config.guess
new file mode 100644
index 00000000000..e69905d5201
--- /dev/null
+++ b/common/autoconf/build-aux/config.guess
@@ -0,0 +1,1531 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+# Free Software Foundation, Inc.
+
+timestamp='2008-01-23'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Originally written by Per Bothner .
+# Please send patches to . Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to ."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep __ELF__ >/dev/null
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm:riscos:*:*|arm:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[456])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include
+ #include
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep __LP64__ >/dev/null
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ case ${UNAME_MACHINE} in
+ pc98)
+ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:[3456]*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ EM64T | authenticamd)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ cris:Linux:*:*)
+ echo cris-axis-linux-gnu
+ exit ;;
+ crisv32:Linux:*:*)
+ echo crisv32-axis-linux-gnu
+ exit ;;
+ frv:Linux:*:*)
+ echo frv-unknown-linux-gnu
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ mips:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips
+ #undef mipsel
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mipsel
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef mips64
+ #undef mips64el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+ CPU=mips64el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+ CPU=mips64
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^CPU/{
+ s: ::g
+ p
+ }'`"
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+ ;;
+ or32:Linux:*:*)
+ echo or32-unknown-linux-gnu
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-gnu ;;
+ PA8*) echo hppa2.0-unknown-linux-gnu ;;
+ *) echo hppa-unknown-linux-gnu ;;
+ esac
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-gnu
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-gnu
+ exit ;;
+ x86_64:Linux:*:*)
+ echo x86_64-unknown-linux-gnu
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
+ exit ;;
+ i*86:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ # Set LC_ALL=C to ensure ld outputs messages in English.
+ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+ | sed -ne '/supported targets:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported targets: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_targets" in
+ elf32-i386)
+ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+ ;;
+ a.out-i386-linux)
+ echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+ exit ;;
+ coff-i386)
+ echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+ exit ;;
+ "")
+ # Either a pre-BFD a.out linker (linux-gnuoldld) or
+ # one that does not give us useful --help.
+ echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+ exit ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include
+ #ifdef __ELF__
+ # ifdef __GLIBC__
+ # if __GLIBC__ >= 2
+ LIBC=gnu
+ # else
+ LIBC=gnulibc1
+ # endif
+ # else
+ LIBC=gnulibc1
+ # endif
+ #else
+ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
+ LIBC=gnu
+ #else
+ LIBC=gnuaout
+ #endif
+ #endif
+ #ifdef __dietlibc__
+ LIBC=dietlibc
+ #endif
+EOF
+ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
+ /^LIBC/{
+ s: ::g
+ p
+ }'`"
+ test x"${LIBC}" != x && {
+ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+ exit
+ }
+ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
+ ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes .
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From Paul.Green@stratus.com.
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ eval $set_cc_for_build
+ echo "int main(){}" > $dummy.c
+ if test "`$CC_FOR_BUILD -o $dummy $dummy.c; file $dummy | grep -c x86_64`" = 1 ; then
+ UNAME_PROCESSOR=x86_64
+ fi
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NSE-?:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <
+# include
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 < in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/common/autoconf/build-aux/config.sub b/common/autoconf/build-aux/config.sub
new file mode 100644
index 00000000000..6759825a5b7
--- /dev/null
+++ b/common/autoconf/build-aux/config.sub
@@ -0,0 +1,1658 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+# Free Software Foundation, Inc.
+
+timestamp='2008-01-16'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine. It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+
+# Please send patches to . Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to ."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
+ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray)
+ os=
+ basic_machine=$1
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+ | bfin \
+ | c4x | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | mcore | mep \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64vr | mips64vrel \
+ | mips64orion | mips64orionel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | mt \
+ | msp430 \
+ | nios | nios2 \
+ | ns16k | ns32k \
+ | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | pyramid \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu | strongarm \
+ | tahoe | thumb | tic4x | tic80 | tron \
+ | v850 | v850e \
+ | we32k \
+ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | z8k)
+ basic_machine=$basic_machine-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12)
+ # Motorola 68HC11/12.
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+ | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nios-* | nios2-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | pyramid-* \
+ | romp-* | rs6000-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
+ | tahoe-* | thumb-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tron-* \
+ | v850-* | v850e-* | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+# I'm not sure what "Sysv32" means. Should this be sysv3.2?
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ mingw32)
+ basic_machine=i386-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc) basic_machine=powerpc-unknown
+ ;;
+ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tic54x | c54x*)
+ basic_machine=tic54x-unknown
+ os=-coff
+ ;;
+ tic55x | c55x*)
+ basic_machine=tic55x-unknown
+ os=-coff
+ ;;
+ tic6x | c6x*)
+ basic_machine=tic6x-unknown
+ os=-coff
+ ;;
+ tile*)
+ basic_machine=tile-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* \
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -kaos*)
+ os=-kaos
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ # This also exists in the configure program, but was not the
+ # default.
+ # os=-sunos4
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/common/autoconf/build-aux/install.sh b/common/autoconf/build-aux/install.sh
new file mode 100644
index 00000000000..02d43282e42
--- /dev/null
+++ b/common/autoconf/build-aux/install.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+echo >&2 "No suitable 'install' command found.'"
+echo >&2 "If automake is installed, running 'automake -fa'"
+echo >&2 "(and ignoring the errors) might produce one."
+exit 1
diff --git a/common/autoconf/build-aux/pkg.m4 b/common/autoconf/build-aux/pkg.m4
new file mode 100644
index 00000000000..a0b9cd45dfc
--- /dev/null
+++ b/common/autoconf/build-aux/pkg.m4
@@ -0,0 +1,155 @@
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+#
+# Copyright © 2004 Scott James Remnant .
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=m4_default([$1], [0.9.0])
+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ PKG_CONFIG=""
+ fi
+
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+ m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+ $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+ pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+ PKG_CHECK_EXISTS([$3],
+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+ [pkg_failed=yes])
+ else
+ pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+ _PKG_SHORT_ERRORS_SUPPORTED
+ if test $_pkg_short_errors_supported = yes; then
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
+ else
+ $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+ ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+ [AC_MSG_RESULT([no])
+ $4])
+elif test $pkg_failed = untried; then
+ ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old. Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see .])],
+ [$4])
+else
+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+ AC_MSG_RESULT([yes])
+ ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
diff --git a/common/autoconf/builddeps.conf.example b/common/autoconf/builddeps.conf.example
new file mode 100644
index 00000000000..f285ffb4a29
--- /dev/null
+++ b/common/autoconf/builddeps.conf.example
@@ -0,0 +1,66 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# This is a configuration example using builddeps
+# that are downloaded from an ftp server.
+# This is how you use it:
+
+#configure --with-builddeps-server=ftp://builddeps.server/adir \
+# --with-builddeps-conf=..../builddeps.conf.example
+# --with-builddeps-dir=/localdisk/mybuilddeps
+
+# Translate a configuration triplet/quadruplet into something
+# known by this configuration file.
+# If no rewrite was found, then rewritten_host=${host}
+REWRITE_i686_pc_linux_gnu=i686-unknown-linux-gnu
+REWRITE_i386_pc_solaris2_10=i686-sun-solaris2_10
+
+# The needed cups builddeps are host independent header files.
+# I.e. they need not be part of the devkit.
+builddep_cups=lib/cups_1_3_9.zip
+builddep_cups_CFLAGS=-I${depdir}
+
+# The devkit is the cross compiler tools and sys-roots
+# for the build platform.
+builddep_devkit=sdk/sdk-${rewritten_build}-20110921.tar.gz
+
+# The freetype dependency is partyl host dependent.
+# It is stored inside the sys-root.
+builddep_freetype2=sdk/sdk-${rewritten_build}-20110921.tar.gz
+builddep_freetype2_CFLAGS=-I${depdir}/${rewritten_host}/sys-root/usr/include/freetype2
+builddep_freetype2_LIBS=-lfreetype
+
+# There are many other build dependencies, but they are implicitly
+# found inside the devkit sys-root.
+
+# The boot jdk runs on the build system and is used to compile and run
+# Java build tools and of course, the bootstrap javac.
+builddep_bootjdk_BUILD_i386_pc_solaris2=java/jdk-7u2-fcs-bin-b13-solaris-i586-17_nov_2011.zip
+builddep_bootjdk_BUILD_x86_64_pc_solaris2=java/jdk-7u2-fcs-bin-b13-solaris-x64-17_nov_2011.zip
+builddep_bootjdk_BUILD_i686_unknown_linux_gnu=java/jdk-7u2-fcs-bin-b13-linux-i586-17_nov_2011.zip
+builddep_bootjdk_BUILD_x86_64_unknown_linux_gnu=java/jdk-7u2-fcs-bin-b13-linux-x64-17_nov_2011.zip
+builddep_bootjdk_BUILD_sparc_solaris2=java/jdk-7u2-fcs-bin-b13-solaris-sparc-17_nov_2011.zip
+builddep_bootjdk_BUILD_sparcv9_solaris2=java/jdk-7u2-fcs-bin-b13-solaris-sparcv9-17_nov_2011.zip
+builddep_bootjdk_BUILD_i386_pc_windows=java/jdk-7u2-fcs-bin-b13-windows-i586-17_nov_2011.zip
+builddep_bootjdk_BUILD_x86_64_pc_windows=java/jdk-7u2-fcs-bin-b13-windows-x64-17_nov_2011.zip
+builddep_bootjdk_ROOT=${depdir}/jdk7_02/jdk1.7.0_02
diff --git a/common/autoconf/builddeps.conf.nfs.example b/common/autoconf/builddeps.conf.nfs.example
new file mode 100644
index 00000000000..200b6507463
--- /dev/null
+++ b/common/autoconf/builddeps.conf.nfs.example
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# This is a configuration example using an nfs-mount /java
+# it will use the builddeps directly from the nfs mounted directory.
+# This is how you use it:
+
+#configure --with-builddeps-conf=..../builddeps.conf.nfs.example
+
+REWRITE_i686_pc_linux_gnu=i686-unknown-linux-gnu
+REWRITE_i386_pc_solaris2_10=i686-sun-solaris2_10
+
+DEVTOOLS=/java/devtools
+
+builddep_cups=${DEVTOOLS}/linux/cups/include
+builddep_cups_CFLAGS=-I${depdir}
+
+JDK_ROOT=/java/re/jdk/7u4/latest/binaries
+builddep_bootjdk_BUILD_i386_pc_solaris2=${JDK_ROOT}/solaris-i586
+builddep_bootjdk_BUILD_x86_64_pc_solaris2=${JDK_ROOT}/solaris-amd64
+builddep_bootjdk_BUILD_i686_unknown_linux_gnu=${JDK_ROOT}/linux-i586
+builddep_bootjdk_BUILD_x86_64_unknown_linux_gnu=${JDK_ROOT}/linux-amd64
+builddep_bootjdk_ROOT=
diff --git a/common/autoconf/builddeps.m4 b/common/autoconf/builddeps.m4
new file mode 100644
index 00000000000..55e132e1c8b
--- /dev/null
+++ b/common/autoconf/builddeps.m4
@@ -0,0 +1,231 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+AC_DEFUN([BDEPS_SCAN_FOR_BUILDDEPS],
+[
+ define(LIST_OF_BUILD_DEPENDENCIES,)
+ if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
+ if test "x$with_builddeps_conf" != x; then
+ AC_MSG_CHECKING([for supplied builddeps configuration file])
+ builddepsfile=$with_builddeps_conf
+ if test -s $builddepsfile; then
+ . $builddepsfile
+ AC_MSG_RESULT([loaded!])
+ else
+ AC_ERROR([The given builddeps conf file $with_builddeps_conf could not be loaded!])
+ fi
+ else
+ AC_MSG_CHECKING([for builddeps.conf files in sources...])
+ builddepsfile=`mktemp`
+ touch $builddepsfile
+ # Put all found confs into a single file.
+ find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile
+ # Source the file to acquire the variables
+ if test -s $builddepsfile; then
+ . $builddepsfile
+ AC_MSG_RESULT([found at least one!])
+ else
+ AC_ERROR([Could not find any builddeps.conf at all!])
+ fi
+ fi
+ # Create build and host names that use _ instead of "-" and ".".
+ # This is necessary to use them in variable names.
+ build_var=`echo ${build} | tr '-' '_' | tr '.' '_'`
+ host_var=`echo ${host} | tr '-' '_' | tr '.' '_'`
+ # Extract rewrite information for build and host
+ eval rewritten_build=\${REWRITE_${build_var}}
+ if test "x$rewritten_build" = x; then
+ rewritten_build=${build}
+ echo Build stays the same $rewritten_build
+ else
+ echo Rewriting build for builddeps into $rewritten_build
+ fi
+ eval rewritten_host=\${REWRITE_${host_var}}
+ if test "x$rewritten_host" = x; then
+ rewritten_host=${host}
+ echo Host stays the same $rewritten_host
+ else
+ echo Rewriting host for builddeps into $rewritten_host
+ fi
+ rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'`
+ rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'`
+ fi
+ AC_CHECK_PROGS(BDEPS_UNZIP, [7z unzip])
+ if test "x$BDEPS_UNZIP" = x7z; then
+ BDEPS_UNZIP="7z x"
+ fi
+
+ AC_CHECK_PROGS(BDEPS_FTP, [wget lftp ftp])
+])
+
+AC_DEFUN([BDEPS_FTPGET],
+[
+ # $1 is the ftp://abuilddeps.server.com/libs/cups.zip
+ # $2 is the local file name for the downloaded file.
+ VALID_TOOL=no
+ if test "x$BDEPS_FTP" = xwget; then
+ VALID_TOOL=yes
+ wget -O $2 $1
+ fi
+ if test "x$BDEPS_FTP" = xlftp; then
+ VALID_TOOL=yes
+ lftp -c "get $1 -o $2"
+ fi
+ if test "x$BDEPS_FTP" = xftp; then
+ VALID_TOOL=yes
+ FTPSERVER=`echo $1 | cut -f 3 -d '/'`
+ FTPPATH=`echo $1 | cut -f 4- -d '/'`
+ FTPUSERPWD=${FTPSERVER%%@*}
+ if test "x$FTPSERVER" != "x$FTPUSERPWD"; then
+ FTPUSER=${userpwd%%:*}
+ FTPPWD=${userpwd#*@}
+ FTPSERVER=${FTPSERVER#*@}
+ else
+ FTPUSER=ftp
+ FTPPWD=ftp
+ fi
+ # the "pass" command does not work on some
+ # ftp clients (read ftp.exe) but if it works,
+ # passive mode is better!
+ (\
+ echo "user $FTPUSER $FTPPWD" ;\
+ echo "pass" ;\
+ echo "bin" ;\
+ echo "get $FTPPATH $2" ;\
+ ) | ftp -in $FTPSERVER
+ fi
+ if test "x$VALID_TOOL" != xyes; then
+ AC_ERROR([I do not know how to use the tool: $BDEPS_FTP])
+ fi
+])
+
+AC_DEFUN([BDEPS_CHECK_MODULE],
+[
+ define([LIST_OF_BUILD_DEPENDENCIES],LIST_OF_BUILD_DEPENDENCIES[$2=$3'\n'])
+ if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
+ # Source the builddeps file again, to make sure it uses the latest variables!
+ . $builddepsfile
+ # Look for a host and build machine specific resource!
+ eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}}
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a host specific resource
+ eval resource=\${builddep_$2_HOST_${rewritten_host_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a build specific resource
+ eval resource=\${builddep_$2_BUILD_${rewritten_build_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a generic resource
+ # (The $2 comes from M4 and not the shell, thus no need for eval here.)
+ resource=${builddep_$2}
+ fi
+ if test "x$resource" != x; then
+ AC_MSG_NOTICE([Using builddeps $resource for $2])
+ # If the resource in the builddeps.conf file is an existing directory,
+ # for example /java/linux/cups
+ if test -d ${resource}; then
+ depdir=${resource}
+ else
+ BDEPS_FETCH($2, $resource, $with_builddeps_server, $with_builddeps_dir, depdir)
+ fi
+ # Source the builddeps file again, because in the previous command, the depdir
+ # was updated to point at the current build dependency install directory.
+ . $builddepsfile
+ # Now extract variables from the builddeps.conf files.
+ theroot=${builddep_$2_ROOT}
+ thecflags=${builddep_$2_CFLAGS}
+ thelibs=${builddep_$2_LIBS}
+ if test "x$depdir" = x; then
+ AC_ERROR([Could not download build dependency $2])
+ fi
+ $1=$depdir
+ if test "x$theroot" != x; then
+ $1="$theroot"
+ fi
+ if test "x$thecflags" != x; then
+ $1_CFLAGS="$thecflags"
+ fi
+ if test "x$thelibs" != x; then
+ $1_LIBS="$thelibs"
+ fi
+ m4_default([$4], [:])
+ m4_ifvaln([$5], [else $5])
+ fi
+ m4_ifvaln([$5], [else $5])
+ fi
+])
+
+AC_DEFUN([BDEPS_FETCH],
+[
+# $1 is for example mymodule
+# $2 is for example libs/general/libmymod_1_2_3.zip
+# $3 is for example ftp://mybuilddeps.myserver.com/builddeps
+# $4 is for example /localhome/builddeps
+# $5 is the name of the variable into which we store the depdir, eg MYMOD
+# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and
+# unzip into the directory: /localhome/builddeps/libmymod_1_2_3
+ filename=`basename $2`
+ filebase=`echo $filename | sed 's/\.[[^\.]]*$//'`
+ filebase=${filename%%.*}
+ extension=${filename#*.}
+ installdir=$4/$filebase
+ if test ! -f $installdir/$filename.unpacked; then
+ AC_MSG_NOTICE([Downloading build dependency $1 from $3/$2 and installing into $installdir])
+ if test ! -d $installdir; then
+ mkdir -p $installdir
+ fi
+ if test ! -d $installdir; then
+ AC_ERROR([Could not create directory $installdir])
+ fi
+ tmpfile=`mktemp $installdir/$1.XXXXXXXXX`
+ touch $tmpfile
+ if test ! -f $tmpfile; then
+ AC_ERROR([Could not create files in directory $installdir])
+ fi
+ BDEPS_FTPGET([$3/$2] , [$tmpfile])
+ mv $tmpfile $installdir/$filename
+ if test ! -s $installdir/$filename; then
+ AC_ERROR([Could not download $3/$2])
+ fi
+ case "$extension" in
+ zip) echo "Unzipping $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked)
+ ;;
+ tar.gz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ tgz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ *) AC_ERROR([Cannot handle build depency archive with extension $extension])
+ ;;
+ esac
+ fi
+ if test -f $installdir/$filename.unpacked; then
+ $5=$installdir
+ fi
+])
+
diff --git a/common/autoconf/closed.version.numbers b/common/autoconf/closed.version.numbers
new file mode 100644
index 00000000000..b119cd9bd97
--- /dev/null
+++ b/common/autoconf/closed.version.numbers
@@ -0,0 +1,28 @@
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+LAUNCHER_NAME=java
+PRODUCT_NAME="Java(TM)"
+PRODUCT_SUFFIX="SE Runtime Environment"
+JDK_RC_PLATFORM_NAME="Platform SE"
+COMPANY_NAME="Oracle Corporation"
diff --git a/common/autoconf/config.h.in b/common/autoconf/config.h.in
new file mode 100644
index 00000000000..275821da639
--- /dev/null
+++ b/common/autoconf/config.h.in
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#define PACKAGE_NAME "openjdk"
+#define PACKAGE_TARNAME "openjdk"
+#define PACKAGE_VERSION "version-0.1"
+#define PACKAGE_STRING "openjdk version-0.1"
+#define PACKAGE_BUGREPORT "build-infra-dev@openjdk.java.net"
+#define PACKAGE_URL ""
+#define STDC_HEADERS
+#define HAVE_SYS_TYPES_H
+#define HAVE_SYS_STAT_H
+#define HAVE_STDLIB_H
+#define HAVE_STRING_H
+#define HAVE_MEMORY_H
+#define HAVE_STRINGS_H
+#define HAVE_INTTYPES_H
+#define HAVE_STDINT_H
+#define HAVE_UNISTD_H
+#define SIZEOF_INT_P 8
+#define HAVE_CUPS_CUPS_H
+#define HAVE_CUPS_PPD_H
+#define HAVE_LIBJPEG
+#define HAVE_LIBGIF
+#define HAVE_LIBZ
+#define HAVE_LIBM
+#define HAVE_ALTZONE
diff --git a/common/autoconf/configure b/common/autoconf/configure
new file mode 100644
index 00000000000..13630cca07d
--- /dev/null
+++ b/common/autoconf/configure
@@ -0,0 +1,16395 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.67 for openjdk version-0.1.
+#
+# Report bugs to .
+#
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+# Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"\$@\"}'='\"\$@\"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ # We cannot yet assume a decent shell, so we have to provide a
+ # neutralization value for shells without unset; and this also
+ # works around shells that cannot unset nonexistent variables.
+ BASH_ENV=/dev/null
+ ENV=/dev/null
+ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell bug-autoconf@gnu.org and
+$0: build-infra-dev@openjdk.java.net about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 &1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='openjdk'
+PACKAGE_TARNAME='openjdk'
+PACKAGE_VERSION='version-0.1'
+PACKAGE_STRING='openjdk version-0.1'
+PACKAGE_BUGREPORT='build-infra-dev@openjdk.java.net'
+PACKAGE_URL=''
+
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include
+#ifdef HAVE_SYS_TYPES_H
+# include
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include
+#endif
+#ifdef STDC_HEADERS
+# include
+# include
+#else
+# ifdef HAVE_STDLIB_H
+# include
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+# include
+# endif
+# include
+#endif
+#ifdef HAVE_STRINGS_H
+# include
+#endif
+#ifdef HAVE_INTTYPES_H
+# include
+#endif
+#ifdef HAVE_STDINT_H
+# include
+#endif
+#ifdef HAVE_UNISTD_H
+# include
+#endif"
+
+ac_subst_vars='LTLIBOBJS
+LIBOBJS
+TEST_IN_BUILD
+LIBCXX
+LDFLAGS_JDKEXE_SUFFIX
+LDFLAGS_JDKLIB_SUFFIX
+LDFLAGS_JDKEXE
+LDFLAGS_JDKLIB
+CXXFLAGS_JDKEXE
+CXXFLAGS_JDKLIB
+CFLAGS_JDKEXE
+CFLAGS_JDKLIB
+PACKAGE_PATH
+IMAGES_MAKE_ARGS
+IMAGES_OUTPUTDIR
+JDK_MAKE_ARGS
+JDK_OUTPUTDIR
+HOTSPOT_MAKE_ARGS
+HOTSPOT_DIST
+HOTSPOT_OUTPUTDIR
+JAXWS_MAKE_ARGS
+JAXWS_DIST
+JAXWS_OUTPUTDIR
+JAXP_MAKE_ARGS
+JAXP_DIST
+JAXP_OUTPUTDIR
+CORBA_MAKE_ARGS
+CORBA_DIST
+CORBA_OUTPUTDIR
+LANGTOOLS_MAKE_ARGS
+LANGTOOLS_DIST
+LANGTOOLS_OUTPUTDIR
+CXX_O_FLAG_NONE
+CXX_O_FLAG_NORM
+CXX_O_FLAG_HI
+C_O_FLAG_NONE
+C_O_FLAG_NORM
+C_O_FLAG_HI
+DISABLE_NIMBUS
+GENERATE_DOCS
+ENABLE_DOCS
+LIBM
+USE_EXTERNAL_LIBZ
+USE_EXTERNAL_LIBGIF
+USE_EXTERNAL_LIBJPEG
+PULSE_LIBS
+PULSE_CFLAGS
+LIBPULSE_LIBS
+LIBPULSE_CFLAGS
+ALSA_LIBS
+ALSA_CFLAGS
+FREETYPE2_LIB_PATH
+USING_SYSTEM_FT_LIB
+FREETYPE2_LIBS
+FREETYPE2_CFLAGS
+CUPS_LIBS
+CUPS_CFLAGS
+OPENWIN_HOME
+X_EXTRA_LIBS
+X_LIBS
+X_PRE_LIBS
+X_CFLAGS
+XMKMF
+JAVAC_USE_MODE
+JAVAC_USE_DEPS
+JAVAC_SERVER_CORES
+JAVAC_SERVERS
+JAVAC_USE_REMOTE
+SERVER_JAVA
+BOOT_JDK_JVMARGS
+OVERRIDE_SRC_ROOT
+ADD_SRC_ROOT
+RMIC
+JAR
+JAVAH
+JAVAC_FLAGS
+JAVAC
+BOOT_JDK_SOURCETARGET
+JAVA
+BOOT_TOOLSJAR
+BOOT_RTJAR
+BOOT_JDK
+JAVA_CHECK
+JAVAC_CHECK
+ENDIAN
+SET_SHARED_LIBRARY_ORIGIN
+SET_SHARED_LIBRARY_MAPFILE
+SET_SHARED_LIBRARY_NAME
+SHARED_LIBRARY_FLAGS
+EXE_SUFFIX
+STATIC_LIBRARY_SUFFIX
+SHARED_LIBRARY_SUFFIX
+LIBRARY_PREFIX
+STATIC_LIBRARY
+SHARED_LIBRARY
+OBJ_SUFFIX
+USE_PRECOMPILED_HEADER
+ARCH_DATA_MODEL
+LP64
+BUILD_LOG_WRAPPER
+BUILD_LOG
+CCACHE
+UNCYGDRIVE
+MCS
+STRIP
+NM
+ASFLAGS
+AS
+CXXCPP
+CPP
+COMPILER_TYPE
+RC_FLAGS
+DUMPBIN
+WINAR
+RC
+MT
+WINLD
+ARFLAGS
+AR
+LDEXECXX
+LDCXX
+LDEXE
+LD
+ac_ct_OBJC
+OBJCFLAGS
+OBJC
+ac_ct_CXX
+CXXFLAGS
+CXX
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+HOSTCXX
+HOSTCC
+HOST_CXX
+HOST_CC
+DEFINE_CROSS_COMPILE_ARCH
+AR_OUT_OPTION
+LD_OUT_OPTION
+EXE_OUT_OPTION
+CC_OUT_OPTION
+SYS_ROOT
+BDEPS_FTP
+BDEPS_UNZIP
+PKG_CONFIG
+JDK_TOPDIR
+HOTSPOT_TOPDIR
+JAXWS_TOPDIR
+JAXP_TOPDIR
+CORBA_TOPDIR
+LANGTOOLS_TOPDIR
+OUTPUT_ROOT
+SPEC
+MSVCR100DLL
+CHECK_FOR_VCINSTALLDIR
+SETUPDEVENV
+COOKED_BUILD_NUMBER
+FULL_VERSION
+RELEASE
+JDK_VERSION
+RUNTIME_NAME
+COPYRIGHT_YEAR
+COMPANY_NAME
+JDK_RC_PLATFORM_NAME
+PRODUCT_SUFFIX
+PRODUCT_NAME
+LAUNCHER_NAME
+MILESTONE
+JDK_BUILD_NUMBER
+JDK_UPDATE_VERSION
+JDK_MICRO_VERSION
+JDK_MINOR_VERSION
+JDK_MAJOR_VERSION
+BUILD_VARIANT_RELEASE
+DEBUG_CLASSFILES
+FASTDEBUG
+VARIANT
+DEBUG_LEVEL
+JVM_VARIANT_ZEROSHARK
+JVM_VARIANT_ZERO
+JVM_VARIANT_KERNEL
+JVM_VARIANT_CLIENT
+JVM_VARIANT_SERVER
+JVM_VARIANTS
+BUILD_HEADLESS_ONLY
+BUILD_HEADLESS
+SUPPORT_HEADFUL
+SUPPORT_HEADLESS
+JDK_VARIANT
+MINIMIZE_RAM_USAGE
+JAVASE_EMBEDDED
+JIGSAW
+SET_OPENJDK
+PATH_SEP
+CYGPATH
+SRC_ROOT
+MEMORY_SIZE
+CONCURRENT_BUILD_JOBS
+NUM_CORES
+DATE_WHEN_CONFIGURED
+LEGACY_BUILD_CPU3
+LEGACY_BUILD_CPU2
+LEGACY_BUILD_CPU1
+BUILD_CPU_ENDIAN
+BUILD_CPU_BITS
+BUILD_CPU_ARCH
+BUILD_CPU
+LEGACY_BUILD_OS_API
+BUILD_OS_API
+BUILD_OS_FAMILY
+BUILD_OS
+LEGACY_HOST_CPU3
+LEGACY_HOST_CPU2
+LEGACY_HOST_CPU1
+HOST_CPU_ENDIAN
+HOST_CPU_BITS
+HOST_CPU_ARCH
+HOST_CPU
+LEGACY_HOST_OS_API
+HOST_OS_API
+HOST_OS_FAMILY
+HOST_OS
+BUILD
+HOST
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+FILE
+EXPR
+READELF
+OTOOL
+LDD
+UNZIP
+ZIP
+XARGS
+WC
+TOUCH
+TR
+TEE
+TAIL
+TAR
+SORT
+SH
+SED
+RM
+THEPWDCMD
+PRINTF
+NAWK
+MV
+MKDIR
+MAKE
+LS
+LN
+HEAD
+FIND_DELETE
+FIND
+FGREP
+EGREP
+GREP
+ECHO
+DIFF
+DF
+DATE
+CUT
+CPIO
+CP
+CHMOD
+CAT
+AWK
+READLINK
+CONFIGURE_COMMAND_LINE
+PKGHANDLER
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+with_data_model
+with_num_cores
+with_memory_size
+enable_openjdk
+enable_jigsaw
+with_jdk_variant
+enable_headful
+with_jvm_variants
+enable_debug
+with_debug_level
+with_msvcr100dll
+with_builddeps_conf
+with_builddeps_server
+with_builddeps_dir
+with_builddeps_group
+enable_list_builddeps
+with_sys_root
+enable_ccache
+with_ccache_dir
+enable_precompiled_headers
+with_boot_jdk
+with_add_source_root
+with_override_source_root
+with_adds_and_overrides
+with_override_langtools
+with_override_corba
+with_override_jaxp
+with_override_jaxws
+with_override_hotspot
+with_override_jdk
+with_boot_jdk_jvmargs
+with_server_java
+enable_javac_server
+with_javac_server_cores
+enable_javac_deps
+enable_javac_multi_core
+enable_macosx_runtime_support
+with_x
+with_cups
+with_cups_include
+with_cups_lib
+with_freetype
+with_alsa
+with_alsa_include
+with_alsa_lib
+with_pulse
+with_pulse_include
+with_pulse_lib
+enable_docs
+enable_nimbus
+enable_static_link_stdc__
+enable_hotspot_test_in_build
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+PKG_CONFIG
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CXX
+CXXFLAGS
+CCC
+OBJC
+OBJCFLAGS
+CPP
+CXXCPP
+XMKMF
+FREETYPE2_CFLAGS
+FREETYPE2_LIBS
+ALSA_CFLAGS
+ALSA_LIBS
+LIBPULSE_CFLAGS
+LIBPULSE_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used" >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures openjdk version-0.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/openjdk]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+X features:
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of openjdk version-0.1:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-openjdk build OpenJDK regardless of the presence of closed
+ repositories [disabled]
+ --enable-jigsaw build Jigsaw images (not yet available) [disabled]
+ --disable-headful build headful support (graphical UI support)
+ [enabled]
+ --enable-debug set the debug level to fastdebug (shorthand for
+ --with-debug-level=fastdebug) [disabled]
+ --enable-list-builddeps list all build dependencies known to the configure
+ script
+ --disable-ccache use ccache to speed up recompilations [enabled]
+ --disable-precompiled-headers
+ use precompiled headers when compiling C++ [enabled]
+ --enable-javac-server enable the shared javac server during the build
+ process [disabled]
+ --enable-javac-deps enable the dependency tracking between Java packages
+ [disabled]
+ --enable-javac-multi-core
+ compile Java packages concurrently [disabled]
+ --disable-macosx-runtime-support
+ disable the use of MacOSX Java runtime support
+ framework [enabled]
+ --enable-docs enable generation of Javadoc documentation
+ [disabled]
+ --disable-nimbus disable Nimbus L&F [enabled]
+ --disable-static-link-stdc++
+ disable static linking of the C++ runtime on Linux
+ [enabled]
+ --enable-hotspot-test-in-build
+ enable running of Queens test after Hotspot build
+ (not yet available) [disabled]
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-data-model build 32-bit or 64-bit binaries (for platforms that
+ support it), e.g. --with-data-model=32 [guessed]
+ --with-num-cores number of cores in the build system, e.g.
+ --with-num-cores=8 [probed]
+ --with-memory-size memory (in MB) available in the build system, e.g.
+ --with-memory-size=1024 [probed]
+ --with-jdk-variant JDK variant to build (normal, embedded) [normal]
+ --with-jvm-variants JVM variants (separated by commas) to build (server,
+ client, kernel, zero, zeroshark) [server]
+ --with-debug-level set the debug level (release, fastdebug, slowdebug)
+ [release]
+ --with-msvcr100dll copy this msvcr100.dll into the built JDK
+ --with-builddeps-conf use this configuration file for the builddeps
+ --with-builddeps-server download and use build dependencies from this server
+ url, e.g.
+ --with-builddeps-server=ftp://example.com/dir
+ --with-builddeps-dir store downloaded build dependencies here
+ [d/localhome/builddeps]
+ --with-builddeps-group chgrp the downloaded build dependencies to this
+ group
+ --with-sys-root pass this sys-root to the compilers and linker
+ (useful if the sys-root encoded in the cross
+ compiler tools is incorrect)
+ --with-ccache-dir where to store ccache files [~/.ccache]
+ --with-boot-jdk path to Boot JDK (used to bootstrap build) [probed]
+ --with-add-source-root for each and every source directory, look in this
+ additional source root for the same directory; if it
+ exists and have files in it, include it in the build
+ --with-override-source-root
+ for each and every source directory, look in this
+ override source root for the same directory; if it
+ exists, use that directory instead and ignore the
+ directory in the original source root
+ --with-adds-and-overrides
+ use the subdirs 'adds' and 'overrides' in the
+ specified directory as add-source-root and
+ override-source-root
+ --with-override-langtools
+ use this langtools dir for the build
+ --with-override-corba use this corba dir for the build
+ --with-override-jaxp use this jaxp dir for the build
+ --with-override-jaxws use this jaxws dir for the build
+ --with-override-hotspot use this hotspot dir for the build
+ --with-override-jdk use this jdk dir for the build
+ --with-boot-jdk-jvmargs specify JVM arguments to be passed to all
+ invocations of the Boot JDK, overriding the default
+ values, e.g --with-boot-jdk-jvmargs="-Xmx8G
+ -enableassertions"
+ --with-server-java use this java binary for running the javac
+ background server and other long running java tasks
+ in the build process, e.g.
+ ---with-server-java="/opt/jrockit/bin/java -server"
+ --with-javac-server-cores
+ use at most this number of concurrent threads on the
+ javac server [probed]
+ --with-x use the X Window System
+ --with-cups specify prefix directory for the cups package
+ (expecting the libraries under PATH/lib and the
+ headers under PATH/include)
+ --with-cups-include specify directory for the cups include files
+ --with-cups-lib specify directory for the cups library
+ --with-freetype specify prefix directory for the freetype2 package
+ (expecting the libraries under PATH/lib and the
+ headers under PATH/include)
+ --with-alsa specify prefix directory for the alsa package
+ (expecting the libraries under PATH/lib and the
+ headers under PATH/include)
+ --with-alsa-include specify directory for the alsa include files
+ --with-alsa-lib specify directory for the alsa library
+ --with-pulse specify prefix directory for the pulseaudio package
+ (expecting the libraries under PATH/lib and the
+ headers under PATH/include)
+ --with-pulse-include specify directory for the pulseaudio include files
+ --with-pulse-lib specify directory for the pulseaudio library
+
+Some influential environment variables:
+ PKG_CONFIG path to pkg-config utility
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L if you have libraries in a
+ nonstandard directory
+ LIBS libraries to pass to the linker, e.g. -l
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if
+ you have headers in a nonstandard directory
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ OBJC Objective C compiler command
+ OBJCFLAGS Objective C compiler flags
+ CPP C preprocessor
+ CXXCPP C++ preprocessor
+ XMKMF Path to xmkmf, Makefile generator for X Window System
+ FREETYPE2_CFLAGS
+ C compiler flags for FREETYPE2, overriding pkg-config
+ FREETYPE2_LIBS
+ linker flags for FREETYPE2, overriding pkg-config
+ ALSA_CFLAGS C compiler flags for ALSA, overriding pkg-config
+ ALSA_LIBS linker flags for ALSA, overriding pkg-config
+ LIBPULSE_CFLAGS
+ C compiler flags for LIBPULSE, overriding pkg-config
+ LIBPULSE_LIBS
+ linker flags for LIBPULSE, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to .
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+openjdk configure version-0.1
+generated by GNU Autoconf 2.67
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_cxx_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_compile
+
+# ac_fn_objc_try_compile LINENO
+# -----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_objc_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_objc_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_objc_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext conftest$ac_exeext
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_cxx_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+ # interfere with the next link command; also delete a directory that is
+ # left behind by Apple's compiler. We do this before executing the actions.
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+
+# ac_fn_cxx_try_run LINENO
+# ------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_cxx_try_run ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: program exited with status $ac_status" >&5
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=$ac_status
+fi
+ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+ as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_run
+
+# ac_fn_cxx_compute_int LINENO EXPR VAR INCLUDES
+# ----------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_cxx_compute_int ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if test "$cross_compiling" = yes; then
+ # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_lo=0 ac_mid=0
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid; break
+else
+ as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+ if test $ac_lo -le $ac_mid; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_hi=-1 ac_mid=-1
+ while :; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_lo=$ac_mid; break
+else
+ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+ if test $ac_mid -le $ac_hi; then
+ ac_lo= ac_hi=
+ break
+ fi
+ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
+else
+ ac_lo= ac_hi=
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_hi=$ac_mid
+else
+ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include
+#include
+int
+main ()
+{
+
+ FILE *f = fopen ("conftest.val", "w");
+ if (! f)
+ return 1;
+ if (($2) < 0)
+ {
+ long int i = longval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%ld", i);
+ }
+ else
+ {
+ unsigned long int i = ulongval ();
+ if (i != ($2))
+ return 1;
+ fprintf (f, "%lu", i);
+ }
+ /* Do not output a trailing newline, as this causes \r\n confusion
+ on some platforms. */
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_run "$LINENO"; then :
+ echo >>conftest.val; read $3 &5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_cxx_check_header_compile
+
+# ac_fn_cxx_check_func LINENO FUNC VAR
+# ------------------------------------
+# Tests whether FUNC exists, setting the cache variable VAR accordingly
+ac_fn_cxx_check_func ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+/* Define $2 to an innocuous variant, in case declares $2.
+ For example, HP-UX 11i declares gettimeofday. */
+#define $2 innocuous_$2
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $2 (); below.
+ Prefer to if __STDC__ is defined, since
+ exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include
+#else
+# include
+#endif
+
+#undef $2
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $2 ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined __stub_$2 || defined __stub___$2
+choke me
+#endif
+
+int
+main ()
+{
+return $2 ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ eval "$3=yes"
+else
+ eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_cxx_check_func
+
+# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_c_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval "test \"\${$3+set}\"" = set; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ----------------------------------------------- ##
+## Report this to build-infra-dev@openjdk.java.net ##
+## ----------------------------------------------- ##"
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_c_check_header_mongrel
+
+# ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES
+# ---------------------------------------------------------
+# Tests whether HEADER exists, giving a warning if it cannot be compiled using
+# the include files in INCLUDES and setting the cache variable VAR
+# accordingly.
+ac_fn_cxx_check_header_mongrel ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if eval "test \"\${$3+set}\"" = set; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
+$as_echo_n "checking $2 usability... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_header_compiler=yes
+else
+ ac_header_compiler=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
+$as_echo_n "checking $2 presence... " >&6; }
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <$2>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ ac_header_preproc=yes
+else
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #((
+ yes:no: )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ----------------------------------------------- ##
+## Report this to build-infra-dev@openjdk.java.net ##
+## ----------------------------------------------- ##"
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval "test \"\${$3+set}\"" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ eval "$3=\$ac_header_compiler"
+fi
+eval ac_res=\$$3
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+fi
+ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+
+} # ac_fn_cxx_check_header_mongrel
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by openjdk $as_me version-0.1, which was
+generated by GNU Autoconf 2.67. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5 ; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ac_aux_dir=
+for ac_dir in build-aux "$srcdir"/build-aux; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+
+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
+#
+# Copyright © 2004 Scott James Remnant .
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists. Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+# PKG_CHECK_MODULES
+
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+
+
+
+
+
+
+
+
+
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Fixes paths on windows hosts to be mixed mode short.
+
+
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+
+
+
+
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+function help_on_build_dependency {
+ # Print a helpful message on how to acquire the necessary build dependency.
+ # $1 is the help tag: freetyp2, cups, pulse, alsa etc
+ MISSING_DEPENDENCY=$1
+ PKGHANDLER_COMMAND=
+
+ for ac_prog in apt-get yum port pkgutil pkgadd
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_PKGHANDLER+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$PKGHANDLER"; then
+ ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_PKGHANDLER="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+PKGHANDLER=$ac_cv_prog_PKGHANDLER
+if test -n "$PKGHANDLER"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5
+$as_echo "$PKGHANDLER" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$PKGHANDLER" && break
+done
+
+
+ case $PKGHANDLER in
+ apt-get)
+ apt_help $MISSING_DEPENDENCY ;;
+ yum)
+ yum_help $MISSING_DEPENDENCY ;;
+ port)
+ port_help $MISSING_DEPENDENCY ;;
+ pkgutil)
+ pkgutil_help $MISSING_DEPENDENCY ;;
+ pkgadd)
+ pkgadd_help $MISSING_DEPENDENCY ;;
+ * )
+ break ;;
+ esac
+
+ if test "x$PKGHANDLER_COMMAND" != x; then
+ HELP_MSG="Try running '$PKGHANDLER_COMMAND'."
+ fi
+}
+
+function apt_help {
+ case $1 in
+ devkit)
+ PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;;
+ openjdk)
+ PKGHANDLER_COMMAND="sudo apt-get install openjdk-7-jdk" ;;
+ alsa)
+ PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;;
+ cups)
+ PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;;
+ freetype2)
+ PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;;
+ pulse)
+ PKGHANDLER_COMMAND="sudo apt-get install libpulse-dev" ;;
+ x11)
+ PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev" ;;
+ ccache)
+ PKGHANDLER_COMMAND="sudo apt-get install ccache" ;;
+ * )
+ break ;;
+ esac
+}
+
+function yum_help {
+ case $1 in
+ devkit)
+ PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;;
+ openjdk)
+ PKGHANDLER_COMMAND="sudo yum install java-1.7.0-openjdk" ;;
+ alsa)
+ PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;;
+ cups)
+ PKGHANDLER_COMMAND="sudo yum install cups-devel" ;;
+ freetype2)
+ PKGHANDLER_COMMAND="sudo yum install freetype2-devel" ;;
+ pulse)
+ PKGHANDLER_COMMAND="sudo yum install pulseaudio-libs-devel" ;;
+ x11)
+ PKGHANDLER_COMMAND="sudo yum install libXtst-devel" ;;
+ ccache)
+ PKGHANDLER_COMMAND="sudo yum install ccache" ;;
+ * )
+ break ;;
+ esac
+}
+
+function port_help {
+ PKGHANDLER_COMMAND=""
+}
+
+function pkgutil_help {
+ PKGHANDLER_COMMAND=""
+}
+
+function pkgadd_help {
+ PKGHANDLER_COMMAND=""
+}
+
+
+# Save the command line. Do this very early, before it is lost by calling autoconf macros.
+CONFIGURE_COMMAND_LINE="$@"
+
+
+# Locate the directory of this script.
+SCRIPT="$0"
+
+ if test "x$BUILD_OS" != xwindows; then
+ # Follow a chain of symbolic links. Use readlink
+ # where it exists, else fall back to horribly
+ # complicated shell code.
+ # Extract the first word of "readlink", so it can be a program name with args.
+set dummy readlink; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_READLINK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $READLINK in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+READLINK=$ac_cv_path_READLINK
+if test -n "$READLINK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5
+$as_echo "$READLINK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test "x$READLINK_TESTED" != yes; then
+ # On MacOSX there is a readlink tool with a different
+ # purpose than the GNU readlink tool. Check the found readlink.
+ ISGNU=`$READLINK --help 2>&1 | grep GNU`
+ if test "x$ISGNU" = x; then
+ # A readlink that we do not know how to use.
+ # Are there other non-GNU readlinks out there?
+ READLINK_TESTED=yes
+ READLINK=
+ fi
+ fi
+
+ if test "x$READLINK" != x; then
+ SCRIPT=`$READLINK -f $SCRIPT`
+ else
+ STARTDIR=$PWD
+ COUNTER=0
+ DIR=`dirname $SCRIPT`
+ FIL=`basename $SCRIPT`
+ while test $COUNTER -lt 20; do
+ ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'`
+ if test "x$ISLINK" == x; then
+ # This is not a symbolic link! We are done!
+ break
+ fi
+ # The link might be relative! We have to use cd to travel safely.
+ cd $DIR
+ cd `dirname $ISLINK`
+ DIR=`pwd`
+ FIL=`basename $ISLINK`
+ let COUNTER=COUNTER+1
+ done
+ cd $STARTDIR
+ SCRIPT=$DIR/$FIL
+ fi
+ fi
+
+AUTOCONF_DIR=`dirname $0`
+
+# Start with tools that do not need have cross compilation support
+# and can be expected to be found in the default PATH. These tools are
+# used by configure. Nor are these tools expected to be found in the
+# devkit from the builddeps server either, since they are
+# needed to download the devkit.
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+
+ # Test that variable AWK is not empty.
+ if test "" = "$AWK"; then as_fn_error $? "Could not find awk !" "$LINENO" 5 ; fi
+
+# Extract the first word of "cat", so it can be a program name with args.
+set dummy cat; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_CAT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $CAT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CAT="$CAT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_CAT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+CAT=$ac_cv_path_CAT
+if test -n "$CAT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CAT" >&5
+$as_echo "$CAT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable CAT is not empty.
+ if test "" = "$CAT"; then as_fn_error $? "Could not find cat !" "$LINENO" 5 ; fi
+
+# Extract the first word of "chmod", so it can be a program name with args.
+set dummy chmod; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_CHMOD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $CHMOD in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+CHMOD=$ac_cv_path_CHMOD
+if test -n "$CHMOD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5
+$as_echo "$CHMOD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable CHMOD is not empty.
+ if test "" = "$CHMOD"; then as_fn_error $? "Could not find chmod !" "$LINENO" 5 ; fi
+
+# Extract the first word of "cp", so it can be a program name with args.
+set dummy cp; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_CP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $CP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CP="$CP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+CP=$ac_cv_path_CP
+if test -n "$CP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5
+$as_echo "$CP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable CP is not empty.
+ if test "" = "$CP"; then as_fn_error $? "Could not find cp !" "$LINENO" 5 ; fi
+
+# Extract the first word of "cpio", so it can be a program name with args.
+set dummy cpio; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_CPIO+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $CPIO in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+CPIO=$ac_cv_path_CPIO
+if test -n "$CPIO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5
+$as_echo "$CPIO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable CPIO is not empty.
+ if test "" = "$CPIO"; then as_fn_error $? "Could not find cpio !" "$LINENO" 5 ; fi
+
+# Extract the first word of "cut", so it can be a program name with args.
+set dummy cut; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_CUT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $CUT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CUT="$CUT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_CUT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+CUT=$ac_cv_path_CUT
+if test -n "$CUT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUT" >&5
+$as_echo "$CUT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable CUT is not empty.
+ if test "" = "$CUT"; then as_fn_error $? "Could not find cut !" "$LINENO" 5 ; fi
+
+# Extract the first word of "date", so it can be a program name with args.
+set dummy date; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_DATE+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $DATE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DATE="$DATE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_DATE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DATE=$ac_cv_path_DATE
+if test -n "$DATE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DATE" >&5
+$as_echo "$DATE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable DATE is not empty.
+ if test "" = "$DATE"; then as_fn_error $? "Could not find date !" "$LINENO" 5 ; fi
+
+# Extract the first word of "df", so it can be a program name with args.
+set dummy df; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_DF+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $DF in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DF="$DF" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DF=$ac_cv_path_DF
+if test -n "$DF"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5
+$as_echo "$DF" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable DF is not empty.
+ if test "" = "$DF"; then as_fn_error $? "Could not find df !" "$LINENO" 5 ; fi
+
+# Extract the first word of "diff", so it can be a program name with args.
+set dummy diff; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_DIFF+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $DIFF in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+DIFF=$ac_cv_path_DIFF
+if test -n "$DIFF"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5
+$as_echo "$DIFF" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable DIFF is not empty.
+ if test "" = "$DIFF"; then as_fn_error $? "Could not find diff !" "$LINENO" 5 ; fi
+
+# Warning echo is really, really unportable!!!!! Different
+# behaviour in bash and dash and in a lot of other shells!
+# Use printf for serious work!
+# Extract the first word of "echo", so it can be a program name with args.
+set dummy echo; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ECHO+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ECHO in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ECHO="$ECHO" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ECHO="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ECHO=$ac_cv_path_ECHO
+if test -n "$ECHO"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ECHO" >&5
+$as_echo "$ECHO" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable ECHO is not empty.
+ if test "" = "$ECHO"; then as_fn_error $? "Could not find echo !" "$LINENO" 5 ; fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+ then ac_cv_path_EGREP="$GREP -E"
+ else
+ if test -z "$EGREP"; then
+ ac_path_EGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in egrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+ # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'EGREP' >> "conftest.nl"
+ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_EGREP="$ac_path_EGREP"
+ ac_path_EGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_EGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_EGREP"; then
+ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_EGREP=$EGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+
+ # Test that variable EGREP is not empty.
+ if test "" = "$EGREP"; then as_fn_error $? "Could not find egrep !" "$LINENO" 5 ; fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if test "${ac_cv_path_FGREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+ then ac_cv_path_FGREP="$GREP -F"
+ else
+ if test -z "$FGREP"; then
+ ac_path_FGREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in fgrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+ # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'FGREP' >> "conftest.nl"
+ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_FGREP="$ac_path_FGREP"
+ ac_path_FGREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_FGREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_FGREP"; then
+ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_FGREP=$FGREP
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
+
+
+
+ # Test that variable FGREP is not empty.
+ if test "" = "$FGREP"; then as_fn_error $? "Could not find fgrep !" "$LINENO" 5 ; fi
+
+
+# Extract the first word of "find", so it can be a program name with args.
+set dummy find; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_FIND+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $FIND in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_FIND="$FIND" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_FIND="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+FIND=$ac_cv_path_FIND
+if test -n "$FIND"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIND" >&5
+$as_echo "$FIND" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable FIND is not empty.
+ if test "" = "$FIND"; then as_fn_error $? "Could not find find !" "$LINENO" 5 ; fi
+
+
+ # Test if find supports -delete
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5
+$as_echo_n "checking if find supports -delete... " >&6; }
+ FIND_DELETE="-delete"
+
+ DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?)
+
+ echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete
+
+ TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1`
+ if test -f $DELETEDIR/TestIfFindSupportsDelete; then
+ # No, it does not.
+ rm $DELETEDIR/TestIfFindSupportsDelete
+ FIND_DELETE="-exec rm \{\} \+"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ fi
+ rmdir $DELETEDIR
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$GREP"; then
+ ac_path_GREP_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in grep ggrep; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+ # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo 'GREP' >> "conftest.nl"
+ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_GREP_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_GREP="$ac_path_GREP"
+ ac_path_GREP_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_GREP_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_GREP"; then
+ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+ fi
+else
+ ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+
+ # Test that variable GREP is not empty.
+ if test "" = "$GREP"; then as_fn_error $? "Could not find grep !" "$LINENO" 5 ; fi
+
+# Extract the first word of "head", so it can be a program name with args.
+set dummy head; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_HEAD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $HEAD in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_HEAD="$HEAD" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_HEAD="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+HEAD=$ac_cv_path_HEAD
+if test -n "$HEAD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HEAD" >&5
+$as_echo "$HEAD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable HEAD is not empty.
+ if test "" = "$HEAD"; then as_fn_error $? "Could not find head !" "$LINENO" 5 ; fi
+
+# Extract the first word of "ln", so it can be a program name with args.
+set dummy ln; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_LN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $LN in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_LN="$LN" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+LN=$ac_cv_path_LN
+if test -n "$LN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5
+$as_echo "$LN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable LN is not empty.
+ if test "" = "$LN"; then as_fn_error $? "Could not find ln !" "$LINENO" 5 ; fi
+
+# Extract the first word of "ls", so it can be a program name with args.
+set dummy ls; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_LS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $LS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_LS="$LS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_LS="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+LS=$ac_cv_path_LS
+if test -n "$LS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LS" >&5
+$as_echo "$LS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable LS is not empty.
+ if test "" = "$LS"; then as_fn_error $? "Could not find ls !" "$LINENO" 5 ; fi
+
+for ac_prog in gmake make
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MAKE+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MAKE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MAKE="$MAKE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MAKE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+MAKE=$ac_cv_path_MAKE
+if test -n "$MAKE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKE" >&5
+$as_echo "$MAKE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$MAKE" && break
+done
+
+
+ # Test that variable MAKE is not empty.
+ if test "" = "$MAKE"; then as_fn_error $? "Could not find make !" "$LINENO" 5 ; fi
+
+MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[12346789]'`
+if test "x$MAKE_VERSION" = x; then
+ as_fn_error $? "You must use GNU make 3.81 or newer! Please put it in the path." "$LINENO" 5
+fi
+# Extract the first word of "mkdir", so it can be a program name with args.
+set dummy mkdir; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MKDIR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MKDIR in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+MKDIR=$ac_cv_path_MKDIR
+if test -n "$MKDIR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5
+$as_echo "$MKDIR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable MKDIR is not empty.
+ if test "" = "$MKDIR"; then as_fn_error $? "Could not find mkdir !" "$LINENO" 5 ; fi
+
+# Extract the first word of "mv", so it can be a program name with args.
+set dummy mv; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MV+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MV in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MV="$MV" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+MV=$ac_cv_path_MV
+if test -n "$MV"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5
+$as_echo "$MV" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable MV is not empty.
+ if test "" = "$MV"; then as_fn_error $? "Could not find mv !" "$LINENO" 5 ; fi
+
+for ac_prog in nawk gawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_NAWK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $NAWK in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_NAWK="$NAWK" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_NAWK="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+NAWK=$ac_cv_path_NAWK
+if test -n "$NAWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NAWK" >&5
+$as_echo "$NAWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$NAWK" && break
+done
+
+
+ # Test that variable NAWK is not empty.
+ if test "" = "$NAWK"; then as_fn_error $? "Could not find nawk !" "$LINENO" 5 ; fi
+
+# Extract the first word of "printf", so it can be a program name with args.
+set dummy printf; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PRINTF+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PRINTF in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PRINTF="$PRINTF" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PRINTF="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PRINTF=$ac_cv_path_PRINTF
+if test -n "$PRINTF"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PRINTF" >&5
+$as_echo "$PRINTF" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable PRINTF is not empty.
+ if test "" = "$PRINTF"; then as_fn_error $? "Could not find printf !" "$LINENO" 5 ; fi
+
+# Extract the first word of "pwd", so it can be a program name with args.
+set dummy pwd; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_THEPWDCMD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $THEPWDCMD in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+THEPWDCMD=$ac_cv_path_THEPWDCMD
+if test -n "$THEPWDCMD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5
+$as_echo "$THEPWDCMD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "rm", so it can be a program name with args.
+set dummy rm; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_RM+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $RM in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_RM="$RM" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+RM=$ac_cv_path_RM
+if test -n "$RM"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5
+$as_echo "$RM" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable RM is not empty.
+ if test "" = "$RM"; then as_fn_error $? "Could not find rm !" "$LINENO" 5 ; fi
+
+RM="$RM -f"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if test "${ac_cv_path_SED+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+ for ac_i in 1 2 3 4 5 6 7; do
+ ac_script="$ac_script$as_nl$ac_script"
+ done
+ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+ { ac_script=; unset ac_script;}
+ if test -z "$SED"; then
+ ac_path_SED_found=false
+ # Loop through the user's path and test for each of PROGNAME-LIST
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in sed gsed; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+ { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+# Check for GNU ac_path_SED and select it if it is found.
+ # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+ ac_count=0
+ $as_echo_n 0123456789 >"conftest.in"
+ while :
+ do
+ cat "conftest.in" "conftest.in" >"conftest.tmp"
+ mv "conftest.tmp" "conftest.in"
+ cp "conftest.in" "conftest.nl"
+ $as_echo '' >> "conftest.nl"
+ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+ as_fn_arith $ac_count + 1 && ac_count=$as_val
+ if test $ac_count -gt ${ac_path_SED_max-0}; then
+ # Best one so far, save it but keep looking for a better one
+ ac_cv_path_SED="$ac_path_SED"
+ ac_path_SED_max=$ac_count
+ fi
+ # 10*(2^10) chars as input seems more than enough
+ test $ac_count -gt 10 && break
+ done
+ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+ $ac_path_SED_found && break 3
+ done
+ done
+ done
+IFS=$as_save_IFS
+ if test -z "$ac_cv_path_SED"; then
+ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+ fi
+else
+ ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+ rm -f conftest.sed
+
+
+ # Test that variable SED is not empty.
+ if test "" = "$SED"; then as_fn_error $? "Could not find sed !" "$LINENO" 5 ; fi
+
+# Extract the first word of "sh", so it can be a program name with args.
+set dummy sh; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_SH+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $SH in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SH="$SH" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_SH="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+SH=$ac_cv_path_SH
+if test -n "$SH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SH" >&5
+$as_echo "$SH" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable SH is not empty.
+ if test "" = "$SH"; then as_fn_error $? "Could not find sh !" "$LINENO" 5 ; fi
+
+# Extract the first word of "sort", so it can be a program name with args.
+set dummy sort; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_SORT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $SORT in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_SORT="$SORT" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_SORT="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+SORT=$ac_cv_path_SORT
+if test -n "$SORT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SORT" >&5
+$as_echo "$SORT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable SORT is not empty.
+ if test "" = "$SORT"; then as_fn_error $? "Could not find sort !" "$LINENO" 5 ; fi
+
+# Extract the first word of "tar", so it can be a program name with args.
+set dummy tar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_TAR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $TAR in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_TAR="$TAR" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+TAR=$ac_cv_path_TAR
+if test -n "$TAR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5
+$as_echo "$TAR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable TAR is not empty.
+ if test "" = "$TAR"; then as_fn_error $? "Could not find tar !" "$LINENO" 5 ; fi
+
+# Extract the first word of "tail", so it can be a program name with args.
+set dummy tail; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_TAIL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $TAIL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_TAIL="$TAIL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_TAIL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+TAIL=$ac_cv_path_TAIL
+if test -n "$TAIL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAIL" >&5
+$as_echo "$TAIL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable TAIL is not empty.
+ if test "" = "$TAIL"; then as_fn_error $? "Could not find tail !" "$LINENO" 5 ; fi
+
+# Extract the first word of "tee", so it can be a program name with args.
+set dummy tee; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_TEE+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $TEE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_TEE="$TEE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_TEE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+TEE=$ac_cv_path_TEE
+if test -n "$TEE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEE" >&5
+$as_echo "$TEE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable TEE is not empty.
+ if test "" = "$TEE"; then as_fn_error $? "Could not find tee !" "$LINENO" 5 ; fi
+
+# Extract the first word of "tr", so it can be a program name with args.
+set dummy tr; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_TR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $TR in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_TR="$TR" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_TR="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+TR=$ac_cv_path_TR
+if test -n "$TR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TR" >&5
+$as_echo "$TR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable TR is not empty.
+ if test "" = "$TR"; then as_fn_error $? "Could not find tr !" "$LINENO" 5 ; fi
+
+# Extract the first word of "touch", so it can be a program name with args.
+set dummy touch; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_TOUCH+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $TOUCH in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_TOUCH="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+TOUCH=$ac_cv_path_TOUCH
+if test -n "$TOUCH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TOUCH" >&5
+$as_echo "$TOUCH" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable TOUCH is not empty.
+ if test "" = "$TOUCH"; then as_fn_error $? "Could not find touch !" "$LINENO" 5 ; fi
+
+# Extract the first word of "wc", so it can be a program name with args.
+set dummy wc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_WC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $WC in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_WC="$WC" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_WC="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+WC=$ac_cv_path_WC
+if test -n "$WC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WC" >&5
+$as_echo "$WC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable WC is not empty.
+ if test "" = "$WC"; then as_fn_error $? "Could not find wc !" "$LINENO" 5 ; fi
+
+# Extract the first word of "xargs", so it can be a program name with args.
+set dummy xargs; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_XARGS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $XARGS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_XARGS="$XARGS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_XARGS="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+XARGS=$ac_cv_path_XARGS
+if test -n "$XARGS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XARGS" >&5
+$as_echo "$XARGS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable XARGS is not empty.
+ if test "" = "$XARGS"; then as_fn_error $? "Could not find xargs !" "$LINENO" 5 ; fi
+
+# Extract the first word of "zip", so it can be a program name with args.
+set dummy zip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ZIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ZIP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ZIP=$ac_cv_path_ZIP
+if test -n "$ZIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5
+$as_echo "$ZIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable ZIP is not empty.
+ if test "" = "$ZIP"; then as_fn_error $? "Could not find zip !" "$LINENO" 5 ; fi
+
+# Extract the first word of "unzip", so it can be a program name with args.
+set dummy unzip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_UNZIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $UNZIP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+UNZIP=$ac_cv_path_UNZIP
+if test -n "$UNZIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5
+$as_echo "$UNZIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable UNZIP is not empty.
+ if test "" = "$UNZIP"; then as_fn_error $? "Could not find unzip !" "$LINENO" 5 ; fi
+
+# Extract the first word of "ldd", so it can be a program name with args.
+set dummy ldd; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_LDD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $LDD in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_LDD="$LDD" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+LDD=$ac_cv_path_LDD
+if test -n "$LDD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5
+$as_echo "$LDD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test "x$LDD" = "x"; then
+ # List shared lib dependencies is used for
+ # debug output and checking for forbidden dependencies.
+ # We can build without it.
+ LDD="true"
+fi
+# Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_OTOOL+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $OTOOL in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+OTOOL=$ac_cv_path_OTOOL
+if test -n "$OTOOL"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test "x$OTOOL" = "x"; then
+ OTOOL="true"
+fi
+# Extract the first word of "readelf", so it can be a program name with args.
+set dummy readelf; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_READELF+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $READELF in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_READELF="$READELF" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+READELF=$ac_cv_path_READELF
+if test -n "$READELF"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5
+$as_echo "$READELF" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "expr", so it can be a program name with args.
+set dummy expr; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_EXPR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $EXPR in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_EXPR="$EXPR" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_EXPR="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+EXPR=$ac_cv_path_EXPR
+if test -n "$EXPR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPR" >&5
+$as_echo "$EXPR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable EXPR is not empty.
+ if test "" = "$EXPR"; then as_fn_error $? "Could not find expr !" "$LINENO" 5 ; fi
+
+# Extract the first word of "file", so it can be a program name with args.
+set dummy file; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_FILE+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $FILE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_FILE="$FILE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_FILE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+FILE=$ac_cv_path_FILE
+if test -n "$FILE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FILE" >&5
+$as_echo "$FILE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Test that variable FILE is not empty.
+ if test "" = "$FILE"; then as_fn_error $? "Could not find file !" "$LINENO" 5 ; fi
+
+# Figure out the build and host system.
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if test "${ac_cv_build+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if test "${ac_cv_host+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+
+# Check whether --with-data-model was given.
+if test "${with_data_model+set}" = set; then :
+ withval=$with_data_model;
+fi
+
+
+if test "x$with_data_model" != x && \
+ test "x$with_data_model" != x32 && \
+ test "x$with_data_model" != x64 ; then
+ as_fn_error $? "The data model can only be 32 or 64!" "$LINENO" 5
+fi
+# Translate the standard cpu-vendor-kernel-os quadruplets into
+# the new HOST_.... and BUILD_... and the legacy names used by
+# the openjdk build.
+# It uses $host_os $host_cpu $build_os $build_cpu and $with_data_model
+
+ # Expects $host_os $host_cpu $build_os and $build_cpu
+ # and $with_data_model to have been setup!
+ #
+ # Translate the standard triplet(quadruplet) definition
+ # of the host/build system into
+ # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows
+ # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince
+ # HOST_OS_API=posix,winapi
+ #
+ # HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64
+ # HOST_CPU_ARCH=x86,sparc,pcc,arm
+ # HOST_CPU_BITS=32,64
+ # HOST_CPU_ENDIAN=big,little
+ #
+ # The same values are setup for BUILD_...
+ #
+ # And the legacy variables, for controlling the old makefiles.
+ # LEGACY_HOST_CPU1=i586,amd64,sparc,sparcv9,arm,arm64...
+ # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64...
+ # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris)
+ # LEGACY_HOST_OS_API=solaris,windows
+ #
+ # We also copy the autoconf trip/quadruplet
+ # verbatim to HOST and BUILD
+ HOST=${host}
+
+ BUILD=${build}
+
+
+
+
+ case "$host_os" in
+ *linux*)
+ VAR_OS=linux
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=gnu
+ ;;
+ *solaris*)
+ VAR_OS=solaris
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=sysv
+ ;;
+ *darwin*)
+ VAR_OS=macosx
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=bsd
+ ;;
+ *bsd*)
+ VAR_OS=bsd
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=bsd
+ ;;
+ *cygwin*|*windows*)
+ VAR_OS=windows
+ VAR_OS_API=winapi
+ VAR_OS_FAMILY=windows
+ ;;
+ *)
+ as_fn_error $? "unsupported host operating system $host_os" "$LINENO" 5
+ ;;
+ esac
+
+ HOST_OS="$VAR_OS"
+ HOST_OS_FAMILY="$VAR_OS_FAMILY"
+ HOST_OS_API="$VAR_OS_API"
+
+
+
+
+
+ if test "x$HOST_OS_API" = xposix; then
+ LEGACY_HOST_OS_API="solaris"
+ fi
+ if test "x$HOST_OS_API" = xwinapi; then
+ LEGACY_HOST_OS_API="windows"
+ fi
+
+
+
+
+ # First argument is the cpu name from the trip/quad
+ case "$host_cpu" in
+ x86_64)
+ VAR_CPU=x64
+ VAR_CPU_ARCH=x86
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=little
+ VAR_LEGACY_CPU=amd64
+ ;;
+ i?86)
+ VAR_CPU=ia32
+ VAR_CPU_ARCH=x86
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=little
+ VAR_LEGACY_CPU=i586
+ ;;
+ alpha*)
+ VAR_CPU=alpha
+ VAR_CPU_ARCH=alpha
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=alpha
+ ;;
+ arm*)
+ VAR_CPU=arm
+ VAR_CPU_ARCH=arm
+ VAR_CPU_BITS=3264
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=arm
+ ;;
+ mips)
+ VAR_CPU=mips
+ VAR_CPU_ARCH=mips
+ VAR_CPU_BITS=woot
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=mips
+ ;;
+ mipsel)
+ VAR_CPU=mipsel
+ VAR_CPU_ARCH=mips
+ VAR_CPU_BITS=woot
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=mipsel
+ ;;
+ powerpc)
+ VAR_CPU=ppc
+ VAR_CPU_ARCH=ppc
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=ppc
+ ;;
+ powerpc64)
+ VAR_CPU=ppc64
+ VAR_CPU_ARCH=ppc
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=32
+ VAR_LEGACY_CPU=ppc64
+ ;;
+ sparc)
+ VAR_CPU=sparc
+ VAR_CPU_ARCH=sparc
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=sparc
+ ;;
+ sparc64)
+ VAR_CPU=sparcv9
+ VAR_CPU_ARCH=sparc
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=sparc_sparcv9
+ ;;
+ s390)
+ VAR_CPU=s390
+ VAR_CPU_ARCH=s390
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=s390
+ VAR_LEGACY_CPU=s390
+ ;;
+ s390x)
+ VAR_CPU=s390x
+ VAR_CPU_ARCH=s390
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=s390x
+ ;;
+ *)
+ as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5
+ ;;
+ esac
+
+ # Workaround cygwin not knowing about 64 bit.
+ if test "x$VAR_OS" = "xwindows"; then
+ if test "x$PROCESSOR_IDENTIFIER" != "x"; then
+ PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '`
+ case "$PROC_ARCH" in
+ intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64)
+ VAR_CPU=x64
+ VAR_CPU_BITS=64
+ VAR_LEGACY_CPU=amd64
+ ;;
+ esac
+ fi
+ fi
+
+ if test "x$VAR_CPU_ARCH" = "xx86"; then
+ if test "x$with_data_model" = "x64"; then
+ VAR_CPU=x64
+ VAR_CPU_BITS=64
+ VAR_LEGACY_CPU=amd64
+ fi
+ if test "x$with_data_model" = "x32"; then
+ VAR_CPU=ia32
+ VAR_CPU_BITS=32
+ VAR_LEGACY_CPU=i586
+ fi
+ fi
+
+ HOST_CPU="$VAR_CPU"
+ HOST_CPU_ARCH="$VAR_CPU_ARCH"
+ HOST_CPU_BITS="$VAR_CPU_BITS"
+ HOST_CPU_ENDIAN="$VAR_CPU_ENDIAN"
+
+
+
+
+
+
+ # Also store the legacy naming of the cpu.
+ # Ie i586 and amd64 instead of ia32 and x64
+ LEGACY_HOST_CPU1="$VAR_LEGACY_CPU"
+
+
+ # And the second legacy naming of the cpu.
+ # Ie i386 and amd64 instead of ia32 and x64.
+ LEGACY_HOST_CPU2="$LEGACY_HOST_CPU1"
+ if test "x$LEGACY_HOST_CPU1" = xi586; then
+ LEGACY_HOST_CPU2=i386
+ fi
+
+
+ # And the third legacy naming of the cpu.
+ # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris.
+ LEGACY_HOST_CPU3=""
+ if test "x$HOST_CPU" = xx64; then
+ LEGACY_HOST_CPU3=amd64
+ fi
+ if test "x$HOST_CPU" = xsparcv9; then
+ LEGACY_HOST_CPU3=sparvc9
+ fi
+
+
+
+
+
+ case "$build_os" in
+ *linux*)
+ VAR_OS=linux
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=gnu
+ ;;
+ *solaris*)
+ VAR_OS=solaris
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=sysv
+ ;;
+ *darwin*)
+ VAR_OS=macosx
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=bsd
+ ;;
+ *bsd*)
+ VAR_OS=bsd
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=bsd
+ ;;
+ *cygwin*|*windows*)
+ VAR_OS=windows
+ VAR_OS_API=winapi
+ VAR_OS_FAMILY=windows
+ ;;
+ *)
+ as_fn_error $? "unsupported host operating system $build_os" "$LINENO" 5
+ ;;
+ esac
+
+ BUILD_OS="$VAR_OS"
+ BUILD_OS_FAMILY="$VAR_OS_FAMILY"
+ BUILD_OS_API="$VAR_OS_API"
+
+
+
+
+
+ if test "x$BUILD_OS_API" = xposix; then
+ LEGACY_BUILD_OS_API="solaris"
+ fi
+ if test "x$BUILD_OS_API" = xwinapi; then
+ LEGACY_BUILD_OS_API="windows"
+ fi
+
+
+
+
+ # First argument is the cpu name from the trip/quad
+ case "$build_cpu" in
+ x86_64)
+ VAR_CPU=x64
+ VAR_CPU_ARCH=x86
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=little
+ VAR_LEGACY_CPU=amd64
+ ;;
+ i?86)
+ VAR_CPU=ia32
+ VAR_CPU_ARCH=x86
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=little
+ VAR_LEGACY_CPU=i586
+ ;;
+ alpha*)
+ VAR_CPU=alpha
+ VAR_CPU_ARCH=alpha
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=alpha
+ ;;
+ arm*)
+ VAR_CPU=arm
+ VAR_CPU_ARCH=arm
+ VAR_CPU_BITS=3264
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=arm
+ ;;
+ mips)
+ VAR_CPU=mips
+ VAR_CPU_ARCH=mips
+ VAR_CPU_BITS=woot
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=mips
+ ;;
+ mipsel)
+ VAR_CPU=mipsel
+ VAR_CPU_ARCH=mips
+ VAR_CPU_BITS=woot
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=mipsel
+ ;;
+ powerpc)
+ VAR_CPU=ppc
+ VAR_CPU_ARCH=ppc
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=ppc
+ ;;
+ powerpc64)
+ VAR_CPU=ppc64
+ VAR_CPU_ARCH=ppc
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=32
+ VAR_LEGACY_CPU=ppc64
+ ;;
+ sparc)
+ VAR_CPU=sparc
+ VAR_CPU_ARCH=sparc
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=sparc
+ ;;
+ sparc64)
+ VAR_CPU=sparcv9
+ VAR_CPU_ARCH=sparc
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=sparc_sparcv9
+ ;;
+ s390)
+ VAR_CPU=s390
+ VAR_CPU_ARCH=s390
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=s390
+ VAR_LEGACY_CPU=s390
+ ;;
+ s390x)
+ VAR_CPU=s390x
+ VAR_CPU_ARCH=s390
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=s390x
+ ;;
+ *)
+ as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5
+ ;;
+ esac
+
+ # Workaround cygwin not knowing about 64 bit.
+ if test "x$VAR_OS" = "xwindows"; then
+ if test "x$PROCESSOR_IDENTIFIER" != "x"; then
+ PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '`
+ case "$PROC_ARCH" in
+ intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64)
+ VAR_CPU=x64
+ VAR_CPU_BITS=64
+ VAR_LEGACY_CPU=amd64
+ ;;
+ esac
+ fi
+ fi
+
+ if test "x$VAR_CPU_ARCH" = "xx86"; then
+ if test "x$with_data_model" = "x64"; then
+ VAR_CPU=x64
+ VAR_CPU_BITS=64
+ VAR_LEGACY_CPU=amd64
+ fi
+ if test "x$with_data_model" = "x32"; then
+ VAR_CPU=ia32
+ VAR_CPU_BITS=32
+ VAR_LEGACY_CPU=i586
+ fi
+ fi
+
+ BUILD_CPU="$VAR_CPU"
+ BUILD_CPU_ARCH="$VAR_CPU_ARCH"
+ BUILD_CPU_BITS="$VAR_CPU_BITS"
+ BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN"
+
+
+
+
+
+
+ # Also store the legacy naming of the cpu.
+ # Ie i586 and amd64 instead of ia32 and x64
+ LEGACY_BUILD_CPU1="$VAR_LEGACY_CPU"
+
+
+ # And the second legacy naming of the cpu.
+ # Ie i386 and amd64 instead of ia32 and x64.
+ LEGACY_BUILD_CPU2="$LEGACY_BUILD_CPU1"
+ if test "x$LEGACY_BUILD_CPU1" = xi586; then
+ LEGACY_BUILD_CPU2=i386
+ fi
+
+
+ # And the third legacy naming of the cpu.
+ # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris.
+ LEGACY_BUILD_CPU3=""
+ if test "x$BUILD_CPU" = xx64; then
+ LEGACY_BUILD_CPU3=amd64
+ fi
+ if test "x$BUILD_CPU" = xsparcv9; then
+ LEGACY_BUILD_CPU3=sparvc9
+ fi
+
+
+
+ if test "x$HOST_OS" != xsolaris; then
+ LEGACY_HOST_CPU3=""
+ LEGACY_BUILD_CPU3=""
+ fi
+
+# Now the following vars are defined.
+# HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows
+# HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince
+# HOST_OS_API=posix,winapi
+#
+# HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64
+# HOST_CPU_ARCH=x86,sparc,pcc,arm
+# HOST_CPU_BITS=32,64
+# HOST_CPU_ENDIAN=big,little
+#
+# There is also a:
+# LEGACY_HOST_CPU1=i586,amd64,.... # used to set the old var ARCH
+# LEGACY_HOST_CPU2=i386,amd64,.... # used to set the old var LIBARCH
+# LEGACY_HOST_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris
+# There was also a BUILDARCH that had i486,amd64,... but we do not use that
+# in the new build.
+# LEGACY_HOST_OS_API=solaris,windows # used to select source roots
+
+DATE_WHEN_CONFIGURED=`LANG=C date`
+
+
+# How many cores do we have on this build system?
+
+# Check whether --with-num-cores was given.
+if test "${with_num_cores+set}" = set; then :
+ withval=$with_num_cores;
+fi
+
+if test "x$with_num_cores" = x; then
+ # The number of cores were not specified, try to probe them.
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for number of cores" >&5
+$as_echo_n "checking for number of cores... " >&6; }
+ NUM_CORES=1
+ FOUND_CORES=no
+
+ if test -f /proc/cpuinfo; then
+ # Looks like a Linux system
+ NUM_CORES=`cat /proc/cpuinfo | grep -c processor`
+ FOUND_CORES=yes
+ fi
+
+ if test -x /usr/sbin/psrinfo; then
+ # Looks like a Solaris system
+ NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line`
+ FOUND_CORES=yes
+ fi
+
+ if test -x /usr/sbin/system_profiler; then
+ # Looks like a MacOSX system
+ NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'`
+ FOUND_CORES=yes
+ fi
+
+ if test "x$build_os" = xwindows; then
+ NUM_CORES=4
+ fi
+
+ # For c/c++ code we run twice as many concurrent build
+ # jobs than we have cores, otherwise we will stall on io.
+ CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
+
+ if test "x$FOUND_CORES" = xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NUM_CORES" >&5
+$as_echo "$NUM_CORES" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1!" >&5
+$as_echo "could not detect number of cores, defaulting to 1!" >&6; }
+ fi
+
+
+else
+ NUM_CORES=$with_num_cores
+ CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
+fi
+
+
+
+# How many cores do we have on this build system?
+
+# Check whether --with-memory-size was given.
+if test "${with_memory_size+set}" = set; then :
+ withval=$with_memory_size;
+fi
+
+if test "x$with_memory_size" = x; then
+ # The memory size was not specified, try to probe it.
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memory size" >&5
+$as_echo_n "checking for memory size... " >&6; }
+ # Default to 1024MB
+ MEMORY_SIZE=1024
+ FOUND_MEM=no
+
+ if test -f /proc/cpuinfo; then
+ # Looks like a Linux system
+ MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
+ MEMORY_SIZE=`expr $MEMORY_SIZE / 1024`
+ FOUND_MEM=yes
+ fi
+
+ if test -x /usr/sbin/prtconf; then
+ # Looks like a Solaris system
+ MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print $3 }'`
+ FOUND_MEM=yes
+ fi
+
+ if test -x /usr/sbin/system_profiler; then
+ # Looks like a MacOSX system
+ MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print $2}'`
+ MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024`
+ FOUND_MEM=yes
+ fi
+
+ if test "x$build_os" = xwindows; then
+ MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print $4 }' | sed 's/,//'`
+ FOUND_MEM=yes
+ fi
+
+ if test "x$FOUND_MEM" = xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MEMORY_SIZE MB" >&5
+$as_echo "$MEMORY_SIZE MB" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size defaulting to 1024MB!" >&5
+$as_echo "could not detect memory size defaulting to 1024MB!" >&6; }
+ fi
+
+else
+ MEMORY_SIZE=$with_memory_size
+fi
+
+
+# Where is the source? It is located two levels above the configure script.
+CURDIR="$PWD"
+cd "$AUTOCONF_DIR/../.."
+SRC_ROOT="`pwd`"
+
+cd "$CURDIR"
+
+# For cygwin we need cygpath first, since it is used everywhere.
+# Extract the first word of "cygpath", so it can be a program name with args.
+set dummy cygpath; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_CYGPATH+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $CYGPATH in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+CYGPATH=$ac_cv_path_CYGPATH
+if test -n "$CYGPATH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5
+$as_echo "$CYGPATH" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+PATH_SEP=":"
+if test "x$BUILD_OS" = "xwindows"; then
+ if test "x$CYGPATH" = x; then
+ as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5
+ fi
+ PATH_SEP=";"
+fi
+
+
+
+ # Fail with message the path to the source root if var SRC_ROOT contains a path with no spaces in it.
+ # Unless on Windows, where we can rewrite the path.
+ HAS_SPACE=`echo "$SRC_ROOT" | grep " "`
+ if test "x$HAS_SPACE" != x; then
+ if test "x$BUILD_OS" = "xwindows"; then
+ SRC_ROOT=`$CYGPATH -s -m -a "$SRC_ROOT"`
+ SRC_ROOT=`$CYGPATH -u "$SRC_ROOT"`
+ else
+ as_fn_error $? "You cannot have spaces in the path to the source root! \"$SRC_ROOT\"" "$LINENO" 5
+ fi
+ fi
+
+
+ # Fail with message the path to the current directory if var CURDIR contains a path with no spaces in it.
+ # Unless on Windows, where we can rewrite the path.
+ HAS_SPACE=`echo "$CURDIR" | grep " "`
+ if test "x$HAS_SPACE" != x; then
+ if test "x$BUILD_OS" = "xwindows"; then
+ CURDIR=`$CYGPATH -s -m -a "$CURDIR"`
+ CURDIR=`$CYGPATH -u "$CURDIR"`
+ else
+ as_fn_error $? "You cannot have spaces in the path to the current directory! \"$CURDIR\"" "$LINENO" 5
+ fi
+ fi
+
+
+if test "x$BUILD_OS" = "xsolaris"; then
+ # Also search in /usr/ccs/bin for utilities like ar and as.
+ PATH="/usr/ccs/bin:$PATH"
+fi
+
+###############################################################################
+#
+# OpenJDK or closed
+#
+# Check whether --enable-openjdk was given.
+if test "${enable_openjdk+set}" = set; then :
+ enableval=$enable_openjdk;
+fi
+
+
+if test "x$enable_openjdk" = "xyes"; then
+ OPENJDK=true
+elif test "x$enable_openjdk" = "xno"; then
+ OPENJDK=false
+elif test -d "$SRC_ROOT/jdk/src/closed"; then
+ OPENJDK=false
+else
+ OPENJDK=true
+fi
+
+if test "x$OPENJDK" = "xtrue"; then
+ SET_OPENJDK=OPENJDK=true
+fi
+
+
+
+###############################################################################
+#
+# JIGSAW or not. The JIGSAW variable is used during the intermediate
+# stage when we are building both the old style JDK and the new style modularized JDK.
+# When the modularized JDK is finalized, this option will go away.
+#
+# Check whether --enable-jigsaw was given.
+if test "${enable_jigsaw+set}" = set; then :
+ enableval=$enable_jigsaw;
+fi
+
+
+if test "x$enable_jigsaw" = "xyes"; then
+ JIGSAW=true
+else
+ JIGSAW=false
+fi
+
+
+###############################################################################
+#
+# Check which variant of the JDK that we want to build.
+# Currently we have:
+# normal: standard edition
+# embedded: cut down to a smaller footprint
+#
+# Effectively the JDK variant gives a name to a specific set of
+# modules to compile into the JDK. In the future, these modules
+# might even be Jigsaw modules.
+#
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of the JDK to build" >&5
+$as_echo_n "checking which variant of the JDK to build... " >&6; }
+
+# Check whether --with-jdk-variant was given.
+if test "${with_jdk_variant+set}" = set; then :
+ withval=$with_jdk_variant;
+fi
+
+
+if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then
+ JAVASE_EMBEDDED=""
+ MINIMIZE_RAM_USAGE=""
+ JDK_VARIANT="normal"
+elif test "x$with_jdk_variant" = xembedded; then
+ JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true"
+ MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true"
+ JDK_VARIANT="embedded"
+else
+ as_fn_error $? "The available JDK variants are: normal, embedded" "$LINENO" 5
+fi
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $JDK_VARIANT" >&5
+$as_echo "$JDK_VARIANT" >&6; }
+
+###############################################################################
+#
+# Should we build a JDK/JVM with head support (ie a graphical ui)?
+# We always build headless support.
+#
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking headful support" >&5
+$as_echo_n "checking headful support... " >&6; }
+# Check whether --enable-headful was given.
+if test "${enable_headful+set}" = set; then :
+ enableval=$enable_headful; SUPPORT_HEADFUL=${enable_headful}
+else
+ SUPPORT_HEADFUL=yes
+fi
+
+
+SUPPORT_HEADLESS=yes
+BUILD_HEADLESS="BUILD_HEADLESS:=true"
+
+if test "x$SUPPORT_HEADFUL" = xyes; then
+ # We are building both headful and headless.
+ BUILD_HEADLESS_ONLY=""
+ headful_msg="inlude support for both headful and headless"
+fi
+
+if test "x$SUPPORT_HEADFUL" = xno; then
+ # Thus we are building headless only.
+ BUILD_HEADLESS="BUILD_HEADLESS:=true"
+ BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true"
+ headful_msg="headless only"
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $headful_msg" >&5
+$as_echo "$headful_msg" >&6; }
+
+
+
+
+
+
+###############################################################################
+#
+# Check which variants of the JVM that we want to build.
+# Currently we have:
+# server: normal interpreter and a tiered C1/C2 compiler
+# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms)
+# kernel: kernel footprint JVM that passes the TCK without major performance problems,
+# ie normal interpreter and C1, only the serial GC, kernel jvmti etc
+# zero: no machine code interpreter, no compiler
+# zeroshark: zero interpreter and shark/llvm compiler backend
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM that should be built" >&5
+$as_echo_n "checking which variants of the JVM that should be built... " >&6; }
+
+# Check whether --with-jvm-variants was given.
+if test "${with_jvm_variants+set}" = set; then :
+ withval=$with_jvm_variants;
+fi
+
+
+if test "x$with_jvm_variants" = x; then
+ if test "x$JDK_VARIANT" = xembedded; then
+ with_jvm_variants="kernel"
+ elif test "x$HOST_CPU_BITS" = x64; then
+ with_jvm_variants="server"
+ else
+ # Yes, on 32-bit machines, the same source (almost) is compiled twice
+ # to generate two libjvm.so files. Fun, fun.
+ with_jvm_variants="client,server"
+ fi
+fi
+
+JVM_VARIANTS=",$with_jvm_variants,"
+TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'`
+
+if test "x$TEST_VARIANTS" != "x,"; then
+ as_fn_error $? "The available JVM variants are: server, client, kernel, zero, zeroshark" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_jvm_variants" >&5
+$as_echo "$with_jvm_variants" >&6; }
+
+JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'`
+JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'`
+JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'`
+JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'`
+JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'`
+
+if test "x$JVM_VARIANT_CLIENT" = xtrue; then
+ if test "x$HOST_CPU_BITS" = x64; then
+ as_fn_error $? "You cannot build a client JVM for a 64-bit machine." "$LINENO" 5
+ fi
+fi
+if test "x$JVM_VARIANT_KERNEL" = xtrue; then
+ if test "x$HOST_CPU_BITS" = x64; then
+ as_fn_error $? "You cannot build a kernel JVM for a 64-bit machine." "$LINENO" 5
+ fi
+fi
+
+COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'`
+# Replace the commas with AND for use in the build directory name.
+ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'`
+if test "x$COUNT_VARIANTS" != "x,1"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants" >&5
+$as_echo "$as_me: NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants" >&6;}
+fi
+
+
+
+
+
+
+
+
+###############################################################################
+#
+# Set the debug level
+# release: no debug information, all optimizations, no asserts.
+# fastdebug: debug information (-g), all optimizations, all asserts
+# slowdebug: debug information (-g), no optimizations, all asserts
+#
+DEBUG_LEVEL="release"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which debug level to use" >&5
+$as_echo_n "checking which debug level to use... " >&6; }
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then :
+ enableval=$enable_debug;
+ ENABLE_DEBUG="${enableval}"
+ DEBUG_LEVEL="fastdebug"
+
+else
+ ENABLE_DEBUG="no"
+fi
+
+
+
+# Check whether --with-debug-level was given.
+if test "${with_debug_level+set}" = set; then :
+ withval=$with_debug_level;
+ DEBUG_LEVEL="${withval}"
+ if test "x$ENABLE_DEBUG" = xyes; then
+ as_fn_error $? "You cannot use both --enable-debug and --with-debug-level at the same time." "$LINENO" 5
+ fi
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $DEBUG_LEVEL" >&5
+$as_echo "$DEBUG_LEVEL" >&6; }
+
+if test "x$DEBUG_LEVEL" != xrelease && \
+ test "x$DEBUG_LEVEL" != xfastdebug && \
+ test "x$DEBUG_LEVEL" != xslowdebug; then
+ as_fn_error $? "Allowed debug levels are: release, fastdebug and slowdebug" "$LINENO" 5
+fi
+
+case $DEBUG_LEVEL in
+ release )
+ VARIANT="OPT"
+ FASTDEBUG="false"
+ DEBUG_CLASSFILES="false"
+ BUILD_VARIANT_RELEASE=""
+ ;;
+ fastdebug )
+ VARIANT="DBG"
+ FASTDEBUG="true"
+ DEBUG_CLASSFILES="true"
+ BUILD_VARIANT_RELEASE="-fastdebug"
+ ;;
+ slowdebug )
+ VARIANT="DBG"
+ FASTDEBUG="false"
+ DEBUG_CLASSFILES="true"
+ BUILD_VARIANT_RELEASE="-debug"
+ ;;
+esac
+
+
+
+
+
+
+
+# Source the version numbers
+. $AUTOCONF_DIR/version.numbers
+if test "x$OPENJDK" = "xfalse"; then
+ . $AUTOCONF_DIR/closed.version.numbers
+fi
+# Now set the JDK version, milestone, build number etc.
+
+
+
+
+
+
+
+
+
+
+
+
+COPYRIGHT_YEAR=`date +'%Y'`
+
+
+RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX"
+
+
+if test "x$JDK_UPDATE_VERSION" != x; then
+ JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}"
+else
+ JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}"
+fi
+
+
+if test "x$MILESTONE" != x; then
+ RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}"
+else
+ RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}"
+fi
+
+
+if test "x$JDK_BUILD_NUMBER" != x; then
+ FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}"
+else
+ JDK_BUILD_NUMBER=b00
+ BUILD_DATE=`date '+%Y_%m_%d_%H_%M'`
+ # Avoid [:alnum:] since it depends on the locale.
+ CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'`
+ USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'`
+ FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}"
+fi
+
+COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'`
+
+
+# Test from where we are running configure, in or outside of src root.
+if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then
+ # We are running configure from the src root.
+ # Create a default ./build/host-variant-debuglevel output root.
+ OUTPUT_ROOT="$SRC_ROOT/build/${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}"
+ mkdir -p "$OUTPUT_ROOT"
+ if test ! -d "$OUTPUT_ROOT"; then
+ as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5
+ fi
+else
+ # We are running configure from outside of the src dir.
+ # Then use the current directory as output dir!
+ OUTPUT_ROOT="$CURDIR"
+fi
+
+
+ # Fail with message the path to the output root if var OUTPUT_ROOT contains a path with no spaces in it.
+ # Unless on Windows, where we can rewrite the path.
+ HAS_SPACE=`echo "$OUTPUT_ROOT" | grep " "`
+ if test "x$HAS_SPACE" != x; then
+ if test "x$BUILD_OS" = "xwindows"; then
+ OUTPUT_ROOT=`$CYGPATH -s -m -a "$OUTPUT_ROOT"`
+ OUTPUT_ROOT=`$CYGPATH -u "$OUTPUT_ROOT"`
+ else
+ as_fn_error $? "You cannot have spaces in the path to the output root! \"$OUTPUT_ROOT\"" "$LINENO" 5
+ fi
+ fi
+
+
+# Save the arguments given to us
+echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments
+
+# Check if the VS env variables were setup prior to running configure.
+# If not, then find vcvarsall.bat and run it automatically, and integrate
+# the set env variables into the spec file.
+SETUPDEVENV="# No special vars"
+if test "x$BUILD_OS" = "xwindows"; then
+ # If vcvarsall.bat has been run, then VCINSTALLDIR is set.
+ if test "x$VCINSTALLDIR" != x; then
+ # No further setup is needed. The build will happen from this kind
+ # of shell.
+ SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt."
+ # Make sure to remind you, if you forget to run make from a cygwin bash shell
+ # that is spawned "bash -l" from a VS command prompt.
+ CHECK_FOR_VCINSTALLDIR=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you are running from within a VS command prompt" >&5
+$as_echo_n "checking if you are running from within a VS command prompt... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it.
+ if test "x$VS100COMNTOOLS" != x; then
+ VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat`
+ SEARCH_ROOT="$VS100COMNTOOLS"
+ else
+ VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat`
+ SEARCH_ROOT="$PROGRAMFILES"
+ fi
+ VCPATH=`dirname "$VARSBAT"`
+ VCPATH=`cygpath -w "$VCPATH"`
+ if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5
+$as_echo_n "checking if we can find the VS installation... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5
+ fi
+ case "$LEGACY_HOST_CPU1" in
+ i?86)
+ VARSBAT_ARCH=x86
+ ;;
+ *)
+ VARSBAT_ARCH=$LEGACY_HOST_CPU1
+ ;;
+ esac
+ # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat
+ cd $OUTPUT_ROOT
+ $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH"
+ cd $CURDIR
+ if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can extract the needed env variables" >&5
+$as_echo_n "checking if we can extract the needed env variables... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "Could not succesfully extract the env variables needed for the VS setup. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5
+ fi
+ # Now set all paths and other env variables. This will allow the rest of
+ # the configure script to find and run the compiler in the proper way.
+ . $OUTPUT_ROOT/localdevenv.sh
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5
+$as_echo_n "checking if we can find the VS installation... " >&6; }
+ if test "x$VCINSTALLDIR" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VCINSTALLDIR" >&5
+$as_echo "$VCINSTALLDIR" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "Could not find VS installation. Please install. If you are sure you have installed VS, then please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5
+ fi
+ CHECK_FOR_VCINSTALLDIR=no
+ SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5
+$as_echo_n "checking for msvcr100.dll... " >&6; }
+
+# Check whether --with-msvcr100dll was given.
+if test "${with_msvcr100dll+set}" = set; then :
+ withval=$with_msvcr100dll;
+fi
+
+ if test "x$with_msvcr100dll" != x; then
+ MSVCR100DLL="$with_msvcr100dll"
+ else
+ if test "x$HOST_CPU_BITS" = x64; then
+ MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1`
+ else
+ MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1`
+ if test "x$MSVCR100DLL" = x; then
+ MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1`
+ fi
+ fi
+ fi
+ if test "x$MSVCR100DLL" = x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR100DLL" >&5
+$as_echo "$MSVCR100DLL" >&6; }
+
+ # Fail with message the path to msvcr100.dll if var MSVCR100DLL contains a path with no spaces in it.
+ # Unless on Windows, where we can rewrite the path.
+ HAS_SPACE=`echo "$MSVCR100DLL" | grep " "`
+ if test "x$HAS_SPACE" != x; then
+ if test "x$BUILD_OS" = "xwindows"; then
+ MSVCR100DLL=`$CYGPATH -s -m -a "$MSVCR100DLL"`
+ MSVCR100DLL=`$CYGPATH -u "$MSVCR100DLL"`
+ else
+ as_fn_error $? "You cannot have spaces in the path to msvcr100.dll! \"$MSVCR100DLL\"" "$LINENO" 5
+ fi
+ fi
+
+ fi
+fi
+
+
+
+
+# Most of the probed defines are put into config.h
+ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in"
+
+# The spec.gmk file contains all variables for the make system.
+ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in"
+
+# The generated Makefile knows where the spec.gmk is and where the source is.
+# You can run make from the OUTPUT_ROOT. If you have only
+# one configured host, then you can also run make from the SRC_ROOT,
+# since it will go look for a single spec.gmk file. Or perhaps it
+# should instead make all configured hosts it can find?
+ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in"
+
+
+SPEC=$OUTPUT_ROOT/spec.gmk
+
+OUTPUT_ROOT=$OUTPUT_ROOT
+
+
+# Where are the sources. Any of these can be overridden
+# using --with-override-corba and the likes.
+LANGTOOLS_TOPDIR="$SRC_ROOT/langtools"
+CORBA_TOPDIR="$SRC_ROOT/corba"
+JAXP_TOPDIR="$SRC_ROOT/jaxp"
+JAXWS_TOPDIR="$SRC_ROOT/jaxws"
+HOTSPOT_TOPDIR="$SRC_ROOT/hotspot"
+JDK_TOPDIR="$SRC_ROOT/jdk"
+
+
+
+
+
+
+
+# Check if pkg-config is available.
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+ ac_pt_PKG_CONFIG=$PKG_CONFIG
+ # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $ac_pt_PKG_CONFIG in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_pt_PKG_CONFIG" = x; then
+ PKG_CONFIG=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ PKG_CONFIG=$ac_pt_PKG_CONFIG
+ fi
+else
+ PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+ _pkg_min_version=0.9.0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ PKG_CONFIG=""
+ fi
+
+fi
+
+
+# Check whether --with-builddeps-conf was given.
+if test "${with_builddeps_conf+set}" = set; then :
+ withval=$with_builddeps_conf;
+fi
+
+
+
+# Check whether --with-builddeps-server was given.
+if test "${with_builddeps_server+set}" = set; then :
+ withval=$with_builddeps_server;
+fi
+
+
+
+# Check whether --with-builddeps-dir was given.
+if test "${with_builddeps_dir+set}" = set; then :
+ withval=$with_builddeps_dir;
+else
+ with_builddeps_dir=/localhome/builddeps
+fi
+
+
+
+# Check whether --with-builddeps-group was given.
+if test "${with_builddeps_group+set}" = set; then :
+ withval=$with_builddeps_group;
+fi
+
+
+# Check whether --enable-list-builddeps was given.
+if test "${enable_list_builddeps+set}" = set; then :
+ enableval=$enable_list_builddeps; LIST_BUILDDEPS="${enableval}"
+else
+ LIST_BUILDDEPS='no'
+fi
+
+
+if test "x$LIST_BUILDDEPS" = xyes; then
+ echo
+ echo List of build dependencies known to the configure script,
+ echo that can be used in builddeps.conf files:
+ cat $SRC_ROOT/configure.ac | grep BDEPS_CHECK_MODUL | grep -v configure.ac | cut -f 2 -d ',' | tr -d ' ' | sort
+ echo
+ exit 1
+fi
+
+# If builddeps server or conf file is given. Setup buildeps usage.
+
+
+ if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
+ if test "x$with_builddeps_conf" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5
+$as_echo_n "checking for supplied builddeps configuration file... " >&6; }
+ builddepsfile=$with_builddeps_conf
+ if test -s $builddepsfile; then
+ . $builddepsfile
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5
+$as_echo "loaded!" >&6; }
+ else
+ as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5
+$as_echo_n "checking for builddeps.conf files in sources...... " >&6; }
+ builddepsfile=`mktemp`
+ touch $builddepsfile
+ # Put all found confs into a single file.
+ find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile
+ # Source the file to acquire the variables
+ if test -s $builddepsfile; then
+ . $builddepsfile
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5
+$as_echo "found at least one!" >&6; }
+ else
+ as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5
+ fi
+ fi
+ # Create build and host names that use _ instead of "-" and ".".
+ # This is necessary to use them in variable names.
+ build_var=`echo ${build} | tr '-' '_' | tr '.' '_'`
+ host_var=`echo ${host} | tr '-' '_' | tr '.' '_'`
+ # Extract rewrite information for build and host
+ eval rewritten_build=\${REWRITE_${build_var}}
+ if test "x$rewritten_build" = x; then
+ rewritten_build=${build}
+ echo Build stays the same $rewritten_build
+ else
+ echo Rewriting build for builddeps into $rewritten_build
+ fi
+ eval rewritten_host=\${REWRITE_${host_var}}
+ if test "x$rewritten_host" = x; then
+ rewritten_host=${host}
+ echo Host stays the same $rewritten_host
+ else
+ echo Rewriting host for builddeps into $rewritten_host
+ fi
+ rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'`
+ rewritten_host_var=`echo ${rewritten_host} | tr '-' '_' | tr '.' '_'`
+ fi
+ for ac_prog in 7z unzip
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$BDEPS_UNZIP"; then
+ ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_BDEPS_UNZIP="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP
+if test -n "$BDEPS_UNZIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5
+$as_echo "$BDEPS_UNZIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$BDEPS_UNZIP" && break
+done
+
+ if test "x$BDEPS_UNZIP" = x7z; then
+ BDEPS_UNZIP="7z x"
+ fi
+
+ for ac_prog in wget lftp ftp
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$BDEPS_FTP"; then
+ ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_BDEPS_FTP="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+BDEPS_FTP=$ac_cv_prog_BDEPS_FTP
+if test -n "$BDEPS_FTP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5
+$as_echo "$BDEPS_FTP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$BDEPS_FTP" && break
+done
+
+
+
+###############################################################################
+#
+# Configure the development tool paths and potential sysroot.
+#
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+DEVKIT=
+SYS_ROOT=/
+
+
+# The option used to specify the target .o,.a or .so file.
+# When compiling, how to specify the to be created object file.
+CC_OUT_OPTION='-o$(SPACE)'
+# When linking, how to specify the to be created executable.
+EXE_OUT_OPTION='-o$(SPACE)'
+# When linking, how to specify the to be created dynamically linkable library.
+LD_OUT_OPTION='-o$(SPACE)'
+# When archiving, how to specify the to be create static archive for object files.
+AR_OUT_OPTION='rcs$(SPACE)'
+
+
+
+
+
+# If --build AND --host is set, then the configure script will find any
+# cross compilation tools in the PATH. Cross compilation tools
+# follows the cross compilation standard where they are prefixed with ${host}.
+# For example the binary i686-sun-solaris2.10-gcc
+# will cross compile for i686-sun-solaris2.10
+# If neither of build and host is not set, then build=host and the
+# default compiler found in the path will be used.
+# Setting only --host, does not seem to be really supported.
+# Please set both --build and --host if you want to cross compile.
+
+DEFINE_CROSS_COMPILE_ARCH=""
+HOSTCC=""
+HOSTCXX=""
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if this is a cross compile" >&5
+$as_echo_n "checking if this is a cross compile... " >&6; }
+if test "x$build_var" != "x$host_var"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, from $build_var to $host_var" >&5
+$as_echo "yes, from $build_var to $host_var" >&6; }
+ # We have detected a cross compile!
+ DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_HOST_CPU1"
+ # Now we to find a C/C++ compiler that can build executables for the build
+ # platform. We can't use the AC_PROG_CC macro, since it can only be used
+ # once.
+ for ac_prog in cl cc gcc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_HOSTCC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $HOSTCC in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_HOSTCC="$HOSTCC" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_HOSTCC="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+HOSTCC=$ac_cv_path_HOSTCC
+if test -n "$HOSTCC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCC" >&5
+$as_echo "$HOSTCC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$HOSTCC" && break
+done
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$HOSTCC"
+ car="${tmp%% *}"
+ tmp="$HOSTCC EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ HOSTCC="$car ${cdr% *}"
+ else
+ HOSTCC="$car"
+ fi
+
+ for ac_prog in cl CC g++
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_HOSTCXX+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $HOSTCXX in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_HOSTCXX="$HOSTCXX" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_HOSTCXX="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+HOSTCXX=$ac_cv_path_HOSTCXX
+if test -n "$HOSTCXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HOSTCXX" >&5
+$as_echo "$HOSTCXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$HOSTCXX" && break
+done
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$HOSTCXX"
+ car="${tmp%% *}"
+ tmp="$HOSTCXX EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ HOSTCXX="$car ${cdr% *}"
+ else
+ HOSTCXX="$car"
+ fi
+
+ # Building for the build platform should be easy. Therefore
+ # we do not need any linkers or assemblers etc.
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+# You can force the sys-root if the sys-root encoded into the cross compiler tools
+# is not correct.
+
+# Check whether --with-sys-root was given.
+if test "${with_sys_root+set}" = set; then :
+ withval=$with_sys_root;
+fi
+
+
+if test "x$with_sys_root" != x; then
+ SYS_ROOT=$with_sys_root
+fi
+
+# If a devkit is found on the builddeps server, then prepend its path to the
+# PATH variable. If there are cross compilers available in the devkit, these
+# will be found by AC_PROG_CC et al.
+
+
+ if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
+ # Source the builddeps file again, to make sure it uses the latest variables!
+ . $builddepsfile
+ # Look for a host and build machine specific resource!
+ eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}}
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a host specific resource
+ eval resource=\${builddep_devkit_HOST_${rewritten_host_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a build specific resource
+ eval resource=\${builddep_devkit_BUILD_${rewritten_build_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a generic resource
+ # (The devkit comes from M4 and not the shell, thus no need for eval here.)
+ resource=${builddep_devkit}
+ fi
+ if test "x$resource" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for devkit" >&5
+$as_echo "$as_me: Using builddeps $resource for devkit" >&6;}
+ # If the resource in the builddeps.conf file is an existing directory,
+ # for example /java/linux/cups
+ if test -d ${resource}; then
+ depdir=${resource}
+ else
+
+# devkit is for example mymodule
+# $resource is for example libs/general/libmymod_1_2_3.zip
+# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps
+# $with_builddeps_dir is for example /localhome/builddeps
+# depdir is the name of the variable into which we store the depdir, eg MYMOD
+# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and
+# unzip into the directory: /localhome/builddeps/libmymod_1_2_3
+ filename=`basename $resource`
+ filebase=`echo $filename | sed 's/\.[^\.]*$//'`
+ filebase=${filename%%.*}
+ extension=${filename#*.}
+ installdir=$with_builddeps_dir/$filebase
+ if test ! -f $installdir/$filename.unpacked; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&5
+$as_echo "$as_me: Downloading build dependency devkit from $with_builddeps_server/$resource and installing into $installdir" >&6;}
+ if test ! -d $installdir; then
+ mkdir -p $installdir
+ fi
+ if test ! -d $installdir; then
+ as_fn_error $? "Could not create directory $installdir" "$LINENO" 5
+ fi
+ tmpfile=`mktemp $installdir/devkit.XXXXXXXXX`
+ touch $tmpfile
+ if test ! -f $tmpfile; then
+ as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5
+ fi
+
+ # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip
+ # $tmpfile is the local file name for the downloaded file.
+ VALID_TOOL=no
+ if test "x$BDEPS_FTP" = xwget; then
+ VALID_TOOL=yes
+ wget -O $tmpfile $with_builddeps_server/$resource
+ fi
+ if test "x$BDEPS_FTP" = xlftp; then
+ VALID_TOOL=yes
+ lftp -c "get $with_builddeps_server/$resource -o $tmpfile"
+ fi
+ if test "x$BDEPS_FTP" = xftp; then
+ VALID_TOOL=yes
+ FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'`
+ FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'`
+ FTPUSERPWD=${FTPSERVER%%@*}
+ if test "x$FTPSERVER" != "x$FTPUSERPWD"; then
+ FTPUSER=${userpwd%%:*}
+ FTPPWD=${userpwd#*@}
+ FTPSERVER=${FTPSERVER#*@}
+ else
+ FTPUSER=ftp
+ FTPPWD=ftp
+ fi
+ # the "pass" command does not work on some
+ # ftp clients (read ftp.exe) but if it works,
+ # passive mode is better!
+ (\
+ echo "user $FTPUSER $FTPPWD" ;\
+ echo "pass" ;\
+ echo "bin" ;\
+ echo "get $FTPPATH $tmpfile" ;\
+ ) | ftp -in $FTPSERVER
+ fi
+ if test "x$VALID_TOOL" != xyes; then
+ as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5
+ fi
+
+ mv $tmpfile $installdir/$filename
+ if test ! -s $installdir/$filename; then
+ as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5
+ fi
+ case "$extension" in
+ zip) echo "Unzipping $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked)
+ ;;
+ tar.gz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ tgz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5
+ ;;
+ esac
+ fi
+ if test -f $installdir/$filename.unpacked; then
+ depdir=$installdir
+ fi
+
+ fi
+ # Source the builddeps file again, because in the previous command, the depdir
+ # was updated to point at the current build dependency install directory.
+ . $builddepsfile
+ # Now extract variables from the builddeps.conf files.
+ theroot=${builddep_devkit_ROOT}
+ thecflags=${builddep_devkit_CFLAGS}
+ thelibs=${builddep_devkit_LIBS}
+ if test "x$depdir" = x; then
+ as_fn_error $? "Could not download build dependency devkit" "$LINENO" 5
+ fi
+ DEVKIT=$depdir
+ if test "x$theroot" != x; then
+ DEVKIT="$theroot"
+ fi
+ if test "x$thecflags" != x; then
+ DEVKIT_CFLAGS="$thecflags"
+ fi
+ if test "x$thelibs" != x; then
+ DEVKIT_LIBS="$thelibs"
+ fi
+ # Found devkit
+ PATH="$DEVKIT/bin:$PATH"
+ SYS_ROOT="$DEVKIT/${rewritten_host}/sys-root"
+ if test "x$x_includes" = "xNONE"; then
+ x_includes="$SYS_ROOT/usr/include/X11"
+ fi
+ if test "x$x_libraries" = "xNONE"; then
+ x_libraries="$SYS_ROOT/usr/lib"
+ fi
+
+
+ fi
+
+ fi
+
+
+if test "x$SYS_ROOT" != "x/" ; then
+ CFLAGS="--sysroot=$SYS_ROOT $CFLAGS"
+ CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS"
+ OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS"
+ OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS"
+ CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS"
+ LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS"
+fi
+
+# Store the CFLAGS etal passed to the configure script.
+ORG_CFLAGS="$CFLAGS"
+ORG_CXXFLAGS="$CXXFLAGS"
+ORG_OBJCFLAGS="$OBJCFLAGS"
+
+# gcc is almost always present, but on Windows we
+# prefer cl.exe and on Solaris we prefer CC.
+# Thus test for them in this order.
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl cc gcc
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl cc gcc
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5 ; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5 ; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5 ; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if test "${ac_cv_objext+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+#include
+#include
+#include
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+if test "x$CC" = x; then
+ help_on_build_dependency devkit
+ as_fn_error $? "Could not find a compiler. $HELP_MSG" "$LINENO" 5
+fi
+if test "x$CC" = xcc && test "x$BUILD_OS" = xmacosx; then
+ # Do not use cc on MacOSX use gcc instead.
+ CC="gcc"
+fi
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$CC"
+ car="${tmp%% *}"
+ tmp="$CC EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ CC="$car ${cdr% *}"
+ else
+ CC="$car"
+ fi
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+ if test -n "$CCC"; then
+ CXX=$CCC
+ else
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl CC g++
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_CXX+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in cl CC g++
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CXX" && break
+done
+
+ if test "x$ac_ct_CXX" = x; then
+ CXX="g++"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ CXX=$ac_ct_CXX
+ fi
+fi
+
+ fi
+fi
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GXX=yes
+else
+ GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if test "${ac_cv_prog_cxx_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ ac_cv_prog_cxx_g=no
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+else
+ CXXFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+ CXXFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_prog_cxx_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+if test "x$CXX" = xCC && test "x$BUILD_OS" = xmacosx; then
+ # The found CC, even though it seems to be a g++ derivate, cannot compile
+ # c++ code. Override.
+ CXX="g++"
+fi
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$CXX"
+ car="${tmp%% *}"
+ tmp="$CXX EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ CXX="$car ${cdr% *}"
+ else
+ CXX="$car"
+ fi
+
+
+if test "x$CXX" = x || test "x$CC" = x; then
+ help_on_build_dependency devkit
+ as_fn_error $? "Could not find the needed compilers! $HELP_MSG " "$LINENO" 5
+fi
+
+if test "x$BUILD_OS" != xwindows; then
+ ac_ext=m
+ac_cpp='$OBJCPP $CPPFLAGS'
+ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$OBJC -o conftest$ac_exeext $OBJCFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_objc_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in gcc objcc objc cc CC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_OBJC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$OBJC"; then
+ ac_cv_prog_OBJC="$OBJC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_OBJC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+OBJC=$ac_cv_prog_OBJC
+if test -n "$OBJC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJC" >&5
+$as_echo "$OBJC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$OBJC" && break
+ done
+fi
+if test -z "$OBJC"; then
+ ac_ct_OBJC=$OBJC
+ for ac_prog in gcc objcc objc cc CC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_OBJC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_OBJC"; then
+ ac_cv_prog_ac_ct_OBJC="$ac_ct_OBJC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_OBJC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OBJC=$ac_cv_prog_ac_ct_OBJC
+if test -n "$ac_ct_OBJC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJC" >&5
+$as_echo "$ac_ct_OBJC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_OBJC" && break
+done
+
+ if test "x$ac_ct_OBJC" = x; then
+ OBJC="gcc"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ OBJC=$ac_ct_OBJC
+ fi
+fi
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for Objective C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Objective C compiler" >&5
+$as_echo_n "checking whether we are using the GNU Objective C compiler... " >&6; }
+if test "${ac_cv_objc_compiler_gnu+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_objc_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_objc_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objc_compiler_gnu" >&5
+$as_echo "$ac_cv_objc_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GOBJC=yes
+else
+ GOBJC=
+fi
+ac_test_OBJCFLAGS=${OBJCFLAGS+set}
+ac_save_OBJCFLAGS=$OBJCFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $OBJC accepts -g" >&5
+$as_echo_n "checking whether $OBJC accepts -g... " >&6; }
+if test "${ac_cv_prog_objc_g+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_objc_werror_flag=$ac_objc_werror_flag
+ ac_objc_werror_flag=yes
+ ac_cv_prog_objc_g=no
+ OBJCFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_objc_try_compile "$LINENO"; then :
+ ac_cv_prog_objc_g=yes
+else
+ OBJCFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_objc_try_compile "$LINENO"; then :
+
+else
+ ac_objc_werror_flag=$ac_save_objc_werror_flag
+ OBJCFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_objc_try_compile "$LINENO"; then :
+ ac_cv_prog_objc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_objc_werror_flag=$ac_save_objc_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_objc_g" >&5
+$as_echo "$ac_cv_prog_objc_g" >&6; }
+if test "$ac_test_OBJCFLAGS" = set; then
+ OBJCFLAGS=$ac_save_OBJCFLAGS
+elif test $ac_cv_prog_objc_g = yes; then
+ if test "$GOBJC" = yes; then
+ OBJCFLAGS="-g -O2"
+ else
+ OBJCFLAGS="-g"
+ fi
+else
+ if test "$GOBJC" = yes; then
+ OBJCFLAGS="-O2"
+ else
+ OBJCFLAGS=
+ fi
+fi
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$OBJC"
+ car="${tmp%% *}"
+ tmp="$OBJC EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ OBJC="$car ${cdr% *}"
+ else
+ OBJC="$car"
+ fi
+
+else
+ OBJC=
+fi
+
+# Restore the flags to the user specified values.
+# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2"
+CFLAGS="$ORG_CFLAGS"
+CXXFLAGS="$ORG_CXXFLAGS"
+OBJCFLAGS="$ORG_OBJCFLAGS"
+
+# If we are not cross compiling, use the same compilers for
+# building the build platform executables.
+if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then
+ HOSTCC="$CC"
+ HOSTCXX="$CXX"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ld; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_LD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LD"; then
+ ac_cv_prog_LD="$LD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_LD="${ac_tool_prefix}ld"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LD=$ac_cv_prog_LD
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LD"; then
+ ac_ct_LD=$LD
+ # Extract the first word of "ld", so it can be a program name with args.
+set dummy ld; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_LD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LD"; then
+ ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_LD="ld"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LD=$ac_cv_prog_ac_ct_LD
+if test -n "$ac_ct_LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5
+$as_echo "$ac_ct_LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LD" = x; then
+ LD=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ LD=$ac_ct_LD
+ fi
+else
+ LD="$ac_cv_prog_LD"
+fi
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$LD"
+ car="${tmp%% *}"
+ tmp="$LD EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ LD="$car ${cdr% *}"
+ else
+ LD="$car"
+ fi
+
+LDEXE="$LD"
+LDCXX="$LD"
+LDEXECXX="$LD"
+# LDEXE is the linker to use, when creating executables.
+
+# Linking C++ libraries.
+
+# Linking C++ executables.
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_AR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_AR="ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$AR"
+ car="${tmp%% *}"
+ tmp="$AR EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ AR="$car ${cdr% *}"
+ else
+ AR="$car"
+ fi
+
+if test "x$BUILD_OS" = xmacosx; then
+ ARFLAGS="-r"
+else
+ ARFLAGS=""
+fi
+
+
+COMPILER_NAME=gcc
+COMPILER_TYPE=CC
+if test "x$BUILD_OS" = xwindows; then :
+
+ # For now, assume that we are always compiling using cl.exe.
+ CC_OUT_OPTION=-Fo
+ EXE_OUT_OPTION=-Fe
+ LD_OUT_OPTION=-out:
+ AR_OUT_OPTION=-out:
+ # On Windows, reject /usr/bin/link, which is a cygwin
+ # program for something completely different.
+ # Extract the first word of "link", so it can be a program name with args.
+set dummy link; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_WINLD+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$WINLD"; then
+ ac_cv_prog_WINLD="$WINLD" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/link"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_WINLD="link"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_WINLD
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set WINLD to just the basename; use the full file name.
+ shift
+ ac_cv_prog_WINLD="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+WINLD=$ac_cv_prog_WINLD
+if test -n "$WINLD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINLD" >&5
+$as_echo "$WINLD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ # Since we must ignore the first found link, WINLD will contain
+ # the full path to the link.exe program.
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$WINLD"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$WINLD"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ WINLD="$tmp"
+
+ LD="$WINLD"
+ # However creating executables can only be done with cl.exe.
+ LDEXE="$CC"
+ LDCXX="$WINLD"
+ LDEXECXX="$CC"
+
+ # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_MT+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$MT"; then
+ ac_cv_prog_MT="$MT" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/mt"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_MT="mt"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_MT
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set MT to just the basename; use the full file name.
+ shift
+ ac_cv_prog_MT="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+MT=$ac_cv_prog_MT
+if test -n "$MT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MT" >&5
+$as_echo "$MT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$MT"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$MT"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ MT="$tmp"
+
+ # The resource compiler
+ # Extract the first word of "rc", so it can be a program name with args.
+set dummy rc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_RC+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RC"; then
+ ac_cv_prog_RC="$RC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/bin/rc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_RC="rc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_RC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set RC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_RC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+RC=$ac_cv_prog_RC
+if test -n "$RC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5
+$as_echo "$RC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$RC"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$RC"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ RC="$tmp"
+
+
+ RC_FLAGS="/l 0x409 /r"
+ if test "x$VARIANT" = xOPT; then :
+
+ RC_FLAGS="$RC_FLAGS -d NDEBUG"
+
+fi
+ JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION
+ if test "x$JDK_UPDATE_VERSION" = x; then :
+
+ JDK_UPDATE_VERSION_NOTNULL=0
+
+fi
+ RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\""
+
+ # lib.exe is used to create static libraries.
+ # Extract the first word of "lib", so it can be a program name with args.
+set dummy lib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_WINAR+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$WINAR"; then
+ ac_cv_prog_WINAR="$WINAR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_WINAR="lib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+WINAR=$ac_cv_prog_WINAR
+if test -n "$WINAR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINAR" >&5
+$as_echo "$WINAR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$WINAR"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$WINAR"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ WINAR="$tmp"
+
+ AR="$WINAR"
+ ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT"
+
+ # Extract the first word of "dumpbin", so it can be a program name with args.
+set dummy dumpbin; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DUMPBIN"; then
+ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_DUMPBIN="dumpbin"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$DUMPBIN"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$DUMPBIN"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ DUMPBIN="$tmp"
+
+
+ COMPILER_TYPE=CL
+ CFLAGS="$CFLAGS -nologo"
+ LDFLAGS="$LDFLAGS -nologo -dll -opt:ref -incremental:no "
+ if test "x$LEGACY_HOST_CPU1" = xi586; then
+ LDFLAGS="$LDFLAGS -safeseh"
+ fi
+ if test "x$DEBUG_LEVEL" != xrelease; then
+ LDFLAGS="$LDFLAGS -debug"
+ fi
+
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if test "${ac_cv_prog_CPP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer to if __STDC__ is defined, since
+ # exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include
+#else
+# include
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer to if __STDC__ is defined, since
+ # exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include
+#else
+# include
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$CPP"
+ car="${tmp%% *}"
+ tmp="$CPP EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ CPP="$car ${cdr% *}"
+ else
+ CPP="$car"
+ fi
+
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer to if __STDC__ is defined, since
+ # exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include
+#else
+# include
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer to if __STDC__ is defined, since
+ # exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include
+#else
+# include
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5 ; }
+fi
+
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$CXXCPP"
+ car="${tmp%% *}"
+ tmp="$CXXCPP EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ CXXCPP="$car ${cdr% *}"
+ else
+ CXXCPP="$car"
+ fi
+
+
+# Find the right assembler.
+if test "x$BUILD_OS" = xsolaris; then
+ # Extract the first word of "as", so it can be a program name with args.
+set dummy as; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_AS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $AS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_AS="$AS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_AS="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+AS=$ac_cv_path_AS
+if test -n "$AS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
+$as_echo "$AS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$AS"
+ car="${tmp%% *}"
+ tmp="$AS EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ AS="$car ${cdr% *}"
+ else
+ AS="$car"
+ fi
+
+ ASFLAGS=" "
+else
+ AS="$CC -c"
+ ASFLAGS=" "
+fi
+
+
+
+if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = macosx; then
+ # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned.
+ # While waiting for a better solution, the current workaround is to use -mstackrealign.
+ CFLAGS="$CFLAGS -mstackrealign"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if 32-bit compiler supports -mstackrealign" >&5
+$as_echo_n "checking if 32-bit compiler supports -mstackrealign... " >&6; }
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main() { return 0; }
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ as_fn_error $? "The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path." "$LINENO" 5
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+
+if test "x$BUILD_OS" = xsolaris; then
+ # Extract the first word of "nm", so it can be a program name with args.
+set dummy nm; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_NM+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $NM in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_NM="$NM" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_NM="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+NM=$ac_cv_path_NM
+if test -n "$NM"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
+$as_echo "$NM" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$NM"
+ car="${tmp%% *}"
+ tmp="$NM EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ NM="$car ${cdr% *}"
+ else
+ NM="$car"
+ fi
+
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $STRIP in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_STRIP="$STRIP" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_STRIP="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+STRIP=$ac_cv_path_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$STRIP"
+ car="${tmp%% *}"
+ tmp="$STRIP EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ STRIP="$car ${cdr% *}"
+ else
+ STRIP="$car"
+ fi
+
+ # Extract the first word of "mcs", so it can be a program name with args.
+set dummy mcs; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_MCS+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $MCS in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_MCS="$MCS" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_MCS="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+MCS=$ac_cv_path_MCS
+if test -n "$MCS"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MCS" >&5
+$as_echo "$MCS" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$MCS"
+ car="${tmp%% *}"
+ tmp="$MCS EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ MCS="$car ${cdr% *}"
+ else
+ MCS="$car"
+ fi
+
+else
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nm; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_NM+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ ac_cv_prog_NM="$NM" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_NM="${ac_tool_prefix}nm"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NM=$ac_cv_prog_NM
+if test -n "$NM"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
+$as_echo "$NM" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NM"; then
+ ac_ct_NM=$NM
+ # Extract the first word of "nm", so it can be a program name with args.
+set dummy nm; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_NM+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NM"; then
+ ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_NM="nm"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NM=$ac_cv_prog_ac_ct_NM
+if test -n "$ac_ct_NM"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5
+$as_echo "$ac_ct_NM" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NM" = x; then
+ NM=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ NM=$ac_ct_NM
+ fi
+else
+ NM="$ac_cv_prog_NM"
+fi
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$NM"
+ car="${tmp%% *}"
+ tmp="$NM EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ NM="$car ${cdr% *}"
+ else
+ NM="$car"
+ fi
+
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="$STRIP"
+ car="${tmp%% *}"
+ tmp="$STRIP EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$car"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$car"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ car="$tmp"
+
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ STRIP="$car ${cdr% *}"
+ else
+ STRIP="$car"
+ fi
+
+fi
+
+# When using cygwin, we need a wrapper binary that renames
+# /cygdrive/c/ arguments into c:/ arguments and peeks into
+# @files and rewrites these too! This wrapper binary is
+# called uncygdrive.exe.
+UNCYGDRIVE=
+if test "x$BUILD_OS" = xwindows; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive can be created" >&5
+$as_echo_n "checking if uncygdrive can be created... " >&6; }
+ UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c`
+ rm -f $OUTPUT_ROOT/uncygdrive*
+ UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe`
+ cd $OUTPUT_ROOT
+ $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1
+ cd $CURDIR
+
+ if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ cat $OUTPUT_ROOT/uncygdrive1.log
+ as_fn_error $? "Could not create $OUTPUT_ROOT/uncygdrive.exe" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNCYGDRIVE" >&5
+$as_echo "$UNCYGDRIVE" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive.exe works" >&5
+$as_echo_n "checking if uncygdrive.exe works... " >&6; }
+ cd $OUTPUT_ROOT
+ $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1
+ cd $CURDIR
+ if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ cat $OUTPUT_ROOT/uncygdrive2.log
+ as_fn_error $? "Uncygdrive did not work!" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj
+fi
+
+
+
+
+ # Check whether --enable-ccache was given.
+if test "${enable_ccache+set}" = set; then :
+ enableval=$enable_ccache; ENABLE_CCACHE=${enable_ccache}
+else
+ ENABLE_CCACHE=yes
+fi
+
+ if test "x$ENABLE_CCACHE" = xyes; then
+ # Extract the first word of "ccache", so it can be a program name with args.
+set dummy ccache; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_CCACHE+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $CCACHE in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CCACHE="$CCACHE" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_CCACHE="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+CCACHE=$ac_cv_path_CCACHE
+if test -n "$CCACHE"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CCACHE" >&5
+$as_echo "$CCACHE" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ccache" >&5
+$as_echo_n "checking for ccache... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: explicitly disabled" >&5
+$as_echo "explicitly disabled" >&6; }
+ CCACHE=
+ fi
+
+
+
+# Check whether --with-ccache-dir was given.
+if test "${with_ccache_dir+set}" = set; then :
+ withval=$with_ccache_dir;
+fi
+
+
+ if test "x$with_ccache_dir" != x; then
+ # When using a non home ccache directory, assume the use is to share ccache files
+ # with other users. Thus change the umask.
+ SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002"
+ fi
+ CCACHE_FOUND=""
+ if test "x$CCACHE" != x; then
+
+ if test "x$CCACHE" != x; then
+ CCACHE_FOUND="true"
+ # Only use ccache if it is 3.1.4 or later, which supports
+ # precompiled headers.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if ccache supports precompiled headers" >&5
+$as_echo_n "checking if ccache supports precompiled headers... " >&6; }
+ HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.[456789]) 2> /dev/null`
+ if test "x$HAS_GOOD_CCACHE" = x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccache" >&5
+$as_echo "no, disabling ccache" >&6; }
+ CCACHE=
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C-compiler supports ccache precompiled headers" >&5
+$as_echo_n "checking if C-compiler supports ccache precompiled headers... " >&6; }
+ PUSHED_FLAGS="$CXXFLAGS"
+ CXXFLAGS="-fpch-preprocess $CXXFLAGS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ CC_KNOWS_CCACHE_TRICK=yes
+else
+ CC_KNOWS_CCACHE_TRICK=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ CXXFLAGS="$PUSHED_FLAGS"
+ if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, disabling ccaching of precompiled headers" >&5
+$as_echo "no, disabling ccaching of precompiled headers" >&6; }
+ CCACHE=
+ fi
+ fi
+ fi
+
+ if test "x$CCACHE" != x; then
+ CCACHE_SLOPPINESS=time_macros
+ CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE"
+ CCACHE_FLAGS=-fpch-preprocess
+
+ if test "x$SET_CCACHE_DIR" != x; then
+ mkdir -p $CCACHE_DIR > /dev/null 2>&1
+ chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1
+ fi
+ fi
+
+ fi
+
+
+# Used on GNU/Linux systems, can be empty...
+#AC_PATH_PROG(ELFDUMP, elfdump)
+
+# Setup default logging of stdout and stderr to build.log in the output root.
+BUILD_LOG='$(OUTPUT_ROOT)/build.log'
+BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)'
+
+
+
+###############################################################################
+#
+# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code.
+# (The JVM can use 32 or 64 bit Java pointers but that decision
+# is made at runtime.)
+#
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
+$as_echo_n "checking for ANSI C header files... " >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+#include
+#include
+#include
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_header_stdc=yes
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then :
+ :
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+#include
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ return 2;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_run "$LINENO"; then :
+
+else
+ ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
+$as_echo "$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+$as_echo "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int *" >&5
+$as_echo_n "checking size of int *... " >&6; }
+if test "${ac_cv_sizeof_int_p+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ if ac_fn_cxx_compute_int "$LINENO" "(long int) (sizeof (int *))" "ac_cv_sizeof_int_p" "$ac_includes_default"; then :
+
+else
+ if test "$ac_cv_type_int_p" = yes; then
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (int *)
+See \`config.log' for more details" "$LINENO" 5 ; }
+ else
+ ac_cv_sizeof_int_p=0
+ fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int_p" >&5
+$as_echo "$ac_cv_sizeof_int_p" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT_P $ac_cv_sizeof_int_p
+_ACEOF
+
+
+if test "x$ac_cv_sizeof_int_p" = x0; then
+ # The test failed, lets pick the assumed value.
+ ARCH_DATA_MODEL=$HOST_CPU_BITS
+else
+ ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p`
+fi
+
+if test "x$ARCH_DATA_MODEL" = x64; then
+ A_LP64="LP64:="
+ ADD_LP64="-D_LP64=1"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for host address size" >&5
+$as_echo_n "checking for host address size... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ARCH_DATA_MODEL bits" >&5
+$as_echo "$ARCH_DATA_MODEL bits" >&6; }
+LP64=$A_LP64
+
+
+
+if test "x$ARCH_DATA_MODEL" != "x$HOST_CPU_BITS"; then
+ as_fn_error $? "The tested number of bits in the host ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the host ($HOST_CPU_BITS)" "$LINENO" 5
+fi
+
+###############################################################################
+#
+# Can the C/C++ compiler use precompiled headers?
+#
+# Check whether --enable-precompiled-headers was given.
+if test "${enable_precompiled_headers+set}" = set; then :
+ enableval=$enable_precompiled_headers; ENABLE_PRECOMPH=${enable_precompiled-headers}
+else
+ ENABLE_PRECOMPH=yes
+fi
+
+
+USE_PRECOMPILED_HEADER=1
+if test "x$ENABLE_PRECOMPH" = xno; then
+ USE_PRECOMPILED_HEADER=0
+fi
+
+if test "x$ENABLE_PRECOMPH" = xyes; then
+ # Check that the compiler actually supports precomp headers.
+ if test "x$GCC" = xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking that precompiled headers work" >&5
+$as_echo_n "checking that precompiled headers work... " >&6; }
+ echo "int alfa();" > conftest.h
+ $CXX -x c++-header conftest.h -o conftest.hpp.gch
+ if test ! -f conftest.hpp.gch; then
+ echo Precompiled header is not working!
+ USE_PRECOMPILED_HEADER=0
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ fi
+ rm -f conftest.h
+ fi
+fi
+
+
+
+###############################################################################
+#
+# How to compile shared libraries.
+#
+
+if test "x$GCC" = xyes; then
+ COMPILER_NAME=gcc
+ PICFLAG="-fPIC"
+ LIBRARY_PREFIX=lib
+ SHARED_LIBRARY='lib$1.so'
+ STATIC_LIBRARY='lib$1.a'
+ SHARED_LIBRARY_FLAGS="-shared"
+ SHARED_LIBRARY_SUFFIX='.so'
+ STATIC_LIBRARY_SUFFIX='.a'
+ OBJ_SUFFIX='.o'
+ EXE_SUFFIX=''
+ SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1'
+ SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$(JDK_TOPDIR)/$1'
+ SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1'
+ LD="$CC"
+ LDEXE="$CC"
+ LDCXX="$CXX"
+ LDEXECXX="$CXX"
+
+ # Linking is different on MacOSX
+ if test "x$BUILD_OS" = xmacosx; then
+ # Might change in the future to clang.
+ COMPILER_NAME=gcc
+ SHARED_LIBRARY='lib$1.dylib'
+ SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG"
+ SHARED_LIBRARY_SUFFIX='.dylib'
+ EXE_SUFFIX=''
+ SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1'
+ SET_SHARED_LIBRARY_MAPFILE=''
+ SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.'
+ fi
+else
+ if test "x$BUILD_OS" = xsolaris; then
+ # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler
+ COMPILER_NAME=ossc
+ PICFLAG="-KPIC"
+ LIBRARY_PREFIX=lib
+ SHARED_LIBRARY='lib$1.so'
+ STATIC_LIBRARY='lib$1.a'
+ SHARED_LIBRARY_FLAGS="-G"
+ SHARED_LIBRARY_SUFFIX='.so'
+ STATIC_LIBRARY_SUFFIX='.a'
+ OBJ_SUFFIX='.o'
+ EXE_SUFFIX=''
+ SET_SHARED_LIBRARY_NAME=''
+ SET_SHARED_LIBRARY_MAPFILE='-M $(JDK_TOPDIR)/$1'
+ SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1'
+ CFLAGS_JDKLIB_EXTRA='-xstrconst -D__solaris__'
+ fi
+ if test "x$BUILD_OS" = xwindows; then
+ # If it is not gcc, then assume it is the MS Visual Studio compiler
+ COMPILER_NAME=cl
+ PICFLAG=""
+ LIBRARY_PREFIX=
+ SHARED_LIBRARY='$1.dll'
+ STATIC_LIBRARY='$1.lib'
+ SHARED_LIBRARY_FLAGS="-LD"
+ SHARED_LIBRARY_SUFFIX='.dll'
+ STATIC_LIBRARY_SUFFIX='.lib'
+ OBJ_SUFFIX='.obj'
+ EXE_SUFFIX='.exe'
+ SET_SHARED_LIBRARY_NAME=''
+ SET_SHARED_LIBRARY_MAPFILE=''
+ SET_SHARED_LIBRARY_ORIGIN=''
+ fi
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+# The (cross) compiler is now configured, we can now test capabilities
+# of the host platform.
+
+###############################################################################
+#
+# Is the host little of big endian?
+#
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if test "${ac_cv_c_bigendian+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_c_bigendian=unknown
+ # See if we're dealing with a universal compiler.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifndef __APPLE_CC__
+ not a universal capable compiler
+ #endif
+ typedef int dummy;
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+ # Check for potential -arch flags. It is not universal unless
+ # there are at least two -arch flags with different values.
+ ac_arch=
+ ac_prev=
+ for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+ if test -n "$ac_prev"; then
+ case $ac_word in
+ i?86 | x86_64 | ppc | ppc64)
+ if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+ ac_arch=$ac_word
+ else
+ ac_cv_c_bigendian=universal
+ break
+ fi
+ ;;
+ esac
+ ac_prev=
+ elif test "x$ac_word" = "x-arch"; then
+ ac_prev=arch
+ fi
+ done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if sys/param.h defines the BYTE_ORDER macro.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+ #include
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+ && LITTLE_ENDIAN)
+ bogus endian macros
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ # It does; now see whether it defined to BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+ #include
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_c_bigendian=yes
+else
+ ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+ bogus endian macros
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ # It does; now see whether it defined to _BIG_ENDIAN or not.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+ not big endian
+ #endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ ac_cv_c_bigendian=yes
+else
+ ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ fi
+ if test $ac_cv_c_bigendian = unknown; then
+ # Compile a test program.
+ if test "$cross_compiling" = yes; then :
+ # Try to guess by grepping values from an object file.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+short int ascii_mm[] =
+ { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+ short int ascii_ii[] =
+ { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+ int use_ascii (int i) {
+ return ascii_mm[i] + ascii_ii[i];
+ }
+ short int ebcdic_ii[] =
+ { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+ short int ebcdic_mm[] =
+ { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+ int use_ebcdic (int i) {
+ return ebcdic_mm[i] + ebcdic_ii[i];
+ }
+ extern int foo;
+
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+ if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+ ac_cv_c_bigendian=yes
+ fi
+ if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+ if test "$ac_cv_c_bigendian" = unknown; then
+ ac_cv_c_bigendian=no
+ else
+ # finding both strings is unlikely to happen, but who knows?
+ ac_cv_c_bigendian=unknown
+ fi
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+$ac_includes_default
+int
+main ()
+{
+
+ /* Are we little or big endian? From Harbison&Steele. */
+ union
+ {
+ long int l;
+ char c[sizeof (long int)];
+ } u;
+ u.l = 1;
+ return u.c[sizeof (long int) - 1] == 1;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_run "$LINENO"; then :
+ ac_cv_c_bigendian=no
+else
+ ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+ yes)
+ ENDIAN="big";; #(
+ no)
+ ENDIAN="little" ;; #(
+ universal)
+ ENDIAN="universal"
+ ;; #(
+ *)
+ ENDIAN="unknown" ;;
+ esac
+
+
+if test "x$ENDIAN" = xuniversal; then
+ as_fn_error $? "It seems like someone needs to decide how we are to deal with universal binaries on the MacOSX?" "$LINENO" 5
+fi
+if test "x$ENDIAN" = xunknown; then
+ ENDIAN="$HOST_CPU_ENDIAN"
+fi
+if test "x$ENDIAN" != "x$HOST_CPU_ENDIAN"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)" >&5
+$as_echo "$as_me: WARNING: The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)" >&2;}
+ ENDIAN="$HOST_CPU_ENDIAN"
+fi
+
+
+###############################################################################
+#
+# We need a Boot JDK to bootstrap the build.
+#
+BOOT_JDK_FOUND=no
+
+# Check whether --with-boot-jdk was given.
+if test "${with_boot_jdk+set}" = set; then :
+ withval=$with_boot_jdk;
+fi
+
+
+if test "x$with_boot_jdk" != x; then
+ BOOT_JDK=$with_boot_jdk
+ BOOT_JDK_FOUND=yes
+fi
+if test "x$BOOT_JDK_FOUND" = xno; then
+
+
+ if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
+ # Source the builddeps file again, to make sure it uses the latest variables!
+ . $builddepsfile
+ # Look for a host and build machine specific resource!
+ eval resource=\${builddep_bootjdk_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}}
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a host specific resource
+ eval resource=\${builddep_bootjdk_HOST_${rewritten_host_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a build specific resource
+ eval resource=\${builddep_bootjdk_BUILD_${rewritten_build_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a generic resource
+ # (The bootjdk comes from M4 and not the shell, thus no need for eval here.)
+ resource=${builddep_bootjdk}
+ fi
+ if test "x$resource" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for bootjdk" >&5
+$as_echo "$as_me: Using builddeps $resource for bootjdk" >&6;}
+ # If the resource in the builddeps.conf file is an existing directory,
+ # for example /java/linux/cups
+ if test -d ${resource}; then
+ depdir=${resource}
+ else
+
+# bootjdk is for example mymodule
+# $resource is for example libs/general/libmymod_1_2_3.zip
+# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps
+# $with_builddeps_dir is for example /localhome/builddeps
+# depdir is the name of the variable into which we store the depdir, eg MYMOD
+# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and
+# unzip into the directory: /localhome/builddeps/libmymod_1_2_3
+ filename=`basename $resource`
+ filebase=`echo $filename | sed 's/\.[^\.]*$//'`
+ filebase=${filename%%.*}
+ extension=${filename#*.}
+ installdir=$with_builddeps_dir/$filebase
+ if test ! -f $installdir/$filename.unpacked; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency bootjdk from $with_builddeps_server/$resource and installing into $installdir" >&5
+$as_echo "$as_me: Downloading build dependency bootjdk from $with_builddeps_server/$resource and installing into $installdir" >&6;}
+ if test ! -d $installdir; then
+ mkdir -p $installdir
+ fi
+ if test ! -d $installdir; then
+ as_fn_error $? "Could not create directory $installdir" "$LINENO" 5
+ fi
+ tmpfile=`mktemp $installdir/bootjdk.XXXXXXXXX`
+ touch $tmpfile
+ if test ! -f $tmpfile; then
+ as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5
+ fi
+
+ # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip
+ # $tmpfile is the local file name for the downloaded file.
+ VALID_TOOL=no
+ if test "x$BDEPS_FTP" = xwget; then
+ VALID_TOOL=yes
+ wget -O $tmpfile $with_builddeps_server/$resource
+ fi
+ if test "x$BDEPS_FTP" = xlftp; then
+ VALID_TOOL=yes
+ lftp -c "get $with_builddeps_server/$resource -o $tmpfile"
+ fi
+ if test "x$BDEPS_FTP" = xftp; then
+ VALID_TOOL=yes
+ FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'`
+ FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'`
+ FTPUSERPWD=${FTPSERVER%%@*}
+ if test "x$FTPSERVER" != "x$FTPUSERPWD"; then
+ FTPUSER=${userpwd%%:*}
+ FTPPWD=${userpwd#*@}
+ FTPSERVER=${FTPSERVER#*@}
+ else
+ FTPUSER=ftp
+ FTPPWD=ftp
+ fi
+ # the "pass" command does not work on some
+ # ftp clients (read ftp.exe) but if it works,
+ # passive mode is better!
+ (\
+ echo "user $FTPUSER $FTPPWD" ;\
+ echo "pass" ;\
+ echo "bin" ;\
+ echo "get $FTPPATH $tmpfile" ;\
+ ) | ftp -in $FTPSERVER
+ fi
+ if test "x$VALID_TOOL" != xyes; then
+ as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5
+ fi
+
+ mv $tmpfile $installdir/$filename
+ if test ! -s $installdir/$filename; then
+ as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5
+ fi
+ case "$extension" in
+ zip) echo "Unzipping $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked)
+ ;;
+ tar.gz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ tgz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5
+ ;;
+ esac
+ fi
+ if test -f $installdir/$filename.unpacked; then
+ depdir=$installdir
+ fi
+
+ fi
+ # Source the builddeps file again, because in the previous command, the depdir
+ # was updated to point at the current build dependency install directory.
+ . $builddepsfile
+ # Now extract variables from the builddeps.conf files.
+ theroot=${builddep_bootjdk_ROOT}
+ thecflags=${builddep_bootjdk_CFLAGS}
+ thelibs=${builddep_bootjdk_LIBS}
+ if test "x$depdir" = x; then
+ as_fn_error $? "Could not download build dependency bootjdk" "$LINENO" 5
+ fi
+ BOOT_JDK=$depdir
+ if test "x$theroot" != x; then
+ BOOT_JDK="$theroot"
+ fi
+ if test "x$thecflags" != x; then
+ BOOT_JDK_CFLAGS="$thecflags"
+ fi
+ if test "x$thelibs" != x; then
+ BOOT_JDK_LIBS="$thelibs"
+ fi
+ BOOT_JDK_FOUND=yes
+ else BOOT_JDK_FOUND=no
+
+ fi
+ else BOOT_JDK_FOUND=no
+
+ fi
+
+fi
+
+if test "x$BOOT_JDK_FOUND" = xno; then
+ if test "x$JAVA_HOME" != x; then
+ if test ! -d "$JAVA_HOME"; then
+ as_fn_error $? "Your JAVA_HOME points to a non-existing directory!" "$LINENO" 5
+ fi
+ # Aha, the user has set a JAVA_HOME
+ # let us use that as the Boot JDK.
+ BOOT_JDK=$JAVA_HOME
+ BOOT_JDK_FOUND=yes
+ # To be on the safe side, lets check that it is a JDK.
+ if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then
+ JAVAC=$BOOT_JDK/bin/javac
+ JAVA=$BOOT_JDK/bin/java
+ BOOT_JDK_FOUND=yes
+ else
+ as_fn_error $? "Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK." "$LINENO" 5
+ fi
+ fi
+fi
+
+if test "x$BOOT_JDK_FOUND" = xno; then
+ # Extract the first word of "javac", so it can be a program name with args.
+set dummy javac; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_JAVAC_CHECK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $JAVAC_CHECK in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_JAVAC_CHECK="$JAVAC_CHECK" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_JAVAC_CHECK="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+JAVAC_CHECK=$ac_cv_path_JAVAC_CHECK
+if test -n "$JAVAC_CHECK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC_CHECK" >&5
+$as_echo "$JAVAC_CHECK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ # Extract the first word of "java", so it can be a program name with args.
+set dummy java; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_JAVA_CHECK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $JAVA_CHECK in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+JAVA_CHECK=$ac_cv_path_JAVA_CHECK
+if test -n "$JAVA_CHECK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5
+$as_echo "$JAVA_CHECK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ BINARY="$JAVAC_CHECK"
+ if test "x$JAVAC_CHECK" = x; then
+ BINARY="$JAVA_CHECK"
+ fi
+ if test "x$BINARY" != x; then
+ # So there is a java(c) binary, it might be part of a JDK.
+ # Lets find the JDK/JRE directory by following symbolic links.
+ # Linux/GNU systems often have links from /usr/bin/java to
+ # /etc/alternatives/java to the real JDK binary.
+
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="$BINARY"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "$BINARY"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ BINARY="$tmp"
+
+
+ if test "x$BUILD_OS" != xwindows; then
+ # Follow a chain of symbolic links. Use readlink
+ # where it exists, else fall back to horribly
+ # complicated shell code.
+ # Extract the first word of "readlink", so it can be a program name with args.
+set dummy readlink; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_READLINK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $READLINK in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+READLINK=$ac_cv_path_READLINK
+if test -n "$READLINK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5
+$as_echo "$READLINK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test "x$READLINK_TESTED" != yes; then
+ # On MacOSX there is a readlink tool with a different
+ # purpose than the GNU readlink tool. Check the found readlink.
+ ISGNU=`$READLINK --help 2>&1 | grep GNU`
+ if test "x$ISGNU" = x; then
+ # A readlink that we do not know how to use.
+ # Are there other non-GNU readlinks out there?
+ READLINK_TESTED=yes
+ READLINK=
+ fi
+ fi
+
+ if test "x$READLINK" != x; then
+ BINARY=`$READLINK -f $BINARY`
+ else
+ STARTDIR=$PWD
+ COUNTER=0
+ DIR=`dirname $BINARY`
+ FIL=`basename $BINARY`
+ while test $COUNTER -lt 20; do
+ ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'`
+ if test "x$ISLINK" == x; then
+ # This is not a symbolic link! We are done!
+ break
+ fi
+ # The link might be relative! We have to use cd to travel safely.
+ cd $DIR
+ cd `dirname $ISLINK`
+ DIR=`pwd`
+ FIL=`basename $ISLINK`
+ let COUNTER=COUNTER+1
+ done
+ cd $STARTDIR
+ BINARY=$DIR/$FIL
+ fi
+ fi
+
+ BOOT_JDK=`dirname $BINARY`
+ BOOT_JDK=`cd $BOOT_JDK/..; pwd`
+ if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then
+ JAVAC=$BOOT_JDK/bin/javac
+ JAVA=$BOOT_JDK/bin/java
+ BOOT_JDK_FOUND=yes
+ fi
+ fi
+fi
+
+if test "x$BOOT_JDK_FOUND" = xno; then
+ # Try the MacOSX way.
+ if test -x /usr/libexec/java_home; then
+ BOOT_JDK=`/usr/libexec/java_home`
+ if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then
+ JAVAC=$BOOT_JDK/bin/javac
+ JAVA=$BOOT_JDK/bin/java
+ BOOT_JDK_FOUND=yes
+ fi
+ fi
+fi
+
+if test "x$BOOT_JDK_FOUND" = xno; then
+ # Extract the first word of "java", so it can be a program name with args.
+set dummy java; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_JAVA_CHECK+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $JAVA_CHECK in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_JAVA_CHECK="$JAVA_CHECK" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_JAVA_CHECK="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+JAVA_CHECK=$ac_cv_path_JAVA_CHECK
+if test -n "$JAVA_CHECK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA_CHECK" >&5
+$as_echo "$JAVA_CHECK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ if test "x$JAVA_CHECK" != x; then
+ # There is a java in the path. But apparently we have not found a javac
+ # in the path, since that would have been tested earlier.
+ if test "x$HOST_OS" = xwindows; then
+ # Now if this is a windows platform. The default installation of a JDK
+ # actually puts the JRE in the path and keeps the JDK out of the path!
+ # Go look in the default installation location.
+ BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1`
+ if test -d "$BOOT_JDK"; then
+ BOOT_JDK_FOUND=yes
+ fi
+ fi
+ if test "x$BOOT_JDK_FOUND" = xno; then
+ help_on_build_dependency openjdk
+ as_fn_error $? "Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG" "$LINENO" 5
+ fi
+ else
+ help_on_build_dependency openjdk
+ as_fn_error $? "Could not find a JDK. $HELP_MSG" "$LINENO" 5
+ fi
+fi
+
+
+ if test "x$BUILD_OS" = "xwindows"; then
+ # Extract the first word of "cygpath", so it can be a program name with args.
+set dummy cygpath; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if test "${ac_cv_path_CYGPATH+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ case $CYGPATH in
+ [\\/]* | ?:[\\/]*)
+ ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path.
+ ;;
+ *)
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+fi
+CYGPATH=$ac_cv_path_CYGPATH
+if test -n "$CYGPATH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5
+$as_echo "$CYGPATH" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ tmp="$BOOT_JDK"
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ BOOT_JDK="$tmp"
+ fi
+
+
+# Now see if we can find the rt.jar, or its nearest equivalent.
+BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar"
+
+ # Fail with message the path to the Boot JDK rt.jar (or nearest equivalent) if var BOOT_RTJAR contains a path with no spaces in it.
+ # Unless on Windows, where we can rewrite the path.
+ HAS_SPACE=`echo "$BOOT_RTJAR" | grep " "`
+ if test "x$HAS_SPACE" != x; then
+ if test "x$BUILD_OS" = "xwindows"; then
+ BOOT_RTJAR=`$CYGPATH -s -m -a "$BOOT_RTJAR"`
+ BOOT_RTJAR=`$CYGPATH -u "$BOOT_RTJAR"`
+ else
+ as_fn_error $? "You cannot have spaces in the path to the Boot JDK rt.jar (or nearest equivalent)! \"$BOOT_RTJAR\"" "$LINENO" 5
+ fi
+ fi
+
+
+BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar"
+
+ # Fail with message the path to the Boot JDK tools.jar (or nearest equivalent) if var BOOT_TOOLSJAR contains a path with no spaces in it.
+ # Unless on Windows, where we can rewrite the path.
+ HAS_SPACE=`echo "$BOOT_TOOLSJAR" | grep " "`
+ if test "x$HAS_SPACE" != x; then
+ if test "x$BUILD_OS" = "xwindows"; then
+ BOOT_TOOLSJAR=`$CYGPATH -s -m -a "$BOOT_TOOLSJAR"`
+ BOOT_TOOLSJAR=`$CYGPATH -u "$BOOT_TOOLSJAR"`
+ else
+ as_fn_error $? "You cannot have spaces in the path to the Boot JDK tools.jar (or nearest equivalent)! \"$BOOT_TOOLSJAR\"" "$LINENO" 5
+ fi
+ fi
+
+
+if test ! -f $BOOT_RTJAR; then
+ # On MacOSX it is called classes.jar
+ BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar
+ if test ! -f $BOOT_RTJAR; then
+ as_fn_error $? "Cannot find the rt.jar or its equivalent!" "$LINENO" 5
+ fi
+ # Remove the ..
+ BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}"
+ # The tools.jar is part of classes.jar
+ BOOT_TOOLSJAR="$BOOT_RTJAR"
+fi
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5
+$as_echo_n "checking for Boot JDK... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5
+$as_echo "$BOOT_JDK" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot rt.jar" >&5
+$as_echo_n "checking for Boot rt.jar... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_RTJAR" >&5
+$as_echo "$BOOT_RTJAR" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot tools.jar" >&5
+$as_echo_n "checking for Boot tools.jar... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_TOOLSJAR" >&5
+$as_echo "$BOOT_TOOLSJAR" >&6; }
+
+# Use the java tool from the Boot JDK.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for java in Boot JDK" >&5
+$as_echo_n "checking for java in Boot JDK... " >&6; }
+JAVA=$BOOT_JDK/bin/java
+if test ! -x $JAVA; then
+ as_fn_error $? "Could not find a working java" "$LINENO" 5
+fi
+BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1`
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes $BOOT_JDK_VERSION" >&5
+$as_echo "yes $BOOT_JDK_VERSION" >&6; }
+
+
+# Extra M4 quote needed to protect [] in grep expression.
+FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`
+if test "x$FOUND_VERSION_78" = x; then
+ help_on_build_dependency openjdk
+ as_fn_error $? "Your bootjdk must be version 7 or 8. $HELP_MSG" "$LINENO" 5
+fi
+
+# When compiling code to be executed by the Boot JDK, force jdk7 compatibility.
+BOOT_JDK_SOURCETARGET="-source 7 -target 7"
+
+
+# Use the javac tool from the Boot JDK.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javac in Boot JDK" >&5
+$as_echo_n "checking for javac in Boot JDK... " >&6; }
+JAVAC=$BOOT_JDK/bin/javac
+if test ! -x $JAVAC; then
+ as_fn_error $? "Could not find a working javac" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+
+# Use the javac tool from the Boot JDK.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for javah in Boot JDK" >&5
+$as_echo_n "checking for javah in Boot JDK... " >&6; }
+JAVAH=$BOOT_JDK/bin/javah
+if test ! -x $JAVAH; then
+ as_fn_error $? "Could not find a working javah" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+
+# Use the jar tool from the Boot JDK.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jar in Boot JDK" >&5
+$as_echo_n "checking for jar in Boot JDK... " >&6; }
+JAR=$BOOT_JDK/bin/jar
+if test ! -x $JAR; then
+ as_fn_error $? "Could not find a working jar" "$LINENO" 5
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+# Use the rmic tool from the Boot JDK.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for rmic in Boot JDK" >&5
+$as_echo_n "checking for rmic in Boot JDK... " >&6; }
+RMIC=$BOOT_JDK/bin/rmic
+if test ! -x $RMIC; then
+ as_fn_error $? "Could not find a working rmic" "$LINENO" 5
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+###############################################################################
+#
+# Pickup additional source for a component from outside of the source root
+# or override source for a component.
+#
+
+# Check whether --with-add-source-root was given.
+if test "${with_add_source_root+set}" = set; then :
+ withval=$with_add_source_root;
+fi
+
+
+
+# Check whether --with-override-source-root was given.
+if test "${with_override_source_root+set}" = set; then :
+ withval=$with_override_source_root;
+fi
+
+
+
+# Check whether --with-adds-and-overrides was given.
+if test "${with_adds_and_overrides+set}" = set; then :
+ withval=$with_adds_and_overrides;
+fi
+
+
+if test "x$with_adds_and_overrides" != x; then
+ with_add_source_root="$with_adds_and_overrides/adds"
+ with_override_source_root="$with_adds_and_overrides/overrides"
+fi
+
+if test "x$with_add_source_root" != x; then
+ if ! test -d $with_add_source_root; then
+ as_fn_error $? "Trying to use a non-existant add-source-root $with_add_source_root" "$LINENO" 5
+ fi
+ CURDIR="$PWD"
+ cd "$with_add_source_root"
+ ADD_SRC_ROOT="`pwd`"
+ cd "$CURDIR"
+ # Verify that the addon source root does not have any root makefiles.
+ # If it does, then it is usually an error, prevent this.
+ if test -f $with_add_source_root/langtools/makefiles/Makefile || \
+ test -f $with_add_source_root/langtools/make/Makefile; then
+ as_fn_error $? "Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources." "$LINENO" 5
+ fi
+ if test -f $with_add_source_root/corba/makefiles/Makefile || \
+ test -f $with_add_source_root/corba/make/Makefile; then
+ as_fn_error $? "Your add source root seems to contain a full corba repo! An add source root should only contain additional sources." "$LINENO" 5
+ fi
+ if test -f $with_add_source_root/jaxp/makefiles/Makefile || \
+ test -f $with_add_source_root/jaxp/make/Makefile; then
+ as_fn_error $? "Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources." "$LINENO" 5
+ fi
+ if test -f $with_add_source_root/jaxws/makefiles/Makefile || \
+ test -f $with_add_source_root/jaxws/make/Makefile; then
+ as_fn_error $? "Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources." "$LINENO" 5
+ fi
+ if test -f $with_add_source_root/hotspot/makefiles/Makefile || \
+ test -f $with_add_source_root/hotspot/make/Makefile; then
+ as_fn_error $? "Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources." "$LINENO" 5
+ fi
+ if test -f $with_add_source_root/jdk/makefiles/Makefile || \
+ test -f $with_add_source_root/jdk/make/Makefile; then
+ as_fn_error $? "Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources." "$LINENO" 5
+ fi
+fi
+
+
+if test "x$with_override_source_root" != x; then
+ if ! test -d $with_override_source_root; then
+ as_fn_error $? "Trying to use a non-existant override-source-root $with_override_source_root" "$LINENO" 5
+ fi
+ CURDIR="$PWD"
+ cd "$with_override_source_root"
+ OVERRIDE_SRC_ROOT="`pwd`"
+ cd "$CURDIR"
+ if test -f $with_override_source_root/langtools/makefiles/Makefile || \
+ test -f $with_override_source_root/langtools/make/Makefile; then
+ as_fn_error $? "Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override." "$LINENO" 5
+ fi
+ if test -f $with_override_source_root/corba/makefiles/Makefile || \
+ test -f $with_override_source_root/corba/make/Makefile; then
+ as_fn_error $? "Your override source root seems to contain a full corba repo! An override source root should only contain sources that override." "$LINENO" 5
+ fi
+ if test -f $with_override_source_root/jaxp/makefiles/Makefile || \
+ test -f $with_override_source_root/jaxp/make/Makefile; then
+ as_fn_error $? "Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override." "$LINENO" 5
+ fi
+ if test -f $with_override_source_root/jaxws/makefiles/Makefile || \
+ test -f $with_override_source_root/jaxws/make/Makefile; then
+ as_fn_error $? "Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override." "$LINENO" 5
+ fi
+ if test -f $with_override_source_root/hotspot/makefiles/Makefile || \
+ test -f $with_override_source_root/hotspot/make/Makefile; then
+ as_fn_error $? "Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override." "$LINENO" 5
+ fi
+ if test -f $with_override_source_root/jdk/makefiles/Makefile || \
+ test -f $with_override_source_root/jdk/make/Makefile; then
+ as_fn_error $? "Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override." "$LINENO" 5
+ fi
+fi
+
+
+###############################################################################
+#
+# Override a repo completely, this is used for example when you have 3 small
+# development sandboxes of the langtools sources and want to avoid having 3 full
+# OpenJDK sources checked out on disk.
+#
+# Assuming that the 3 langtools sandboxes are located here:
+# /home/fredrik/sandbox1/langtools
+# /home/fredrik/sandbox2/langtools
+# /home/fredrik/sandbox3/langtools
+#
+# From the source root you create build subdirs manually:
+# mkdir -p build1 build2 build3
+# in each build directory run:
+# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make)
+# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make)
+# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make)
+#
+
+
+# Check whether --with-override-langtools was given.
+if test "${with_override_langtools+set}" = set; then :
+ withval=$with_override_langtools;
+fi
+
+
+
+# Check whether --with-override-corba was given.
+if test "${with_override_corba+set}" = set; then :
+ withval=$with_override_corba;
+fi
+
+
+
+# Check whether --with-override-jaxp was given.
+if test "${with_override_jaxp+set}" = set; then :
+ withval=$with_override_jaxp;
+fi
+
+
+
+# Check whether --with-override-jaxws was given.
+if test "${with_override_jaxws+set}" = set; then :
+ withval=$with_override_jaxws;
+fi
+
+
+
+# Check whether --with-override-hotspot was given.
+if test "${with_override_hotspot+set}" = set; then :
+ withval=$with_override_hotspot;
+fi
+
+
+
+# Check whether --with-override-jdk was given.
+if test "${with_override_jdk+set}" = set; then :
+ withval=$with_override_jdk;
+fi
+
+
+if test "x$with_override_langtools" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_langtools"
+ LANGTOOLS_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then
+ as_fn_error $? "You have to override langtools with a full langtools repo!" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if langtools should be overridden" >&5
+$as_echo_n "checking if langtools should be overridden... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $LANGTOOLS_TOPDIR" >&5
+$as_echo "yes with $LANGTOOLS_TOPDIR" >&6; }
+fi
+if test "x$with_override_corba" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_corba"
+ CORBA_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then
+ as_fn_error $? "You have to override corba with a full corba repo!" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if corba should be overridden" >&5
+$as_echo_n "checking if corba should be overridden... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $CORBA_TOPDIR" >&5
+$as_echo "yes with $CORBA_TOPDIR" >&6; }
+fi
+if test "x$with_override_jaxp" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_jaxp"
+ JAXP_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then
+ as_fn_error $? "You have to override jaxp with a full jaxp repo!" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxp should be overridden" >&5
+$as_echo_n "checking if jaxp should be overridden... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXP_TOPDIR" >&5
+$as_echo "yes with $JAXP_TOPDIR" >&6; }
+fi
+if test "x$with_override_jaxws" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_jaxws"
+ JAXWS_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then
+ as_fn_error $? "You have to override jaxws with a full jaxws repo!" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if jaxws should be overridden" >&5
+$as_echo_n "checking if jaxws should be overridden... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JAXWS_TOPDIR" >&5
+$as_echo "yes with $JAXWS_TOPDIR" >&6; }
+fi
+if test "x$with_override_hotspot" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_hotspot"
+ HOTSPOT_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \
+ ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then
+ as_fn_error $? "You have to override hotspot with a full hotspot repo!" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if hotspot should be overridden" >&5
+$as_echo_n "checking if hotspot should be overridden... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $HOTSPOT_TOPDIR" >&5
+$as_echo "yes with $HOTSPOT_TOPDIR" >&6; }
+fi
+if test "x$with_override_jdk" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_jdk"
+ JDK_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $JDK_TOPDIR/makefiles/Makefile; then
+ as_fn_error $? "You have to override JDK with a full JDK repo!" "$LINENO" 5
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if JDK should be overridden" >&5
+$as_echo_n "checking if JDK should be overridden... " >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes with $JDK_TOPDIR" >&5
+$as_echo "yes with $JDK_TOPDIR" >&6; }
+fi
+
+###############################################################################
+#
+# Specify options for anything that is run with the Boot JDK.
+#
+
+# Check whether --with-boot-jdk-jvmargs was given.
+if test "${with_boot_jdk_jvmargs+set}" = set; then :
+ withval=$with_boot_jdk_jvmargs;
+fi
+
+
+if test "x$with_boot_jdk_jvmargs" = x; then
+ # Not all JVM:s accept the same arguments on the command line.
+ # OpenJDK specific increase in thread stack for JDK build,
+ # well more specifically, when running javac.
+ if test "x$BUILD_NUM_BITS" = x32; then
+ STACK_SIZE=768
+ else
+ # Running Javac on a JVM on a 64-bit machine, the stack takes more space
+ # since 64-bit pointers are pushed on the stach. Apparently, we need
+ # to increase the stack space when javacing the JDK....
+ STACK_SIZE=1536
+ fi
+
+ # Minimum amount of heap memory.
+
+ # Test if -Xms64M is a valid argument to $JAVA (often is $JAVA passed as $JAVA)
+ # If so, then append -Xms64M to boot_jdk_jvmargs
+ FOUND_WARN=`$JAVA -Xms64M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$JAVA -Xms64M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ boot_jdk_jvmargs="$boot_jdk_jvmargs -Xms64M"
+ fi
+
+ if test "x$HOST_OS" = "xmacosx"; then
+ # Why does macosx need more heap? Its the huge JDK batch.
+
+ # Test if -Xmx1600M is a valid argument to $JAVA (often is $JAVA passed as $JAVA)
+ # If so, then append -Xmx1600M to boot_jdk_jvmargs
+ FOUND_WARN=`$JAVA -Xmx1600M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$JAVA -Xmx1600M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1600M"
+ fi
+
+ else
+
+ # Test if -Xmx1100M is a valid argument to $JAVA (often is $JAVA passed as $JAVA)
+ # If so, then append -Xmx1100M to boot_jdk_jvmargs
+ FOUND_WARN=`$JAVA -Xmx1100M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$JAVA -Xmx1100M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ boot_jdk_jvmargs="$boot_jdk_jvmargs -Xmx1100M"
+ fi
+
+ fi
+ # When is adding -client something that speeds up the JVM?
+ # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA])
+
+ # Test if -XX:PermSize=32m is a valid argument to $JAVA (often is $JAVA passed as $JAVA)
+ # If so, then append -XX:PermSize=32m to boot_jdk_jvmargs
+ FOUND_WARN=`$JAVA -XX:PermSize=32m -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$JAVA -XX:PermSize=32m -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:PermSize=32m"
+ fi
+
+
+ # Test if -XX:MaxPermSize=160m is a valid argument to $JAVA (often is $JAVA passed as $JAVA)
+ # If so, then append -XX:MaxPermSize=160m to boot_jdk_jvmargs
+ FOUND_WARN=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$JAVA -XX:MaxPermSize=160m -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:MaxPermSize=160m"
+ fi
+
+
+ # Test if -XX:ThreadStackSize=$STACK_SIZE is a valid argument to $JAVA (often is $JAVA passed as $JAVA)
+ # If so, then append -XX:ThreadStackSize=$STACK_SIZE to boot_jdk_jvmargs
+ FOUND_WARN=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$JAVA -XX:ThreadStackSize=$STACK_SIZE -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:ThreadStackSize=$STACK_SIZE"
+ fi
+
+ # Disable special log output when a debug build is used as Boot JDK...
+
+ # Test if -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput is a valid argument to $JAVA (often is $JAVA passed as $JAVA)
+ # If so, then append -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput to boot_jdk_jvmargs
+ FOUND_WARN=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$JAVA -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ boot_jdk_jvmargs="$boot_jdk_jvmargs -XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput"
+ fi
+
+fi
+
+BOOT_JDK_JVMARGS=$boot_jdk_jvmargs
+
+
+
+# Check whether --with-server-java was given.
+if test "${with_server_java+set}" = set; then :
+ withval=$with_server_java;
+fi
+
+
+if test "x$with_server_java" != x; then
+ SERVER_JAVA="$with_server_java"
+ FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" = x; then
+ as_fn_error $? "Could not execute server java: $SERVER_JAVA" "$LINENO" 5
+ fi
+else
+ SERVER_JAVA=""
+ # Hotspot specific options.
+
+ # Test if -XX:+UseParallelOldGC is a valid argument to $JAVA (often is $JAVA passed as $JAVA)
+ # If so, then append -XX:+UseParallelOldGC to SERVER_JAVA
+ FOUND_WARN=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$JAVA -XX:+UseParallelOldGC -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -XX:+UseParallelOldGC"
+ fi
+
+
+ # Test if -verbosegc is a valid argument to $JAVA (often is $JAVA passed as $JAVA)
+ # If so, then append -verbosegc to SERVER_JAVA
+ FOUND_WARN=`$JAVA -verbosegc -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$JAVA -verbosegc -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -verbosegc"
+ fi
+
+ # JRockit specific options.
+
+ # Test if -Xverbose:gc is a valid argument to $JAVA (often is $JAVA passed as $JAVA)
+ # If so, then append -Xverbose:gc to SERVER_JAVA
+ FOUND_WARN=`$JAVA -Xverbose:gc -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$JAVA -Xverbose:gc -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xverbose:gc"
+ fi
+
+ SERVER_JAVA="$JAVA $SERVER_JAVA"
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use shared server for javac" >&5
+$as_echo_n "checking whether to use shared server for javac... " >&6; }
+# Check whether --enable-javac-server was given.
+if test "${enable_javac_server+set}" = set; then :
+ enableval=$enable_javac_server; ENABLE_JAVAC_SERVER="${enableval}"
+else
+ ENABLE_JAVAC_SERVER='no'
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_SERVER" >&5
+$as_echo "$ENABLE_JAVAC_SERVER" >&6; }
+if test "x$ENABLE_JAVAC_SERVER" = xyes; then
+ JAVAC_USE_REMOTE=true
+ JAVAC_SERVERS="$OUTPUT_ROOT/javacservers"
+else
+ JAVAC_USE_REMOTE=false
+ JAVAC_SERVERS=
+fi
+
+
+
+
+# Check whether --with-javac-server-cores was given.
+if test "${with_javac_server_cores+set}" = set; then :
+ withval=$with_javac_server_cores;
+fi
+
+if test "x$with_javac_server_cores" != x; then
+ JAVAC_SERVER_CORES="$with_javac_server_cores"
+else
+ if test "$NUM_CORES" -gt 16; then
+ # We set this arbitrary limit because we want to limit the heap
+ # size of the javac server.
+ # In the future we will make the javac compilers in the server
+ # share more and more state, thus enabling us to use more and
+ # more concurrent threads in the server.
+ JAVAC_SERVER_CORES="16"
+ else
+ JAVAC_SERVER_CORES="$NUM_CORES"
+ fi
+
+ if test "$MEMORY_SIZE" -gt "17000"; then
+ MAX_HEAP_MEM=10000
+
+ # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -d64 to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -d64"
+ fi
+
+
+ # Test if -Xms10G -Xmx10G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xms10G -Xmx10G to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xms10G -Xmx10G -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xms10G -Xmx10G"
+ fi
+
+
+ # Test if -Xmn2G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xmn2G to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xmn2G -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xmn2G"
+ fi
+
+ elif test "$MEMORY_SIZE" -gt "10000"; then
+ MAX_HEAP_MEM=6000
+
+ # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -d64 to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -d64"
+ fi
+
+
+ # Test if -Xms6G -Xmx6G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xms6G -Xmx6G to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xms6G -Xmx6G -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xms6G -Xmx6G"
+ fi
+
+
+ # Test if -Xmn1G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xmn1G to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xmn1G -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xmn1G"
+ fi
+
+ elif test "$MEMORY_SIZE" -gt "5000"; then
+ MAX_HEAP_MEM=3000
+
+ # Test if -d64 is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -d64 to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -d64 -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -d64 -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -d64"
+ fi
+
+
+ # Test if -Xms1G -Xmx3G is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xms1G -Xmx3G to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx3G -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx3G"
+ fi
+
+
+ # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xmn256M to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xmn256M"
+ fi
+
+ elif test "$MEMORY_SIZE" -gt "3800"; then
+ MAX_HEAP_MEM=2500
+
+ # Test if -Xms1G -Xmx2500M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xms1G -Xmx2500M to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xms1G -Xmx2500M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xms1G -Xmx2500M"
+ fi
+
+
+ # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xmn256M to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xmn256M"
+ fi
+
+ elif test "$MEMORY_SIZE" -gt "1900"; then
+ MAX_HEAP_MEM=1200
+
+ # Test if -Xms700M -Xmx1200M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xms700M -Xmx1200M to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xms700M -Xmx1200M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xms700M -Xmx1200M"
+ fi
+
+
+ # Test if -Xmn256M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xmn256M to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xmn256M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xmn256M"
+ fi
+
+ elif test "$MEMORY_SIZE" -gt "1000"; then
+ MAX_HEAP_MEM=900
+
+ # Test if -Xms400M -Xmx900M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xms400M -Xmx900M to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xms400M -Xmx900M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xms400M -Xmx900M"
+ fi
+
+
+ # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xmn128M to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xmn128M"
+ fi
+
+ else
+ MAX_HEAP_MEM=512
+
+ # Test if -Xms256M -Xmx512M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xms256M -Xmx512M to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xms256M -Xmx512M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xms256M -Xmx512M"
+ fi
+
+
+ # Test if -Xmn128M is a valid argument to $SERVER_JAVA (often is $JAVA passed as $SERVER_JAVA)
+ # If so, then append -Xmn128M to SERVER_JAVA
+ FOUND_WARN=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$SERVER_JAVA -Xmn128M -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ SERVER_JAVA="$SERVER_JAVA -Xmn128M"
+ fi
+
+ fi
+
+ MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501`
+ if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if number of server cores must be reduced" >&5
+$as_echo_n "checking if number of server cores must be reduced... " >&6; }
+ JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&5
+$as_echo "yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB" >&6; }
+ fi
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to track dependencies between Java packages" >&5
+$as_echo_n "checking whether to track dependencies between Java packages... " >&6; }
+# Check whether --enable-javac-deps was given.
+if test "${enable_javac_deps+set}" = set; then :
+ enableval=$enable_javac_deps; ENABLE_JAVAC_DEPS="${enableval}"
+else
+ ENABLE_JAVAC_DEPS='no'
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_DEPS" >&5
+$as_echo "$ENABLE_JAVAC_DEPS" >&6; }
+if test "x$ENABLE_JAVAC_DEPS" = xyes; then
+ JAVAC_USE_DEPS=true
+else
+ JAVAC_USE_DEPS=false
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use multiple cores for javac compilation" >&5
+$as_echo_n "checking whether to use multiple cores for javac compilation... " >&6; }
+# Check whether --enable-javac-multi-core was given.
+if test "${enable_javac_multi_core+set}" = set; then :
+ enableval=$enable_javac_multi_core; ENABLE_JAVAC_MULTICORE="${enableval}"
+else
+ ENABLE_JAVAC_MULTICORE='no'
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_JAVAC_MULTICORE" >&5
+$as_echo "$ENABLE_JAVAC_MULTICORE" >&6; }
+if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then
+ JAVAC_USE_MODE=MULTI_CORE_CONCURRENT
+else
+ JAVAC_USE_MODE=SINGLE_THREADED_BATCH
+ if test "x$ENABLE_JAVAC_DEPS" = xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&5
+$as_echo "$as_me: WARNING: Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling dependency tracking for you now." >&5
+$as_echo "$as_me: WARNING: Disabling dependency tracking for you now." >&2;}
+ JAVAC_USE_DEPS=false
+ fi
+ if test "x$ENABLE_JAVAC_SERVER" = xyes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&5
+$as_echo "$as_me: WARNING: The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options." >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disabling javac server for you now." >&5
+$as_echo "$as_me: WARNING: Disabling javac server for you now." >&2;}
+ JAVAC_USE_REMOTE=false
+ fi
+fi
+
+
+###############################################################################
+#
+# OS specific settings that we never will need to probe.
+#
+if test "x$HOST_OS" = xlinux; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Linux?" >&5
+$as_echo_n "checking what is not needed on Linux?... " >&6; }
+ PULSE_NOT_NEEDED=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: pulse" >&5
+$as_echo "pulse" >&6; }
+fi
+
+if test "x$HOST_OS" = xsolaris; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Solaris?" >&5
+$as_echo_n "checking what is not needed on Solaris?... " >&6; }
+ ALSA_NOT_NEEDED=yes
+ PULSE_NOT_NEEDED=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5
+$as_echo "alsa pulse" >&6; }
+fi
+
+if test "x$HOST_OS" = xwindows; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on Windows?" >&5
+$as_echo_n "checking what is not needed on Windows?... " >&6; }
+ CUPS_NOT_NEEDED=yes
+ ALSA_NOT_NEEDED=yes
+ PULSE_NOT_NEEDED=yes
+ X11_NOT_NEEDED=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa cups pulse x11" >&5
+$as_echo "alsa cups pulse x11" >&6; }
+fi
+
+if test "x$HOST_OS" = xmacosx; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on MacOSX?" >&5
+$as_echo_n "checking what is not needed on MacOSX?... " >&6; }
+ ALSA_NOT_NEEDED=yes
+ PULSE_NOT_NEEDED=yes
+ X11_NOT_NEEDED=yes
+ FREETYPE2_NOT_NEEDED=yes
+ # If the java runtime framework is disabled, then we need X11.
+ # This will be adjusted below.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse x11" >&5
+$as_echo "alsa pulse x11" >&6; }
+fi
+
+if test "x$HOST_OS" = xbsd; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on bsd?" >&5
+$as_echo_n "checking what is not needed on bsd?... " >&6; }
+ ALSA_NOT_NEEDED=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa" >&5
+$as_echo "alsa" >&6; }
+fi
+
+###############################################################################
+#
+# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM
+# that uses this API.
+#
+# Check whether --enable-macosx-runtime-support was given.
+if test "${enable_macosx_runtime_support+set}" = set; then :
+ enableval=$enable_macosx_runtime_support; MACOSX_RUNTIME_SUPPORT="${enableval}"
+else
+ MACOSX_RUNTIME_SUPPORT="no"
+fi
+
+
+USE_MACOSX_RUNTIME_SUPPORT=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for explicit Java runtime support in the OS" >&5
+$as_echo_n "checking for explicit Java runtime support in the OS... " >&6; }
+if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then
+ if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then
+ MACOSX_RUNTIME_SUPPORT=yes
+ USE_MACOSX_RUNTIME_SUPPORT=yes
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, does not need alsa freetype2 pulse and X11" >&5
+$as_echo "yes, does not need alsa freetype2 pulse and X11" >&6; }
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, but explicitly disabled." >&5
+$as_echo "yes, but explicitly disabled." >&6; }
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+if test "x$HOST_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking what is not needed on an X11 build on MacOSX?" >&5
+$as_echo_n "checking what is not needed on an X11 build on MacOSX?... " >&6; }
+ X11_NOT_NEEDED=
+ FREETYPE2_NOT_NEEDED=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: alsa pulse" >&5
+$as_echo "alsa pulse" >&6; }
+fi
+
+###############################################################################
+#
+# Check for X Windows
+#
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+$as_echo_n "checking for X... " >&6; }
+
+
+# Check whether --with-x was given.
+if test "${with_x+set}" = set; then :
+ withval=$with_x;
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+ # The user explicitly disabled X.
+ have_x=disabled
+else
+ case $x_includes,$x_libraries in #(
+ *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5 ;; #(
+ *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -f -r conftest.dir
+if mkdir conftest.dir; then
+ cd conftest.dir
+ cat >Imakefile <<'_ACEOF'
+incroot:
+ @echo incroot='${INCROOT}'
+usrlibdir:
+ @echo usrlibdir='${USRLIBDIR}'
+libdir:
+ @echo libdir='${LIBDIR}'
+_ACEOF
+ if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+ # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+ for ac_var in incroot usrlibdir libdir; do
+ eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+ done
+ # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+ for ac_extension in a so sl dylib la dll; do
+ if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+ test -f "$ac_im_libdir/libX11.$ac_extension"; then
+ ac_im_usrlibdir=$ac_im_libdir; break
+ fi
+ done
+ # Screen out bogus values from the imake configuration. They are
+ # bogus both because they are the default anyway, and because
+ # using them would break gcc on systems where it needs fixed includes.
+ case $ac_im_incroot in
+ /usr/include) ac_x_includes= ;;
+ *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+ esac
+ case $ac_im_usrlibdir in
+ /usr/lib | /usr/lib64 | /lib | /lib64) ;;
+ *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+ esac
+ fi
+ cd ..
+ rm -f -r conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R7/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R7
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R7/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R7
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+ # Guess where to find include files, by looking for Xlib.h.
+ # First, try using that file with no special directory specified.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+ # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+ for ac_dir in $ac_x_header_dirs; do
+ if test -r "$ac_dir/X11/Xlib.h"; then
+ ac_x_includes=$ac_dir
+ break
+ fi
+done
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+ # Check for the libraries.
+ # See if we find them without any special options.
+ # Don't add to $LIBS permanently.
+ ac_save_LIBS=$LIBS
+ LIBS="-lX11 $LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+int
+main ()
+{
+XrmInitialize ()
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+ LIBS=$ac_save_LIBS
+for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+ # Don't even attempt the hair of trying to link an X program!
+ for ac_extension in a so sl dylib la dll; do
+ if test -r "$ac_dir/libX11.$ac_extension"; then
+ ac_x_libraries=$ac_dir
+ break 2
+ fi
+ done
+done
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+case $ac_x_includes,$ac_x_libraries in #(
+ no,* | *,no | *\'*)
+ # Didn't find X, or a directory has "'" in its name.
+ ac_cv_have_x="have_x=no";; #(
+ *)
+ # Record where we found X for the cache.
+ ac_cv_have_x="have_x=yes\
+ ac_x_includes='$ac_x_includes'\
+ ac_x_libraries='$ac_x_libraries'"
+esac
+fi
+;; #(
+ *) have_x=yes;;
+ esac
+ eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
+$as_echo "$have_x" >&6; }
+ no_x=yes
+else
+ # If each of the values was on the command line, it overrides each guess.
+ test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+ test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+ # Update the cache value to reflect the command line values.
+ ac_cv_have_x="have_x=yes\
+ ac_x_includes='$x_includes'\
+ ac_x_libraries='$x_libraries'"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
+$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
+fi
+
+if test "$no_x" = yes; then
+ # Not all programs may use this symbol, but it does not hurt to define it.
+
+$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
+
+ X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+ if test -n "$x_includes"; then
+ X_CFLAGS="$X_CFLAGS -I$x_includes"
+ fi
+
+ # It would also be nice to do this for all -L options, not just this one.
+ if test -n "$x_libraries"; then
+ X_LIBS="$X_LIBS -L$x_libraries"
+ # For Solaris; some versions of Sun CC require a space after -R and
+ # others require no space. Words are not sufficient . . . .
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
+$as_echo_n "checking whether -R must be followed by a space... " >&6; }
+ ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+ ac_xsave_cxx_werror_flag=$ac_cxx_werror_flag
+ ac_cxx_werror_flag=yes
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ X_LIBS="$X_LIBS -R$x_libraries"
+else
+ LIBS="$ac_xsave_LIBS -R $x_libraries"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ X_LIBS="$X_LIBS -R $x_libraries"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
+$as_echo "neither works" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ ac_cxx_werror_flag=$ac_xsave_cxx_werror_flag
+ LIBS=$ac_xsave_LIBS
+ fi
+
+ # Check for system-dependent libraries X programs must link with.
+ # Do this before checking for the system-independent R6 libraries
+ # (-lICE), since we may need -lsocket or whatever for X linking.
+
+ if test "$ISC" = yes; then
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+ else
+ # Martyn Johnson says this is needed for Ultrix, if the X
+ # libraries were built with DECnet support. And Karl Berry says
+ # the Alpha needs dnet_stub (dnet does not exist).
+ ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XOpenDisplay ();
+int
+main ()
+{
+return XOpenDisplay ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_dnet_dnet_ntoa=yes
+else
+ ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+ if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+ ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+ fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$ac_xsave_LIBS"
+
+ # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+ # to get the SysV transport functions.
+ # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+ # needs -lnsl.
+ # The nsl library prevents programs from opening the X display
+ # on Irix 5.2, according to T.E. Dickey.
+ # The functions gethostbyname, getservbyname, and inet_addr are
+ # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+ ac_fn_cxx_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = x""yes; then :
+
+fi
+
+ if test $ac_cv_func_gethostbyname = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_nsl_gethostbyname=yes
+else
+ ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+ if test $ac_cv_lib_nsl_gethostbyname = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
+$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_bsd_gethostbyname=yes
+else
+ ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
+$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
+if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+ fi
+ fi
+
+ # lieder@skyler.mavd.honeywell.com says without -lsocket,
+ # socket/setsockopt and other routines are undefined under SCO ODT
+ # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary
+ # on later versions), says Simon Leinen: it contains gethostby*
+ # variants that don't use the name server (or something). -lsocket
+ # must be given before -lnsl if both are needed. We assume that
+ # if connect needs -lnsl, so does gethostbyname.
+ ac_fn_cxx_check_func "$LINENO" "connect" "ac_cv_func_connect"
+if test "x$ac_cv_func_connect" = x""yes; then :
+
+fi
+
+ if test $ac_cv_func_connect = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+$as_echo_n "checking for connect in -lsocket... " >&6; }
+if test "${ac_cv_lib_socket_connect+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_socket_connect=yes
+else
+ ac_cv_lib_socket_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+$as_echo "$ac_cv_lib_socket_connect" >&6; }
+if test "x$ac_cv_lib_socket_connect" = x""yes; then :
+ X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+ fi
+
+ # Guillermo Gomez says -lposix is necessary on A/UX.
+ ac_fn_cxx_check_func "$LINENO" "remove" "ac_cv_func_remove"
+if test "x$ac_cv_func_remove" = x""yes; then :
+
+fi
+
+ if test $ac_cv_func_remove = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
+$as_echo_n "checking for remove in -lposix... " >&6; }
+if test "${ac_cv_lib_posix_remove+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+int
+main ()
+{
+return remove ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_posix_remove=yes
+else
+ ac_cv_lib_posix_remove=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
+$as_echo "$ac_cv_lib_posix_remove" >&6; }
+if test "x$ac_cv_lib_posix_remove" = x""yes; then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+ fi
+
+ # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+ ac_fn_cxx_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
+if test "x$ac_cv_func_shmat" = x""yes; then :
+
+fi
+
+ if test $ac_cv_func_shmat = no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
+$as_echo_n "checking for shmat in -lipc... " >&6; }
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+int
+main ()
+{
+return shmat ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_ipc_shmat=yes
+else
+ ac_cv_lib_ipc_shmat=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
+$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
+if test "x$ac_cv_lib_ipc_shmat" = x""yes; then :
+ X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+ fi
+ fi
+
+ # Check for libraries that X11R6 Xt/Xaw programs need.
+ ac_save_LDFLAGS=$LDFLAGS
+ test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+ # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+ # check for ICE first), but we must link in the order -lSM -lICE or
+ # we get undefined symbols. So assume we have SM if we have ICE.
+ # These have to be linked with before -lX11, unlike the other
+ # libraries we check for below, so use a different variable.
+ # John Interrante, Karl Berry
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
+$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char IceConnectionNumber ();
+int
+main ()
+{
+return IceConnectionNumber ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+ ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then :
+ X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+ LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+
+if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then
+ help_on_build_dependency x11
+ as_fn_error $? "Could not find X11 libraries. $HELP_MSG" "$LINENO" 5
+fi
+
+
+
+
+# Some of the old makefiles require a setting of OPENWIN_HOME
+# Since the X11R6 directory has disappeared on later Linuxes,
+# we need to probe for it.
+if test "x$HOST_OS" = xlinux; then
+ if test -d "$SYS_ROOT/usr/X11R6"; then
+ OPENWIN_HOME="$SYS_ROOT/usr/X11R6"
+ fi
+ if test -d "$SYS_ROOT/usr/include/X11"; then
+ OPENWIN_HOME="$SYS_ROOT/usr"
+ fi
+fi
+if test "x$HOST_OS" = xsolaris; then
+ OPENWIN_HOME="/usr/openwin"
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+OLD_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $X_CFLAGS"
+
+
+for ac_header in X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ X11_A_OK=yes
+else
+ X11_A_OK=no
+fi
+
+done
+
+CFLAGS="$OLD_CFLAGS"
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then
+ help_on_build_dependency x11
+ as_fn_error $? "Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG" "$LINENO" 5
+fi
+
+###############################################################################
+#
+# The common unix printing system cups is used to print from java.
+#
+
+# Check whether --with-cups was given.
+if test "${with_cups+set}" = set; then :
+ withval=$with_cups;
+fi
+
+
+# Check whether --with-cups-include was given.
+if test "${with_cups_include+set}" = set; then :
+ withval=$with_cups_include;
+fi
+
+
+# Check whether --with-cups-lib was given.
+if test "${with_cups_lib+set}" = set; then :
+ withval=$with_cups_lib;
+fi
+
+
+if test "x$CUPS_NOT_NEEDED" = xyes; then
+ if test "x$with_cups" != x || test "x$with_cups-include" != x || test "x$with_cups-lib" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cups not used, so --with-cups is ignored" >&5
+$as_echo "$as_me: WARNING: cups not used, so --with-cups is ignored" >&2;}
+ fi
+ CUPS_CFLAGS=
+ CUPS_LIBS=
+else
+ CUPS_FOUND=no
+
+ if test "x$with_cups" = xno || test "x$with_cups-include" = xno || test "x$with_cups-lib" = xno; then
+ as_fn_error $? "It is not possible to disable the use of cups. Remove the --without-cups option." "$LINENO" 5
+ fi
+
+ if test "x$with_cups" != x; then
+ CUPS_LIBS="-L$with_cups/lib -lcups"
+ CUPS_CFLAGS="-I$with_cups/include"
+ CUPS_FOUND=yes
+ fi
+ if test "x$with_cups-include" != x; then
+ CUPS_CFLAGS="-I$with_cups-include"
+ CUPS_FOUND=yes
+ fi
+ if test "x$with_cups-lib" != x; then
+ CUPS_LIBS="-L$with_cups-lib -lcups"
+ CUPS_FOUND=yes
+ fi
+ if test "x$CUPS_FOUND" = xno; then
+
+
+ if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
+ # Source the builddeps file again, to make sure it uses the latest variables!
+ . $builddepsfile
+ # Look for a host and build machine specific resource!
+ eval resource=\${builddep_cups_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}}
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a host specific resource
+ eval resource=\${builddep_cups_HOST_${rewritten_host_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a build specific resource
+ eval resource=\${builddep_cups_BUILD_${rewritten_build_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a generic resource
+ # (The cups comes from M4 and not the shell, thus no need for eval here.)
+ resource=${builddep_cups}
+ fi
+ if test "x$resource" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for cups" >&5
+$as_echo "$as_me: Using builddeps $resource for cups" >&6;}
+ # If the resource in the builddeps.conf file is an existing directory,
+ # for example /java/linux/cups
+ if test -d ${resource}; then
+ depdir=${resource}
+ else
+
+# cups is for example mymodule
+# $resource is for example libs/general/libmymod_1_2_3.zip
+# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps
+# $with_builddeps_dir is for example /localhome/builddeps
+# depdir is the name of the variable into which we store the depdir, eg MYMOD
+# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and
+# unzip into the directory: /localhome/builddeps/libmymod_1_2_3
+ filename=`basename $resource`
+ filebase=`echo $filename | sed 's/\.[^\.]*$//'`
+ filebase=${filename%%.*}
+ extension=${filename#*.}
+ installdir=$with_builddeps_dir/$filebase
+ if test ! -f $installdir/$filename.unpacked; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&5
+$as_echo "$as_me: Downloading build dependency cups from $with_builddeps_server/$resource and installing into $installdir" >&6;}
+ if test ! -d $installdir; then
+ mkdir -p $installdir
+ fi
+ if test ! -d $installdir; then
+ as_fn_error $? "Could not create directory $installdir" "$LINENO" 5
+ fi
+ tmpfile=`mktemp $installdir/cups.XXXXXXXXX`
+ touch $tmpfile
+ if test ! -f $tmpfile; then
+ as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5
+ fi
+
+ # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip
+ # $tmpfile is the local file name for the downloaded file.
+ VALID_TOOL=no
+ if test "x$BDEPS_FTP" = xwget; then
+ VALID_TOOL=yes
+ wget -O $tmpfile $with_builddeps_server/$resource
+ fi
+ if test "x$BDEPS_FTP" = xlftp; then
+ VALID_TOOL=yes
+ lftp -c "get $with_builddeps_server/$resource -o $tmpfile"
+ fi
+ if test "x$BDEPS_FTP" = xftp; then
+ VALID_TOOL=yes
+ FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'`
+ FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'`
+ FTPUSERPWD=${FTPSERVER%%@*}
+ if test "x$FTPSERVER" != "x$FTPUSERPWD"; then
+ FTPUSER=${userpwd%%:*}
+ FTPPWD=${userpwd#*@}
+ FTPSERVER=${FTPSERVER#*@}
+ else
+ FTPUSER=ftp
+ FTPPWD=ftp
+ fi
+ # the "pass" command does not work on some
+ # ftp clients (read ftp.exe) but if it works,
+ # passive mode is better!
+ (\
+ echo "user $FTPUSER $FTPPWD" ;\
+ echo "pass" ;\
+ echo "bin" ;\
+ echo "get $FTPPATH $tmpfile" ;\
+ ) | ftp -in $FTPSERVER
+ fi
+ if test "x$VALID_TOOL" != xyes; then
+ as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5
+ fi
+
+ mv $tmpfile $installdir/$filename
+ if test ! -s $installdir/$filename; then
+ as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5
+ fi
+ case "$extension" in
+ zip) echo "Unzipping $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked)
+ ;;
+ tar.gz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ tgz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5
+ ;;
+ esac
+ fi
+ if test -f $installdir/$filename.unpacked; then
+ depdir=$installdir
+ fi
+
+ fi
+ # Source the builddeps file again, because in the previous command, the depdir
+ # was updated to point at the current build dependency install directory.
+ . $builddepsfile
+ # Now extract variables from the builddeps.conf files.
+ theroot=${builddep_cups_ROOT}
+ thecflags=${builddep_cups_CFLAGS}
+ thelibs=${builddep_cups_LIBS}
+ if test "x$depdir" = x; then
+ as_fn_error $? "Could not download build dependency cups" "$LINENO" 5
+ fi
+ CUPS=$depdir
+ if test "x$theroot" != x; then
+ CUPS="$theroot"
+ fi
+ if test "x$thecflags" != x; then
+ CUPS_CFLAGS="$thecflags"
+ fi
+ if test "x$thelibs" != x; then
+ CUPS_LIBS="$thelibs"
+ fi
+ CUPS_FOUND=yes
+
+ fi
+
+ fi
+
+ fi
+ if test "x$CUPS_FOUND" = xno; then
+ # Are the cups headers installed in the default /usr/include location?
+ for ac_header in cups/cups.h cups/ppd.h
+do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+ cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ CUPS_FOUND=yes
+ CUPS_CFLAGS=
+ CUPS_LIBS="-lcups"
+ DEFAULT_CUPS=yes
+fi
+
+done
+
+ fi
+ if test "x$CUPS_FOUND" = xno; then
+ # Getting nervous now? Lets poke around for standard Solaris third-party
+ # package installation locations.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers and libs" >&5
+$as_echo_n "checking for cups headers and libs... " >&6; }
+ if test -s /opt/sfw/cups/include/cups/cups.h; then
+ # An SFW package seems to be installed!
+ CUPS_FOUND=yes
+ CUPS_CFLAGS="-I/opt/sfw/cups/include"
+ CUPS_LIBS="-L/opt/sfw/cups/lib -lcups"
+ elif test -s /opt/csw/include/cups/cups.h; then
+ # A CSW package seems to be installed!
+ CUPS_FOUND=yes
+ CUPS_CFLAGS="-I/opt/csw/include"
+ CUPS_LIBS="-L/opt/csw/lib -lcups"
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5
+$as_echo "$CUPS_FOUND" >&6; }
+ fi
+ if test "x$CUPS_FOUND" = xno; then
+ help_on_build_dependency cups
+ as_fn_error $? "Could not find cups! $HELP_MSG " "$LINENO" 5
+ fi
+fi
+
+
+
+
+###############################################################################
+#
+# The ubiquitous freetype2 library is used to render fonts.
+#
+
+# Check whether --with-freetype was given.
+if test "${with_freetype+set}" = set; then :
+ withval=$with_freetype;
+fi
+
+
+# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree
+USING_SYSTEM_FT_LIB=false
+
+if test "x$FREETYPE2_NOT_NEEDED" = xyes; then
+ if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: freetype not used, so --with-freetype is ignored" >&5
+$as_echo "$as_me: WARNING: freetype not used, so --with-freetype is ignored" >&2;}
+ fi
+ FREETYPE2_CFLAGS=
+ FREETYPE2_LIBS=
+ FREETYPE2_LIB_PATH=
+else
+ FREETYPE2_FOUND=no
+
+ if test "x$with_freetype" != x; then
+
+ # Fail with message the path to freetype if var with_freetype contains a path with no spaces in it.
+ # Unless on Windows, where we can rewrite the path.
+ HAS_SPACE=`echo "$with_freetype" | grep " "`
+ if test "x$HAS_SPACE" != x; then
+ if test "x$BUILD_OS" = "xwindows"; then
+ with_freetype=`$CYGPATH -s -m -a "$with_freetype"`
+ with_freetype=`$CYGPATH -u "$with_freetype"`
+ else
+ as_fn_error $? "You cannot have spaces in the path to freetype! \"$with_freetype\"" "$LINENO" 5
+ fi
+ fi
+
+ FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype"
+ if test "x$HOST_OS" = xwindows; then
+ FREETYPE2_LIBS="$with_freetype/lib/freetype.lib"
+ fi
+ FREETYPE2_LIB_PATH="$with_freetype/lib"
+ FREETYPE2_CFLAGS="-I$with_freetype/include"
+ if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then
+ FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include"
+ fi
+ FREETYPE2_FOUND=yes
+ if test "x$FREETYPE2_FOUND" = xyes; then
+ # Verify that the directories exist
+ if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then
+ as_fn_error $? "Could not find the expected directories $with_freetype/lib and $with_freetype/include" "$LINENO" 5
+ fi
+ # List the contents of the lib.
+ FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null`
+ if test "x$FREETYPELIB" = x; then
+ as_fn_error $? "Could not find libfreetype.se nor freetype.dll in $with_freetype/lib" "$LINENO" 5
+ fi
+ # Check one h-file
+ if ! test -s "$with_freetype/include/ft2build.h"; then
+ as_fn_error $? "Could not find $with_freetype/include/ft2build.h" "$LINENO" 5
+ fi
+ fi
+ fi
+ if test "x$FREETYPE2_FOUND" = xno; then
+
+
+ if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
+ # Source the builddeps file again, to make sure it uses the latest variables!
+ . $builddepsfile
+ # Look for a host and build machine specific resource!
+ eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}}
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a host specific resource
+ eval resource=\${builddep_freetype2_HOST_${rewritten_host_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a build specific resource
+ eval resource=\${builddep_freetype2_BUILD_${rewritten_build_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a generic resource
+ # (The freetype2 comes from M4 and not the shell, thus no need for eval here.)
+ resource=${builddep_freetype2}
+ fi
+ if test "x$resource" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for freetype2" >&5
+$as_echo "$as_me: Using builddeps $resource for freetype2" >&6;}
+ # If the resource in the builddeps.conf file is an existing directory,
+ # for example /java/linux/cups
+ if test -d ${resource}; then
+ depdir=${resource}
+ else
+
+# freetype2 is for example mymodule
+# $resource is for example libs/general/libmymod_1_2_3.zip
+# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps
+# $with_builddeps_dir is for example /localhome/builddeps
+# depdir is the name of the variable into which we store the depdir, eg MYMOD
+# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and
+# unzip into the directory: /localhome/builddeps/libmymod_1_2_3
+ filename=`basename $resource`
+ filebase=`echo $filename | sed 's/\.[^\.]*$//'`
+ filebase=${filename%%.*}
+ extension=${filename#*.}
+ installdir=$with_builddeps_dir/$filebase
+ if test ! -f $installdir/$filename.unpacked; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&5
+$as_echo "$as_me: Downloading build dependency freetype2 from $with_builddeps_server/$resource and installing into $installdir" >&6;}
+ if test ! -d $installdir; then
+ mkdir -p $installdir
+ fi
+ if test ! -d $installdir; then
+ as_fn_error $? "Could not create directory $installdir" "$LINENO" 5
+ fi
+ tmpfile=`mktemp $installdir/freetype2.XXXXXXXXX`
+ touch $tmpfile
+ if test ! -f $tmpfile; then
+ as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5
+ fi
+
+ # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip
+ # $tmpfile is the local file name for the downloaded file.
+ VALID_TOOL=no
+ if test "x$BDEPS_FTP" = xwget; then
+ VALID_TOOL=yes
+ wget -O $tmpfile $with_builddeps_server/$resource
+ fi
+ if test "x$BDEPS_FTP" = xlftp; then
+ VALID_TOOL=yes
+ lftp -c "get $with_builddeps_server/$resource -o $tmpfile"
+ fi
+ if test "x$BDEPS_FTP" = xftp; then
+ VALID_TOOL=yes
+ FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'`
+ FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'`
+ FTPUSERPWD=${FTPSERVER%%@*}
+ if test "x$FTPSERVER" != "x$FTPUSERPWD"; then
+ FTPUSER=${userpwd%%:*}
+ FTPPWD=${userpwd#*@}
+ FTPSERVER=${FTPSERVER#*@}
+ else
+ FTPUSER=ftp
+ FTPPWD=ftp
+ fi
+ # the "pass" command does not work on some
+ # ftp clients (read ftp.exe) but if it works,
+ # passive mode is better!
+ (\
+ echo "user $FTPUSER $FTPPWD" ;\
+ echo "pass" ;\
+ echo "bin" ;\
+ echo "get $FTPPATH $tmpfile" ;\
+ ) | ftp -in $FTPSERVER
+ fi
+ if test "x$VALID_TOOL" != xyes; then
+ as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5
+ fi
+
+ mv $tmpfile $installdir/$filename
+ if test ! -s $installdir/$filename; then
+ as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5
+ fi
+ case "$extension" in
+ zip) echo "Unzipping $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked)
+ ;;
+ tar.gz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ tgz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5
+ ;;
+ esac
+ fi
+ if test -f $installdir/$filename.unpacked; then
+ depdir=$installdir
+ fi
+
+ fi
+ # Source the builddeps file again, because in the previous command, the depdir
+ # was updated to point at the current build dependency install directory.
+ . $builddepsfile
+ # Now extract variables from the builddeps.conf files.
+ theroot=${builddep_freetype2_ROOT}
+ thecflags=${builddep_freetype2_CFLAGS}
+ thelibs=${builddep_freetype2_LIBS}
+ if test "x$depdir" = x; then
+ as_fn_error $? "Could not download build dependency freetype2" "$LINENO" 5
+ fi
+ FREETYPE2=$depdir
+ if test "x$theroot" != x; then
+ FREETYPE2="$theroot"
+ fi
+ if test "x$thecflags" != x; then
+ FREETYPE2_CFLAGS="$thecflags"
+ fi
+ if test "x$thelibs" != x; then
+ FREETYPE2_LIBS="$thelibs"
+ fi
+ FREETYPE2_FOUND=yes
+ else FREETYPE2_FOUND=no
+
+ fi
+ else FREETYPE2_FOUND=no
+
+ fi
+
+ USING_SYSTEM_FT_LIB=true
+ fi
+ if test "x$FREETYPE2_FOUND" = xno; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FREETYPE2" >&5
+$as_echo_n "checking for FREETYPE2... " >&6; }
+
+if test -n "$FREETYPE2_CFLAGS"; then
+ pkg_cv_FREETYPE2_CFLAGS="$FREETYPE2_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags "freetype2" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$FREETYPE2_LIBS"; then
+ pkg_cv_FREETYPE2_LIBS="$FREETYPE2_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_FREETYPE2_LIBS=`$PKG_CONFIG --libs "freetype2" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "freetype2" 2>&1`
+ else
+ FREETYPE2_PKG_ERRORS=`$PKG_CONFIG --print-errors "freetype2" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$FREETYPE2_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ FREETYPE2_FOUND=no
+elif test $pkg_failed = untried; then
+ FREETYPE2_FOUND=no
+else
+ FREETYPE2_CFLAGS=$pkg_cv_FREETYPE2_CFLAGS
+ FREETYPE2_LIBS=$pkg_cv_FREETYPE2_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ FREETYPE2_FOUND=yes
+fi
+ USING_SYSTEM_FT_LIB=true
+ fi
+ if test "x$FREETYPE2_FOUND" = xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard locations" >&5
+$as_echo_n "checking for freetype in some standard locations... " >&6; }
+
+ if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then
+ DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include"
+ DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype"
+ fi
+ if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then
+ DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2"
+ DEFAULT_FREETYPE_LIBS="-lfreetype"
+ fi
+
+ PREV_CXXCFLAGS="$CXXFLAGS"
+ PREV_LDFLAGS="$LDFLAGS"
+ CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS"
+ LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+ #include FT_FREETYPE_H
+ int main() { return 0; }
+
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+
+ # Yes, the default cflags and libs did the trick.
+ FREETYPE2_FOUND=yes
+ FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS"
+ FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS"
+
+else
+
+ FREETYPE2_FOUND=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CXXCFLAGS="$PREV_CXXFLAGS"
+ LDFLAGS="$PREV_LDFLAGS"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE2_FOUND" >&5
+$as_echo "$FREETYPE2_FOUND" >&6; }
+ USING_SYSTEM_FT_LIB=true
+ fi
+ if test "x$FREETYPE2_FOUND" = xno; then
+ help_on_build_dependency freetype2
+ as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5
+ fi
+fi
+
+
+
+
+
+
+###############################################################################
+#
+# Check for alsa headers and libraries. Used on Linux/GNU systems.
+#
+
+# Check whether --with-alsa was given.
+if test "${with_alsa+set}" = set; then :
+ withval=$with_alsa;
+fi
+
+
+# Check whether --with-alsa-include was given.
+if test "${with_alsa_include+set}" = set; then :
+ withval=$with_alsa_include;
+fi
+
+
+# Check whether --with-alsa-lib was given.
+if test "${with_alsa_lib+set}" = set; then :
+ withval=$with_alsa_lib;
+fi
+
+
+if test "x$ALSA_NOT_NEEDED" = xyes; then
+ if test "x$with_alsa" != x || test "x$with_alsa-include" != x || test "x$with_alsa-lib" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: alsa not used, so --with-alsa is ignored" >&5
+$as_echo "$as_me: WARNING: alsa not used, so --with-alsa is ignored" >&2;}
+ fi
+ ALSA_CFLAGS=
+ ALSA_LIBS=
+else
+ ALSA_FOUND=no
+
+ if test "x$with_alsa" = xno || test "x$with_alsa-include" = xno || test "x$with_alsa-lib" = xno; then
+ as_fn_error $? "It is not possible to disable the use of alsa. Remove the --without-alsa option." "$LINENO" 5
+ fi
+
+ if test "x$with_alsa" != x; then
+ ALSA_LIBS="-L$with_alsa/lib -lalsa"
+ ALSA_CFLAGS="-I$with_alsa/include"
+ ALSA_FOUND=yes
+ fi
+ if test "x$with_alsa-include" != x; then
+ ALSA_CFLAGS="-I$with_alsa/include"
+ ALSA_FOUND=yes
+ fi
+ if test "x$with_alsa-lib" != x; then
+ ALSA_LIBS="-L$with_alsa/lib -lalsa"
+ ALSA_FOUND=yes
+ fi
+ if test "x$ALSA_FOUND" = xno; then
+
+
+ if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
+ # Source the builddeps file again, to make sure it uses the latest variables!
+ . $builddepsfile
+ # Look for a host and build machine specific resource!
+ eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}}
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a host specific resource
+ eval resource=\${builddep_alsa_HOST_${rewritten_host_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a build specific resource
+ eval resource=\${builddep_alsa_BUILD_${rewritten_build_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a generic resource
+ # (The alsa comes from M4 and not the shell, thus no need for eval here.)
+ resource=${builddep_alsa}
+ fi
+ if test "x$resource" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for alsa" >&5
+$as_echo "$as_me: Using builddeps $resource for alsa" >&6;}
+ # If the resource in the builddeps.conf file is an existing directory,
+ # for example /java/linux/cups
+ if test -d ${resource}; then
+ depdir=${resource}
+ else
+
+# alsa is for example mymodule
+# $resource is for example libs/general/libmymod_1_2_3.zip
+# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps
+# $with_builddeps_dir is for example /localhome/builddeps
+# depdir is the name of the variable into which we store the depdir, eg MYMOD
+# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and
+# unzip into the directory: /localhome/builddeps/libmymod_1_2_3
+ filename=`basename $resource`
+ filebase=`echo $filename | sed 's/\.[^\.]*$//'`
+ filebase=${filename%%.*}
+ extension=${filename#*.}
+ installdir=$with_builddeps_dir/$filebase
+ if test ! -f $installdir/$filename.unpacked; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&5
+$as_echo "$as_me: Downloading build dependency alsa from $with_builddeps_server/$resource and installing into $installdir" >&6;}
+ if test ! -d $installdir; then
+ mkdir -p $installdir
+ fi
+ if test ! -d $installdir; then
+ as_fn_error $? "Could not create directory $installdir" "$LINENO" 5
+ fi
+ tmpfile=`mktemp $installdir/alsa.XXXXXXXXX`
+ touch $tmpfile
+ if test ! -f $tmpfile; then
+ as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5
+ fi
+
+ # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip
+ # $tmpfile is the local file name for the downloaded file.
+ VALID_TOOL=no
+ if test "x$BDEPS_FTP" = xwget; then
+ VALID_TOOL=yes
+ wget -O $tmpfile $with_builddeps_server/$resource
+ fi
+ if test "x$BDEPS_FTP" = xlftp; then
+ VALID_TOOL=yes
+ lftp -c "get $with_builddeps_server/$resource -o $tmpfile"
+ fi
+ if test "x$BDEPS_FTP" = xftp; then
+ VALID_TOOL=yes
+ FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'`
+ FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'`
+ FTPUSERPWD=${FTPSERVER%%@*}
+ if test "x$FTPSERVER" != "x$FTPUSERPWD"; then
+ FTPUSER=${userpwd%%:*}
+ FTPPWD=${userpwd#*@}
+ FTPSERVER=${FTPSERVER#*@}
+ else
+ FTPUSER=ftp
+ FTPPWD=ftp
+ fi
+ # the "pass" command does not work on some
+ # ftp clients (read ftp.exe) but if it works,
+ # passive mode is better!
+ (\
+ echo "user $FTPUSER $FTPPWD" ;\
+ echo "pass" ;\
+ echo "bin" ;\
+ echo "get $FTPPATH $tmpfile" ;\
+ ) | ftp -in $FTPSERVER
+ fi
+ if test "x$VALID_TOOL" != xyes; then
+ as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5
+ fi
+
+ mv $tmpfile $installdir/$filename
+ if test ! -s $installdir/$filename; then
+ as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5
+ fi
+ case "$extension" in
+ zip) echo "Unzipping $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked)
+ ;;
+ tar.gz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ tgz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5
+ ;;
+ esac
+ fi
+ if test -f $installdir/$filename.unpacked; then
+ depdir=$installdir
+ fi
+
+ fi
+ # Source the builddeps file again, because in the previous command, the depdir
+ # was updated to point at the current build dependency install directory.
+ . $builddepsfile
+ # Now extract variables from the builddeps.conf files.
+ theroot=${builddep_alsa_ROOT}
+ thecflags=${builddep_alsa_CFLAGS}
+ thelibs=${builddep_alsa_LIBS}
+ if test "x$depdir" = x; then
+ as_fn_error $? "Could not download build dependency alsa" "$LINENO" 5
+ fi
+ ALSA=$depdir
+ if test "x$theroot" != x; then
+ ALSA="$theroot"
+ fi
+ if test "x$thecflags" != x; then
+ ALSA_CFLAGS="$thecflags"
+ fi
+ if test "x$thelibs" != x; then
+ ALSA_LIBS="$thelibs"
+ fi
+ ALSA_FOUND=yes
+ else ALSA_FOUND=no
+
+ fi
+ else ALSA_FOUND=no
+
+ fi
+
+ fi
+ if test "x$ALSA_FOUND" = xno; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ALSA" >&5
+$as_echo_n "checking for ALSA... " >&6; }
+
+if test -n "$ALSA_CFLAGS"; then
+ pkg_cv_ALSA_CFLAGS="$ALSA_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "alsa") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_ALSA_CFLAGS=`$PKG_CONFIG --cflags "alsa" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$ALSA_LIBS"; then
+ pkg_cv_ALSA_LIBS="$ALSA_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "alsa") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_ALSA_LIBS=`$PKG_CONFIG --libs "alsa" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ ALSA_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "alsa" 2>&1`
+ else
+ ALSA_PKG_ERRORS=`$PKG_CONFIG --print-errors "alsa" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$ALSA_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ ALSA_FOUND=no
+elif test $pkg_failed = untried; then
+ ALSA_FOUND=no
+else
+ ALSA_CFLAGS=$pkg_cv_ALSA_CFLAGS
+ ALSA_LIBS=$pkg_cv_ALSA_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ ALSA_FOUND=yes
+fi
+ fi
+ if test "x$ALSA_FOUND" = xno; then
+ for ac_header in alsa/asoundlib.h
+do :
+ ac_fn_cxx_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_alsa_asoundlib_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_ALSA_ASOUNDLIB_H 1
+_ACEOF
+ ALSA_FOUND=yes
+ ALSA_CFLAGS=-Iignoreme
+ ALSA_LIBS=-lasound
+ DEFAULT_ALSA=yes
+else
+ ALSA_FOUND=no
+fi
+
+done
+
+ fi
+ if test "x$ALSA_FOUND" = xno; then
+ help_on_build_dependency alsa
+ as_fn_error $? "Could not find alsa! $HELP_MSG " "$LINENO" 5
+ fi
+fi
+
+
+
+
+###############################################################################
+#
+# Check for pulse audio headers and libraries.
+#
+PULSE_FOUND=no
+
+# Check whether --with-pulse was given.
+if test "${with_pulse+set}" = set; then :
+ withval=$with_pulse;
+fi
+
+
+# Check whether --with-pulse-include was given.
+if test "${with_pulse_include+set}" = set; then :
+ withval=$with_pulse_include;
+fi
+
+
+# Check whether --with-pulse-lib was given.
+if test "${with_pulse_lib+set}" = set; then :
+ withval=$with_pulse_lib;
+fi
+
+
+if test "x$with_pulse" != x; then
+ PULSE_LIBS="-L$with_pulse/lib -lfreetype"
+ PULSE_CFLAGS="-I$with_pulse/include"
+ PULSE_FOUND=yes
+fi
+if test "x$with_pulse-include" != x; then
+ PULSE_CFLAGS="-I$with_pulse/include"
+ PULSE_FOUND=yes
+fi
+if test "x$with_pulse-lib" != x; then
+ PULSE_LIBS="-L$with_pulse/lib -lfreetype"
+ PULSE_FOUND=yes
+fi
+if test "x$PULSE_FOUND" = xno; then
+
+
+ if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then
+ # Source the builddeps file again, to make sure it uses the latest variables!
+ . $builddepsfile
+ # Look for a host and build machine specific resource!
+ eval resource=\${builddep_pulse_BUILD_${rewritten_build_var}_HOST_${rewritten_host_var}}
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a host specific resource
+ eval resource=\${builddep_pulse_HOST_${rewritten_host_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a build specific resource
+ eval resource=\${builddep_pulse_BUILD_${rewritten_build_var}}
+ fi
+ if test "x$resource" = x; then
+ # Ok, lets instead look for a generic resource
+ # (The pulse comes from M4 and not the shell, thus no need for eval here.)
+ resource=${builddep_pulse}
+ fi
+ if test "x$resource" != x; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Using builddeps $resource for pulse" >&5
+$as_echo "$as_me: Using builddeps $resource for pulse" >&6;}
+ # If the resource in the builddeps.conf file is an existing directory,
+ # for example /java/linux/cups
+ if test -d ${resource}; then
+ depdir=${resource}
+ else
+
+# pulse is for example mymodule
+# $resource is for example libs/general/libmymod_1_2_3.zip
+# $with_builddeps_server is for example ftp://mybuilddeps.myserver.com/builddeps
+# $with_builddeps_dir is for example /localhome/builddeps
+# depdir is the name of the variable into which we store the depdir, eg MYMOD
+# Will download ftp://mybuilddeps.myserver.com/builddeps/libs/general/libmymod_1_2_3.zip and
+# unzip into the directory: /localhome/builddeps/libmymod_1_2_3
+ filename=`basename $resource`
+ filebase=`echo $filename | sed 's/\.[^\.]*$//'`
+ filebase=${filename%%.*}
+ extension=${filename#*.}
+ installdir=$with_builddeps_dir/$filebase
+ if test ! -f $installdir/$filename.unpacked; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Downloading build dependency pulse from $with_builddeps_server/$resource and installing into $installdir" >&5
+$as_echo "$as_me: Downloading build dependency pulse from $with_builddeps_server/$resource and installing into $installdir" >&6;}
+ if test ! -d $installdir; then
+ mkdir -p $installdir
+ fi
+ if test ! -d $installdir; then
+ as_fn_error $? "Could not create directory $installdir" "$LINENO" 5
+ fi
+ tmpfile=`mktemp $installdir/pulse.XXXXXXXXX`
+ touch $tmpfile
+ if test ! -f $tmpfile; then
+ as_fn_error $? "Could not create files in directory $installdir" "$LINENO" 5
+ fi
+
+ # $with_builddeps_server/$resource is the ftp://abuilddeps.server.com/libs/cups.zip
+ # $tmpfile is the local file name for the downloaded file.
+ VALID_TOOL=no
+ if test "x$BDEPS_FTP" = xwget; then
+ VALID_TOOL=yes
+ wget -O $tmpfile $with_builddeps_server/$resource
+ fi
+ if test "x$BDEPS_FTP" = xlftp; then
+ VALID_TOOL=yes
+ lftp -c "get $with_builddeps_server/$resource -o $tmpfile"
+ fi
+ if test "x$BDEPS_FTP" = xftp; then
+ VALID_TOOL=yes
+ FTPSERVER=`echo $with_builddeps_server/$resource | cut -f 3 -d '/'`
+ FTPPATH=`echo $with_builddeps_server/$resource | cut -f 4- -d '/'`
+ FTPUSERPWD=${FTPSERVER%%@*}
+ if test "x$FTPSERVER" != "x$FTPUSERPWD"; then
+ FTPUSER=${userpwd%%:*}
+ FTPPWD=${userpwd#*@}
+ FTPSERVER=${FTPSERVER#*@}
+ else
+ FTPUSER=ftp
+ FTPPWD=ftp
+ fi
+ # the "pass" command does not work on some
+ # ftp clients (read ftp.exe) but if it works,
+ # passive mode is better!
+ (\
+ echo "user $FTPUSER $FTPPWD" ;\
+ echo "pass" ;\
+ echo "bin" ;\
+ echo "get $FTPPATH $tmpfile" ;\
+ ) | ftp -in $FTPSERVER
+ fi
+ if test "x$VALID_TOOL" != xyes; then
+ as_fn_error $? "I do not know how to use the tool: $BDEPS_FTP" "$LINENO" 5
+ fi
+
+ mv $tmpfile $installdir/$filename
+ if test ! -s $installdir/$filename; then
+ as_fn_error $? "Could not download $with_builddeps_server/$resource" "$LINENO" 5
+ fi
+ case "$extension" in
+ zip) echo "Unzipping $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; $BDEPS_UNZIP $installdir/$filename > /dev/null && touch $installdir/$filename.unpacked)
+ ;;
+ tar.gz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ tgz) echo "Untaring $installdir/$filename..."
+ (cd $installdir ; rm -f $installdir/$filename.unpacked ; tar xzf $installdir/$filename && touch $installdir/$filename.unpacked)
+ ;;
+ *) as_fn_error $? "Cannot handle build depency archive with extension $extension" "$LINENO" 5
+ ;;
+ esac
+ fi
+ if test -f $installdir/$filename.unpacked; then
+ depdir=$installdir
+ fi
+
+ fi
+ # Source the builddeps file again, because in the previous command, the depdir
+ # was updated to point at the current build dependency install directory.
+ . $builddepsfile
+ # Now extract variables from the builddeps.conf files.
+ theroot=${builddep_pulse_ROOT}
+ thecflags=${builddep_pulse_CFLAGS}
+ thelibs=${builddep_pulse_LIBS}
+ if test "x$depdir" = x; then
+ as_fn_error $? "Could not download build dependency pulse" "$LINENO" 5
+ fi
+ PULSE=$depdir
+ if test "x$theroot" != x; then
+ PULSE="$theroot"
+ fi
+ if test "x$thecflags" != x; then
+ PULSE_CFLAGS="$thecflags"
+ fi
+ if test "x$thelibs" != x; then
+ PULSE_LIBS="$thelibs"
+ fi
+ PULSE_FOUND=yes
+ else PULSE_FOUND=no
+
+ fi
+ else PULSE_FOUND=no
+
+ fi
+
+fi
+if test "x$PULSE_FOUND" = xno; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBPULSE" >&5
+$as_echo_n "checking for LIBPULSE... " >&6; }
+
+if test -n "$LIBPULSE_CFLAGS"; then
+ pkg_cv_LIBPULSE_CFLAGS="$LIBPULSE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.11\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.11") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBPULSE_CFLAGS=`$PKG_CONFIG --cflags "libpulse >= 0.9.11" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$LIBPULSE_LIBS"; then
+ pkg_cv_LIBPULSE_LIBS="$LIBPULSE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpulse >= 0.9.11\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libpulse >= 0.9.11") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_LIBPULSE_LIBS=`$PKG_CONFIG --libs "libpulse >= 0.9.11" 2>/dev/null`
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ LIBPULSE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libpulse >= 0.9.11" 2>&1`
+ else
+ LIBPULSE_PKG_ERRORS=`$PKG_CONFIG --print-errors "libpulse >= 0.9.11" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$LIBPULSE_PKG_ERRORS" >&5
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ PULSE_FOUND=no
+elif test $pkg_failed = untried; then
+ PULSE_FOUND=no
+else
+ LIBPULSE_CFLAGS=$pkg_cv_LIBPULSE_CFLAGS
+ LIBPULSE_LIBS=$pkg_cv_LIBPULSE_LIBS
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ PULSE_FOUND=yes
+fi
+fi
+if test "x$PULSE_FOUND" = xno; then
+ for ac_header in pulse/pulseaudio.h
+do :
+ ac_fn_cxx_check_header_mongrel "$LINENO" "pulse/pulseaudio.h" "ac_cv_header_pulse_pulseaudio_h" "$ac_includes_default"
+if test "x$ac_cv_header_pulse_pulseaudio_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_PULSE_PULSEAUDIO_H 1
+_ACEOF
+ PULSE_FOUND=yes
+ PULSE_CFLAGS=-Iignoreme
+ PULSE_LIBS=
+ DEFAULT_PULSE=yes
+else
+ PULSE_FOUND=no
+fi
+
+done
+
+fi
+
+if test "x$PULSE_FOUND" = xno && test "x$PULSE_NOT_NEEDED" != xyes; then
+ help_on_build_dependency pulse
+ as_fn_error $? "Could not find pulse audio libraries. $HELP_MSG " "$LINENO" 5
+fi
+
+
+
+
+###############################################################################
+#
+# Check for the jpeg library
+#
+
+USE_EXTERNAL_LIBJPEG=true
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5
+$as_echo_n "checking for main in -ljpeg... " >&6; }
+if test "${ac_cv_lib_jpeg_main+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ljpeg $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_jpeg_main=yes
+else
+ ac_cv_lib_jpeg_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5
+$as_echo "$ac_cv_lib_jpeg_main" >&6; }
+if test "x$ac_cv_lib_jpeg_main" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBJPEG 1
+_ACEOF
+
+ LIBS="-ljpeg $LIBS"
+
+else
+ USE_EXTERNAL_LIBJPEG=false
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Will use jpeg decoder bundled with the OpenJDK source" >&5
+$as_echo "$as_me: Will use jpeg decoder bundled with the OpenJDK source" >&6;}
+
+fi
+
+
+
+###############################################################################
+#
+# Check for the gif library
+#
+
+USE_EXTERNAL_LIBJPEG=true
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5
+$as_echo_n "checking for main in -lgif... " >&6; }
+if test "${ac_cv_lib_gif_main+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lgif $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_gif_main=yes
+else
+ ac_cv_lib_gif_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5
+$as_echo "$ac_cv_lib_gif_main" >&6; }
+if test "x$ac_cv_lib_gif_main" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGIF 1
+_ACEOF
+
+ LIBS="-lgif $LIBS"
+
+else
+ USE_EXTERNAL_LIBGIF=false
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Will use gif decoder bundled with the OpenJDK source" >&5
+$as_echo "$as_me: Will use gif decoder bundled with the OpenJDK source" >&6;}
+
+fi
+
+
+
+###############################################################################
+#
+# Check for the zlib library
+#
+
+USE_EXTERNAL_LIBZ=true
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lz" >&5
+$as_echo_n "checking for main in -lz... " >&6; }
+if test "${ac_cv_lib_z_main+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_z_main=yes
+else
+ ac_cv_lib_z_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_main" >&5
+$as_echo "$ac_cv_lib_z_main" >&6; }
+if test "x$ac_cv_lib_z_main" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBZ 1
+_ACEOF
+
+ LIBS="-lz $LIBS"
+
+else
+ USE_EXTERNAL_LIBZ=false
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Will use zlib bundled with the OpenJDK source" >&5
+$as_echo "$as_me: Will use zlib bundled with the OpenJDK source" >&6;}
+
+fi
+
+
+
+###############################################################################
+#
+# Check if altzone exists in time.h
+#
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include
+int
+main ()
+{
+return (int)altzone;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ has_altzone=yes
+else
+ has_altzone=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+if test "x$has_altzone" = xyes; then
+
+$as_echo "#define HAVE_ALTZONE 1" >>confdefs.h
+
+fi
+
+###############################################################################
+#
+# Check the maths library
+#
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5
+$as_echo_n "checking for main in -lm... " >&6; }
+if test "${ac_cv_lib_m_main+set}" = set; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+return main ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ ac_cv_lib_m_main=yes
+else
+ ac_cv_lib_m_main=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5
+$as_echo "$ac_cv_lib_m_main" >&6; }
+if test "x$ac_cv_lib_m_main" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBM 1
+_ACEOF
+
+ LIBS="-lm $LIBS"
+
+else
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Maths library was not found" >&5
+$as_echo "$as_me: Maths library was not found" >&6;}
+
+fi
+
+
+
+###############################################################################
+#
+# Should we run the painfully slow javadoc tool?
+#
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build documentation" >&5
+$as_echo_n "checking whether to build documentation... " >&6; }
+# Check whether --enable-docs was given.
+if test "${enable_docs+set}" = set; then :
+ enableval=$enable_docs; ENABLE_DOCS="${enableval}"
+else
+ ENABLE_DOCS='no'
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_DOCS" >&5
+$as_echo "$ENABLE_DOCS" >&6; }
+
+GENERATE_DOCS=false
+if test "x$ENABLE_DOCS" = xyes; then
+ GENERATE_DOCS=true
+fi
+
+
+###############################################################################
+#
+# Should we compile nimbus swing L&F? We can probably remove this option
+# since nimbus is officially part of javax now.
+#
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build nimbus L&F" >&5
+$as_echo_n "checking whether to build nimbus L&F... " >&6; }
+# Check whether --enable-nimbus was given.
+if test "${enable_nimbus+set}" = set; then :
+ enableval=$enable_nimbus; ENABLE_NIMBUS="${enableval}"
+else
+ ENABLE_NIMBUS='yes'
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_NIMBUS" >&5
+$as_echo "$ENABLE_NIMBUS" >&6; }
+DISABLE_NIMBUS=
+if test "x$ENABLE_NIMBUS" = xno; then
+ DISABLE_NIMBUS=true
+fi
+
+
+###############################################################################
+#
+# Setup the opt flags for different compilers
+# and different operating systems.
+#
+case $COMPILER_TYPE in
+ CC )
+ D_FLAG="-g"
+ case $COMPILER_NAME in
+ gcc )
+ case $PLATFORM in
+ macosx )
+ # On MacOSX we optimize for size, something
+ # we should do for all platforms?
+ C_O_FLAG_HI="-O3"
+ C_O_FLAG_NORM="-Os"
+ C_O_FLAG_NONE="-O0"
+ ;;
+ *)
+ C_O_FLAG_HI="-O3"
+ C_O_FLAG_NORM="-O2"
+ C_O_FLAG_NONE="-O0"
+ ;;
+ esac
+ CXX_O_FLAG_HI="$C_O_FLAG_HI"
+ CXX_O_FLAG_NORM="$C_O_FLAG_NORM"
+ CXX_O_FLAG_NONE="$C_O_FLAG_NONE"
+ ;;
+ ossc )
+ case $LEGACY_HOST_CPU1 in
+ i586)
+ C_O_FLAG_HI="-xO4 -Wu,-O4~yz"
+ C_O_FLAG_NORM="-xO2 -Wu,-O2~yz"
+ C_O_FLAG_NONE=""
+ CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz"
+ CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz"
+ CXX_O_FLAG_NONE=""
+ ;;
+ sparc)
+ C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0"
+ C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0"
+ C_O_FLAG_NONE=""
+ CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
+ CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
+ CXX_O_FLAG_NONE=""
+ ;;
+ esac
+ esac
+ ;;
+ CL )
+ D_FLAG=
+ C_O_FLAG_HI="-O2"
+ C_O_FLAG_NORM="-O1"
+ C_O_FLAG_NONE="-Od"
+ CXX_O_FLAG_HI="$C_O_FLAG_HI"
+ CXX_O_FLAG_NORM="$C_O_FLAG_NORM"
+ CXX_O_FLAG_NONE="$C_O_FLAG_NONE"
+ ;;
+esac
+
+
+
+
+
+
+
+
+###############################################################################
+#
+# Setup legacy vars/targets and new vars to deal with different debug levels.
+#
+case $DEBUG_LEVEL in
+ release )
+ HOTSPOT_DEBUG_LEVEL="product"
+ HOTSPOT_EXPORT="product"
+ ;;
+ fastdebug )
+ HOTSPOT_DEBUG_LEVEL="fastdebug"
+ HOTSPOT_EXPORT="fastdebug"
+ CFLAGS="$CFLAGS $D_FLAG"
+ JAVAC_FLAGS="$JAVAC_FLAGS -g"
+ ;;
+ slowdebug )
+ HOTSPOT_DEBUG_LEVEL="jvmg"
+ HOTSPOT_EXPORT="debug"
+ CFLAGS="$CFLAGS $D_FLAG"
+ C_O_FLAG_HI="$C_O_FLAG_NONE"
+ C_O_FLAG_NORM="$C_O_FLAG_NONE"
+ CXX_O_FLAG_HI="$CXX_O_FLAG_NONE"
+ CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE"
+ JAVAC_FLAGS="$JAVAC_FLAGS -g"
+ ;;
+esac
+
+###############################################################################
+#
+# Generate the legacy makefile targets for hotspot.
+# The hotspot api for selecting the build artifacts, really, needs to be improved.
+#
+HOTSPOT_TARGET=""
+
+if test "x$JVM_VARIANT_SERVER" = xtrue; then
+ HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} "
+fi
+
+if test "x$JVM_VARIANT_CLIENT" = xtrue; then
+ HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 "
+fi
+
+if test "x$JVM_VARIANT_KERNEL" = xtrue; then
+ HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel "
+fi
+
+if test "x$JVM_VARIANT_ZERO" = xtrue; then
+ HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero "
+fi
+
+if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then
+ HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark "
+fi
+
+HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT"
+
+###############################################################################
+#
+# Setup all directories for the subrepoes and the arguments to the sub makes.
+#
+LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools"
+LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist"
+LANGTOOLS_MAKE_ARGS=""
+
+
+
+
+CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba"
+CORBA_DIST="$OUTPUT_ROOT/corba/dist"
+CORBA_MAKE_ARGS=""
+
+
+
+
+JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp"
+JAXP_DIST="$OUTPUT_ROOT/jaxp/dist"
+JAXP_MAKE_ARGS=""
+
+
+
+
+JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws"
+JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist"
+JAXWS_MAKE_ARGS=""
+
+
+
+
+HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot"
+HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist"
+HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET"
+
+
+
+
+JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk"
+JDK_MAKE_ARGS="ALT_OUTPUTDIR=\"$OUTPUT_ROOT/jdk\""
+
+
+
+IMAGES_OUTPUTDIR=$OUTPUT_ROOT/images
+IMAGES_MAKE_ARGS="ALT_OUTPUTDIR=$OUTPUT_ROOT/jdk \
+ SHARE_SRC=$JDK_TOPDIR/src/share \
+ PLATFORM_SRC=$JDK_TOPDIR/src/$LEGACY_HOST_OS_API \
+ TEMPDIR=$IMAGES_OUTPUTDIR/tmp \
+ ABS_TEMPDIR=$IMAGES_OUTPUTDIR/tmp "
+
+
+
+###############################################################################
+#
+# Now setup the CFLAGS and LDFLAGS for the JDK build.
+# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build.
+#
+case $COMPILER_NAME in
+ gcc )
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses -pipe -fno-omit-frame-pointer \
+ -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
+ CFLAGS_JDK="$CFLAGS_JDK -fno-strict-aliasing"
+ ;;
+ ossc )
+ CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa REQUIRED -v -mt -norunpath -xnolib"
+ CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt REQUIRED -features=no%except -DCC_NOEX"
+ ;;
+ cl )
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \
+ -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \
+ -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \
+ -DWIN32 -DIAL"
+ case $LEGACY_HOST_CPU1 in
+ i?86 )
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86"
+ ;;
+ amd64 )
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64"
+ ;;
+ esac
+ ;;
+esac
+
+CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64"
+
+# The package path is used only on macosx?
+PACKAGE_PATH=/opt/local
+
+
+# Sometimes we use a cpu dir (.../lib/amd64/server)
+# Sometimes not (.../lib/server)
+LIBARCHDIR="$LEGACY_HOST_CPU2/"
+if test "x$ENDIAN" = xlittle; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN"
+else
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN"
+fi
+if test "x$HOST_OS" = xlinux; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX"
+fi
+if test "x$HOST_OS" = xwindows; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS"
+fi
+if test "x$HOST_OS" = xsolaris; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS"
+fi
+if test "x$HOST_OS" = xmacosx; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE"
+ LIBARCHDIR=""
+fi
+if test "x$HOST_OS" = xbsd; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE"
+fi
+if test "x$DEBUG_LEVEL" = xrelease; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG"
+else
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG"
+fi
+
+CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_HOST_CPU1\"' -D$LEGACY_HOST_CPU1"
+CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'"
+
+CCXXFLAGS_JDK="$CCXXFLAGS_JDK \
+ -I${JDK_OUTPUTDIR}/include \
+ -I${JDK_OUTPUTDIR}/include/$PLATFORM \
+ -I${JDK_TOPDIR}/src/share/javavm/export \
+ -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/javavm/export \
+ -I${JDK_TOPDIR}/src/share/native/common \
+ -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/native/common"
+
+# The shared libraries are compiled using the picflag.
+CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA"
+CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG"
+
+# Executable flags
+CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK"
+CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK"
+
+# Now this is odd. The JDK native libraries have to link against libjvm.so
+# On 32-bit machines there is normally two distinct libjvm.so:s, client and server.
+# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library
+# is identical for client and server? Yes. Which is picked at runtime (client or server)?
+# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following
+# libraries will link to whatever is in memory. Yuck.
+#
+# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh.
+if test "x$COMPILER_TYPE" = xCL; then
+ LDFLAGS_JDKLIB="$LDFLAGS -libpath:${JDK_OUTPUTDIR}/lib jvm.lib java.lib"
+ LDFLAGS_JDKLIB_SUFFIX=""
+ if test "x$HOST_CPU_BITS" = "x64"; then
+ LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj64/jli.lib"
+ else
+ LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj/jli.lib"
+ fi
+ LDFLAGS_JDKEXE_SUFFIX=""
+else
+ # If this is a --hash-style=gnu system, use --hash-style=both, why?
+ HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'`
+ if test -n "$HAS_GNU_HASH"; then
+ # And since we now know that the linker is gnu, then add -z defs, to forbid
+ # undefined symbols in object files.
+ LDFLAGS="$LDFLAGS -Xlinker --hash-style=both -Xlinker -z -Xlinker defs"
+ if test "x$DEBUG_LEVEL" == "xrelease"; then
+ # When building release libraries, tell the linker optimize them.
+ # Should this be supplied to the OSS linker as well?
+ LDFLAGS="$LDFLAGS -Xlinker -O1"
+ fi
+ fi
+
+ LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \
+ -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \
+ -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}"
+ LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava"
+ if test "x$COMPILER_NAME" = xossc; then
+ LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc"
+ fi
+
+ # Only the jli library is explicitly linked when the launchers are built.
+ # The libjvm is then dynamically loaded/linked by the launcher.
+ LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli"
+ LDFLAGS_JDKEXE_SUFFIX="-ljli"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+###############################################################################
+#
+# statically link libstdc++ before C++ ABI is stablized on Linux unless
+# dynamic build is configured on command line.
+#
+# Check whether --enable-static-link-stdc++ was given.
+if test "${enable_static_link_stdc__+set}" = set; then :
+ enableval=$enable_static_link_stdc__;
+else
+
+ enable_static_link_stdc__=yes
+
+fi
+
+
+if test "x$HOST_OS" = xlinux; then
+ # Test if -lstdc++ works.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if dynamic link of stdc++ is possible" >&5
+$as_echo_n "checking if dynamic link of stdc++ is possible... " >&6; }
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ OLD_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -lstdc++"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ has_dynamic_libstdcxx=yes
+else
+ has_dynamic_libstdcxx=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ CXXFLAGS="$OLD_CXXFLAGS"
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_dynamic_libstdcxx" >&5
+$as_echo "$has_dynamic_libstdcxx" >&6; }
+
+ # Test if stdc++ can be linked statically.
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if static link of stdc++ is possible" >&5
+$as_echo_n "checking if static link of stdc++ is possible... " >&6; }
+ STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic"
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ OLD_LIBS="$LIBS"
+ OLD_CXX="$CXX"
+ LIBS="$STATIC_STDCXX_FLAGS"
+ CXX="$CC"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+ has_static_libstdcxx=yes
+else
+ has_static_libstdcxx=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ LIBS="$OLD_LIBS"
+ CXX="$OLD_CXX"
+ ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $has_static_libstdcxx" >&5
+$as_echo "$has_static_libstdcxx" >&6; }
+
+ if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then
+ as_fn_error $? "I cannot link to stdc++! Neither dynamically nor statically." "$LINENO" 5
+ fi
+
+ if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Static linking of libstdc++ was not possible reverting to dynamic linking." >&5
+$as_echo "$as_me: Static linking of libstdc++ was not possible reverting to dynamic linking." >&6;}
+ enable_static_link_stdc__=no
+ fi
+
+ if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: Dynamic linking of libstdc++ was not possible reverting to static linking." >&5
+$as_echo "$as_me: Dynamic linking of libstdc++ was not possible reverting to static linking." >&6;}
+ enable_static_link_stdc__=yes
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libstdc++" >&5
+$as_echo_n "checking how to link with libstdc++... " >&6; }
+ if test "x$enable_static_link_stdc__" = xyes; then
+ LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS"
+ LDCXX="$CC"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5
+$as_echo "static" >&6; }
+ else
+ LIBCXX="$LIBCXX -lstdc++"
+ LDCXX="$CXX"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic" >&5
+$as_echo "dynamic" >&6; }
+ fi
+fi
+
+###############################################################################
+#
+# Could someone enlighten this configure script with a comment about libCrun?
+# The LEGACY_HOST_CPU3 is the setting for ISA_DIR.
+#
+if test "x$HOST_OS" = xsolaris; then
+ LIBCXX="$LIBCXX /usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1"
+fi
+
+
+
+###############################################################################
+#
+# Misc
+#
+
+# Control wether Hotspot runs Queens test after build.
+# Check whether --enable-hotspot-test-in-build was given.
+if test "${enable_hotspot_test_in_build+set}" = set; then :
+ enableval=$enable_hotspot_test_in_build;
+else
+ enable_hotspot_test_in_build=no
+fi
+
+if test "x$enable_hotspot_test_in_build" = "xyes"; then
+ TEST_IN_BUILD=true
+else
+ TEST_IN_BUILD=false
+fi
+
+
+###############################################################################
+#
+# A helpful message at the end of the configure run.
+#
+if test "x$CCACHE_FOUND" = x && test "x$GCC" = xyes; then
+ help_on_build_dependency ccache
+
+ printf "\nTip of the day:\nYou should really install ccache version 3.1.4 or newer.\n"
+ printf "It gives a tremendous speedup for C++ recompilations with precompiled headers!\n"
+fi
+
+if test "x$CCACHE_FOUND" != x && test "x$HAS_GOOD_CCACHE" = x; then
+ printf "You have a ccache installed, but it is a version prior to 3.1.4. Try upgrading.\n"
+fi
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ test "x$cache_file" != "x/dev/null" &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ cat confcache >$cache_file
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -p'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -p'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -p'
+ fi
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+ as_test_x='test -x'
+else
+ if ls -dL / >/dev/null 2>&1; then
+ as_ls_L_option=L
+ else
+ as_ls_L_option=
+ fi
+ as_test_x='
+ eval sh -c '\''
+ if test -d "$1"; then
+ test -d "$1/.";
+ else
+ case $1 in #(
+ -*)set "./$1";;
+ esac;
+ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
+ ???[sx]*):;;*)false;;esac;fi
+ '\'' sh
+ '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by openjdk $as_me version-0.1, which was
+generated by GNU Autoconf 2.67. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Report bugs to ."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+openjdk config.status version-0.1
+configured by $0, generated by GNU Autoconf 2.67,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2010 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "$OUTPUT_ROOT/config.h") CONFIG_HEADERS="$CONFIG_HEADERS $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" ;;
+ "$OUTPUT_ROOT/spec.gmk") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" ;;
+ "$OUTPUT_ROOT/Makefile") CONFIG_FILES="$CONFIG_FILES $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp=
+ trap 'exit_status=$?
+ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' >$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_t=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_t"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' >$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS "
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$tmp/stdin"
+ case $ac_file in
+ -) cat "$tmp/out" && rm -f "$tmp/out";;
+ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
+ } >"$tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+ ;;
+
+
+ esac
+
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/common/autoconf/configure.ac b/common/autoconf/configure.ac
new file mode 100644
index 00000000000..4c6b326ecaf
--- /dev/null
+++ b/common/autoconf/configure.ac
@@ -0,0 +1,2651 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+AC_PREREQ([2.61])
+AC_INIT(openjdk, version-0.1, build-infra-dev@openjdk.java.net)
+
+AC_CONFIG_AUX_DIR([build-aux])
+
+m4_include([build-aux/pkg.m4])
+m4_include([builddeps.m4])
+m4_include([platform.m4])
+m4_include([cores.m4])
+m4_include([help.m4])
+
+# Save the command line. Do this very early, before it is lost by calling autoconf macros.
+CONFIGURE_COMMAND_LINE="$@"
+AC_SUBST(CONFIGURE_COMMAND_LINE)
+
+# Locate the directory of this script.
+SCRIPT="[$]0"
+REMOVE_SYMBOLIC_LINKS(SCRIPT)
+AUTOCONF_DIR=`dirname [$]0`
+
+# Start with tools that do not need have cross compilation support
+# and can be expected to be found in the default PATH. These tools are
+# used by configure. Nor are these tools expected to be found in the
+# devkit from the builddeps server either, since they are
+# needed to download the devkit.
+AC_PROG_AWK
+CHECK_NONEMPTY(AWK)
+AC_PATH_PROG(CAT, cat)
+CHECK_NONEMPTY(CAT)
+AC_PATH_PROG(CHMOD, chmod)
+CHECK_NONEMPTY(CHMOD)
+AC_PATH_PROG(CP, cp)
+CHECK_NONEMPTY(CP)
+AC_PATH_PROG(CPIO, cpio)
+CHECK_NONEMPTY(CPIO)
+AC_PATH_PROG(CUT, cut)
+CHECK_NONEMPTY(CUT)
+AC_PATH_PROG(DATE, date)
+CHECK_NONEMPTY(DATE)
+AC_PATH_PROG(DF, df)
+CHECK_NONEMPTY(DF)
+AC_PATH_PROG(DIFF, diff)
+CHECK_NONEMPTY(DIFF)
+# Warning echo is really, really unportable!!!!! Different
+# behaviour in bash and dash and in a lot of other shells!
+# Use printf for serious work!
+AC_PATH_PROG(ECHO, echo)
+CHECK_NONEMPTY(ECHO)
+AC_PROG_EGREP
+CHECK_NONEMPTY(EGREP)
+AC_PROG_FGREP
+CHECK_NONEMPTY(FGREP)
+
+AC_PATH_PROG(FIND, find)
+CHECK_NONEMPTY(FIND)
+CHECK_FIND_DELETE
+AC_SUBST(FIND_DELETE)
+
+AC_PROG_GREP
+CHECK_NONEMPTY(GREP)
+AC_PATH_PROG(HEAD, head)
+CHECK_NONEMPTY(HEAD)
+AC_PATH_PROG(LN, ln)
+CHECK_NONEMPTY(LN)
+AC_PATH_PROG(LS, ls)
+CHECK_NONEMPTY(LS)
+AC_PATH_PROGS(MAKE, [gmake make])
+CHECK_NONEMPTY(MAKE)
+MAKE_VERSION=`$MAKE --version | head -n 1 | grep '3.8[[12346789]]'`
+if test "x$MAKE_VERSION" = x; then
+ AC_ERROR([You must use GNU make 3.81 or newer! Please put it in the path.])
+fi
+AC_PATH_PROG(MKDIR, mkdir)
+CHECK_NONEMPTY(MKDIR)
+AC_PATH_PROG(MV, mv)
+CHECK_NONEMPTY(MV)
+AC_PATH_PROGS(NAWK, [nawk gawk awk])
+CHECK_NONEMPTY(NAWK)
+AC_PATH_PROG(PRINTF, printf)
+CHECK_NONEMPTY(PRINTF)
+AC_PATH_PROG(THEPWDCMD, pwd)
+AC_PATH_PROG(RM, rm)
+CHECK_NONEMPTY(RM)
+RM="$RM -f"
+AC_PROG_SED
+CHECK_NONEMPTY(SED)
+AC_PATH_PROG(SH, sh)
+CHECK_NONEMPTY(SH)
+AC_PATH_PROG(SORT, sort)
+CHECK_NONEMPTY(SORT)
+AC_PATH_PROG(TAR, tar)
+CHECK_NONEMPTY(TAR)
+AC_PATH_PROG(TAIL, tail)
+CHECK_NONEMPTY(TAIL)
+AC_PATH_PROG(TEE, tee)
+CHECK_NONEMPTY(TEE)
+AC_PATH_PROG(TR, tr)
+CHECK_NONEMPTY(TR)
+AC_PATH_PROG(TOUCH, touch)
+CHECK_NONEMPTY(TOUCH)
+AC_PATH_PROG(WC, wc)
+CHECK_NONEMPTY(WC)
+AC_PATH_PROG(XARGS, xargs)
+CHECK_NONEMPTY(XARGS)
+AC_PATH_PROG(ZIP, zip)
+CHECK_NONEMPTY(ZIP)
+AC_PATH_PROG(UNZIP, unzip)
+CHECK_NONEMPTY(UNZIP)
+AC_PATH_PROG(LDD, ldd)
+if test "x$LDD" = "x"; then
+ # List shared lib dependencies is used for
+ # debug output and checking for forbidden dependencies.
+ # We can build without it.
+ LDD="true"
+fi
+AC_PATH_PROG(OTOOL, otool)
+if test "x$OTOOL" = "x"; then
+ OTOOL="true"
+fi
+AC_PATH_PROG(READELF, readelf)
+AC_PATH_PROG(EXPR, expr)
+CHECK_NONEMPTY(EXPR)
+AC_PATH_PROG(FILE, file)
+CHECK_NONEMPTY(FILE)
+# Figure out the build and host system.
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+
+AC_ARG_WITH(data-model, [AS_HELP_STRING([--with-data-model],
+ [build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-data-model=32 @<:@guessed@:>@])])
+
+if test "x$with_data_model" != x && \
+ test "x$with_data_model" != x32 && \
+ test "x$with_data_model" != x64 ; then
+ AC_ERROR([The data model can only be 32 or 64!])
+fi
+# Translate the standard cpu-vendor-kernel-os quadruplets into
+# the new HOST_.... and BUILD_... and the legacy names used by
+# the openjdk build.
+# It uses $host_os $host_cpu $build_os $build_cpu and $with_data_model
+EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS
+# Now the following vars are defined.
+# HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows
+# HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince
+# HOST_OS_API=posix,winapi
+#
+# HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64
+# HOST_CPU_ARCH=x86,sparc,pcc,arm
+# HOST_CPU_BITS=32,64
+# HOST_CPU_ENDIAN=big,little
+#
+# There is also a:
+# LEGACY_HOST_CPU1=i586,amd64,.... # used to set the old var ARCH
+# LEGACY_HOST_CPU2=i386,amd64,.... # used to set the old var LIBARCH
+# LEGACY_HOST_CPU3=only sparcv9,amd64 # used to set the ISA_DIR on Solaris
+# There was also a BUILDARCH that had i486,amd64,... but we do not use that
+# in the new build.
+# LEGACY_HOST_OS_API=solaris,windows # used to select source roots
+
+DATE_WHEN_CONFIGURED=`LANG=C date`
+AC_SUBST(DATE_WHEN_CONFIGURED)
+
+# How many cores do we have on this build system?
+AC_ARG_WITH(num-cores, [AS_HELP_STRING([--with-num-cores],
+ [number of cores in the build system, e.g. --with-num-cores=8 @<:@probed@:>@])])
+if test "x$with_num_cores" = x; then
+ # The number of cores were not specified, try to probe them.
+ CHECK_CORES
+else
+ NUM_CORES=$with_num_cores
+ CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
+fi
+AC_SUBST(NUM_CORES)
+AC_SUBST(CONCURRENT_BUILD_JOBS)
+
+# How many cores do we have on this build system?
+AC_ARG_WITH(memory-size, [AS_HELP_STRING([--with-memory-size],
+ [memory (in MB) available in the build system, e.g. --with-memory-size=1024 @<:@probed@:>@])])
+if test "x$with_memory_size" = x; then
+ # The memory size was not specified, try to probe it.
+ CHECK_MEMORY_SIZE
+else
+ MEMORY_SIZE=$with_memory_size
+fi
+AC_SUBST(MEMORY_SIZE)
+
+# Where is the source? It is located two levels above the configure script.
+CURDIR="$PWD"
+cd "$AUTOCONF_DIR/../.."
+SRC_ROOT="`pwd`"
+AC_SUBST(SRC_ROOT)
+cd "$CURDIR"
+
+# For cygwin we need cygpath first, since it is used everywhere.
+AC_PATH_PROG(CYGPATH, cygpath)
+PATH_SEP=":"
+if test "x$BUILD_OS" = "xwindows"; then
+ if test "x$CYGPATH" = x; then
+ AC_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path])
+ fi
+ PATH_SEP=";"
+fi
+AC_SUBST(PATH_SEP)
+
+SPACESAFE(SRC_ROOT,[the path to the source root])
+SPACESAFE(CURDIR,[the path to the current directory])
+
+if test "x$BUILD_OS" = "xsolaris"; then
+ # Also search in /usr/ccs/bin for utilities like ar and as.
+ PATH="/usr/ccs/bin:$PATH"
+fi
+
+###############################################################################
+#
+# OpenJDK or closed
+#
+AC_ARG_ENABLE([openjdk], [AS_HELP_STRING([--enable-openjdk],
+ [build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,)
+
+if test "x$enable_openjdk" = "xyes"; then
+ OPENJDK=true
+elif test "x$enable_openjdk" = "xno"; then
+ OPENJDK=false
+elif test -d "$SRC_ROOT/jdk/src/closed"; then
+ OPENJDK=false
+else
+ OPENJDK=true
+fi
+
+if test "x$OPENJDK" = "xtrue"; then
+ SET_OPENJDK=OPENJDK=true
+fi
+
+AC_SUBST(SET_OPENJDK)
+
+###############################################################################
+#
+# JIGSAW or not. The JIGSAW variable is used during the intermediate
+# stage when we are building both the old style JDK and the new style modularized JDK.
+# When the modularized JDK is finalized, this option will go away.
+#
+AC_ARG_ENABLE([jigsaw], [AS_HELP_STRING([--enable-jigsaw],
+ [build Jigsaw images (not yet available) @<:@disabled@:>@])],,)
+
+if test "x$enable_jigsaw" = "xyes"; then
+ JIGSAW=true
+else
+ JIGSAW=false
+fi
+AC_SUBST(JIGSAW)
+
+###############################################################################
+#
+# Check which variant of the JDK that we want to build.
+# Currently we have:
+# normal: standard edition
+# embedded: cut down to a smaller footprint
+#
+# Effectively the JDK variant gives a name to a specific set of
+# modules to compile into the JDK. In the future, these modules
+# might even be Jigsaw modules.
+#
+AC_MSG_CHECKING([which variant of the JDK to build])
+AC_ARG_WITH([jdk-variant], [AS_HELP_STRING([--with-jdk-variant],
+ [JDK variant to build (normal, embedded) @<:@normal@:>@])])
+
+if test "x$with_jdk_variant" = xnormal || test "x$with_jdk_variant" = x; then
+ JAVASE_EMBEDDED=""
+ MINIMIZE_RAM_USAGE=""
+ JDK_VARIANT="normal"
+elif test "x$with_jdk_variant" = xembedded; then
+ JAVASE_EMBEDDED="JAVASE_EMBEDDED:=true"
+ MINIMIZE_RAM_USAGE="MINIMIZE_RAM_USAGE:=true"
+ JDK_VARIANT="embedded"
+else
+ AC_ERROR([The available JDK variants are: normal, embedded])
+fi
+
+AC_SUBST(JAVASE_EMBEDDED)
+AC_SUBST(MINIMIZE_RAM_USAGE)
+AC_SUBST(JDK_VARIANT)
+
+AC_MSG_RESULT([$JDK_VARIANT])
+
+###############################################################################
+#
+# Should we build a JDK/JVM with head support (ie a graphical ui)?
+# We always build headless support.
+#
+AC_MSG_CHECKING([headful support])
+AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful],
+ [build headful support (graphical UI support) @<:@enabled@:>@])],
+ [SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes])
+
+SUPPORT_HEADLESS=yes
+BUILD_HEADLESS="BUILD_HEADLESS:=true"
+
+if test "x$SUPPORT_HEADFUL" = xyes; then
+ # We are building both headful and headless.
+ BUILD_HEADLESS_ONLY=""
+ headful_msg="inlude support for both headful and headless"
+fi
+
+if test "x$SUPPORT_HEADFUL" = xno; then
+ # Thus we are building headless only.
+ BUILD_HEADLESS="BUILD_HEADLESS:=true"
+ BUILD_HEADLESS_ONLY="BUILD_HEADLESS_ONLY:=true"
+ headful_msg="headless only"
+fi
+
+AC_MSG_RESULT([$headful_msg])
+
+AC_SUBST(SUPPORT_HEADLESS)
+AC_SUBST(SUPPORT_HEADFUL)
+AC_SUBST(BUILD_HEADLESS)
+AC_SUBST(BUILD_HEADLESS_ONLY)
+
+###############################################################################
+#
+# Check which variants of the JVM that we want to build.
+# Currently we have:
+# server: normal interpreter and a tiered C1/C2 compiler
+# client: normal interpreter and C1 (no C2 compiler) (only 32-bit platforms)
+# kernel: kernel footprint JVM that passes the TCK without major performance problems,
+# ie normal interpreter and C1, only the serial GC, kernel jvmti etc
+# zero: no machine code interpreter, no compiler
+# zeroshark: zero interpreter and shark/llvm compiler backend
+AC_MSG_CHECKING([which variants of the JVM that should be built])
+AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants],
+ [JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])])
+
+if test "x$with_jvm_variants" = x; then
+ if test "x$JDK_VARIANT" = xembedded; then
+ with_jvm_variants="kernel"
+ elif test "x$HOST_CPU_BITS" = x64; then
+ with_jvm_variants="server"
+ else
+ # Yes, on 32-bit machines, the same source (almost) is compiled twice
+ # to generate two libjvm.so files. Fun, fun.
+ with_jvm_variants="client,server"
+ fi
+fi
+
+JVM_VARIANTS=",$with_jvm_variants,"
+TEST_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,//' -e 's/client,//' -e 's/kernel,//' -e 's/zero,//' -e 's/zeroshark,//'`
+
+if test "x$TEST_VARIANTS" != "x,"; then
+ AC_ERROR([The available JVM variants are: server, client, kernel, zero, zeroshark])
+fi
+AC_MSG_RESULT([$with_jvm_variants])
+
+JVM_VARIANT_SERVER=`$ECHO "$JVM_VARIANTS" | $SED -e '/,server,/!s/.*/false/g' -e '/,server,/s/.*/true/g'`
+JVM_VARIANT_CLIENT=`$ECHO "$JVM_VARIANTS" | $SED -e '/,client,/!s/.*/false/g' -e '/,client,/s/.*/true/g'`
+JVM_VARIANT_KERNEL=`$ECHO "$JVM_VARIANTS" | $SED -e '/,kernel,/!s/.*/false/g' -e '/,kernel,/s/.*/true/g'`
+JVM_VARIANT_ZERO=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zero,/!s/.*/false/g' -e '/,zero,/s/.*/true/g'`
+JVM_VARIANT_ZEROSHARK=`$ECHO "$JVM_VARIANTS" | $SED -e '/,zeroshark,/!s/.*/false/g' -e '/,zeroshark,/s/.*/true/g'`
+
+if test "x$JVM_VARIANT_CLIENT" = xtrue; then
+ if test "x$HOST_CPU_BITS" = x64; then
+ AC_ERROR([You cannot build a client JVM for a 64-bit machine.])
+ fi
+fi
+if test "x$JVM_VARIANT_KERNEL" = xtrue; then
+ if test "x$HOST_CPU_BITS" = x64; then
+ AC_ERROR([You cannot build a kernel JVM for a 64-bit machine.])
+ fi
+fi
+
+COUNT_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/server,/1/' -e 's/client,/1/' -e 's/kernel,/1/' -e 's/zero,/1/' -e 's/zeroshark,/1/'`
+# Replace the commas with AND for use in the build directory name.
+ANDED_JVM_VARIANTS=`$ECHO "$JVM_VARIANTS" | $SED -e 's/^,//' -e 's/,$//' -e 's/,/AND/'`
+if test "x$COUNT_VARIANTS" != "x,1"; then
+ AC_MSG_NOTICE([NOTE! Longer build time since we are building more than one version of the libjvm! $with_jvm_variants])
+fi
+
+AC_SUBST(JVM_VARIANTS)
+AC_SUBST(JVM_VARIANT_SERVER)
+AC_SUBST(JVM_VARIANT_CLIENT)
+AC_SUBST(JVM_VARIANT_KERNEL)
+AC_SUBST(JVM_VARIANT_ZERO)
+AC_SUBST(JVM_VARIANT_ZEROSHARK)
+
+###############################################################################
+#
+# Set the debug level
+# release: no debug information, all optimizations, no asserts.
+# fastdebug: debug information (-g), all optimizations, all asserts
+# slowdebug: debug information (-g), no optimizations, all asserts
+#
+DEBUG_LEVEL="release"
+AC_MSG_CHECKING([which debug level to use])
+AC_ARG_ENABLE([debug], [AS_HELP_STRING([--enable-debug],
+ [set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) @<:@disabled@:>@])],
+ [
+ ENABLE_DEBUG="${enableval}"
+ DEBUG_LEVEL="fastdebug"
+ ], [ENABLE_DEBUG="no"])
+
+AC_ARG_WITH([debug-level], [AS_HELP_STRING([--with-debug-level],
+ [set the debug level (release, fastdebug, slowdebug) @<:@release@:>@])],
+ [
+ DEBUG_LEVEL="${withval}"
+ if test "x$ENABLE_DEBUG" = xyes; then
+ AC_ERROR([You cannot use both --enable-debug and --with-debug-level at the same time.])
+ fi
+ ])
+AC_MSG_RESULT([$DEBUG_LEVEL])
+
+if test "x$DEBUG_LEVEL" != xrelease && \
+ test "x$DEBUG_LEVEL" != xfastdebug && \
+ test "x$DEBUG_LEVEL" != xslowdebug; then
+ AC_ERROR([Allowed debug levels are: release, fastdebug and slowdebug])
+fi
+
+case $DEBUG_LEVEL in
+ release )
+ VARIANT="OPT"
+ FASTDEBUG="false"
+ DEBUG_CLASSFILES="false"
+ BUILD_VARIANT_RELEASE=""
+ ;;
+ fastdebug )
+ VARIANT="DBG"
+ FASTDEBUG="true"
+ DEBUG_CLASSFILES="true"
+ BUILD_VARIANT_RELEASE="-fastdebug"
+ ;;
+ slowdebug )
+ VARIANT="DBG"
+ FASTDEBUG="false"
+ DEBUG_CLASSFILES="true"
+ BUILD_VARIANT_RELEASE="-debug"
+ ;;
+esac
+
+AC_SUBST(DEBUG_LEVEL)
+AC_SUBST(VARIANT)
+AC_SUBST(FASTDEBUG)
+AC_SUBST(DEBUG_CLASSFILES)
+AC_SUBST(BUILD_VARIANT_RELEASE)
+
+# Source the version numbers
+. $AUTOCONF_DIR/version.numbers
+if test "x$OPENJDK" = "xfalse"; then
+ . $AUTOCONF_DIR/closed.version.numbers
+fi
+# Now set the JDK version, milestone, build number etc.
+AC_SUBST(JDK_MAJOR_VERSION)
+AC_SUBST(JDK_MINOR_VERSION)
+AC_SUBST(JDK_MICRO_VERSION)
+AC_SUBST(JDK_UPDATE_VERSION)
+AC_SUBST(JDK_BUILD_NUMBER)
+AC_SUBST(MILESTONE)
+AC_SUBST(LAUNCHER_NAME)
+AC_SUBST(PRODUCT_NAME)
+AC_SUBST(PRODUCT_SUFFIX)
+AC_SUBST(JDK_RC_PLATFORM_NAME)
+AC_SUBST(COMPANY_NAME)
+
+COPYRIGHT_YEAR=`date +'%Y'`
+AC_SUBST(COPYRIGHT_YEAR)
+
+RUNTIME_NAME="$PRODUCT_NAME $PRODUCT_SUFFIX"
+AC_SUBST(RUNTIME_NAME)
+
+if test "x$JDK_UPDATE_VERSION" != x; then
+ JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}_${JDK_UPDATE_VERSION}"
+else
+ JDK_VERSION="${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_MICRO_VERSION}"
+fi
+AC_SUBST(JDK_VERSION)
+
+if test "x$MILESTONE" != x; then
+ RELEASE="${JDK_VERSION}-${MILESTONE}${BUILD_VARIANT_RELEASE}"
+else
+ RELEASE="${JDK_VERSION}${BUILD_VARIANT_RELEASE}"
+fi
+AC_SUBST(RELEASE)
+
+if test "x$JDK_BUILD_NUMBER" != x; then
+ FULL_VERSION="${RELEASE}-${JDK_BUILD_NUMBER}"
+else
+ JDK_BUILD_NUMBER=b00
+ BUILD_DATE=`date '+%Y_%m_%d_%H_%M'`
+ # Avoid [:alnum:] since it depends on the locale.
+ CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'`
+ USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'`
+ FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}"
+fi
+AC_SUBST(FULL_VERSION)
+COOKED_BUILD_NUMBER=`$ECHO $JDK_BUILD_NUMBER | $SED -e 's/^b//' -e 's/^0//'`
+AC_SUBST(COOKED_BUILD_NUMBER)
+
+# Test from where we are running configure, in or outside of src root.
+if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then
+ # We are running configure from the src root.
+ # Create a default ./build/host-variant-debuglevel output root.
+ OUTPUT_ROOT="$SRC_ROOT/build/${HOST_OS}-${HOST_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}"
+ mkdir -p "$OUTPUT_ROOT"
+ if test ! -d "$OUTPUT_ROOT"; then
+ AC_ERROR([Could not create build directory $OUTPUT_ROOT])
+ fi
+else
+ # We are running configure from outside of the src dir.
+ # Then use the current directory as output dir!
+ OUTPUT_ROOT="$CURDIR"
+fi
+
+SPACESAFE(OUTPUT_ROOT,[the path to the output root])
+
+# Save the arguments given to us
+echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments
+
+# Check if the VS env variables were setup prior to running configure.
+# If not, then find vcvarsall.bat and run it automatically, and integrate
+# the set env variables into the spec file.
+SETUPDEVENV="# No special vars"
+if test "x$BUILD_OS" = "xwindows"; then
+ # If vcvarsall.bat has been run, then VCINSTALLDIR is set.
+ if test "x$VCINSTALLDIR" != x; then
+ # No further setup is needed. The build will happen from this kind
+ # of shell.
+ SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt."
+ # Make sure to remind you, if you forget to run make from a cygwin bash shell
+ # that is spawned "bash -l" from a VS command prompt.
+ CHECK_FOR_VCINSTALLDIR=yes
+ AC_MSG_CHECKING([if you are running from within a VS command prompt])
+ AC_MSG_RESULT([yes])
+ else
+ # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it.
+ if test "x$VS100COMNTOOLS" != x; then
+ VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat`
+ SEARCH_ROOT="$VS100COMNTOOLS"
+ else
+ VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat`
+ SEARCH_ROOT="$PROGRAMFILES"
+ fi
+ VCPATH=`dirname "$VARSBAT"`
+ VCPATH=`cygpath -w "$VCPATH"`
+ if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then
+ AC_MSG_CHECKING([if we can find the VS installation])
+ AC_MSG_RESULT([no])
+ AC_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.])
+ fi
+ case "$LEGACY_HOST_CPU1" in
+ i?86)
+ VARSBAT_ARCH=x86
+ ;;
+ *)
+ VARSBAT_ARCH=$LEGACY_HOST_CPU1
+ ;;
+ esac
+ # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat
+ cd $OUTPUT_ROOT
+ $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH"
+ cd $CURDIR
+ if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then
+ AC_MSG_CHECKING([if we can extract the needed env variables])
+ AC_MSG_RESULT([no])
+ AC_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.])
+ fi
+ # Now set all paths and other env variables. This will allow the rest of
+ # the configure script to find and run the compiler in the proper way.
+ . $OUTPUT_ROOT/localdevenv.sh
+ AC_MSG_CHECKING([if we can find the VS installation])
+ if test "x$VCINSTALLDIR" != x; then
+ AC_MSG_RESULT([$VCINSTALLDIR])
+ else
+ AC_MSG_RESULT([no])
+ AC_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.])
+ fi
+ CHECK_FOR_VCINSTALLDIR=no
+ SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk"
+
+ AC_MSG_CHECKING([for msvcr100.dll])
+ AC_ARG_WITH(msvcr100dll, [AS_HELP_STRING([--with-msvcr100dll],
+ [copy this msvcr100.dll into the built JDK])])
+ if test "x$with_msvcr100dll" != x; then
+ MSVCR100DLL="$with_msvcr100dll"
+ else
+ if test "x$HOST_CPU_BITS" = x64; then
+ MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1`
+ else
+ MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1`
+ if test "x$MSVCR100DLL" = x; then
+ MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1`
+ fi
+ fi
+ fi
+ if test "x$MSVCR100DLL" = x; then
+ AC_MSG_RESULT([no])
+ AC_ERROR([Could not find msvcr100.dll !])
+ fi
+ AC_MSG_RESULT([$MSVCR100DLL])
+ SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll])
+ fi
+fi
+AC_SUBST(SETUPDEVENV)
+AC_SUBST(CHECK_FOR_VCINSTALLDIR)
+AC_SUBST(MSVCR100DLL)
+
+# Most of the probed defines are put into config.h
+AC_CONFIG_HEADERS([$OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in])
+# The spec.gmk file contains all variables for the make system.
+AC_CONFIG_FILES([$OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in])
+# The generated Makefile knows where the spec.gmk is and where the source is.
+# You can run make from the OUTPUT_ROOT. If you have only
+# one configured host, then you can also run make from the SRC_ROOT,
+# since it will go look for a single spec.gmk file. Or perhaps it
+# should instead make all configured hosts it can find?
+AC_CONFIG_FILES([$OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in])
+
+AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk)
+AC_SUBST(OUTPUT_ROOT, $OUTPUT_ROOT)
+
+# Where are the sources. Any of these can be overridden
+# using --with-override-corba and the likes.
+LANGTOOLS_TOPDIR="$SRC_ROOT/langtools"
+CORBA_TOPDIR="$SRC_ROOT/corba"
+JAXP_TOPDIR="$SRC_ROOT/jaxp"
+JAXWS_TOPDIR="$SRC_ROOT/jaxws"
+HOTSPOT_TOPDIR="$SRC_ROOT/hotspot"
+JDK_TOPDIR="$SRC_ROOT/jdk"
+AC_SUBST(LANGTOOLS_TOPDIR)
+AC_SUBST(CORBA_TOPDIR)
+AC_SUBST(JAXP_TOPDIR)
+AC_SUBST(JAXWS_TOPDIR)
+AC_SUBST(HOTSPOT_TOPDIR)
+AC_SUBST(JDK_TOPDIR)
+
+# Check if pkg-config is available.
+PKG_PROG_PKG_CONFIG
+
+AC_ARG_WITH(builddeps-conf, [AS_HELP_STRING([--with-builddeps-conf],
+ [use this configuration file for the builddeps])])
+
+AC_ARG_WITH(builddeps-server, [AS_HELP_STRING([--with-builddeps-server],
+ [download and use build dependencies from this server url, e.g. --with-builddeps-server=ftp://example.com/dir])])
+
+AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir],
+ [store downloaded build dependencies here @<:@d/localhome/builddeps@:>@])],
+ [],
+ [with_builddeps_dir=/localhome/builddeps])
+
+AC_ARG_WITH(builddeps-group, [AS_HELP_STRING([--with-builddeps-group],
+ [chgrp the downloaded build dependencies to this group])])
+
+AC_ARG_ENABLE([list-builddeps], [AS_HELP_STRING([--enable-list-builddeps],
+ [list all build dependencies known to the configure script])],
+ [LIST_BUILDDEPS="${enableval}"], [LIST_BUILDDEPS='no'])
+
+if test "x$LIST_BUILDDEPS" = xyes; then
+ echo
+ echo List of build dependencies known to the configure script,
+ echo that can be used in builddeps.conf files:
+ cat $SRC_ROOT/configure.ac | grep BDEPS_CHECK_MODUL | grep -v configure.ac | cut -f 2 -d ',' | tr -d ' ' | sort
+ echo
+ exit 1
+fi
+
+# If builddeps server or conf file is given. Setup buildeps usage.
+BDEPS_SCAN_FOR_BUILDDEPS
+
+###############################################################################
+#
+# Configure the development tool paths and potential sysroot.
+#
+AC_LANG(C++)
+DEVKIT=
+SYS_ROOT=/
+AC_SUBST(SYS_ROOT)
+
+# The option used to specify the target .o,.a or .so file.
+# When compiling, how to specify the to be created object file.
+CC_OUT_OPTION='-o$(SPACE)'
+# When linking, how to specify the to be created executable.
+EXE_OUT_OPTION='-o$(SPACE)'
+# When linking, how to specify the to be created dynamically linkable library.
+LD_OUT_OPTION='-o$(SPACE)'
+# When archiving, how to specify the to be create static archive for object files.
+AR_OUT_OPTION='rcs$(SPACE)'
+AC_SUBST(CC_OUT_OPTION)
+AC_SUBST(EXE_OUT_OPTION)
+AC_SUBST(LD_OUT_OPTION)
+AC_SUBST(AR_OUT_OPTION)
+
+# If --build AND --host is set, then the configure script will find any
+# cross compilation tools in the PATH. Cross compilation tools
+# follows the cross compilation standard where they are prefixed with ${host}.
+# For example the binary i686-sun-solaris2.10-gcc
+# will cross compile for i686-sun-solaris2.10
+# If neither of build and host is not set, then build=host and the
+# default compiler found in the path will be used.
+# Setting only --host, does not seem to be really supported.
+# Please set both --build and --host if you want to cross compile.
+
+DEFINE_CROSS_COMPILE_ARCH=""
+HOSTCC=""
+HOSTCXX=""
+AC_SUBST(DEFINE_CROSS_COMPILE_ARCH)
+AC_SUBST(HOST_CC)
+AC_SUBST(HOST_CXX)
+AC_MSG_CHECKING([if this is a cross compile])
+if test "x$build_var" != "x$host_var"; then
+ AC_MSG_RESULT([yes, from $build_var to $host_var])
+ # We have detected a cross compile!
+ DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$LEGACY_HOST_CPU1"
+ # Now we to find a C/C++ compiler that can build executables for the build
+ # platform. We can't use the AC_PROG_CC macro, since it can only be used
+ # once.
+ AC_PATH_PROGS(HOSTCC, [cl cc gcc])
+ WHICHCMD(HOSTCC)
+ AC_PATH_PROGS(HOSTCXX, [cl CC g++])
+ WHICHCMD(HOSTCXX)
+ # Building for the build platform should be easy. Therefore
+ # we do not need any linkers or assemblers etc.
+else
+ AC_MSG_RESULT([no])
+fi
+
+# You can force the sys-root if the sys-root encoded into the cross compiler tools
+# is not correct.
+AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root],
+ [pass this sys-root to the compilers and linker (useful if the sys-root encoded in
+ the cross compiler tools is incorrect)])])
+
+if test "x$with_sys_root" != x; then
+ SYS_ROOT=$with_sys_root
+fi
+
+# If a devkit is found on the builddeps server, then prepend its path to the
+# PATH variable. If there are cross compilers available in the devkit, these
+# will be found by AC_PROG_CC et al.
+BDEPS_CHECK_MODULE(DEVKIT, devkit, xxx,
+ [# Found devkit
+ PATH="$DEVKIT/bin:$PATH"
+ SYS_ROOT="$DEVKIT/${rewritten_host}/sys-root"
+ if test "x$x_includes" = "xNONE"; then
+ x_includes="$SYS_ROOT/usr/include/X11"
+ fi
+ if test "x$x_libraries" = "xNONE"; then
+ x_libraries="$SYS_ROOT/usr/lib"
+ fi
+ ],
+ [])
+
+if test "x$SYS_ROOT" != "x/" ; then
+ CFLAGS="--sysroot=$SYS_ROOT $CFLAGS"
+ CXXFLAGS="--sysroot=$SYS_ROOT $CXXFLAGS"
+ OBJCFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS"
+ OBJCXXFLAGS="--sysroot=$SYS_ROOT $OBJCFLAGS"
+ CPPFLAGS="--sysroot=$SYS_ROOT $CPPFLAGS"
+ LDFLAGS="--sysroot=$SYS_ROOT $LDFLAGS"
+fi
+
+# Store the CFLAGS etal passed to the configure script.
+ORG_CFLAGS="$CFLAGS"
+ORG_CXXFLAGS="$CXXFLAGS"
+ORG_OBJCFLAGS="$OBJCFLAGS"
+
+# gcc is almost always present, but on Windows we
+# prefer cl.exe and on Solaris we prefer CC.
+# Thus test for them in this order.
+AC_PROG_CC([cl cc gcc])
+if test "x$CC" = x; then
+ help_on_build_dependency devkit
+ AC_ERROR([Could not find a compiler. $HELP_MSG])
+fi
+if test "x$CC" = xcc && test "x$BUILD_OS" = xmacosx; then
+ # Do not use cc on MacOSX use gcc instead.
+ CC="gcc"
+fi
+WHICHCMD(CC)
+
+AC_PROG_CXX([cl CC g++])
+if test "x$CXX" = xCC && test "x$BUILD_OS" = xmacosx; then
+ # The found CC, even though it seems to be a g++ derivate, cannot compile
+ # c++ code. Override.
+ CXX="g++"
+fi
+WHICHCMD(CXX)
+
+if test "x$CXX" = x || test "x$CC" = x; then
+ help_on_build_dependency devkit
+ AC_ERROR([Could not find the needed compilers! $HELP_MSG ])
+fi
+
+if test "x$BUILD_OS" != xwindows; then
+ AC_PROG_OBJC
+ WHICHCMD(OBJC)
+else
+ OBJC=
+fi
+
+# Restore the flags to the user specified values.
+# This is necessary since AC_PROG_CC defaults CFLAGS to "-g -O2"
+CFLAGS="$ORG_CFLAGS"
+CXXFLAGS="$ORG_CXXFLAGS"
+OBJCFLAGS="$ORG_OBJCFLAGS"
+
+# If we are not cross compiling, use the same compilers for
+# building the build platform executables.
+if test "x$DEFINE_CROSS_COMPILE_ARCH" = x; then
+ HOSTCC="$CC"
+ HOSTCXX="$CXX"
+fi
+
+AC_CHECK_TOOL(LD, ld)
+WHICHCMD(LD)
+LDEXE="$LD"
+LDCXX="$LD"
+LDEXECXX="$LD"
+# LDEXE is the linker to use, when creating executables.
+AC_SUBST(LDEXE)
+# Linking C++ libraries.
+AC_SUBST(LDCXX)
+# Linking C++ executables.
+AC_SUBST(LDEXECXX)
+
+AC_CHECK_TOOL(AR, ar)
+WHICHCMD(AR)
+if test "x$BUILD_OS" = xmacosx; then
+ ARFLAGS="-r"
+else
+ ARFLAGS=""
+fi
+AC_SUBST(ARFLAGS)
+
+COMPILER_NAME=gcc
+COMPILER_TYPE=CC
+AS_IF([test "x$BUILD_OS" = xwindows], [
+ # For now, assume that we are always compiling using cl.exe.
+ CC_OUT_OPTION=-Fo
+ EXE_OUT_OPTION=-Fe
+ LD_OUT_OPTION=-out:
+ AR_OUT_OPTION=-out:
+ # On Windows, reject /usr/bin/link, which is a cygwin
+ # program for something completely different.
+ AC_CHECK_PROG([WINLD], [link],[link],,, [/usr/bin/link])
+ # Since we must ignore the first found link, WINLD will contain
+ # the full path to the link.exe program.
+ WHICHCMD_SPACESAFE([WINLD])
+ LD="$WINLD"
+ # However creating executables can only be done with cl.exe.
+ LDEXE="$CC"
+ LDCXX="$WINLD"
+ LDEXECXX="$CC"
+
+ AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt])
+ WHICHCMD_SPACESAFE([MT])
+ # The resource compiler
+ AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc])
+ WHICHCMD_SPACESAFE([RC])
+
+ RC_FLAGS="/l 0x409 /r"
+ AS_IF([test "x$VARIANT" = xOPT], [
+ RC_FLAGS="$RC_FLAGS -d NDEBUG"
+ ])
+ JDK_UPDATE_VERSION_NOTNULL=$JDK_UPDATE_VERSION
+ AS_IF([test "x$JDK_UPDATE_VERSION" = x], [
+ JDK_UPDATE_VERSION_NOTNULL=0
+ ])
+ RC_FLAGS="$RC_FLAGS -d \"JDK_BUILD_ID=$FULL_VERSION\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_COMPANY=$COMPANY_NAME\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_COMPONENT=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME binary\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_VER=$JDK_MINOR_VERSION.$JDK_MICRO_VERSION.$JDK_UPDATE_VERSION_NOTNULL.$COOKED_BUILD_NUMBER\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_COPYRIGHT=Copyright \xA9 $COPYRIGHT_YEAR\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_NAME=$PRODUCT_NAME $JDK_RC_PLATFORM_NAME $JDK_MINOR_VERSION $JDK_UPDATE_META_TAG\""
+ RC_FLAGS="$RC_FLAGS -d \"JDK_FVER=$JDK_MINOR_VERSION,$JDK_MICRO_VERSION,$JDK_UPDATE_VERSION_NOTNULL,$COOKED_BUILD_NUMBER\""
+
+ # lib.exe is used to create static libraries.
+ AC_CHECK_PROG([WINAR], [lib],[lib],,,)
+ WHICHCMD_SPACESAFE([WINAR])
+ AR="$WINAR"
+ ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT"
+
+ AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,)
+ WHICHCMD_SPACESAFE([DUMPBIN])
+
+ COMPILER_TYPE=CL
+ CFLAGS="$CFLAGS -nologo"
+ LDFLAGS="$LDFLAGS -nologo -dll -opt:ref -incremental:no "
+ if test "x$LEGACY_HOST_CPU1" = xi586; then
+ LDFLAGS="$LDFLAGS -safeseh"
+ fi
+ if test "x$DEBUG_LEVEL" != xrelease; then
+ LDFLAGS="$LDFLAGS -debug"
+ fi
+])
+AC_SUBST(RC_FLAGS)
+AC_SUBST(COMPILER_TYPE)
+
+AC_PROG_CPP
+WHICHCMD(CPP)
+
+AC_PROG_CXXCPP
+WHICHCMD(CXXCPP)
+
+# Find the right assembler.
+if test "x$BUILD_OS" = xsolaris; then
+ AC_PATH_PROG(AS, as)
+ WHICHCMD(AS)
+ ASFLAGS=" "
+else
+ AS="$CC -c"
+ ASFLAGS=" "
+fi
+AC_SUBST(AS)
+AC_SUBST(ASFLAGS)
+
+if test "x$HOST_CPU_BITS" = x32 && test "x$HOST_OS" = macosx; then
+ # On 32-bit MacOSX the OS requires C-entry points to be 16 byte aligned.
+ # While waiting for a better solution, the current workaround is to use -mstackrealign.
+ CFLAGS="$CFLAGS -mstackrealign"
+ AC_MSG_CHECKING([if 32-bit compiler supports -mstackrealign])
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[int main() { return 0; }]])],
+ [
+ AC_MSG_RESULT([yes])
+ ],
+ [
+ AC_MSG_RESULT([no])
+ AC_ERROR([The selected compiler $CXX does not support -mstackrealign! Try to put another compiler in the path.])
+ ])
+fi
+
+if test "x$BUILD_OS" = xsolaris; then
+ AC_PATH_PROG(NM, nm)
+ WHICHCMD(NM)
+ AC_PATH_PROG(STRIP, strip)
+ WHICHCMD(STRIP)
+ AC_PATH_PROG(MCS, mcs)
+ WHICHCMD(MCS)
+else
+ AC_CHECK_TOOL(NM, nm)
+ WHICHCMD(NM)
+ AC_CHECK_TOOL(STRIP, strip)
+ WHICHCMD(STRIP)
+fi
+
+# When using cygwin, we need a wrapper binary that renames
+# /cygdrive/c/ arguments into c:/ arguments and peeks into
+# @files and rewrites these too! This wrapper binary is
+# called uncygdrive.exe.
+UNCYGDRIVE=
+if test "x$BUILD_OS" = xwindows; then
+ AC_MSG_CHECKING([if uncygdrive can be created])
+ UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c`
+ rm -f $OUTPUT_ROOT/uncygdrive*
+ UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe`
+ cd $OUTPUT_ROOT
+ $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1
+ cd $CURDIR
+
+ if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then
+ AC_MSG_RESULT([no])
+ cat $OUTPUT_ROOT/uncygdrive1.log
+ AC_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe])
+ fi
+ AC_MSG_RESULT([$UNCYGDRIVE])
+ AC_MSG_CHECKING([if uncygdrive.exe works])
+ cd $OUTPUT_ROOT
+ $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1
+ cd $CURDIR
+ if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then
+ AC_MSG_RESULT([no])
+ cat $OUTPUT_ROOT/uncygdrive2.log
+ AC_ERROR([Uncygdrive did not work!])
+ fi
+ AC_MSG_RESULT([yes])
+ rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj
+fi
+
+AC_SUBST(UNCYGDRIVE)
+
+TESTFOR_PROG_CCACHE
+
+# Used on GNU/Linux systems, can be empty...
+#AC_PATH_PROG(ELFDUMP, elfdump)
+
+# Setup default logging of stdout and stderr to build.log in the output root.
+BUILD_LOG='$(OUTPUT_ROOT)/build.log'
+BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)'
+AC_SUBST(BUILD_LOG)
+AC_SUBST(BUILD_LOG_WRAPPER)
+
+###############################################################################
+#
+# Now we check if libjvm.so will use 32 or 64 bit pointers for the C/C++ code.
+# (The JVM can use 32 or 64 bit Java pointers but that decision
+# is made at runtime.)
+#
+AC_CHECK_SIZEOF([int *], [1111])
+if test "x$ac_cv_sizeof_int_p" = x0; then
+ # The test failed, lets pick the assumed value.
+ ARCH_DATA_MODEL=$HOST_CPU_BITS
+else
+ ARCH_DATA_MODEL=`expr 8 \* $ac_cv_sizeof_int_p`
+fi
+
+if test "x$ARCH_DATA_MODEL" = x64; then
+ A_LP64="LP64:="
+ ADD_LP64="-D_LP64=1"
+fi
+AC_MSG_CHECKING([for host address size])
+AC_MSG_RESULT([$ARCH_DATA_MODEL bits])
+AC_SUBST(LP64,$A_LP64)
+AC_SUBST(ARCH_DATA_MODEL)
+
+if test "x$ARCH_DATA_MODEL" != "x$HOST_CPU_BITS"; then
+ AC_ERROR([The tested number of bits in the host ($ARCH_DATA_MODEL) differs from the number of bits expected to be found in the host ($HOST_CPU_BITS)])
+fi
+
+###############################################################################
+#
+# Can the C/C++ compiler use precompiled headers?
+#
+AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers],
+ [use precompiled headers when compiling C++ @<:@enabled@:>@])],
+ [ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes])
+
+USE_PRECOMPILED_HEADER=1
+if test "x$ENABLE_PRECOMPH" = xno; then
+ USE_PRECOMPILED_HEADER=0
+fi
+
+if test "x$ENABLE_PRECOMPH" = xyes; then
+ # Check that the compiler actually supports precomp headers.
+ if test "x$GCC" = xyes; then
+ AC_MSG_CHECKING([that precompiled headers work])
+ echo "int alfa();" > conftest.h
+ $CXX -x c++-header conftest.h -o conftest.hpp.gch
+ if test ! -f conftest.hpp.gch; then
+ echo Precompiled header is not working!
+ USE_PRECOMPILED_HEADER=0
+ AC_MSG_RESULT([no])
+ else
+ AC_MSG_RESULT([yes])
+ fi
+ rm -f conftest.h
+ fi
+fi
+
+AC_SUBST(USE_PRECOMPILED_HEADER)
+
+###############################################################################
+#
+# How to compile shared libraries.
+#
+
+if test "x$GCC" = xyes; then
+ COMPILER_NAME=gcc
+ PICFLAG="-fPIC"
+ LIBRARY_PREFIX=lib
+ SHARED_LIBRARY='lib$1.so'
+ STATIC_LIBRARY='lib$1.a'
+ SHARED_LIBRARY_FLAGS="-shared"
+ SHARED_LIBRARY_SUFFIX='.so'
+ STATIC_LIBRARY_SUFFIX='.a'
+ OBJ_SUFFIX='.o'
+ EXE_SUFFIX=''
+ SET_SHARED_LIBRARY_NAME='-Xlinker -soname=$1'
+ SET_SHARED_LIBRARY_MAPFILE='-Xlinker -version-script=$(JDK_TOPDIR)/$1'
+ SET_SHARED_LIBRARY_ORIGIN='-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$$$ORIGIN/$1'
+ LD="$CC"
+ LDEXE="$CC"
+ LDCXX="$CXX"
+ LDEXECXX="$CXX"
+
+ # Linking is different on MacOSX
+ if test "x$BUILD_OS" = xmacosx; then
+ # Might change in the future to clang.
+ COMPILER_NAME=gcc
+ SHARED_LIBRARY='lib$1.dylib'
+ SHARED_LIBRARY_FLAGS="-dynamiclib -compatibility_version 1.0.0 -current_version 1.0.0 $PICFLAG"
+ SHARED_LIBRARY_SUFFIX='.dylib'
+ EXE_SUFFIX=''
+ SET_SHARED_LIBRARY_NAME='-Xlinker -install_name -Xlinker @rpath/$1'
+ SET_SHARED_LIBRARY_MAPFILE=''
+ SET_SHARED_LIBRARY_ORIGIN='-Xlinker -rpath -Xlinker @loader_path/.'
+ fi
+else
+ if test "x$BUILD_OS" = xsolaris; then
+ # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler
+ COMPILER_NAME=ossc
+ PICFLAG="-KPIC"
+ LIBRARY_PREFIX=lib
+ SHARED_LIBRARY='lib$1.so'
+ STATIC_LIBRARY='lib$1.a'
+ SHARED_LIBRARY_FLAGS="-G"
+ SHARED_LIBRARY_SUFFIX='.so'
+ STATIC_LIBRARY_SUFFIX='.a'
+ OBJ_SUFFIX='.o'
+ EXE_SUFFIX=''
+ SET_SHARED_LIBRARY_NAME=''
+ SET_SHARED_LIBRARY_MAPFILE='-M $(JDK_TOPDIR)/$1'
+ SET_SHARED_LIBRARY_ORIGIN='-R \$$$$ORIGIN/$1'
+ CFLAGS_JDKLIB_EXTRA='-xstrconst -D__solaris__'
+ fi
+ if test "x$BUILD_OS" = xwindows; then
+ # If it is not gcc, then assume it is the MS Visual Studio compiler
+ COMPILER_NAME=cl
+ PICFLAG=""
+ LIBRARY_PREFIX=
+ SHARED_LIBRARY='$1.dll'
+ STATIC_LIBRARY='$1.lib'
+ SHARED_LIBRARY_FLAGS="-LD"
+ SHARED_LIBRARY_SUFFIX='.dll'
+ STATIC_LIBRARY_SUFFIX='.lib'
+ OBJ_SUFFIX='.obj'
+ EXE_SUFFIX='.exe'
+ SET_SHARED_LIBRARY_NAME=''
+ SET_SHARED_LIBRARY_MAPFILE=''
+ SET_SHARED_LIBRARY_ORIGIN=''
+ fi
+fi
+
+AC_SUBST(OBJ_SUFFIX)
+AC_SUBST(SHARED_LIBRARY)
+AC_SUBST(STATIC_LIBRARY)
+AC_SUBST(LIBRARY_PREFIX)
+AC_SUBST(SHARED_LIBRARY_SUFFIX)
+AC_SUBST(STATIC_LIBRARY_SUFFIX)
+AC_SUBST(EXE_SUFFIX)
+AC_SUBST(SHARED_LIBRARY_FLAGS)
+AC_SUBST(SET_SHARED_LIBRARY_NAME)
+AC_SUBST(SET_SHARED_LIBRARY_MAPFILE)
+AC_SUBST(SET_SHARED_LIBRARY_ORIGIN)
+
+# The (cross) compiler is now configured, we can now test capabilities
+# of the host platform.
+
+###############################################################################
+#
+# Is the host little of big endian?
+#
+AC_C_BIGENDIAN([ENDIAN="big"],[ENDIAN="little"],[ENDIAN="unknown"],[ENDIAN="universal"])
+
+if test "x$ENDIAN" = xuniversal; then
+ AC_ERROR([It seems like someone needs to decide how we are to deal with universal binaries on the MacOSX?])
+fi
+if test "x$ENDIAN" = xunknown; then
+ ENDIAN="$HOST_CPU_ENDIAN"
+fi
+if test "x$ENDIAN" != "x$HOST_CPU_ENDIAN"; then
+ AC_WARN([The tested endian in the host ($ENDIAN) differs from the endian expected to be found in the host ($HOST_CPU_ENDIAN)])
+ ENDIAN="$HOST_CPU_ENDIAN"
+fi
+AC_SUBST(ENDIAN)
+
+###############################################################################
+#
+# We need a Boot JDK to bootstrap the build.
+#
+BOOT_JDK_FOUND=no
+AC_ARG_WITH(boot-jdk, [AS_HELP_STRING([--with-boot-jdk],
+ [path to Boot JDK (used to bootstrap build) @<:@probed@:>@])])
+
+if test "x$with_boot_jdk" != x; then
+ BOOT_JDK=$with_boot_jdk
+ BOOT_JDK_FOUND=yes
+fi
+if test "x$BOOT_JDK_FOUND" = xno; then
+ BDEPS_CHECK_MODULE(BOOT_JDK, bootjdk, xxx, [BOOT_JDK_FOUND=yes], [BOOT_JDK_FOUND=no])
+fi
+
+if test "x$BOOT_JDK_FOUND" = xno; then
+ if test "x$JAVA_HOME" != x; then
+ if test ! -d "$JAVA_HOME"; then
+ AC_ERROR([Your JAVA_HOME points to a non-existing directory!])
+ fi
+ # Aha, the user has set a JAVA_HOME
+ # let us use that as the Boot JDK.
+ BOOT_JDK=$JAVA_HOME
+ BOOT_JDK_FOUND=yes
+ # To be on the safe side, lets check that it is a JDK.
+ if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then
+ JAVAC=$BOOT_JDK/bin/javac
+ JAVA=$BOOT_JDK/bin/java
+ BOOT_JDK_FOUND=yes
+ else
+ AC_ERROR([Your JAVA_HOME points to a JRE! The build needs a JDK! Please point JAVA_HOME to a JDK.])
+ fi
+ fi
+fi
+
+if test "x$BOOT_JDK_FOUND" = xno; then
+ AC_PATH_PROG(JAVAC_CHECK, javac)
+ AC_PATH_PROG(JAVA_CHECK, java)
+ BINARY="$JAVAC_CHECK"
+ if test "x$JAVAC_CHECK" = x; then
+ BINARY="$JAVA_CHECK"
+ fi
+ if test "x$BINARY" != x; then
+ # So there is a java(c) binary, it might be part of a JDK.
+ # Lets find the JDK/JRE directory by following symbolic links.
+ # Linux/GNU systems often have links from /usr/bin/java to
+ # /etc/alternatives/java to the real JDK binary.
+ WHICHCMD_SPACESAFE(BINARY,[path to javac])
+ REMOVE_SYMBOLIC_LINKS(BINARY)
+ BOOT_JDK=`dirname $BINARY`
+ BOOT_JDK=`cd $BOOT_JDK/..; pwd`
+ if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then
+ JAVAC=$BOOT_JDK/bin/javac
+ JAVA=$BOOT_JDK/bin/java
+ BOOT_JDK_FOUND=yes
+ fi
+ fi
+fi
+
+if test "x$BOOT_JDK_FOUND" = xno; then
+ # Try the MacOSX way.
+ if test -x /usr/libexec/java_home; then
+ BOOT_JDK=`/usr/libexec/java_home`
+ if test -x $BOOT_JDK/bin/javac && test -x $BOOT_JDK/bin/java; then
+ JAVAC=$BOOT_JDK/bin/javac
+ JAVA=$BOOT_JDK/bin/java
+ BOOT_JDK_FOUND=yes
+ fi
+ fi
+fi
+
+if test "x$BOOT_JDK_FOUND" = xno; then
+ AC_PATH_PROG(JAVA_CHECK, java)
+ if test "x$JAVA_CHECK" != x; then
+ # There is a java in the path. But apparently we have not found a javac
+ # in the path, since that would have been tested earlier.
+ if test "x$HOST_OS" = xwindows; then
+ # Now if this is a windows platform. The default installation of a JDK
+ # actually puts the JRE in the path and keeps the JDK out of the path!
+ # Go look in the default installation location.
+ BOOT_JDK=/cygdrive/c/Program\ Files/Java/`ls /cygdrive/c/Program\ Files/Java | grep jdk | sort -r | head --lines 1`
+ if test -d "$BOOT_JDK"; then
+ BOOT_JDK_FOUND=yes
+ fi
+ fi
+ if test "x$BOOT_JDK_FOUND" = xno; then
+ help_on_build_dependency openjdk
+ AC_ERROR([Found a JRE, not not a JDK! Please remove the JRE from your path and put a JDK there instead. $HELP_MSG])
+ fi
+ else
+ help_on_build_dependency openjdk
+ AC_ERROR([Could not find a JDK. $HELP_MSG])
+ fi
+fi
+
+WIN_FIX_PATH(BOOT_JDK)
+
+# Now see if we can find the rt.jar, or its nearest equivalent.
+BOOT_RTJAR="$BOOT_JDK/jre/lib/rt.jar"
+SPACESAFE(BOOT_RTJAR,[the path to the Boot JDK rt.jar (or nearest equivalent)])
+
+BOOT_TOOLSJAR="$BOOT_JDK/lib/tools.jar"
+SPACESAFE(BOOT_TOOLSJAR,[the path to the Boot JDK tools.jar (or nearest equivalent)])
+
+if test ! -f $BOOT_RTJAR; then
+ # On MacOSX it is called classes.jar
+ BOOT_RTJAR=$BOOT_JDK/../Classes/classes.jar
+ if test ! -f $BOOT_RTJAR; then
+ AC_ERROR([Cannot find the rt.jar or its equivalent!])
+ fi
+ # Remove the ..
+ BOOT_RTJAR="`cd ${BOOT_RTJAR%/*} && pwd`/${BOOT_RTJAR##*/}"
+ # The tools.jar is part of classes.jar
+ BOOT_TOOLSJAR="$BOOT_RTJAR"
+fi
+
+AC_SUBST(BOOT_JDK)
+AC_SUBST(BOOT_RTJAR)
+AC_SUBST(BOOT_TOOLSJAR)
+AC_MSG_CHECKING([for Boot JDK])
+AC_MSG_RESULT([$BOOT_JDK])
+AC_MSG_CHECKING([for Boot rt.jar])
+AC_MSG_RESULT([$BOOT_RTJAR])
+AC_MSG_CHECKING([for Boot tools.jar])
+AC_MSG_RESULT([$BOOT_TOOLSJAR])
+
+# Use the java tool from the Boot JDK.
+AC_MSG_CHECKING([for java in Boot JDK])
+JAVA=$BOOT_JDK/bin/java
+if test ! -x $JAVA; then
+ AC_ERROR([Could not find a working java])
+fi
+BOOT_JDK_VERSION=`$JAVA -version 2>&1 | head -n 1`
+AC_MSG_RESULT([yes $BOOT_JDK_VERSION])
+AC_SUBST(JAVA)
+
+# Extra M4 quote needed to protect [] in grep expression.
+[FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'`]
+if test "x$FOUND_VERSION_78" = x; then
+ help_on_build_dependency openjdk
+ AC_ERROR([Your bootjdk must be version 7 or 8. $HELP_MSG])
+fi
+
+# When compiling code to be executed by the Boot JDK, force jdk7 compatibility.
+BOOT_JDK_SOURCETARGET="-source 7 -target 7"
+AC_SUBST(BOOT_JDK_SOURCETARGET)
+
+# Use the javac tool from the Boot JDK.
+AC_MSG_CHECKING([for javac in Boot JDK])
+JAVAC=$BOOT_JDK/bin/javac
+if test ! -x $JAVAC; then
+ AC_ERROR([Could not find a working javac])
+fi
+AC_MSG_RESULT(yes)
+AC_SUBST(JAVAC)
+AC_SUBST(JAVAC_FLAGS)
+
+# Use the javac tool from the Boot JDK.
+AC_MSG_CHECKING([for javah in Boot JDK])
+JAVAH=$BOOT_JDK/bin/javah
+if test ! -x $JAVAH; then
+ AC_ERROR([Could not find a working javah])
+fi
+AC_MSG_RESULT(yes)
+AC_SUBST(JAVAH)
+
+# Use the jar tool from the Boot JDK.
+AC_MSG_CHECKING([for jar in Boot JDK])
+JAR=$BOOT_JDK/bin/jar
+if test ! -x $JAR; then
+ AC_ERROR([Could not find a working jar])
+fi
+AC_SUBST(JAR)
+AC_MSG_RESULT(yes)
+
+# Use the rmic tool from the Boot JDK.
+AC_MSG_CHECKING([for rmic in Boot JDK])
+RMIC=$BOOT_JDK/bin/rmic
+if test ! -x $RMIC; then
+ AC_ERROR([Could not find a working rmic])
+fi
+AC_SUBST(RMIC)
+AC_MSG_RESULT(yes)
+
+###############################################################################
+#
+# Pickup additional source for a component from outside of the source root
+# or override source for a component.
+#
+AC_ARG_WITH(add-source-root, [AS_HELP_STRING([--with-add-source-root],
+ [for each and every source directory, look in this additional source root for
+ the same directory; if it exists and have files in it, include it in the build])])
+
+AC_ARG_WITH(override-source-root, [AS_HELP_STRING([--with-override-source-root],
+ [for each and every source directory, look in this override source root for
+ the same directory; if it exists, use that directory instead and
+ ignore the directory in the original source root])])
+
+AC_ARG_WITH(adds-and-overrides, [AS_HELP_STRING([--with-adds-and-overrides],
+ [use the subdirs 'adds' and 'overrides' in the specified directory as
+ add-source-root and override-source-root])])
+
+if test "x$with_adds_and_overrides" != x; then
+ with_add_source_root="$with_adds_and_overrides/adds"
+ with_override_source_root="$with_adds_and_overrides/overrides"
+fi
+
+if test "x$with_add_source_root" != x; then
+ if ! test -d $with_add_source_root; then
+ AC_ERROR([Trying to use a non-existant add-source-root $with_add_source_root])
+ fi
+ CURDIR="$PWD"
+ cd "$with_add_source_root"
+ ADD_SRC_ROOT="`pwd`"
+ cd "$CURDIR"
+ # Verify that the addon source root does not have any root makefiles.
+ # If it does, then it is usually an error, prevent this.
+ if test -f $with_add_source_root/langtools/makefiles/Makefile || \
+ test -f $with_add_source_root/langtools/make/Makefile; then
+ AC_ERROR([Your add source root seems to contain a full langtools repo! An add source root should only contain additional sources.])
+ fi
+ if test -f $with_add_source_root/corba/makefiles/Makefile || \
+ test -f $with_add_source_root/corba/make/Makefile; then
+ AC_ERROR([Your add source root seems to contain a full corba repo! An add source root should only contain additional sources.])
+ fi
+ if test -f $with_add_source_root/jaxp/makefiles/Makefile || \
+ test -f $with_add_source_root/jaxp/make/Makefile; then
+ AC_ERROR([Your add source root seems to contain a full jaxp repo! An add source root should only contain additional sources.])
+ fi
+ if test -f $with_add_source_root/jaxws/makefiles/Makefile || \
+ test -f $with_add_source_root/jaxws/make/Makefile; then
+ AC_ERROR([Your add source root seems to contain a full jaxws repo! An add source root should only contain additional sources.])
+ fi
+ if test -f $with_add_source_root/hotspot/makefiles/Makefile || \
+ test -f $with_add_source_root/hotspot/make/Makefile; then
+ AC_ERROR([Your add source root seems to contain a full hotspot repo! An add source root should only contain additional sources.])
+ fi
+ if test -f $with_add_source_root/jdk/makefiles/Makefile || \
+ test -f $with_add_source_root/jdk/make/Makefile; then
+ AC_ERROR([Your add source root seems to contain a full JDK repo! An add source root should only contain additional sources.])
+ fi
+fi
+AC_SUBST(ADD_SRC_ROOT)
+
+if test "x$with_override_source_root" != x; then
+ if ! test -d $with_override_source_root; then
+ AC_ERROR([Trying to use a non-existant override-source-root $with_override_source_root])
+ fi
+ CURDIR="$PWD"
+ cd "$with_override_source_root"
+ OVERRIDE_SRC_ROOT="`pwd`"
+ cd "$CURDIR"
+ if test -f $with_override_source_root/langtools/makefiles/Makefile || \
+ test -f $with_override_source_root/langtools/make/Makefile; then
+ AC_ERROR([Your override source root seems to contain a full langtools repo! An override source root should only contain sources that override.])
+ fi
+ if test -f $with_override_source_root/corba/makefiles/Makefile || \
+ test -f $with_override_source_root/corba/make/Makefile; then
+ AC_ERROR([Your override source root seems to contain a full corba repo! An override source root should only contain sources that override.])
+ fi
+ if test -f $with_override_source_root/jaxp/makefiles/Makefile || \
+ test -f $with_override_source_root/jaxp/make/Makefile; then
+ AC_ERROR([Your override source root seems to contain a full jaxp repo! An override source root should only contain sources that override.])
+ fi
+ if test -f $with_override_source_root/jaxws/makefiles/Makefile || \
+ test -f $with_override_source_root/jaxws/make/Makefile; then
+ AC_ERROR([Your override source root seems to contain a full jaxws repo! An override source root should only contain sources that override.])
+ fi
+ if test -f $with_override_source_root/hotspot/makefiles/Makefile || \
+ test -f $with_override_source_root/hotspot/make/Makefile; then
+ AC_ERROR([Your override source root seems to contain a full hotspot repo! An override source root should only contain sources that override.])
+ fi
+ if test -f $with_override_source_root/jdk/makefiles/Makefile || \
+ test -f $with_override_source_root/jdk/make/Makefile; then
+ AC_ERROR([Your override source root seems to contain a full JDK repo! An override source root should only contain sources that override.])
+ fi
+fi
+AC_SUBST(OVERRIDE_SRC_ROOT)
+
+###############################################################################
+#
+# Override a repo completely, this is used for example when you have 3 small
+# development sandboxes of the langtools sources and want to avoid having 3 full
+# OpenJDK sources checked out on disk.
+#
+# Assuming that the 3 langtools sandboxes are located here:
+# /home/fredrik/sandbox1/langtools
+# /home/fredrik/sandbox2/langtools
+# /home/fredrik/sandbox3/langtools
+#
+# From the source root you create build subdirs manually:
+# mkdir -p build1 build2 build3
+# in each build directory run:
+# (cd build1 && ../configure --with-override-langtools=/home/fredrik/sandbox1 && make)
+# (cd build2 && ../configure --with-override-langtools=/home/fredrik/sandbox2 && make)
+# (cd build3 && ../configure --with-override-langtools=/home/fredrik/sandbox3 && make)
+#
+
+AC_ARG_WITH(override-langtools, [AS_HELP_STRING([--with-override-langtools],
+ [use this langtools dir for the build])])
+
+AC_ARG_WITH(override-corba, [AS_HELP_STRING([--with-override-corba],
+ [use this corba dir for the build])])
+
+AC_ARG_WITH(override-jaxp, [AS_HELP_STRING([--with-override-jaxp],
+ [use this jaxp dir for the build])])
+
+AC_ARG_WITH(override-jaxws, [AS_HELP_STRING([--with-override-jaxws],
+ [use this jaxws dir for the build])])
+
+AC_ARG_WITH(override-hotspot, [AS_HELP_STRING([--with-override-hotspot],
+ [use this hotspot dir for the build])])
+
+AC_ARG_WITH(override-jdk, [AS_HELP_STRING([--with-override-jdk],
+ [use this jdk dir for the build])])
+
+if test "x$with_override_langtools" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_langtools"
+ LANGTOOLS_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $LANGTOOLS_TOPDIR/makefiles/Makefile; then
+ AC_ERROR([You have to override langtools with a full langtools repo!])
+ fi
+ AC_MSG_CHECKING([if langtools should be overridden])
+ AC_MSG_RESULT([yes with $LANGTOOLS_TOPDIR])
+fi
+if test "x$with_override_corba" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_corba"
+ CORBA_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $CORBA_TOPDIR/makefiles/Makefile; then
+ AC_ERROR([You have to override corba with a full corba repo!])
+ fi
+ AC_MSG_CHECKING([if corba should be overridden])
+ AC_MSG_RESULT([yes with $CORBA_TOPDIR])
+fi
+if test "x$with_override_jaxp" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_jaxp"
+ JAXP_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $JAXP_TOPDIR/makefiles/Makefile; then
+ AC_ERROR([You have to override jaxp with a full jaxp repo!])
+ fi
+ AC_MSG_CHECKING([if jaxp should be overridden])
+ AC_MSG_RESULT([yes with $JAXP_TOPDIR])
+fi
+if test "x$with_override_jaxws" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_jaxws"
+ JAXWS_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $JAXWS_TOPDIR/makefiles/Makefile; then
+ AC_ERROR([You have to override jaxws with a full jaxws repo!])
+ fi
+ AC_MSG_CHECKING([if jaxws should be overridden])
+ AC_MSG_RESULT([yes with $JAXWS_TOPDIR])
+fi
+if test "x$with_override_hotspot" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_hotspot"
+ HOTSPOT_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $HOTSPOT_TOPDIR/make/Makefile && \
+ ! test -f $HOTSPOT_TOPDIR/makefiles/Makefile; then
+ AC_ERROR([You have to override hotspot with a full hotspot repo!])
+ fi
+ AC_MSG_CHECKING([if hotspot should be overridden])
+ AC_MSG_RESULT([yes with $HOTSPOT_TOPDIR])
+fi
+if test "x$with_override_jdk" != x; then
+ CURDIR="$PWD"
+ cd "$with_override_jdk"
+ JDK_TOPDIR="`pwd`"
+ cd "$CURDIR"
+ if ! test -f $JDK_TOPDIR/makefiles/Makefile; then
+ AC_ERROR([You have to override JDK with a full JDK repo!])
+ fi
+ AC_MSG_CHECKING([if JDK should be overridden])
+ AC_MSG_RESULT([yes with $JDK_TOPDIR])
+fi
+
+###############################################################################
+#
+# Specify options for anything that is run with the Boot JDK.
+#
+AC_ARG_WITH(boot-jdk-jvmargs, [AS_HELP_STRING([--with-boot-jdk-jvmargs],
+ [specify JVM arguments to be passed to all invocations of the Boot JDK, overriding the default values,
+ e.g --with-boot-jdk-jvmargs="-Xmx8G -enableassertions"])])
+
+if test "x$with_boot_jdk_jvmargs" = x; then
+ # Not all JVM:s accept the same arguments on the command line.
+ # OpenJDK specific increase in thread stack for JDK build,
+ # well more specifically, when running javac.
+ if test "x$BUILD_NUM_BITS" = x32; then
+ STACK_SIZE=768
+ else
+ # Running Javac on a JVM on a 64-bit machine, the stack takes more space
+ # since 64-bit pointers are pushed on the stach. Apparently, we need
+ # to increase the stack space when javacing the JDK....
+ STACK_SIZE=1536
+ fi
+
+ # Minimum amount of heap memory.
+ ADD_JVM_ARG_IF_OK([-Xms64M],boot_jdk_jvmargs,[$JAVA])
+ if test "x$HOST_OS" = "xmacosx"; then
+ # Why does macosx need more heap? Its the huge JDK batch.
+ ADD_JVM_ARG_IF_OK([-Xmx1600M],boot_jdk_jvmargs,[$JAVA])
+ else
+ ADD_JVM_ARG_IF_OK([-Xmx1100M],boot_jdk_jvmargs,[$JAVA])
+ fi
+ # When is adding -client something that speeds up the JVM?
+ # ADD_JVM_ARG_IF_OK([-client],boot_jdk_jvmargs,[$JAVA])
+ ADD_JVM_ARG_IF_OK([-XX:PermSize=32m],boot_jdk_jvmargs,[$JAVA])
+ ADD_JVM_ARG_IF_OK([-XX:MaxPermSize=160m],boot_jdk_jvmargs,[$JAVA])
+ ADD_JVM_ARG_IF_OK([-XX:ThreadStackSize=$STACK_SIZE],boot_jdk_jvmargs,[$JAVA])
+ # Disable special log output when a debug build is used as Boot JDK...
+ ADD_JVM_ARG_IF_OK([-XX:-PrintVMOptions -XX:-UnlockDiagnosticVMOptions -XX:-LogVMOutput],boot_jdk_jvmargs,[$JAVA])
+fi
+
+AC_SUBST(BOOT_JDK_JVMARGS, $boot_jdk_jvmargs)
+
+AC_ARG_WITH(server-java, [AS_HELP_STRING([--with-server-java],
+ [use this java binary for running the javac background server and other long running java tasks in the build process,
+ e.g. ---with-server-java="/opt/jrockit/bin/java -server"])])
+
+if test "x$with_server_java" != x; then
+ SERVER_JAVA="$with_server_java"
+ FOUND_VERSION=`$SERVER_JAVA -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" = x; then
+ AC_ERROR([Could not execute server java: $SERVER_JAVA])
+ fi
+else
+ SERVER_JAVA=""
+ # Hotspot specific options.
+ ADD_JVM_ARG_IF_OK([-XX:+UseParallelOldGC],SERVER_JAVA,[$JAVA])
+ ADD_JVM_ARG_IF_OK([-verbosegc],SERVER_JAVA,[$JAVA])
+ # JRockit specific options.
+ ADD_JVM_ARG_IF_OK([-Xverbose:gc],SERVER_JAVA,[$JAVA])
+ SERVER_JAVA="$JAVA $SERVER_JAVA"
+fi
+AC_SUBST(SERVER_JAVA)
+
+AC_MSG_CHECKING([whether to use shared server for javac])
+AC_ARG_ENABLE([javac-server], [AS_HELP_STRING([--enable-javac-server],
+ [enable the shared javac server during the build process @<:@disabled@:>@])],
+ [ENABLE_JAVAC_SERVER="${enableval}"], [ENABLE_JAVAC_SERVER='no'])
+AC_MSG_RESULT([$ENABLE_JAVAC_SERVER])
+if test "x$ENABLE_JAVAC_SERVER" = xyes; then
+ JAVAC_USE_REMOTE=true
+ JAVAC_SERVERS="$OUTPUT_ROOT/javacservers"
+else
+ JAVAC_USE_REMOTE=false
+ JAVAC_SERVERS=
+fi
+AC_SUBST(JAVAC_USE_REMOTE)
+AC_SUBST(JAVAC_SERVERS)
+
+AC_ARG_WITH(javac-server-cores, [AS_HELP_STRING([--with-javac-server-cores],
+ [use at most this number of concurrent threads on the javac server @<:@probed@:>@])])
+if test "x$with_javac_server_cores" != x; then
+ JAVAC_SERVER_CORES="$with_javac_server_cores"
+else
+ if test "$NUM_CORES" -gt 16; then
+ # We set this arbitrary limit because we want to limit the heap
+ # size of the javac server.
+ # In the future we will make the javac compilers in the server
+ # share more and more state, thus enabling us to use more and
+ # more concurrent threads in the server.
+ JAVAC_SERVER_CORES="16"
+ else
+ JAVAC_SERVER_CORES="$NUM_CORES"
+ fi
+
+ if test "$MEMORY_SIZE" -gt "17000"; then
+ MAX_HEAP_MEM=10000
+ ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA])
+ ADD_JVM_ARG_IF_OK([-Xms10G -Xmx10G],SERVER_JAVA,[$SERVER_JAVA])
+ ADD_JVM_ARG_IF_OK([-Xmn2G],SERVER_JAVA,[$SERVER_JAVA])
+ elif test "$MEMORY_SIZE" -gt "10000"; then
+ MAX_HEAP_MEM=6000
+ ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA])
+ ADD_JVM_ARG_IF_OK([-Xms6G -Xmx6G],SERVER_JAVA,[$SERVER_JAVA])
+ ADD_JVM_ARG_IF_OK([-Xmn1G],SERVER_JAVA,[$SERVER_JAVA])
+ elif test "$MEMORY_SIZE" -gt "5000"; then
+ MAX_HEAP_MEM=3000
+ ADD_JVM_ARG_IF_OK([-d64],SERVER_JAVA,[$SERVER_JAVA])
+ ADD_JVM_ARG_IF_OK([-Xms1G -Xmx3G],SERVER_JAVA,[$SERVER_JAVA])
+ ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA])
+ elif test "$MEMORY_SIZE" -gt "3800"; then
+ MAX_HEAP_MEM=2500
+ ADD_JVM_ARG_IF_OK([-Xms1G -Xmx2500M],SERVER_JAVA,[$SERVER_JAVA])
+ ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA])
+ elif test "$MEMORY_SIZE" -gt "1900"; then
+ MAX_HEAP_MEM=1200
+ ADD_JVM_ARG_IF_OK([-Xms700M -Xmx1200M],SERVER_JAVA,[$SERVER_JAVA])
+ ADD_JVM_ARG_IF_OK([-Xmn256M],SERVER_JAVA,[$SERVER_JAVA])
+ elif test "$MEMORY_SIZE" -gt "1000"; then
+ MAX_HEAP_MEM=900
+ ADD_JVM_ARG_IF_OK([-Xms400M -Xmx900M],SERVER_JAVA,[$SERVER_JAVA])
+ ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA])
+ else
+ MAX_HEAP_MEM=512
+ ADD_JVM_ARG_IF_OK([-Xms256M -Xmx512M],SERVER_JAVA,[$SERVER_JAVA])
+ ADD_JVM_ARG_IF_OK([-Xmn128M],SERVER_JAVA,[$SERVER_JAVA])
+ fi
+
+ MAX_COMPILERS_IN_HEAP=`expr $MAX_HEAP_MEM / 501`
+ if test "$JAVAC_SERVER_CORES" -gt "$MAX_COMPILERS_IN_HEAP"; then
+ AC_MSG_CHECKING([if number of server cores must be reduced])
+ JAVAC_SERVER_CORES="$MAX_COMPILERS_IN_HEAP"
+ AC_MSG_RESULT([yes, to $JAVAC_SERVER_CORES with max heap size $MAX_HEAP_MEM MB])
+ fi
+fi
+AC_SUBST(JAVAC_SERVER_CORES)
+
+AC_MSG_CHECKING([whether to track dependencies between Java packages])
+AC_ARG_ENABLE([javac-deps], [AS_HELP_STRING([--enable-javac-deps],
+ [enable the dependency tracking between Java packages @<:@disabled@:>@])],
+ [ENABLE_JAVAC_DEPS="${enableval}"], [ENABLE_JAVAC_DEPS='no'])
+AC_MSG_RESULT([$ENABLE_JAVAC_DEPS])
+if test "x$ENABLE_JAVAC_DEPS" = xyes; then
+ JAVAC_USE_DEPS=true
+else
+ JAVAC_USE_DEPS=false
+fi
+AC_SUBST(JAVAC_USE_DEPS)
+
+AC_MSG_CHECKING([whether to use multiple cores for javac compilation])
+AC_ARG_ENABLE([javac-multi-core], [AS_HELP_STRING([--enable-javac-multi-core],
+ [compile Java packages concurrently @<:@disabled@:>@])],
+ [ENABLE_JAVAC_MULTICORE="${enableval}"], [ENABLE_JAVAC_MULTICORE='no'])
+AC_MSG_RESULT([$ENABLE_JAVAC_MULTICORE])
+if test "x$ENABLE_JAVAC_MULTICORE" = xyes; then
+ JAVAC_USE_MODE=MULTI_CORE_CONCURRENT
+else
+ JAVAC_USE_MODE=SINGLE_THREADED_BATCH
+ if test "x$ENABLE_JAVAC_DEPS" = xyes; then
+ AC_MSG_WARN([Dependency tracking is not supported with single threaded batch compiles of Java source roots. Please add --disable-javac-deps to your configure options.])
+ AC_MSG_WARN([Disabling dependency tracking for you now.])
+ JAVAC_USE_DEPS=false
+ fi
+ if test "x$ENABLE_JAVAC_SERVER" = xyes; then
+ AC_MSG_WARN([The javac server will not be used since single threaded batch compiles are run within their own JVM. Please add --disable-javac-server to your configure options.])
+ AC_MSG_WARN([Disabling javac server for you now.])
+ JAVAC_USE_REMOTE=false
+ fi
+fi
+AC_SUBST(JAVAC_USE_MODE)
+
+###############################################################################
+#
+# OS specific settings that we never will need to probe.
+#
+if test "x$HOST_OS" = xlinux; then
+ AC_MSG_CHECKING([what is not needed on Linux?])
+ PULSE_NOT_NEEDED=yes
+ AC_MSG_RESULT([pulse])
+fi
+
+if test "x$HOST_OS" = xsolaris; then
+ AC_MSG_CHECKING([what is not needed on Solaris?])
+ ALSA_NOT_NEEDED=yes
+ PULSE_NOT_NEEDED=yes
+ AC_MSG_RESULT([alsa pulse])
+fi
+
+if test "x$HOST_OS" = xwindows; then
+ AC_MSG_CHECKING([what is not needed on Windows?])
+ CUPS_NOT_NEEDED=yes
+ ALSA_NOT_NEEDED=yes
+ PULSE_NOT_NEEDED=yes
+ X11_NOT_NEEDED=yes
+ AC_MSG_RESULT([alsa cups pulse x11])
+fi
+
+if test "x$HOST_OS" = xmacosx; then
+ AC_MSG_CHECKING([what is not needed on MacOSX?])
+ ALSA_NOT_NEEDED=yes
+ PULSE_NOT_NEEDED=yes
+ X11_NOT_NEEDED=yes
+ FREETYPE2_NOT_NEEDED=yes
+ # If the java runtime framework is disabled, then we need X11.
+ # This will be adjusted below.
+ AC_MSG_RESULT([alsa pulse x11])
+fi
+
+if test "x$HOST_OS" = xbsd; then
+ AC_MSG_CHECKING([what is not needed on bsd?])
+ ALSA_NOT_NEEDED=yes
+ AC_MSG_RESULT([alsa])
+fi
+
+###############################################################################
+#
+# Check for MacOSX support for OpenJDK. If this exists, try to build a JVM
+# that uses this API.
+#
+AC_ARG_ENABLE([macosx-runtime-support], [AS_HELP_STRING([--disable-macosx-runtime-support],
+ [disable the use of MacOSX Java runtime support framework @<:@enabled@:>@])],
+ [MACOSX_RUNTIME_SUPPORT="${enableval}"],[MACOSX_RUNTIME_SUPPORT="no"])
+
+USE_MACOSX_RUNTIME_SUPPORT=no
+AC_MSG_CHECKING([for explicit Java runtime support in the OS])
+if test -f /System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers/JavaRuntimeSupport.h; then
+ if test "x$MACOSX_RUNTIME_SUPPORT" != xno; then
+ MACOSX_RUNTIME_SUPPORT=yes
+ USE_MACOSX_RUNTIME_SUPPORT=yes
+ AC_MSG_RESULT([yes, does not need alsa freetype2 pulse and X11])
+ else
+ AC_MSG_RESULT([yes, but explicitly disabled.])
+ fi
+else
+ AC_MSG_RESULT([no])
+fi
+
+if test "x$HOST_OS" = xmacosx && test "x$USE_MACOSX_RUNTIME_SUPPORT" = xno; then
+ AC_MSG_CHECKING([what is not needed on an X11 build on MacOSX?])
+ X11_NOT_NEEDED=
+ FREETYPE2_NOT_NEEDED=
+ AC_MSG_RESULT([alsa pulse])
+fi
+
+###############################################################################
+#
+# Check for X Windows
+#
+AC_PATH_XTRA
+
+if test "x$no_x" = xyes && test "x$X11_NOT_NEEDED" != xyes; then
+ help_on_build_dependency x11
+ AC_ERROR([Could not find X11 libraries. $HELP_MSG])
+fi
+
+AC_SUBST(X_CFLAGS)
+AC_SUBST(X_LIBS)
+
+# Some of the old makefiles require a setting of OPENWIN_HOME
+# Since the X11R6 directory has disappeared on later Linuxes,
+# we need to probe for it.
+if test "x$HOST_OS" = xlinux; then
+ if test -d "$SYS_ROOT/usr/X11R6"; then
+ OPENWIN_HOME="$SYS_ROOT/usr/X11R6"
+ fi
+ if test -d "$SYS_ROOT/usr/include/X11"; then
+ OPENWIN_HOME="$SYS_ROOT/usr"
+ fi
+fi
+if test "x$HOST_OS" = xsolaris; then
+ OPENWIN_HOME="/usr/openwin"
+fi
+AC_SUBST(OPENWIN_HOME)
+
+AC_LANG_PUSH(C)
+OLD_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS $X_CFLAGS"
+AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h],
+ [X11_A_OK=yes],
+ [X11_A_OK=no])
+CFLAGS="$OLD_CFLAGS"
+AC_LANG_POP(C)
+
+if test "x$X11_A_OK" = xno && test "x$X11_NOT_NEEDED" != xyes; then
+ help_on_build_dependency x11
+ AC_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h). $HELP_MSG])
+fi
+
+###############################################################################
+#
+# The common unix printing system cups is used to print from java.
+#
+AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups],
+ [specify prefix directory for the cups package
+ (expecting the libraries under PATH/lib and the headers under PATH/include)])])
+AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include],
+ [specify directory for the cups include files])])
+AC_ARG_WITH(cups-lib, [AS_HELP_STRING([--with-cups-lib],
+ [specify directory for the cups library])])
+
+if test "x$CUPS_NOT_NEEDED" = xyes; then
+ if test "x$with_cups" != x || test "x$with_cups-include" != x || test "x$with_cups-lib" != x; then
+ AC_MSG_WARN([cups not used, so --with-cups is ignored])
+ fi
+ CUPS_CFLAGS=
+ CUPS_LIBS=
+else
+ CUPS_FOUND=no
+
+ if test "x$with_cups" = xno || test "x$with_cups-include" = xno || test "x$with_cups-lib" = xno; then
+ AC_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.])
+ fi
+
+ if test "x$with_cups" != x; then
+ CUPS_LIBS="-L$with_cups/lib -lcups"
+ CUPS_CFLAGS="-I$with_cups/include"
+ CUPS_FOUND=yes
+ fi
+ if test "x$with_cups-include" != x; then
+ CUPS_CFLAGS="-I$with_cups-include"
+ CUPS_FOUND=yes
+ fi
+ if test "x$with_cups-lib" != x; then
+ CUPS_LIBS="-L$with_cups-lib -lcups"
+ CUPS_FOUND=yes
+ fi
+ if test "x$CUPS_FOUND" = xno; then
+ BDEPS_CHECK_MODULE(CUPS, cups, xxx, [CUPS_FOUND=yes])
+ fi
+ if test "x$CUPS_FOUND" = xno; then
+ # Are the cups headers installed in the default /usr/include location?
+ AC_CHECK_HEADERS([cups/cups.h cups/ppd.h],
+ [CUPS_FOUND=yes
+ CUPS_CFLAGS=
+ CUPS_LIBS="-lcups"
+ DEFAULT_CUPS=yes])
+ fi
+ if test "x$CUPS_FOUND" = xno; then
+ # Getting nervous now? Lets poke around for standard Solaris third-party
+ # package installation locations.
+ AC_MSG_CHECKING([for cups headers and libs])
+ if test -s /opt/sfw/cups/include/cups/cups.h; then
+ # An SFW package seems to be installed!
+ CUPS_FOUND=yes
+ CUPS_CFLAGS="-I/opt/sfw/cups/include"
+ CUPS_LIBS="-L/opt/sfw/cups/lib -lcups"
+ elif test -s /opt/csw/include/cups/cups.h; then
+ # A CSW package seems to be installed!
+ CUPS_FOUND=yes
+ CUPS_CFLAGS="-I/opt/csw/include"
+ CUPS_LIBS="-L/opt/csw/lib -lcups"
+ fi
+ AC_MSG_RESULT([$CUPS_FOUND])
+ fi
+ if test "x$CUPS_FOUND" = xno; then
+ help_on_build_dependency cups
+ AC_ERROR([Could not find cups! $HELP_MSG ])
+ fi
+fi
+
+AC_SUBST(CUPS_CFLAGS)
+AC_SUBST(CUPS_LIBS)
+
+###############################################################################
+#
+# The ubiquitous freetype2 library is used to render fonts.
+#
+AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype],
+ [specify prefix directory for the freetype2 package
+ (expecting the libraries under PATH/lib and the headers under PATH/include)])])
+
+# If we are using the OS installed system lib for freetype, then we do not need to copy it to the build tree
+USING_SYSTEM_FT_LIB=false
+
+if test "x$FREETYPE2_NOT_NEEDED" = xyes; then
+ if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then
+ AC_MSG_WARN([freetype not used, so --with-freetype is ignored])
+ fi
+ FREETYPE2_CFLAGS=
+ FREETYPE2_LIBS=
+ FREETYPE2_LIB_PATH=
+else
+ FREETYPE2_FOUND=no
+
+ if test "x$with_freetype" != x; then
+ SPACESAFE(with_freetype,[the path to freetype])
+ FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype"
+ if test "x$HOST_OS" = xwindows; then
+ FREETYPE2_LIBS="$with_freetype/lib/freetype.lib"
+ fi
+ FREETYPE2_LIB_PATH="$with_freetype/lib"
+ FREETYPE2_CFLAGS="-I$with_freetype/include"
+ if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then
+ FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include"
+ fi
+ FREETYPE2_FOUND=yes
+ if test "x$FREETYPE2_FOUND" = xyes; then
+ # Verify that the directories exist
+ if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then
+ AC_ERROR([Could not find the expected directories $with_freetype/lib and $with_freetype/include])
+ fi
+ # List the contents of the lib.
+ FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null`
+ if test "x$FREETYPELIB" = x; then
+ AC_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib])
+ fi
+ # Check one h-file
+ if ! test -s "$with_freetype/include/ft2build.h"; then
+ AC_ERROR([Could not find $with_freetype/include/ft2build.h])
+ fi
+ fi
+ fi
+ if test "x$FREETYPE2_FOUND" = xno; then
+ BDEPS_CHECK_MODULE(FREETYPE2, freetype2, xxx, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no])
+ USING_SYSTEM_FT_LIB=true
+ fi
+ if test "x$FREETYPE2_FOUND" = xno; then
+ PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no])
+ USING_SYSTEM_FT_LIB=true
+ fi
+ if test "x$FREETYPE2_FOUND" = xno; then
+ AC_MSG_CHECKING([for freetype in some standard locations])
+
+ if test -s /usr/X11/include/ft2build.h && test -d /usr/X11/include/freetype2/freetype; then
+ DEFAULT_FREETYPE_CFLAGS="-I/usr/X11/include/freetype2 -I/usr/X11/include"
+ DEFAULT_FREETYPE_LIBS="-L/usr/X11/lib -lfreetype"
+ fi
+ if test -s /usr/include/ft2build.h && test -d /usr/include/freetype2/freetype; then
+ DEFAULT_FREETYPE_CFLAGS="-I/usr/include/freetype2"
+ DEFAULT_FREETYPE_LIBS="-lfreetype"
+ fi
+
+ PREV_CXXCFLAGS="$CXXFLAGS"
+ PREV_LDFLAGS="$LDFLAGS"
+ CXXFLAGS="$CXXFLAGS $DEFAULT_FREETYPE_CFLAGS"
+ LDFLAGS="$LDFLAGS $DEFAULT_FREETYPE_LIBS"
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[#include
+ #include FT_FREETYPE_H
+ int main() { return 0; }
+ ]])],
+ [
+ # Yes, the default cflags and libs did the trick.
+ FREETYPE2_FOUND=yes
+ FREETYPE2_CFLAGS="$DEFAULT_FREETYPE_CFLAGS"
+ FREETYPE2_LIBS="$DEFAULT_FREETYPE_LIBS"
+ ],
+ [
+ FREETYPE2_FOUND=no
+ ])
+ CXXCFLAGS="$PREV_CXXFLAGS"
+ LDFLAGS="$PREV_LDFLAGS"
+ AC_MSG_RESULT([$FREETYPE2_FOUND])
+ USING_SYSTEM_FT_LIB=true
+ fi
+ if test "x$FREETYPE2_FOUND" = xno; then
+ help_on_build_dependency freetype2
+ AC_ERROR([Could not find freetype2! $HELP_MSG ])
+ fi
+fi
+
+AC_SUBST(USING_SYSTEM_FT_LIB)
+AC_SUBST(FREETYPE2_LIB_PATH)
+AC_SUBST(FREETYPE2_CFLAGS)
+AC_SUBST(FREETYPE2_LIBS)
+
+###############################################################################
+#
+# Check for alsa headers and libraries. Used on Linux/GNU systems.
+#
+AC_ARG_WITH(alsa, [AS_HELP_STRING([--with-alsa],
+ [specify prefix directory for the alsa package
+ (expecting the libraries under PATH/lib and the headers under PATH/include)])])
+AC_ARG_WITH(alsa-include, [AS_HELP_STRING([--with-alsa-include],
+ [specify directory for the alsa include files])])
+AC_ARG_WITH(alsa-lib, [AS_HELP_STRING([--with-alsa-lib],
+ [specify directory for the alsa library])])
+
+if test "x$ALSA_NOT_NEEDED" = xyes; then
+ if test "x$with_alsa" != x || test "x$with_alsa-include" != x || test "x$with_alsa-lib" != x; then
+ AC_MSG_WARN([alsa not used, so --with-alsa is ignored])
+ fi
+ ALSA_CFLAGS=
+ ALSA_LIBS=
+else
+ ALSA_FOUND=no
+
+ if test "x$with_alsa" = xno || test "x$with_alsa-include" = xno || test "x$with_alsa-lib" = xno; then
+ AC_ERROR([It is not possible to disable the use of alsa. Remove the --without-alsa option.])
+ fi
+
+ if test "x$with_alsa" != x; then
+ ALSA_LIBS="-L$with_alsa/lib -lalsa"
+ ALSA_CFLAGS="-I$with_alsa/include"
+ ALSA_FOUND=yes
+ fi
+ if test "x$with_alsa-include" != x; then
+ ALSA_CFLAGS="-I$with_alsa/include"
+ ALSA_FOUND=yes
+ fi
+ if test "x$with_alsa-lib" != x; then
+ ALSA_LIBS="-L$with_alsa/lib -lalsa"
+ ALSA_FOUND=yes
+ fi
+ if test "x$ALSA_FOUND" = xno; then
+ BDEPS_CHECK_MODULE(ALSA, alsa, xxx, [ALSA_FOUND=yes], [ALSA_FOUND=no])
+ fi
+ if test "x$ALSA_FOUND" = xno; then
+ PKG_CHECK_MODULES(ALSA, alsa, [ALSA_FOUND=yes], [ALSA_FOUND=no])
+ fi
+ if test "x$ALSA_FOUND" = xno; then
+ AC_CHECK_HEADERS([alsa/asoundlib.h],
+ [ALSA_FOUND=yes
+ ALSA_CFLAGS=-Iignoreme
+ ALSA_LIBS=-lasound
+ DEFAULT_ALSA=yes],
+ [ALSA_FOUND=no])
+ fi
+ if test "x$ALSA_FOUND" = xno; then
+ help_on_build_dependency alsa
+ AC_ERROR([Could not find alsa! $HELP_MSG ])
+ fi
+fi
+
+AC_SUBST(ALSA_CFLAGS)
+AC_SUBST(ALSA_LIBS)
+
+###############################################################################
+#
+# Check for pulse audio headers and libraries.
+#
+PULSE_FOUND=no
+AC_ARG_WITH(pulse, [AS_HELP_STRING([--with-pulse],
+ [specify prefix directory for the pulseaudio package
+ (expecting the libraries under PATH/lib and the headers under PATH/include)])])
+AC_ARG_WITH(pulse-include, [AS_HELP_STRING([--with-pulse-include],
+ [specify directory for the pulseaudio include files])])
+AC_ARG_WITH(pulse-lib, [AS_HELP_STRING([--with-pulse-lib],
+ [specify directory for the pulseaudio library])])
+
+if test "x$with_pulse" != x; then
+ PULSE_LIBS="-L$with_pulse/lib -lfreetype"
+ PULSE_CFLAGS="-I$with_pulse/include"
+ PULSE_FOUND=yes
+fi
+if test "x$with_pulse-include" != x; then
+ PULSE_CFLAGS="-I$with_pulse/include"
+ PULSE_FOUND=yes
+fi
+if test "x$with_pulse-lib" != x; then
+ PULSE_LIBS="-L$with_pulse/lib -lfreetype"
+ PULSE_FOUND=yes
+fi
+if test "x$PULSE_FOUND" = xno; then
+ BDEPS_CHECK_MODULE(PULSE, pulse, xxx, [PULSE_FOUND=yes], [PULSE_FOUND=no])
+fi
+if test "x$PULSE_FOUND" = xno; then
+ PKG_CHECK_MODULES(LIBPULSE,[libpulse >= 0.9.11],[PULSE_FOUND=yes],[PULSE_FOUND=no])
+fi
+if test "x$PULSE_FOUND" = xno; then
+ AC_CHECK_HEADERS([pulse/pulseaudio.h],
+ [PULSE_FOUND=yes
+ PULSE_CFLAGS=-Iignoreme
+ PULSE_LIBS=
+ DEFAULT_PULSE=yes],
+ [PULSE_FOUND=no])
+fi
+
+if test "x$PULSE_FOUND" = xno && test "x$PULSE_NOT_NEEDED" != xyes; then
+ help_on_build_dependency pulse
+ AC_ERROR([Could not find pulse audio libraries. $HELP_MSG ])
+fi
+
+AC_SUBST(PULSE_CFLAGS)
+AC_SUBST(PULSE_LIBS)
+
+###############################################################################
+#
+# Check for the jpeg library
+#
+
+USE_EXTERNAL_LIBJPEG=true
+AC_CHECK_LIB(jpeg, main, [],
+ [ USE_EXTERNAL_LIBJPEG=false
+ AC_MSG_NOTICE([Will use jpeg decoder bundled with the OpenJDK source])
+ ])
+AC_SUBST(USE_EXTERNAL_LIBJPEG)
+
+###############################################################################
+#
+# Check for the gif library
+#
+
+USE_EXTERNAL_LIBJPEG=true
+AC_CHECK_LIB(gif, main, [],
+ [ USE_EXTERNAL_LIBGIF=false
+ AC_MSG_NOTICE([Will use gif decoder bundled with the OpenJDK source])
+ ])
+AC_SUBST(USE_EXTERNAL_LIBGIF)
+
+###############################################################################
+#
+# Check for the zlib library
+#
+
+USE_EXTERNAL_LIBZ=true
+AC_CHECK_LIB(z, main, [],
+ [ USE_EXTERNAL_LIBZ=false
+ AC_MSG_NOTICE([Will use zlib bundled with the OpenJDK source])
+ ])
+AC_SUBST(USE_EXTERNAL_LIBZ)
+
+###############################################################################
+#
+# Check if altzone exists in time.h
+#
+
+AC_TRY_LINK([#include ], [return (int)altzone;],
+ has_altzone=yes,
+ has_altzone=no)
+if test "x$has_altzone" = xyes; then
+ AC_DEFINE([HAVE_ALTZONE], 1, [Define if you have the external 'altzone' variable in time.h])
+fi
+
+###############################################################################
+#
+# Check the maths library
+#
+
+AC_CHECK_LIB(m, main, [],
+ [
+ AC_MSG_NOTICE([Maths library was not found])
+ ])
+AC_SUBST(LIBM)
+
+###############################################################################
+#
+# Should we run the painfully slow javadoc tool?
+#
+AC_MSG_CHECKING([whether to build documentation])
+AC_ARG_ENABLE([docs], [AS_HELP_STRING([--enable-docs],
+ [enable generation of Javadoc documentation @<:@disabled@:>@])],
+ [ENABLE_DOCS="${enableval}"], [ENABLE_DOCS='no'])
+AC_MSG_RESULT([$ENABLE_DOCS])
+AC_SUBST(ENABLE_DOCS)
+GENERATE_DOCS=false
+if test "x$ENABLE_DOCS" = xyes; then
+ GENERATE_DOCS=true
+fi
+AC_SUBST(GENERATE_DOCS)
+
+###############################################################################
+#
+# Should we compile nimbus swing L&F? We can probably remove this option
+# since nimbus is officially part of javax now.
+#
+AC_MSG_CHECKING([whether to build nimbus L&F])
+AC_ARG_ENABLE([nimbus], [AS_HELP_STRING([--disable-nimbus],
+ [disable Nimbus L&F @<:@enabled@:>@])],
+ [ENABLE_NIMBUS="${enableval}"], [ENABLE_NIMBUS='yes'])
+AC_MSG_RESULT([$ENABLE_NIMBUS])
+DISABLE_NIMBUS=
+if test "x$ENABLE_NIMBUS" = xno; then
+ DISABLE_NIMBUS=true
+fi
+AC_SUBST(DISABLE_NIMBUS)
+
+###############################################################################
+#
+# Setup the opt flags for different compilers
+# and different operating systems.
+#
+case $COMPILER_TYPE in
+ CC )
+ D_FLAG="-g"
+ case $COMPILER_NAME in
+ gcc )
+ case $PLATFORM in
+ macosx )
+ # On MacOSX we optimize for size, something
+ # we should do for all platforms?
+ C_O_FLAG_HI="-O3"
+ C_O_FLAG_NORM="-Os"
+ C_O_FLAG_NONE="-O0"
+ ;;
+ *)
+ C_O_FLAG_HI="-O3"
+ C_O_FLAG_NORM="-O2"
+ C_O_FLAG_NONE="-O0"
+ ;;
+ esac
+ CXX_O_FLAG_HI="$C_O_FLAG_HI"
+ CXX_O_FLAG_NORM="$C_O_FLAG_NORM"
+ CXX_O_FLAG_NONE="$C_O_FLAG_NONE"
+ ;;
+ ossc )
+ case $LEGACY_HOST_CPU1 in
+ i586)
+ C_O_FLAG_HI="-xO4 -Wu,-O4~yz"
+ C_O_FLAG_NORM="-xO2 -Wu,-O2~yz"
+ C_O_FLAG_NONE=""
+ CXX_O_FLAG_HI="-xO4 -Qoption ube -O4~yz"
+ CXX_O_FLAG_NORM="-xO2 -Qoption ube -O2~yz"
+ CXX_O_FLAG_NONE=""
+ ;;
+ sparc)
+ C_O_FLAG_HI="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0"
+ C_O_FLAG_NORM="-xO2 -Wc,-Qrm-s -Wc,-Qiselect-T0"
+ C_O_FLAG_NONE=""
+ CXX_O_FLAG_HI="-xO4 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
+ CXX_O_FLAG_NORM="-xO2 -Qoption cg -Qrm-s -Qoption cg -Qiselect-T0"
+ CXX_O_FLAG_NONE=""
+ ;;
+ esac
+ esac
+ ;;
+ CL )
+ D_FLAG=
+ C_O_FLAG_HI="-O2"
+ C_O_FLAG_NORM="-O1"
+ C_O_FLAG_NONE="-Od"
+ CXX_O_FLAG_HI="$C_O_FLAG_HI"
+ CXX_O_FLAG_NORM="$C_O_FLAG_NORM"
+ CXX_O_FLAG_NONE="$C_O_FLAG_NONE"
+ ;;
+esac
+
+AC_SUBST(C_O_FLAG_HI)
+AC_SUBST(C_O_FLAG_NORM)
+AC_SUBST(C_O_FLAG_NONE)
+AC_SUBST(CXX_O_FLAG_HI)
+AC_SUBST(CXX_O_FLAG_NORM)
+AC_SUBST(CXX_O_FLAG_NONE)
+
+###############################################################################
+#
+# Setup legacy vars/targets and new vars to deal with different debug levels.
+#
+case $DEBUG_LEVEL in
+ release )
+ HOTSPOT_DEBUG_LEVEL="product"
+ HOTSPOT_EXPORT="product"
+ ;;
+ fastdebug )
+ HOTSPOT_DEBUG_LEVEL="fastdebug"
+ HOTSPOT_EXPORT="fastdebug"
+ CFLAGS="$CFLAGS $D_FLAG"
+ JAVAC_FLAGS="$JAVAC_FLAGS -g"
+ ;;
+ slowdebug )
+ HOTSPOT_DEBUG_LEVEL="jvmg"
+ HOTSPOT_EXPORT="debug"
+ CFLAGS="$CFLAGS $D_FLAG"
+ C_O_FLAG_HI="$C_O_FLAG_NONE"
+ C_O_FLAG_NORM="$C_O_FLAG_NONE"
+ CXX_O_FLAG_HI="$CXX_O_FLAG_NONE"
+ CXX_O_FLAG_NORM="$CXX_O_FLAG_NONE"
+ JAVAC_FLAGS="$JAVAC_FLAGS -g"
+ ;;
+esac
+
+###############################################################################
+#
+# Generate the legacy makefile targets for hotspot.
+# The hotspot api for selecting the build artifacts, really, needs to be improved.
+#
+HOTSPOT_TARGET=""
+
+if test "x$JVM_VARIANT_SERVER" = xtrue; then
+ HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL} "
+fi
+
+if test "x$JVM_VARIANT_CLIENT" = xtrue; then
+ HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}1 "
+fi
+
+if test "x$JVM_VARIANT_KERNEL" = xtrue; then
+ HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}kernel "
+fi
+
+if test "x$JVM_VARIANT_ZERO" = xtrue; then
+ HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}zero "
+fi
+
+if test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then
+ HOTSPOT_TARGET="$HOTSPOT_TARGET${HOTSPOT_DEBUG_LEVEL}shark "
+fi
+
+HOTSPOT_TARGET="$HOTSPOT_TARGET docs export_$HOTSPOT_EXPORT"
+
+###############################################################################
+#
+# Setup all directories for the subrepoes and the arguments to the sub makes.
+#
+LANGTOOLS_OUTPUTDIR="$OUTPUT_ROOT/langtools"
+LANGTOOLS_DIST="$OUTPUT_ROOT/langtools/dist"
+LANGTOOLS_MAKE_ARGS=""
+AC_SUBST(LANGTOOLS_OUTPUTDIR)
+AC_SUBST(LANGTOOLS_DIST)
+AC_SUBST(LANGTOOLS_MAKE_ARGS)
+
+CORBA_OUTPUTDIR="$OUTPUT_ROOT/corba"
+CORBA_DIST="$OUTPUT_ROOT/corba/dist"
+CORBA_MAKE_ARGS=""
+AC_SUBST(CORBA_OUTPUTDIR)
+AC_SUBST(CORBA_DIST)
+AC_SUBST(CORBA_MAKE_ARGS)
+
+JAXP_OUTPUTDIR="$OUTPUT_ROOT/jaxp"
+JAXP_DIST="$OUTPUT_ROOT/jaxp/dist"
+JAXP_MAKE_ARGS=""
+AC_SUBST(JAXP_OUTPUTDIR)
+AC_SUBST(JAXP_DIST)
+AC_SUBST(JAXP_MAKE_ARGS)
+
+JAXWS_OUTPUTDIR="$OUTPUT_ROOT/jaxws"
+JAXWS_DIST="$OUTPUT_ROOT/jaxws/dist"
+JAXWS_MAKE_ARGS=""
+AC_SUBST(JAXWS_OUTPUTDIR)
+AC_SUBST(JAXWS_DIST)
+AC_SUBST(JAXWS_MAKE_ARGS)
+
+HOTSPOT_OUTPUTDIR="$OUTPUT_ROOT/hotspot"
+HOTSPOT_DIST="$OUTPUT_ROOT/hotspot/dist"
+HOTSPOT_MAKE_ARGS="ALT_OUTPUTDIR=$HOTSPOT_OUTPUTDIR ALT_EXPORT_PATH=$HOTSPOT_DIST $HOTSPOT_TARGET"
+AC_SUBST(HOTSPOT_OUTPUTDIR)
+AC_SUBST(HOTSPOT_DIST)
+AC_SUBST(HOTSPOT_MAKE_ARGS)
+
+JDK_OUTPUTDIR="$OUTPUT_ROOT/jdk"
+JDK_MAKE_ARGS="ALT_OUTPUTDIR=\"$OUTPUT_ROOT/jdk\""
+AC_SUBST(JDK_OUTPUTDIR)
+AC_SUBST(JDK_MAKE_ARGS)
+
+IMAGES_OUTPUTDIR=$OUTPUT_ROOT/images
+IMAGES_MAKE_ARGS="ALT_OUTPUTDIR=$OUTPUT_ROOT/jdk \
+ SHARE_SRC=$JDK_TOPDIR/src/share \
+ PLATFORM_SRC=$JDK_TOPDIR/src/$LEGACY_HOST_OS_API \
+ TEMPDIR=$IMAGES_OUTPUTDIR/tmp \
+ ABS_TEMPDIR=$IMAGES_OUTPUTDIR/tmp "
+AC_SUBST(IMAGES_OUTPUTDIR)
+AC_SUBST(IMAGES_MAKE_ARGS)
+
+###############################################################################
+#
+# Now setup the CFLAGS and LDFLAGS for the JDK build.
+# Later we will also have CFLAGS and LDFLAGS for the hotspot subrepo build.
+#
+case $COMPILER_NAME in
+ gcc )
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -W -Wall -Wno-unused -Wno-parentheses -pipe -fno-omit-frame-pointer \
+ -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
+ CFLAGS_JDK="$CFLAGS_JDK -fno-strict-aliasing"
+ ;;
+ ossc )
+ CFLAGS_JDK="$CFLAGS_JDK -xc99=%none -xCC -errshort=tags -Xa REQUIRED -v -mt -norunpath -xnolib"
+ CXXFLAGS_JDK="$CXXFLAGS_JDK -errtags=yes +w -mt REQUIRED -features=no%except -DCC_NOEX"
+ ;;
+ cl )
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -Zi -MD -Zc:wchar_t- -W3 -wd4800 \
+ -D_STATIC_CPPLIB -D_DISABLE_DEPRECATE_STATIC_CPPLIB -DWIN32_LEAN_AND_MEAN \
+ -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \
+ -DWIN32 -DIAL"
+ case $LEGACY_HOST_CPU1 in
+ i?86 )
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_X86_ -Dx86"
+ ;;
+ amd64 )
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_AMD64_ -Damd64"
+ ;;
+ esac
+ ;;
+esac
+
+CCXXFLAGS_JDK="$CCXXFLAGS_JDK $ADD_LP64"
+
+# The package path is used only on macosx?
+PACKAGE_PATH=/opt/local
+AC_SUBST(PACKAGE_PATH)
+
+# Sometimes we use a cpu dir (.../lib/amd64/server)
+# Sometimes not (.../lib/server)
+LIBARCHDIR="$LEGACY_HOST_CPU2/"
+if test "x$ENDIAN" = xlittle; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_LITTLE_ENDIAN"
+else
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -D_BIG_ENDIAN"
+fi
+if test "x$HOST_OS" = xlinux; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DLINUX"
+fi
+if test "x$HOST_OS" = xwindows; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DWINDOWS"
+fi
+if test "x$HOST_OS" = xsolaris; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DSOLARIS"
+fi
+if test "x$HOST_OS" = xmacosx; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DMACOSX -D_ALLBSD_SOURCE"
+ LIBARCHDIR=""
+fi
+if test "x$HOST_OS" = xbsd; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DBSD -D_ALLBSD_SOURCE"
+fi
+if test "x$DEBUG_LEVEL" = xrelease; then
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DNDEBUG"
+else
+ CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DDEBUG"
+fi
+
+CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DARCH='\"$LEGACY_HOST_CPU1\"' -D$LEGACY_HOST_CPU1"
+CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DRELEASE='\"$RELEASE\"'"
+
+CCXXFLAGS_JDK="$CCXXFLAGS_JDK \
+ -I${JDK_OUTPUTDIR}/include \
+ -I${JDK_OUTPUTDIR}/include/$PLATFORM \
+ -I${JDK_TOPDIR}/src/share/javavm/export \
+ -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/javavm/export \
+ -I${JDK_TOPDIR}/src/share/native/common \
+ -I${JDK_TOPDIR}/src/$LEGACY_HOST_OS_API/native/common"
+
+# The shared libraries are compiled using the picflag.
+CFLAGS_JDKLIB="$CCXXFLAGS_JDK $CFLAGS_JDK $PICFLAG $CFLAGS_JDKLIB_EXTRA"
+CXXFLAGS_JDKLIB="$CCXXFLAGS_JDK $CXXFLAGS_JDK $PICFLAG"
+
+# Executable flags
+CFLAGS_JDKEXE="$CCXXFLAGS_JDK $CFLAGS_JDK"
+CXXFLAGS_JDKEXE="$CCXXFLAGS_JDK $CXXFLAGS_JDK"
+
+# Now this is odd. The JDK native libraries have to link against libjvm.so
+# On 32-bit machines there is normally two distinct libjvm.so:s, client and server.
+# Which should we link to? Are we lucky enough that the binary api to the libjvm.so library
+# is identical for client and server? Yes. Which is picked at runtime (client or server)?
+# Neither, since the chosen libjvm.so has already been loaded by the launcher, all the following
+# libraries will link to whatever is in memory. Yuck.
+#
+# Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh.
+if test "x$COMPILER_TYPE" = xCL; then
+ LDFLAGS_JDKLIB="$LDFLAGS -libpath:${JDK_OUTPUTDIR}/lib jvm.lib java.lib"
+ LDFLAGS_JDKLIB_SUFFIX=""
+ if test "x$HOST_CPU_BITS" = "x64"; then
+ LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj64/jli.lib"
+ else
+ LDFLAGS_JDKEXE="$CFLAGS ${JDK_OUTPUTDIR}/tmp/java/jli/obj/jli.lib"
+ fi
+ LDFLAGS_JDKEXE_SUFFIX=""
+else
+ # If this is a --hash-style=gnu system, use --hash-style=both, why?
+ HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'`
+ if test -n "$HAS_GNU_HASH"; then
+ # And since we now know that the linker is gnu, then add -z defs, to forbid
+ # undefined symbols in object files.
+ LDFLAGS="$LDFLAGS -Xlinker --hash-style=both -Xlinker -z -Xlinker defs"
+ if test "x$DEBUG_LEVEL" == "xrelease"; then
+ # When building release libraries, tell the linker optimize them.
+ # Should this be supplied to the OSS linker as well?
+ LDFLAGS="$LDFLAGS -Xlinker -O1"
+ fi
+ fi
+
+ LDFLAGS_JDKLIB="$LDFLAGS $SHARED_LIBRARY_FLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}server \
+ -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}client \
+ -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}"
+ LDFLAGS_JDKLIB_SUFFIX="-ljvm -ljava"
+ if test "x$COMPILER_NAME" = xossc; then
+ LDFLAGS_JDKLIB_SUFFIX="$LDFLAGS_JDKLIB_SUFFIX -lc"
+ fi
+
+ # Only the jli library is explicitly linked when the launchers are built.
+ # The libjvm is then dynamically loaded/linked by the launcher.
+ LDFLAGS_JDKEXE="$LDFLAGS -L${JDK_OUTPUTDIR}/lib/${LIBARCHDIR}jli"
+ LDFLAGS_JDKEXE_SUFFIX="-ljli"
+fi
+
+
+AC_SUBST(CFLAGS_JDKLIB)
+AC_SUBST(CFLAGS_JDKEXE)
+
+AC_SUBST(CXXFLAGS_JDKLIB)
+AC_SUBST(CXXFLAGS_JDKEXE)
+
+AC_SUBST(LDFLAGS_JDKLIB)
+AC_SUBST(LDFLAGS_JDKEXE)
+AC_SUBST(LDFLAGS_JDKLIB_SUFFIX)
+AC_SUBST(LDFLAGS_JDKEXE_SUFFIX)
+
+
+###############################################################################
+#
+# statically link libstdc++ before C++ ABI is stablized on Linux unless
+# dynamic build is configured on command line.
+#
+AC_ARG_ENABLE([static-link-stdc++], [AS_HELP_STRING([--disable-static-link-stdc++],
+ [disable static linking of the C++ runtime on Linux @<:@enabled@:>@])],,
+ [
+ enable_static_link_stdc__=yes
+ ])
+
+if test "x$HOST_OS" = xlinux; then
+ # Test if -lstdc++ works.
+ AC_MSG_CHECKING([if dynamic link of stdc++ is possible])
+ AC_LANG_PUSH(C++)
+ OLD_CXXFLAGS="$CXXFLAGS"
+ CXXFLAGS="$CXXFLAGS -lstdc++"
+ AC_TRY_LINK([], [return 0;],
+ has_dynamic_libstdcxx=yes,
+ has_dynamic_libstdcxx=no)
+ CXXFLAGS="$OLD_CXXFLAGS"
+ AC_LANG_POP(C++)
+ AC_MSG_RESULT([$has_dynamic_libstdcxx])
+
+ # Test if stdc++ can be linked statically.
+ AC_MSG_CHECKING([if static link of stdc++ is possible])
+ STATIC_STDCXX_FLAGS="-Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic"
+ AC_LANG_PUSH(C++)
+ OLD_LIBS="$LIBS"
+ OLD_CXX="$CXX"
+ LIBS="$STATIC_STDCXX_FLAGS"
+ CXX="$CC"
+ AC_TRY_LINK([], [return 0;],
+ has_static_libstdcxx=yes,
+ has_static_libstdcxx=no)
+ LIBS="$OLD_LIBS"
+ CXX="$OLD_CXX"
+ AC_LANG_POP(C++)
+ AC_MSG_RESULT([$has_static_libstdcxx])
+
+ if test "x$has_static_libcxx" = xno && test "x$has_dynamic_libcxx" = xno; then
+ AC_ERROR([I cannot link to stdc++! Neither dynamically nor statically.])
+ fi
+
+ if test "x$enable_static_link_stdc__" = xyes && test "x$has_static_libstdcxx" = xno; then
+ AC_MSG_NOTICE([Static linking of libstdc++ was not possible reverting to dynamic linking.])
+ enable_static_link_stdc__=no
+ fi
+
+ if test "x$enable_static_link_stdc__" = xno && test "x$has_dynamic_libstdcxx" = xno; then
+ AC_MSG_NOTICE([Dynamic linking of libstdc++ was not possible reverting to static linking.])
+ enable_static_link_stdc__=yes
+ fi
+
+ AC_MSG_CHECKING([how to link with libstdc++])
+ if test "x$enable_static_link_stdc__" = xyes; then
+ LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS"
+ LDCXX="$CC"
+ AC_MSG_RESULT([static])
+ else
+ LIBCXX="$LIBCXX -lstdc++"
+ LDCXX="$CXX"
+ AC_MSG_RESULT([dynamic])
+ fi
+fi
+
+###############################################################################
+#
+# Could someone enlighten this configure script with a comment about libCrun?
+# The LEGACY_HOST_CPU3 is the setting for ISA_DIR.
+#
+if test "x$HOST_OS" = xsolaris; then
+ LIBCXX="$LIBCXX /usr/lib${LEGACY_HOST_CPU3}/libCrun.so.1"
+fi
+
+AC_SUBST(LIBCXX)
+
+###############################################################################
+#
+# Misc
+#
+
+# Control wether Hotspot runs Queens test after build.
+AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build],
+ [enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],,
+ [enable_hotspot_test_in_build=no])
+if test "x$enable_hotspot_test_in_build" = "xyes"; then
+ TEST_IN_BUILD=true
+else
+ TEST_IN_BUILD=false
+fi
+AC_SUBST(TEST_IN_BUILD)
+
+###############################################################################
+#
+# A helpful message at the end of the configure run.
+#
+if test "x$CCACHE_FOUND" = x && test "x$GCC" = xyes; then
+ help_on_build_dependency ccache
+
+ printf "\nTip of the day:\nYou should really install ccache version 3.1.4 or newer.\n"
+ printf "It gives a tremendous speedup for C++ recompilations with precompiled headers!\n"
+fi
+
+if test "x$CCACHE_FOUND" != x && test "x$HAS_GOOD_CCACHE" = x; then
+ printf "You have a ccache installed, but it is a version prior to 3.1.4. Try upgrading.\n"
+fi
+
+AC_OUTPUT
diff --git a/common/autoconf/cores.m4 b/common/autoconf/cores.m4
new file mode 100644
index 00000000000..f48887d36be
--- /dev/null
+++ b/common/autoconf/cores.m4
@@ -0,0 +1,103 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+AC_DEFUN([CHECK_CORES],
+[
+ AC_MSG_CHECKING([for number of cores])
+ NUM_CORES=1
+ FOUND_CORES=no
+
+ if test -f /proc/cpuinfo; then
+ # Looks like a Linux system
+ NUM_CORES=`cat /proc/cpuinfo | grep -c processor`
+ FOUND_CORES=yes
+ fi
+
+ if test -x /usr/sbin/psrinfo; then
+ # Looks like a Solaris system
+ NUM_CORES=`LC_MESSAGES=C /usr/sbin/psrinfo -v | grep -c on-line`
+ FOUND_CORES=yes
+ fi
+
+ if test -x /usr/sbin/system_profiler; then
+ # Looks like a MacOSX system
+ NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'`
+ FOUND_CORES=yes
+ fi
+
+ if test "x$build_os" = xwindows; then
+ NUM_CORES=4
+ fi
+
+ # For c/c++ code we run twice as many concurrent build
+ # jobs than we have cores, otherwise we will stall on io.
+ CONCURRENT_BUILD_JOBS=`expr $NUM_CORES \* 2`
+
+ if test "x$FOUND_CORES" = xyes; then
+ AC_MSG_RESULT([$NUM_CORES])
+ else
+ AC_MSG_RESULT([could not detect number of cores, defaulting to 1!])
+ fi
+
+])
+
+AC_DEFUN([CHECK_MEMORY_SIZE],
+[
+ AC_MSG_CHECKING([for memory size])
+ # Default to 1024MB
+ MEMORY_SIZE=1024
+ FOUND_MEM=no
+
+ if test -f /proc/cpuinfo; then
+ # Looks like a Linux system
+ MEMORY_SIZE=`cat /proc/meminfo | grep MemTotal | awk '{print [$]2}'`
+ MEMORY_SIZE=`expr $MEMORY_SIZE / 1024`
+ FOUND_MEM=yes
+ fi
+
+ if test -x /usr/sbin/prtconf; then
+ # Looks like a Solaris system
+ MEMORY_SIZE=`/usr/sbin/prtconf | grep "Memory size" | awk '{ print [$]3 }'`
+ FOUND_MEM=yes
+ fi
+
+ if test -x /usr/sbin/system_profiler; then
+ # Looks like a MacOSX system
+ MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'`
+ MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024`
+ FOUND_MEM=yes
+ fi
+
+ if test "x$build_os" = xwindows; then
+ MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'`
+ FOUND_MEM=yes
+ fi
+
+ if test "x$FOUND_MEM" = xyes; then
+ AC_MSG_RESULT([$MEMORY_SIZE MB])
+ else
+ AC_MSG_RESULT([could not detect memory size defaulting to 1024MB!])
+ fi
+])
diff --git a/common/autoconf/help.m4 b/common/autoconf/help.m4
new file mode 100644
index 00000000000..16aef9fb33c
--- /dev/null
+++ b/common/autoconf/help.m4
@@ -0,0 +1,110 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+function help_on_build_dependency {
+ # Print a helpful message on how to acquire the necessary build dependency.
+ # $1 is the help tag: freetyp2, cups, pulse, alsa etc
+ MISSING_DEPENDENCY=$1
+ PKGHANDLER_COMMAND=
+
+ AC_CHECK_PROGS(PKGHANDLER, apt-get yum port pkgutil pkgadd)
+
+ case $PKGHANDLER in
+ apt-get)
+ apt_help $MISSING_DEPENDENCY ;;
+ yum)
+ yum_help $MISSING_DEPENDENCY ;;
+ port)
+ port_help $MISSING_DEPENDENCY ;;
+ pkgutil)
+ pkgutil_help $MISSING_DEPENDENCY ;;
+ pkgadd)
+ pkgadd_help $MISSING_DEPENDENCY ;;
+ * )
+ break ;;
+ esac
+
+ if test "x$PKGHANDLER_COMMAND" != x; then
+ HELP_MSG="Try running '$PKGHANDLER_COMMAND'."
+ fi
+}
+
+function apt_help {
+ case $1 in
+ devkit)
+ PKGHANDLER_COMMAND="sudo apt-get install build-essential" ;;
+ openjdk)
+ PKGHANDLER_COMMAND="sudo apt-get install openjdk-7-jdk" ;;
+ alsa)
+ PKGHANDLER_COMMAND="sudo apt-get install libasound2-dev" ;;
+ cups)
+ PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;;
+ freetype2)
+ PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;;
+ pulse)
+ PKGHANDLER_COMMAND="sudo apt-get install libpulse-dev" ;;
+ x11)
+ PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev" ;;
+ ccache)
+ PKGHANDLER_COMMAND="sudo apt-get install ccache" ;;
+ * )
+ break ;;
+ esac
+}
+
+function yum_help {
+ case $1 in
+ devkit)
+ PKGHANDLER_COMMAND="sudo yum groupinstall \"Development Tools\"" ;;
+ openjdk)
+ PKGHANDLER_COMMAND="sudo yum install java-1.7.0-openjdk" ;;
+ alsa)
+ PKGHANDLER_COMMAND="sudo yum install alsa-lib-devel" ;;
+ cups)
+ PKGHANDLER_COMMAND="sudo yum install cups-devel" ;;
+ freetype2)
+ PKGHANDLER_COMMAND="sudo yum install freetype2-devel" ;;
+ pulse)
+ PKGHANDLER_COMMAND="sudo yum install pulseaudio-libs-devel" ;;
+ x11)
+ PKGHANDLER_COMMAND="sudo yum install libXtst-devel" ;;
+ ccache)
+ PKGHANDLER_COMMAND="sudo yum install ccache" ;;
+ * )
+ break ;;
+ esac
+}
+
+function port_help {
+ PKGHANDLER_COMMAND=""
+}
+
+function pkgutil_help {
+ PKGHANDLER_COMMAND=""
+}
+
+function pkgadd_help {
+ PKGHANDLER_COMMAND=""
+}
diff --git a/common/autoconf/platform.m4 b/common/autoconf/platform.m4
new file mode 100644
index 00000000000..364b371ab7e
--- /dev/null
+++ b/common/autoconf/platform.m4
@@ -0,0 +1,517 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+AC_DEFUN([CHECK_FIND_DELETE],
+[
+ # Test if find supports -delete
+ AC_MSG_CHECKING([if find supports -delete])
+ FIND_DELETE="-delete"
+
+ DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?)
+
+ echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete
+
+ TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1`
+ if test -f $DELETEDIR/TestIfFindSupportsDelete; then
+ # No, it does not.
+ rm $DELETEDIR/TestIfFindSupportsDelete
+ FIND_DELETE="-exec rm \{\} \+"
+ AC_MSG_RESULT([no])
+ else
+ AC_MSG_RESULT([yes])
+ fi
+ rmdir $DELETEDIR
+])
+
+AC_DEFUN([CHECK_NONEMPTY],
+[
+ # Test that variable $1 is not empty.
+ if test "" = "[$]$1"; then AC_ERROR(Could not find translit($1,A-Z,a-z) !); fi
+])
+
+AC_DEFUN([ADD_JVM_ARG_IF_OK],
+[
+ # Test if $1 is a valid argument to $3 (often is $JAVA passed as $3)
+ # If so, then append $1 to $2
+ FOUND_WARN=`$3 $1 -version 2>&1 | grep -i warn`
+ FOUND_VERSION=`$3 $1 -version 2>&1 | grep " version \""`
+ if test "x$FOUND_VERSION" != x && test "x$FOUND_WARN" = x; then
+ $2="[$]$2 $1"
+ fi
+])
+
+AC_DEFUN([WHICHCMD],
+[
+ # Translate "gcc -E" into "`which gcc` -E" ie
+ # extract the full path to the binary and at the
+ # same time maintain any arguments passed to it.
+ # The command MUST exist in the path, or else!
+ tmp="[$]$1"
+ car="${tmp%% *}"
+ tmp="[$]$1 EOL"
+ cdr="${tmp#* }"
+ # On windows we want paths without spaces.
+ if test "x$BUILD_OS" = "xwindows"; then
+ WHICHCMD_SPACESAFE(car)
+ else
+ # "which" is not portable, but is used here
+ # because we know that the command exists!
+ car=`which $car`
+ fi
+ if test "x$cdr" != xEOL; then
+ $1="$car ${cdr% *}"
+ else
+ $1="$car"
+ fi
+])
+
+AC_DEFUN([SPACESAFE],
+[
+ # Fail with message $2 if var $1 contains a path with no spaces in it.
+ # Unless on Windows, where we can rewrite the path.
+ HAS_SPACE=`echo "[$]$1" | grep " "`
+ if test "x$HAS_SPACE" != x; then
+ if test "x$BUILD_OS" = "xwindows"; then
+ $1=`$CYGPATH -s -m -a "[$]$1"`
+ $1=`$CYGPATH -u "[$]$1"`
+ else
+ AC_ERROR([You cannot have spaces in $2! "[$]$1"])
+ fi
+ fi
+])
+
+AC_DEFUN([WHICHCMD_SPACESAFE],
+[
+ # Translate long cygdrive or C:\sdfsf path
+ # into a short mixed mode path that has no
+ # spaces in it.
+ tmp="[$]$1"
+ if test "x$BUILD_OS" = "xwindows"; then
+ tmp=`$CYGPATH -u "[$]$1"`
+ tmp=`which "$tmp"`
+ # If file exists with .exe appended, that's the real filename
+ # and cygpath needs that to convert to short style path.
+ if test -f "${tmp}.exe"; then
+ tmp="${tmp}.exe"
+ elif test -f "${tmp}.cmd"; then
+ tmp="${tmp}.cmd"
+ fi
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ fi
+ $1="$tmp"
+])
+
+AC_DEFUN([REMOVE_SYMBOLIC_LINKS],
+[
+ if test "x$BUILD_OS" != xwindows; then
+ # Follow a chain of symbolic links. Use readlink
+ # where it exists, else fall back to horribly
+ # complicated shell code.
+ AC_PATH_PROG(READLINK, readlink)
+ if test "x$READLINK_TESTED" != yes; then
+ # On MacOSX there is a readlink tool with a different
+ # purpose than the GNU readlink tool. Check the found readlink.
+ ISGNU=`$READLINK --help 2>&1 | grep GNU`
+ if test "x$ISGNU" = x; then
+ # A readlink that we do not know how to use.
+ # Are there other non-GNU readlinks out there?
+ READLINK_TESTED=yes
+ READLINK=
+ fi
+ fi
+
+ if test "x$READLINK" != x; then
+ $1=`$READLINK -f [$]$1`
+ else
+ STARTDIR=$PWD
+ COUNTER=0
+ DIR=`dirname [$]$1`
+ FIL=`basename [$]$1`
+ while test $COUNTER -lt 20; do
+ ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'`
+ if test "x$ISLINK" == x; then
+ # This is not a symbolic link! We are done!
+ break
+ fi
+ # The link might be relative! We have to use cd to travel safely.
+ cd $DIR
+ cd `dirname $ISLINK`
+ DIR=`pwd`
+ FIL=`basename $ISLINK`
+ let COUNTER=COUNTER+1
+ done
+ cd $STARTDIR
+ $1=$DIR/$FIL
+ fi
+ fi
+])
+
+AC_DEFUN([TESTFOR_PROG_CCACHE],
+[
+ AC_ARG_ENABLE([ccache],
+ [AS_HELP_STRING([--disable-ccache],
+ [use ccache to speed up recompilations @<:@enabled@:>@])],
+ [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes])
+ if test "x$ENABLE_CCACHE" = xyes; then
+ AC_PATH_PROG(CCACHE, ccache)
+ else
+ AC_MSG_CHECKING([for ccache])
+ AC_MSG_RESULT([explicitly disabled])
+ CCACHE=
+ fi
+ AC_SUBST(CCACHE)
+
+ AC_ARG_WITH([ccache-dir],
+ [AS_HELP_STRING([--with-ccache-dir],
+ [where to store ccache files @<:@~/.ccache@:>@])])
+
+ if test "x$with_ccache_dir" != x; then
+ # When using a non home ccache directory, assume the use is to share ccache files
+ # with other users. Thus change the umask.
+ SET_CCACHE_DIR="CCACHE_DIR=$with_ccache_dir CCACHE_UMASK=002"
+ fi
+ CCACHE_FOUND=""
+ if test "x$CCACHE" != x; then
+ SETUP_CCACHE_USAGE
+ fi
+])
+
+AC_DEFUN([SETUP_CCACHE_USAGE],
+[
+ if test "x$CCACHE" != x; then
+ CCACHE_FOUND="true"
+ # Only use ccache if it is 3.1.4 or later, which supports
+ # precompiled headers.
+ AC_MSG_CHECKING([if ccache supports precompiled headers])
+ HAS_GOOD_CCACHE=`($CCACHE --version | head -n 1 | grep -E 3.1.@<:@456789@:>@) 2> /dev/null`
+ if test "x$HAS_GOOD_CCACHE" = x; then
+ AC_MSG_RESULT([no, disabling ccache])
+ CCACHE=
+ else
+ AC_MSG_RESULT([yes])
+ AC_MSG_CHECKING([if C-compiler supports ccache precompiled headers])
+ PUSHED_FLAGS="$CXXFLAGS"
+ CXXFLAGS="-fpch-preprocess $CXXFLAGS"
+ AC_TRY_COMPILE([], [], [CC_KNOWS_CCACHE_TRICK=yes], [CC_KNOWS_CCACHE_TRICK=no])
+ CXXFLAGS="$PUSHED_FLAGS"
+ if test "x$CC_KNOWS_CCACHE_TRICK" = xyes; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no, disabling ccaching of precompiled headers])
+ CCACHE=
+ fi
+ fi
+ fi
+
+ if test "x$CCACHE" != x; then
+ CCACHE_SLOPPINESS=time_macros
+ CCACHE="CCACHE_COMPRESS=1 $SET_CCACHE_DIR CCACHE_SLOPPINESS=$CCACHE_SLOPPINESS $CCACHE"
+ CCACHE_FLAGS=-fpch-preprocess
+
+ if test "x$SET_CCACHE_DIR" != x; then
+ mkdir -p $CCACHE_DIR > /dev/null 2>&1
+ chmod a+rwxs $CCACHE_DIR > /dev/null 2>&1
+ fi
+ fi
+])
+
+AC_DEFUN([EXTRACT_HOST_AND_BUILD_AND_LEGACY_VARS],
+[
+ # Expects $host_os $host_cpu $build_os and $build_cpu
+ # and $with_data_model to have been setup!
+ #
+ # Translate the standard triplet(quadruplet) definition
+ # of the host/build system into
+ # HOST_OS=aix,bsd,hpux,linux,macosx,solaris,windows
+ # HOST_OS_FAMILY=bsd,gnu,sysv,win32,wince
+ # HOST_OS_API=posix,winapi
+ #
+ # HOST_CPU=ia32,x64,sparc,sparcv9,arm,arm64,ppc,ppc64
+ # HOST_CPU_ARCH=x86,sparc,pcc,arm
+ # HOST_CPU_BITS=32,64
+ # HOST_CPU_ENDIAN=big,little
+ #
+ # The same values are setup for BUILD_...
+ #
+ # And the legacy variables, for controlling the old makefiles.
+ # LEGACY_HOST_CPU1=i586,amd64,sparc,sparcv9,arm,arm64...
+ # LEGACY_HOST_CPU2=i386,amd64,sparc,sparcv9,arm,arm64...
+ # LEGACY_HOST_CPU3=sparcv9,amd64 (but only on solaris)
+ # LEGACY_HOST_OS_API=solaris,windows
+ #
+ # We also copy the autoconf trip/quadruplet
+ # verbatim to HOST and BUILD
+ AC_SUBST(HOST, ${host})
+ AC_SUBST(BUILD, ${build})
+
+ EXTRACT_VARS_FROM_OS_TO(HOST,$host_os)
+ EXTRACT_VARS_FROM_CPU_TO(HOST,$host_cpu)
+
+ EXTRACT_VARS_FROM_OS_TO(BUILD,$build_os)
+ EXTRACT_VARS_FROM_CPU_TO(BUILD,$build_cpu)
+
+ if test "x$HOST_OS" != xsolaris; then
+ LEGACY_HOST_CPU3=""
+ LEGACY_BUILD_CPU3=""
+ fi
+])
+
+AC_DEFUN([EXTRACT_VARS_FROM_OS_TO],
+[
+ EXTRACT_VARS_FROM_OS($2)
+ $1_OS="$VAR_OS"
+ $1_OS_FAMILY="$VAR_OS_FAMILY"
+ $1_OS_API="$VAR_OS_API"
+
+ AC_SUBST($1_OS)
+ AC_SUBST($1_OS_FAMILY)
+ AC_SUBST($1_OS_API)
+
+ if test "x$$1_OS_API" = xposix; then
+ LEGACY_$1_OS_API="solaris"
+ fi
+ if test "x$$1_OS_API" = xwinapi; then
+ LEGACY_$1_OS_API="windows"
+ fi
+ AC_SUBST(LEGACY_$1_OS_API)
+])
+
+AC_DEFUN([EXTRACT_VARS_FROM_CPU_TO],
+[
+ EXTRACT_VARS_FROM_CPU($2)
+ $1_CPU="$VAR_CPU"
+ $1_CPU_ARCH="$VAR_CPU_ARCH"
+ $1_CPU_BITS="$VAR_CPU_BITS"
+ $1_CPU_ENDIAN="$VAR_CPU_ENDIAN"
+
+ AC_SUBST($1_CPU)
+ AC_SUBST($1_CPU_ARCH)
+ AC_SUBST($1_CPU_BITS)
+ AC_SUBST($1_CPU_ENDIAN)
+
+ # Also store the legacy naming of the cpu.
+ # Ie i586 and amd64 instead of ia32 and x64
+ LEGACY_$1_CPU1="$VAR_LEGACY_CPU"
+ AC_SUBST(LEGACY_$1_CPU1)
+
+ # And the second legacy naming of the cpu.
+ # Ie i386 and amd64 instead of ia32 and x64.
+ LEGACY_$1_CPU2="$LEGACY_$1_CPU1"
+ if test "x$LEGACY_$1_CPU1" = xi586; then
+ LEGACY_$1_CPU2=i386
+ fi
+ AC_SUBST(LEGACY_$1_CPU2)
+
+ # And the third legacy naming of the cpu.
+ # Ie only amd64 or sparcv9, used for the ISA_DIR on Solaris.
+ LEGACY_$1_CPU3=""
+ if test "x$$1_CPU" = xx64; then
+ LEGACY_$1_CPU3=amd64
+ fi
+ if test "x$$1_CPU" = xsparcv9; then
+ LEGACY_$1_CPU3=sparvc9
+ fi
+ AC_SUBST(LEGACY_$1_CPU3)
+])
+
+AC_DEFUN([EXTRACT_VARS_FROM_CPU],
+[
+ # First argument is the cpu name from the trip/quad
+ case "$1" in
+ x86_64)
+ VAR_CPU=x64
+ VAR_CPU_ARCH=x86
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=little
+ VAR_LEGACY_CPU=amd64
+ ;;
+ i?86)
+ VAR_CPU=ia32
+ VAR_CPU_ARCH=x86
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=little
+ VAR_LEGACY_CPU=i586
+ ;;
+ alpha*)
+ VAR_CPU=alpha
+ VAR_CPU_ARCH=alpha
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=alpha
+ ;;
+ arm*)
+ VAR_CPU=arm
+ VAR_CPU_ARCH=arm
+ VAR_CPU_BITS=3264
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=arm
+ ;;
+ mips)
+ VAR_CPU=mips
+ VAR_CPU_ARCH=mips
+ VAR_CPU_BITS=woot
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=mips
+ ;;
+ mipsel)
+ VAR_CPU=mipsel
+ VAR_CPU_ARCH=mips
+ VAR_CPU_BITS=woot
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=mipsel
+ ;;
+ powerpc)
+ VAR_CPU=ppc
+ VAR_CPU_ARCH=ppc
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=ppc
+ ;;
+ powerpc64)
+ VAR_CPU=ppc64
+ VAR_CPU_ARCH=ppc
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=32
+ VAR_LEGACY_CPU=ppc64
+ ;;
+ sparc)
+ VAR_CPU=sparc
+ VAR_CPU_ARCH=sparc
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=sparc
+ ;;
+ sparc64)
+ VAR_CPU=sparcv9
+ VAR_CPU_ARCH=sparc
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=big
+ VAR_LEGACY_CPU=sparc_sparcv9
+ ;;
+ s390)
+ VAR_CPU=s390
+ VAR_CPU_ARCH=s390
+ VAR_CPU_BITS=32
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=s390
+ VAR_LEGACY_CPU=s390
+ ;;
+ s390x)
+ VAR_CPU=s390x
+ VAR_CPU_ARCH=s390
+ VAR_CPU_BITS=64
+ VAR_CPU_ENDIAN=woot
+ VAR_LEGACY_CPU=s390x
+ ;;
+ *)
+ AC_ERROR([unsupported cpu $1])
+ ;;
+ esac
+
+ # Workaround cygwin not knowing about 64 bit.
+ if test "x$VAR_OS" = "xwindows"; then
+ if test "x$PROCESSOR_IDENTIFIER" != "x"; then
+ PROC_ARCH=`echo $PROCESSOR_IDENTIFIER | $CUT -f1 -d' '`
+ case "$PROC_ARCH" in
+ intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64)
+ VAR_CPU=x64
+ VAR_CPU_BITS=64
+ VAR_LEGACY_CPU=amd64
+ ;;
+ esac
+ fi
+ fi
+
+ if test "x$VAR_CPU_ARCH" = "xx86"; then
+ if test "x$with_data_model" = "x64"; then
+ VAR_CPU=x64
+ VAR_CPU_BITS=64
+ VAR_LEGACY_CPU=amd64
+ fi
+ if test "x$with_data_model" = "x32"; then
+ VAR_CPU=ia32
+ VAR_CPU_BITS=32
+ VAR_LEGACY_CPU=i586
+ fi
+ fi
+])
+
+AC_DEFUN([EXTRACT_VARS_FROM_OS],
+[
+ case "$1" in
+ *linux*)
+ VAR_OS=linux
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=gnu
+ ;;
+ *solaris*)
+ VAR_OS=solaris
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=sysv
+ ;;
+ *darwin*)
+ VAR_OS=macosx
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=bsd
+ ;;
+ *bsd*)
+ VAR_OS=bsd
+ VAR_OS_API=posix
+ VAR_OS_FAMILY=bsd
+ ;;
+ *cygwin*|*windows*)
+ VAR_OS=windows
+ VAR_OS_API=winapi
+ VAR_OS_FAMILY=windows
+ ;;
+ *)
+ AC_MSG_ERROR([unsupported host operating system $1])
+ ;;
+ esac
+])
+
+AC_DEFUN([CHECK_COMPILER_VERSION],
+[
+ # Test the compilers that their versions are new enough.
+# AC_MSG_CHECKING([version of GCC])
+ gcc_ver=`${CC} -dumpversion`
+ gcc_major_ver=`echo ${gcc_ver}|cut -d'.' -f1`
+ gcc_minor_ver=`echo ${gcc_ver}|cut -d'.' -f2`
+# AM_CONDITIONAL(GCC_OLD, test ! ${gcc_major_ver} -ge 4 -a ${gcc_minor_ver} -ge 3)
+# AC_MSG_RESULT([${gcc_ver} (major version ${gcc_major_ver}, minor version ${gcc_minor_ver})])
+])
+
+# Fixes paths on windows hosts to be mixed mode short.
+AC_DEFUN([WIN_FIX_PATH],
+[
+ if test "x$BUILD_OS" = "xwindows"; then
+ AC_PATH_PROG(CYGPATH, cygpath)
+ tmp="[$]$1"
+ # Convert to C:/ mixed style path without spaces.
+ tmp=`$CYGPATH -s -m "$tmp"`
+ $1="$tmp"
+ fi
+])
diff --git a/common/autoconf/spec.gmk.in b/common/autoconf/spec.gmk.in
new file mode 100644
index 00000000000..4d5b841ea8a
--- /dev/null
+++ b/common/autoconf/spec.gmk.in
@@ -0,0 +1,588 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Configured @DATE_WHEN_CONFIGURED@ to build for a @HOST@ system,
+# using ./configure @CONFIGURE_COMMAND_LINE@
+
+# When calling macros, the spaces between arguments are
+# often semantically important! Sometimes we need to subst
+# spaces and commas, therefore we need the following macros.
+X:=
+SPACE:=$(X) $(X)
+COMMA:=,
+HASH:=\#
+SQUOTE:='
+#'
+DQUOTE:="
+#"
+define NEWLINE:=
+endef
+
+
+# Pass along the verbosity setting.
+ifeq (,$(findstring VERBOSE=,$(MAKE)))
+ MAKE:=$(MAKE) $(VERBOSE) VERBOSE="$(VERBOSE)"
+endif
+
+# No implicit variables or rules!
+ifeq (,$(findstring -R,$(MAKE)))
+ MAKE:=$(MAKE) -R
+endif
+
+# Specify where the spec file is.
+ifeq (,$(findstring SPEC=,$(MAKE)))
+ MAKE:=$(MAKE) SPEC=@SPEC@
+endif
+
+# Specify where the common include directory for makefiles is.
+ifeq (,$(findstring -I @SRC_ROOT@/common/makefiles,$(MAKE)))
+ MAKE:=$(MAKE) -I @SRC_ROOT@/common/makefiles
+endif
+
+# A self-referential reference to this file.
+SPEC:=@SPEC@
+
+# The built jdk will run in this host system.
+HOST:=@HOST@
+HOST_OS:=@HOST_OS@
+HOST_OS_FAMILY:=@HOST_OS_FAMILY@
+HOST_OS_API:=@HOST_OS_API@
+
+HOST_CPU:=@HOST_CPU@
+HOST_CPU_ARCH:=@HOST_CPU_ARCH@
+HOST_CPU_BITS:=@HOST_CPU_BITS@
+HOST_CPU_ENDIAN:=@HOST_CPU_ENDIAN@
+
+# We are building on this build system.
+# When not cross-compiling, it is the same as the host.
+BUILD:=@BUILD@
+BUILD_OS:=@BUILD_OS@
+BUILD_OS_FAMILY:=@BUILD_OS_FAMILY@
+BUILD_OS_API:=@BUILD_OS_API@
+
+BUILD_CPU:=@BUILD_CPU@
+BUILD_CPU_ARCH:=@BUILD_CPU_ARCH@
+BUILD_CPU_BITS:=@BUILD_CPU_BITS@
+BUILD_CPU_ENDIAN:=@BUILD_CPU_ENDIAN@
+
+# Old name for HOST_OS (aix,bsd,hpux,linux,macosx,solaris,windows etc)
+PLATFORM:=@HOST_OS@
+# Old name for HOST_CPU, uses i586 and amd64, instead of ia32 and x64.
+ARCH:=@LEGACY_HOST_CPU1@
+# Yet another name for arch used for an extra subdir below the jvm lib.
+# Uses i386 and amd64, instead of ia32 and x64.
+LIBARCH:=@LEGACY_HOST_CPU2@
+# Use to switch between solaris and windows subdirs in the jdk.
+LEGACY_HOST_OS_API:=@LEGACY_HOST_OS_API@
+# 32 or 64 bit
+ARCH_DATA_MODEL:=@HOST_CPU_BITS@
+# Legacy setting for building for a 64 bit machine.
+# If yes then this expands to _LP64:=1
+@LP64@
+ENDIAN:=@HOST_CPU_ENDIAN@
+@SET_OPENJDK@
+JIGSAW:=@JIGSAW@
+LIBM:=-lm
+
+# colon or semicolon
+PATH_SEP:=@PATH_SEP@
+
+# Set special env variables, to be passed to external tools.
+# Used for cygwin setups.
+@SETUPDEVENV@
+
+# The sys root where standard headers and libraries are found.
+# Usually not needed since the configure script should have
+# taken it into account already when setting CFLAGS et al.
+SYS_ROOT:=@SYS_ROOT@
+
+# Paths to the source code
+SRC_ROOT:=@SRC_ROOT@
+ADD_SRC_ROOT:=@ADD_SRC_ROOT@
+OVERRIDE_SRC_ROOT:=@OVERRIDE_SRC_ROOT@
+TOPDIR:=@SRC_ROOT@
+OUTPUT_ROOT:=@OUTPUT_ROOT@
+JDK_MAKE_SHARED_DIR:=@JDK_TOPDIR@/makefiles/common/shared
+JDK_TOPDIR:=@JDK_TOPDIR@
+LANGTOOLS_TOPDIR:=@LANGTOOLS_TOPDIR@
+CORBA_TOPDIR:=@CORBA_TOPDIR@
+JAXP_TOPDIR:=@JAXP_TOPDIR@
+JAXWS_TOPDIR:=@JAXWS_TOPDIR@
+HOTSPOT_TOPDIR:=@HOTSPOT_TOPDIR@
+COPYRIGHT_YEAR:=@COPYRIGHT_YEAR@
+
+# Information gathered from the version.numbers file.
+JDK_MAJOR_VERSION:=@JDK_MAJOR_VERSION@
+JDK_MINOR_VERSION:=@JDK_MINOR_VERSION@
+JDK_MICRO_VERSION:=@JDK_MICRO_VERSION@
+JDK_UPDATE_VERSION:=@JDK_UPDATE_VERSION@
+JDK_BUILD_NUMBER:=@JDK_BUILD_NUMBER@
+MILESTONE:=@MILESTONE@
+LAUNCHER_NAME:=@LAUNCHER_NAME@
+PRODUCT_NAME:=@PRODUCT_NAME@
+PRODUCT_SUFFIX:=@PRODUCT_SUFFIX@
+JDK_RC_PLATFORM_NAME:=@JDK_RC_PLATFORM_NAME@
+COMPANY_NAME:=@COMPANY_NAME@
+
+# Different version strings generated from the above information.
+JDK_VERSION:=@JDK_VERSION@
+RUNTIME_NAME:=@RUNTIME_NAME@
+FULL_VERSION:=@FULL_VERSION@
+JRE_RELEASE_VERSION:=@FULL_VERSION@
+RELEASE:=@RELEASE@
+COOKED_BUILD_NUMBER:=@COOKED_BUILD_NUMBER@
+
+# How to compile the code: release, fastdebug or slowdebug
+DEBUG_LEVEL:=@DEBUG_LEVEL@
+
+# This is the JDK variant to build.
+# The JDK variant is a name for a specific set of modules to be compiled for the JDK.
+JDK_VARIANT:=@JDK_VARIANT@
+
+# Legacy defines controlling the JDK variant embedded.
+@JAVASE_EMBEDDED@
+@MINIMIZE_RAM_USAGE@
+
+# Should we compile support for running with a graphical UI? (ie headful)
+# Should we compile support for running without? (ie headless)
+SUPPORT_HEADFUL:=@SUPPORT_HEADFUL@
+SUPPORT_HEADLESS:=@SUPPORT_HEADLESS@
+# Legacy defines controlled by the SUPPORT_HEADLESS and SUPPORT_HEADFUL options.
+@BUILD_HEADLESS@
+@BUILD_HEADLESS_ONLY@
+
+# These are the libjvms that we want to build.
+# The java launcher uses the default.
+# The other can be selected by specifying -client -server -kernel -zero or -zeroshark
+# on the java launcher command line.
+DEFAULT_JVM_VARIANT:=@DEFAULT_JVM_VARIANT@
+JVM_VARIANTS:=@JVM_VARIANTS@
+JVM_VARIANT_SERVER:=@JVM_VARIANT_SERVER@
+JVM_VARIANT_CLIENT:=@JVM_VARIANT_CLIENT@
+JVM_VARIANT_KERNEL:=@JVM_VARIANT_KERNEL@
+JVM_VARIANT_ZERO:=@JVM_VARIANT_ZERO@
+JVM_VARIANT_ZEROSHARK:=@JVM_VARIANT_ZEROSHARK@
+
+# Legacy setting: OPT or DBG
+VARIANT:=@VARIANT@
+# Legacy setting: true or false
+FASTDEBUG:=@FASTDEBUG@
+# Legacy setting: debugging the class files?
+DEBUG_CLASSFILES:=@DEBUG_CLASSFILES@
+# Legacy setting: -debug or -fastdebug
+BUILD_VARIANT_RELEASE:=@BUILD_VARIANT_RELEASE@
+
+LANGTOOLS_OUTPUTDIR:=@OUTPUT_ROOT@/langtools
+LANGTOOLS_DIST:=@OUTPUT_ROOT@/langtools/dist
+LANGTOOLS_MAKE_ARGS:=@LANGTOOLS_MAKE_ARGS@
+
+CORBA_OUTPUTDIR:=@OUTPUT_ROOT@/corba
+CORBA_DIST:=@OUTPUT_ROOT@/corba/dist
+CORBA_MAKE_ARGS:=@CORBA_MAKE_ARGS@
+
+JAXP_OUTPUTDIR:=@OUTPUT_ROOT@/jaxp
+JAXP_DIST:=@OUTPUT_ROOT@/jaxp/dist
+JAXP_MAKE_ARGS:=@JAXP_MAKE_ARGS@
+
+JAXWS_OUTPUTDIR:=@OUTPUT_ROOT@/jaxws
+JAXWS_DIST:=@OUTPUT_ROOT@/jaxws/dist
+JAXWS_MAKE_ARGS:=@JAXWS_MAKE_ARGS@
+
+HOTSPOT_OUTPUTDIR:=@OUTPUT_ROOT@/hotspot
+HOTSPOT_DIST:=@OUTPUT_ROOT@/hotspot/dist
+HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@
+
+# This where a working jvm is built.
+# You can run $(JDK_OUTPUTDIR)/bin/java
+# Though the layout of the contents of $(JDK_OUTPUTDIR) is not
+# yet the same as a default installation.
+HOTSPOT_IMPORT_PATH:=@OUTPUT_ROOT@/hotspot/dist
+JDK_OUTPUTDIR:=@OUTPUT_ROOT@/jdk
+JDK_MAKE_ARGS:=@JDK_MAKE_ARGS@
+
+# When you run "make install" it will create the standardized
+# layout for the jdk and the jre inside the images subdir.
+# Then it will copy the contents of the jdk into the installation
+# directory.
+IMAGES_OUTPUTDIR:=@OUTPUT_ROOT@/images
+IMAGES_MAKE_ARGS:=@IMAGES_MAKE_ARGS@
+# Legacy variables used by Release.gmk
+JDK_IMAGE_DIR:=$(IMAGES_OUTPUTDIR)/j2sdk-image
+JRE_IMAGE_DIR:=$(IMAGES_OUTPUTDIR)/j2re-image
+
+# Can be /sparcv9 or /amd64 on Solaris
+ISA_DIR:=@LEGACY_HOST_CPU3@
+BINDIR:=$(JDK_OUTPUTDIR)/bin$(ISA_DIR)
+
+# The boot jdk to use
+ALT_BOOTDIR:=@BOOT_JDK@
+BOOT_JDK:=@BOOT_JDK@
+BOOT_JDK_JVMARGS:=@BOOT_JDK_JVMARGS@
+BOOT_JAVAC_ARGS:=@BOOT_JAVAC_ARGS@
+BOOT_RTJAR:=@BOOT_RTJAR@
+BOOT_TOOLSJAR:=@BOOT_TOOLSJAR@
+
+# When compiling Java source to be run by the boot jdk
+# use these extra flags, eg -source 6 -target 6
+BOOT_JDK_SOURCETARGET:=@BOOT_JDK_SOURCETARGET@
+
+# Information about the build system
+NUM_CORES:=@NUM_CORES@
+# This is used from the libjvm build for C/C++ code.
+HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@
+# This is used from the jdk build for C/C++ code.
+PARALLEL_COMPILE_JOBS:=@CONCURRENT_BUILD_JOBS@
+# Store javac server synchronization files here, and
+# the javac server log files.
+JAVAC_SERVERS:=@JAVAC_SERVERS@
+# Should we use a javac server or not? The javac server gives
+# an enormous performance improvement since it reduces the
+# startup costs of javac and reuses as much as possible of intermediate
+# compilation work. But if we want to compile with a non-Java
+# javac compiler, like gcj. Then we cannot use javac server and
+# this variable is set to false.
+JAVAC_USE_REMOTE:=@JAVAC_USE_REMOTE@
+# We can block the Javac server to never use more cores than this.
+# This is not for performance reasons, but for memory usage, since each
+# core requires its own JavaCompiler. We might have 64 cores and 4GB
+# of memory, 64 JavaCompilers will currently not fit in a 3GB heap.
+# Since there is no sharing of data between the JavaCompilers.
+JAVAC_SERVER_CORES:=@JAVAC_SERVER_CORES@
+# Should we use dependency tracking between Java packages? true or false.
+JAVAC_USE_DEPS:=@JAVAC_USE_DEPS@
+# We can invoke javac: SINGLE_THREADED_BATCH or MULTI_CORE_CONCURRENT
+JAVAC_USE_MODE:=@JAVAC_USE_MODE@
+
+# The OpenJDK makefiles should be changed to using the standard
+# configure output ..._CFLAGS and ..._LIBS. In the meantime we
+# extract the information here.
+FREETYPE2_LIB_PATH:=@FREETYPE2_LIB_PATH@
+FREETYPE2_LIBS:=@FREETYPE2_LIBS@
+FREETYPE2_CFLAGS:=@FREETYPE2_CFLAGS@
+USING_SYSTEM_FT_LIB=@USING_SYSTEM_FT_LIB@
+ALT_CUPS_HEADERS_PATH:=$(patsubst -I%,%,$(filter -I%,@CUPS_CFLAGS@))
+CUPS_CFLAGS:=@CUPS_CFLAGS@
+
+PACKAGE_PATH=@PACKAGE_PATH@
+
+CACERTS_FILE:=$(SRC_ROOT)/jdk/src/share/lib/security/cacerts
+#CACERTS_INT=$(CLOSED_SHARE_SRC)/lib/security/cacerts.internal
+
+#MOZILLA_HEADERS_PATH:=
+
+# Necessary additional compiler flags to compile X11
+X_CFLAGS:=@X_CFLAGS@
+X_LIBS:=@X_LIBS@
+OPENWIN_HOME:=@OPENWIN_HOME@
+
+# There are two types: CC or CL
+# CC is gcc and others behaving reasonably similar.
+# CL is cl.exe only.
+COMPILER_TYPE:=@COMPILER_TYPE@
+
+CC_OUT_OPTION:=@CC_OUT_OPTION@
+EXE_OUT_OPTION:=@EXE_OUT_OPTION@
+LD_OUT_OPTION:=@LD_OUT_OPTION@
+AR_OUT_OPTION:=@AR_OUT_OPTION@
+
+# Flags used for overriding the default opt setting for a C/C++ source file.
+C_O_FLAG_HI:=@C_O_FLAG_HI@
+C_O_FLAG_NORM:=@C_O_FLAG_NORM@
+C_O_FLAG_NONE:=@C_O_FLAG_NONE@
+CXX_O_FLAG_HI:=@CXX_O_FLAG_HI@
+CXX_O_FLAG_NORM:=@CXX_O_FLAG_NORM@
+CXX_O_FLAG_NONE:=@CXX_O_FLAG_NONE@
+
+# Tools that potentially need to be cross compilation aware.
+CC:=@UNCYGDRIVE@ @CCACHE@ @CC@
+
+# CFLAGS used to compile the jdk native libraries (C-code)
+CFLAGS_JDKLIB:=@CFLAGS_JDKLIB@
+CXXFLAGS_JDKLIB:=@CXXFLAGS_JDKLIB@
+
+# CFLAGS used to compile the jdk native launchers (C-code)
+CFLAGS_JDKEXE:=@CFLAGS_JDKEXE@
+CXXFLAGS_JDKEXE:=@CXXFLAGS_JDKEXE@
+
+CXX:=@UNCYGDRIVE@ @CCACHE@ @CXX@
+#CXXFLAGS:=@CXXFLAGS@
+
+OBJC:=@CCACHE@ @OBJC@
+#OBJCFLAGS:=@OBJCFLAGS@
+
+CPP:=@UNCYGDRIVE@ @CPP@
+#CPPFLAGS:=@CPPFLAGS@
+
+# The linker can be gcc or ld on posix systems, or link.exe on winapi systems.
+LD:=@UNCYGDRIVE@ @LD@
+
+# LDFLAGS used to link the jdk native libraries (C-code)
+LDFLAGS_JDKLIB:=@LDFLAGS_JDKLIB@
+LDFLAGS_JDKLIB_SUFFIX:=@LDFLAGS_JDKLIB_SUFFIX@
+
+# On some platforms the linker cannot be used to create executables, thus
+# the need for a separate LDEXE command.
+LDEXE:=@UNCYGDRIVE@ @LDEXE@
+
+# LDFLAGS used to link the jdk native launchers (C-code)
+LDFLAGS_JDKEXE:=@LDFLAGS_JDKEXE@
+LDFLAGS_JDKEXE_SUFFIX:=@LDFLAGS_JDKEXE_SUFFIX@
+
+# Sometimes a different linker is needed for c++ libs
+LDCXX:=@UNCYGDRIVE@ @LDCXX@
+# The flags for linking libstdc++ linker.
+LIBCXX:=@LIBCXX@
+
+# Sometimes a different linker is needed for c++ executables
+LDEXECXX:=@UNCYGDRIVE@ @LDEXECXX@
+
+# If cross compiling, then define CROSS_COMPILE_ARCH:=cpu_name here.
+@DEFINE_CROSS_COMPILE_ARCH@
+# The HOSTCC should really be named BUILDCC, ie build executable for
+# the build platform. Same as CC when not cross compiling.
+HOSTCC:=@HOSTCC@
+HOSTCXX:=@HOSTCXX@
+# And of course, the jdk spells HOSTCC as NIO_CC/HOST_CC
+HOST_CC:=@HOSTCC@
+NIO_CC:=@HOSTCC@
+
+AS:=@AS@
+ASFLAGS:=@ASFLAGS@
+
+# AR is used to create a static library (is ar in posix, lib.exe in winapi)
+AR:=@UNCYGDRIVE@ @AR@
+ARFLAGS:=@ARFLAGS@
+
+NM:=@NM@
+STRIP:=@STRIP@
+MCS:=@MCS@
+
+# Command to create a shared library
+SHARED_LIBRARY_FLAGS:=@SHARED_LIBRARY_FLAGS@
+
+# Options to linker to specify a mapfile.
+# (Note absence of := assignment, because we do not want to evaluate the macro body here)
+SET_SHARED_LIBRARY_MAPFILE=@SET_SHARED_LIBRARY_MAPFILE@
+
+# Options to linker to specify the library name.
+# (Note absence of := assignment, because we do not want to evaluate the macro body here)
+SET_SHARED_LIBRARY_NAME=@SET_SHARED_LIBRARY_NAME@
+
+# Set origin using the linker, ie use the relative path to the dependent library to find the dependees.
+# (Note absence of := assignment, because we do not want to evaluate the macro body here)
+SET_SHARED_LIBRARY_ORIGIN=@SET_SHARED_LIBRARY_ORIGIN@
+
+# Different OS:es have different ways of naming shared libraries.
+# The SHARED_LIBRARY macro takes "verify" as and argument and returns:
+# "libverify.so" or "libverify.dylib" or "verify.dll" depending on platform.
+# (Note absence of := assignment, because we do not want to evaluate the macro body here)
+SHARED_LIBRARY=@SHARED_LIBRARY@
+STATIC_LIBRARY=@STATIC_LIBRARY@
+LIBRARY_PREFIX:=@LIBRARY_PREFIX@
+SHARED_LIBRARY_SUFFIX:=@SHARED_LIBRARY_SUFFIX@
+STATIC_LIBRARY_SUFFIX:=@STATIC_LIBRARY_SUFFIX@
+EXE_SUFFIX:=@EXE_SUFFIX@
+OBJ_SUFFIX:=@OBJ_SUFFIX@
+
+JAVA_FLAGS:=@BOOT_JDK_JVMARGS@
+
+JAVA=@UNCYGDRIVE@ @JAVA@ $(JAVA_FLAGS)
+
+JAVAC:=@UNCYGDRIVE@ @JAVAC@
+JAVAC_FLAGS:=@JAVAC_FLAGS@
+
+JAVAH:=@UNCYGDRIVE@ @JAVAH@
+
+JAR:=@UNCYGDRIVE@ @JAR@
+
+RMIC:=@UNCYGDRIVE@ @RMIC@
+
+BOOT_JAR_CMD:=@UNCYGDRIVE@ @JAR@
+BOOT_JAR_JFLAGS:=
+
+# Base flags for RC
+# Guarding this against resetting value. Legacy make files include spec multiple
+# times.
+ifndef RC_FLAGS
+RC_FLAGS:=@RC_FLAGS@
+endif
+
+# A specific java binary with specific options can be used to run
+# the long running background javac server and other long running tasks.
+SERVER_JAVA:=@UNCYGDRIVE@ @SERVER_JAVA@
+
+# Tools adhering to a minimal and common standard of posix compliance.
+AWK:=@AWK@
+CAT:=@CAT@
+CCACHE:=@CCACHE@
+# CD is going away, but remains to cater for legacy makefiles.
+CD:=cd
+CHMOD:=@CHMOD@
+CP:=@CP@
+CPIO:=@CPIO@
+CUT:=@CUT@
+DATE:=@DATE@
+DF:=@DF@
+DIFF:=@DIFF@
+FIND:=@FIND@
+FIND_DELETE:=@FIND_DELETE@
+ECHO:=@ECHO@
+EGREP:=@EGREP@
+FGREP:=@FGREP@
+GREP:=@GREP@
+HEAD:=@HEAD@
+LS:=@LS@
+LN:=@LN@
+MKDIR:=@MKDIR@
+MV:=@MV@
+NAWK:=@NAWK@
+PRINTF:=@PRINTF@
+PWD:=@THEPWDCMD@
+RM:=@RM@
+SED:=@SED@
+SH:=@SH@
+SORT:=@SORT@
+TAR:=@TAR@
+TAIL:=@TAIL@
+TEE:=@TEE@
+TR:=@TR@
+TOUCH:=@TOUCH@
+WC:=@WC@
+XARGS:=@XARGS@
+ZIPEXE:=@ZIP@
+ZIP:=@ZIP@
+UNZIP:=@UNZIP@
+MT:=@UNCYGDRIVE@ @MT@
+RC:=@UNCYGDRIVE@ @RC@
+DUMPBIN:=@UNCYGDRIVE@ @DUMPBIN@
+CYGPATH:=@CYGPATH@
+LDD:=@LDD@
+OTOOL:=@OTOOL@
+READELF:=@READELF@
+EXPR:=@EXPR@
+FILE:=@FILE@
+
+UNCYGDRIVE:=@UNCYGDRIVE@
+
+# Where the build output is stored for your convenience.
+BUILD_LOG:=@BUILD_LOG@
+BUILD_LOG_WRAPPER:=@BUILD_LOG_WRAPPER@
+
+# Build setup
+ENABLE_DOCS:=@ENABLE_DOCS@
+GENERATE_DOCS:=@ENABLE_DOCS@
+DISABLE_NIMBUS:=@DISABLE_NIMBUS@
+USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@
+USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@
+USE_EXTERNAL_LIBZ:=@USE_EXTERNAL_LIBZ@
+CHECK_FOR_VCINSTALLDIR=@CHECK_FOR_VCINSTALLDIR@
+MSVCRNN_DLL:=@MSVCR100DLL@
+
+# ADD_SRCS takes a single argument with source roots
+# and appends any corresponding source roots found
+# below --with-add-source-root and below
+# --with-override-source-root. It is the responsibility
+# of the next macro to get rid of superfluous files.
+ADD_SRCS=$1
+ifneq (,$(ADD_SRC_ROOT))
+ # Append wildcard rule to pickup any matching source roots found below ADD_SRC_ROOT
+ ADD_SRCS+=$(wildcard $(subst $(SRC_ROOT),$(ADD_SRC_ROOT),$1))
+endif
+ifneq (,$(OVERRIDE_SRC_ROOT))
+ # Append wildcard rule to pickup any matching source roots found below OVERRIDE_SRC_ROOT
+ ADD_SRCS+=$(wildcard $(subst $(SRC_ROOT),$(OVERRIDE_SRC_ROOT),$1))
+endif
+
+# OVR_SRCS creates a filter expression to filter out sources in
+# the original source directory that lie inside directories below
+# --with-override-source-root.
+# Use := here since we want to scan for these files here. To avoid recomputation later.
+# We cannot do the scan in configure, since that would force us to rerun configure when
+# we add overridden sources.
+ifneq (,$(OVERRIDE_SRC_ROOT))
+ OVR_SRCS:=$(addsuffix %,$(subst $(OVERRIDE_SRC_ROOT),$(SRC_ROOT),$(sort $(dir $(shell $(FIND) $(OVERRIDE_SRC_ROOT) -type f)))))
+else
+ OVR_SRCS:=
+endif
+
+####################################################
+#
+# INSTALLATION
+#
+
+# Common prefix for all installed files. Defaults to /usr/local,
+# but /opt/myjdk is another common version.
+INSTALL_PREFIX=@prefix@
+
+# Directories containing architecture-dependent files should be relative to exec_prefix
+INSTALL_EXECPREFIX=@exec_prefix@
+
+# java,javac,javah,javap etc are installed here.
+INSTALL_BINDIR=@bindir@
+
+# Read only architecture-independent data
+INSTALL_DATADIR=@datadir@
+
+# Root of above.
+INSTALL_DATAROOTDIR=@datarootdir@
+
+# Doc files, other than info and man.
+INSTALL_DOCDIR=@docdir@
+
+# Html documentation
+INSTALL_HTMLDIR=@htmldir@
+
+# Installing C header files, JNI headers for example.
+INSTALL_INCLUDEDIR=@includedir@
+
+# Installing library files....
+INSTALL_INCLUDEDIR=@libdir@
+
+# Executables that other programs run.
+INSTALL_LIBEXECDIR=@libexecdir@
+
+# Locale-dependent but architecture-independent data, such as message catalogs.
+INSTALL_LOCALEDIR=@localedir@
+
+# Modifiable single-machine data
+INSTALL_LOCALSTATEDIR=@localstatedir@
+
+# Man pages
+INSTALL_MANDIR=@mandir@
+
+# Modifiable architecture-independent data.
+INSTALL_SHAREDSTATEDIR=@sharedstatedir@
+
+# Read-only single-machine data
+INSTALL_SYSCONFDIR=@sysconfdir@
+
+
+####################################################
+#
+# Misc
+#
+
+# Control wether Hotspot runs Queens test after building
+TEST_IN_BUILD=@TEST_IN_BUILD@
diff --git a/common/autoconf/version.numbers b/common/autoconf/version.numbers
new file mode 100644
index 00000000000..fc558c22818
--- /dev/null
+++ b/common/autoconf/version.numbers
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+JDK_MAJOR_VERSION=1
+JDK_MINOR_VERSION=8
+JDK_MICRO_VERSION=0
+JDK_UPDATE_VERSION=
+JDK_BUILD_NUMBER=
+MILESTONE=internal
+LAUNCHER_NAME=openjdk
+PRODUCT_NAME=OpenJDK
+PRODUCT_SUFFIX="Runtime Environment"
+JDK_RC_PLATFORM_NAME=Platform
+COMPANY_NAME=N/A
diff --git a/common/bin/compareimage.sh b/common/bin/compareimage.sh
new file mode 100644
index 00000000000..3687e41c470
--- /dev/null
+++ b/common/bin/compareimage.sh
@@ -0,0 +1,283 @@
+#!/bin/bash
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# MANUAL
+#
+# ./common/bin/compareimages.sh old_jdk_image new_jdk_image
+#
+# Compare the directory structure.
+# Compare the filenames in the directories.
+# Compare the contents of the zip archives
+# Compare the contents of the jar archives
+# Compare the native libraries
+# Compare the native executables
+# Compare the remaining files
+#
+# ./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other]
+#
+# Compare only the selected subset of the images.
+#
+# ./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar
+#
+# Compare only the CodePointIM.jar file
+# Can be used to compare zips, libraries and executables.
+#
+
+if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then
+ echo "./common/bin/compareimages.sh old_jdk_image new_jdk_image"
+ echo ""
+ echo "Compare the directory structure."
+ echo "Compare the filenames in the directories."
+ echo "Compare the contents of the zip archives"
+ echo "Compare the contents of the jar archives"
+ echo "Compare the native libraries"
+ echo "Compare the native executables"
+ echo "Compare the remaining files"
+ echo ""
+ echo "./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other]"
+ echo ""
+ echo "Compare only the selected subset of the images."
+ echo ""
+ echo "./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar"
+ echo ""
+ echo "Compare only the CodePointIM.jar file"
+ echo "Can be used to compare zips, libraries and executables."
+ exit 10
+fi
+
+OLD="$1"
+NEW="$2"
+CMD="$3"
+
+DIFF_RESULT=0
+
+CMP_ZIPS=false
+CMP_JARS=false
+CMP_LIBS=false
+CMP_EXECS=false
+CMP_OTHER=false
+
+FILTER="cat"
+
+if [ -n "$CMD" ]; then
+ case "$CMD" in
+ zips)
+ CMP_ZIPS=true
+ ;;
+ jars)
+ CMP_JARS=true
+ ;;
+ libs)
+ CMP_LIBS=true
+ ;;
+ execs)
+ CMP_EXECS=true
+ ;;
+ other)
+ CMP_OTHER=true
+ ;;
+ *)
+ CMP_ZIPS=true
+ CMP_JARS=true
+ CMP_LIBS=true
+ CMP_EXECS=true
+ CMP_OTHER=true
+ FILTER="grep $3"
+ ;;
+ esac
+else
+ CMP_ZIPS=true
+ CMP_JARS=true
+ CMP_LIBS=true
+ CMP_EXECS=true
+ CMP_OTHER=true
+fi
+
+DIFFJARZIP=`dirname $0`/diffjarzip.sh
+DIFFLIB=`dirname $0`/difflib.sh
+DIFFEXEC=`dirname $0`/diffexec.sh
+export COMPARE_ROOT=/tmp/cimages
+mkdir -p $COMPARE_ROOT
+
+# Load the correct exception list.
+case "`uname -s`" in
+ Linux)
+ . `dirname $0`/exception_list_linux
+ ;;
+esac
+
+echo
+echo Comparing $OLD to $NEW
+echo
+
+(cd $OLD && find . -type d | sort > $COMPARE_ROOT/from_dirs)
+(cd $NEW && find . -type d | sort > $COMPARE_ROOT/to_dirs)
+
+echo -n Directory structure...
+if diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs > /dev/null; then
+ echo Identical!
+else
+ echo Differences found.
+ DIFF_RESULT=1
+ # Differences in directories found.
+ ONLY_OLD=$(diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs | grep '<')
+ if [ "$ONLY_OLD" ]; then
+ echo Only in $OLD
+ echo $ONLY_OLD | sed 's|< ./|\t|g' | sed 's/ /\n/g'
+ fi
+ # Differences in directories found.
+ ONLY_NEW=$(diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs | grep '>')
+ if [ "$ONLY_NEW" ]; then
+ echo Only in $NEW
+ echo $ONLY_NEW | sed 's|> ./|\t|g' | sed 's/ /\n/g'
+ fi
+fi
+
+(cd $OLD && find . -type f | sort > $COMPARE_ROOT/from_files)
+(cd $NEW && find . -type f | sort > $COMPARE_ROOT/to_files)
+
+echo -n File names...
+if diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files > /dev/null; then
+ echo Identical!
+else
+ echo Differences found.
+ DIFF_RESULT=1
+ # Differences in directories found.
+ ONLY_OLD=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '<')
+ if [ "$ONLY_OLD" ]; then
+ echo Only in $OLD
+ echo $ONLY_OLD | sed 's|< ./|\t|g' | sed 's/ /\n/g'
+ fi
+ # Differences in directories found.
+ ONLY_NEW=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '>')
+ if [ "$ONLY_NEW" ]; then
+ echo Only in $NEW
+ echo $ONLY_NEW | sed 's|> ./|\t|g' | sed 's/ /\n/g'
+ fi
+fi
+
+if [ "x$CMP_ZIPS" == "xtrue" ]; then
+ ZIPS=$(cd $OLD && find . -type f -name "*.zip" | sort | $FILTER)
+
+ if [ -n "$ZIPS" ]; then
+ echo Zip files...
+
+ for f in $ZIPS
+ do
+ $DIFFJARZIP $OLD/$f $NEW/$f $OLD $NEW
+ if [ "$?" != "0" ]; then
+ DIFF_RESULT=1
+ fi
+ done
+ fi
+fi
+
+if [ "x$CMP_JARS" == "xtrue" ]; then
+ JARS=$(cd $OLD && find . -type f -name "*.jar" | sort | $FILTER)
+
+ if [ -n "$JARS" ]; then
+ echo Jar files...
+
+ for f in $JARS
+ do
+ DIFFJAR_OUTPUT=`$DIFFJARZIP $OLD/$f $NEW/$f $OLD $NEW`
+ DIFFJAR_RESULT=$?
+ if [ "$DIFFJAR_RESULT" != "0" ]; then
+ for diff in $LIST_DIFF_JAR; do
+ DIFFJAR_OUTPUT=`echo "$DIFFJAR_OUTPUT" | grep -v "$diff"`
+ done
+ if [ "`echo "$DIFFJAR_OUTPUT" | grep -v "Differing files in"`" != "" ]; then
+ DIFF_RESULT=1
+ echo "$DIFFJAR_OUTPUT"
+ fi
+ fi
+ done
+ fi
+fi
+
+if [ "x$FILTER" != "xcat" ]; then
+ VIEW=view
+else
+ VIEW=
+fi
+
+if [ "x$CMP_LIBS" == "xtrue" ]; then
+ LIBS=$(cd $OLD && find . -name 'lib*.so' -o -name '*.dylib' -o -name '*.dll' | sort | $FILTER)
+
+ if [ -n "$LIBS" ]; then
+ echo Libraries...
+ for f in $LIBS
+ do
+ DIFFLIB_OUTPUT=`$DIFFLIB $OLD/$f $NEW/$f $OLD $NEW $VIEW`
+ DIFFLIB_RESULT=$?
+ if [ "$DIFFLIB_RESULT" = "0" ]; then
+ :
+ #echo "OK: $DIFFLIB_OUTPUT"
+ elif [ "$DIFFLIB_RESULT" = "2" ] && [[ "$LIST_DIFF_SIZE $LIST_DIFF_BYTE" == *"${f:2}"* ]]; then
+ :
+ #echo "OK: $DIFFLIB_OUTPUT"
+ elif [ "$DIFFLIB_RESULT" = "1" ] && [[ "$LIST_DIFF_BYTE" == *"${f:2}"* ]]; then
+ :
+ #echo "OK: $DIFFLIB_OUTPUT"
+ else
+ echo "$DIFFLIB_OUTPUT"
+ DIFF_RESULT=1
+ fi
+ done
+ fi
+fi
+
+if [ "x$CMP_EXECS" == "xtrue" ]; then
+ if [ $OSTYPE == "cygwin" ]; then
+ EXECS=$(cd $OLD && find . -type f -name '*.exe' | sort | $FILTER)
+ else
+ EXECS=$(cd $OLD && find . -type f -perm -100 \! \( -name '*.so' -o -name '*.dylib' -o -name '*.dll' \) | sort | $FILTER)
+ fi
+
+
+ if [ -n "$EXECS" ]; then
+ echo Executables...
+
+ for f in $EXECS
+ do
+ DIFFEXEC_OUTPUT=`$DIFFEXEC $OLD/$f $NEW/$f $OLD $NEW $VIEW`
+ DIFFEXEC_RESULT=$?
+ if [ "$DIFFEXEC_RESULT" = "0" ]; then
+ :
+ #echo "OK: $DIFFEXEC_OUTPUT"
+ elif [ "$DIFFEXEC_RESULT" = "2" ] && [[ "$LIST_DIFF_SIZE $LIST_DIFF_BYTE" == *"${f:2}"* ]]; then
+ :
+ #echo "OK: $DIFFEXEC_OUTPUT"
+ elif [ "$DIFFEXEC_RESULT" = "1" ] && [[ "$LIST_DIFF_BYTE" == *"${f:2}"* ]]; then
+ :
+ #echo "OK: $DIFFEXEC_OUTPUT"
+ else
+ echo "$DIFFEXEC_OUTPUT"
+ DIFF_RESULT=1
+ fi
+ done
+ fi
+fi
+
+exit $DIFF_RESULT
diff --git a/common/bin/diffexec.sh b/common/bin/diffexec.sh
new file mode 100644
index 00000000000..e619c6ff7a4
--- /dev/null
+++ b/common/bin/diffexec.sh
@@ -0,0 +1,150 @@
+#!/bin/bash
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+if [ $# -lt 2 ]
+then
+ echo "Diff two executables. Return codes:"
+ echo "0 - no diff"
+ echo "1 - Identical symbols AND size, BUT not bytewise identical"
+ echo "2 - Identical symbols BUT NEW size"
+ echo "3 - Differences, content BUT SAME size"
+ echo "4 - Differences, content AND size"
+ echo "10 - Could not perform diff"
+ echo "Use 'quiet' to disable any output."
+ echo "Syntax: $0 file1 file2 [quiet]"
+ exit 10
+fi
+
+if [ ! -f $1 ]
+then
+ echo $1 does not exist
+ exit 10
+fi
+
+if [ ! -f $2 ]
+then
+ echo $2 does not exist
+ exit 10
+fi
+
+if [ "`uname`" == "SunOS" ]; then
+ NM=gnm
+ STAT=gstat
+elif [ $OSTYPE == "cygwin" ]; then
+ NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe"
+ NM_ARGS=/exports
+ STAT=stat
+else
+ NM=nm
+ STAT=stat
+fi
+
+# Should the differences be viewed?
+VIEW=
+# You can do export DIFF=meld to view
+# any differences using meld instead.
+if [ -n "$DIFF" ]; then
+ DIFF="$DIFF"
+else
+ DIFF=diff
+fi
+OLD=$(cd $(dirname $1) && pwd)/$(basename $1)
+NEW=$(cd $(dirname $2) && pwd)/$(basename $2)
+
+OLD_SIZE=$($STAT -c%s "$OLD")
+NEW_SIZE=$($STAT -c%s "$NEW")
+
+if [ $# -gt 3 ]
+then
+ ROOT1=$(cd $3 && pwd)
+ ROOT2=$(cd $4 && pwd)
+ OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||")
+ NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||")
+ if [ "x$5" == "xview" ]; then VIEW=view; fi
+else
+ ROOT1=$(dirname $OLD)/
+ ROOT2=$(dirname $NEW)/
+ OLD_NAME=$OLD
+ NEW_NAME=$NEW
+ if [ "x$3" == "xview" ]; then VIEW=view; fi
+fi
+
+if cmp $OLD $NEW > /dev/null
+then
+ # The files were bytewise identical.
+ echo Identical: $OLD_NAME
+ exit 0
+fi
+
+OLD_SYMBOLS=$COMPARE_ROOT/$OLD_NAME.old
+NEW_SYMBOLS=$COMPARE_ROOT/$NEW_NAME.new
+
+mkdir -p $(dirname $OLD_SYMBOLS)
+mkdir -p $(dirname $NEW_SYMBOLS)
+
+if [ $OSTYPE == "cygwin" ]; then
+ "$NM" $NM_ARGS $OLD | grep " = " > $OLD_SYMBOLS
+ "$NM" $NM_ARGS $NEW | grep " = " > $NEW_SYMBOLS
+ "$NM" $NM_ARGS $OLD > $OLD_SYMBOLS.full
+ "$NM" $NM_ARGS $NEW > $NEW_SYMBOLS.full
+else
+ # Strip the addresses, just compare the ordering of the symbols.
+ $NM $OLD | cut -f 2- -d ' ' > $OLD_SYMBOLS
+ $NM $NEW | cut -f 2- -d ' ' > $NEW_SYMBOLS
+ # But store the full information for easy diff access.
+ $NM $OLD > $OLD_SYMBOLS.full
+ $NM $NEW > $NEW_SYMBOLS.full
+fi
+
+DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS)
+
+RESULT=0
+
+if [ -n "$DIFFS" ]; then
+ if [ $OLD_SIZE -ne $NEW_SIZE ]
+ then
+ echo Differences, content AND size : $OLD_NAME
+ RESULT=4
+ else
+ echo Differences, content BUT SAME size: $OLD_NAME
+ RESULT=3
+ fi
+ if [ "x$VIEW" == "xview" ]; then
+ LANG=C $DIFF $OLD_SYMBOLS $NEW_SYMBOLS
+ fi
+else
+ if [ $OLD_SIZE -ne $NEW_SIZE ]
+ then
+ echo Identical symbols BUT NEW size : $OLD_NAME
+ RESULT=2
+ else
+ echo Identical symbols AND size, BUT not bytewise identical: $OLD_NAME
+ RESULT=1
+ fi
+fi
+
+exit $RESULT
+
+
+
diff --git a/common/bin/diffjarzip.sh b/common/bin/diffjarzip.sh
new file mode 100644
index 00000000000..28220f74dd9
--- /dev/null
+++ b/common/bin/diffjarzip.sh
@@ -0,0 +1,151 @@
+#!/bin/bash
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Simple tool to diff two jar or zip files. It unpacks the jar/zip files and
+# reports if files differs and if files are new or missing.
+# Assumes gnu diff.
+
+# There are a few source files that have DOS line endings in the
+# jaxp/jaxws source drops, when the sources were added to the repository
+# the source files were converted to UNIX line endings.
+# For now we ignore these differences.
+DIFF_FLAGS="--strip-trailing-cr"
+#set -x
+
+if [ $# -lt 2 ]
+then
+ echo "Diff two jar/zip files. Return codes: 0 - no diff, 1 - diff, 2 - couldn't perform diff"
+ echo "Syntax: $0 old_archive new_archive [old_root new_root]"
+ exit 2
+fi
+
+if [ ! -f $1 ]
+then
+ echo $1 does not exist
+ exit 2
+fi
+
+if [ ! -f $2 ]
+then
+ echo $2 does not exist
+ exit 2
+fi
+
+IGNORES="cat"
+OLD=$(cd $(dirname $1) && pwd)/$(basename $1)
+NEW=$(cd $(dirname $2) && pwd)/$(basename $2)
+
+if [ $# -gt 3 ]
+then
+ ROOT1=$(cd $3 && pwd)
+ ROOT2=$(cd $4 && pwd)
+ OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||")
+ NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||")
+ if [ $# == 5 ]; then IGNORES="$5"; fi
+else
+ ROOT1=$(dirname $OLD)/
+ ROOT2=$(dirname $NEW)/
+ OLD_NAME=$OLD
+ NEW_NAME=$NEW
+ if [ $# == 3 ]; then IGNORES="$3"; fi
+fi
+
+if [ "`uname`" == "SunOS" ]; then
+ DIFF=gdiff
+else
+ DIFF=diff
+fi
+
+OLD_SUFFIX="${OLD##*.}"
+NEW_SUFFIX="${NEW##*.}"
+if [ "$OLD_SUFFIX" != "$NEW_SUFFIX" ]; then
+ echo The files do not have the same suffix type!
+ exit 2
+fi
+
+if [ "$OLD_SUFFIX" != "zip" ] && [ "$OLD_SUFFIX" != "jar" ]; then
+ echo The files have to be zip or jar! They are $OLD_SUFFIX
+ exit 2
+fi
+
+UNARCHIVE="unzip -q"
+
+TYPE="$OLD_SUFFIX"
+
+if cmp $OLD $NEW > /dev/null
+then
+ # The files were bytewise identical.
+ exit 0
+fi
+
+# Not quite identical, the might still contain the same data.
+# Unpack the jar/zip files in temp dirs
+if test "x$COMPARE_ROOT" == "x"; then
+ COMPARE_ROOT=/tmp/compare_root.$$
+ REMOVE_COMPARE_ROOT=true
+fi
+OLD_TEMPDIR=$COMPARE_ROOT/$OLD_NAME.old
+NEW_TEMPDIR=$COMPARE_ROOT/$NEW_NAME.new
+mkdir -p $OLD_TEMPDIR
+mkdir -p $NEW_TEMPDIR
+(cd $OLD_TEMPDIR && rm -rf * ; $UNARCHIVE $OLD)
+(cd $NEW_TEMPDIR && rm -rf * ; $UNARCHIVE $NEW)
+
+ONLY1=$(LANG=C $DIFF -rq $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $OLD_TEMPDIR")
+
+if [ -n "$ONLY1" ]; then
+ echo " Only the OLD $OLD_NAME contains:"
+ LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $OLD_TEMPDIR" \
+ | sed "s|Only in $OLD_TEMPDIR| |"g | sed 's|: |/|g'
+fi
+
+ONLY2=$(LANG=C $DIFF -rq $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $NEW_TEMPDIR")
+
+if [ -n "$ONLY2" ]; then
+ echo " Only the NEW $NEW_NAME contains:"
+ LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $NEW_TEMPDIR" \
+ | sed "s|Only in $NEW_TEMPDIR| |"g | sed 's|: |/|g'
+fi
+
+DIFFTEXT=`dirname $0`/difftext.sh
+
+LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep differ | cut -f 2,4 -d ' ' | \
+ awk "{ print \"$DIFFTEXT \"\$1\" \"\$2 }" > $COMPARE_ROOT/diffing
+
+/bin/bash $COMPARE_ROOT/diffing > $COMPARE_ROOT/diffs
+
+if [ -s "$COMPARE_ROOT/diffs" ]; then
+ echo " Differing files in $OLD_NAME"
+ cat $COMPARE_ROOT/diffs | grep differ | $IGNORES | cut -f 2 -d ' ' | \
+ sed "s|$OLD_TEMPDIR| |g"
+fi
+
+# Clean up
+
+if [ "x$REMOVE_COMPARE_ROOT" == xtrue ]; then
+ rm -rf $REMOVE_COMPARE_ROOT
+fi
+
+exit 1
+
diff --git a/common/bin/difflib.sh b/common/bin/difflib.sh
new file mode 100644
index 00000000000..645005b02f4
--- /dev/null
+++ b/common/bin/difflib.sh
@@ -0,0 +1,168 @@
+#!/bin/bash
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Simple tool to diff two shared libraries.
+# Criterias: two shared libraries are considered equal if:
+# the file sizes are the same AND the symbols outputs from the nm command are equal
+
+if [ $# -lt 2 ]
+then
+ echo "Diff two shared libs. Return codes:"
+ echo "0 - no diff"
+ echo "1 - Identical symbols AND size, BUT not bytewise identical"
+ echo "2 - Identical symbols BUT NEW size"
+ echo "3 - Differences, content BUT SAME size"
+ echo "4 - Differences, content AND size"
+ echo "10 - Could not perform diff"
+ echo "Use 'quiet' to disable any output."
+ echo "Syntax: $0 file1 file2 [quiet]"
+ exit 10
+fi
+
+if [ ! -f $1 ]
+then
+ echo $1 does not exist
+ exit 10
+fi
+
+if [ ! -f $2 ]
+then
+ echo $2 does not exist
+ exit 10
+fi
+
+if [ "`uname`" == "SunOS" ]; then
+ NM=gnm
+ STAT=gstat
+elif [ $OSTYPE == "cygwin" ]; then
+ NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe"
+ NM_ARGS=/exports
+ STAT=stat
+else
+ NM=nm
+ STAT=stat
+fi
+
+# Should the differences be viewed?
+VIEW=
+# You can do export DIFF=meld to view
+# any differences using meld instead.
+if [ -n "$DIFF" ]; then
+ DIFF="$DIFF"
+else
+ DIFF=diff
+fi
+OLD=$(cd $(dirname $1) && pwd)/$(basename $1)
+NEW=$(cd $(dirname $2) && pwd)/$(basename $2)
+
+OLD_SIZE=$($STAT -c%s "$OLD")
+NEW_SIZE=$($STAT -c%s "$NEW")
+
+if [ $# -gt 3 ]
+then
+ ROOT1=$(cd $3 && pwd)
+ ROOT2=$(cd $4 && pwd)
+ OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||")
+ NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||")
+ if [ "x$5" == "xview" ]; then VIEW=view; fi
+else
+ ROOT1=$(dirname $OLD)/
+ ROOT2=$(dirname $NEW)/
+ OLD_NAME=$OLD
+ NEW_NAME=$NEW
+ if [ "x$3" == "xview" ]; then VIEW=view; fi
+fi
+
+OLD_SUFFIX="${OLD##*.}"
+NEW_SUFFIX="${NEW##*.}"
+if [ "$OLD_SUFFIX" != "$NEW_SUFFIX" ]; then
+ echo The files do not have the same suffix type!
+ exit 10
+fi
+
+if [ "$OLD_SUFFIX" != "so" ] && [ "$OLD_SUFFIX" != "dylib" ] && [ "$OLD_SUFFIX" != "dll" ]; then
+ echo The files have to be .so, .dylib or .dll! They are $OLD_SUFFIX
+ exit 10
+fi
+
+TYPE="$OLD_SUFFIX"
+
+if cmp $OLD $NEW > /dev/null
+then
+ # The files were bytewise identical.
+ echo Identical: $OLD_NAME
+ exit 0
+fi
+
+OLD_SYMBOLS=$COMPARE_ROOT/$OLD_NAME.old
+NEW_SYMBOLS=$COMPARE_ROOT/$NEW_NAME.new
+
+mkdir -p $(dirname $OLD_SYMBOLS)
+mkdir -p $(dirname $NEW_SYMBOLS)
+
+if [ $OSTYPE == "cygwin" ]; then
+ "$NM" $NM_ARGS $OLD | grep " = " > $OLD_SYMBOLS
+ "$NM" $NM_ARGS $NEW | grep " = " > $NEW_SYMBOLS
+ "$NM" $NM_ARGS $OLD > $OLD_SYMBOLS.full
+ "$NM" $NM_ARGS $NEW > $NEW_SYMBOLS.full
+else
+ # Strip the addresses, just compare the ordering of the symbols.
+ $NM $OLD | cut -f 2- -d ' ' > $OLD_SYMBOLS
+ $NM $NEW | cut -f 2- -d ' ' > $NEW_SYMBOLS
+ # But store the full information for easy diff access.
+ $NM $OLD > $OLD_SYMBOLS.full
+ $NM $NEW > $NEW_SYMBOLS.full
+fi
+
+DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS)
+
+RESULT=0
+
+if [ -n "$DIFFS" ]; then
+ if [ $OLD_SIZE -ne $NEW_SIZE ]
+ then
+ echo Differences, content AND size : $OLD_NAME
+ RESULT=4
+ else
+ echo Differences, content BUT SAME size: $OLD_NAME
+ RESULT=3
+ fi
+ if [ "x$VIEW" == "xview" ]; then
+ LANG=C $DIFF $OLD_SYMBOLS $NEW_SYMBOLS
+ fi
+else
+ if [ $OLD_SIZE -ne $NEW_SIZE ]
+ then
+ echo Identical symbols BUT NEW size : $OLD_NAME
+ RESULT=2
+ else
+ echo Identical symbols AND size, BUT not bytewise identical: $OLD_NAME
+ RESULT=1
+ fi
+fi
+
+exit $RESULT
+
+
+
diff --git a/common/bin/difftext.sh b/common/bin/difftext.sh
new file mode 100644
index 00000000000..ae903731f59
--- /dev/null
+++ b/common/bin/difftext.sh
@@ -0,0 +1,157 @@
+#!/bin/bash
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# The difftext.sh knows how to compare text files and
+# ignore some specific differences.
+# When difftext.sh is called, we already know that the
+# files differ. But if the tests below trigger, then
+# we ignore differences caused by:
+#
+# Timestamps in Java sources generated by idl2java
+# Sorting order and cleanup style in .properties files.
+
+OLD="$1"
+NEW="$2"
+SUF="${OLD##*.}"
+TMP=1
+if test "x$SUF" == "xjava"; then
+ TMP=$(LANG=C diff $OLD $NEW | \
+ grep '^[<>]' | \
+ sed '/[<>] \* from.*\.idl/d' | \
+ sed '/[<>] \*.*201[12].*/d' | \
+ sed '/\/\/ Generated from input file.*/d' | \
+ sed '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' | \
+ sed '/\/\/ java GenerateCharacter.*/d')
+fi
+if test "x$SUF" == "xproperties"; then
+ cat $OLD | sed -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' -e 's/#.*/#/g' \
+-e 's/\\u0020/\x20/g' \
+-e 's/\\u003A/\x3A/g' \
+-e 's/\\u006B/\x6B/g' \
+-e 's/\\u0075/\x75/g' \
+-e 's/\\u00A0/\xA0/g' \
+-e 's/\\u00A3/\xA3/g' \
+-e 's/\\u00B0/\xB0/g' \
+-e 's/\\u00B7/\xB7/g' \
+-e 's/\\u00BA/\xBA/g' \
+-e 's/\\u00BF/\xBF/g' \
+-e 's/\\u00C0/\xC0/g' \
+-e 's/\\u00C1/\xC1/g' \
+-e 's/\\u00C2/\xC2/g' \
+-e 's/\\u00C4/\xC4/g' \
+-e 's/\\u00C5/\xC5/g' \
+-e 's/\\u00C8/\xC8/g' \
+-e 's/\\u00C9/\xC9/g' \
+-e 's/\\u00CA/\xCA/g' \
+-e 's/\\u00CD/\xCD/g' \
+-e 's/\\u00CE/\xCE/g' \
+-e 's/\\u00D3/\xD3/g' \
+-e 's/\\u00D4/\xD4/g' \
+-e 's/\\u00D6/\xD6/g' \
+-e 's/\\u00DA/\xDA/g' \
+-e 's/\\u00DC/\xDC/g' \
+-e 's/\\u00DD/\xDD/g' \
+-e 's/\\u00DF/\xDF/g' \
+-e 's/\\u00E0/\xE0/g' \
+-e 's/\\u00E1/\xE1/g' \
+-e 's/\\u00E2/\xE2/g' \
+-e 's/\\u00E3/\xE3/g' \
+-e 's/\\u00E4/\xE4/g' \
+-e 's/\\u00E5/\xE5/g' \
+-e 's/\\u00E6/\xE6/g' \
+-e 's/\\u00E7/\xE7/g' \
+-e 's/\\u00E8/\xE8/g' \
+-e 's/\\u00E9/\xE9/g' \
+-e 's/\\u00EA/\xEA/g' \
+-e 's/\\u00EB/\xEB/g' \
+-e 's/\\u00EC/\xEC/g' \
+-e 's/\\u00ED/\xED/g' \
+-e 's/\\u00EE/\xEE/g' \
+-e 's/\\u00EF/\xEF/g' \
+-e 's/\\u00F1/\xF1/g' \
+-e 's/\\u00F2/\xF2/g' \
+-e 's/\\u00F3/\xF3/g' \
+-e 's/\\u00F4/\xF4/g' \
+-e 's/\\u00F5/\xF5/g' \
+-e 's/\\u00F6/\xF6/g' \
+-e 's/\\u00F9/\xF9/g' \
+-e 's/\\u00FA/\xFA/g' \
+-e 's/\\u00FC/\xFC/g' \
+-e 's/\\u0020/\x20/g' \
+-e 's/\\u003f/\x3f/g' \
+-e 's/\\u006f/\x6f/g' \
+-e 's/\\u0075/\x75/g' \
+-e 's/\\u00a0/\xa0/g' \
+-e 's/\\u00a3/\xa3/g' \
+-e 's/\\u00b0/\xb0/g' \
+-e 's/\\u00ba/\xba/g' \
+-e 's/\\u00bf/\xbf/g' \
+-e 's/\\u00c1/\xc1/g' \
+-e 's/\\u00c4/\xc4/g' \
+-e 's/\\u00c5/\xc5/g' \
+-e 's/\\u00c8/\xc8/g' \
+-e 's/\\u00c9/\xc9/g' \
+-e 's/\\u00ca/\xca/g' \
+-e 's/\\u00cd/\xcd/g' \
+-e 's/\\u00d6/\xd6/g' \
+-e 's/\\u00dc/\xdc/g' \
+-e 's/\\u00dd/\xdd/g' \
+-e 's/\\u00df/\xdf/g' \
+-e 's/\\u00e0/\xe0/g' \
+-e 's/\\u00e1/\xe1/g' \
+-e 's/\\u00e2/\xe2/g' \
+-e 's/\\u00e3/\xe3/g' \
+-e 's/\\u00e4/\xe4/g' \
+-e 's/\\u00e5/\xe5/g' \
+-e 's/\\u00e7/\xe7/g' \
+-e 's/\\u00e8/\xe8/g' \
+-e 's/\\u00e9/\xe9/g' \
+-e 's/\\u00ea/\xea/g' \
+-e 's/\\u00eb/\xeb/g' \
+-e 's/\\u00ec/\xec/g' \
+-e 's/\\u00ed/\xed/g' \
+-e 's/\\u00ee/\xee/g' \
+-e 's/\\u00ef/\xef/g' \
+-e 's/\\u00f0/\xf0/g' \
+-e 's/\\u00f1/\xf1/g' \
+-e 's/\\u00f2/\xf2/g' \
+-e 's/\\u00f3/\xf3/g' \
+-e 's/\\u00f4/\xf4/g' \
+-e 's/\\u00f5/\xf5/g' \
+-e 's/\\u00f6/\xf6/g' \
+-e 's/\\u00f7/\xf7/g' \
+-e 's/\\u00f8/\xf8/g' \
+-e 's/\\u00f9/\xf9/g' \
+-e 's/\\u00fa/\xfa/g' \
+-e 's/\\u00fc/\xfc/g' \
+-e 's/\\u00ff/\xff/g' \
+ | sed -e '/^#/d' -e '/^$/d' \
+ -e :a -e '/\\$/N; s/\\\n//; ta' \
+ -e 's/^[ \t]*//;s/[ \t]*$//' \
+ -e 's/\\=/=/' | LANG=C sort > $OLD.cleaned
+ TMP=$(LANG=C diff $OLD.cleaned $NEW)
+fi
+if test -n "$TMP"; then
+ echo Files $OLD and $NEW differ
+fi
diff --git a/common/bin/exception_list_linux b/common/bin/exception_list_linux
new file mode 100644
index 00000000000..4dcf2724cbf
--- /dev/null
+++ b/common/bin/exception_list_linux
@@ -0,0 +1,114 @@
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# List of files inside jar archives that are ok if they differ.
+LIST_DIFF_JAR="
+/sun/misc/Version.class
+/sun/tools/jconsole/Version.class
+/com/sun/tools/javac/resources/version.class
+/com/sun/tools/javah/resources/version.class
+/com/sun/tools/javap/resources/version.class
+"
+
+# List of binaries that only need to match symbols
+LIST_DIFF_SIZE="
+jre/lib/amd64/libfontmanager.so
+jre/lib/amd64/libjdwp.so
+jre/lib/amd64/libt2k.so
+bin/unpack200
+jre/bin/unpack200
+jre/lib/amd64/libjsig.debuginfo
+jre/lib/amd64/libsaproc.debuginfo
+jre/lib/amd64/server/libjvm.debuginfo
+"
+
+# List of binares that need to match both symbols and size
+LIST_DIFF_BYTE="
+jre/lib/amd64/libdt_socket.so
+jre/lib/amd64/libattach.so
+jre/lib/amd64/libjaas_unix.so
+jre/lib/amd64/libjawt.so
+jre/lib/amd64/libjpeg.so
+jre/lib/amd64/libjsdt.so
+jre/lib/amd64/libjsig.so
+jre/lib/amd64/libsaproc.so
+jre/lib/amd64/libsctp.so
+jre/lib/amd64/libsunec.so
+jre/lib/amd64/libunpack.so
+jre/lib/amd64/libverify.so
+jre/lib/amd64/libzip.so
+jre/lib/amd64/server/libjsig.so
+jre/lib/amd64/server/libjvm.so
+jre/lib/amd64/liblcms.so
+demo/jvmti/heapTracker/lib/libheapTracker.so
+demo/jvmti/hprof/lib/libhprof.so
+demo/jvmti/minst/lib/libminst.so
+demo/jvmti/mtrace/lib/libmtrace.so
+demo/jvmti/waiters/lib/libwaiters.so
+bin/appletviewer
+bin/extcheck
+bin/idlj
+bin/jar
+bin/jarsigner
+bin/java
+bin/javac
+bin/javadoc
+bin/javah
+bin/javap
+bin/jcmd
+bin/jconsole
+bin/jdb
+bin/jhat
+bin/jinfo
+bin/jmap
+bin/jps
+bin/jrunscript
+bin/jsadebugd
+bin/jstack
+bin/jstat
+bin/jstatd
+bin/keytool
+bin/native2ascii
+bin/orbd
+bin/pack200
+bin/policytool
+bin/rmic
+bin/rmid
+bin/rmiregistry
+bin/schemagen
+bin/serialver
+bin/servertool
+bin/tnameserv
+bin/wsgen
+bin/wsimport
+bin/xjc
+jre/bin/java
+jre/bin/keytool
+jre/bin/orbd
+jre/bin/pack200
+jre/bin/policytool
+jre/bin/rmid
+jre/bin/rmiregistry
+jre/bin/servertool
+jre/bin/tnameserv
+"
diff --git a/common/bin/extractvcvars.sh b/common/bin/extractvcvars.sh
new file mode 100644
index 00000000000..32e7d6993bd
--- /dev/null
+++ b/common/bin/extractvcvars.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Must be bash, but that is ok since we are running from cygwin.
+# The first argument is the vcvarsall.bat file to run.
+# The second argument is the arch arg to give to vcvars.
+VCVARSALL="$1"
+ARCH_ARG="$2"
+
+# Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment)
+# but calculate the difference in Cygwin environment before/after running it and then
+# apply the diff.
+_vs10varsall=`cygpath -a -m -s "$VCVARSALL"`
+_dosvs10varsall=`cygpath -a -w -s $_vs10varsall`
+_dosbash=`cygpath -a -w -s \`which bash\`.*`
+
+# generate the set of exported vars before/after the vs10 setup
+echo "@echo off" > localdevenvtmp.bat
+echo "$_dosbash -c \"export -p\" > localdevenvtmp.export0" >> localdevenvtmp.bat
+echo "call $_dosvs10varsall $ARCH_ARG" >> localdevenvtmp.bat
+echo "$_dosbash -c \"export -p\" > localdevenvtmp.export1" >> localdevenvtmp.bat
+cmd /c localdevenvtmp.bat
+
+# apply the diff (less some non-vs10 vars named by "!")
+sort localdevenvtmp.export0 |grep -v "!" > localdevenvtmp.export0.sort
+sort localdevenvtmp.export1 |grep -v "!" > localdevenvtmp.export1.sort
+comm -1 -3 localdevenvtmp.export0.sort localdevenvtmp.export1.sort > localdevenv.sh
+cat localdevenv.sh | sed 's/declare -x /export /g' | sed 's/="/:="/g' | sed 's/\\\\/\\/g' | sed 's/"//g' | \
+ sed 's/#/\$\(HASH\)/g' > localdevenv.gmk
+
+# cleanup
+rm -f localdevenvtmp*
diff --git a/common/bin/hide_important_warnings_from_javac.sh b/common/bin/hide_important_warnings_from_javac.sh
new file mode 100644
index 00000000000..412c71aa3ba
--- /dev/null
+++ b/common/bin/hide_important_warnings_from_javac.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+if [ -x /usr/bin/ggrep ] ; then
+ # Gnu grep on Solaris
+ # (reference configure and build/solaris-i586-clientANDserver-release/spec.gmk
+ GREP=/usr/bin/ggrep
+else
+ GREP=grep
+fi
+#
+EXP="Note: Some input files use or override a deprecated API."
+EXP="${EXP}|Note: Recompile with -Xlint:deprecation for details."
+EXP="${EXP}|Note: Some input files use unchecked or unsafe operations."
+EXP="${EXP}|Note: Recompile with -Xlint:unchecked for details."
+EXP="${EXP}| warning"
+EXP="${EXP}|uses or overrides a deprecated API."
+EXP="${EXP}|uses unchecked or unsafe operations."
+#
+${GREP} --line-buffered -v -E "${EXP}"
diff --git a/common/bin/logger.sh b/common/bin/logger.sh
new file mode 100644
index 00000000000..9f2d7a24c7f
--- /dev/null
+++ b/common/bin/logger.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Usage: ./logger.sh theloggfile acommand arg1 arg2
+#
+# Execute acommand with args, in such a way that
+# both stdout and stderr from acommand are appended to
+# theloggfile.
+#
+# Preserve stdout and stderr, so that the stdout
+# from logger.sh is the same from acommand and equally
+# for stderr.
+#
+# Propagate the result code from acommand so that
+# ./logger.sh exits with the same result code.
+
+# Create a temporary directory to store the result code from
+# the wrapped command.
+RCDIR=`mktemp -d tmp.XXXXXX` || exit $?
+trap "rm -rf '$RCDIR'" EXIT
+LOGFILE=$1
+shift
+(exec 3>&1 ; ("$@" 2>&1 1>&3; echo $? > $RCDIR/rc) | tee -a $LOGFILE 1>&2 ; exec 3>&-) | tee -a $LOGFILE
+exit `cat $RCDIR/rc`
+
diff --git a/common/makefiles/IdlCompilation.gmk b/common/makefiles/IdlCompilation.gmk
new file mode 100644
index 00000000000..ae85d378d6f
--- /dev/null
+++ b/common/makefiles/IdlCompilation.gmk
@@ -0,0 +1,114 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+PREFIXES=-pkgPrefix CORBA org.omg \
+ -pkgPrefix CosNaming org.omg \
+ -pkgPrefix CosTransactions org.omg \
+ -pkgPrefix CosTSInteroperation org.omg \
+ -pkgPrefix DynamicAny org.omg \
+ -pkgPrefix Dynamic org.omg \
+ -pkgPrefix IOP org.omg \
+ -pkgPrefix Messaging org.omg \
+ -pkgPrefix PortableInterceptor org.omg \
+ -pkgPrefix PortableServer org.omg \
+ -pkgPrefix activation com.sun.corba.se.spi \
+ -pkgPrefix GIOP com.sun.corba.se \
+ -pkgPrefix PortableActivationIDL com.sun.corba.se \
+ -pkgPrefix messages com.sun.corba.se
+
+define add_idl_package
+ # param 1 = MYPACKAGE
+ # param 2 = src root
+ # param 3 = gensrc root
+ # param 4 = source idl to compile
+ # param 5 = target idl package
+ # param 6 = delete these files that were output from the idlj
+ # param 7 = idls that match these patterns should be compiled with -oldImplBase
+ # param 8 = the idlj command
+ # Save the generated java files to a temporary directory so
+ # that we can find them and create proper dependencies.
+ # After that, we move them to the real gensrc target dir.
+ $4_TMPDIR:=tmp___$(subst /,_,$(patsubst $2/%,%,$4))___
+ ifneq ($$(filter $7,$4),)
+ $4_OLDIMPLBASE:=-oldImplBase
+ $4_OLDIMPLBASE_MSG:=with -oldImplBase
+ endif
+ $5 : $4
+ mkdir -p $3/$$($4_TMPDIR)
+ rm -rf $3/$$($4_TMPDIR)
+ mkdir -p $(dir $5)
+ echo Compiling IDL $(patsubst $2/%,%,$4)
+ $8 -td $3/$$($4_TMPDIR) \
+ -i $2/org/omg/CORBA \
+ -i $2/org/omg/PortableInterceptor \
+ -i $2/org/omg/PortableServer \
+ -D CORBA3 -corba 3.0 \
+ -fall \
+ $$($4_OLDIMPLBASE) \
+ $(PREFIXES) \
+ $4
+ rm -f $$(addprefix $3/$$($4_TMPDIR)/,$6)
+ cp -rp $3/$$($4_TMPDIR)/* $3
+ (cd $3/$$($4_TMPDIR); find . -type f | sed 's!\./!$3/!g' | awk '{ print $$$$1 ": $4" }' > $5)
+ rm -rf $3/$$($4_TMPDIR)
+endef
+
+define SetupIdlCompilation
+# param 1 is for example BUILD_IDLS
+# param 2,3,4,5,6,7,8 are named args.
+# IDLJ,SRC,BIN,INCLUDES,EXCLUDES,OLDIMPLBASES,DELETES
+$(if $2,$1_$(strip $2))
+$(if $3,$1_$(strip $3))
+$(if $4,$1_$(strip $4))
+$(if $5,$1_$(strip $5))
+$(if $6,$1_$(strip $6))
+$(if $7,$1_$(strip $7))
+$(if $8,$1_$(strip $8))
+$(if $9,$1_$(strip $9))
+# Remove any relative addressing in the paths.
+$1_SRC := $$(abspath $$($1_SRC))
+$1_BIN := $$(abspath $$($1_BIN))
+# Find all existing java files and existing class files.
+$$(shell mkdir -p $$($1_SRC) $$($1_BIN))
+$1_SRCS := $$(shell find $$($1_SRC) -name "*.idl")
+$1_BINS := $$(shell find $$($1_BIN) -name "*.java")
+# Prepend the source/bin path to the filter expressions.
+$1_SRC_INCLUDES := $$(addprefix $$($1_SRC)/,$$($1_INCLUDES))
+$1_SRC_EXCLUDES := $$(addprefix $$($1_SRC)/,$$($1_EXCLUDES))
+$1_BIN_INCLUDES := $$(addprefix $$($1_BIN)/,$$($1_INCLUDES))
+$1_BIN_EXCLUDES := $$(addprefix $$($1_BIN)/,$$($1_EXCLUDES))
+$1_OLDIMPLBASES := $$(addprefix $$($1_SRC)/,$$($1_OLDIMPLBASES))
+# Now remove unwanted java/class files.
+$1_SRCS := $$(filter $$($1_SRC_INCLUDES),$$($1_SRCS))
+$1_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRCS))
+$1_BINS := $$(filter $$($1_BIN_INCLUDES),$$($1_BINS))
+$1_BINS := $$(filter-out $$($1_BIN_EXCLUDES),$$($1_BINS))
+$1 := $$(sort $$(patsubst $$($1_SRC)/%.idl,$$($1_BIN)/%.idl.d,$$($1_SRCS)))
+# Now create the dependencies for each idl target.
+$$(foreach p,$$($1),$$(eval $$(call add_idl_package,$1,$$($1_SRC),$$($1_BIN),$$(patsubst $$($1_BIN)/%.idl.d,$$($1_SRC)/%.idl,$$p),$$p,$$($1_DELETES),$$($1_OLDIMPLBASES),$$($1_IDLJ))))
+endef
+
+.SUFFIXES: .java .class .package
+
diff --git a/common/makefiles/JavaCompilation.gmk b/common/makefiles/JavaCompilation.gmk
new file mode 100644
index 00000000000..6795e4ba009
--- /dev/null
+++ b/common/makefiles/JavaCompilation.gmk
@@ -0,0 +1,887 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# The complexity of this makefile is not the fault of make, but the fault
+# of javac and javah. The basic problems are:
+#
+# 1) Compiling a single Java source file unpredictably generates anything
+# between zero (0!) and an infinite number of .class files!
+# 2) There is no hint, for which classes javah needs to be run,
+# and it happily generates .h files for classes with no native methods.
+# 3) javac and javah do not cleanup anything, for example if an internal
+# class (potentially with native methods) is removed from a Java source file.
+#
+# This makefile is a tribute to GNU make. And yes, it was harder to write than it is
+# to read. The include/excludes of directories and files are only a temporary measure
+# to work around the messy jdk sources that put platform specific code in src/share/classes.
+#
+# We should move most of the functionality of this makefile into a
+# smart javac/javah/javadoc/jar combo tool. sjavac ?
+#
+# I.e. 1) It always generates a single output, a zip-file from a number of source roots.
+# The zip file contains information that enable incremental builds with full
+# dependency tracking between packages.
+# 2) It automatically generates the right .h files.
+# 3) It keeps its house clean.
+# *) Generates intermediate files to be used for javadoc generation later.
+# and does all the other useful things that this makefile does, such as:
+# use all cores for compilation, reuse the running JVM for all compilations,
+# and has pubapi dependency tracking to minimize the number of files
+# that need to be recompiled during an incremental build.
+#
+# A zip file, or several zip files combined, can then be converted to a .jar file, or to a .jmod file.
+#
+# This would make this makefile much much simpler. I.e. make can be used
+# for its real purpose, track dependencies and trigger a recompile if a
+# dependency has changed.
+#
+# When you read this source. Remember that $(sort ...) has the side effect
+# of removing duplicates. It is actually this side effect that is
+# desired whenever sort is used below!
+
+ifeq (,$(_MAKEBASE_GMK))
+ $(error You must include MakeBase.gmk prior to including JavaCompilation.gmk)
+endif
+
+FALSE_FIND_PATTERN:=-name FILE_NAME_THAT_DOESNT_EXIST
+
+# If compilation of java package fails, then the public api file for that
+# package will not be genereated. We add this fallback rule to generate
+# an empty pubapi file.
+%.api:
+ if test ! -f $@; then $(MKDIR) -p $(@D); $(TOUCH) $@; fi
+
+define SetupJavaCompiler
+ # param 1 is for example BOOT_JAVAC or NEW_JAVAC
+ # This is the name later used to decide which java compiler to use.
+ # param 2-9 are named args.
+ # JVM:=The jvm used to run the javac/javah command
+ # JAVAC:=The javac jar and bootstrap classpath changes, or just bin/javac if JVM is left out
+ # JAVAH:=The javah jar and bootstrap classpath changes, or just bin/javah if JVM is left out
+ # FLAGS:=Flags to be supplied to javac
+ # MODE:=SINGLE_THREADED_BATCH (primarily for old javac) or MULTI_CORE_CONCURRENT
+ # only for MULTI_CORE_CONCURRENT are the options below relevant:
+ # SERVER_DIR:=Use a javac server (-XDserver) and store the server related files here
+ # SERVER_JVM:=Use this JVM for the server. Defaults to the JVM above.
+ # USE_DEPS:=true means use -XDdeps,-XDpubapi and -XDnativeapi to track java dependencies
+ $(if $2,$1_$(strip $2))
+ $(if $3,$1_$(strip $3))
+ $(if $4,$1_$(strip $4))
+ $(if $5,$1_$(strip $5))
+ $(if $6,$1_$(strip $6))
+ $(if $7,$1_$(strip $7))
+ $(if $8,$1_$(strip $8))
+ $(if $9,$1_$(strip $9))
+
+ ifeq ($$($1_MODE),MULTI_CORE_CONCURRENT)
+ ifneq (,$$($1_SERVER_DIR))
+ # A javac server has been requested.
+ # The port file contains the tcp/ip on which the server listens
+ # and the cookie necessary to talk to the server.
+ $1_JAVAC_PORTFILE:=$$($1_SERVER_DIR)/$1.port
+ ifeq ($$($1_SERVER_JVM),)
+ # You can use a different JVM to run the background javac server.
+ # But if not set, it defaults to the same JVM that is used to start
+ # the javac command.
+ $1_SERVER_JVM:=$$($1_JVM)
+ endif
+ # Set the $1_REMOTE to spawn a background javac server.
+ $1_REMOTE:=-XDserver:portfile=$$($1_JAVAC_PORTFILE),poolsize=$(JAVAC_SERVER_CORES),javac=$$(subst $$(SPACE),%20,$$(subst $$(COMMA),%2C,$$(strip $$($1_SERVER_JVM) $$($1_JAVAC))))
+ endif
+ endif
+endef
+
+define SetupArchive
+ # param 1 is for example ARCHIVE_MYPACKAGE
+ # param 2 are the dependecies
+ # param 3,4,5,6,7,8,9 are named args.
+ # SRCS:=List of directories in where to find files to add to archive
+ # SUFFIXES:=File suffixes to include in jar
+ # INCLUDES:=List of directories/packages in SRCS that should be included
+ # EXCLUDES:=List of directories/packages in SRCS that should be excluded
+ # EXCLUDE_FILES:=List of files in SRCS that should be excluded
+ # EXTRA_FILES:=List of files in SRCS that should be included regardless of suffix match.
+ # JAR:=Jar file to create
+ # MANIFEST:=Optional manifest file template.
+ # JARMAIN:=Optional main class to add to manifest
+ # SETUP:=The Java(h) compiler setup, needed to run javah.
+ # HEADERS:=Directory to put headers in
+ # SKIP_METAINF:=Set to prevent contents of an META-INF directory to be automatically
+ # added to the archive.
+ # EXTRA_MANIFEST_ATTR:=Extra attribute to add to manifest.
+ $(if $3,$1_$(strip $3))
+ $(if $4,$1_$(strip $4))
+ $(if $5,$1_$(strip $5))
+ $(if $6,$1_$(strip $6))
+ $(if $7,$1_$(strip $7))
+ $(if $8,$1_$(strip $8))
+ $(if $9,$1_$(strip $9))
+ $(if $(10),$1_$(strip $(10)))
+ $(if $(11),$1_$(strip $(11)))
+ $(if $(12),$1_$(strip $(12)))
+ $(if $(13),$1_$(strip $(13)))
+ $(if $(14),$1_$(strip $(14)))
+
+ $1_JVM := $$($$($1_SETUP)_JVM)
+ $1_JAVAH := $$($$($1_SETUP)_JAVAH)
+ $1_JARMAIN:=$(strip $$($1_JARMAIN))
+ $1_JARNAME:=$$(notdir $$($1_JAR))
+ $1_MANIFEST_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_manifest
+ $1_DELETESS_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_deletess
+ $1_DELETES_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_deletes
+ $1_PUBAPI_NOTIFICATIONS_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_pubapi_notifications
+ $1_NATIVEAPI_NOTIFICATIONS_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_native_notifications
+ $1_NATIVEAPI_FILE:=$$(dir $$($1_JAR))_the.$$($1_JARNAME)_native
+ $1_BIN:=$$(dir $$($1_JAR))
+ ifeq (,$$($1_SUFFIXES))
+ # No suffix was set, default to classes.
+ $1_SUFFIXES:=.class
+ endif
+ # Convert suffixes to a find expression
+ $1_FIND_PATTERNS:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_SUFFIXES))
+ ifneq (,$$($1_INCLUDES))
+ $1_GREP_INCLUDES:=| $(GREP) $$(foreach src,$$($1_SRCS),$$(addprefix -e$(SPACE)$$(src)/,$$($1_INCLUDES)))
+ endif
+ ifneq (,$$($1_EXCLUDES)$$($1_EXCLUDE_FILES))
+ $1_GREP_EXCLUDES:=| $(GREP) -v $$(foreach src,$$($1_SRCS),$$(addprefix -e$(SPACE)$$(src)/,$$($1_EXCLUDES) $$($1_EXCLUDE_FILES)))
+ endif
+
+ # Utility macros, to make the shell script receipt somewhat easier to dechipher.
+
+ # The capture contents macro finds all files (matching the patterns, typically
+ # .class and .prp) that are newer than the jar-file, ie the new content to be put into the jar.
+ $1_CAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),(($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) -a -newer $$@ $$($1_GREP_INCLUDES) $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)) | $(SED) 's|$$(src)/||g' > $$(src)/_the.$$($1_JARNAME)_contents) && )
+ # The capture metainf macro finds all files below the META-INF directory that are newer than the jar-file.
+ ifeq (,$$($1_SKIP_METAINF))
+ $1_CAPTURE_METAINF =$$(foreach src,$$($1_SRCS),($(FIND) $$(src)/META-INF -type f -a -newer $$@ 2> /dev/null | $(SED) 's|$$(src)/||g' >> $$(src)/_the.$$($1_JARNAME)_contents ) && )
+ endif
+ # The capture deletes macro finds all deleted files and concatenates them. The resulting file
+ # tells us what to remove from the jar-file.
+ $1_CAPTURE_DELETES=$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.deleted -newer $$@ -exec $(SED) 's|$$(src)||g' \{\} >> $$($1_DELETES_FILE) \;) &&)
+ # The capture pubapi notifications scans for pubapi change notifications. If such notifications are
+ # found, then we will build the classes leading up to the jar again, to take into account the new timestamps
+ # on the changed pubapi files.
+ $1_CAPTURE_PUBAPI_NOTIFICATIONS=$$(foreach src,$$($1_SRCS),\
+ (cd $$(src) && \
+ $(FIND) . -name _the.package.api.notify -exec dirname \{\} \; >> $$($1_PUBAPI_NOTIFICATIONS_FILE) ; \
+ true) &&)
+ # The capture nativeapi macro scans for native api change notificiations. If such notifications are
+ # found, then we will run javah on the changed classes. It also collects all classes with native methods
+ # to be used to find out which classes no longer has native methods, to trigger deletion of those .h files.
+ $1_CAPTURE_NATIVEAPI=$$(foreach src,$$($1_SRCS),\
+ (cd $$(src) && \
+ $(FIND) . -name _the.package.native.notify | $(SED) 's/package.native.notify/package.native/' | \
+ $(XARGS) $(CAT) | $(GREP) '^TYPE ' | $(SED) 's/.*TYPE //' >> $$($1_NATIVEAPI_NOTIFICATIONS_FILE) ; \
+ $(FIND) . -name _the.package.native -exec $(CAT) \{\} \; | $(SED) -n 's/^TYPE //p' >> $$($1_NATIVEAPI_FILE) ; \
+ true) &&)
+ # The update contents macro updates the jar file with the previously capture contents.
+ $1_UPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\
+ (cd $$(src) && \
+ if [ -s _the.$$($1_JARNAME)_contents ]; then \
+ $(ECHO) " updating" `$(WC) -l _the.$$($1_JARNAME)_contents | $(AWK) '{ print $$$$1 }'` files && \
+ $(JAR) uf $$@ @_the.$$($1_JARNAME)_contents; \
+ fi) &&)
+ # The s-variants of the above macros are used when the jar is created from scratch.
+ $1_SCAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),\
+ (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)) | $(SED) 's|$$(src)/||g' > $$(src)/_the.$$($1_JARNAME)_contents) && )
+ ifeq (,$$($1_SKIP_METAINF))
+ $1_SCAPTURE_METAINF=$$(foreach src,$$($1_SRCS),\
+ ($(FIND) $$(src)/META-INF -type f 2> /dev/null | $(SED) 's|$$(src)/||g' >> $$(src)/_the.$$($1_JARNAME)_contents) && )
+ endif
+ $1_SUPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\
+ (cd $$(src) && $(JAR) uf $$@ @$$(src)/_the.$$($1_JARNAME)_contents) &&)
+ # The TOUCH macro is used to make sure all timestamps are identical for package files and the pubapi files.
+ # If we do not do this, we get random recompilations, the next time we run make, since the order of package building is random,
+ # ie independent of package --dependes on-> public api of another package. This is of course
+ # due to the fact that Java source often (always?) has circular dependencies. (Thus there is no correct order
+ # to compile packages, and we can just as well do them in a random order. Which we do.)
+ $1_TOUCH_API_FILES=$$(foreach src,$$($1_SRCS),\
+ ($(FIND) $$(src) -name _the.package.api -exec $(TOUCH) -r $$($1_JAR) \{\} \; ; true) && \
+ ($(FIND) $$(src) -name _the.package -exec $(TOUCH) -r $$($1_JAR) \{\} \; ; true) &&)
+ # Use a slightly shorter name for logging, but with enough path to identify this jar.
+ $1_NAME:=$$(subst $$(OUTPUT_ROOT)/,,$$($1_JAR))
+ # Here is the rule that creates/updates the jar file.
+ $$($1_JAR) : $2
+ $(MKDIR) -p $$($1_BIN)
+ if [ -n "$$($1_MANIFEST)" ]; then \
+ $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \
+ -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" $$($1_MANIFEST) > $$($1_MANIFEST_FILE); \
+ else \
+ $(RM) $$($1_MANIFEST_FILE) && $(TOUCH) $$($1_MANIFEST_FILE); \
+ fi
+ $(ECHO) "Main-Class: $$(strip $$($1_JARMAIN))" >> $$($1_MANIFEST_FILE)
+ if [ -n "$$($1_EXTRA_MANIFEST_ATTR)" ]; then \
+ $(ECHO) "$$($1_EXTRA_MANIFEST_ATTR)" >> $$($1_MANIFEST_FILE); \
+ fi
+ +if [ -s $$@ ]; then \
+ $(RM) -r $$($1_PUBAPI_NOTIFICATIONS_FILE) && \
+ $$($1_CAPTURE_PUBAPI_NOTIFICATIONS) \
+ if [ -s $$($1_PUBAPI_NOTIFICATIONS_FILE) ]; then \
+ $(ECHO) Public api change detected in: && \
+ $(CAT) $$($1_PUBAPI_NOTIFICATIONS_FILE) | $(TR) '/' '.' | $(SED) 's|^..||g' | $(SED) 's|\.$$$$||g' | $(AWK) '{print " "$$$$1}' && \
+ $$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.api.notify $(FIND_DELETE); true) &&) \
+ $(MAKE) -f $(word 1,$(MAKEFILE_LIST)) $$($1_JAR) ; \
+ else \
+ $(ECHO) Modifying $$($1_NAME) && \
+ $$($1_CAPTURE_CONTENTS) \
+ $$($1_CAPTURE_METAINF) \
+ $(RM) $$($1_DELETES_FILE) && \
+ $$($1_CAPTURE_DELETES) \
+ $(CAT) $$($1_DELETES_FILE) > $$($1_DELETESS_FILE) && \
+ if [ -s $$($1_DELETESS_FILE) ]; then \
+ $(ECHO) " deleting" `$(WC) -l $$($1_DELETESS_FILE) | $(AWK) '{ print $$$$1 }'` files && \
+ $(ZIP) -q -d $$@ `$(CAT) $$($1_DELETESS_FILE)` ; \
+ fi && \
+ $$($1_UPDATE_CONTENTS) true && \
+ $$($1_TOUCH_API_FILES) true && \
+ $(RM) -r $$($1_NATIVEAPI_NOTIFICATIONS_FILE) $$($1_NATIVEAPI_FILE) && \
+ $$($1_CAPTURE_NATIVEAPI) true && \
+ if [ "x$$($1_JAVAH)" != "x" ] && [ -s $$($1_NATIVEAPI_NOTIFICATIONS_FILE) ]; then \
+ $(ECHO) Native api change detected in: && $(CAT) $$($1_NATIVEAPI_NOTIFICATIONS_FILE) && \
+ $$($1_JVM) $$($1_JAVAH) "-Xbootclasspath/p:$$($1_JAR)" -d $$($1_HEADERS) @$$($1_NATIVEAPI_NOTIFICATIONS_FILE) ; \
+ fi && \
+ $(TOUCH) $$($1_NATIVEAPI_FILE)_prev ; \
+ ($(GREP) -xvf $$($1_NATIVEAPI_FILE) $$($1_NATIVEAPI_FILE)_prev > $$($1_NATIVEAPI_FILE)_deleted; true) && \
+ $(CP) $$($1_NATIVEAPI_FILE) $$($1_NATIVEAPI_FILE)_prev && \
+ if [ -s $$($1_NATIVEAPI_FILE)_deleted ]; then \
+ $(ECHO) Native methods dropped from classes: && $(CAT) $$($1_NATIVEAPI_FILE)_deleted && \
+ $(RM) `$(CAT) $$($1_NATIVEAPI_FILE)_deleted | $(SED) -e 's|\.|_|g' -e 's|.*|$$($1_HEADERS)/&.h $$($1_HEADERS)/&_*|'` ; \
+ fi && \
+ $$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.api.notify $(FIND_DELETE); true) &&) true ; \
+ fi ; \
+ else \
+ $(ECHO) Creating $$($1_NAME) && $(JAR) cfm $$@ $$($1_MANIFEST_FILE) && \
+ $$($1_SCAPTURE_CONTENTS) \
+ $$($1_SCAPTURE_METAINF) \
+ $$($1_SUPDATE_CONTENTS) \
+ $$($1_TOUCH_API_FILES) true && \
+ $(RM) -r $$($1_NATIVEAPI_NOTIFICATIONS_FILE) $$($1_NATIVEAPI_FILE) && \
+ $$($1_CAPTURE_NATIVEAPI) true && \
+ if [ "x$$($1_JAVAH)" != "x" ] && [ -s $$($1_NATIVEAPI_FILE) ]; then \
+ $(ECHO) Generating native api headers for `$(CAT) $$($1_NATIVEAPI_FILE) | $(WC) -l` classes && \
+ $(RM) $$($1_HEADERS)/*.h && \
+ $$($1_JVM) $$($1_JAVAH) "-Xbootclasspath/p:$$($1_JAR)" -d $$($1_HEADERS) @$$($1_NATIVEAPI_FILE) && \
+ $(CP) $$($1_NATIVEAPI_FILE) $$($1_NATIVEAPI_FILE)_prev ; \
+ fi && \
+ $$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name "*.notify" $(FIND_DELETE); true) &&) true ; \
+ fi;
+
+endef
+
+define append_to
+ $(ECHO) "$1" >> $2
+endef
+
+define SetupZipArchive
+ # param 1 is for example ZIP_MYSOURCE
+ # param 2,3,4,5,6,7,8,9 are named args.
+ # SRC,ZIP,INCLUDES,EXCLUDES,EXCLUDE_FILES
+ $(if $2,$1_$(strip $2))
+ $(if $3,$1_$(strip $3))
+ $(if $4,$1_$(strip $4))
+ $(if $5,$1_$(strip $5))
+ $(if $6,$1_$(strip $6))
+ $(if $7,$1_$(strip $7))
+ $(if $8,$1_$(strip $8))
+ $(if $9,$1_$(strip $9))
+
+ # Find all files in the source tree.
+ $1_ALL_SRCS := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f -a ! -name "_the.*"))
+
+ ifneq ($$($1_INCLUDES),)
+ $1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES))))
+ $1_ZIP_INCLUDES := $$(addprefix -i$(SPACE)$(DQUOTE),$$(addsuffix /*$(DQUOTE),$$($1_INCLUDES)))
+ $1_ALL_SRCS := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_SRCS))
+ endif
+ ifneq ($$($1_EXCLUDES),)
+ $1_SRC_EXCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_EXCLUDES))))
+ $1_ZIP_EXCLUDES := $$(addprefix -x$(SPACE)$(DQUOTE),$$(addsuffix /*$(DQUOTE),$$($1_EXCLUDES)))
+ $1_ALL_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRCS))
+ endif
+
+ # Use a slightly shorter name for logging, but with enough path to identify this zip.
+ $1_NAME:=$$(subst $$(OUTPUT_ROOT)/,,$$($1_ZIP))
+
+ # Now $1_ALL_SRCS should contain all sources that are going to be put into the zip.
+ # I.e. the zip -i and -x options should match the filtering done in the makefile.
+ # Explicitly excluded files can be given with absolute path. The patsubst solution
+ # isn't perfect but the likelyhood of an absolute path to match something in a src
+ # dir is very small.
+ $$($1_ZIP) : $$($1_ALL_SRCS)
+ $(MKDIR) -p $$(@D)
+ $(ECHO) Updating $$($1_NAME)
+ $$(foreach i,$$($1_SRC),(cd $$i && $(ZIP) -qru $$@ . $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* $$(addprefix -x$(SPACE),$$(patsubst $$i/%,%,$$($1_EXCLUDE_FILES)))) ;) true
+ $(TOUCH) $$@
+endef
+
+define add_file_to_copy
+ # param 1 = BUILD_MYPACKAGE
+ # parma 2 = The source file to copy.
+ $2_TARGET:=$2
+ # Remove the source prefix.
+ $$(foreach i,$$($1_SRC),$$(eval $$(call remove_string,$$i,$2_TARGET)))
+ # Now we can setup the depency that will trigger the copying.
+ $$($1_BIN)$$($2_TARGET) : $2
+ $(MKDIR) -p $$(@D)
+ $(CP) $$< $$@
+ $(CHMOD) -f ug+w $$@
+
+ # And do not forget this target
+ $1_ALL_COPY_TARGETS += $$($1_BIN)$$($2_TARGET)
+endef
+
+
+# This macro is used only for properties files that are to be
+# copied over to the classes directory in cleaned form:
+# Previously this was inconsistently done in different repositories.
+# This is the new clean standard.
+define add_file_to_copy_and_clean
+ # param 1 = BUILD_MYPACKAGE
+ # parma 2 = The source file to copy and clean.
+ $2_TARGET:=$2
+ # Remove the source prefix.
+ $$(foreach i,$$($1_SRC),$$(eval $$(call remove_string,$$i,$2_TARGET)))
+ # Now we can setup the depency that will trigger the copying.
+ $$($1_BIN)$$($2_TARGET) : $2
+ $(MKDIR) -p $$(@D)
+ $(ECHO) Cleaning $$($2_TARGET)
+ $(CAT) $$< | $(SED) -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' -e 's/#.*/#/g' \
+ | $(SED) \
+-e 's/\\u0020/\x20/g' \
+-e 's/\\u003A/\x3A/g' \
+-e 's/\\u006B/\x6B/g' \
+-e 's/\\u0075/\x75/g' \
+-e 's/\\u00A0/\xA0/g' \
+-e 's/\\u00A3/\xA3/g' \
+-e 's/\\u00B0/\xB0/g' \
+-e 's/\\u00B7/\xB7/g' \
+-e 's/\\u00BA/\xBA/g' \
+-e 's/\\u00BF/\xBF/g' \
+-e 's/\\u00C0/\xC0/g' \
+-e 's/\\u00C1/\xC1/g' \
+-e 's/\\u00C2/\xC2/g' \
+-e 's/\\u00C4/\xC4/g' \
+-e 's/\\u00C5/\xC5/g' \
+-e 's/\\u00C8/\xC8/g' \
+-e 's/\\u00C9/\xC9/g' \
+-e 's/\\u00CA/\xCA/g' \
+-e 's/\\u00CD/\xCD/g' \
+-e 's/\\u00CE/\xCE/g' \
+-e 's/\\u00D3/\xD3/g' \
+-e 's/\\u00D4/\xD4/g' \
+-e 's/\\u00D6/\xD6/g' \
+-e 's/\\u00DA/\xDA/g' \
+-e 's/\\u00DC/\xDC/g' \
+-e 's/\\u00DD/\xDD/g' \
+-e 's/\\u00DF/\xDF/g' \
+-e 's/\\u00E0/\xE0/g' \
+-e 's/\\u00E1/\xE1/g' \
+-e 's/\\u00E2/\xE2/g' \
+-e 's/\\u00E3/\xE3/g' \
+-e 's/\\u00E4/\xE4/g' \
+-e 's/\\u00E5/\xE5/g' \
+-e 's/\\u00E6/\xE6/g' \
+-e 's/\\u00E7/\xE7/g' \
+-e 's/\\u00E8/\xE8/g' \
+-e 's/\\u00E9/\xE9/g' \
+-e 's/\\u00EA/\xEA/g' \
+-e 's/\\u00EB/\xEB/g' \
+-e 's/\\u00EC/\xEC/g' \
+-e 's/\\u00ED/\xED/g' \
+-e 's/\\u00EE/\xEE/g' \
+-e 's/\\u00EF/\xEF/g' \
+-e 's/\\u00F1/\xF1/g' \
+-e 's/\\u00F2/\xF2/g' \
+-e 's/\\u00F3/\xF3/g' \
+-e 's/\\u00F4/\xF4/g' \
+-e 's/\\u00F5/\xF5/g' \
+-e 's/\\u00F6/\xF6/g' \
+-e 's/\\u00F9/\xF9/g' \
+-e 's/\\u00FA/\xFA/g' \
+-e 's/\\u00FC/\xFC/g' \
+-e 's/\\u0020/\x20/g' \
+-e 's/\\u003f/\x3f/g' \
+-e 's/\\u006f/\x6f/g' \
+-e 's/\\u0075/\x75/g' \
+-e 's/\\u00a0/\xa0/g' \
+-e 's/\\u00a3/\xa3/g' \
+-e 's/\\u00b0/\xb0/g' \
+-e 's/\\u00ba/\xba/g' \
+-e 's/\\u00bf/\xbf/g' \
+-e 's/\\u00c1/\xc1/g' \
+-e 's/\\u00c4/\xc4/g' \
+-e 's/\\u00c5/\xc5/g' \
+-e 's/\\u00c8/\xc8/g' \
+-e 's/\\u00c9/\xc9/g' \
+-e 's/\\u00ca/\xca/g' \
+-e 's/\\u00cd/\xcd/g' \
+-e 's/\\u00d6/\xd6/g' \
+-e 's/\\u00dc/\xdc/g' \
+-e 's/\\u00dd/\xdd/g' \
+-e 's/\\u00df/\xdf/g' \
+-e 's/\\u00e0/\xe0/g' \
+-e 's/\\u00e1/\xe1/g' \
+-e 's/\\u00e2/\xe2/g' \
+-e 's/\\u00e3/\xe3/g' \
+-e 's/\\u00e4/\xe4/g' \
+-e 's/\\u00e5/\xe5/g' \
+-e 's/\\u00e7/\xe7/g' \
+-e 's/\\u00e8/\xe8/g' \
+-e 's/\\u00e9/\xe9/g' \
+-e 's/\\u00ea/\xea/g' \
+-e 's/\\u00eb/\xeb/g' \
+-e 's/\\u00ec/\xec/g' \
+-e 's/\\u00ed/\xed/g' \
+-e 's/\\u00ee/\xee/g' \
+-e 's/\\u00ef/\xef/g' \
+-e 's/\\u00f0/\xf0/g' \
+-e 's/\\u00f1/\xf1/g' \
+-e 's/\\u00f2/\xf2/g' \
+-e 's/\\u00f3/\xf3/g' \
+-e 's/\\u00f4/\xf4/g' \
+-e 's/\\u00f5/\xf5/g' \
+-e 's/\\u00f6/\xf6/g' \
+-e 's/\\u00f7/\xf7/g' \
+-e 's/\\u00f8/\xf8/g' \
+-e 's/\\u00f9/\xf9/g' \
+-e 's/\\u00fa/\xfa/g' \
+-e 's/\\u00fc/\xfc/g' \
+-e 's/\\u00ff/\xff/g' \
+ | $(SED) -e '/^#/d' -e '/^$$$$/d' \
+ -e :a -e '/\\$$$$/N; s/\\\n//; ta' \
+ -e 's/^[ \t]*//;s/[ \t]*$$$$//' \
+ -e 's/\\=/=/' | LANG=C sort > $$@
+ $(CHMOD) -f ug+w $$@
+
+ # And do not forget this target
+ $1_ALL_COPY_CLEAN_TARGETS += $$($1_BIN)$$($2_TARGET)
+endef
+
+define add_java_package
+ # param 1 = BUILD_MYPACKAGE
+ # param 2 = the package target file (_the.package)
+ # param 3 = src roots, all of them, separated with space
+ # param 4 = bin root
+ # param 5 = include these dependecies
+ # param 6 = not used
+ # param 7 = if non-empty, then use -Xdeps and -Xpubapi
+ # param 8 = xremote configuration, or empty.
+ # param 9 = javac command
+ # param 10 = javac flags
+ # param 11 = exclude these files!
+ # param 12 = only include these files!
+ # param 13 = javah command
+ # param 14 = override src roots to be passed into -sourcepath, ugly ugly ugly, do not use this!
+ # it is only here to workaround ugly things in the source code in the jdk that ought
+ # to be fixed instead!
+ ifdef $2_USED_BY
+ $$(error Attempting to add the package $2 from $3 which is already added with sources from $$($2_USED_BY))
+ endif
+ $2_USED_BY:=$3
+ # Remove the _the.package file to get the target bin dir for the classes in this package.
+ $2_PACKAGE_BDIR:=$(dir $2)
+ # The source roots separated with a path separator (: or ; depending on os)
+ # (The patsubst is necessary to trim away unnecessary spaces.)
+ ifneq ($(14),)
+ $2_SRCROOTSC:=$(subst $(SPACE),$(PATH_SEP),$(strip $(patsubst %,%,$(14))))
+ else
+ $2_SRCROOTSC:=$(subst $(SPACE),$(PATH_SEP),$(strip $(patsubst %,%,$3)))
+ endif
+ # Suffix the package path to the src roots, to get a list of all possible source locations
+ # for this package.
+ $2_PACKAGE_SDIRS:=$$(foreach i,$3,$$(subst $4,$$i,$$($2_PACKAGE_BDIR)))
+ # Use wildcard in all potential source locations to find the actual sources.
+ $2_PACKAGE_SRCS:=$$(filter-out $(11),$$(wildcard $$(addsuffix *.java,$$($2_PACKAGE_SDIRS))))
+ ifneq ($(12),)
+ # Filter on include file filter if set.
+ $2_PACKAGE_SRCS:=$$(filter $(12),$$($2_PACKAGE_SRCS))
+ endif
+ # Generate a proper package name from the file name.
+ $2_PACKAGE:=$(patsubst .%.,%,$(subst /,.,$(subst $4,,$(dir $2))))
+ # Use a javac server for this package?
+ $2_REMOTE:=$8
+
+ # Include previously generated information about what classes are output by this package
+ # and what sources were used for the compile.
+ -include $$($2_PACKAGE_BDIR)_the.package.d
+
+ # Include the notify, file, that exists if the package has been compiled during a previous make round.
+ # I.e. we are now dealing with a compile triggered by a pubapi change.
+ -include $$($2_PACKAGE_BDIR)_the.package.notify
+
+ # If the notify file existed, then $$($2_NOTIFIED) will be equal to true.
+ # Use this information to block dependency tracking for this package.
+ # This is necessary to cut the circular dependency chains that are so common in Java sources.
+
+ ifneq ($$($2_NOTIFIED),true)
+ # No need to block, since this package has not yet been recompiled.
+ # Thus include previously generated dependency information. (if it exists)
+ -include $$($2_PACKAGE_BDIR)_the.package.dddd
+# else
+# $$(info WAS NOTIFIED $2)
+ endif
+
+ # Should we create proper dependencies between packages?
+ ifneq ($7,)
+ # The flag: -XDpubapi:file=foo,package=mypack,notify writes a file foo that contains a
+ # database of the public api of the classes supplied on the command line and are
+ # inside the package mypack. If foo already exists, javac will only write to foo,
+ # if there is a change in the pubapi. I.e. we can use the timestamp of this file
+ # for triggering dependencies. "notify" means create a "file" suffixed with notify
+ # if the pubapi really changed.
+ $2_PUBAPI=-XDpubapi=file=$$($2_PACKAGE_BDIR)_the.package.api,notify,package=$$($2_PACKAGE)
+ # The flag: -XDnativeapi:file=foo,package=mypack,notify works similar to pubabi, but
+ # instead tracks native methods. This file can be used to trigger dependencies for
+ # native compilations.
+ $2_NATIVEAPI=-XDnativeapi=file=$$($2_PACKAGE_BDIR)_the.package.native,notify,package=$$($2_PACKAGE)
+ # The flag -XDdeps:file=foo.deps,groupon=package writes a foo.deps file containing packages dependencies:
+ # java.net : java.io java.lang
+ # I.e. the classes in .net depend on the public apis of java.io and java.lang
+ # The dependencies can be grouped on classes instead (groupon=class)
+ # java.net.Bar : java.io.Socket java.lang.String
+ $2_DEPS:=-XDdeps=file=$$($2_PACKAGE_BDIR)_the.package.deps,groupon=package
+ # The next command rewrites the deps output from javac into a proper makefile dependency.
+ # The dependencies are always to an .api file generated by the pubapi option above.
+ # This is necessary since java package dependencies are almost always circular.
+ $2_APPEND_DEPS:=($(CAT) $$($2_PACKAGE_BDIR)_the.package.deps | $(TR) '.' '/' | $(AWK) '{ print "$4/" $$$$3 }' | sort > $$($2_PACKAGE_BDIR)_the.package.ddd && $(GREP) -f $$($2_PACKAGE_BDIR)_the.package.ddd $5 | $(AWK) '{ print "$(dir $2)_the.package : " $$$$1 "_the.package.api" }' > $$($2_PACKAGE_BDIR)_the.package.dddd ; true)
+ else
+ # If not using dependencies, use $2 as fallback to trigger regeneration of javah header files.
+ # This will generate a surplus of header files, but this does not hurt compilation.
+ $2_NATIVEAPICHANGE_TRIGGER:=$2
+ $2_FETCH_NATIVEAPICHANGE_CLASSES:=$(CAT) $$($2_PACKAGE_BDIR)_the.package.now|$(GREP) -v '\$$$$'|$(SED) -e 's|$4/||g'|$(SED) 's|.class||g'| $(TR) '/' '.'
+ endif
+
+ # The _the.package file is dependent on the java files inside the package.
+ # Fill the _the.package file with a list of the java files and compile them
+ # to class files.
+ $2 : $$($2_PACKAGE_SRCS)
+ $(MKDIR) -p $$($2_PACKAGE_BDIR)
+ $(RM) $2.tmp
+ $$(call ListPathsSafely,$2_PACKAGE_SRCS,\n, >> $2.tmp)
+ $(ECHO) $$($2_PACKAGE_BDIR)*.class | $(GREP) -v \*.class | $(TR) ' ' '\n' > $$($2_PACKAGE_BDIR)_the.package.prev
+ $(RM) $$($2_PACKAGE_BDIR)*.class $$($2_PACKAGE_BDIR)*.notify $$($2_PACKAGE_BDIR)*.deleted
+ $(ECHO) Compiling `$(WC) $2.tmp | $(TR) -s ' ' | $(CUT) -f 2 -d ' '` files in package $(patsubst $4/%/,%,$(dir $2.tmp))
+ $9 $$($2_REMOTE) $$($2_DEPS) $$($2_PUBAPI) $$($2_NATIVEAPI) $(10) -implicit:none -sourcepath "$$($2_SRCROOTSC)" -d $4 @$2.tmp
+ $(ECHO) $$($2_PACKAGE_BDIR)*.class | $(GREP) -v \*.class | $(TR) ' ' '\n' > $$($2_PACKAGE_BDIR)_the.package.now
+ ($(GREP) -xvf $$($2_PACKAGE_BDIR)_the.package.now $$($2_PACKAGE_BDIR)_the.package.prev > $$($2_PACKAGE_BDIR)_the.package.deleted;true)
+ $(ECHO) $1_CLASSES += `$(CAT) $$($2_PACKAGE_BDIR)_the.package.now` | \
+ $(SED) 's/\$$$$/\$$$$\$$$$/g' > $$($2_PACKAGE_BDIR)_the.package.d
+ $(ECHO) $1_JAVAS += $$($2_PACKAGE_SRCS) >> $$($2_PACKAGE_BDIR)_the.package.d
+ $(ECHO) $2_NOTIFIED:=true > $$($2_PACKAGE_BDIR)_the.package.notify
+ $$($2_APPEND_DEPS)
+ $$($2_COPY_FILES)
+ $(MV) -f $2.tmp $2
+endef
+
+define remove_string
+ $2 := $$(subst $1,,$$($2))
+endef
+
+define replace_space_with_pathsep
+ $1:=$(subst $(SPACE),$(PATH_SEP),$(strip $(patsubst %,%,$2)))
+endef
+
+define SetupJavaCompilation
+ # param 1 is for example BUILD_MYPACKAGE
+ # param 2,3,4,5,6,7,8 are named args.
+ # SETUP:=must point to a previously setup java compiler, for example: SETUP:=BOOTJAVAC
+ # JVM:=path to ..bin/java
+ # ADD_JAVAC_FLAGS:=javac flags to append to the default ones.
+ # SRC:=one or more directories to search for sources
+ # BIN:=store classes here
+ # INCLUDES:=myapp.foo means will only compile java files in myapp.foo or any of its sub-packages.
+ # EXCLUDES:=myapp.foo means will do not compile java files in myapp.foo or any of its sub-packages.
+ # COPY:=.prp means copy all prp files to the corresponding package in BIN.
+ # CLEAN:=.properties means copy and clean all properties file to the corresponding package in BIN.
+ # COPY_FILES:=myapp/foo/setting.txt means copy this file over to the package myapp/foo
+ # SRCZIP:=Create a src.zip based on the found sources and copied files.
+ # INCLUDE_FILES:="com/sun/SolarisFoobar.java" means only compile this file!
+ # EXCLUDE_FILES:="com/sun/SolarisFoobar.java" means do not compile this particular file!
+ # "SolarisFoobar.java" means do not compile SolarisFoobar, wherever it is found.
+ # JAVAC_SOURCE_PATH_UGLY_OVERRIDE:=Don't use this. This forces an explicit -sourcepath to javac.
+ # Its only here until we cleanup some nasty source code pasta in the jdk.
+ # HEADERS:=path to directory where all generated c-headers are written.
+ $(if $2,$1_$(strip $2))
+ $(if $3,$1_$(strip $3))
+ $(if $4,$1_$(strip $4))
+ $(if $5,$1_$(strip $5))
+ $(if $6,$1_$(strip $6))
+ $(if $7,$1_$(strip $7))
+ $(if $8,$1_$(strip $8))
+ $(if $9,$1_$(strip $9))
+ $(if $(10),$1_$(strip $(10)))
+ $(if $(11),$1_$(strip $(11)))
+ $(if $(12),$1_$(strip $(12)))
+ $(if $(13),$1_$(strip $(13)))
+ $(if $(14),$1_$(strip $(14)))
+
+# Extract the info from the java compiler setup.
+$1_MODE := $$($$($1_SETUP)_MODE)
+ifneq (SINGLE_THREADED_BATCH,$$($1_MODE))
+ ifneq (MULTI_CORE_CONCURRENT,$$($1_MODE))
+ $$(error The Java compilation $1 refers to a non-existant java compiler setup $$($1_SETUP))
+ endif
+endif
+$1_USE_DEPS := $$($$($1_SETUP)_USE_DEPS)
+$1_REMOTE := $$($$($1_SETUP)_REMOTE)
+$1_JVM := $$($$($1_SETUP)_JVM)
+$1_JAVAC := $$($$($1_SETUP)_JAVAC)
+$1_JAVAH := $$($$($1_SETUP)_JAVAH)
+$1_FLAGS := $$($$($1_SETUP)_FLAGS) $(JAVAC_FLAGS) $$($1_ADD_JAVAC_FLAGS)
+ifeq (,$$($1_HEADERS))
+ $1_HEADERS := $$($1_BIN)
+endif
+
+# Handle addons and overrides.
+$1_SRC:=$$(call ADD_SRCS,$$($1_SRC))
+# Make sure the dirs exist.
+$$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN))
+# Find all files in the source trees.
+$1_ALL_SRCS := $$(filter-out $(OVR_SRCS),$$(foreach i,$$($1_SRC),$$(shell $(FIND) $$i -type f)))
+# Extract the java files.
+ifneq ($$($1_EXCLUDE_FILES),)
+ $1_EXCLUDE_FILES_PATTERN:=$$(addprefix %,$$($1_EXCLUDE_FILES))
+endif
+$1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$(filter %.java,$$($1_ALL_SRCS)))
+ifneq ($$($1_INCLUDE_FILES),)
+ $1_INCLUDE_FILES:=$$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_INCLUDE_FILES)))
+ $1_SRCS := $$(filter $$($1_INCLUDE_FILES), $$($1_SRCS))
+endif
+$1_PKGS := $$(sort $$(dir $$($1_SRCS)))
+# Remove the source root from each found path.
+$$(foreach i,$$($1_SRC),$$(eval $$(call remove_string,$$i,$1_PKGS)))
+$1_PKGS := $$(sort $$($1_PKGS))
+# There can be only a single bin dir root, no need to foreach over the roots.
+$1_BINS := $$(shell $(FIND) $$($1_BIN) -name "*.class")
+
+# Now we have a list of all java files to compile: $$($1_SRCS)
+# and we have a list of all existing class files: $$($1_BINS)
+
+# Prepend the source/bin path to the filter expressions.
+ifneq ($$($1_INCLUDES),)
+ $1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES))))
+ $1_PKG_INCLUDES := $$(addprefix /,$$(addsuffix /%,$$($1_INCLUDES)))
+ $1_BIN_INCLUDES := $$(addprefix $$($1_BIN)/,$$(addsuffix /%,$$($1_INCLUDES)))
+ $1_SRCS := $$(filter $$($1_SRC_INCLUDES),$$($1_SRCS))
+ $1_PKGS := $$(filter $$($1_PKG_INCLUDES),$$($1_PKGS))
+ $1_BINS := $$(filter $$($1_BIN_INCLUDES),$$($1_BINS))
+endif
+ifneq ($$($1_EXCLUDES),)
+ $1_SRC_EXCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_EXCLUDES))))
+ $1_PKG_EXCLUDES := $$(addprefix /,$$(addsuffix /%,$$($1_EXCLUDES)))
+ $1_BIN_EXCLUDES := $$(addprefix $$($1_BIN)/,$$(addsuffix /%,$$($1_EXCLUDES)))
+ $1_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRCS))
+ $1_PKGS := $$(filter-out $$($1_PKG_EXCLUDES),$$($1_PKGS))
+ $1_BINS := $$(filter-out $$($1_BIN_EXCLUDES),$$($1_BINS))
+endif
+
+# Find all files to be copied from source to bin.
+ifneq (,$$($1_COPY))
+ # Rewrite list of patterns into a find statement.
+ $1_COPY_PATTERN:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_COPY))
+ # Search for all files to be copied.
+ $1_ALL_COPIES := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i \( $$($1_COPY_PATTERN) \) -a -type f))
+ # Copy these explicitly
+ $1_ALL_COPIES += $$($1_COPY_FILES)
+ # Copy must also respect filters.
+ ifneq (,$$($1_INCLUDES))
+ $1_ALL_COPIES := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_COPIES))
+ endif
+ ifneq (,$$($1_EXCLUDES))
+ $1_ALL_COPIES := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_ALL_COPIES))
+ endif
+ ifneq (,$$($1_EXCLUDE_FILES))
+ $1_ALL_COPIES := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$($1_ALL_COPIES))
+ endif
+ # All files below META-INF are always copied.
+ $1_ALL_COPIES += $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i/META-INF -type f 2> /dev/null))
+ ifneq (,$$($1_ALL_COPIES))
+ # Yep, there are files to be copied!
+ $1_ALL_COPY_TARGETS:=
+ $$(foreach i,$$($1_ALL_COPIES),$$(eval $$(call add_file_to_copy,$1,$$i)))
+ # Now we can depend on $$($1_ALL_COPY_TARGETS) to copy all files!
+ endif
+endif
+
+# Find all property files to be copied and cleaned from source to bin.
+ifneq (,$$($1_CLEAN))
+ # Rewrite list of patterns into a find statement.
+ $1_CLEAN_PATTERN:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_CLEAN))
+ # Search for all files to be copied.
+ $1_ALL_CLEANS := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i \( $$($1_CLEAN_PATTERN) \) -a -type f))
+ # Copy and clean must also respect filters.
+ ifneq (,$$($1_INCLUDES))
+ $1_ALL_CLEANS := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_CLEANS))
+ endif
+ ifneq (,$$($1_EXCLUDES))
+ $1_ALL_CLEANS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_ALL_CLEANS))
+ endif
+ ifneq (,$$($1_EXCLUDE_FILES))
+ $1_ALL_CLEANS := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$($1_ALL_CLEANS))
+ endif
+ ifneq (,$$($1_ALL_CLEANS))
+ # Yep, there are files to be copied and cleaned!
+ $1_ALL_COPY_CLEAN_TARGETS:=
+ $$(foreach i,$$($1_ALL_CLEANS),$$(eval $$(call add_file_to_copy_and_clean,$1,$$i)))
+ # Now we can depend on $$($1_ALL_COPY_CLEAN_TARGETS) to copy all files!
+ endif
+endif
+
+# Find all the directories that contain java sources, each directory
+# corresponds to a package because we expect the source
+# code to be organized in this standardized way!
+$1_SDIRS := $$(sort $$(dir $$($1_SRCS)))
+# Now prefix each package with the bin root.
+$1_BDIRS := $$(foreach i,$$($1_PKGS),$$(addprefix $$($1_BIN),$$i))
+# Now create a list of the packages that are about to compile. This list is
+# later used to filter out dependencies that point outside of this set.
+$$(shell $(RM) $$($1_BIN)/_the.list_of_packages)
+$$(eval $$(call ListPathsSafelyNow,$1_BDIRS,\n, >> $$($1_BIN)/_the.list_of_packages))
+
+ifeq ($$($1_MODE),SINGLE_THREADED_BATCH)
+ # Ok, we will feed all the found java files into a single javac invocation.
+ # There can be no dependency checking, nor incremental builds. It is
+ # the best we can do with the old javac. If the javac supports a javac server
+ # then we can use the javac server.
+
+ # We can depend on this target file to trigger a regeneration of all the sources
+ $1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1_BIN)/_the.batch
+
+ # Prep the source paths.
+ ifneq ($$($1_JAVAC_SOURCE_PATH_UGLY_OVERRIDE),)
+ $$(eval $$(call replace_space_with_pathsep,$1_SRCROOTSC,$$($1_JAVAC_SOURCE_PATH_UGLY_OVERRIDE)))
+ else
+ $$(eval $$(call replace_space_with_pathsep,$1_SRCROOTSC,$$($1_SRC)))
+ endif
+
+ # Create a sed expression to remove the source roots and to replace / with .
+ # and remove .java at the end.
+ $1_REWRITE_INTO_CLASSES:=$$(foreach i,$$($1_SRC),-e 's|$$i/||g') -e 's|/|.|g' -e 's|.java$$$$||g'
+
+ # Here is the batch rules that depends on all the sources.
+ $$($1_BIN)/_the.batch: $$($1_SRCS)
+ $(MKDIR) -p $$(@D)
+ $(RM) $$($1_BIN)/_the.batch $$($1_BIN)/_the.batch.tmp
+ $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.batch.tmp)
+ $(ECHO) Compiling `$(WC) $$($1_BIN)/_the.batch.tmp | $(TR) -s ' ' | $(CUT) -f 2 -d ' '` files in batch $1
+ ($$($1_JVM) $$($1_JAVAC) $$($1_FLAGS) -implicit:none -sourcepath "$$($1_SRCROOTSC)" -d $$($1_BIN) @$$($1_BIN)/_the.batch.tmp && \
+ $$(if $$($1_JAVAH),\
+ $(CAT) $$($1_BIN)/_the.batch.tmp | $(XARGS) $(GREP) -E "[[:space:]]native[[:space:]]|@GenerateNativeHeader" |\
+ $(GREP) -v '*' | $(GREP) -v '//' | $(CUT) -f 1 -d ':' | $(SORT) -u |\
+ $(SED) $$($1_REWRITE_INTO_CLASSES) > $$($1_BIN)/_the.batch.natives && \
+ if test -s $$($1_BIN)/_the.batch.natives; then \
+ $$($1_JVM) $$($1_JAVAH) "-Xbootclasspath/p:$$($1_BIN)" -d $$($1_HEADERS) @$$($1_BIN)/_the.batch.natives ; \
+ fi &&) \
+ $(MV) $$($1_BIN)/_the.batch.tmp $$($1_BIN)/_the.batch)
+else
+ # Ok, we have a modern javac server running!
+ # Since a single Java file can generate zero to an infinity number of .class files
+ # the exact number and names of the .class files will only be known after the compile.
+ # Thus after the compile, a list of the generated classes will be stored in _the.package.d
+ # which is included by the makefile during the next compile. These .d files will
+ # add the generated class names to the BUILD_MYPACKAGE_CLASSES variable and used java file names
+ # to the BUILD_MYPACKAGE_JAVAS variable.
+ $1_CLASSES :=
+ $1_JAVAS :=
+ # Create a file in each package that represents the package dependency.
+ # This file (_the.package) will also contain a list of the source files
+ # to be compiled for this package.
+ $1 := $$(sort $$(patsubst %,%_the.package,$$($1_BDIRS)))
+ # Now call add_java_package for each package to create the dependencies.
+ $$(foreach p,$$($1),$$(eval $$(call add_java_package,$1,$$p,$$($1_SRC),$$($1_BIN),$$($1_BIN)/_the.list_of_packages,NOTUSED,$$($1_USE_DEPS),$$($1_REMOTE),$$($1_JVM) $$($1_JAVAC),$$($1_FLAGS),$$($1_EXCLUDE_FILES_PATTERN) $(OVR_SRCS),$$($1_INCLUDE_FILES),$$($1_JVM) $$($1_JAVAH),$$($1_JAVAC_SOURCE_PATH_UGLY_OVERRIDE))))
+ # All dependencies are setup, now we only need to depend on $1 (aka $(BUILD_MYPACKAGE))
+ # and they will automatically be built!
+
+ # Now add on any files to copy targets
+ $1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1)
+ # Remove the set of found classes from the set of all previously known classes
+ # and the remainder is the set of missing classes.
+ $1_MISSING_CLASSES:=$$(filter-out $$($1_BINS),$$($1_CLASSES))
+ $1_PKGS_MISSING_CLASSES:=$$(sort $$(dir $$($1_MISSING_CLASSES)))
+ # Remove the set of found java files from the set of all previously known java files
+ # the remainder is Java files that have gone missing.
+ $1_MISSING_JAVAS:=$$(filter-out $$($1_SRCS),$$($1_JAVAS))
+ $1_PKGS_MISSING_JAVAS:=$$(sort $$(dir $$($1_MISSING_JAVAS)))
+ # Remove each source root from the found paths.
+ $$(foreach i,$$($1_SRC),$$(eval $$(call remove_string,$$i,$1_PKGS_MISSING_JAVAS)))
+ # Finally remove duplicates and prefix with the binary path instead.
+ $1_PKGS_MISSING_JAVAS:= $$(addprefix $$($1_BIN),$$(sort $$($1_PKGS_MISSING_JAVAS)))
+
+ # Remove the set of all theoretical classes from the set of found classes.
+ # the remainder is the set of superfluous classes.
+ $1_SUPERFLUOUS_CLASSES:=$$(sort $$(filter-out $$($1_CLASSES),$$($1_BINS)))
+ $1_PKGS_SUPERFLUOUS_CLASSES:=$$(sort $$(dir $$($1_SUPERFLUOUS_CLASSES)))
+
+ # Now delete the _the.package files inside the problematic dirs.
+ # This will force a rebuild of these packages!
+ $1_FOO:=$$(sort $$($1_PKGS_MISSING_CLASSES) \
+ $$($1_PKGS_SUPERFLUOUS_CLASSES) \
+ $$($1_PKGS_MISSING_JAVAS))
+# ifneq (,$$($1_FOO))
+# $$(info MESSED UP PACKAGES $$($1_FOO))
+# endif
+
+ $$(shell $(RM) $$(addsuffix _the.package,$$(sort $$($1_PKGS_MISSING_CLASSES) \
+ $$($1_PKGS_SUPERFLUOUS_CLASSES) \
+ $$($1_PKGS_MISSING_JAVAS))))
+
+ # Normal makefile dependencies based on timestamps will detect the normal use case
+ # when Java files are simply added or modified.
+endif
+
+ifneq (,$$($1_JAR))
+
+ ifeq (,$$($1_SUFFIXES))
+ $1_SUFFIXES:=.class $$($1_CLEAN) $$($1_COPY)
+ endif
+
+ # A jar file was specified. Set it up.
+ $$(eval $$(call SetupArchive,ARCHIVE_$1,$$($1),\
+ SRCS:=$$($1_BIN),\
+ SUFFIXES:=$$($1_SUFFIXES),\
+ EXCLUDE:=$$($1_EXCLUDES),\
+ INCLUDES:=$$($1_INCLUDES),\
+ EXTRA_FILES:=$$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS),\
+ JAR:=$$($1_JAR),\
+ JARMAIN:=$$($1_JARMAIN),\
+ MANIFEST:=$$($1_MANIFEST),\
+ EXTRA_MANIFEST_ATTR:=$$($1_EXTRA_MANIFEST_ATTR),\
+ HEADERS:=$$($1_HEADERS),\
+ SETUP:=$$($1_SETUP)))
+endif
+
+ifneq (,$$($1_SRCZIP))
+ # A srczip file was specified. Set it up.
+ $$(eval $$(call SetupZipArchive,ARCHIVE_$1,\
+ SRC:=$$($1_SRC),\
+ ZIP:=$$($1_SRCZIP),\
+ INCLUDES:=$$($1_INCLUDES),\
+ EXCLUDES:=$$($1_EXCLUDES),\
+ EXCLUDE_FILES:=$$($1_EXCLUDE_FILES)))
+endif
+
+endef
+
+
diff --git a/common/makefiles/MakeBase.gmk b/common/makefiles/MakeBase.gmk
new file mode 100644
index 00000000000..71150ed6443
--- /dev/null
+++ b/common/makefiles/MakeBase.gmk
@@ -0,0 +1,327 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+################################################################
+#
+# Check that GNU make and cygwin are recent enough.
+# Setup common utility functions.
+#
+################################################################
+
+ifndef _MAKEBASE_GMK
+_MAKEBASE_GMK := 1
+
+ifeq (,$(findstring 3.81,$(MAKE_VERSION)))
+ ifeq (,$(findstring 3.82,$(MAKE_VERSION)))
+ $(error This version of GNU Make is too low ($(MAKE_VERSION)). Please upgrade to 3.81 or newer.)
+ endif
+endif
+
+ifneq (,$(CYGPATH))
+ # Cygwin styff, if needed but most is going to be
+ # done in configure!
+ ifeq (yes,$(CHECK_FOR_VCINSTALLDIR))
+ ifeq (,$(VCINSTALLDIR))
+ $(info Could not find compiler paths!)
+ $(info You probably configured the build from within a)
+ $(info VS command prompt, but you are not using such a)
+ $(info prompt right now.)
+ $(info If you instead run configure from a plain cygwin shell, it)
+ $(info will attempt to setup VS for you! Please try that.)
+ $(error Giving up for now.)
+ endif
+ endif
+endif
+
+# The build times report is turned off by setting REPORT_BUILD_TIMES to nothing.
+# This is necessary for the target clean which will erase the
+# directories where the buildtimes are stored.
+REPORT_BUILD_TIMES=1
+# Store the build times in this directory.
+BUILDTIMESDIR=$(OUTPUT_ROOT)/tmp/buildtimes
+
+# Record starting time for build of a sub repository.
+define RecordStartTime
+$(MKDIR) -p $(BUILDTIMESDIR)
+$(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_start_$1
+$(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_start_$1_human_readable
+endef
+
+# Indicate that we started to build a sub repository and record starting time.
+define MakeStart
+$(call RecordStartTime,$1)
+$(BUILD_LOG_WRAPPER) $(PRINTF) "\n\n%s\n%s\n##### %-60.60s #####\n%s\n\n" \
+"########################################################################" \
+"########################################################################" \
+"Entering $1 for target(s) $2" \
+"########################################################################"
+endef
+
+# Record ending time and calculate the difference and store it in a
+# easy to read format. Handles builds that cross midnight. Expects
+# that a build will never take 24 hours or more.
+define RecordEndTime
+$(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_end_$1
+$(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_end_$1_human_readable
+$(ECHO) `$(CAT) $(BUILDTIMESDIR)/build_time_start_$1` `$(CAT) $(BUILDTIMESDIR)/build_time_end_$1` $1 | \
+ $(NAWK) '{ F=$$7; T=$$14; if (F > T) { T+=3600*24 }; D=T-F; H=int(D/3600); \
+ M=int((D-H*3600)/60); S=D-H*3600-M*60; printf("%02d:%02d:%02d %s\n",H,M,S,$$15); }' \
+ > $(BUILDTIMESDIR)/build_time_diff_$1
+endef
+
+# Indicate that we are done.
+# Record ending time and print out the total time it took to build.
+define MakeFinish
+$(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,$1),)
+$(BUILD_LOG_WRAPPER) $(PRINTF) "%s\n##### %-60.60s #####\n%s\n##### %-60.60s #####\n%s\n\n" \
+"########################################################################" \
+"Leaving $1 for target(s) $2" \
+"########################################################################" \
+$(if $(REPORT_BUILD_TIMES),"Build time `$(CAT) $(BUILDTIMESDIR)/build_time_diff_$1` for target(s) $2","") \
+"########################################################################"
+endef
+
+# Find all build_time_* files and print their contents in a list sorted
+# on the name of the sub repository.
+define ReportBuildTimes
+$(BUILD_LOG_WRAPPER) $(PRINTF) -- "-- Build times ----------\nTarget %s\nStart %s\nEnd %s\n%s\n%s\n-------------------------\n" \
+"$1" \
+"`$(CAT) $(BUILDTIMESDIR)/build_time_start_TOTAL_human_readable`" \
+"`$(CAT) $(BUILDTIMESDIR)/build_time_end_TOTAL_human_readable`" \
+"`$(LS) $(BUILDTIMESDIR)/build_time_diff_* | $(GREP) -v _TOTAL | $(XARGS) $(CAT) | $(SORT) -k 2`" \
+"`$(CAT) $(BUILDTIMESDIR)/build_time_diff_TOTAL`"
+endef
+
+define ResetTimers
+$$(shell $(MKDIR) -p $(BUILDTIMESDIR) && $(RM) $(BUILDTIMESDIR)/build_time_*)
+endef
+
+define StartTimer
+ $(call RecordStartTime,TOTAL)
+endef
+
+define StopTimer
+ $(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,TOTAL) && $(call ReportBuildTimes,$1),)
+endef
+
+# If the variable that you want to send to stdout for piping into a file or otherwise,
+# is potentially long, for example the a list of file paths, eg a list of all package directories.
+# Then you need to use ListPathsSafely, which optimistically splits the output into several shell
+# calls as well as use compression on recurrent file paths segments, to get around the potential
+# command line length problem that exists in cygwin and other shells.
+compress_pre:=$(strip $(shell cat $(SRC_ROOT)/common/makefiles/compress.pre))
+compress_post:=$(strip $(shell cat $(SRC_ROOT)/common/makefiles/compress.post))
+compress_paths=$(compress_pre)\
+$(subst $(SRC_ROOT),X97,\
+$(subst $(OUTPUT_ROOT),X98,\
+$(subst X,X00,\
+$(subst $(SPACE),\n,$(strip $1)))))\
+$(compress_post)
+
+decompress_paths=sed -f $(SRC_ROOT)/common/makefiles/uncompress.sed -e 's|X99|\\n|g' \
+ -e 's|X98|$(OUTPUT_ROOT)|g' -e 's|X97|$(SRC_ROOT)|g' \
+ -e 's|X00|X|g' | tr '\n' '$2'
+
+define ListPathsSafely_If
+ $(if $(word $3,$($1)),$(eval $1_LPS$3:=$(call compress_paths,$(wordlist $3,$4,$($1)))))
+endef
+
+define ListPathsSafely_Printf
+ $(if $(strip $($1_LPS$4)),printf -- "$(strip $($1_LPS$4))\n" | $(decompress_paths) $3)
+endef
+
+# Receipt example:
+# rm -f thepaths
+# $(call ListPathsSafely,THEPATHS,\n, >> thepaths)
+# The \n argument means translate spaces into \n
+# if instead , , (a space) is supplied, then spaces remain spaces.
+define ListPathsSafely
+ $(if $(word 10001,$($1)),$(error Cannot list safely more than 10000 paths. $1 has $(words $($1)) paths!))
+ $(call ListPathsSafely_If,$1,$2,1,250)
+ $(call ListPathsSafely_If,$1,$2,251,500)
+ $(call ListPathsSafely_If,$1,$2,501,750)
+ $(call ListPathsSafely_If,$1,$2,751,1000)
+
+ $(call ListPathsSafely_If,$1,$2,1001,1250)
+ $(call ListPathsSafely_If,$1,$2,1251,1500)
+ $(call ListPathsSafely_If,$1,$2,1501,1750)
+ $(call ListPathsSafely_If,$1,$2,1751,2000)
+
+ $(call ListPathsSafely_If,$1,$2,2001,2250)
+ $(call ListPathsSafely_If,$1,$2,2251,2500)
+ $(call ListPathsSafely_If,$1,$2,2501,2750)
+ $(call ListPathsSafely_If,$1,$2,2751,3000)
+
+ $(call ListPathsSafely_If,$1,$2,3001,3250)
+ $(call ListPathsSafely_If,$1,$2,3251,3500)
+ $(call ListPathsSafely_If,$1,$2,3501,3750)
+ $(call ListPathsSafely_If,$1,$2,3751,4000)
+
+ $(call ListPathsSafely_If,$1,$2,4001,4250)
+ $(call ListPathsSafely_If,$1,$2,4251,4500)
+ $(call ListPathsSafely_If,$1,$2,4501,4750)
+ $(call ListPathsSafely_If,$1,$2,4751,5000)
+
+ $(call ListPathsSafely_If,$1,$2,5001,5250)
+ $(call ListPathsSafely_If,$1,$2,5251,5500)
+ $(call ListPathsSafely_If,$1,$2,5501,5750)
+ $(call ListPathsSafely_If,$1,$2,5751,6000)
+
+ $(call ListPathsSafely_If,$1,$2,6001,6250)
+ $(call ListPathsSafely_If,$1,$2,6251,6500)
+ $(call ListPathsSafely_If,$1,$2,6501,6750)
+ $(call ListPathsSafely_If,$1,$2,6751,7000)
+
+ $(call ListPathsSafely_If,$1,$2,7001,7250)
+ $(call ListPathsSafely_If,$1,$2,7251,7500)
+ $(call ListPathsSafely_If,$1,$2,7501,7750)
+ $(call ListPathsSafely_If,$1,$2,7751,8000)
+
+ $(call ListPathsSafely_If,$1,$2,8001,8250)
+ $(call ListPathsSafely_If,$1,$2,8251,8500)
+ $(call ListPathsSafely_If,$1,$2,8501,8750)
+ $(call ListPathsSafely_If,$1,$2,8751,9000)
+
+ $(call ListPathsSafely_If,$1,$2,9001,9250)
+ $(call ListPathsSafely_If,$1,$2,9251,9500)
+ $(call ListPathsSafely_If,$1,$2,9501,9750)
+ $(call ListPathsSafely_If,$1,$2,9751,10000)
+
+ $(call ListPathsSafely_Printf,$1,$2,$3,1)
+ $(call ListPathsSafely_Printf,$1,$2,$3,251)
+ $(call ListPathsSafely_Printf,$1,$2,$3,501)
+ $(call ListPathsSafely_Printf,$1,$2,$3,751)
+
+ $(call ListPathsSafely_Printf,$1,$2,$3,1001)
+ $(call ListPathsSafely_Printf,$1,$2,$3,1251)
+ $(call ListPathsSafely_Printf,$1,$2,$3,1501)
+ $(call ListPathsSafely_Printf,$1,$2,$3,1751)
+
+ $(call ListPathsSafely_Printf,$1,$2,$3,2001)
+ $(call ListPathsSafely_Printf,$1,$2,$3,2251)
+ $(call ListPathsSafely_Printf,$1,$2,$3,2501)
+ $(call ListPathsSafely_Printf,$1,$2,$3,2751)
+
+ $(call ListPathsSafely_Printf,$1,$2,$3,3001)
+ $(call ListPathsSafely_Printf,$1,$2,$3,3251)
+ $(call ListPathsSafely_Printf,$1,$2,$3,3501)
+ $(call ListPathsSafely_Printf,$1,$2,$3,3751)
+
+ $(call ListPathsSafely_Printf,$1,$2,$3,4001)
+ $(call ListPathsSafely_Printf,$1,$2,$3,4251)
+ $(call ListPathsSafely_Printf,$1,$2,$3,4501)
+ $(call ListPathsSafely_Printf,$1,$2,$3,4751)
+
+ $(call ListPathsSafely_Printf,$1,$2,$3,5001)
+ $(call ListPathsSafely_Printf,$1,$2,$3,5251)
+ $(call ListPathsSafely_Printf,$1,$2,$3,5501)
+ $(call ListPathsSafely_Printf,$1,$2,$3,5751)
+
+ $(call ListPathsSafely_Printf,$1,$2,$3,6001)
+ $(call ListPathsSafely_Printf,$1,$2,$3,6251)
+ $(call ListPathsSafely_Printf,$1,$2,$3,6501)
+ $(call ListPathsSafely_Printf,$1,$2,$3,6751)
+
+ $(call ListPathsSafely_Printf,$1,$2,$3,7001)
+ $(call ListPathsSafely_Printf,$1,$2,$3,7251)
+ $(call ListPathsSafely_Printf,$1,$2,$3,7501)
+ $(call ListPathsSafely_Printf,$1,$2,$3,7751)
+
+ $(call ListPathsSafely_Printf,$1,$2,$3,8001)
+ $(call ListPathsSafely_Printf,$1,$2,$3,8251)
+ $(call ListPathsSafely_Printf,$1,$2,$3,8501)
+ $(call ListPathsSafely_Printf,$1,$2,$3,8751)
+
+ $(call ListPathsSafely_Printf,$1,$2,$3,9001)
+ $(call ListPathsSafely_Printf,$1,$2,$3,9251)
+ $(call ListPathsSafely_Printf,$1,$2,$3,9501)
+ $(call ListPathsSafely_Printf,$1,$2,$3,9751)
+endef
+
+define ListPathsSafelyNow_IfPrintf
+ ifneq (,$$(word $4,$$($1)))
+ $$(eval $1_LPS$4:=$$(call compress_paths,$$(wordlist $4,$5,$$($1))))
+ $$(shell printf -- "$$(strip $$($1_LPS$4))\n" | $(decompress_paths) $3)
+ endif
+endef
+
+# And an non-receipt version:
+define ListPathsSafelyNow
+ ifneq (,$$(word 10001,$$($1)))
+ $$(error Cannot list safely more than 10000 paths. $1 has $$(words $$($1)) paths!)
+ endif
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,1,250)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,251,500)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,501,750)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,751,1000)
+
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,1001,1250)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,1251,1500)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,1501,1750)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,1751,2000)
+
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,2001,2250)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,2251,2500)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,2501,2750)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,2751,3000)
+
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,3001,3250)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,3251,3500)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,3501,3750)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,3751,4000)
+
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,4001,4250)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,4251,4500)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,4501,4750)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,4751,5000)
+
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,5001,5250)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,5251,5500)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,5501,5750)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,5751,6000)
+
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,6001,6250)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,6251,6500)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,6501,6750)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,6751,7000)
+
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,7001,7250)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,7251,7500)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,7501,7750)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,7751,8000)
+
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,8001,8250)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,8251,8500)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,8501,8750)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,8751,9000)
+
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,9001,9250)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,9251,9500)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,9501,9750)
+ $(call ListPathsSafelyNow_IfPrintf,$1,$2,$3,9751,10000)
+
+endef
+
+endif # _MAKEBASE_GMK
diff --git a/common/makefiles/Makefile b/common/makefiles/Makefile
new file mode 100644
index 00000000000..815f3c01c16
--- /dev/null
+++ b/common/makefiles/Makefile
@@ -0,0 +1,176 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# Default to sane output from make.
+# Override with empty string to get insane amount of output.
+# Override with -d to get even more insane amount of debugging output.
+# Override with "-d -p" to get it all.
+VERBOSE=-s
+
+# Find all environment or command line variables that begin with ALT.
+list_alt_overrides_with_origins = $(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var)))))
+list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins)))
+ifneq ($(list_alt_overrides),)
+ $(info You have set the following ALT_ variables:)
+ $(foreach var,$(list_alt_overrides), $(info $(var)=$($(var))))
+ $(error Using ALT_ variables is deprecated! Please clean your environment!)
+endif
+
+# The spec.gmk file contains the variables extracted by the configure script.
+# It is usually set with SPEC=....spec.gmk on the make command line.
+# However if you simply type make from the openjdk source root, it will go looking
+# for a spec file, if only one is found, use it. If more than one is found,
+# complain. If none is found, request the user to run configure!
+SPEC ?= $(wildcard $(CURDIR)/../../build/*/spec.gmk)
+
+ifeq ($(words $(SPEC)),0)
+ $(error You must run configure!)
+endif
+
+ifneq ($(words $(SPEC)),1)
+ ifeq ($(MAKECMDGOALS),all-conf)
+ SPECS:=$(shell echo $(SPEC) | sed -e 's|$(CURDIR)/build/||g' -e 's|/spec.gmk|\\n|g' -e 's| ||g')
+ allconf:
+ @echo Building configurations:
+ @printf "$(SPECS)"
+ @$(foreach s,$(SPEC),($(MAKE) SPEC=$s $(VERBOSE) VERBOSE=$(VERBOSE) images) &&) true
+ @echo Done building configurations:
+ @printf "$(SPECS)"
+ .PHONY: all-conf
+ else
+ $(error Since you have more than one output dir configured under build, \
+ you have to either run make from the output dir of your choice \
+ or specify run "make SPEC=build/.../spec.gmk" or run all the build configurations \
+ using "make all-conf")
+ endif
+else
+
+# Now load the spec
+-include $(SPEC)
+
+# Load the vital tools for all the makefiles.
+-include $(SRC_ROOT)/common/makefiles/MakeBase.gmk
+
+# Remove any build.log from a previous run
+ifneq (,$(BUILD_LOG))
+ $(shell $(RM) $(BUILD_LOG))
+endif
+
+# Remove any javac server logs and port files. This
+# prevents a new make run to reuse the previous servers.
+ifneq (,$(JAVAC_SERVERS))
+ $(shell mkdir -p $(JAVAC_SERVERS) && rm -rf $(JAVAC_SERVERS)/*)
+endif
+# Reset the build timers.
+$(eval $(call ResetTimers))
+# Clean out any notifications from the previous build.
+$(shell find $(OUTPUT_ROOT) -name "_the.*.notify" $(FIND_DELETE))
+
+all: jdk
+ @$(call StopTimer)
+ @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port)
+
+langtools: start-timer
+ @$(call MakeStart,langtools,all)
+ @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(LANGTOOLS_MAKE_ARGS))
+ @$(call MakeFinish,langtools,all)
+
+corba: langtools
+ @$(call MakeStart,corba,all)
+ @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(CORBA_MAKE_ARGS))
+ @$(call MakeFinish,corba,all)
+
+jaxp: langtools
+ @$(call MakeStart,jaxp,all)
+ @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(CORBA_MAKE_ARGS))
+ @$(call MakeFinish,jaxp,all)
+
+jaxws: langtools jaxp
+ @$(call MakeStart,jaxws,all)
+ @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(CORBA_MAKE_ARGS))
+ @$(call MakeFinish,jaxws,all)
+
+hotspot: langtools
+ @$(call MakeStart,hotspot,all)
+ @($(CD) $(HOTSPOT_TOPDIR)/make && $(BUILD_LOG_WRAPPER) $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS))
+ @$(call MakeFinish,hotspot,all)
+
+jdk: langtools corba jaxp jaxws hotspot
+ @$(call MakeStart,jdk,all)
+ @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(JDK_MAKE_ARGS))
+ @$(call MakeFinish,jdk,all)
+
+images install packages: start-timer jdk langtools corba jaxp jaxws hotspot
+ @$(call MakeStart,jdk-images,$@)
+ @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) -j$(NUM_CORES) $(JDK_MAKE_ARGS) $@)
+ @$(call MakeFinish,jdk-images,$@)
+ @$(call StopTimer)
+ @$(if $(JAVAC_SERVERS),rm -rf $(JAVAC_SERVERS)/*.port)
+
+start-timer:
+ @$(call StartTimer)
+
+.PHONY: jdk hotspot jaxws jaxp corba langtools install images packages start-timer
+
+# Remove everything, except the output from configure.
+clean:
+ @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | grep -v "localdevenv.*" | grep -v uncygdrive.exe`)
+ @$(ECHO) Cleaned everything except the build configuration.
+.PHONY: clean
+
+# Remove everything, you have to rerun configure.
+dist-clean:
+ @$(RM) -r $(OUTPUT_ROOT)
+ @$(ECHO) Cleaned everything, you will have to re-run configure.
+.PHONY: dist-clean
+
+clean-jdk:
+ @(cd $(OUTPUT_ROOT) && $(RM) -r `$(LS) $(OUTPUT_ROOT) | grep -v spec.gmk | grep -v Makefile | grep -v config.status | grep -v config.log | grep -v config.h | grep -v configure-arguments | \
+ grep -v langtools | grep -v corba | grep -v jaxp | grep -v jaxws | grep -v hotspot`)
+ @$(ECHO) "Cleaned jdk build artifacts (but not langtools,corba,jaxp,jaxws,hotspot nor the build configuration)"
+.PHONY: clean
+
+help:
+ $(info )
+ $(info Typical make commands:)
+ $(info make)
+ $(info make VERBOSE= # print all commands)
+ $(info make VERBOSE="-d -p" # debug make as well)
+ $(info make all-conf # build images for all configurations)
+ $(info make clean # remove build artifacts)
+ $(info make dist-clean # you have to rerun configure)
+# $(info make test # run tests)
+ $(info make images # create the jdk and jre images)
+ $(info make install # install the jdk image)
+# $(info make modules # EXPERIMENTAL: Migrate JDK into a modularized form!)
+ $(info make packages # create zips and other packages)
+
+# $(info make eclipse_workspace # Create an Eclipse workspace)
+# $(info make netbeans_workspace # Create a NetBeans workspace)
+# $(info make vs_workspace # Create a Visual Studio workspace)
+
+.PHONY: help
+
+endif
diff --git a/common/makefiles/NativeCompilation.gmk b/common/makefiles/NativeCompilation.gmk
new file mode 100644
index 00000000000..eedffe72d5b
--- /dev/null
+++ b/common/makefiles/NativeCompilation.gmk
@@ -0,0 +1,277 @@
+#
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# When you read this source. Remember that $(sort ...) has the side effect
+# of removing duplicates. It is actually this side effect that is
+# desired whenever sort is used below!
+
+ifeq (,$(_MAKEBASE_GMK))
+ $(error You must include MakeBase.gmk prior to including JavaCompilation.gmk)
+endif
+
+ifeq ($(COMPILER_TYPE),CC)
+ COMPILING_MSG=echo Compiling $1
+ LINKING_MSG=echo Linking $1
+ LINKING_EXE_MSG=echo Linking executable $1
+ ARCHIVING_MSG=echo Archiving $1
+else
+ COMPILING_MSG=
+ LINKING_MSG=
+ LINKING_EXE_MSG=
+ ARCHIVING_MSG=
+endif
+
+define add_native_source
+ # param 1 = BUILD_MYPACKAGE
+ # parma 2 = the source file name (..../alfa.c or .../beta.cpp)
+ # param 3 = the bin dir that stores all .o (.obj) and .d files.
+ # param 4 = the c flags to the compiler
+ # param 5 = the c compiler
+ # param 6 = the c++ flags to the compiler
+ # param 7 = the c++ compiler
+
+ ifneq (,$$(filter %.c,$2))
+ # Compile as a C file
+ $1_$2_FLAGS=$4
+ $1_$2_COMP=$5
+ else
+ # Compile as a C++ file
+ $1_$2_FLAGS=$6
+ $1_$2_COMP=$7
+ endif
+ # Generate the .o (.obj) file name and place it in the bin dir.
+ $1_$2_OBJ:=$3/$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(notdir $2)))
+ # Only continue if this object file hasn't been processed already. This lets the first found
+ # source file override any other with the same name.
+ ifeq (,$$(findstring $$($1_$2_OBJ),$$($1_OBJS_SO_FAR)))
+ $1_OBJS_SO_FAR+=$$($1_$2_OBJ)
+ # And this is the dependency file for this obj file.
+ $1_$2_DEP:=$$(patsubst %$(OBJ_SUFFIX),%.d,$$($1_$2_OBJ))
+ # Include previously generated dependency information. (if it exists)
+ -include $$($1_$2_DEP)
+
+ ifeq ($(COMPILER_TYPE),CL)
+ $1_$2_DEBUG_OUT_FLAGS:=-Fd$$(patsubst %$(OBJ_SUFFIX),%.pdb,$$($1_$2_OBJ)) \
+ -Fm$$(patsubst %$(OBJ_SUFFIX),%.map,$$($1_$2_OBJ))
+ endif
+
+ $$($1_$2_OBJ) : $2
+ ifeq ($(COMPILER_TYPE),CC)
+ $$(call COMPILING_MSG,$$(notdir $2))
+ $$($1_$2_COMP) $$($1_$2_FLAGS) -MMD -MF $$($1_$2_DEP) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
+ endif
+ ifeq ($(COMPILER_TYPE),CL)
+ $$(call COMPILING_MSG,$$(notdir $2))
+ $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEBUG_OUT_FLAGS) -c $(CC_OUT_OPTION)$$($1_$2_OBJ) $2
+ endif
+ endif
+endef
+
+define SetupNativeCompilation
+ # param 1 is for example BUILD_MYPACKAGE
+ # param 2,3,4,5,6,7,8 are named args.
+ # SRC one or more directory roots to scan for C/C++ files.
+ # LANG C or C++
+ # CFLAGS the compiler flags to be used, used both for C and C++.
+ # CXXFLAGS the compiler flags to be used for c++, if set overrides CFLAGS.
+ # LDFLAGS the linker flags to be used, used both for C and C++.
+ # LDFLAGS_SUFFIX the linker flags to be added last on the commandline
+ # typically the libraries linked to.
+ # ARFLAGS the archiver flags to be used
+ # BIN the directory where we store the object files
+ # LIB the resulting library file
+ # EXE the resulting exec file
+ # INCLUDES only pick source from these directories
+ # EXCLUDES do not pick source from these directories
+ # INCLUDE_FILES only compile exactly these files!
+ # EXCLUDE_FILES with these names
+ # VERSIONINFO_RESOURCE Input file for RC. Setting this implies that RC will be run
+ # RC_FLAGS flags for RC.
+ $(if $2,$1_$(strip $2))
+ $(if $3,$1_$(strip $3))
+ $(if $4,$1_$(strip $4))
+ $(if $5,$1_$(strip $5))
+ $(if $6,$1_$(strip $6))
+ $(if $7,$1_$(strip $7))
+ $(if $8,$1_$(strip $8))
+ $(if $9,$1_$(strip $9))
+ $(if $(10),$1_$(strip $(10)))
+ $(if $(11),$1_$(strip $(11)))
+ $(if $(12),$1_$(strip $(12)))
+ $(if $(13),$1_$(strip $(13)))
+ $(if $(14),$1_$(strip $(14)))
+ $(if $(15),$1_$(strip $(15)))
+ $(if $(16),$1_$(strip $(16)))
+ $(if $(17),$1_$(strip $(17)))
+ $(if $(18),$1_$(strip $(18)))
+ $(if $(19),$1_$(strip $(19)))
+ $(if $(20),$1_$(strip $(20)))
+
+ ifeq (,$$($1_LANG))
+ $$(error You have to specify LANG for native compilation $1)
+ endif
+ ifeq (C,$$($1_LANG))
+ $1_LD:=$(LD)
+ $1_LDEXE:=$(LDEXE)
+ else
+ ifeq (C++,$$($1_LANG))
+ $1_LD:=$(LDCXX)
+ $1_LDEXE:=$(LDEXECXX)
+ else
+ $$(error Unknown native language $$($1_LANG) for $1)
+ endif
+ endif
+
+ # Make sure the dirs exist.
+ $$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN) $$(dir $$($1_LIB)) $$(dir $$($1_EXE)))
+ # Find all files in the source trees. Sort to remove duplicates.
+ $1_ALL_SRCS := $$(sort $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f)))
+ # Extract the C/C++ files.
+ $1_EXCLUDE_FILES:=$$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_EXCLUDE_FILES)))
+ $1_INCLUDE_FILES:=$$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_INCLUDE_FILES)))
+ ifneq ($$($1_EXCLUDE_FILES),)
+ $1_EXCLUDE_FILES:=$$(addprefix %,$$($1_EXCLUDE_FILES))
+ endif
+ $1_SRCS := $$(filter-out $$($1_EXCLUDE_FILES),$$(filter %.c %.cpp,$$($1_ALL_SRCS)))
+ ifneq (,$$(strip $$($1_INCLUDE_FILES)))
+ $1_SRCS := $$(filter $$($1_INCLUDE_FILES),$$($1_SRCS))
+ endif
+ ifeq (,$$($1_SRCS))
+ $$(error No sources found for $1 when looking inside the dirs $$($1_SRC))
+ endif
+ # There can be only a single bin dir root, no need to foreach over the roots.
+ $1_BINS := $$(wildcard $$($1_BIN)/*$(OBJ_SUFFIX))
+ # Now we have a list of all c/c++ files to compile: $$($1_SRCS)
+ # and we have a list of all existing object files: $$($1_BINS)
+
+ # Prepend the source/bin path to the filter expressions. Then do the filtering.
+ ifneq ($$($1_INCLUDES),)
+ $1_SRC_INCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_INCLUDES))))
+ $1_SRCS := $$(filter $$($1_SRC_INCLUDES),$$($1_SRCS))
+ endif
+ ifneq ($$($1_EXCLUDES),)
+ $1_SRC_EXCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_EXCLUDES))))
+ $1_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRCS))
+ endif
+
+ # Calculate the expected output from compiling the sources (sort to remove duplicates. Also provides
+ # a reproducable order on the input files to the linker).
+ $1_EXPECTED_OBJS:=$$(sort $$(addprefix $$($1_BIN)/,$$(patsubst %.cpp,%$(OBJ_SUFFIX),$$(patsubst %.c,%$(OBJ_SUFFIX),$$(notdir $$($1_SRCS))))))
+ $1 := $$($1_EXPECTED_OBJS)
+ # Are there too many object files on disk? Perhaps because some source file was removed?
+ $1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS)))
+ # Clean out the superfluous object files.
+ $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS))
+
+ # Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CFLAGS.
+ $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(HOST_OS_API)) $$($1_CFLAGS_$(PLATFORM))
+ ifneq ($(DEBUG_LEVEL),release)
+ # Pickup extra debug dependent variables for CFLAGS
+ $1_EXTRA_CFLAGS+=$$($1_CFLAGS_debug)
+ $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_debug)
+ $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_debug)
+ else
+ $1_EXTRA_CFLAGS+=$$($1_CFLAGS_release)
+ $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(HOST_OS_API)_release)
+ $1_EXTRA_CFLAGS+=$$($1_CFLAGS_$(PLATFORM)_release)
+ endif
+
+ # Pickup extra HOST_OS_API and/or PLATFORM dependent variables for CXXFLAGS.
+ $1_EXTRA_CXXFLAGS:=$$($1_CXXFLAGS_$(HOST_OS_API)) $$($1_CXXFLAGS_$(PLATFORM))
+ ifneq ($(DEBUG_LEVEL),release)
+ # Pickup extra debug dependent variables for CXXFLAGS
+ $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_debug)
+ $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_debug)
+ $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_debug)
+ else
+ $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_release)
+ $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(HOST_OS_API)_release)
+ $1_EXTRA_CXXFLAGS+=$$($1_CXXFLAGS_$(PLATFORM)_release)
+ endif
+
+ ifeq ($$($1_CXXFLAGS),)
+ $1_CXXFLAGS:=$$($1_CFLAGS)
+ endif
+ ifeq ($$(strip $$($1_EXTRA_CXXFLAGS)),)
+ $1_EXTRA_CXXFLAGS:=$$($1_EXTRA_CFLAGS)
+ endif
+
+ # Now create a list of the packages that are about to compile. Used when sending source
+ # in a batch to the compiler.
+ $$(shell $(RM) $$($1_BIN)/_the.list_of_sources)
+ $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_BIN)/_the.list_of_sources))
+
+ # Now call add_native_source for each source file we are going to compile.
+ $$(foreach p,$$($1_SRCS),\
+ $$(eval $$(call add_native_source,$1,$$p,$$($1_BIN),\
+ $$($1_CFLAGS) $$($1_EXTRA_CFLAGS),$(CC),\
+ $$($1_CXXFLAGS) $$($1_EXTRA_CXXFLAGS),$(CXX))))
+
+ # On windows we need to create a resource file
+ ifeq ($(HOST_OS_API), winapi)
+ ifneq (,$$($1_VERSIONINFO_RESOURCE))
+ ifneq (,$$($1_LIB))
+ ifeq (dynamic,$$(patsubst %$(SHARED_LIBRARY_SUFFIX),dynamic,$$($1_LIB)))
+ $1_RES:=$$(patsubst %$(SHARED_LIBRARY_SUFFIX),%.res,$$($1_LIB))
+ else
+ $1_RES:=$$(patsubst %$(STATIC_LIBRARY_SUFFIX),%.res,$$($1_LIB))
+ endif
+ endif
+ ifneq (,$$($1_EXE))
+ $1_RES:=$$(patsubst %$(EXE_SUFFIX),%.res,$$($1_EXE))
+ endif
+ $$($1_RES): $$($1_VERSIONINFO_RESOURCE)
+ $(RC) $$($1_RC_FLAGS) $(CC_OUT_OPTION)$$@ $$($1_VERSIONINFO_RESOURCE)
+ endif
+ endif
+
+ # Pickup extra HOST_OS_API dependent variables (posix or winapi) and
+ # (linux,solaris,windows,bsd) for LDFLAGS and LDFLAGS_SUFFIX
+ $1_EXTRA_LDFLAGS:=$$($1_LDFLAGS_$(HOST_OS_API)) $$($1_LDFLAGS_$(PLATFORM))
+ $1_EXTRA_LDFLAGS_SUFFIX:=$$($1_LDFLAGS_SUFFIX_$(HOST_OS_API)) $$($1_LDFLAGS_SUFFIX_$(PLATFORM))
+ ifneq (,$$($1_LIB))
+ ifeq (dynamic,$$(patsubst %$(SHARED_LIBRARY_SUFFIX),dynamic,$$($1_LIB)))
+ # Generating a dynamic library.
+ $1_EXTRA_LDFLAGS+=$$(call SET_SHARED_LIBRARY_NAME,$$(notdir $$($1_LIB)))
+ $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES)
+ $$(call LINKING_MSG,$$(notdir $$($1_LIB)))
+ $$($1_LD) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(LD_OUT_OPTION)$$($1_LIB) \
+ $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX)
+ else
+ # Generating a static library, ie object file archive.
+ $$($1_LIB) : $$($1_EXPECTED_OBJS) $$($1_RES)
+ $$(call ARCHIVING_MSG,$$(notdir $$($1_LIB)))
+ $(AR) $$($1_AR_FLAGS) $(AR_OUT_OPTION)$$($1_LIB) $$($1_EXPECTED_OBJS) \
+ $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX)
+ endif
+ endif
+ ifneq (,$$($1_EXE))
+ # A executable binary has been specified, setup the target for it.
+ $$($1_EXE) : $$($1_EXPECTED_OBJS) $$($1_RES)
+ $$(call LINKING_EXE_MSG,$$(notdir $$($1_EXE)))
+ $$($1_LDEXE) $$($1_LDFLAGS) $$($1_EXTRA_LDFLAGS) $(EXE_OUT_OPTION)$$($1_EXE) \
+ $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) $$($1_EXTRA_LDFLAGS_SUFFIX)
+ endif
+endef
diff --git a/common/makefiles/RMICompile.gmk b/common/makefiles/RMICompile.gmk
new file mode 100644
index 00000000000..b6168dae7be
--- /dev/null
+++ b/common/makefiles/RMICompile.gmk
@@ -0,0 +1,103 @@
+#
+# Copyright (c) 2011, 2012 Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+define SetupRMICompilation
+ # param 1 is a name for a variable to depend on.
+ # param 2 and up are named args.
+ # CLASSES:=List of classes to generate stubs for
+ # CLASSES_DIR:=Directory where to look for classes
+ # STUB_CLASSES_DIR:=Directory in where to put stub classes
+ # RUN_V11:=Set to run rmic with -v1.1
+ # RUN_V12:=Set to run rmic with -v1.2
+ # RUN_IIOP:=Set to run rmic with -iiop
+ # RUN_IIOP_STDPKG:=Set to run rmic with -iiop -standardPackage
+ # KEEP_GENERATED:=Set to keep generated sources around
+ $(if $2,$1_$(strip $2))
+ $(if $3,$1_$(strip $3))
+ $(if $4,$1_$(strip $4))
+ $(if $5,$1_$(strip $5))
+ $(if $6,$1_$(strip $6))
+ $(if $7,$1_$(strip $7))
+ $(if $8,$1_$(strip $8))
+ $(if $9,$1_$(strip $9))
+
+
+ $1_DEP_FILE := $$($1_STUB_CLASSES_DIR)/$1_rmic
+
+ $1_CLASSES_SLASH := $$(subst .,/,$$($1_CLASSES))
+ $1_CLASS_FILES := $$(addprefix $$($1_CLASSES_DIR)/,$$(addsuffix .class,$$($1_CLASSES_SLASH)))
+ $1_STUB_FILES := $$(addprefix $$($1_STUB_CLASSES_DIR)/,$$(addsuffix _Stub.class,$$($1_CLASSES_SLASH)))
+ $1_TARGETS := $$($1_STUB_FILES)
+ $1_ARGS :=
+ ifneq (,$$($1_RUN_V11))
+ $1_SKEL_FILES := $$(addprefix $$($1_STUB_CLASSES_DIR)/,$$(addsuffix _Skel.class,$$($1_CLASSES_SLASH)))
+ $1_TARGETS += $$($1_SKEL_FILES)
+ $1_ARGS += -v1.1
+ endif
+ ifneq (,$$($1_RUN_V12))
+ $1_ARGS += -v1.2
+ endif
+
+ $1_TIE_BASE_FILES := $$(foreach f,$$($1_CLASSES_SLASH),$$(dir $$f)_$$(notdir $$f))
+ $1_TIE_FILES := $$(addprefix $$($1_STUB_CLASSES_DIR)/org/omg/stub/,$$(addsuffix _Tie.class,$$($1_TIE_BASE_FILES)))
+ $1_TIE_STDPKG_FILES := $$(addprefix $$($1_STUB_CLASSES_DIR)/,$$(addsuffix _Tie.class,$$($1_TIE_BASE_FILES)))
+
+ ifneq (,$$($1_RUN_IIOP))
+ $1_TARGETS += $$($1_TIE_FILES)
+ $1_ARGS += -iiop
+ endif
+ ifneq (,$$($1_RUN_IIOP_STDPKG))
+ $1_TARGETS += $$($1_TIE_STDPKG_FILES)
+ $1_ARGS2 := -iiop -standardPackage
+ endif
+
+ ifneq (,$$($1_KEEP_GENERATED))
+ $1_ARGS += -keepgenerated
+ $1_TARGETS += $$(subst .class,.java,$$($1_TARGETS))
+ endif
+
+ $1_DOLLAR_SAFE_CLASSES := $$(subst $$$$,\$$$$,$$($1_CLASSES))
+
+ $$($1_TARGETS): $$($1_DEP_FILE) $$($1_CLASS_FILES)
+
+ $$($1_DEP_FILE): $$($1_CLASS_FILES)
+ $(MKDIR) -p $$($1_STUB_CLASSES_DIR)
+ if [ "x$$($1_ARGS)" != "x" ]; then \
+ $(ECHO) Running rmic $$($1_ARGS) for $$($1_DOLLAR_SAFE_CLASSES) &&\
+ $(RMIC) $$($1_ARGS) -classpath "$$($1_CLASSES_DIR)" \
+ -d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES);\
+ fi;
+ if [ "x$$($1_ARGS2)" != "x" ]; then \
+ $(ECHO) Running rmic $$($1_ARGS2) for $$($1_DOLLAR_SAFE_CLASSES) &&\
+ $(RMIC) $$($1_ARGS2) -classpath "$$($1_CLASSES_DIR)" \
+ -d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES);\
+ fi;
+
+
+ $1 := $$($1_TARGETS)
+
+ # By marking as secondary, this "touch" file doesn't need to be touched and will never exist.
+ .SECONDARY: $$($1_DEP_FILE)
+endef
diff --git a/common/makefiles/compress.post b/common/makefiles/compress.post
new file mode 100644
index 00000000000..06b44c43461
--- /dev/null
+++ b/common/makefiles/compress.post
@@ -0,0 +1 @@
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
\ No newline at end of file
diff --git a/common/makefiles/compress.pre b/common/makefiles/compress.pre
new file mode 100644
index 00000000000..ff41134e1e2
--- /dev/null
+++ b/common/makefiles/compress.pre
@@ -0,0 +1 @@
+$(subst com,X01,$(subst org,X02,$(subst sun,X03,$(subst java,X04,$(subst javax,X05,$(subst sun/io,X06,$(subst com/sun,X07,$(subst java/io,X08,$(subst org/omg,X09,$(subst org/w3c,X10,$(subst org/xml,X11,$(subst sun/awt,X12,$(subst sun/net,X13,$(subst sun/nio,X14,$(subst sun/rmi,X15,$(subst java/awt,X16,$(subst java/net,X17,$(subst java/nio,X18,$(subst java/rmi,X19,$(subst META-INF,X20,$(subst sun/font,X21,$(subst sun/misc,X22,$(subst sun/text,X23,$(subst sun/util,X24,$(subst java/lang,X25,$(subst java/math,X26,$(subst java/text,X27,$(subst java/util,X28,$(subst javax/jws,X29,$(subst javax/net,X30,$(subst javax/rmi,X31,$(subst javax/xml,X32,$(subst sun/corba,X33,$(subst sun/print,X34,$(subst sun/swing,X35,$(subst java/beans,X36,$(subst javax/lang,X37,$(subst sun/applet,X38,$(subst sun/java2d,X39,$(subst java/applet,X40,$(subst javax/print,X41,$(subst javax/sound,X42,$(subst javax/swing,X43,$(subst javax/tools,X44,$(subst jdk/classes,X45,$(subst org/relaxng,X46,$(subst sun/reflect,X47,$(subst javax/crypto,X48,$(subst javax/naming,X49,$(subst jaxp/classes,X50,$(subst sun/security,X51,$(subst corba/classes,X52,$(subst java/security,X53,$(subst javax/imageio,X54,$(subst jdk/btclasses,X55,$(subst javax/activity,X56,$(subst javax/security,X57,$(subst jdk/newclasses,X58,$(subst sun/instrument,X59,$(subst sun/management,X60,$(subst corba/btclasses,X61,$(subst jdk/democlasses,X62,$(subst javax/activation,X63,$(subst javax/annotation,X64,$(subst javax/management,X65,$(subst javax/transaction,X66,$(subst jaxws/jaf_classes,X67,$(subst langtools/classes,X68,$(subst META-INF/services,X69,$(subst jdk/newdemoclasses,X70,$(subst javax/accessibility,X71,$(subst jaxws/jaxws_classes,X72,
\ No newline at end of file
diff --git a/common/makefiles/uncompress.sed b/common/makefiles/uncompress.sed
new file mode 100644
index 00000000000..cd6966ce555
--- /dev/null
+++ b/common/makefiles/uncompress.sed
@@ -0,0 +1,72 @@
+s|X01|com|g
+s|X02|org|g
+s|X03|sun|g
+s|X04|java|g
+s|X05|javax|g
+s|X06|sun/io|g
+s|X07|com/sun|g
+s|X08|java/io|g
+s|X09|org/omg|g
+s|X10|org/w3c|g
+s|X11|org/xml|g
+s|X12|sun/awt|g
+s|X13|sun/net|g
+s|X14|sun/nio|g
+s|X15|sun/rmi|g
+s|X16|java/awt|g
+s|X17|java/net|g
+s|X18|java/nio|g
+s|X19|java/rmi|g
+s|X20|META-INF|g
+s|X21|sun/font|g
+s|X22|sun/misc|g
+s|X23|sun/text|g
+s|X24|sun/util|g
+s|X25|java/lang|g
+s|X26|java/math|g
+s|X27|java/text|g
+s|X28|java/util|g
+s|X29|javax/jws|g
+s|X30|javax/net|g
+s|X31|javax/rmi|g
+s|X32|javax/xml|g
+s|X33|sun/corba|g
+s|X34|sun/print|g
+s|X35|sun/swing|g
+s|X36|java/beans|g
+s|X37|javax/lang|g
+s|X38|sun/applet|g
+s|X39|sun/java2d|g
+s|X40|java/applet|g
+s|X41|javax/print|g
+s|X42|javax/sound|g
+s|X43|javax/swing|g
+s|X44|javax/tools|g
+s|X45|jdk/classes|g
+s|X46|org/relaxng|g
+s|X47|sun/reflect|g
+s|X48|javax/crypto|g
+s|X49|javax/naming|g
+s|X50|jaxp/classes|g
+s|X51|sun/security|g
+s|X52|corba/classes|g
+s|X53|java/security|g
+s|X54|javax/imageio|g
+s|X55|jdk/btclasses|g
+s|X56|javax/activity|g
+s|X57|javax/security|g
+s|X58|jdk/newclasses|g
+s|X59|sun/instrument|g
+s|X60|sun/management|g
+s|X61|corba/btclasses|g
+s|X62|jdk/democlasses|g
+s|X63|javax/activation|g
+s|X64|javax/annotation|g
+s|X65|javax/management|g
+s|X66|javax/transaction|g
+s|X67|jaxws/jaf_classes|g
+s|X68|langtools/classes|g
+s|X69|META-INF/services|g
+s|X70|jdk/newdemoclasses|g
+s|X71|javax/accessibility|g
+s|X72|jaxws/jaxws_classes|g
diff --git a/common/src/uncygdrive.c b/common/src/uncygdrive.c
new file mode 100644
index 00000000000..438e21434b9
--- /dev/null
+++ b/common/src/uncygdrive.c
@@ -0,0 +1,254 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#include
+#include
+#include
+#include
+#include
+
+/*
+ * Test if pos points to /cygdrive/_/ where _ can
+ * be any character.
+ */
+int is_cygdrive_here(int pos, char *in, int len)
+{
+ // Length of /cygdrive/c/ is 12
+ if (pos+12 > len) return 0;
+ if (in[pos+11]=='/' &&
+ in[pos+9]=='/' &&
+ in[pos+8]=='e' &&
+ in[pos+7]=='v' &&
+ in[pos+6]=='i' &&
+ in[pos+5]=='r' &&
+ in[pos+4]=='d' &&
+ in[pos+3]=='g' &&
+ in[pos+2]=='y' &&
+ in[pos+1]=='c' &&
+ in[pos+0]=='/') {
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * Replace /cygdrive/_/ with _:/
+ * Works in place since drive letter is always
+ * shorter than /cygdrive/
+ */
+char *replace_cygdrive(char *in)
+{
+ int len = strlen(in);
+ char *out = malloc(len+1);
+ int i,j;
+
+ if (len < 12) {
+ strcpy(out, in);
+ return out;
+ }
+ for (i = 0, j = 0; i *bl) {
+ *bl *= 2;
+ *b = realloc(*b, *bl);
+ }
+ memcpy(*b+*u, add, addlen);
+ *u += addlen;
+}
+
+/*
+ * Creates a new string from in where the first occurance of sub is
+ * replaced by rep.
+ */
+char *replace_substring(char *in, char *sub, char *rep)
+{
+ int in_len = strlen(in);
+ int sub_len = strlen(sub);
+ int rep_len = strlen(rep);
+ char *out = malloc(in_len - sub_len + rep_len + 1);
+ char *p;
+
+ if (!(p = strstr(in, sub))) {
+ // If sub isn't a substring of in, just return in.
+ return in;
+ }
+
+ // Copy characters from beginning of in to start of sub.
+ strncpy(out, in, p - in);
+ out[p - in] = '\0';
+
+ sprintf(out + (p - in), "%s%s", rep, p + sub_len);
+
+ return out;
+}
+
+char *files_to_delete[1024];
+int num_files_to_delete = 0;
+
+char *fix_at_file(char *in)
+{
+ char *tmpdir;
+ char name[2048];
+ char *atname;
+ char *buffer;
+ size_t buflen=65536;
+ size_t used=0;
+ size_t len;
+ int rc;
+ FILE *atout;
+ FILE *atin;
+ char block[2048];
+ size_t blocklen;
+ char *fixed;
+
+ atin = fopen(in+1, "r");
+ if (atin == NULL) {
+ fprintf(stderr, "Could not read at file %s\n", in+1);
+ exit(-1);
+ }
+
+ tmpdir = getenv("TMP");
+ if (tmpdir == NULL) {
+ tmpdir = "c:/cygwin/tmp";
+ }
+ _snprintf(name, sizeof(name), "%s\\atfile_XXXXXX", tmpdir);
+
+ rc = _mktemp_s(name, strlen(name)+1);
+ if (rc) {
+ fprintf(stderr, "Could not create temporary file name for at file!\n");
+ exit(-1);
+ }
+
+ atout = fopen(name, "w");
+ if (atout == NULL) {
+ fprintf(stderr, "Could open temporary file for writing! %s\n", name);
+ exit(-1);
+ }
+
+ buffer = malloc(buflen);
+ while((blocklen = fread(block,1,sizeof(block),atin)) > 0) {
+ append(&buffer, &buflen, &used, block, blocklen);
+ }
+ buffer[used] = 0;
+ fixed = replace_cygdrive(buffer);
+ fwrite(fixed, strlen(fixed), 1, atout);
+ fclose(atin);
+ fclose(atout);
+ free(fixed);
+ free(buffer);
+ files_to_delete[num_files_to_delete] = malloc(strlen(name)+1);
+ strcpy(files_to_delete[num_files_to_delete], name);
+ num_files_to_delete++;
+ atname = malloc(strlen(name)+2);
+ atname[0] = '@';
+ strcpy(atname+1, name);
+ return atname;
+}
+
+int main(int argc, char **argv)
+{
+ STARTUPINFO si;
+ PROCESS_INFORMATION pi;
+ unsigned short rc;
+
+ char *new_at_file;
+ char *old_at_file;
+ char *line;
+ int i;
+ DWORD exitCode;
+
+ if (argc<2) {
+ fprintf(stderr, "Usage: uncygdrive.exe /cygdrive/c/WINDOWS/notepad.exe /cygdrive/c/x/test.txt");
+ exit(0);
+ }
+
+ line = replace_cygdrive(strstr(GetCommandLine(), argv[1]));
+
+ for (i=1; i%s<\n", line);
+ }
+
+ ZeroMemory(&si,sizeof(si));
+ si.cb=sizeof(si);
+ ZeroMemory(&pi,sizeof(pi));
+
+ rc = CreateProcess(NULL,
+ line,
+ 0,
+ 0,
+ TRUE,
+ 0,
+ 0,
+ 0,
+ &si,
+ &pi);
+ if(!rc)
+ {
+ //Could not start process;
+ fprintf(stderr, "Could not start process!\n");
+ exit(-1);
+ }
+
+ WaitForSingleObject(pi.hProcess,INFINITE);
+ GetExitCodeProcess(pi.hProcess,&exitCode);
+
+ if (getenv("DEBUG_UNCYGDRIVE") != NULL) {
+ for (i=0; i $@
+
+# The resources files are generated from lisp-like .mc files.
+$(CORBA_OUTPUTDIR)/logwrappers/%SystemException.resource : $(CORBA_TOPDIR)/src/share/classes/com/sun/corba/se/spi/logging/data/%.mc $(CORBA_OUTPUTDIR)/btjars/logutil.jar
+ mkdir -p $(@D)
+ rm -f $(@D)/_the_wrappers.d
+ echo Generating resource file from $*.mc
+ $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/logutil.jar make-resource $< $(@D)
+
+
+$(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d : $(CORBA_OUTPUTDIR)/btjars/logutil.jar \
+ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/ActivationSystemException.java \
+ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/IORSystemException.java \
+ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/InterceptorsSystemException.java \
+ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/NamingSystemException.java \
+ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/OMGSystemException.java \
+ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/ORBUtilSystemException.java \
+ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/POASystemException.java \
+ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/UtilSystemException.java \
+ $(CORBA_OUTPUTDIR)/logwrappers/com/sun/corba/se/impl/logging/LogStrings.properties
+ mkdir -p $(@D)
+ echo LOGWRAPPERS_ARE_CREATED=yes > $@
+
+# Trigger the generation of the logwrappers. After the logwrapper classes and
+# resources have been created, then the makefile will restart and the newly
+# created java files will become part of the build further along in the makefile.
+-include $(CORBA_OUTPUTDIR)/logwrappers/_the_wrappers.d
+
+ifeq ($(LOGWRAPPERS_ARE_CREATED),yes)
+ $(eval $(call SetupIdlCompilation,BUILD_IDLS,\
+ IDLJ:=$(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/idlj.jar,\
+ SRC:=$(CORBA_TOPDIR)/src/share/classes,\
+ BIN:=$(CORBA_OUTPUTDIR)/gensrc,\
+ EXCLUDES:=com/sun/tools/corba/se/idl/% \
+ org/omg/CORBA/% \
+ com/sun/corba/se/GiopIDL/% \
+ org/omg/PortableServer/corba.idl,\
+ INCLUDES:=%,\
+ OLDIMPLBASES:=com/sun/corba/se/PortableActivationIDL/activation.idl \
+ com/sun/corba/se/spi/activation/activation.idl,\
+ DELETES:=DYNANYDELETEFILES org/omg/DynamicAny/*POA* org/omg/DynamicAny/*Holder* org/omg/DynamicAny/DynValueBoxHelper.java org/omg/DynamicAny/DynValueCommonHelper.java org/omg/DynamicAny/_DynValueCommonStub.java org/omg/DynamicAny/_DynValueBoxStub.java org/omg/DynamicAny/DynAnyPackage/TypeMismatchHolder.java org/omg/DynamicAny/DynAnyPackage/InvalidValueHolder.java org/omg/DynamicAny/DynAnyFactoryPackage/InconsistentTypeCodeHolder.java IOPDELETEFILES org/omg/IOP/BI_DIR_IIOP.java org/omg/IOP/ChainBypassCheck.java org/omg/IOP/ChainBypassInfo.java org/omg/IOP/FORWARDED_IDENTITY.java org/omg/IOP/INVOCATION_POLICIES.java org/omg/IOP/LogicalThreadId.java org/omg/IOP/SendingContextRunTime.java org/omg/IOP/UnknownExceptionInfo.java org/omg/IOP/TaggedComponentSeqHolder.java POAHELHOLFILES org/omg/PortableServer/CurrentPackage/NoContextHolder.java org/omg/PortableServer/ForwardRequestHolder.java org/omg/PortableServer/IdAssignmentPolicyValueHelper.java org/omg/PortableServer/IdAssignmentPolicyValueHolder.java org/omg/PortableServer/IdUniquenessPolicyValueHelper.java org/omg/PortableServer/IdUniquenessPolicyValueHolder.java org/omg/PortableServer/ImplicitActivationPolicyValueHelper.java org/omg/PortableServer/ImplicitActivationPolicyValueHolder.java org/omg/PortableServer/LifespanPolicyValueHelper.java org/omg/PortableServer/LifespanPolicyValueHolder.java org/omg/PortableServer/ServantRetentionPolicyValueHelper.java org/omg/PortableServer/ServantRetentionPolicyValueHolder.java org/omg/PortableServer/ObjectIdHelper.java org/omg/PortableServer/ObjectIdHolder.java org/omg/PortableServer/POAListHelper.java org/omg/PortableServer/POAListHolder.java org/omg/PortableServer/POAManagerPackage/AdapterInactiveHolder.java org/omg/PortableServer/POAManagerPackage/StateHelper.java org/omg/PortableServer/POAManagerPackage/StateHolder.java org/omg/PortableServer/POAPackage/AdapterAlreadyExistsHolder.java org/omg/PortableServer/POAPackage/AdapterNonExistentHolder.java org/omg/PortableServer/POAPackage/InvalidPolicyHolder.java org/omg/PortableServer/POAPackage/NoServantHolder.java org/omg/PortableServer/POAPackage/ObjectAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ObjectNotActiveHolder.java org/omg/PortableServer/POAPackage/ServantAlreadyActiveHolder.java org/omg/PortableServer/POAPackage/ServantNotActiveHolder.java org/omg/PortableServer/POAPackage/WrongAdapterHolder.java org/omg/PortableServer/POAPackage/WrongPolicyHolder.java org/omg/PortableServer/RequestProcessingPolicyValueHelper.java org/omg/PortableServer/RequestProcessingPolicyValueHolder.java org/omg/PortableServer/ServantActivatorHolder.java org/omg/PortableServer/ServantLocatorHolder.java org/omg/PortableServer/ThreadPolicyValueHelper.java org/omg/PortableServer/ThreadPolicyValueHolder.java PIHELHOLFILES org/omg/PortableInterceptor/ClientRequestInfoHelper.java org/omg/PortableInterceptor/ClientRequestInterceptorHelper.java org/omg/PortableInterceptor/IORInfoHelper.java org/omg/PortableInterceptor/IORInterceptorHelper.java org/omg/PortableInterceptor/InterceptorHelper.java org/omg/PortableInterceptor/ORBInitInfoHelper.java org/omg/PortableInterceptor/ORBInitializerHelper.java org/omg/PortableInterceptor/PolicyFactoryHelper.java org/omg/PortableInterceptor/ReplyStatusHelper.java org/omg/PortableInterceptor/RequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInfoHelper.java org/omg/PortableInterceptor/ServerRequestInterceptorHelper.java org/omg/PortableInterceptor/SlotIdHelper.java org/omg/PortableInterceptor/ClientRequestInfoHolder.java org/omg/PortableInterceptor/ClientRequestInterceptorHolder.java org/omg/PortableInterceptor/CurrentHolder.java org/omg/PortableInterceptor/ForwardRequestHolder.java org/omg/PortableInterceptor/IORInfoHolder.java org/omg/PortableInterceptor/IORInterceptorHolder.java org/omg/PortableInterceptor/InterceptorHolder.java org/omg/PortableInterceptor/InvalidSlotHolder.java org/omg/PortableInterceptor/ORBInitInfoHolder.java org/omg/PortableInterceptor/ORBInitializerHolder.java org/omg/PortableInterceptor/PolicyFactoryHolder.java org/omg/PortableInterceptor/RequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInfoHolder.java org/omg/PortableInterceptor/ServerRequestInterceptorHolder.java org/omg/PortableInterceptor/TaggedComponentSeqHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/DuplicateNameHolder.java org/omg/PortableInterceptor/ORBInitInfoPackage/InvalidNameHolder.java org/omg/IOP/CodecPackage/FormatMismatchHolder.java org/omg/IOP/CodecPackage/InvalidTypeForEncodingHolder.java org/omg/IOP/CodecPackage/TypeMismatchHolder.java org/omg/IOP/CodecHelper.java org/omg/IOP/EncodingFormatHelper.java org/omg/IOP/EncodingHelper.java org/omg/IOP/CodecFactoryPackage/UnknownEncodingHolder.java org/omg/IOP/CodecFactoryHolder.java org/omg/IOP/CodecHolder.java org/omg/IOP/EncodingHolder.java org/omg/IOP/TaggedComponentSeqHelper.java org/omg/Dynamic/ContextListHelper.java org/omg/Dynamic/ExceptionListHelper.java org/omg/Dynamic/ParameterHolder.java org/omg/Dynamic/ParameterListHolder.java org/omg/Dynamic/ExceptionListHolder.java org/omg/Dynamic/ParameterHelper.java org/omg/Dynamic/ParameterListHelper.java org/omg/Dynamic/RequestContextHelper.java CORBAX org/omg/CORBA/OctetSeqHelper.java org/omg/CORBA/OctetSeqHolder.java org/omg/CORBA/PolicyError.java org/omg/CORBA/RepositoryIdHelper.java))
+
+ $(BUILD_IDLS) : $(CORBA_OUTPUTDIR)/btjars/idlj.jar
+
+ $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d : $(BUILD_IDLS) $(CORBA_OUTPUTDIR)/btjars/idlj.jar
+ mkdir -p $(@D)
+ echo IDLS_ARE_CREATED=yes > $@
+
+ -include $(CORBA_OUTPUTDIR)/gensrc/_the_idls.d
+
+ ifeq ($(IDLS_ARE_CREATED),yes)
+ $(eval $(call SetupJavaCompilation,BUILD_CORBA,\
+ SETUP:=GENERATE_NEWBYTECODE,\
+ SRC:=$(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc $(CORBA_OUTPUTDIR)/logwrappers,\
+ EXCLUDES:=com/sun/corba/se/PortableActivationIDL\
+ com/sun/tools/corba/se/logutil,\
+ EXCLUDE_FILES:=com/sun/corba/se/impl/presentation/rmi/JNDIStateFactoryImpl.java \
+ com/sun/corba/se/spi/presentation/rmi/StubWrapper.java \
+ com/sun/org/omg/CORBA/IDLTypeOperations.java \
+ com/sun/org/omg/CORBA/IRObjectOperations.java \
+ org/omg/PortableInterceptor/UNKNOWN.java \
+ com/sun/tools/corba/se/idl/ResourceBundleUtil.java\
+ com/sun/corba/se/impl/presentation/rmi/jndi.properties,\
+ COPY:=.prp LogStrings.properties,\
+ BIN:=$(CORBA_OUTPUTDIR)/classes))
+
+ # Separate src.zip call to include sources that were excluded in the build to
+ # mimic behavior in old build system.
+ $(eval $(call SetupZipArchive,ARCHIVE_BUILD_CORBA,\
+ SRC:=$(CORBA_TOPDIR)/src/share/classes $(CORBA_OUTPUTDIR)/gensrc $(CORBA_OUTPUTDIR)/logwrappers,\
+ ZIP:=$(CORBA_OUTPUTDIR)/dist/lib/src.zip))
+
+ $(BUILD_CORBA) : $(BUILD_IDLS) $(LOGWRAPPER_DEPENDENCIES)
+
+ # Run stripproperties on all sunorb resource files.
+ STRIP_PROP_SRC_FILES:=$(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb*.properties")
+ STRIP_PROP_FILES:=$(patsubst $(CORBA_TOPDIR)/src/share/classes/%,$(CORBA_OUTPUTDIR)/classes/%,\
+ $(STRIP_PROP_SRC_FILES))
+ # Simple delivery of zh_HK properties files just copies zh_TW properties files
+ STRIP_PROP_FILES+=$(patsubst $(CORBA_TOPDIR)/src/share/classes/%_zh_TW.properties,\
+ $(CORBA_OUTPUTDIR)/classes/%_zh_HK.properties,\
+ $(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties"))
+ STRIP_PROP_SRC_FILES+=$(shell $(FIND) $(CORBA_TOPDIR)/src/share/classes -name "sunorb_zh_TW.properties")
+ STRIP_PROP_CMDLINE:=$(subst _SPACE_,$(SPACE),\
+ $(join $(addprefix -clean_SPACE_,$(STRIP_PROP_SRC_FILES)), \
+ $(addprefix _SPACE_,$(STRIP_PROP_FILES))))
+
+ $(CORBA_OUTPUTDIR)/_the.stripped_properties: $(STRIP_PROP_SRC_FILES) \
+ $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar
+ $(MKDIR) -p $(sort $(dir $(STRIP_PROP_FILES)))
+ $(call ListPathsSafely,STRIP_PROP_CMDLINE,\n, >> $(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline)
+ $(JAVA) -jar $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar \
+ @$(CORBA_OUTPUTDIR)/_the.strip_prop.cmdline
+ $(TOUCH) $@
+
+ $(eval $(call SetupArchive,ARCHIVE_CORBA,\
+ $(BUILD_CORBA) $(CORBA_OUTPUTDIR)/_the.stripped_properties,\
+ SRCS:=$(CORBA_OUTPUTDIR)/classes,\
+ SUFFIXES:=.class .prp .properties,\
+ JAR:=$(CORBA_OUTPUTDIR)/dist/lib/classes.jar))
+
+ # The created classes.jar now contains Corba compiled to run on the target JDK
+ # and is ready for inclusion in jdk rt.jar.
+
+ # The created src.zip now contains .java and .properties files used to create the classes in classes.jar
+ # and is ready for inclusion into the jdk src.zip
+
+ BIN_FILES:=$(CORBA_TOPDIR)/src/share/classes/org/omg/CORBA/orb.idl $(CORBA_TOPDIR)/src/share/classes/org/omg/CORBA/ir.idl
+
+ $(CORBA_OUTPUTDIR)/dist/lib/bin.zip : $(BIN_FILES) $(CORBA_OUTPUTDIR)/dist/lib/classes.jar
+ mkdir -p $(CORBA_OUTPUTDIR)/dist/lib
+ mkdir -p $(CORBA_OUTPUTDIR)/lib
+ rm -f $@
+ echo Creating `basename $@`
+ cp $(CORBA_TOPDIR)/src/share/classes/org/omg/CORBA/*.idl $(CORBA_OUTPUTDIR)/lib
+ chmod ug+w $(CORBA_OUTPUTDIR)/lib/*
+ (cd $(CORBA_OUTPUTDIR); $(ZIP) -q $@ lib/orb.idl lib/ir.idl)
+
+ # The created bin.zip now contains the corba specific binaries: orb.idl, ir.idl
+
+ all: $(CORBA_OUTPUTDIR)/btjars/stripproperties.jar \
+ $(CORBA_OUTPUTDIR)/btjars/idlj.jar \
+ $(CORBA_OUTPUTDIR)/btjars/logutil.jar \
+ $(CORBA_OUTPUTDIR)/dist/lib/classes.jar \
+ $(CORBA_OUTPUTDIR)/dist/lib/src.zip \
+ $(CORBA_OUTPUTDIR)/dist/lib/bin.zip
+ endif
+endif
+
+clean:
+ rm -rf $(CORBA_OUTPUTDIR)
+
+.PHONY: default all clean clobber
diff --git a/hotspot/.hgtags b/hotspot/.hgtags
index cc7d133bbf1..5a1b5041315 100644
--- a/hotspot/.hgtags
+++ b/hotspot/.hgtags
@@ -236,3 +236,9 @@ f4767e53d6e0d5da7e3f1775904076cce54247c1 hs24-b04
27863e4586de38be7dd17da4163f542038f4d1d7 hs24-b05
25410a347ebb0bef166c4338a90d9dea82463a20 jdk8-b32
cd47da9383cd932cb2b659064057feafa2a91134 hs24-b06
+785bcf415ead2eaa5f6677aaf528481008140bac jdk8-b33
+7c6aba65acd2c334f1c3512b574f9038cddac24b hs24-b07
+f284b08835584517c1ca3dd67341f569e763841f jdk8-b34
+f621660a297baa48fab9dca28e99d318826e8304 jdk8-b35
+dff6e3459210f8dd0430b9b03ccc99280560da30 hs24-b08
+50b4400ca1ecb2ac2fde35f5e53ec8f04b86be7f jdk8-b36
diff --git a/hotspot/agent/src/os/linux/ps_core.c b/hotspot/agent/src/os/linux/ps_core.c
index 9739e161471..6c229da7b79 100644
--- a/hotspot/agent/src/os/linux/ps_core.c
+++ b/hotspot/agent/src/os/linux/ps_core.c
@@ -440,7 +440,7 @@ static bool sort_map_array(struct ps_prochandle* ph) {
int j = 0;
print_debug("---- sorted virtual address map ----\n");
for (j = 0; j < ph->core->num_maps; j++) {
- print_debug("base = 0x%lx\tsize = %d\n", ph->core->map_array[j]->vaddr,
+ print_debug("base = 0x%lx\tsize = %zd\n", ph->core->map_array[j]->vaddr,
ph->core->map_array[j]->memsz);
}
}
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSeq.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSeq.java
index d0da28bdd8a..5bd7f443de6 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSeq.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSeq.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -42,7 +42,7 @@ import sun.jvm.hotspot.types.TypeDataBase;
public class HeapRegionSeq extends VMObject {
// HeapRegion** _regions;
static private AddressField regionsField;
- // size_t _length;
+ // uint _length;
static private CIntegerField lengthField;
static {
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSetBase.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSetBase.java
index 2fbdce7f06c..4ac8f72c25f 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSetBase.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/gc_implementation/g1/HeapRegionSetBase.java
@@ -40,9 +40,9 @@ import sun.jvm.hotspot.types.TypeDataBase;
// Mirror class for HeapRegionSetBase. Represents a group of regions.
public class HeapRegionSetBase extends VMObject {
- // size_t _length;
+ // uint _length;
static private CIntegerField lengthField;
- // size_t _region_num;
+ // uint _region_num;
static private CIntegerField regionNumField;
// size_t _total_used_bytes;
static private CIntegerField totalUsedBytesField;
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/VirtualMachineImpl.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/VirtualMachineImpl.java
index 4cbc1447ea9..a7d7d4ee768 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/VirtualMachineImpl.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/jdi/VirtualMachineImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -889,15 +889,9 @@ public class VirtualMachineImpl extends MirrorImpl implements PathSearchingVirtu
Klass kls = ((ReferenceTypeImpl)type).ref();
if (kls instanceof InstanceKlass) {
InstanceKlass ik = (InstanceKlass) kls;
- if (ik.isInterface()) {
- if (ik.nofImplementors() == 0L) {
- return new ArrayList(0);
- }
- } else {
- // if the Klass is final or if there are no subklasses loaded yet
- if (ik.getAccessFlagsObj().isFinal() || ik.getSubklassKlass() == null) {
- includeSubtypes = false;
- }
+ // if the Klass is final or if there are no subklasses loaded yet
+ if (ik.getAccessFlagsObj().isFinal() || ik.getSubklassKlass() == null) {
+ includeSubtypes = false;
}
} else {
// no subtypes for primitive array types
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ArrayData.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ArrayData.java
index 4a92692725e..28b7b3f225a 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ArrayData.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ArrayData.java
@@ -1,24 +1,24 @@
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
*
*/
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/BranchData.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/BranchData.java
index a80382fc15d..b3d09109084 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/BranchData.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/BranchData.java
@@ -1,24 +1,24 @@
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
*
*/
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/CounterData.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/CounterData.java
index 41b3dd217ef..65549a15827 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/CounterData.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/CounterData.java
@@ -1,24 +1,24 @@
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
*
*/
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/DataLayout.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/DataLayout.java
index 1a63eae5f4f..39ef05abd70 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/DataLayout.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/DataLayout.java
@@ -1,24 +1,24 @@
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
*
*/
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java
index d75d890485c..f342eb72882 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -52,7 +52,6 @@ public class InstanceKlass extends Klass {
private static int HIGH_OFFSET;
private static int GENERIC_SIGNATURE_INDEX_OFFSET;
private static int FIELD_SLOTS;
- public static int IMPLEMENTORS_LIMIT;
// ClassState constants
private static int CLASS_STATE_UNPARSABLE_BY_GC;
@@ -70,13 +69,6 @@ public class InstanceKlass extends Klass {
methodOrdering = new OopField(type.getOopField("_method_ordering"), Oop.getHeaderSize());
localInterfaces = new OopField(type.getOopField("_local_interfaces"), Oop.getHeaderSize());
transitiveInterfaces = new OopField(type.getOopField("_transitive_interfaces"), Oop.getHeaderSize());
- nofImplementors = new CIntField(type.getCIntegerField("_nof_implementors"), Oop.getHeaderSize());
- IMPLEMENTORS_LIMIT = db.lookupIntConstant("instanceKlass::implementors_limit").intValue();
- implementors = new OopField[IMPLEMENTORS_LIMIT];
- for (int i = 0; i < IMPLEMENTORS_LIMIT; i++) {
- long arrayOffset = Oop.getHeaderSize() + (i * db.getAddressSize());
- implementors[i] = new OopField(type.getOopField("_implementors[0]"), arrayOffset);
- }
fields = new OopField(type.getOopField("_fields"), Oop.getHeaderSize());
javaFieldsCount = new CIntField(type.getCIntegerField("_java_fields_count"), Oop.getHeaderSize());
constants = new OopField(type.getOopField("_constants"), Oop.getHeaderSize());
@@ -136,8 +128,6 @@ public class InstanceKlass extends Klass {
private static OopField methodOrdering;
private static OopField localInterfaces;
private static OopField transitiveInterfaces;
- private static CIntField nofImplementors;
- private static OopField[] implementors;
private static OopField fields;
private static CIntField javaFieldsCount;
private static OopField constants;
@@ -317,9 +307,6 @@ public class InstanceKlass extends Klass {
public TypeArray getMethodOrdering() { return (TypeArray) methodOrdering.getValue(this); }
public ObjArray getLocalInterfaces() { return (ObjArray) localInterfaces.getValue(this); }
public ObjArray getTransitiveInterfaces() { return (ObjArray) transitiveInterfaces.getValue(this); }
- public long nofImplementors() { return nofImplementors.getValue(this); }
- public Klass getImplementor() { return (Klass) implementors[0].getValue(this); }
- public Klass getImplementor(int i) { return (Klass) implementors[i].getValue(this); }
public TypeArray getFields() { return (TypeArray) fields.getValue(this); }
public int getJavaFieldsCount() { return (int) javaFieldsCount.getValue(this); }
public int getAllFieldsCount() { return (int)getFields().getLength() / FIELD_SLOTS; }
@@ -527,9 +514,6 @@ public class InstanceKlass extends Klass {
visitor.doOop(methodOrdering, true);
visitor.doOop(localInterfaces, true);
visitor.doOop(transitiveInterfaces, true);
- visitor.doCInt(nofImplementors, true);
- for (int i = 0; i < IMPLEMENTORS_LIMIT; i++)
- visitor.doOop(implementors[i], true);
visitor.doOop(fields, true);
visitor.doOop(constants, true);
visitor.doOop(classLoader, true);
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/JumpData.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/JumpData.java
index b7921c5b6f4..7e2ab758aeb 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/JumpData.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/JumpData.java
@@ -1,24 +1,24 @@
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
*
*/
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/MultiBranchData.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/MultiBranchData.java
index 565d493b906..77f2647c41a 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/MultiBranchData.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/MultiBranchData.java
@@ -1,24 +1,24 @@
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
*
*/
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ReceiverTypeData.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ReceiverTypeData.java
index c6a7ac8ad8a..c7cb61e2d90 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ReceiverTypeData.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/ReceiverTypeData.java
@@ -1,24 +1,24 @@
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
*
*/
diff --git a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/VirtualCallData.java b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/VirtualCallData.java
index a1eed08c440..2516fe07e06 100644
--- a/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/VirtualCallData.java
+++ b/hotspot/agent/src/share/classes/sun/jvm/hotspot/oops/VirtualCallData.java
@@ -1,24 +1,24 @@
/*
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
- *
+ * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
*
*/
diff --git a/hotspot/make/bsd/makefiles/wb.make b/hotspot/make/bsd/makefiles/wb.make
index 2ec216e6fb4..8298d871cce 100644
--- a/hotspot/make/bsd/makefiles/wb.make
+++ b/hotspot/make/bsd/makefiles/wb.make
@@ -36,7 +36,7 @@ WB_JAVA_CLASSES = $(patsubst $(WBSRCDIR)/%,$(WB_JAVA_CLASSDIR)/%, \
$(patsubst %.java,%.class,$(WB_JAVA_SRCS)))
$(WB_JAVA_CLASSDIR)/%.class: $(WBSRCDIR)/%.java $(WB_JAVA_CLASSDIR)
- $(REMOTE) $(COMPILE.JAVAC) -nowarn -d $(WB_JAVA_CLASSDIR) $<
+ $(REMOTE) $(COMPILE.JAVAC) -sourcepath $(WBSRCDIR) -nowarn -d $(WB_JAVA_CLASSDIR) $<
$(WB_JAR): $(WB_JAVA_CLASSES)
$(QUIETLY) $(REMOTE) $(RUN.JAR) cf $@ -C $(WB_JAVA_CLASSDIR)/ .
diff --git a/hotspot/make/hotspot_version b/hotspot/make/hotspot_version
index eabe6ac2874..00601747489 100644
--- a/hotspot/make/hotspot_version
+++ b/hotspot/make/hotspot_version
@@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2011
HS_MAJOR_VER=24
HS_MINOR_VER=0
-HS_BUILD_NUMBER=06
+HS_BUILD_NUMBER=08
JDK_MAJOR_VER=1
JDK_MINOR_VER=8
diff --git a/hotspot/make/linux/makefiles/wb.make b/hotspot/make/linux/makefiles/wb.make
index 2ec216e6fb4..8298d871cce 100644
--- a/hotspot/make/linux/makefiles/wb.make
+++ b/hotspot/make/linux/makefiles/wb.make
@@ -36,7 +36,7 @@ WB_JAVA_CLASSES = $(patsubst $(WBSRCDIR)/%,$(WB_JAVA_CLASSDIR)/%, \
$(patsubst %.java,%.class,$(WB_JAVA_SRCS)))
$(WB_JAVA_CLASSDIR)/%.class: $(WBSRCDIR)/%.java $(WB_JAVA_CLASSDIR)
- $(REMOTE) $(COMPILE.JAVAC) -nowarn -d $(WB_JAVA_CLASSDIR) $<
+ $(REMOTE) $(COMPILE.JAVAC) -sourcepath $(WBSRCDIR) -nowarn -d $(WB_JAVA_CLASSDIR) $<
$(WB_JAR): $(WB_JAVA_CLASSES)
$(QUIETLY) $(REMOTE) $(RUN.JAR) cf $@ -C $(WB_JAVA_CLASSDIR)/ .
diff --git a/hotspot/make/solaris/makefiles/wb.make b/hotspot/make/solaris/makefiles/wb.make
index 225978df476..a4a24ddc792 100644
--- a/hotspot/make/solaris/makefiles/wb.make
+++ b/hotspot/make/solaris/makefiles/wb.make
@@ -36,7 +36,7 @@ WB_JAVA_CLASSES = $(patsubst $(WBSRCDIR)/%,$(WB_JAVA_CLASSDIR)/%, \
$(patsubst %.java,%.class,$(WB_JAVA_SRCS)))
$(WB_JAVA_CLASSDIR)/%.class: $(WBSRCDIR)/%.java $(WB_JAVA_CLASSDIR)
- $(REMOTE) $(COMPILE.JAVAC) -nowarn -d $(WB_JAVA_CLASSDIR) $<
+ $(REMOTE) $(COMPILE.JAVAC) -sourcepath $(WBSRCDIR) -nowarn -d $(WB_JAVA_CLASSDIR) $<
$(WB_JAR): $(WB_JAVA_CLASSES)
$(QUIETLY) $(REMOTE) $(RUN.JAR) cf $@ -C $(WB_JAVA_CLASSDIR)/ .
diff --git a/hotspot/make/windows/create_obj_files.sh b/hotspot/make/windows/create_obj_files.sh
index 61903387dbe..78333bf7917 100644
--- a/hotspot/make/windows/create_obj_files.sh
+++ b/hotspot/make/windows/create_obj_files.sh
@@ -80,6 +80,8 @@ if [ -d "${ALTSRC}/share/vm/jfr" ]; then
BASE_PATHS="${BASE_PATHS} ${ALTSRC}/share/vm/jfr"
fi
+BASE_PATHS="${BASE_PATHS} ${COMMONSRC}/share/vm/prims/wbtestmethods"
+
CORE_PATHS="${BASE_PATHS}"
# shared is already in BASE_PATHS. Should add vm/memory but that one is also in BASE_PATHS.
if [ -d "${ALTSRC}/share/vm/gc_implementation" ]; then
diff --git a/hotspot/make/windows/makefiles/projectcreator.make b/hotspot/make/windows/makefiles/projectcreator.make
index 0c110f9281b..ebc5a0a8497 100644
--- a/hotspot/make/windows/makefiles/projectcreator.make
+++ b/hotspot/make/windows/makefiles/projectcreator.make
@@ -51,6 +51,7 @@ ProjectCreatorIncludesPRIVATE=\
-relativeInclude src\closed\cpu\$(Platform_arch)\vm \
-relativeInclude src\share\vm \
-relativeInclude src\share\vm\precompiled \
+ -relativeInclude src\share\vm\prims\wbtestmethods \
-relativeInclude src\share\vm\prims \
-relativeInclude src\os\windows\vm \
-relativeInclude src\os_cpu\windows_$(Platform_arch)\vm \
diff --git a/hotspot/make/windows/makefiles/vm.make b/hotspot/make/windows/makefiles/vm.make
index d3e226c885c..ee878fe7343 100644
--- a/hotspot/make/windows/makefiles/vm.make
+++ b/hotspot/make/windows/makefiles/vm.make
@@ -172,6 +172,7 @@ VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/asm
VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/memory
VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/oops
VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/prims
+VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/prims/wbtestmethods
VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/runtime
VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/services
VM_PATH=$(VM_PATH);$(WorkSpace)/src/share/vm/trace
@@ -269,6 +270,9 @@ bytecodeInterpreterWithChecks.obj: ..\generated\jvmtifiles\bytecodeInterpreterWi
{$(COMMONSRC)\share\vm\prims}.cpp.obj::
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
+{$(COMMONSRC)\share\vm\prims\wbtestmethods}.cpp.obj::
+ $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
+
{$(COMMONSRC)\share\vm\runtime}.cpp.obj::
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
@@ -349,6 +353,9 @@ bytecodeInterpreterWithChecks.obj: ..\generated\jvmtifiles\bytecodeInterpreterWi
{$(ALTSRC)\share\vm\prims}.cpp.obj::
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
+{$(ALTSRC)\share\vm\prims\wbtestmethods}.cpp.obj::
+ $(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
+
{$(ALTSRC)\share\vm\runtime}.cpp.obj::
$(CXX) $(CXX_FLAGS) $(CXX_USE_PCH) /c $<
diff --git a/hotspot/make/windows/makefiles/wb.make b/hotspot/make/windows/makefiles/wb.make
index b0add7227fe..76b4318bdce 100644
--- a/hotspot/make/windows/makefiles/wb.make
+++ b/hotspot/make/windows/makefiles/wb.make
@@ -40,7 +40,7 @@ wb_java_srcs: $(WorkSpace)\src\share\tools\whitebox\sun\hotspot\*.java $(WB_CLAS
{$(WorkSpace)\src\share\tools\whitebox\sun\hotspot}.java.class::
- $(COMPILE_JAVAC) -d $(WB_CLASSES) $<
+ $(COMPILE_JAVAC) -sourcepath $(WBSRCDIR) -d $(WB_CLASSES) $<
$(WB_JAR): wb_java_srcs
$(RUN_JAR) cf $@ -C $(WB_CLASSES) .
diff --git a/hotspot/src/cpu/x86/vm/assembler_x86.cpp b/hotspot/src/cpu/x86/vm/assembler_x86.cpp
index a3eb57c58f8..7c7cb3d8a78 100644
--- a/hotspot/src/cpu/x86/vm/assembler_x86.cpp
+++ b/hotspot/src/cpu/x86/vm/assembler_x86.cpp
@@ -528,10 +528,12 @@ address Assembler::locate_operand(address inst, WhichOperand which) {
if (which == end_pc_operand) return ip + (is_64bit ? 8 : 4);
// these asserts are somewhat nonsensical
#ifndef _LP64
- assert(which == imm_operand || which == disp32_operand, "");
+ assert(which == imm_operand || which == disp32_operand,
+ err_msg("which %d is_64_bit %d ip " INTPTR_FORMAT, which, is_64bit, ip));
#else
assert((which == call32_operand || which == imm_operand) && is_64bit ||
- which == narrow_oop_operand && !is_64bit, "");
+ which == narrow_oop_operand && !is_64bit,
+ err_msg("which %d is_64_bit %d ip " INTPTR_FORMAT, which, is_64bit, ip));
#endif // _LP64
return ip;
diff --git a/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp b/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp
index 1cbc67e6060..6a5fb90c050 100644
--- a/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp
+++ b/hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp
@@ -2651,56 +2651,49 @@ void TemplateTable::jvmti_post_fast_field_mod() {
// Check to see if a field modification watch has been set before we take
// the time to call into the VM.
Label L2;
- __ mov32(rcx, ExternalAddress((address)JvmtiExport::get_field_modification_count_addr()));
- __ testl(rcx,rcx);
- __ jcc(Assembler::zero, L2);
- __ pop_ptr(rbx); // copy the object pointer from tos
- __ verify_oop(rbx);
- __ push_ptr(rbx); // put the object pointer back on tos
- __ subptr(rsp, sizeof(jvalue)); // add space for a jvalue object
- __ mov(rcx, rsp);
- __ push_ptr(rbx); // save object pointer so we can steal rbx,
- __ xorptr(rbx, rbx);
- const Address lo_value(rcx, rbx, Address::times_1, 0*wordSize);
- const Address hi_value(rcx, rbx, Address::times_1, 1*wordSize);
- switch (bytecode()) { // load values into the jvalue object
- case Bytecodes::_fast_bputfield: __ movb(lo_value, rax); break;
- case Bytecodes::_fast_sputfield: __ movw(lo_value, rax); break;
- case Bytecodes::_fast_cputfield: __ movw(lo_value, rax); break;
- case Bytecodes::_fast_iputfield: __ movl(lo_value, rax); break;
- case Bytecodes::_fast_lputfield:
- NOT_LP64(__ movptr(hi_value, rdx));
- __ movptr(lo_value, rax);
- break;
+ __ mov32(rcx, ExternalAddress((address)JvmtiExport::get_field_modification_count_addr()));
+ __ testl(rcx,rcx);
+ __ jcc(Assembler::zero, L2);
+ __ pop_ptr(rbx); // copy the object pointer from tos
+ __ verify_oop(rbx);
+ __ push_ptr(rbx); // put the object pointer back on tos
- // need to call fld_s() after fstp_s() to restore the value for below
- case Bytecodes::_fast_fputfield: __ fstp_s(lo_value); __ fld_s(lo_value); break;
+ // Save tos values before call_VM() clobbers them. Since we have
+ // to do it for every data type, we use the saved values as the
+ // jvalue object.
+ switch (bytecode()) { // load values into the jvalue object
+ case Bytecodes::_fast_aputfield: __ push_ptr(rax); break;
+ case Bytecodes::_fast_bputfield: // fall through
+ case Bytecodes::_fast_sputfield: // fall through
+ case Bytecodes::_fast_cputfield: // fall through
+ case Bytecodes::_fast_iputfield: __ push_i(rax); break;
+ case Bytecodes::_fast_dputfield: __ push_d(); break;
+ case Bytecodes::_fast_fputfield: __ push_f(); break;
+ case Bytecodes::_fast_lputfield: __ push_l(rax); break;
- // need to call fld_d() after fstp_d() to restore the value for below
- case Bytecodes::_fast_dputfield: __ fstp_d(lo_value); __ fld_d(lo_value); break;
+ default:
+ ShouldNotReachHere();
+ }
+ __ mov(rcx, rsp); // points to jvalue on the stack
+ // access constant pool cache entry
+ __ get_cache_entry_pointer_at_bcp(rax, rdx, 1);
+ __ verify_oop(rbx);
+ // rbx,: object pointer copied above
+ // rax,: cache entry pointer
+ // rcx: jvalue object on the stack
+ __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_field_modification), rbx, rax, rcx);
- // since rcx is not an object we don't call store_check() here
- case Bytecodes::_fast_aputfield: __ movptr(lo_value, rax); break;
-
- default: ShouldNotReachHere();
- }
- __ pop_ptr(rbx); // restore copy of object pointer
-
- // Save rax, and sometimes rdx because call_VM() will clobber them,
- // then use them for JVM/DI purposes
- __ push(rax);
- if (bytecode() == Bytecodes::_fast_lputfield) __ push(rdx);
- // access constant pool cache entry
- __ get_cache_entry_pointer_at_bcp(rax, rdx, 1);
- __ verify_oop(rbx);
- // rbx,: object pointer copied above
- // rax,: cache entry pointer
- // rcx: jvalue object on the stack
- __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::post_field_modification), rbx, rax, rcx);
- if (bytecode() == Bytecodes::_fast_lputfield) __ pop(rdx); // restore high value
- __ pop(rax); // restore lower value
- __ addptr(rsp, sizeof(jvalue)); // release jvalue object space
- __ bind(L2);
+ switch (bytecode()) { // restore tos values
+ case Bytecodes::_fast_aputfield: __ pop_ptr(rax); break;
+ case Bytecodes::_fast_bputfield: // fall through
+ case Bytecodes::_fast_sputfield: // fall through
+ case Bytecodes::_fast_cputfield: // fall through
+ case Bytecodes::_fast_iputfield: __ pop_i(rax); break;
+ case Bytecodes::_fast_dputfield: __ pop_d(); break;
+ case Bytecodes::_fast_fputfield: __ pop_f(); break;
+ case Bytecodes::_fast_lputfield: __ pop_l(rax); break;
+ }
+ __ bind(L2);
}
}
diff --git a/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp b/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp
index 0e5ac274f36..6bb302f2992 100644
--- a/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp
+++ b/hotspot/src/cpu/x86/vm/templateTable_x86_64.cpp
@@ -2685,26 +2685,23 @@ void TemplateTable::jvmti_post_fast_field_mod() {
__ pop_ptr(rbx); // copy the object pointer from tos
__ verify_oop(rbx);
__ push_ptr(rbx); // put the object pointer back on tos
- __ subptr(rsp, sizeof(jvalue)); // add space for a jvalue object
- __ mov(c_rarg3, rsp);
- const Address field(c_rarg3, 0);
-
+ // Save tos values before call_VM() clobbers them. Since we have
+ // to do it for every data type, we use the saved values as the
+ // jvalue object.
switch (bytecode()) { // load values into the jvalue object
- case Bytecodes::_fast_aputfield: __ movq(field, rax); break;
- case Bytecodes::_fast_lputfield: __ movq(field, rax); break;
- case Bytecodes::_fast_iputfield: __ movl(field, rax); break;
- case Bytecodes::_fast_bputfield: __ movb(field, rax); break;
+ case Bytecodes::_fast_aputfield: __ push_ptr(rax); break;
+ case Bytecodes::_fast_bputfield: // fall through
case Bytecodes::_fast_sputfield: // fall through
- case Bytecodes::_fast_cputfield: __ movw(field, rax); break;
- case Bytecodes::_fast_fputfield: __ movflt(field, xmm0); break;
- case Bytecodes::_fast_dputfield: __ movdbl(field, xmm0); break;
+ case Bytecodes::_fast_cputfield: // fall through
+ case Bytecodes::_fast_iputfield: __ push_i(rax); break;
+ case Bytecodes::_fast_dputfield: __ push_d(); break;
+ case Bytecodes::_fast_fputfield: __ push_f(); break;
+ case Bytecodes::_fast_lputfield: __ push_l(rax); break;
+
default:
ShouldNotReachHere();
}
-
- // Save rax because call_VM() will clobber it, then use it for
- // JVMTI purposes
- __ push(rax);
+ __ mov(c_rarg3, rsp); // points to jvalue on the stack
// access constant pool cache entry
__ get_cache_entry_pointer_at_bcp(c_rarg2, rax, 1);
__ verify_oop(rbx);
@@ -2715,8 +2712,17 @@ void TemplateTable::jvmti_post_fast_field_mod() {
CAST_FROM_FN_PTR(address,
InterpreterRuntime::post_field_modification),
rbx, c_rarg2, c_rarg3);
- __ pop(rax); // restore lower value
- __ addptr(rsp, sizeof(jvalue)); // release jvalue object space
+
+ switch (bytecode()) { // restore tos values
+ case Bytecodes::_fast_aputfield: __ pop_ptr(rax); break;
+ case Bytecodes::_fast_bputfield: // fall through
+ case Bytecodes::_fast_sputfield: // fall through
+ case Bytecodes::_fast_cputfield: // fall through
+ case Bytecodes::_fast_iputfield: __ pop_i(rax); break;
+ case Bytecodes::_fast_dputfield: __ pop_d(); break;
+ case Bytecodes::_fast_fputfield: __ pop_f(); break;
+ case Bytecodes::_fast_lputfield: __ pop_l(rax); break;
+ }
__ bind(L2);
}
}
diff --git a/hotspot/src/cpu/x86/vm/x86_64.ad b/hotspot/src/cpu/x86/vm/x86_64.ad
index b86d288f5c5..81a01ff9e00 100644
--- a/hotspot/src/cpu/x86/vm/x86_64.ad
+++ b/hotspot/src/cpu/x86/vm/x86_64.ad
@@ -3369,15 +3369,6 @@ operand immP0()
interface(CONST_INTER);
%}
-operand immP_poll() %{
- predicate(n->get_ptr() != 0 && n->get_ptr() == (intptr_t)os::get_polling_page());
- match(ConP);
-
- // formats are generated automatically for constants and base registers
- format %{ %}
- interface(CONST_INTER);
-%}
-
// Pointer Immediate
operand immN() %{
match(ConN);
@@ -5726,16 +5717,6 @@ instruct loadConP0(rRegP dst, immP0 src, rFlagsReg cr)
ins_pipe(ialu_reg);
%}
-instruct loadConP_poll(rRegP dst, immP_poll src) %{
- match(Set dst src);
- format %{ "movq $dst, $src\t!ptr" %}
- ins_encode %{
- AddressLiteral polling_page(os::get_polling_page(), relocInfo::poll_type);
- __ lea($dst$$Register, polling_page);
- %}
- ins_pipe(ialu_reg_fat);
-%}
-
instruct loadConP31(rRegP dst, immP31 src, rFlagsReg cr)
%{
match(Set dst src);
diff --git a/hotspot/src/os/bsd/vm/osThread_bsd.hpp b/hotspot/src/os/bsd/vm/osThread_bsd.hpp
index 0e60cc3eefd..914a0439c02 100644
--- a/hotspot/src/os/bsd/vm/osThread_bsd.hpp
+++ b/hotspot/src/os/bsd/vm/osThread_bsd.hpp
@@ -72,15 +72,18 @@
#ifdef _ALLBSD_SOURCE
#ifdef __APPLE__
+ static size_t thread_id_size() { return sizeof(thread_t); }
thread_t thread_id() const {
return _thread_id;
}
#else
+ static size_t thread_id_size() { return sizeof(pthread_t); }
pthread_t thread_id() const {
return _thread_id;
}
#endif
#else
+ static size_t thread_id_size() { return sizeof(pid_t); }
pid_t thread_id() const {
return _thread_id;
}
diff --git a/hotspot/src/os/linux/vm/osThread_linux.hpp b/hotspot/src/os/linux/vm/osThread_linux.hpp
index 22945135b78..fe9fe6188fa 100644
--- a/hotspot/src/os/linux/vm/osThread_linux.hpp
+++ b/hotspot/src/os/linux/vm/osThread_linux.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -56,6 +56,8 @@
sigset_t caller_sigmask() const { return _caller_sigmask; }
void set_caller_sigmask(sigset_t sigmask) { _caller_sigmask = sigmask; }
+ static size_t thread_id_size() { return sizeof(pid_t); }
+
pid_t thread_id() const {
return _thread_id;
}
diff --git a/hotspot/src/os/solaris/vm/osThread_solaris.hpp b/hotspot/src/os/solaris/vm/osThread_solaris.hpp
index 7fe1417e342..6e79e1855db 100644
--- a/hotspot/src/os/solaris/vm/osThread_solaris.hpp
+++ b/hotspot/src/os/solaris/vm/osThread_solaris.hpp
@@ -36,6 +36,7 @@
bool _vm_created_thread; // true if the VM created this thread,
// false if primary thread or attached thread
public:
+ static size_t thread_id_size() { return sizeof(thread_t); }
thread_t thread_id() const { return _thread_id; }
uint lwp_id() const { return _lwp_id; }
int native_priority() const { return _native_priority; }
diff --git a/hotspot/src/os/windows/vm/osThread_windows.hpp b/hotspot/src/os/windows/vm/osThread_windows.hpp
index 1df8925c7a7..28cd45c5c2f 100644
--- a/hotspot/src/os/windows/vm/osThread_windows.hpp
+++ b/hotspot/src/os/windows/vm/osThread_windows.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -42,6 +42,8 @@ typedef void* HANDLE;
HANDLE interrupt_event() const { return _interrupt_event; }
void set_interrupt_event(HANDLE interrupt_event) { _interrupt_event = interrupt_event; }
+
+ static size_t thread_id_size() { return sizeof(unsigned long); }
unsigned long thread_id() const { return _thread_id; }
#ifndef PRODUCT
// Used for debugging, return a unique integer for each thread.
diff --git a/hotspot/src/share/tools/whitebox/sun/hotspot/WhiteBox.java b/hotspot/src/share/tools/whitebox/sun/hotspot/WhiteBox.java
index ee6a18d50c4..1495b73a2b6 100644
--- a/hotspot/src/share/tools/whitebox/sun/hotspot/WhiteBox.java
+++ b/hotspot/src/share/tools/whitebox/sun/hotspot/WhiteBox.java
@@ -24,6 +24,7 @@
package sun.hotspot;
import java.security.BasicPermission;
+import sun.hotspot.parser.DiagnosticCommand;
public class WhiteBox {
@@ -67,4 +68,5 @@ public class WhiteBox {
public native boolean g1IsHumongous(Object o);
public native long g1NumFreeRegions();
public native int g1RegionSize();
+ public native Object[] parseCommandLine(String commandline, DiagnosticCommand[] args);
}
diff --git a/hotspot/src/share/tools/whitebox/sun/hotspot/parser/DiagnosticCommand.java b/hotspot/src/share/tools/whitebox/sun/hotspot/parser/DiagnosticCommand.java
new file mode 100644
index 00000000000..2099901a4a6
--- /dev/null
+++ b/hotspot/src/share/tools/whitebox/sun/hotspot/parser/DiagnosticCommand.java
@@ -0,0 +1,43 @@
+package sun.hotspot.parser;
+
+public class DiagnosticCommand {
+
+ public enum DiagnosticArgumentType {
+ JLONG, BOOLEAN, STRING, NANOTIME, STRINGARRAY, MEMORYSIZE
+ }
+
+ private String name;
+ private String desc;
+ private DiagnosticArgumentType type;
+ private boolean mandatory;
+ private String defaultValue;
+
+ public DiagnosticCommand(String name, String desc, DiagnosticArgumentType type,
+ boolean mandatory, String defaultValue) {
+ this.name = name;
+ this.desc = desc;
+ this.type = type;
+ this.mandatory = mandatory;
+ this.defaultValue = defaultValue;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDesc() {
+ return desc;
+ }
+
+ public DiagnosticArgumentType getType() {
+ return type;
+ }
+
+ public boolean isMandatory() {
+ return mandatory;
+ }
+
+ public String getDefaultValue() {
+ return defaultValue;
+ }
+}
diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp
index b4659d97261..c11a2a2c177 100644
--- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp
+++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp
@@ -1694,7 +1694,9 @@ void GraphBuilder::invoke(Bytecodes::Code code) {
// they are roughly equivalent to Object.
ciInstanceKlass* singleton = NULL;
if (target->holder()->nof_implementors() == 1) {
- singleton = target->holder()->implementor(0);
+ singleton = target->holder()->implementor();
+ assert(singleton != NULL && singleton != target->holder(),
+ "just checking");
assert(holder->is_interface(), "invokeinterface to non interface?");
ciInstanceKlass* decl_interface = (ciInstanceKlass*)holder;
@@ -3130,10 +3132,23 @@ bool GraphBuilder::try_inline_intrinsics(ciMethod* callee) {
bool cantrap = true;
vmIntrinsics::ID id = callee->intrinsic_id();
switch (id) {
- case vmIntrinsics::_arraycopy :
+ case vmIntrinsics::_arraycopy:
if (!InlineArrayCopy) return false;
break;
+#ifdef TRACE_HAVE_INTRINSICS
+ case vmIntrinsics::_classID:
+ case vmIntrinsics::_threadID:
+ preserves_state = true;
+ cantrap = true;
+ break;
+
+ case vmIntrinsics::_counterTime:
+ preserves_state = true;
+ cantrap = false;
+ break;
+#endif
+
case vmIntrinsics::_currentTimeMillis:
case vmIntrinsics::_nanoTime:
preserves_state = true;
diff --git a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp
index 3c7f305222a..6ed6edf47c3 100644
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -2879,6 +2879,50 @@ void LIRGenerator::do_IfOp(IfOp* x) {
__ cmove(lir_cond(x->cond()), t_val.result(), f_val.result(), reg, as_BasicType(x->x()->type()));
}
+void LIRGenerator::do_RuntimeCall(address routine, int expected_arguments, Intrinsic* x) {
+ assert(x->number_of_arguments() == expected_arguments, "wrong type");
+ LIR_Opr reg = result_register_for(x->type());
+ __ call_runtime_leaf(routine, getThreadTemp(),
+ reg, new LIR_OprList());
+ LIR_Opr result = rlock_result(x);
+ __ move(reg, result);
+}
+
+#ifdef TRACE_HAVE_INTRINSICS
+void LIRGenerator::do_ThreadIDIntrinsic(Intrinsic* x) {
+ LIR_Opr thread = getThreadPointer();
+ LIR_Opr osthread = new_pointer_register();
+ __ move(new LIR_Address(thread, in_bytes(JavaThread::osthread_offset()), osthread->type()), osthread);
+ size_t thread_id_size = OSThread::thread_id_size();
+ if (thread_id_size == (size_t) BytesPerLong) {
+ LIR_Opr id = new_register(T_LONG);
+ __ move(new LIR_Address(osthread, in_bytes(OSThread::thread_id_offset()), T_LONG), id);
+ __ convert(Bytecodes::_l2i, id, rlock_result(x));
+ } else if (thread_id_size == (size_t) BytesPerInt) {
+ __ move(new LIR_Address(osthread, in_bytes(OSThread::thread_id_offset()), T_INT), rlock_result(x));
+ } else {
+ ShouldNotReachHere();
+ }
+}
+
+void LIRGenerator::do_ClassIDIntrinsic(Intrinsic* x) {
+ CodeEmitInfo* info = state_for(x);
+ CodeEmitInfo* info2 = new CodeEmitInfo(info); // Clone for the second null check
+ assert(info != NULL, "must have info");
+ LIRItem arg(x->argument_at(1), this);
+ arg.load_item();
+ LIR_Opr klass = new_register(T_OBJECT);
+ __ move(new LIR_Address(arg.result(), java_lang_Class::klass_offset_in_bytes(), T_OBJECT), klass, info);
+ LIR_Opr id = new_register(T_LONG);
+ ByteSize offset = TRACE_ID_OFFSET;
+ LIR_Address* trace_id_addr = new LIR_Address(klass, in_bytes(offset), T_LONG);
+ __ move(trace_id_addr, id);
+ __ logical_or(id, LIR_OprFact::longConst(0x01l), id);
+ __ store(id, trace_id_addr);
+ __ logical_and(id, LIR_OprFact::longConst(~0x3l), id);
+ __ move(id, rlock_result(x));
+}
+#endif
void LIRGenerator::do_Intrinsic(Intrinsic* x) {
switch (x->id()) {
@@ -2890,25 +2934,21 @@ void LIRGenerator::do_Intrinsic(Intrinsic* x) {
break;
}
- case vmIntrinsics::_currentTimeMillis: {
- assert(x->number_of_arguments() == 0, "wrong type");
- LIR_Opr reg = result_register_for(x->type());
- __ call_runtime_leaf(CAST_FROM_FN_PTR(address, os::javaTimeMillis), getThreadTemp(),
- reg, new LIR_OprList());
- LIR_Opr result = rlock_result(x);
- __ move(reg, result);
+#ifdef TRACE_HAVE_INTRINSICS
+ case vmIntrinsics::_threadID: do_ThreadIDIntrinsic(x); break;
+ case vmIntrinsics::_classID: do_ClassIDIntrinsic(x); break;
+ case vmIntrinsics::_counterTime:
+ do_RuntimeCall(CAST_FROM_FN_PTR(address, TRACE_TIME_METHOD), 0, x);
break;
- }
+#endif
- case vmIntrinsics::_nanoTime: {
- assert(x->number_of_arguments() == 0, "wrong type");
- LIR_Opr reg = result_register_for(x->type());
- __ call_runtime_leaf(CAST_FROM_FN_PTR(address, os::javaTimeNanos), getThreadTemp(),
- reg, new LIR_OprList());
- LIR_Opr result = rlock_result(x);
- __ move(reg, result);
+ case vmIntrinsics::_currentTimeMillis:
+ do_RuntimeCall(CAST_FROM_FN_PTR(address, os::javaTimeMillis), 0, x);
+ break;
+
+ case vmIntrinsics::_nanoTime:
+ do_RuntimeCall(CAST_FROM_FN_PTR(address, os::javaTimeNanos), 0, x);
break;
- }
case vmIntrinsics::_Object_init: do_RegisterFinalizer(x); break;
case vmIntrinsics::_getClass: do_getClass(x); break;
diff --git a/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp b/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp
index 56b28e4eb8e..67127df04d8 100644
--- a/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp
+++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -426,6 +426,12 @@ class LIRGenerator: public InstructionVisitor, public BlockClosure {
SwitchRangeArray* create_lookup_ranges(LookupSwitch* x);
void do_SwitchRanges(SwitchRangeArray* x, LIR_Opr value, BlockBegin* default_sux);
+ void do_RuntimeCall(address routine, int expected_arguments, Intrinsic* x);
+#ifdef TRACE_HAVE_INTRINSICS
+ void do_ThreadIDIntrinsic(Intrinsic* x);
+ void do_ClassIDIntrinsic(Intrinsic* x);
+#endif
+
public:
Compilation* compilation() const { return _compilation; }
FrameMap* frame_map() const { return _compilation->frame_map(); }
diff --git a/hotspot/src/share/vm/c1/c1_Runtime1.cpp b/hotspot/src/share/vm/c1/c1_Runtime1.cpp
index 765dec48098..47703492d1e 100644
--- a/hotspot/src/share/vm/c1/c1_Runtime1.cpp
+++ b/hotspot/src/share/vm/c1/c1_Runtime1.cpp
@@ -295,6 +295,9 @@ const char* Runtime1::name_for_address(address entry) {
FUNCTION_CASE(entry, SharedRuntime::dtrace_method_entry);
FUNCTION_CASE(entry, SharedRuntime::dtrace_method_exit);
FUNCTION_CASE(entry, trace_block_entry);
+#ifdef TRACE_HAVE_INTRINSICS
+ FUNCTION_CASE(entry, TRACE_TIME_METHOD);
+#endif
#undef FUNCTION_CASE
diff --git a/hotspot/src/share/vm/ci/ciInstanceKlass.cpp b/hotspot/src/share/vm/ci/ciInstanceKlass.cpp
index b7c2ab75850..be730a00ce9 100644
--- a/hotspot/src/share/vm/ci/ciInstanceKlass.cpp
+++ b/hotspot/src/share/vm/ci/ciInstanceKlass.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -59,10 +59,7 @@ ciInstanceKlass::ciInstanceKlass(KlassHandle h_k) :
_has_nonstatic_fields = ik->has_nonstatic_fields();
_nonstatic_fields = NULL; // initialized lazily by compute_nonstatic_fields:
- _nof_implementors = ik->nof_implementors();
- for (int i = 0; i < implementors_limit; i++) {
- _implementors[i] = NULL; // we will fill these lazily
- }
+ _implementor = NULL; // we will fill these lazily
Thread *thread = Thread::current();
if (ciObjectFactory::is_initialized()) {
@@ -102,7 +99,6 @@ ciInstanceKlass::ciInstanceKlass(ciSymbol* name,
_nonstatic_field_size = -1;
_has_nonstatic_fields = false;
_nonstatic_fields = NULL;
- _nof_implementors = -1;
_loader = loader;
_protection_domain = protection_domain;
_is_shared = false;
@@ -132,17 +128,6 @@ bool ciInstanceKlass::compute_shared_has_subklass() {
)
}
-// ------------------------------------------------------------------
-// ciInstanceKlass::compute_shared_nof_implementors
-int ciInstanceKlass::compute_shared_nof_implementors() {
- // We requery this property, since it is a very old ciObject.
- GUARDED_VM_ENTRY(
- instanceKlass* ik = get_instanceKlass();
- _nof_implementors = ik->nof_implementors();
- return _nof_implementors;
- )
-}
-
// ------------------------------------------------------------------
// ciInstanceKlass::loader
oop ciInstanceKlass::loader() {
@@ -540,7 +525,7 @@ bool ciInstanceKlass::is_leaf_type() {
if (is_shared()) {
return is_final(); // approximately correct
} else {
- return !_has_subklass && (_nof_implementors == 0);
+ return !_has_subklass && (nof_implementors() == 0);
}
}
@@ -548,35 +533,31 @@ bool ciInstanceKlass::is_leaf_type() {
// ciInstanceKlass::implementor
//
// Report an implementor of this interface.
-// Returns NULL if exact information is not available.
// Note that there are various races here, since my copy
// of _nof_implementors might be out of date with respect
// to results returned by instanceKlass::implementor.
// This is OK, since any dependencies we decide to assert
// will be checked later under the Compile_lock.
-ciInstanceKlass* ciInstanceKlass::implementor(int n) {
- if (n >= implementors_limit) {
- return NULL;
- }
- ciInstanceKlass* impl = _implementors[n];
+ciInstanceKlass* ciInstanceKlass::implementor() {
+ ciInstanceKlass* impl = _implementor;
if (impl == NULL) {
- if (_nof_implementors > implementors_limit) {
- return NULL;
- }
// Go into the VM to fetch the implementor.
{
VM_ENTRY_MARK;
- klassOop k = get_instanceKlass()->implementor(n);
+ klassOop k = get_instanceKlass()->implementor();
if (k != NULL) {
- impl = CURRENT_THREAD_ENV->get_object(k)->as_instance_klass();
+ if (k == get_instanceKlass()->as_klassOop()) {
+ // More than one implementors. Use 'this' in this case.
+ impl = this;
+ } else {
+ impl = CURRENT_THREAD_ENV->get_object(k)->as_instance_klass();
+ }
}
}
// Memoize this result.
if (!is_shared()) {
- _implementors[n] = (impl == NULL)? this: impl;
+ _implementor = impl;
}
- } else if (impl == this) {
- impl = NULL; // memoized null result from a VM query
}
return impl;
}
diff --git a/hotspot/src/share/vm/ci/ciInstanceKlass.hpp b/hotspot/src/share/vm/ci/ciInstanceKlass.hpp
index 05ecf87a1e2..f8d0a7bd9eb 100644
--- a/hotspot/src/share/vm/ci/ciInstanceKlass.hpp
+++ b/hotspot/src/share/vm/ci/ciInstanceKlass.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -65,9 +65,11 @@ private:
ciConstantPoolCache* _field_cache; // cached map index->field
GrowableArray* _nonstatic_fields;
- enum { implementors_limit = instanceKlass::implementors_limit };
- ciInstanceKlass* _implementors[implementors_limit];
- jint _nof_implementors;
+ // The possible values of the _implementor fall into following three cases:
+ // NULL: no implementor.
+ // A ciInstanceKlass that's not itself: one implementor.
+ // Itsef: more than one implementors.
+ ciInstanceKlass* _implementor;
GrowableArray* _non_static_fields;
@@ -97,7 +99,6 @@ protected:
void compute_shared_init_state();
bool compute_shared_has_subklass();
- int compute_shared_nof_implementors();
int compute_nonstatic_fields();
GrowableArray* compute_nonstatic_fields_impl(GrowableArray* super_fields);
@@ -158,10 +159,17 @@ public:
assert(is_loaded(), "must be loaded");
return _nonstatic_oop_map_size; }
ciInstanceKlass* super();
- jint nof_implementors() {
+ jint nof_implementors() {
+ ciInstanceKlass* impl;
assert(is_loaded(), "must be loaded");
- if (_is_shared) return compute_shared_nof_implementors();
- return _nof_implementors;
+ impl = implementor();
+ if (impl == NULL) {
+ return 0;
+ } else if (impl != this) {
+ return 1;
+ } else {
+ return 2;
+ }
}
ciInstanceKlass* get_canonical_holder(int offset);
@@ -207,7 +215,7 @@ public:
// but consider adding to vmSymbols.hpp instead.
bool is_leaf_type();
- ciInstanceKlass* implementor(int n);
+ ciInstanceKlass* implementor();
// Is the defining class loader of this class the default loader?
bool uses_default_loader();
diff --git a/hotspot/src/share/vm/classfile/classFileParser.cpp b/hotspot/src/share/vm/classfile/classFileParser.cpp
index 7ace834a086..c7ea5b580aa 100644
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -81,7 +81,7 @@
#define JAVA_7_VERSION 51
-void ClassFileParser::parse_constant_pool_entries(constantPoolHandle cp, int length, TRAPS) {
+void ClassFileParser::parse_constant_pool_entries(Handle class_loader, constantPoolHandle cp, int length, TRAPS) {
// Use a local copy of ClassFileStream. It helps the C++ compiler to optimize
// this function (_current can be allocated in a register, with scalar
// replacement of aggregates). The _current pointer is copied back to
@@ -272,7 +272,7 @@ void ClassFileParser::parse_constant_pool_entries(constantPoolHandle cp, int len
indices[names_count] = index;
hashValues[names_count++] = hash;
if (names_count == SymbolTable::symbol_alloc_batch_size) {
- SymbolTable::new_symbols(cp, names_count, names, lengths, indices, hashValues, CHECK);
+ SymbolTable::new_symbols(class_loader, cp, names_count, names, lengths, indices, hashValues, CHECK);
names_count = 0;
}
} else {
@@ -289,7 +289,7 @@ void ClassFileParser::parse_constant_pool_entries(constantPoolHandle cp, int len
// Allocate the remaining symbols
if (names_count > 0) {
- SymbolTable::new_symbols(cp, names_count, names, lengths, indices, hashValues, CHECK);
+ SymbolTable::new_symbols(class_loader, cp, names_count, names, lengths, indices, hashValues, CHECK);
}
// Copy _current pointer of local copy back to stream().
@@ -318,7 +318,7 @@ class ConstantPoolCleaner : public StackObj {
bool inline valid_cp_range(int index, int length) { return (index > 0 && index < length); }
-constantPoolHandle ClassFileParser::parse_constant_pool(TRAPS) {
+constantPoolHandle ClassFileParser::parse_constant_pool(Handle class_loader, TRAPS) {
ClassFileStream* cfs = stream();
constantPoolHandle nullHandle;
@@ -337,7 +337,7 @@ constantPoolHandle ClassFileParser::parse_constant_pool(TRAPS) {
ConstantPoolCleaner cp_in_error(cp); // set constant pool to be cleaned up.
// parsing constant pool entries
- parse_constant_pool_entries(cp, length, CHECK_(nullHandle));
+ parse_constant_pool_entries(class_loader, cp, length, CHECK_(nullHandle));
int index = 1; // declared outside of loops for portability
@@ -2803,7 +2803,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name,
_relax_verify = Verifier::relax_verify_for(class_loader());
// Constant pool
- constantPoolHandle cp = parse_constant_pool(CHECK_(nullHandle));
+ constantPoolHandle cp = parse_constant_pool(class_loader, CHECK_(nullHandle));
ConstantPoolCleaner error_handler(cp); // set constant pool to be cleaned up.
int cp_size = cp->length();
@@ -3354,6 +3354,7 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name,
klassOop ik = oopFactory::new_instanceKlass(name, vtable_size, itable_size,
static_field_size,
total_oop_map_count,
+ access_flags,
rt, CHECK_(nullHandle));
instanceKlassHandle this_klass (THREAD, ik);
@@ -3362,7 +3363,6 @@ instanceKlassHandle ClassFileParser::parseClassFile(Symbol* name,
"sanity");
// Fill in information already parsed
- this_klass->set_access_flags(access_flags);
this_klass->set_should_verify_class(verify);
jint lh = Klass::instance_layout_helper(instance_size, false);
this_klass->set_layout_helper(lh);
diff --git a/hotspot/src/share/vm/classfile/classFileParser.hpp b/hotspot/src/share/vm/classfile/classFileParser.hpp
index 33f61247893..de781b2fb1f 100644
--- a/hotspot/src/share/vm/classfile/classFileParser.hpp
+++ b/hotspot/src/share/vm/classfile/classFileParser.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -68,9 +68,10 @@ class ClassFileParser VALUE_OBJ_CLASS_SPEC {
void set_stream(ClassFileStream* st) { _stream = st; }
// Constant pool parsing
- void parse_constant_pool_entries(constantPoolHandle cp, int length, TRAPS);
+ void parse_constant_pool_entries(Handle class_loader,
+ constantPoolHandle cp, int length, TRAPS);
- constantPoolHandle parse_constant_pool(TRAPS);
+ constantPoolHandle parse_constant_pool(Handle class_loader, TRAPS);
// Interface parsing
objArrayHandle parse_interfaces(constantPoolHandle cp,
diff --git a/hotspot/src/share/vm/classfile/symbolTable.cpp b/hotspot/src/share/vm/classfile/symbolTable.cpp
index 4dcdc533845..66218822525 100644
--- a/hotspot/src/share/vm/classfile/symbolTable.cpp
+++ b/hotspot/src/share/vm/classfile/symbolTable.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
#include "classfile/symbolTable.hpp"
#include "classfile/systemDictionary.hpp"
#include "gc_interface/collectedHeap.inline.hpp"
+#include "memory/allocation.inline.hpp"
#include "memory/filemap.hpp"
#include "memory/gcLocker.inline.hpp"
#include "oops/oop.inline.hpp"
@@ -37,34 +38,35 @@
// --------------------------------------------------------------------------
SymbolTable* SymbolTable::_the_table = NULL;
+// Static arena for symbols that are not deallocated
+Arena* SymbolTable::_arena = NULL;
-Symbol* SymbolTable::allocate_symbol(const u1* name, int len, TRAPS) {
+Symbol* SymbolTable::allocate_symbol(const u1* name, int len, bool c_heap, TRAPS) {
// Don't allow symbols to be created which cannot fit in a Symbol*.
if (len > Symbol::max_length()) {
THROW_MSG_0(vmSymbols::java_lang_InternalError(),
"name is too long to represent");
}
- Symbol* sym = new (len) Symbol(name, len);
+ Symbol* sym;
+ // Allocate symbols in the C heap when dumping shared spaces in case there
+ // are temporary symbols we can remove.
+ if (c_heap || DumpSharedSpaces) {
+ // refcount starts as 1
+ sym = new (len, THREAD) Symbol(name, len, 1);
+ } else {
+ sym = new (len, arena(), THREAD) Symbol(name, len, -1);
+ }
assert(sym != NULL, "new should call vm_exit_out_of_memory if C_HEAP is exhausted");
return sym;
}
-bool SymbolTable::allocate_symbols(int names_count, const u1** names,
- int* lengths, Symbol** syms, TRAPS) {
- for (int i = 0; i< names_count; i++) {
- if (lengths[i] > Symbol::max_length()) {
- THROW_MSG_0(vmSymbols::java_lang_InternalError(),
- "name is too long to represent");
- }
+void SymbolTable::initialize_symbols(int arena_alloc_size) {
+ // Initialize the arena for global symbols, size passed in depends on CDS.
+ if (arena_alloc_size == 0) {
+ _arena = new Arena();
+ } else {
+ _arena = new Arena(arena_alloc_size);
}
-
- for (int i = 0; i< names_count; i++) {
- int len = lengths[i];
- syms[i] = new (len) Symbol(names[i], len);
- assert(syms[i] != NULL, "new should call vm_exit_out_of_memory if "
- "C_HEAP is exhausted");
- }
- return true;
}
// Call function for all symbols in the symbol table.
@@ -83,8 +85,7 @@ int SymbolTable::symbols_removed = 0;
int SymbolTable::symbols_counted = 0;
// Remove unreferenced symbols from the symbol table
-// This is done late during GC. This doesn't use the hash table unlink because
-// it assumes that the literals are oops.
+// This is done late during GC.
void SymbolTable::unlink() {
int removed = 0;
int total = 0;
@@ -156,7 +157,7 @@ Symbol* SymbolTable::lookup(const char* name, int len, TRAPS) {
if (s != NULL) return s;
// Otherwise, add to symbol to table
- return the_table()->basic_add(index, (u1*)name, len, hashValue, CHECK_NULL);
+ return the_table()->basic_add(index, (u1*)name, len, hashValue, true, CHECK_NULL);
}
Symbol* SymbolTable::lookup(const Symbol* sym, int begin, int end, TRAPS) {
@@ -192,7 +193,7 @@ Symbol* SymbolTable::lookup(const Symbol* sym, int begin, int end, TRAPS) {
// We can't include the code in No_Safepoint_Verifier because of the
// ResourceMark.
- return the_table()->basic_add(index, (u1*)buffer, len, hashValue, CHECK_NULL);
+ return the_table()->basic_add(index, (u1*)buffer, len, hashValue, true, CHECK_NULL);
}
Symbol* SymbolTable::lookup_only(const char* name, int len,
@@ -256,71 +257,81 @@ Symbol* SymbolTable::lookup_only_unicode(const jchar* name, int utf16_length,
}
}
-void SymbolTable::add(constantPoolHandle cp, int names_count,
+void SymbolTable::add(Handle class_loader, constantPoolHandle cp,
+ int names_count,
const char** names, int* lengths, int* cp_indices,
unsigned int* hashValues, TRAPS) {
SymbolTable* table = the_table();
- bool added = table->basic_add(cp, names_count, names, lengths,
+ bool added = table->basic_add(class_loader, cp, names_count, names, lengths,
cp_indices, hashValues, CHECK);
if (!added) {
// do it the hard way
for (int i=0; ihash_to_index(hashValues[i]);
- Symbol* sym = table->basic_add(index, (u1*)names[i], lengths[i],
- hashValues[i], CHECK);
+ bool c_heap = class_loader() != NULL;
+ Symbol* sym = table->basic_add(index, (u1*)names[i], lengths[i], hashValues[i], c_heap, CHECK);
cp->symbol_at_put(cp_indices[i], sym);
}
}
}
+Symbol* SymbolTable::new_permanent_symbol(const char* name, TRAPS) {
+ unsigned int hash;
+ Symbol* result = SymbolTable::lookup_only((char*)name, (int)strlen(name), hash);
+ if (result != NULL) {
+ return result;
+ }
+ SymbolTable* table = the_table();
+ int index = table->hash_to_index(hash);
+ return table->basic_add(index, (u1*)name, (int)strlen(name), hash, false, THREAD);
+}
+
Symbol* SymbolTable::basic_add(int index, u1 *name, int len,
- unsigned int hashValue, TRAPS) {
+ unsigned int hashValue, bool c_heap, TRAPS) {
assert(!Universe::heap()->is_in_reserved(name) || GC_locker::is_active(),
"proposed name of symbol must be stable");
- // We assume that lookup() has been called already, that it failed,
- // and symbol was not found. We create the symbol here.
- Symbol* sym = allocate_symbol(name, len, CHECK_NULL);
-
- // Allocation must be done before grabbing the SymbolTable_lock lock
+ // Grab SymbolTable_lock first.
MutexLocker ml(SymbolTable_lock, THREAD);
- assert(sym->equals((char*)name, len), "symbol must be properly initialized");
-
// Since look-up was done lock-free, we need to check if another
// thread beat us in the race to insert the symbol.
-
Symbol* test = lookup(index, (char*)name, len, hashValue);
if (test != NULL) {
- // A race occurred and another thread introduced the symbol, this one
- // will be dropped and collected.
- delete sym;
+ // A race occurred and another thread introduced the symbol.
assert(test->refcount() != 0, "lookup should have incremented the count");
return test;
}
+ // Create a new symbol.
+ Symbol* sym = allocate_symbol(name, len, c_heap, CHECK_NULL);
+ assert(sym->equals((char*)name, len), "symbol must be properly initialized");
+
HashtableEntry* entry = new_entry(hashValue, sym);
- sym->increment_refcount();
add_entry(index, entry);
return sym;
}
-bool SymbolTable::basic_add(constantPoolHandle cp, int names_count,
+// This version of basic_add adds symbols in batch from the constant pool
+// parsing.
+bool SymbolTable::basic_add(Handle class_loader, constantPoolHandle cp,
+ int names_count,
const char** names, int* lengths,
int* cp_indices, unsigned int* hashValues,
TRAPS) {
- Symbol* syms[symbol_alloc_batch_size];
- bool allocated = allocate_symbols(names_count, (const u1**)names, lengths,
- syms, CHECK_false);
- if (!allocated) {
- return false;
+
+ // Check symbol names are not too long. If any are too long, don't add any.
+ for (int i = 0; i< names_count; i++) {
+ if (lengths[i] > Symbol::max_length()) {
+ THROW_MSG_0(vmSymbols::java_lang_InternalError(),
+ "name is too long to represent");
+ }
}
- // Allocation must be done before grabbing the SymbolTable_lock lock
+ // Hold SymbolTable_lock through the symbol creation
MutexLocker ml(SymbolTable_lock, THREAD);
for (int i=0; iequals(names[i], lengths[i]), "symbol must be properly initialized");
// Since look-up was done lock-free, we need to check if another
// thread beat us in the race to insert the symbol.
int index = hash_to_index(hashValues[i]);
@@ -330,16 +341,17 @@ bool SymbolTable::basic_add(constantPoolHandle cp, int names_count,
// will be dropped and collected. Use test instead.
cp->symbol_at_put(cp_indices[i], test);
assert(test->refcount() != 0, "lookup should have incremented the count");
- delete syms[i];
} else {
- Symbol* sym = syms[i];
+ // Create a new symbol. The null class loader is never unloaded so these
+ // are allocated specially in a permanent arena.
+ bool c_heap = class_loader() != NULL;
+ Symbol* sym = allocate_symbol((const u1*)names[i], lengths[i], c_heap, CHECK_(false));
+ assert(sym->equals(names[i], lengths[i]), "symbol must be properly initialized"); // why wouldn't it be???
HashtableEntry* entry = new_entry(hashValues[i], sym);
- sym->increment_refcount(); // increment refcount in external hashtable
add_entry(index, entry);
cp->symbol_at_put(cp_indices[i], sym);
}
}
-
return true;
}
@@ -406,6 +418,8 @@ void SymbolTable::print_histogram() {
((float)symbols_removed/(float)symbols_counted)* 100);
}
tty->print_cr("Reference counts %5d", Symbol::_total_count);
+ tty->print_cr("Symbol arena size %5d used %5d",
+ arena()->size_in_bytes(), arena()->used());
tty->print_cr("Histogram of symbol length:");
tty->print_cr("%8s %5d", "Total ", total);
tty->print_cr("%8s %5d", "Maximum", max_symbols);
diff --git a/hotspot/src/share/vm/classfile/symbolTable.hpp b/hotspot/src/share/vm/classfile/symbolTable.hpp
index be74fab49d7..3e0777fc7c1 100644
--- a/hotspot/src/share/vm/classfile/symbolTable.hpp
+++ b/hotspot/src/share/vm/classfile/symbolTable.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -82,24 +82,24 @@ private:
static int symbols_removed;
static int symbols_counted;
- Symbol* allocate_symbol(const u1* name, int len, TRAPS); // Assumes no characters larger than 0x7F
- bool allocate_symbols(int names_count, const u1** names, int* lengths, Symbol** syms, TRAPS);
+ Symbol* allocate_symbol(const u1* name, int len, bool c_heap, TRAPS); // Assumes no characters larger than 0x7F
// Adding elements
- Symbol* basic_add(int index, u1* name, int len,
- unsigned int hashValue, TRAPS);
- bool basic_add(constantPoolHandle cp, int names_count,
+ Symbol* basic_add(int index, u1* name, int len, unsigned int hashValue,
+ bool c_heap, TRAPS);
+
+ bool basic_add(Handle class_loader, constantPoolHandle cp, int names_count,
const char** names, int* lengths, int* cp_indices,
unsigned int* hashValues, TRAPS);
- static void new_symbols(constantPoolHandle cp, int names_count,
+ static void new_symbols(Handle class_loader, constantPoolHandle cp,
+ int names_count,
const char** name, int* lengths,
int* cp_indices, unsigned int* hashValues,
TRAPS) {
- add(cp, names_count, name, lengths, cp_indices, hashValues, THREAD);
+ add(class_loader, cp, names_count, name, lengths, cp_indices, hashValues, THREAD);
}
-
// Table size
enum {
symbol_table_size = 20011
@@ -114,10 +114,16 @@ private:
: Hashtable(symbol_table_size, sizeof (HashtableEntry), t,
number_of_entries) {}
+ // Arena for permanent symbols (null class loader) that are never unloaded
+ static Arena* _arena;
+ static Arena* arena() { return _arena; } // called for statistics
+ static void initialize_symbols(int arena_alloc_size = 0);
public:
enum {
- symbol_alloc_batch_size = 8
+ symbol_alloc_batch_size = 8,
+ // Pick initial size based on java -version size measurements
+ symbol_alloc_arena_size = 360*K
};
// The symbol table
@@ -126,6 +132,7 @@ public:
static void create_table() {
assert(_the_table == NULL, "One symbol table allowed.");
_the_table = new SymbolTable();
+ initialize_symbols(symbol_alloc_arena_size);
}
static void create_table(HashtableBucket* t, int length,
@@ -134,6 +141,9 @@ public:
assert(length == symbol_table_size * sizeof(HashtableBucket),
"bad shared symbol size.");
_the_table = new SymbolTable(t, number_of_entries);
+ // if CDS give symbol table a default arena size since most symbols
+ // are already allocated in the shared misc section.
+ initialize_symbols();
}
static Symbol* lookup(const char* name, int len, TRAPS);
@@ -151,7 +161,7 @@ public:
static Symbol* lookup_unicode(const jchar* name, int len, TRAPS);
static Symbol* lookup_only_unicode(const jchar* name, int len, unsigned int& hash);
- static void add(constantPoolHandle cp, int names_count,
+ static void add(Handle class_loader, constantPoolHandle cp, int names_count,
const char** names, int* lengths, int* cp_indices,
unsigned int* hashValues, TRAPS);
@@ -174,6 +184,9 @@ public:
return lookup(sym, begin, end, THREAD);
}
+ // Create a symbol in the arena for symbols that are not deleted
+ static Symbol* new_permanent_symbol(const char* name, TRAPS);
+
// Symbol lookup
static Symbol* lookup(int index, const char* name, int len, TRAPS);
diff --git a/hotspot/src/share/vm/classfile/vmSymbols.cpp b/hotspot/src/share/vm/classfile/vmSymbols.cpp
index a0feab4bdcd..bd321fc0932 100644
--- a/hotspot/src/share/vm/classfile/vmSymbols.cpp
+++ b/hotspot/src/share/vm/classfile/vmSymbols.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -79,7 +79,7 @@ void vmSymbols::initialize(TRAPS) {
if (!UseSharedSpaces) {
const char* string = &vm_symbol_bodies[0];
for (int index = (int)FIRST_SID; index < (int)SID_LIMIT; index++) {
- Symbol* sym = SymbolTable::new_symbol(string, CHECK);
+ Symbol* sym = SymbolTable::new_permanent_symbol(string, CHECK);
_symbols[index] = sym;
string += strlen(string); // skip string body
string += 1; // skip trailing null
@@ -128,7 +128,7 @@ void vmSymbols::initialize(TRAPS) {
// Spot-check correspondence between strings, symbols, and enums:
assert(_symbols[NO_SID] == NULL, "must be");
const char* str = "java/lang/Object";
- TempNewSymbol jlo = SymbolTable::new_symbol(str, CHECK);
+ TempNewSymbol jlo = SymbolTable::new_permanent_symbol(str, CHECK);
assert(strncmp(str, (char*)jlo->base(), jlo->utf8_length()) == 0, "");
assert(jlo == java_lang_Object(), "");
SID sid = VM_SYMBOL_ENUM_NAME(java_lang_Object);
@@ -147,7 +147,7 @@ void vmSymbols::initialize(TRAPS) {
// The string "format" happens (at the moment) not to be a vmSymbol,
// though it is a method name in java.lang.String.
str = "format";
- TempNewSymbol fmt = SymbolTable::new_symbol(str, CHECK);
+ TempNewSymbol fmt = SymbolTable::new_permanent_symbol(str, CHECK);
sid = find_sid(fmt);
assert(sid == NO_SID, "symbol index works (negative test)");
}
diff --git a/hotspot/src/share/vm/classfile/vmSymbols.hpp b/hotspot/src/share/vm/classfile/vmSymbols.hpp
index 92c06342dad..9cee5ac0490 100644
--- a/hotspot/src/share/vm/classfile/vmSymbols.hpp
+++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp
@@ -27,6 +27,7 @@
#include "oops/symbol.hpp"
#include "memory/iterator.hpp"
+#include "trace/traceMacros.hpp"
// The class vmSymbols is a name space for fast lookup of
// symbols commonly used in the VM.
@@ -424,6 +425,7 @@
template(throwable_throwable_signature, "(Ljava/lang/Throwable;)Ljava/lang/Throwable;") \
template(class_void_signature, "(Ljava/lang/Class;)V") \
template(class_int_signature, "(Ljava/lang/Class;)I") \
+ template(class_long_signature, "(Ljava/lang/Class;)J") \
template(class_boolean_signature, "(Ljava/lang/Class;)Z") \
template(throwable_string_void_signature, "(Ljava/lang/Throwable;Ljava/lang/String;)V") \
template(string_array_void_signature, "([Ljava/lang/String;)V") \
@@ -539,10 +541,12 @@
template(serializePropertiesToByteArray_signature, "()[B") \
template(serializeAgentPropertiesToByteArray_name, "serializeAgentPropertiesToByteArray") \
template(classRedefinedCount_name, "classRedefinedCount") \
+ \
+ /* trace signatures */ \
+ TRACE_TEMPLATES(template) \
+ \
/*end*/
-
-
// Here are all the intrinsics known to the runtime and the CI.
// Each intrinsic consists of a public enum name (like _hashCode),
// followed by a specification of its klass, name, and signature:
@@ -648,6 +652,8 @@
do_intrinsic(_nanoTime, java_lang_System, nanoTime_name, void_long_signature, F_S) \
do_name( nanoTime_name, "nanoTime") \
\
+ TRACE_INTRINSICS(do_intrinsic, do_class, do_name, do_signature, do_alias) \
+ \
do_intrinsic(_arraycopy, java_lang_System, arraycopy_name, arraycopy_signature, F_S) \
do_name( arraycopy_name, "arraycopy") \
do_signature(arraycopy_signature, "(Ljava/lang/Object;ILjava/lang/Object;II)V") \
diff --git a/hotspot/src/share/vm/code/dependencies.cpp b/hotspot/src/share/vm/code/dependencies.cpp
index a3fd99ecd45..3d6705680bf 100644
--- a/hotspot/src/share/vm/code/dependencies.cpp
+++ b/hotspot/src/share/vm/code/dependencies.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1033,21 +1033,25 @@ klassOop ClassHierarchyWalker::find_witness_anywhere(klassOop context_type,
// (Old CHA had the same limitation.)
return context_type;
}
- for (int i = 0; i < nof_impls; i++) {
- klassOop impl = instanceKlass::cast(context_type)->implementor(i);
- if (impl == NULL) {
- // implementors array overflowed => no exact info.
+ if (nof_impls > 0) {
+ klassOop impl = instanceKlass::cast(context_type)->implementor();
+ assert(impl != NULL, "just checking");
+ // If impl is the same as the context_type, then more than one
+ // implementor has seen. No exact info in this case.
+ if (impl == context_type) {
return context_type; // report an inexact witness to this sad affair
}
if (do_counts)
{ NOT_PRODUCT(deps_find_witness_steps++); }
if (is_participant(impl)) {
- if (participants_hide_witnesses) continue;
- // else fall through to process this guy's subclasses
+ if (!participants_hide_witnesses) {
+ ADD_SUBCLASS_CHAIN(impl);
+ }
} else if (is_witness(impl) && !ignore_witness(impl)) {
return impl;
+ } else {
+ ADD_SUBCLASS_CHAIN(impl);
}
- ADD_SUBCLASS_CHAIN(impl);
}
// Recursively process each non-trivial sibling chain.
@@ -1174,8 +1178,9 @@ klassOop Dependencies::check_leaf_type(klassOop ctxk) {
} else if (ctx->nof_implementors() != 0) {
// if it is an interface, it must be unimplemented
// (if it is not an interface, nof_implementors is always zero)
- klassOop impl = ctx->implementor(0);
- return (impl != NULL)? impl: ctxk;
+ klassOop impl = ctx->implementor();
+ assert(impl != NULL, "must be set");
+ return impl;
} else {
return NULL;
}
diff --git a/hotspot/src/share/vm/code/nmethod.hpp b/hotspot/src/share/vm/code/nmethod.hpp
index cad0eed1e5d..33f44a919b5 100644
--- a/hotspot/src/share/vm/code/nmethod.hpp
+++ b/hotspot/src/share/vm/code/nmethod.hpp
@@ -553,7 +553,7 @@ public:
static void oops_do_marking_prologue();
static void oops_do_marking_epilogue();
static bool oops_do_marking_is_active() { return _oops_do_mark_nmethods != NULL; }
- DEBUG_ONLY(bool test_oops_do_mark() { return _oops_do_mark_link != NULL; })
+ bool test_oops_do_mark() { return _oops_do_mark_link != NULL; }
// ScopeDesc for an instruction
ScopeDesc* scope_desc_at(address pc);
diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
index 2cb5e2f3cef..4f78ce5dcf7 100644
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -2444,7 +2444,7 @@ class VerifyAllOopsClosure: public OopClosure {
virtual void do_oop(narrowOop* p) { VerifyAllOopsClosure::do_oop_work(p); }
};
-void CompactibleFreeListSpace::verify(bool ignored) const {
+void CompactibleFreeListSpace::verify() const {
assert_lock_strong(&_freelistLock);
verify_objects_initialized();
MemRegion span = _collector->_span;
diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp
index 90d2f5f3918..c8ffba5265f 100644
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -492,7 +492,7 @@ class CompactibleFreeListSpace: public CompactibleSpace {
void print() const;
void print_on(outputStream* st) const;
void prepare_for_verify();
- void verify(bool allow_dirty) const;
+ void verify() const;
void verifyFreeLists() const PRODUCT_RETURN;
void verifyIndexedFreeLists() const;
void verifyIndexedFreeList(size_t size) const;
diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
index ac8ac93ff9e..db8da2846ee 100644
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp
@@ -3109,21 +3109,21 @@ ConcurrentMarkSweepGeneration::prepare_for_verify() {
}
void
-ConcurrentMarkSweepGeneration::verify(bool allow_dirty /* ignored */) {
+ConcurrentMarkSweepGeneration::verify() {
// Locks are normally acquired/released in gc_prologue/gc_epilogue, but those
// are not called when the heap is verified during universe initialization and
// at vm shutdown.
if (freelistLock()->owned_by_self()) {
- cmsSpace()->verify(false /* ignored */);
+ cmsSpace()->verify();
} else {
MutexLockerEx fll(freelistLock(), Mutex::_no_safepoint_check_flag);
- cmsSpace()->verify(false /* ignored */);
+ cmsSpace()->verify();
}
}
-void CMSCollector::verify(bool allow_dirty /* ignored */) {
- _cmsGen->verify(allow_dirty);
- _permGen->verify(allow_dirty);
+void CMSCollector::verify() {
+ _cmsGen->verify();
+ _permGen->verify();
}
#ifndef PRODUCT
diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp
index 440677403fb..a097c5bb3de 100644
--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -988,7 +988,7 @@ class CMSCollector: public CHeapObj {
CMSGCAdaptivePolicyCounters* gc_adaptive_policy_counters();
// debugging
- void verify(bool);
+ void verify();
bool verify_after_remark();
void verify_ok_to_terminate() const PRODUCT_RETURN;
void verify_work_stacks_empty() const PRODUCT_RETURN;
@@ -1279,7 +1279,7 @@ class ConcurrentMarkSweepGeneration: public CardGeneration {
// Debugging
void prepare_for_verify();
- void verify(bool allow_dirty);
+ void verify();
void print_statistics() PRODUCT_RETURN;
// Performance Counters support
diff --git a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp
index 3a383267b08..663011a77b1 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp
@@ -29,102 +29,6 @@
#include "gc_implementation/g1/g1ErgoVerbose.hpp"
#include "memory/space.inline.hpp"
-CSetChooserCache::CSetChooserCache() {
- for (int i = 0; i < CacheLength; ++i)
- _cache[i] = NULL;
- clear();
-}
-
-void CSetChooserCache::clear() {
- _occupancy = 0;
- _first = 0;
- for (int i = 0; i < CacheLength; ++i) {
- HeapRegion *hr = _cache[i];
- if (hr != NULL)
- hr->set_sort_index(-1);
- _cache[i] = NULL;
- }
-}
-
-#ifndef PRODUCT
-bool CSetChooserCache::verify() {
- guarantee(false, "CSetChooserCache::verify(): don't call this any more");
-
- int index = _first;
- HeapRegion *prev = NULL;
- for (int i = 0; i < _occupancy; ++i) {
- guarantee(_cache[index] != NULL, "cache entry should not be empty");
- HeapRegion *hr = _cache[index];
- guarantee(!hr->is_young(), "should not be young!");
- if (prev != NULL) {
- guarantee(prev->gc_efficiency() >= hr->gc_efficiency(),
- "cache should be correctly ordered");
- }
- guarantee(hr->sort_index() == get_sort_index(index),
- "sort index should be correct");
- index = trim_index(index + 1);
- prev = hr;
- }
-
- for (int i = 0; i < (CacheLength - _occupancy); ++i) {
- guarantee(_cache[index] == NULL, "cache entry should be empty");
- index = trim_index(index + 1);
- }
-
- guarantee(index == _first, "we should have reached where we started from");
- return true;
-}
-#endif // PRODUCT
-
-void CSetChooserCache::insert(HeapRegion *hr) {
- guarantee(false, "CSetChooserCache::insert(): don't call this any more");
-
- assert(!is_full(), "cache should not be empty");
- hr->calc_gc_efficiency();
-
- int empty_index;
- if (_occupancy == 0) {
- empty_index = _first;
- } else {
- empty_index = trim_index(_first + _occupancy);
- assert(_cache[empty_index] == NULL, "last slot should be empty");
- int last_index = trim_index(empty_index - 1);
- HeapRegion *last = _cache[last_index];
- assert(last != NULL,"as the cache is not empty, last should not be empty");
- while (empty_index != _first &&
- last->gc_efficiency() < hr->gc_efficiency()) {
- _cache[empty_index] = last;
- last->set_sort_index(get_sort_index(empty_index));
- empty_index = last_index;
- last_index = trim_index(last_index - 1);
- last = _cache[last_index];
- }
- }
- _cache[empty_index] = hr;
- hr->set_sort_index(get_sort_index(empty_index));
-
- ++_occupancy;
- assert(verify(), "cache should be consistent");
-}
-
-HeapRegion *CSetChooserCache::remove_first() {
- guarantee(false, "CSetChooserCache::remove_first(): "
- "don't call this any more");
-
- if (_occupancy > 0) {
- assert(_cache[_first] != NULL, "cache should have at least one region");
- HeapRegion *ret = _cache[_first];
- _cache[_first] = NULL;
- ret->set_sort_index(-1);
- --_occupancy;
- _first = trim_index(_first + 1);
- assert(verify(), "cache should be consistent");
- return ret;
- } else {
- return NULL;
- }
-}
-
// Even though we don't use the GC efficiency in our heuristics as
// much as we used to, we still order according to GC efficiency. This
// will cause regions with a lot of live objects and large RSets to
@@ -134,7 +38,7 @@ HeapRegion *CSetChooserCache::remove_first() {
// the ones we'll skip are ones with both large RSets and a lot of
// live objects, not the ones with just a lot of live objects if we
// ordered according to the amount of reclaimable bytes per region.
-static int orderRegions(HeapRegion* hr1, HeapRegion* hr2) {
+static int order_regions(HeapRegion* hr1, HeapRegion* hr2) {
if (hr1 == NULL) {
if (hr2 == NULL) {
return 0;
@@ -156,8 +60,8 @@ static int orderRegions(HeapRegion* hr1, HeapRegion* hr2) {
}
}
-static int orderRegions(HeapRegion** hr1p, HeapRegion** hr2p) {
- return orderRegions(*hr1p, *hr2p);
+static int order_regions(HeapRegion** hr1p, HeapRegion** hr2p) {
+ return order_regions(*hr1p, *hr2p);
}
CollectionSetChooser::CollectionSetChooser() :
@@ -175,105 +79,74 @@ CollectionSetChooser::CollectionSetChooser() :
//
// Note: containing object is allocated on C heap since it is CHeapObj.
//
- _markedRegions((ResourceObj::set_allocation_type((address)&_markedRegions,
+ _regions((ResourceObj::set_allocation_type((address) &_regions,
ResourceObj::C_HEAP),
100), true /* C_Heap */),
- _curr_index(0), _length(0),
- _regionLiveThresholdBytes(0), _remainingReclaimableBytes(0),
- _first_par_unreserved_idx(0) {
- _regionLiveThresholdBytes =
+ _curr_index(0), _length(0), _first_par_unreserved_idx(0),
+ _region_live_threshold_bytes(0), _remaining_reclaimable_bytes(0) {
+ _region_live_threshold_bytes =
HeapRegion::GrainBytes * (size_t) G1OldCSetRegionLiveThresholdPercent / 100;
}
#ifndef PRODUCT
-bool CollectionSetChooser::verify() {
- guarantee(_length >= 0, err_msg("_length: %d", _length));
- guarantee(0 <= _curr_index && _curr_index <= _length,
- err_msg("_curr_index: %d _length: %d", _curr_index, _length));
- int index = 0;
+void CollectionSetChooser::verify() {
+ guarantee(_length <= regions_length(),
+ err_msg("_length: %u regions length: %u", _length, regions_length()));
+ guarantee(_curr_index <= _length,
+ err_msg("_curr_index: %u _length: %u", _curr_index, _length));
+ uint index = 0;
size_t sum_of_reclaimable_bytes = 0;
while (index < _curr_index) {
- guarantee(_markedRegions.at(index) == NULL,
+ guarantee(regions_at(index) == NULL,
"all entries before _curr_index should be NULL");
index += 1;
}
HeapRegion *prev = NULL;
while (index < _length) {
- HeapRegion *curr = _markedRegions.at(index++);
- guarantee(curr != NULL, "Regions in _markedRegions array cannot be NULL");
- int si = curr->sort_index();
+ HeapRegion *curr = regions_at(index++);
+ guarantee(curr != NULL, "Regions in _regions array cannot be NULL");
guarantee(!curr->is_young(), "should not be young!");
guarantee(!curr->isHumongous(), "should not be humongous!");
- guarantee(si > -1 && si == (index-1), "sort index invariant");
if (prev != NULL) {
- guarantee(orderRegions(prev, curr) != 1,
+ guarantee(order_regions(prev, curr) != 1,
err_msg("GC eff prev: %1.4f GC eff curr: %1.4f",
prev->gc_efficiency(), curr->gc_efficiency()));
}
sum_of_reclaimable_bytes += curr->reclaimable_bytes();
prev = curr;
}
- guarantee(sum_of_reclaimable_bytes == _remainingReclaimableBytes,
+ guarantee(sum_of_reclaimable_bytes == _remaining_reclaimable_bytes,
err_msg("reclaimable bytes inconsistent, "
"remaining: "SIZE_FORMAT" sum: "SIZE_FORMAT,
- _remainingReclaimableBytes, sum_of_reclaimable_bytes));
- return true;
+ _remaining_reclaimable_bytes, sum_of_reclaimable_bytes));
}
-#endif
+#endif // !PRODUCT
-void CollectionSetChooser::fillCache() {
- guarantee(false, "fillCache: don't call this any more");
-
- while (!_cache.is_full() && (_curr_index < _length)) {
- HeapRegion* hr = _markedRegions.at(_curr_index);
- assert(hr != NULL,
- err_msg("Unexpected NULL hr in _markedRegions at index %d",
- _curr_index));
- _curr_index += 1;
- assert(!hr->is_young(), "should not be young!");
- assert(hr->sort_index() == _curr_index-1, "sort_index invariant");
- _markedRegions.at_put(hr->sort_index(), NULL);
- _cache.insert(hr);
- assert(!_cache.is_empty(), "cache should not be empty");
- }
- assert(verify(), "cache should be consistent");
-}
-
-void CollectionSetChooser::sortMarkedHeapRegions() {
+void CollectionSetChooser::sort_regions() {
// First trim any unused portion of the top in the parallel case.
if (_first_par_unreserved_idx > 0) {
- if (G1PrintParCleanupStats) {
- gclog_or_tty->print(" Truncating _markedRegions from %d to %d.\n",
- _markedRegions.length(), _first_par_unreserved_idx);
- }
- assert(_first_par_unreserved_idx <= _markedRegions.length(),
+ assert(_first_par_unreserved_idx <= regions_length(),
"Or we didn't reserved enough length");
- _markedRegions.trunc_to(_first_par_unreserved_idx);
+ regions_trunc_to(_first_par_unreserved_idx);
}
- _markedRegions.sort(orderRegions);
- assert(_length <= _markedRegions.length(), "Requirement");
- assert(_length == 0 || _markedRegions.at(_length - 1) != NULL,
- "Testing _length");
- assert(_length == _markedRegions.length() ||
- _markedRegions.at(_length) == NULL, "Testing _length");
- if (G1PrintParCleanupStats) {
- gclog_or_tty->print_cr(" Sorted %d marked regions.", _length);
- }
- for (int i = 0; i < _length; i++) {
- assert(_markedRegions.at(i) != NULL, "Should be true by sorting!");
- _markedRegions.at(i)->set_sort_index(i);
+ _regions.sort(order_regions);
+ assert(_length <= regions_length(), "Requirement");
+#ifdef ASSERT
+ for (uint i = 0; i < _length; i++) {
+ assert(regions_at(i) != NULL, "Should be true by sorting!");
}
+#endif // ASSERT
if (G1PrintRegionLivenessInfo) {
G1PrintRegionLivenessInfoClosure cl(gclog_or_tty, "Post-Sorting");
- for (int i = 0; i < _length; ++i) {
- HeapRegion* r = _markedRegions.at(i);
+ for (uint i = 0; i < _length; ++i) {
+ HeapRegion* r = regions_at(i);
cl.doHeapRegion(r);
}
}
- assert(verify(), "CSet chooser verification");
+ verify();
}
-size_t CollectionSetChooser::calcMinOldCSetLength() {
+uint CollectionSetChooser::calc_min_old_cset_length() {
// The min old CSet region bound is based on the maximum desired
// number of mixed GCs after a cycle. I.e., even if some old regions
// look expensive, we should add them to the CSet anyway to make
@@ -291,10 +164,10 @@ size_t CollectionSetChooser::calcMinOldCSetLength() {
if (result * gc_num < region_num) {
result += 1;
}
- return result;
+ return (uint) result;
}
-size_t CollectionSetChooser::calcMaxOldCSetLength() {
+uint CollectionSetChooser::calc_max_old_cset_length() {
// The max old CSet region bound is based on the threshold expressed
// as a percentage of the heap size. I.e., it should bound the
// number of old regions added to the CSet irrespective of how many
@@ -308,23 +181,23 @@ size_t CollectionSetChooser::calcMaxOldCSetLength() {
if (100 * result < region_num * perc) {
result += 1;
}
- return result;
+ return (uint) result;
}
-void CollectionSetChooser::addMarkedHeapRegion(HeapRegion* hr) {
+void CollectionSetChooser::add_region(HeapRegion* hr) {
assert(!hr->isHumongous(),
"Humongous regions shouldn't be added to the collection set");
assert(!hr->is_young(), "should not be young!");
- _markedRegions.append(hr);
+ _regions.append(hr);
_length++;
- _remainingReclaimableBytes += hr->reclaimable_bytes();
+ _remaining_reclaimable_bytes += hr->reclaimable_bytes();
hr->calc_gc_efficiency();
}
-void CollectionSetChooser::prepareForAddMarkedHeapRegionsPar(size_t n_regions,
- size_t chunkSize) {
+void CollectionSetChooser::prepare_for_par_region_addition(uint n_regions,
+ uint chunk_size) {
_first_par_unreserved_idx = 0;
- int n_threads = ParallelGCThreads;
+ uint n_threads = (uint) ParallelGCThreads;
if (UseDynamicNumberOfGCThreads) {
assert(G1CollectedHeap::heap()->workers()->active_workers() > 0,
"Should have been set earlier");
@@ -335,57 +208,46 @@ void CollectionSetChooser::prepareForAddMarkedHeapRegionsPar(size_t n_regions,
n_threads = MAX2(G1CollectedHeap::heap()->workers()->active_workers(),
1U);
}
- size_t max_waste = n_threads * chunkSize;
- // it should be aligned with respect to chunkSize
- size_t aligned_n_regions =
- (n_regions + (chunkSize - 1)) / chunkSize * chunkSize;
- assert( aligned_n_regions % chunkSize == 0, "should be aligned" );
- _markedRegions.at_put_grow((int)(aligned_n_regions + max_waste - 1), NULL);
+ uint max_waste = n_threads * chunk_size;
+ // it should be aligned with respect to chunk_size
+ uint aligned_n_regions = (n_regions + chunk_size - 1) / chunk_size * chunk_size;
+ assert(aligned_n_regions % chunk_size == 0, "should be aligned");
+ regions_at_put_grow(aligned_n_regions + max_waste - 1, NULL);
}
-jint CollectionSetChooser::getParMarkedHeapRegionChunk(jint n_regions) {
- // Don't do this assert because this can be called at a point
- // where the loop up stream will not execute again but might
- // try to claim more chunks (loop test has not been done yet).
- // assert(_markedRegions.length() > _first_par_unreserved_idx,
- // "Striding beyond the marked regions");
- jint res = Atomic::add(n_regions, &_first_par_unreserved_idx);
- assert(_markedRegions.length() > res + n_regions - 1,
+uint CollectionSetChooser::claim_array_chunk(uint chunk_size) {
+ uint res = (uint) Atomic::add((jint) chunk_size,
+ (volatile jint*) &_first_par_unreserved_idx);
+ assert(regions_length() > res + chunk_size - 1,
"Should already have been expanded");
- return res - n_regions;
+ return res - chunk_size;
}
-void CollectionSetChooser::setMarkedHeapRegion(jint index, HeapRegion* hr) {
- assert(_markedRegions.at(index) == NULL, "precondition");
+void CollectionSetChooser::set_region(uint index, HeapRegion* hr) {
+ assert(regions_at(index) == NULL, "precondition");
assert(!hr->is_young(), "should not be young!");
- _markedRegions.at_put(index, hr);
+ regions_at_put(index, hr);
hr->calc_gc_efficiency();
}
-void CollectionSetChooser::updateTotals(jint region_num,
- size_t reclaimable_bytes) {
+void CollectionSetChooser::update_totals(uint region_num,
+ size_t reclaimable_bytes) {
// Only take the lock if we actually need to update the totals.
if (region_num > 0) {
assert(reclaimable_bytes > 0, "invariant");
// We could have just used atomics instead of taking the
// lock. However, we currently don't have an atomic add for size_t.
MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
- _length += (int) region_num;
- _remainingReclaimableBytes += reclaimable_bytes;
+ _length += region_num;
+ _remaining_reclaimable_bytes += reclaimable_bytes;
} else {
assert(reclaimable_bytes == 0, "invariant");
}
}
-void CollectionSetChooser::clearMarkedHeapRegions() {
- for (int i = 0; i < _markedRegions.length(); i++) {
- HeapRegion* r = _markedRegions.at(i);
- if (r != NULL) {
- r->set_sort_index(-1);
- }
- }
- _markedRegions.clear();
+void CollectionSetChooser::clear() {
+ _regions.clear();
_curr_index = 0;
_length = 0;
- _remainingReclaimableBytes = 0;
+ _remaining_reclaimable_bytes = 0;
};
diff --git a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp
index 3bf90ebff30..e52476586c5 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp
@@ -28,77 +28,42 @@
#include "gc_implementation/g1/heapRegion.hpp"
#include "utilities/growableArray.hpp"
-class CSetChooserCache VALUE_OBJ_CLASS_SPEC {
-private:
- enum {
- CacheLength = 16
- } PrivateConstants;
-
- HeapRegion* _cache[CacheLength];
- int _occupancy; // number of regions in cache
- int _first; // (index of) "first" region in the cache
-
- // adding CacheLength to deal with negative values
- inline int trim_index(int index) {
- return (index + CacheLength) % CacheLength;
- }
-
- inline int get_sort_index(int index) {
- return -index-2;
- }
- inline int get_index(int sort_index) {
- return -sort_index-2;
- }
-
-public:
- CSetChooserCache(void);
-
- inline int occupancy(void) { return _occupancy; }
- inline bool is_full() { return _occupancy == CacheLength; }
- inline bool is_empty() { return _occupancy == 0; }
-
- void clear(void);
- void insert(HeapRegion *hr);
- HeapRegion *remove_first(void);
- inline HeapRegion *get_first(void) {
- return _cache[_first];
- }
-
-#ifndef PRODUCT
- bool verify (void);
- bool region_in_cache(HeapRegion *hr) {
- int sort_index = hr->sort_index();
- if (sort_index < -1) {
- int index = get_index(sort_index);
- guarantee(index < CacheLength, "should be within bounds");
- return _cache[index] == hr;
- } else
- return 0;
- }
-#endif // PRODUCT
-};
-
class CollectionSetChooser: public CHeapObj {
- GrowableArray _markedRegions;
+ GrowableArray _regions;
+
+ // Unfortunately, GrowableArray uses ints for length and indexes. To
+ // avoid excessive casting in the rest of the class the following
+ // wrapper methods are provided that use uints.
+
+ uint regions_length() { return (uint) _regions.length(); }
+ HeapRegion* regions_at(uint i) { return _regions.at((int) i); }
+ void regions_at_put(uint i, HeapRegion* hr) {
+ _regions.at_put((int) i, hr);
+ }
+ void regions_at_put_grow(uint i, HeapRegion* hr) {
+ _regions.at_put_grow((int) i, hr);
+ }
+ void regions_trunc_to(uint i) { _regions.trunc_to((uint) i); }
// The index of the next candidate old region to be considered for
// addition to the CSet.
- int _curr_index;
+ uint _curr_index;
// The number of candidate old regions added to the CSet chooser.
- int _length;
+ uint _length;
- CSetChooserCache _cache;
- jint _first_par_unreserved_idx;
+ // Keeps track of the start of the next array chunk to be claimed by
+ // parallel GC workers.
+ uint _first_par_unreserved_idx;
// If a region has more live bytes than this threshold, it will not
// be added to the CSet chooser and will not be a candidate for
// collection.
- size_t _regionLiveThresholdBytes;
+ size_t _region_live_threshold_bytes;
// The sum of reclaimable bytes over all the regions in the CSet chooser.
- size_t _remainingReclaimableBytes;
+ size_t _remaining_reclaimable_bytes;
public:
@@ -107,9 +72,9 @@ public:
HeapRegion* peek() {
HeapRegion* res = NULL;
if (_curr_index < _length) {
- res = _markedRegions.at(_curr_index);
+ res = regions_at(_curr_index);
assert(res != NULL,
- err_msg("Unexpected NULL hr in _markedRegions at index %d",
+ err_msg("Unexpected NULL hr in _regions at index %u",
_curr_index));
}
return res;
@@ -121,90 +86,71 @@ public:
void remove_and_move_to_next(HeapRegion* hr) {
assert(hr != NULL, "pre-condition");
assert(_curr_index < _length, "pre-condition");
- assert(_markedRegions.at(_curr_index) == hr, "pre-condition");
- hr->set_sort_index(-1);
- _markedRegions.at_put(_curr_index, NULL);
- assert(hr->reclaimable_bytes() <= _remainingReclaimableBytes,
+ assert(regions_at(_curr_index) == hr, "pre-condition");
+ regions_at_put(_curr_index, NULL);
+ assert(hr->reclaimable_bytes() <= _remaining_reclaimable_bytes,
err_msg("remaining reclaimable bytes inconsistent "
"from region: "SIZE_FORMAT" remaining: "SIZE_FORMAT,
- hr->reclaimable_bytes(), _remainingReclaimableBytes));
- _remainingReclaimableBytes -= hr->reclaimable_bytes();
+ hr->reclaimable_bytes(), _remaining_reclaimable_bytes));
+ _remaining_reclaimable_bytes -= hr->reclaimable_bytes();
_curr_index += 1;
}
CollectionSetChooser();
- void sortMarkedHeapRegions();
- void fillCache();
+ void sort_regions();
// Determine whether to add the given region to the CSet chooser or
// not. Currently, we skip humongous regions (we never add them to
// the CSet, we only reclaim them during cleanup) and regions whose
// live bytes are over the threshold.
- bool shouldAdd(HeapRegion* hr) {
+ bool should_add(HeapRegion* hr) {
assert(hr->is_marked(), "pre-condition");
assert(!hr->is_young(), "should never consider young regions");
return !hr->isHumongous() &&
- hr->live_bytes() < _regionLiveThresholdBytes;
+ hr->live_bytes() < _region_live_threshold_bytes;
}
// Calculate the minimum number of old regions we'll add to the CSet
// during a mixed GC.
- size_t calcMinOldCSetLength();
+ uint calc_min_old_cset_length();
// Calculate the maximum number of old regions we'll add to the CSet
// during a mixed GC.
- size_t calcMaxOldCSetLength();
+ uint calc_max_old_cset_length();
// Serial version.
- void addMarkedHeapRegion(HeapRegion *hr);
+ void add_region(HeapRegion *hr);
- // Must be called before calls to getParMarkedHeapRegionChunk.
- // "n_regions" is the number of regions, "chunkSize" the chunk size.
- void prepareForAddMarkedHeapRegionsPar(size_t n_regions, size_t chunkSize);
- // Returns the first index in a contiguous chunk of "n_regions" indexes
+ // Must be called before calls to claim_array_chunk().
+ // n_regions is the number of regions, chunk_size the chunk size.
+ void prepare_for_par_region_addition(uint n_regions, uint chunk_size);
+ // Returns the first index in a contiguous chunk of chunk_size indexes
// that the calling thread has reserved. These must be set by the
- // calling thread using "setMarkedHeapRegion" (to NULL if necessary).
- jint getParMarkedHeapRegionChunk(jint n_regions);
+ // calling thread using set_region() (to NULL if necessary).
+ uint claim_array_chunk(uint chunk_size);
// Set the marked array entry at index to hr. Careful to claim the index
// first if in parallel.
- void setMarkedHeapRegion(jint index, HeapRegion* hr);
+ void set_region(uint index, HeapRegion* hr);
// Atomically increment the number of added regions by region_num
// and the amount of reclaimable bytes by reclaimable_bytes.
- void updateTotals(jint region_num, size_t reclaimable_bytes);
+ void update_totals(uint region_num, size_t reclaimable_bytes);
- void clearMarkedHeapRegions();
+ void clear();
// Return the number of candidate regions that remain to be collected.
- size_t remainingRegions() { return _length - _curr_index; }
+ uint remaining_regions() { return _length - _curr_index; }
// Determine whether the CSet chooser has more candidate regions or not.
- bool isEmpty() { return remainingRegions() == 0; }
+ bool is_empty() { return remaining_regions() == 0; }
// Return the reclaimable bytes that remain to be collected on
// all the candidate regions in the CSet chooser.
- size_t remainingReclaimableBytes () { return _remainingReclaimableBytes; }
+ size_t remaining_reclaimable_bytes() { return _remaining_reclaimable_bytes; }
- // Returns true if the used portion of "_markedRegions" is properly
+ // Returns true if the used portion of "_regions" is properly
// sorted, otherwise asserts false.
-#ifndef PRODUCT
- bool verify(void);
- bool regionProperlyOrdered(HeapRegion* r) {
- int si = r->sort_index();
- if (si > -1) {
- guarantee(_curr_index <= si && si < _length,
- err_msg("curr: %d sort index: %d: length: %d",
- _curr_index, si, _length));
- guarantee(_markedRegions.at(si) == r,
- err_msg("sort index: %d at: "PTR_FORMAT" r: "PTR_FORMAT,
- si, _markedRegions.at(si), r));
- } else {
- guarantee(si == -1, err_msg("sort index: %d", si));
- }
- return true;
- }
-#endif
-
+ void verify() PRODUCT_RETURN;
};
#endif // SHARE_VM_GC_IMPLEMENTATION_G1_COLLECTIONSETCHOOSER_HPP
diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
index 001f94e161e..ba29b3120db 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp
@@ -29,6 +29,7 @@
#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
#include "gc_implementation/g1/g1CollectorPolicy.hpp"
#include "gc_implementation/g1/g1ErgoVerbose.hpp"
+#include "gc_implementation/g1/g1Log.hpp"
#include "gc_implementation/g1/g1OopClosures.inline.hpp"
#include "gc_implementation/g1/g1RemSet.hpp"
#include "gc_implementation/g1/heapRegion.inline.hpp"
@@ -103,16 +104,6 @@ int CMBitMapRO::heapWordDiffToOffsetDiff(size_t diff) const {
return (int) (diff >> _shifter);
}
-void CMBitMapRO::mostly_disjoint_range_union(BitMap* from_bitmap,
- size_t from_start_index,
- HeapWord* to_start_word,
- size_t word_num) {
- _bm.mostly_disjoint_range_union(from_bitmap,
- from_start_index,
- heapWordToOffset(to_start_word),
- word_num);
-}
-
#ifndef PRODUCT
bool CMBitMapRO::covers(ReservedSpace rs) const {
// assert(_bm.map() == _virtual_space.low(), "map inconsistency");
@@ -271,140 +262,6 @@ bool CMMarkStack::par_pop_arr(oop* ptr_arr, int max, int* n) {
}
}
-CMRegionStack::CMRegionStack() : _base(NULL) {}
-
-void CMRegionStack::allocate(size_t size) {
- _base = NEW_C_HEAP_ARRAY(MemRegion, size);
- if (_base == NULL) {
- vm_exit_during_initialization("Failed to allocate CM region mark stack");
- }
- _index = 0;
- _capacity = (jint) size;
-}
-
-CMRegionStack::~CMRegionStack() {
- if (_base != NULL) {
- FREE_C_HEAP_ARRAY(oop, _base);
- }
-}
-
-void CMRegionStack::push_lock_free(MemRegion mr) {
- guarantee(false, "push_lock_free(): don't call this any more");
-
- assert(mr.word_size() > 0, "Precondition");
- while (true) {
- jint index = _index;
-
- if (index >= _capacity) {
- _overflow = true;
- return;
- }
- // Otherwise...
- jint next_index = index+1;
- jint res = Atomic::cmpxchg(next_index, &_index, index);
- if (res == index) {
- _base[index] = mr;
- return;
- }
- // Otherwise, we need to try again.
- }
-}
-
-// Lock-free pop of the region stack. Called during the concurrent
-// marking / remark phases. Should only be called in tandem with
-// other lock-free pops.
-MemRegion CMRegionStack::pop_lock_free() {
- guarantee(false, "pop_lock_free(): don't call this any more");
-
- while (true) {
- jint index = _index;
-
- if (index == 0) {
- return MemRegion();
- }
- // Otherwise...
- jint next_index = index-1;
- jint res = Atomic::cmpxchg(next_index, &_index, index);
- if (res == index) {
- MemRegion mr = _base[next_index];
- if (mr.start() != NULL) {
- assert(mr.end() != NULL, "invariant");
- assert(mr.word_size() > 0, "invariant");
- return mr;
- } else {
- // that entry was invalidated... let's skip it
- assert(mr.end() == NULL, "invariant");
- }
- }
- // Otherwise, we need to try again.
- }
-}
-
-#if 0
-// The routines that manipulate the region stack with a lock are
-// not currently used. They should be retained, however, as a
-// diagnostic aid.
-
-void CMRegionStack::push_with_lock(MemRegion mr) {
- assert(mr.word_size() > 0, "Precondition");
- MutexLockerEx x(CMRegionStack_lock, Mutex::_no_safepoint_check_flag);
-
- if (isFull()) {
- _overflow = true;
- return;
- }
-
- _base[_index] = mr;
- _index += 1;
-}
-
-MemRegion CMRegionStack::pop_with_lock() {
- MutexLockerEx x(CMRegionStack_lock, Mutex::_no_safepoint_check_flag);
-
- while (true) {
- if (_index == 0) {
- return MemRegion();
- }
- _index -= 1;
-
- MemRegion mr = _base[_index];
- if (mr.start() != NULL) {
- assert(mr.end() != NULL, "invariant");
- assert(mr.word_size() > 0, "invariant");
- return mr;
- } else {
- // that entry was invalidated... let's skip it
- assert(mr.end() == NULL, "invariant");
- }
- }
-}
-#endif
-
-bool CMRegionStack::invalidate_entries_into_cset() {
- guarantee(false, "invalidate_entries_into_cset(): don't call this any more");
-
- bool result = false;
- G1CollectedHeap* g1h = G1CollectedHeap::heap();
- for (int i = 0; i < _oops_do_bound; ++i) {
- MemRegion mr = _base[i];
- if (mr.start() != NULL) {
- assert(mr.end() != NULL, "invariant");
- assert(mr.word_size() > 0, "invariant");
- HeapRegion* hr = g1h->heap_region_containing(mr.start());
- assert(hr != NULL, "invariant");
- if (hr->in_collection_set()) {
- // The region points into the collection set
- _base[i] = MemRegion();
- result = true;
- }
- } else {
- // that entry was invalidated... let's skip it
- assert(mr.end() == NULL, "invariant");
- }
- }
- return result;
-}
-
template
bool CMMarkStack::drain(OopClosureClass* cl, CMBitMap* bm, bool yield_after) {
assert(!_drain_in_progress || !_drain_in_progress_yields || yield_after
@@ -546,8 +403,7 @@ uint ConcurrentMark::scale_parallel_threads(uint n_par_threads) {
return MAX2((n_par_threads + 2) / 4, 1U);
}
-ConcurrentMark::ConcurrentMark(ReservedSpace rs,
- int max_regions) :
+ConcurrentMark::ConcurrentMark(ReservedSpace rs, uint max_regions) :
_markBitMap1(rs, MinObjAlignment - 1),
_markBitMap2(rs, MinObjAlignment - 1),
@@ -558,17 +414,15 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs,
_cleanup_sleep_factor(0.0),
_cleanup_task_overhead(1.0),
_cleanup_list("Cleanup List"),
- _region_bm(max_regions, false /* in_resource_area*/),
+ _region_bm((BitMap::idx_t) max_regions, false /* in_resource_area*/),
_card_bm((rs.size() + CardTableModRefBS::card_size - 1) >>
CardTableModRefBS::card_shift,
false /* in_resource_area*/),
_prevMarkBitMap(&_markBitMap1),
_nextMarkBitMap(&_markBitMap2),
- _at_least_one_mark_complete(false),
_markStack(this),
- _regionStack(),
// _finger set in set_non_marking_state
_max_task_num(MAX2((uint)ParallelGCThreads, 1U)),
@@ -582,7 +436,6 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs,
_has_aborted(false),
_restart_for_overflow(false),
_concurrent_marking_in_progress(false),
- _should_gray_objects(false),
// _verbose_level set below
@@ -611,7 +464,6 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs,
}
_markStack.allocate(MarkStackSize);
- _regionStack.allocate(G1MarkRegionStackSize);
// Create & start a ConcurrentMark thread.
_cmThread = new ConcurrentMarkThread(this);
@@ -644,7 +496,7 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs,
_task_queues->register_queue(i, task_queue);
_count_card_bitmaps[i] = BitMap(card_bm_size, false);
- _count_marked_bytes[i] = NEW_C_HEAP_ARRAY(size_t, max_regions);
+ _count_marked_bytes[i] = NEW_C_HEAP_ARRAY(size_t, (size_t) max_regions);
_tasks[i] = new CMTask(i, this,
_count_marked_bytes[i],
@@ -744,15 +596,7 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs,
void ConcurrentMark::update_g1_committed(bool force) {
// If concurrent marking is not in progress, then we do not need to
- // update _heap_end. This has a subtle and important
- // side-effect. Imagine that two evacuation pauses happen between
- // marking completion and remark. The first one can grow the
- // heap (hence now the finger is below the heap end). Then, the
- // second one could unnecessarily push regions on the region
- // stack. This causes the invariant that the region stack is empty
- // at the beginning of remark to be false. By ensuring that we do
- // not observe heap expansions after marking is complete, then we do
- // not have this problem.
+ // update _heap_end.
if (!concurrent_marking_in_progress() && !force) return;
MemRegion committed = _g1h->g1_committed();
@@ -1002,7 +846,7 @@ void ConcurrentMark::enter_first_sync_barrier(int task_num) {
clear_marking_state(concurrent() /* clear_overflow */);
force_overflow()->update();
- if (PrintGC) {
+ if (G1Log::fine()) {
gclog_or_tty->date_stamp(PrintGCDateStamps);
gclog_or_tty->stamp(PrintGCTimeStamps);
gclog_or_tty->print_cr("[GC concurrent-mark-reset-for-overflow]");
@@ -1058,86 +902,6 @@ bool ForceOverflowSettings::should_force() {
}
#endif // !PRODUCT
-void ConcurrentMark::grayRegionIfNecessary(MemRegion mr) {
- guarantee(false, "grayRegionIfNecessary(): don't call this any more");
-
- // The objects on the region have already been marked "in bulk" by
- // the caller. We only need to decide whether to push the region on
- // the region stack or not.
-
- if (!concurrent_marking_in_progress() || !_should_gray_objects) {
- // We're done with marking and waiting for remark. We do not need to
- // push anything else on the region stack.
- return;
- }
-
- HeapWord* finger = _finger;
-
- if (verbose_low()) {
- gclog_or_tty->print_cr("[global] attempting to push "
- "region ["PTR_FORMAT", "PTR_FORMAT"), finger is at "
- PTR_FORMAT, mr.start(), mr.end(), finger);
- }
-
- if (mr.start() < finger) {
- // The finger is always heap region aligned and it is not possible
- // for mr to span heap regions.
- assert(mr.end() <= finger, "invariant");
-
- // Separated the asserts so that we know which one fires.
- assert(mr.start() <= mr.end(),
- "region boundaries should fall within the committed space");
- assert(_heap_start <= mr.start(),
- "region boundaries should fall within the committed space");
- assert(mr.end() <= _heap_end,
- "region boundaries should fall within the committed space");
- if (verbose_low()) {
- gclog_or_tty->print_cr("[global] region ["PTR_FORMAT", "PTR_FORMAT") "
- "below the finger, pushing it",
- mr.start(), mr.end());
- }
-
- if (!region_stack_push_lock_free(mr)) {
- if (verbose_low()) {
- gclog_or_tty->print_cr("[global] region stack has overflown.");
- }
- }
- }
-}
-
-void ConcurrentMark::markAndGrayObjectIfNecessary(oop p) {
- guarantee(false, "markAndGrayObjectIfNecessary(): don't call this any more");
-
- // The object is not marked by the caller. We need to at least mark
- // it and maybe push in on the stack.
-
- HeapWord* addr = (HeapWord*)p;
- if (!_nextMarkBitMap->isMarked(addr)) {
- // We definitely need to mark it, irrespective whether we bail out
- // because we're done with marking.
- if (_nextMarkBitMap->parMark(addr)) {
- if (!concurrent_marking_in_progress() || !_should_gray_objects) {
- // If we're done with concurrent marking and we're waiting for
- // remark, then we're not pushing anything on the stack.
- return;
- }
-
- // No OrderAccess:store_load() is needed. It is implicit in the
- // CAS done in parMark(addr) above
- HeapWord* finger = _finger;
-
- if (addr < finger) {
- if (!mark_stack_push(oop(addr))) {
- if (verbose_low()) {
- gclog_or_tty->print_cr("[global] global stack overflow "
- "during parMark");
- }
- }
- }
- }
- }
-}
-
class CMConcurrentMarkingTask: public AbstractGangTask {
private:
ConcurrentMark* _cm;
@@ -1355,8 +1119,7 @@ void ConcurrentMark::checkpointRootsFinal(bool clear_all_soft_refs) {
HandleMark hm; // handle scope
gclog_or_tty->print(" VerifyDuringGC:(before)");
Universe::heap()->prepare_for_verify();
- Universe::verify(/* allow dirty */ true,
- /* silent */ false,
+ Universe::verify(/* silent */ false,
/* option */ VerifyOption_G1UsePrevMarking);
}
@@ -1395,8 +1158,7 @@ void ConcurrentMark::checkpointRootsFinal(bool clear_all_soft_refs) {
HandleMark hm; // handle scope
gclog_or_tty->print(" VerifyDuringGC:(after)");
Universe::heap()->prepare_for_verify();
- Universe::verify(/* allow dirty */ true,
- /* silent */ false,
+ Universe::verify(/* silent */ false,
/* option */ VerifyOption_G1UseNextMarking);
}
assert(!restart_for_overflow(), "sanity");
@@ -1430,11 +1192,6 @@ class CalcLiveObjectsClosure: public HeapRegionClosure {
BitMap* _region_bm;
BitMap* _card_bm;
- // Debugging
- size_t _tot_words_done;
- size_t _tot_live;
- size_t _tot_used;
-
size_t _region_marked_bytes;
intptr_t _bottom_card_num;
@@ -1453,9 +1210,7 @@ public:
CalcLiveObjectsClosure(CMBitMapRO *bm, ConcurrentMark *cm,
BitMap* region_bm, BitMap* card_bm) :
_bm(bm), _cm(cm), _region_bm(region_bm), _card_bm(card_bm),
- _region_marked_bytes(0), _tot_words_done(0),
- _tot_live(0), _tot_used(0),
- _bottom_card_num(cm->heap_bottom_card_num()) { }
+ _region_marked_bytes(0), _bottom_card_num(cm->heap_bottom_card_num()) { }
// It takes a region that's not empty (i.e., it has at least one
// live object in it and sets its corresponding bit on the region
@@ -1465,18 +1220,17 @@ public:
void set_bit_for_region(HeapRegion* hr) {
assert(!hr->continuesHumongous(), "should have filtered those out");
- size_t index = hr->hrs_index();
+ BitMap::idx_t index = (BitMap::idx_t) hr->hrs_index();
if (!hr->startsHumongous()) {
// Normal (non-humongous) case: just set the bit.
- _region_bm->par_at_put((BitMap::idx_t) index, true);
+ _region_bm->par_at_put(index, true);
} else {
// Starts humongous case: calculate how many regions are part of
// this humongous region and then set the bit range.
G1CollectedHeap* g1h = G1CollectedHeap::heap();
HeapRegion *last_hr = g1h->heap_region_containing_raw(hr->end() - 1);
- size_t end_index = last_hr->hrs_index() + 1;
- _region_bm->par_at_put_range((BitMap::idx_t) index,
- (BitMap::idx_t) end_index, true);
+ BitMap::idx_t end_index = (BitMap::idx_t) last_hr->hrs_index() + 1;
+ _region_bm->par_at_put_range(index, end_index, true);
}
}
@@ -1501,9 +1255,6 @@ public:
"start: "PTR_FORMAT", nextTop: "PTR_FORMAT", end: "PTR_FORMAT,
start, nextTop, hr->end()));
- // Record the number of word's we'll examine.
- size_t words_done = (nextTop - start);
-
// Find the first marked object at or after "start".
start = _bm->getNextMarkedWordAddress(start, nextTop);
@@ -1582,19 +1333,10 @@ public:
// it can be queried by a calling verificiation routine
_region_marked_bytes = marked_bytes;
- _tot_live += hr->next_live_bytes();
- _tot_used += hr->used();
- _tot_words_done = words_done;
-
return false;
}
size_t region_marked_bytes() const { return _region_marked_bytes; }
-
- // Debugging
- size_t tot_words_done() const { return _tot_words_done; }
- size_t tot_live() const { return _tot_live; }
- size_t tot_used() const { return _tot_used; }
};
// Heap region closure used for verifying the counting data
@@ -1655,7 +1397,7 @@ public:
// Verify that _top_at_conc_count == ntams
if (hr->top_at_conc_mark_count() != hr->next_top_at_mark_start()) {
if (_verbose) {
- gclog_or_tty->print_cr("Region " SIZE_FORMAT ": top at conc count incorrect: "
+ gclog_or_tty->print_cr("Region %u: top at conc count incorrect: "
"expected " PTR_FORMAT ", actual: " PTR_FORMAT,
hr->hrs_index(), hr->next_top_at_mark_start(),
hr->top_at_conc_mark_count());
@@ -1671,7 +1413,7 @@ public:
// we have missed accounting some objects during the actual marking.
if (exp_marked_bytes > act_marked_bytes) {
if (_verbose) {
- gclog_or_tty->print_cr("Region " SIZE_FORMAT ": marked bytes mismatch: "
+ gclog_or_tty->print_cr("Region %u: marked bytes mismatch: "
"expected: " SIZE_FORMAT ", actual: " SIZE_FORMAT,
hr->hrs_index(), exp_marked_bytes, act_marked_bytes);
}
@@ -1682,15 +1424,16 @@ public:
// (which was just calculated) region bit maps.
// We're not OK if the bit in the calculated expected region
// bitmap is set and the bit in the actual region bitmap is not.
- BitMap::idx_t index = (BitMap::idx_t)hr->hrs_index();
+ BitMap::idx_t index = (BitMap::idx_t) hr->hrs_index();
bool expected = _exp_region_bm->at(index);
bool actual = _region_bm->at(index);
if (expected && !actual) {
if (_verbose) {
- gclog_or_tty->print_cr("Region " SIZE_FORMAT ": region bitmap mismatch: "
- "expected: %d, actual: %d",
- hr->hrs_index(), expected, actual);
+ gclog_or_tty->print_cr("Region %u: region bitmap mismatch: "
+ "expected: %s, actual: %s",
+ hr->hrs_index(),
+ BOOL_TO_STR(expected), BOOL_TO_STR(actual));
}
failures += 1;
}
@@ -1708,9 +1451,10 @@ public:
if (expected && !actual) {
if (_verbose) {
- gclog_or_tty->print_cr("Region " SIZE_FORMAT ": card bitmap mismatch at " SIZE_FORMAT ": "
- "expected: %d, actual: %d",
- hr->hrs_index(), i, expected, actual);
+ gclog_or_tty->print_cr("Region %u: card bitmap mismatch at " SIZE_FORMAT ": "
+ "expected: %s, actual: %s",
+ hr->hrs_index(), i,
+ BOOL_TO_STR(expected), BOOL_TO_STR(actual));
}
failures += 1;
}
@@ -1811,10 +1555,6 @@ class FinalCountDataUpdateClosure: public HeapRegionClosure {
BitMap* _region_bm;
BitMap* _card_bm;
- size_t _total_live_bytes;
- size_t _total_used_bytes;
- size_t _total_words_done;
-
void set_card_bitmap_range(BitMap::idx_t start_idx, BitMap::idx_t last_idx) {
assert(start_idx <= last_idx, "sanity");
@@ -1840,18 +1580,17 @@ class FinalCountDataUpdateClosure: public HeapRegionClosure {
void set_bit_for_region(HeapRegion* hr) {
assert(!hr->continuesHumongous(), "should have filtered those out");
- size_t index = hr->hrs_index();
+ BitMap::idx_t index = (BitMap::idx_t) hr->hrs_index();
if (!hr->startsHumongous()) {
// Normal (non-humongous) case: just set the bit.
- _region_bm->par_set_bit((BitMap::idx_t) index);
+ _region_bm->par_set_bit(index);
} else {
// Starts humongous case: calculate how many regions are part of
// this humongous region and then set the bit range.
G1CollectedHeap* g1h = G1CollectedHeap::heap();
HeapRegion *last_hr = g1h->heap_region_containing_raw(hr->end() - 1);
- size_t end_index = last_hr->hrs_index() + 1;
- _region_bm->par_at_put_range((BitMap::idx_t) index,
- (BitMap::idx_t) end_index, true);
+ BitMap::idx_t end_index = (BitMap::idx_t) last_hr->hrs_index() + 1;
+ _region_bm->par_at_put_range(index, end_index, true);
}
}
@@ -1859,8 +1598,7 @@ class FinalCountDataUpdateClosure: public HeapRegionClosure {
FinalCountDataUpdateClosure(ConcurrentMark* cm,
BitMap* region_bm,
BitMap* card_bm) :
- _cm(cm), _region_bm(region_bm), _card_bm(card_bm),
- _total_words_done(0), _total_live_bytes(0), _total_used_bytes(0) { }
+ _cm(cm), _region_bm(region_bm), _card_bm(card_bm) { }
bool doHeapRegion(HeapRegion* hr) {
@@ -1882,8 +1620,6 @@ class FinalCountDataUpdateClosure: public HeapRegionClosure {
assert(hr->bottom() <= start && start <= hr->end() &&
hr->bottom() <= ntams && ntams <= hr->end(), "Preconditions.");
- size_t words_done = ntams - hr->bottom();
-
if (start < ntams) {
// Region was changed between remark and cleanup pauses
// We need to add (ntams - start) to the marked bytes
@@ -1914,16 +1650,8 @@ class FinalCountDataUpdateClosure: public HeapRegionClosure {
set_bit_for_region(hr);
}
- _total_words_done += words_done;
- _total_used_bytes += hr->used();
- _total_live_bytes += hr->next_marked_bytes();
-
return false;
}
-
- size_t total_words_done() const { return _total_words_done; }
- size_t total_live_bytes() const { return _total_live_bytes; }
- size_t total_used_bytes() const { return _total_used_bytes; }
};
class G1ParFinalCountTask: public AbstractGangTask {
@@ -1935,9 +1663,6 @@ protected:
uint _n_workers;
- size_t *_live_bytes;
- size_t *_used_bytes;
-
public:
G1ParFinalCountTask(G1CollectedHeap* g1h, BitMap* region_bm, BitMap* card_bm)
: AbstractGangTask("G1 final counting"),
@@ -1945,8 +1670,7 @@ public:
_actual_region_bm(region_bm), _actual_card_bm(card_bm),
_n_workers(0) {
// Use the value already set as the number of active threads
- // in the call to run_task(). Needed for the allocation of
- // _live_bytes and _used_bytes.
+ // in the call to run_task().
if (G1CollectedHeap::use_parallel_gc_threads()) {
assert( _g1h->workers()->active_workers() > 0,
"Should have been previously set");
@@ -1954,14 +1678,6 @@ public:
} else {
_n_workers = 1;
}
-
- _live_bytes = NEW_C_HEAP_ARRAY(size_t, _n_workers);
- _used_bytes = NEW_C_HEAP_ARRAY(size_t, _n_workers);
- }
-
- ~G1ParFinalCountTask() {
- FREE_C_HEAP_ARRAY(size_t, _live_bytes);
- FREE_C_HEAP_ARRAY(size_t, _used_bytes);
}
void work(uint worker_id) {
@@ -1979,23 +1695,6 @@ public:
} else {
_g1h->heap_region_iterate(&final_update_cl);
}
-
- _live_bytes[worker_id] = final_update_cl.total_live_bytes();
- _used_bytes[worker_id] = final_update_cl.total_used_bytes();
- }
-
- size_t live_bytes() {
- size_t live_bytes = 0;
- for (uint i = 0; i < _n_workers; ++i)
- live_bytes += _live_bytes[i];
- return live_bytes;
- }
-
- size_t used_bytes() {
- size_t used_bytes = 0;
- for (uint i = 0; i < _n_workers; ++i)
- used_bytes += _used_bytes[i];
- return used_bytes;
}
};
@@ -2005,7 +1704,7 @@ class G1NoteEndOfConcMarkClosure : public HeapRegionClosure {
G1CollectedHeap* _g1;
int _worker_num;
size_t _max_live_bytes;
- size_t _regions_claimed;
+ uint _regions_claimed;
size_t _freed_bytes;
FreeRegionList* _local_cleanup_list;
OldRegionSet* _old_proxy_set;
@@ -2058,7 +1757,7 @@ public:
}
size_t max_live_bytes() { return _max_live_bytes; }
- size_t regions_claimed() { return _regions_claimed; }
+ uint regions_claimed() { return _regions_claimed; }
double claimed_region_time_sec() { return _claimed_region_time; }
double max_region_time_sec() { return _max_region_time; }
};
@@ -2130,15 +1829,6 @@ public:
HeapRegionRemSet::finish_cleanup_task(&hrrs_cleanup_task);
}
- double end = os::elapsedTime();
- if (G1PrintParCleanupStats) {
- gclog_or_tty->print(" Worker thread %d [%8.3f..%8.3f = %8.3f ms] "
- "claimed %u regions (tot = %8.3f ms, max = %8.3f ms).\n",
- worker_id, start, end, (end-start)*1000.0,
- g1_note_end.regions_claimed(),
- g1_note_end.claimed_region_time_sec()*1000.0,
- g1_note_end.max_region_time_sec()*1000.0);
- }
}
size_t max_live_bytes() { return _max_live_bytes; }
size_t freed_bytes() { return _freed_bytes; }
@@ -2185,8 +1875,7 @@ void ConcurrentMark::cleanup() {
HandleMark hm; // handle scope
gclog_or_tty->print(" VerifyDuringGC:(before)");
Universe::heap()->prepare_for_verify();
- Universe::verify(/* allow dirty */ true,
- /* silent */ false,
+ Universe::verify(/* silent */ false,
/* option */ VerifyOption_G1UsePrevMarking);
}
@@ -2250,30 +1939,11 @@ void ConcurrentMark::cleanup() {
guarantee(g1_par_verify_task.failures() == 0, "Unexpected accounting failures");
}
- size_t known_garbage_bytes =
- g1_par_count_task.used_bytes() - g1_par_count_task.live_bytes();
- g1p->set_known_garbage_bytes(known_garbage_bytes);
-
size_t start_used_bytes = g1h->used();
- _at_least_one_mark_complete = true;
g1h->set_marking_complete();
- ergo_verbose4(ErgoConcCycles,
- "finish cleanup",
- ergo_format_byte("occupancy")
- ergo_format_byte("capacity")
- ergo_format_byte_perc("known garbage"),
- start_used_bytes, g1h->capacity(),
- known_garbage_bytes,
- ((double) known_garbage_bytes / (double) g1h->capacity()) * 100.0);
-
double count_end = os::elapsedTime();
double this_final_counting_time = (count_end - start);
- if (G1PrintParCleanupStats) {
- gclog_or_tty->print_cr("Cleanup:");
- gclog_or_tty->print_cr(" Finalize counting: %8.3f ms",
- this_final_counting_time*1000.0);
- }
_total_counting_time += this_final_counting_time;
if (G1PrintRegionLivenessInfo) {
@@ -2287,7 +1957,6 @@ void ConcurrentMark::cleanup() {
g1h->reset_gc_time_stamp();
// Note end of marking in all heap regions.
- double note_end_start = os::elapsedTime();
G1ParNoteEndTask g1_par_note_end_task(g1h, &_cleanup_list);
if (G1CollectedHeap::use_parallel_gc_threads()) {
g1h->set_par_threads((int)n_workers);
@@ -2306,11 +1975,6 @@ void ConcurrentMark::cleanup() {
// regions that there will be more free regions coming soon.
g1h->set_free_regions_coming();
}
- double note_end_end = os::elapsedTime();
- if (G1PrintParCleanupStats) {
- gclog_or_tty->print_cr(" note end of marking: %8.3f ms.",
- (note_end_end - note_end_start)*1000.0);
- }
// call below, since it affects the metric by which we sort the heap
// regions.
@@ -2342,16 +2006,13 @@ void ConcurrentMark::cleanup() {
double end = os::elapsedTime();
_cleanup_times.add((end - start) * 1000.0);
- if (PrintGC || PrintGCDetails) {
+ if (G1Log::fine()) {
g1h->print_size_transition(gclog_or_tty,
start_used_bytes,
g1h->used(),
g1h->capacity());
}
- size_t cleaned_up_bytes = start_used_bytes - g1h->used();
- g1p->decrease_known_garbage_bytes(cleaned_up_bytes);
-
// Clean up will have freed any regions completely full of garbage.
// Update the soft reference policy with the new heap occupancy.
Universe::update_heap_info_at_gc();
@@ -2368,8 +2029,7 @@ void ConcurrentMark::cleanup() {
HandleMark hm; // handle scope
gclog_or_tty->print(" VerifyDuringGC:(after)");
Universe::heap()->prepare_for_verify();
- Universe::verify(/* allow dirty */ true,
- /* silent */ false,
+ Universe::verify(/* silent */ false,
/* option */ VerifyOption_G1UsePrevMarking);
}
@@ -2386,7 +2046,7 @@ void ConcurrentMark::completeCleanup() {
if (G1ConcRegionFreeingVerbose) {
gclog_or_tty->print_cr("G1ConcRegionFreeing [complete cleanup] : "
- "cleanup list has "SIZE_FORMAT" entries",
+ "cleanup list has %u entries",
_cleanup_list.length());
}
@@ -2408,9 +2068,8 @@ void ConcurrentMark::completeCleanup() {
_cleanup_list.is_empty()) {
if (G1ConcRegionFreeingVerbose) {
gclog_or_tty->print_cr("G1ConcRegionFreeing [complete cleanup] : "
- "appending "SIZE_FORMAT" entries to the "
- "secondary_free_list, clean list still has "
- SIZE_FORMAT" entries",
+ "appending %u entries to the secondary_free_list, "
+ "cleanup list still has %u entries",
tmp_free_list.length(),
_cleanup_list.length());
}
@@ -2683,11 +2342,10 @@ void ConcurrentMark::weakRefsWork(bool clear_all_soft_refs) {
// Inner scope to exclude the cleaning of the string and symbol
// tables from the displayed time.
{
- bool verbose = PrintGC && PrintGCDetails;
- if (verbose) {
+ if (G1Log::finer()) {
gclog_or_tty->put(' ');
}
- TraceTime t("GC ref-proc", verbose, false, gclog_or_tty);
+ TraceTime t("GC ref-proc", G1Log::finer(), false, gclog_or_tty);
ReferenceProcessor* rp = g1h->ref_processor_cm();
@@ -3066,89 +2724,6 @@ void ConcurrentMark::print_reachable(const char* str,
#endif // PRODUCT
-// This note is for drainAllSATBBuffers and the code in between.
-// In the future we could reuse a task to do this work during an
-// evacuation pause (since now tasks are not active and can be claimed
-// during an evacuation pause). This was a late change to the code and
-// is currently not being taken advantage of.
-
-void ConcurrentMark::deal_with_reference(oop obj) {
- if (verbose_high()) {
- gclog_or_tty->print_cr("[global] we're dealing with reference "PTR_FORMAT,
- (void*) obj);
- }
-
- HeapWord* objAddr = (HeapWord*) obj;
- assert(obj->is_oop_or_null(true /* ignore mark word */), "Error");
- if (_g1h->is_in_g1_reserved(objAddr)) {
- assert(obj != NULL, "null check is implicit");
- if (!_nextMarkBitMap->isMarked(objAddr)) {
- // Only get the containing region if the object is not marked on the
- // bitmap (otherwise, it's a waste of time since we won't do
- // anything with it).
- HeapRegion* hr = _g1h->heap_region_containing_raw(obj);
- if (!hr->obj_allocated_since_next_marking(obj)) {
- if (verbose_high()) {
- gclog_or_tty->print_cr("[global] "PTR_FORMAT" is not considered "
- "marked", (void*) obj);
- }
-
- // we need to mark it first
- if (_nextMarkBitMap->parMark(objAddr)) {
- // No OrderAccess:store_load() is needed. It is implicit in the
- // CAS done in parMark(objAddr) above
- HeapWord* finger = _finger;
- if (objAddr < finger) {
- if (verbose_high()) {
- gclog_or_tty->print_cr("[global] below the global finger "
- "("PTR_FORMAT"), pushing it", finger);
- }
- if (!mark_stack_push(obj)) {
- if (verbose_low()) {
- gclog_or_tty->print_cr("[global] global stack overflow during "
- "deal_with_reference");
- }
- }
- }
- }
- }
- }
- }
-}
-
-class CMGlobalObjectClosure : public ObjectClosure {
-private:
- ConcurrentMark* _cm;
-
-public:
- void do_object(oop obj) {
- _cm->deal_with_reference(obj);
- }
-
- CMGlobalObjectClosure(ConcurrentMark* cm) : _cm(cm) { }
-};
-
-void ConcurrentMark::drainAllSATBBuffers() {
- guarantee(false, "drainAllSATBBuffers(): don't call this any more");
-
- CMGlobalObjectClosure oc(this);
- SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set();
- satb_mq_set.set_closure(&oc);
-
- while (satb_mq_set.apply_closure_to_completed_buffer()) {
- if (verbose_medium()) {
- gclog_or_tty->print_cr("[global] processed an SATB buffer");
- }
- }
-
- // no need to check whether we should do this, as this is only
- // called during an evacuation pause
- satb_mq_set.iterate_closure_all_threads();
-
- satb_mq_set.set_closure(NULL);
- assert(satb_mq_set.completed_buffers_num() == 0, "invariant");
-}
-
void ConcurrentMark::clearRangePrevBitmap(MemRegion mr) {
// Note we are overriding the read-only view of the prev map here, via
// the cast.
@@ -3257,63 +2832,6 @@ ConcurrentMark::claim_region(int task_num) {
return NULL;
}
-bool ConcurrentMark::invalidate_aborted_regions_in_cset() {
- guarantee(false, "invalidate_aborted_regions_in_cset(): "
- "don't call this any more");
-
- bool result = false;
- for (int i = 0; i < (int)_max_task_num; ++i) {
- CMTask* the_task = _tasks[i];
- MemRegion mr = the_task->aborted_region();
- if (mr.start() != NULL) {
- assert(mr.end() != NULL, "invariant");
- assert(mr.word_size() > 0, "invariant");
- HeapRegion* hr = _g1h->heap_region_containing(mr.start());
- assert(hr != NULL, "invariant");
- if (hr->in_collection_set()) {
- // The region points into the collection set
- the_task->set_aborted_region(MemRegion());
- result = true;
- }
- }
- }
- return result;
-}
-
-bool ConcurrentMark::has_aborted_regions() {
- for (int i = 0; i < (int)_max_task_num; ++i) {
- CMTask* the_task = _tasks[i];
- MemRegion mr = the_task->aborted_region();
- if (mr.start() != NULL) {
- assert(mr.end() != NULL, "invariant");
- assert(mr.word_size() > 0, "invariant");
- return true;
- }
- }
- return false;
-}
-
-void ConcurrentMark::oops_do(OopClosure* cl) {
- if (_markStack.size() > 0 && verbose_low()) {
- gclog_or_tty->print_cr("[global] scanning the global marking stack, "
- "size = %d", _markStack.size());
- }
- // we first iterate over the contents of the mark stack...
- _markStack.oops_do(cl);
-
- for (int i = 0; i < (int)_max_task_num; ++i) {
- OopTaskQueue* queue = _task_queues->queue((int)i);
-
- if (queue->size() > 0 && verbose_low()) {
- gclog_or_tty->print_cr("[global] scanning task queue of task %d, "
- "size = %d", i, queue->size());
- }
-
- // ...then over the contents of the all the task queues.
- queue->oops_do(cl);
- }
-}
-
#ifndef PRODUCT
enum VerifyNoCSetOopsPhase {
VerifyNoCSetOopsStack,
@@ -3445,8 +2963,6 @@ void ConcurrentMark::verify_no_cset_oops(bool verify_stacks,
void ConcurrentMark::clear_marking_state(bool clear_overflow) {
_markStack.setEmpty();
_markStack.clear_overflow();
- _regionStack.setEmpty();
- _regionStack.clear_overflow();
if (clear_overflow) {
clear_has_overflown();
} else {
@@ -3457,8 +2973,6 @@ void ConcurrentMark::clear_marking_state(bool clear_overflow) {
for (int i = 0; i < (int)_max_task_num; ++i) {
OopTaskQueue* queue = _task_queues->queue(i);
queue->set_empty();
- // Clear any partial regions from the CMTasks
- _tasks[i]->clear_aborted_region();
}
}
@@ -3525,7 +3039,7 @@ class AggregateCountDataHRClosure: public HeapRegionClosure {
assert(limit_idx <= end_idx, "or else use atomics");
// Aggregate the "stripe" in the count data associated with hr.
- size_t hrs_index = hr->hrs_index();
+ uint hrs_index = hr->hrs_index();
size_t marked_bytes = 0;
for (int i = 0; (size_t)i < _max_task_num; i += 1) {
@@ -3633,7 +3147,7 @@ void ConcurrentMark::clear_all_count_data() {
// of the final counting task.
_region_bm.clear();
- size_t max_regions = _g1h->max_regions();
+ uint max_regions = _g1h->max_regions();
assert(_max_task_num != 0, "unitialized");
for (int i = 0; (size_t) i < _max_task_num; i += 1) {
@@ -3643,7 +3157,7 @@ void ConcurrentMark::clear_all_count_data() {
assert(task_card_bm->size() == _card_bm.size(), "size mismatch");
assert(marked_bytes_array != NULL, "uninitialized");
- memset(marked_bytes_array, 0, (max_regions * sizeof(size_t)));
+ memset(marked_bytes_array, 0, (size_t) max_regions * sizeof(size_t));
task_card_bm->clear();
}
}
@@ -3658,327 +3172,6 @@ void ConcurrentMark::print_stats() {
}
}
-// Closures used by ConcurrentMark::complete_marking_in_collection_set().
-
-class CSetMarkOopClosure: public OopClosure {
- friend class CSetMarkBitMapClosure;
-
- G1CollectedHeap* _g1h;
- CMBitMap* _bm;
- ConcurrentMark* _cm;
- oop* _ms;
- jint* _array_ind_stack;
- int _ms_size;
- int _ms_ind;
- int _array_increment;
- uint _worker_id;
-
- bool push(oop obj, int arr_ind = 0) {
- if (_ms_ind == _ms_size) {
- gclog_or_tty->print_cr("Mark stack is full.");
- return false;
- }
- _ms[_ms_ind] = obj;
- if (obj->is_objArray()) {
- _array_ind_stack[_ms_ind] = arr_ind;
- }
- _ms_ind++;
- return true;
- }
-
- oop pop() {
- if (_ms_ind == 0) {
- return NULL;
- } else {
- _ms_ind--;
- return _ms[_ms_ind];
- }
- }
-
- template bool drain() {
- while (_ms_ind > 0) {
- oop obj = pop();
- assert(obj != NULL, "Since index was non-zero.");
- if (obj->is_objArray()) {
- jint arr_ind = _array_ind_stack[_ms_ind];
- objArrayOop aobj = objArrayOop(obj);
- jint len = aobj->length();
- jint next_arr_ind = arr_ind + _array_increment;
- if (next_arr_ind < len) {
- push(obj, next_arr_ind);
- }
- // Now process this portion of this one.
- int lim = MIN2(next_arr_ind, len);
- for (int j = arr_ind; j < lim; j++) {
- do_oop(aobj->objArrayOopDesc::obj_at_addr(j));
- }
- } else {
- obj->oop_iterate(this);
- }
- if (abort()) return false;
- }
- return true;
- }
-
-public:
- CSetMarkOopClosure(ConcurrentMark* cm, int ms_size, uint worker_id) :
- _g1h(G1CollectedHeap::heap()),
- _cm(cm),
- _bm(cm->nextMarkBitMap()),
- _ms_size(ms_size), _ms_ind(0),
- _ms(NEW_C_HEAP_ARRAY(oop, ms_size)),
- _array_ind_stack(NEW_C_HEAP_ARRAY(jint, ms_size)),
- _array_increment(MAX2(ms_size/8, 16)),
- _worker_id(worker_id) { }
-
- ~CSetMarkOopClosure() {
- FREE_C_HEAP_ARRAY(oop, _ms);
- FREE_C_HEAP_ARRAY(jint, _array_ind_stack);
- }
-
- virtual void do_oop(narrowOop* p) { do_oop_work(p); }
- virtual void do_oop( oop* p) { do_oop_work(p); }
-
- template void do_oop_work(T* p) {
- T heap_oop = oopDesc::load_heap_oop(p);
- if (oopDesc::is_null(heap_oop)) return;
- oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
- if (obj->is_forwarded()) {
- // If the object has already been forwarded, we have to make sure
- // that it's marked. So follow the forwarding pointer. Note that
- // this does the right thing for self-forwarding pointers in the
- // evacuation failure case.
- obj = obj->forwardee();
- }
- HeapRegion* hr = _g1h->heap_region_containing(obj);
- if (hr != NULL) {
- if (hr->in_collection_set()) {
- if (_g1h->is_obj_ill(obj)) {
- if (_bm->parMark((HeapWord*)obj)) {
- if (!push(obj)) {
- gclog_or_tty->print_cr("Setting abort in CSetMarkOopClosure because push failed.");
- set_abort();
- }
- }
- }
- } else {
- // Outside the collection set; we need to gray it
- _cm->deal_with_reference(obj);
- }
- }
- }
-};
-
-class CSetMarkBitMapClosure: public BitMapClosure {
- G1CollectedHeap* _g1h;
- CMBitMap* _bitMap;
- ConcurrentMark* _cm;
- CSetMarkOopClosure _oop_cl;
- uint _worker_id;
-
-public:
- CSetMarkBitMapClosure(ConcurrentMark* cm, int ms_size, int worker_id) :
- _g1h(G1CollectedHeap::heap()),
- _bitMap(cm->nextMarkBitMap()),
- _oop_cl(cm, ms_size, worker_id),
- _worker_id(worker_id) { }
-
- bool do_bit(size_t offset) {
- // convert offset into a HeapWord*
- HeapWord* addr = _bitMap->offsetToHeapWord(offset);
- assert(_bitMap->endWord() && addr < _bitMap->endWord(),
- "address out of range");
- assert(_bitMap->isMarked(addr), "tautology");
- oop obj = oop(addr);
- if (!obj->is_forwarded()) {
- if (!_oop_cl.push(obj)) return false;
- if (UseCompressedOops) {
- if (!_oop_cl.drain()) return false;
- } else {
- if (!_oop_cl.drain()) return false;
- }
- }
- // Otherwise...
- return true;
- }
-};
-
-class CompleteMarkingInCSetHRClosure: public HeapRegionClosure {
- CMBitMap* _bm;
- CSetMarkBitMapClosure _bit_cl;
- uint _worker_id;
-
- enum SomePrivateConstants {
- MSSize = 1000
- };
-
-public:
- CompleteMarkingInCSetHRClosure(ConcurrentMark* cm, int worker_id) :
- _bm(cm->nextMarkBitMap()),
- _bit_cl(cm, MSSize, worker_id),
- _worker_id(worker_id) { }
-
- bool doHeapRegion(HeapRegion* hr) {
- if (hr->claimHeapRegion(HeapRegion::CompleteMarkCSetClaimValue)) {
- // The current worker has successfully claimed the region.
- if (!hr->evacuation_failed()) {
- MemRegion mr = MemRegion(hr->bottom(), hr->next_top_at_mark_start());
- if (!mr.is_empty()) {
- bool done = false;
- while (!done) {
- done = _bm->iterate(&_bit_cl, mr);
- }
- }
- }
- }
- return false;
- }
-};
-
-class G1ParCompleteMarkInCSetTask: public AbstractGangTask {
-protected:
- G1CollectedHeap* _g1h;
- ConcurrentMark* _cm;
-
-public:
- G1ParCompleteMarkInCSetTask(G1CollectedHeap* g1h,
- ConcurrentMark* cm) :
- AbstractGangTask("Complete Mark in CSet"),
- _g1h(g1h), _cm(cm) { }
-
- void work(uint worker_id) {
- CompleteMarkingInCSetHRClosure cmplt(_cm, worker_id);
- HeapRegion* hr = _g1h->start_cset_region_for_worker(worker_id);
- _g1h->collection_set_iterate_from(hr, &cmplt);
- }
-};
-
-void ConcurrentMark::complete_marking_in_collection_set() {
- guarantee(false, "complete_marking_in_collection_set(): "
- "don't call this any more");
-
- G1CollectedHeap* g1h = G1CollectedHeap::heap();
-
- if (!g1h->mark_in_progress()) {
- g1h->g1_policy()->record_mark_closure_time(0.0);
- return;
- }
-
- double start = os::elapsedTime();
- G1ParCompleteMarkInCSetTask complete_mark_task(g1h, this);
-
- assert(g1h->check_cset_heap_region_claim_values(HeapRegion::InitialClaimValue), "sanity");
-
- if (G1CollectedHeap::use_parallel_gc_threads()) {
- int n_workers = g1h->workers()->active_workers();
- g1h->set_par_threads(n_workers);
- g1h->workers()->run_task(&complete_mark_task);
- g1h->set_par_threads(0);
- } else {
- complete_mark_task.work(0);
- }
-
- assert(g1h->check_cset_heap_region_claim_values(HeapRegion::CompleteMarkCSetClaimValue), "sanity");
-
- // Reset the claim values in the regions in the collection set.
- g1h->reset_cset_heap_region_claim_values();
-
- assert(g1h->check_cset_heap_region_claim_values(HeapRegion::InitialClaimValue), "sanity");
-
- double end_time = os::elapsedTime();
- double elapsed_time_ms = (end_time - start) * 1000.0;
- g1h->g1_policy()->record_mark_closure_time(elapsed_time_ms);
-}
-
-// The next two methods deal with the following optimisation. Some
-// objects are gray by being marked and located above the finger. If
-// they are copied, during an evacuation pause, below the finger then
-// the need to be pushed on the stack. The observation is that, if
-// there are no regions in the collection set located above the
-// finger, then the above cannot happen, hence we do not need to
-// explicitly gray any objects when copying them to below the
-// finger. The global stack will be scanned to ensure that, if it
-// points to objects being copied, it will update their
-// location. There is a tricky situation with the gray objects in
-// region stack that are being coped, however. See the comment in
-// newCSet().
-
-void ConcurrentMark::newCSet() {
- guarantee(false, "newCSet(): don't call this any more");
-
- if (!concurrent_marking_in_progress()) {
- // nothing to do if marking is not in progress
- return;
- }
-
- // find what the lowest finger is among the global and local fingers
- _min_finger = _finger;
- for (int i = 0; i < (int)_max_task_num; ++i) {
- CMTask* task = _tasks[i];
- HeapWord* task_finger = task->finger();
- if (task_finger != NULL && task_finger < _min_finger) {
- _min_finger = task_finger;
- }
- }
-
- _should_gray_objects = false;
-
- // This fixes a very subtle and fustrating bug. It might be the case
- // that, during en evacuation pause, heap regions that contain
- // objects that are gray (by being in regions contained in the
- // region stack) are included in the collection set. Since such gray
- // objects will be moved, and because it's not easy to redirect
- // region stack entries to point to a new location (because objects
- // in one region might be scattered to multiple regions after they
- // are copied), one option is to ensure that all marked objects
- // copied during a pause are pushed on the stack. Notice, however,
- // that this problem can only happen when the region stack is not
- // empty during an evacuation pause. So, we make the fix a bit less
- // conservative and ensure that regions are pushed on the stack,
- // irrespective whether all collection set regions are below the
- // finger, if the region stack is not empty. This is expected to be
- // a rare case, so I don't think it's necessary to be smarted about it.
- if (!region_stack_empty() || has_aborted_regions()) {
- _should_gray_objects = true;
- }
-}
-
-void ConcurrentMark::registerCSetRegion(HeapRegion* hr) {
- guarantee(false, "registerCSetRegion(): don't call this any more");
-
- if (!concurrent_marking_in_progress()) return;
-
- HeapWord* region_end = hr->end();
- if (region_end > _min_finger) {
- _should_gray_objects = true;
- }
-}
-
-// Resets the region fields of active CMTasks whose values point
-// into the collection set.
-void ConcurrentMark::reset_active_task_region_fields_in_cset() {
- guarantee(false, "reset_active_task_region_fields_in_cset(): "
- "don't call this any more");
-
- assert(SafepointSynchronize::is_at_safepoint(), "should be in STW");
- assert(parallel_marking_threads() <= _max_task_num, "sanity");
-
- for (int i = 0; i < (int)parallel_marking_threads(); i += 1) {
- CMTask* task = _tasks[i];
- HeapWord* task_finger = task->finger();
- if (task_finger != NULL) {
- assert(_g1h->is_in_g1_reserved(task_finger), "not in heap");
- HeapRegion* finger_region = _g1h->heap_region_containing(task_finger);
- if (finger_region->in_collection_set()) {
- // The task's current region is in the collection set.
- // This region will be evacuated in the current GC and
- // the region fields in the task will be stale.
- task->giveup_current_region();
- }
- }
- }
-}
-
// abandon current marking iteration due to a Full GC
void ConcurrentMark::abort() {
// Clear all marks to force marking thread to do nothing
@@ -4112,36 +3305,21 @@ private:
CMBitMap* _nextMarkBitMap;
ConcurrentMark* _cm;
CMTask* _task;
- // true if we're scanning a heap region claimed by the task (so that
- // we move the finger along), false if we're not, i.e. currently when
- // scanning a heap region popped from the region stack (so that we
- // do not move the task finger along; it'd be a mistake if we did so).
- bool _scanning_heap_region;
public:
- CMBitMapClosure(CMTask *task,
- ConcurrentMark* cm,
- CMBitMap* nextMarkBitMap)
- : _task(task), _cm(cm), _nextMarkBitMap(nextMarkBitMap) { }
-
- void set_scanning_heap_region(bool scanning_heap_region) {
- _scanning_heap_region = scanning_heap_region;
- }
+ CMBitMapClosure(CMTask *task, ConcurrentMark* cm, CMBitMap* nextMarkBitMap) :
+ _task(task), _cm(cm), _nextMarkBitMap(nextMarkBitMap) { }
bool do_bit(size_t offset) {
HeapWord* addr = _nextMarkBitMap->offsetToHeapWord(offset);
assert(_nextMarkBitMap->isMarked(addr), "invariant");
assert( addr < _cm->finger(), "invariant");
- if (_scanning_heap_region) {
- statsOnly( _task->increase_objs_found_on_bitmap() );
- assert(addr >= _task->finger(), "invariant");
- // We move that task's local finger along.
- _task->move_finger_to(addr);
- } else {
- // We move the task's region finger along.
- _task->move_region_finger_to(addr);
- }
+ statsOnly( _task->increase_objs_found_on_bitmap() );
+ assert(addr >= _task->finger(), "invariant");
+
+ // We move that task's local finger along.
+ _task->move_finger_to(addr);
_task->scan_object(oop(addr));
// we only partially drain the local queue and global stack
@@ -4249,8 +3427,6 @@ void CMTask::clear_region_fields() {
_curr_region = NULL;
_finger = NULL;
_region_limit = NULL;
-
- _region_finger = NULL;
}
void CMTask::set_cm_oop_closure(G1CMOopClosure* cm_oop_closure) {
@@ -4271,7 +3447,6 @@ void CMTask::reset(CMBitMap* nextMarkBitMap) {
_nextMarkBitMap = nextMarkBitMap;
clear_region_fields();
- assert(_aborted_region.is_empty(), "should have been cleared");
_calls = 0;
_elapsed_time_ms = 0.0;
@@ -4288,7 +3463,6 @@ void CMTask::reset(CMBitMap* nextMarkBitMap) {
_global_max_size = 0;
_global_transfers_to = 0;
_global_transfers_from = 0;
- _region_stack_pops = 0;
_regions_claimed = 0;
_objs_found_on_bitmap = 0;
_satb_buffers_processed = 0;
@@ -4663,110 +3837,6 @@ void CMTask::drain_satb_buffers() {
decrease_limits();
}
-void CMTask::drain_region_stack(BitMapClosure* bc) {
- assert(_cm->region_stack_empty(), "region stack should be empty");
- assert(_aborted_region.is_empty(), "aborted region should be empty");
- return;
-
- if (has_aborted()) return;
-
- assert(_region_finger == NULL,
- "it should be NULL when we're not scanning a region");
-
- if (!_cm->region_stack_empty() || !_aborted_region.is_empty()) {
- if (_cm->verbose_low()) {
- gclog_or_tty->print_cr("[%d] draining region stack, size = %d",
- _task_id, _cm->region_stack_size());
- }
-
- MemRegion mr;
-
- if (!_aborted_region.is_empty()) {
- mr = _aborted_region;
- _aborted_region = MemRegion();
-
- if (_cm->verbose_low()) {
- gclog_or_tty->print_cr("[%d] scanning aborted region "
- "[ " PTR_FORMAT ", " PTR_FORMAT " )",
- _task_id, mr.start(), mr.end());
- }
- } else {
- mr = _cm->region_stack_pop_lock_free();
- // it returns MemRegion() if the pop fails
- statsOnly(if (mr.start() != NULL) ++_region_stack_pops );
- }
-
- while (mr.start() != NULL) {
- if (_cm->verbose_medium()) {
- gclog_or_tty->print_cr("[%d] we are scanning region "
- "["PTR_FORMAT", "PTR_FORMAT")",
- _task_id, mr.start(), mr.end());
- }
-
- assert(mr.end() <= _cm->finger(),
- "otherwise the region shouldn't be on the stack");
- assert(!mr.is_empty(), "Only non-empty regions live on the region stack");
- if (_nextMarkBitMap->iterate(bc, mr)) {
- assert(!has_aborted(),
- "cannot abort the task without aborting the bitmap iteration");
-
- // We finished iterating over the region without aborting.
- regular_clock_call();
- if (has_aborted()) {
- mr = MemRegion();
- } else {
- mr = _cm->region_stack_pop_lock_free();
- // it returns MemRegion() if the pop fails
- statsOnly(if (mr.start() != NULL) ++_region_stack_pops );
- }
- } else {
- assert(has_aborted(), "currently the only way to do so");
-
- // The only way to abort the bitmap iteration is to return
- // false from the do_bit() method. However, inside the
- // do_bit() method we move the _region_finger to point to the
- // object currently being looked at. So, if we bail out, we
- // have definitely set _region_finger to something non-null.
- assert(_region_finger != NULL, "invariant");
-
- // Make sure that any previously aborted region has been
- // cleared.
- assert(_aborted_region.is_empty(), "aborted region not cleared");
-
- // The iteration was actually aborted. So now _region_finger
- // points to the address of the object we last scanned. If we
- // leave it there, when we restart this task, we will rescan
- // the object. It is easy to avoid this. We move the finger by
- // enough to point to the next possible object header (the
- // bitmap knows by how much we need to move it as it knows its
- // granularity).
- MemRegion newRegion =
- MemRegion(_nextMarkBitMap->nextWord(_region_finger), mr.end());
-
- if (!newRegion.is_empty()) {
- if (_cm->verbose_low()) {
- gclog_or_tty->print_cr("[%d] recording unscanned region"
- "[" PTR_FORMAT "," PTR_FORMAT ") in CMTask",
- _task_id,
- newRegion.start(), newRegion.end());
- }
- // Now record the part of the region we didn't scan to
- // make sure this task scans it later.
- _aborted_region = newRegion;
- }
- // break from while
- mr = MemRegion();
- }
- _region_finger = NULL;
- }
-
- if (_cm->verbose_low()) {
- gclog_or_tty->print_cr("[%d] drained region stack, size = %d",
- _task_id, _cm->region_stack_size());
- }
- }
-}
-
void CMTask::print_stats() {
gclog_or_tty->print_cr("Marking Stats, task = %d, calls = %d",
_task_id, _calls);
@@ -4795,8 +3865,7 @@ void CMTask::print_stats() {
_global_pushes, _global_pops, _global_max_size);
gclog_or_tty->print_cr(" transfers to = %d, transfers from = %d",
_global_transfers_to,_global_transfers_from);
- gclog_or_tty->print_cr(" Regions: claimed = %d, Region Stack: pops = %d",
- _regions_claimed, _region_stack_pops);
+ gclog_or_tty->print_cr(" Regions: claimed = %d", _regions_claimed);
gclog_or_tty->print_cr(" SATB buffers: processed = %d", _satb_buffers_processed);
gclog_or_tty->print_cr(" Steals: attempts = %d, successes = %d",
_steal_attempts, _steals);
@@ -4855,15 +3924,7 @@ void CMTask::print_stats() {
popping by other tasks. Only when there is no more work, tasks
will totally drain the global mark stack.
- (4) Global Region Stack. Entries on it correspond to areas of
- the bitmap that need to be scanned since they contain gray
- objects. Pushes on the region stack only happen during
- evacuation pauses and typically correspond to areas covered by
- GC LABS. If it overflows, then the marking phase should restart
- and iterate over the bitmap to identify gray objects. Tasks will
- try to totally drain the region stack as soon as possible.
-
- (5) SATB Buffer Queue. This is where completed SATB buffers are
+ (4) SATB Buffer Queue. This is where completed SATB buffers are
made available. Buffers are regularly removed from this queue
and scanned for roots, so that the queue doesn't get too
long. During remark, all completed buffers are processed, as
@@ -4875,12 +3936,12 @@ void CMTask::print_stats() {
(1) When the marking phase has been aborted (after a Full GC).
- (2) When a global overflow (either on the global stack or the
- region stack) has been triggered. Before the task aborts, it
- will actually sync up with the other tasks to ensure that all
- the marking data structures (local queues, stacks, fingers etc.)
- are re-initialised so that when do_marking_step() completes,
- the marking phase can immediately restart.
+ (2) When a global overflow (on the global stack) has been
+ triggered. Before the task aborts, it will actually sync up with
+ the other tasks to ensure that all the marking data structures
+ (local queues, stacks, fingers etc.) are re-initialised so that
+ when do_marking_step() completes, the marking phase can
+ immediately restart.
(3) When enough completed SATB buffers are available. The
do_marking_step() method only tries to drain SATB buffers right
@@ -4923,13 +3984,6 @@ void CMTask::do_marking_step(double time_target_ms,
assert(time_target_ms >= 1.0, "minimum granularity is 1ms");
assert(concurrent() == _cm->concurrent(), "they should be the same");
- assert(concurrent() || _cm->region_stack_empty(),
- "the region stack should have been cleared before remark");
- assert(concurrent() || !_cm->has_aborted_regions(),
- "aborted regions should have been cleared before remark");
- assert(_region_finger == NULL,
- "this should be non-null only when a region is being scanned");
-
G1CollectorPolicy* g1_policy = _g1h->g1_policy();
assert(_task_queues != NULL, "invariant");
assert(_task_queue != NULL, "invariant");
@@ -4978,10 +4032,10 @@ void CMTask::do_marking_step(double time_target_ms,
set_cm_oop_closure(&cm_oop_closure);
if (_cm->has_overflown()) {
- // This can happen if the region stack or the mark stack overflows
- // during a GC pause and this task, after a yield point,
- // restarts. We have to abort as we need to get into the overflow
- // protocol which happens right at the end of this task.
+ // This can happen if the mark stack overflows during a GC pause
+ // and this task, after a yield point, restarts. We have to abort
+ // as we need to get into the overflow protocol which happens
+ // right at the end of this task.
set_has_aborted();
}
@@ -4994,17 +4048,6 @@ void CMTask::do_marking_step(double time_target_ms,
drain_local_queue(true);
drain_global_stack(true);
- // Then totally drain the region stack. We will not look at
- // it again before the next invocation of this method. Entries on
- // the region stack are only added during evacuation pauses, for
- // which we have to yield. When we do, we abort the task anyway so
- // it will look at the region stack again when it restarts.
- bitmap_closure.set_scanning_heap_region(false);
- drain_region_stack(&bitmap_closure);
- // ...then partially drain the local queue and the global stack
- drain_local_queue(true);
- drain_global_stack(true);
-
do {
if (!has_aborted() && _curr_region != NULL) {
// This means that we're already holding on to a region.
@@ -5034,9 +4077,7 @@ void CMTask::do_marking_step(double time_target_ms,
// Let's iterate over the bitmap of the part of the
// region that is left.
- bitmap_closure.set_scanning_heap_region(true);
- if (mr.is_empty() ||
- _nextMarkBitMap->iterate(&bitmap_closure, mr)) {
+ if (mr.is_empty() || _nextMarkBitMap->iterate(&bitmap_closure, mr)) {
// We successfully completed iterating over the region. Now,
// let's give up the region.
giveup_current_region();
@@ -5061,9 +4102,9 @@ void CMTask::do_marking_step(double time_target_ms,
HeapWord* new_finger = _nextMarkBitMap->nextWord(_finger);
// Check if bitmap iteration was aborted while scanning the last object
if (new_finger >= _region_limit) {
- giveup_current_region();
+ giveup_current_region();
} else {
- move_finger_to(new_finger);
+ move_finger_to(new_finger);
}
}
}
@@ -5119,9 +4160,7 @@ void CMTask::do_marking_step(double time_target_ms,
if (!has_aborted()) {
// We cannot check whether the global stack is empty, since other
- // tasks might be pushing objects to it concurrently. We also cannot
- // check if the region stack is empty because if a thread is aborting
- // it can push a partially done region back.
+ // tasks might be pushing objects to it concurrently.
assert(_cm->out_of_regions(),
"at this point we should be out of regions");
@@ -5145,9 +4184,7 @@ void CMTask::do_marking_step(double time_target_ms,
// we could. Let's try to do some stealing...
// We cannot check whether the global stack is empty, since other
- // tasks might be pushing objects to it concurrently. We also cannot
- // check if the region stack is empty because if a thread is aborting
- // it can push a partially done region back.
+ // tasks might be pushing objects to it concurrently.
assert(_cm->out_of_regions() && _task_queue->size() == 0,
"only way to reach here");
@@ -5194,9 +4231,7 @@ void CMTask::do_marking_step(double time_target_ms,
// termination protocol.
if (do_termination && !has_aborted()) {
// We cannot check whether the global stack is empty, since other
- // tasks might be concurrently pushing objects on it. We also cannot
- // check if the region stack is empty because if a thread is aborting
- // it can push a partially done region back.
+ // tasks might be concurrently pushing objects on it.
// Separated the asserts so that we know which one fires.
assert(_cm->out_of_regions(), "only way to reach here");
assert(_task_queue->size() == 0, "only way to reach here");
@@ -5233,13 +4268,10 @@ void CMTask::do_marking_step(double time_target_ms,
// that, if a condition is false, we can immediately find out
// which one.
guarantee(_cm->out_of_regions(), "only way to reach here");
- guarantee(_aborted_region.is_empty(), "only way to reach here");
- guarantee(_cm->region_stack_empty(), "only way to reach here");
guarantee(_cm->mark_stack_empty(), "only way to reach here");
guarantee(_task_queue->size() == 0, "only way to reach here");
guarantee(!_cm->has_overflown(), "only way to reach here");
guarantee(!_cm->mark_stack_overflow(), "only way to reach here");
- guarantee(!_cm->region_stack_overflow(), "only way to reach here");
if (_cm->verbose_low()) {
gclog_or_tty->print_cr("[%d] all tasks terminated", _task_id);
@@ -5342,7 +4374,6 @@ CMTask::CMTask(int task_id,
_task_queue(task_queue),
_task_queues(task_queues),
_cm_oop_closure(NULL),
- _aborted_region(MemRegion()),
_marked_bytes_array(marked_bytes),
_card_bm(card_bm) {
guarantee(task_queue != NULL, "invariant");
diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp
index e8795d6ac39..ac1eff7aa40 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp
@@ -42,9 +42,7 @@ typedef GenericTaskQueueSet CMTaskQueueSet;
class G1CMIsAliveClosure: public BoolObjectClosure {
G1CollectedHeap* _g1;
public:
- G1CMIsAliveClosure(G1CollectedHeap* g1) :
- _g1(g1)
- {}
+ G1CMIsAliveClosure(G1CollectedHeap* g1) : _g1(g1) { }
void do_object(oop obj) {
ShouldNotCallThis();
@@ -111,11 +109,6 @@ class CMBitMapRO VALUE_OBJ_CLASS_SPEC {
return offsetToHeapWord(heapWordToOffset(addr) + 1);
}
- void mostly_disjoint_range_union(BitMap* from_bitmap,
- size_t from_start_index,
- HeapWord* to_start_word,
- size_t word_num);
-
// debugging
NOT_PRODUCT(bool covers(ReservedSpace rs) const;)
};
@@ -258,60 +251,6 @@ class CMMarkStack VALUE_OBJ_CLASS_SPEC {
void oops_do(OopClosure* f);
};
-class CMRegionStack VALUE_OBJ_CLASS_SPEC {
- MemRegion* _base;
- jint _capacity;
- jint _index;
- jint _oops_do_bound;
- bool _overflow;
-public:
- CMRegionStack();
- ~CMRegionStack();
- void allocate(size_t size);
-
- // This is lock-free; assumes that it will only be called in parallel
- // with other "push" operations (no pops).
- void push_lock_free(MemRegion mr);
-
- // Lock-free; assumes that it will only be called in parallel
- // with other "pop" operations (no pushes).
- MemRegion pop_lock_free();
-
-#if 0
- // The routines that manipulate the region stack with a lock are
- // not currently used. They should be retained, however, as a
- // diagnostic aid.
-
- // These two are the implementations that use a lock. They can be
- // called concurrently with each other but they should not be called
- // concurrently with the lock-free versions (push() / pop()).
- void push_with_lock(MemRegion mr);
- MemRegion pop_with_lock();
-#endif
-
- bool isEmpty() { return _index == 0; }
- bool isFull() { return _index == _capacity; }
-
- bool overflow() { return _overflow; }
- void clear_overflow() { _overflow = false; }
-
- int size() { return _index; }
-
- // It iterates over the entries in the region stack and it
- // invalidates (i.e. assigns MemRegion()) the ones that point to
- // regions in the collection set.
- bool invalidate_entries_into_cset();
-
- // This gives an upper bound up to which the iteration in
- // invalidate_entries_into_cset() will reach. This prevents
- // newly-added entries to be unnecessarily scanned.
- void set_oops_do_bound() {
- _oops_do_bound = _index;
- }
-
- void setEmpty() { _index = 0; clear_overflow(); }
-};
-
class ForceOverflowSettings VALUE_OBJ_CLASS_SPEC {
private:
#ifndef PRODUCT
@@ -408,7 +347,6 @@ class ConcurrentMark : public CHeapObj {
friend class ConcurrentMarkThread;
friend class CMTask;
friend class CMBitMapClosure;
- friend class CSetMarkOopClosure;
friend class CMGlobalObjectClosure;
friend class CMRemarkTask;
friend class CMConcurrentMarkingTask;
@@ -443,7 +381,6 @@ protected:
CMBitMap _markBitMap2;
CMBitMapRO* _prevMarkBitMap; // completed mark bitmap
CMBitMap* _nextMarkBitMap; // under-construction mark bitmap
- bool _at_least_one_mark_complete;
BitMap _region_bm;
BitMap _card_bm;
@@ -457,7 +394,6 @@ protected:
// For gray objects
CMMarkStack _markStack; // Grey objects behind global finger.
- CMRegionStack _regionStack; // Grey regions behind global finger.
HeapWord* volatile _finger; // the global finger, region aligned,
// always points to the end of the
// last claimed region
@@ -502,18 +438,6 @@ protected:
// verbose level
CMVerboseLevel _verbose_level;
- // These two fields are used to implement the optimisation that
- // avoids pushing objects on the global/region stack if there are
- // no collection set regions above the lowest finger.
-
- // This is the lowest finger (among the global and local fingers),
- // which is calculated before a new collection set is chosen.
- HeapWord* _min_finger;
- // If this flag is true, objects/regions that are marked below the
- // finger should be pushed on the stack(s). If this is flag is
- // false, it is safe not to push them on the stack(s).
- bool _should_gray_objects;
-
// All of these times are in ms.
NumberSeq _init_times;
NumberSeq _remark_times;
@@ -604,7 +528,7 @@ protected:
CMTaskQueueSet* task_queues() { return _task_queues; }
// Access / manipulation of the overflow flag which is set to
- // indicate that the global stack or region stack has overflown
+ // indicate that the global stack has overflown
bool has_overflown() { return _has_overflown; }
void set_has_overflown() { _has_overflown = true; }
void clear_has_overflown() { _has_overflown = false; }
@@ -684,68 +608,6 @@ public:
bool mark_stack_overflow() { return _markStack.overflow(); }
bool mark_stack_empty() { return _markStack.isEmpty(); }
- // (Lock-free) Manipulation of the region stack
- bool region_stack_push_lock_free(MemRegion mr) {
- // Currently we only call the lock-free version during evacuation
- // pauses.
- assert(SafepointSynchronize::is_at_safepoint(), "world should be stopped");
-
- _regionStack.push_lock_free(mr);
- if (_regionStack.overflow()) {
- set_has_overflown();
- return false;
- }
- return true;
- }
-
- // Lock-free version of region-stack pop. Should only be
- // called in tandem with other lock-free pops.
- MemRegion region_stack_pop_lock_free() {
- return _regionStack.pop_lock_free();
- }
-
-#if 0
- // The routines that manipulate the region stack with a lock are
- // not currently used. They should be retained, however, as a
- // diagnostic aid.
-
- bool region_stack_push_with_lock(MemRegion mr) {
- // Currently we only call the lock-based version during either
- // concurrent marking or remark.
- assert(!SafepointSynchronize::is_at_safepoint() || !concurrent(),
- "if we are at a safepoint it should be the remark safepoint");
-
- _regionStack.push_with_lock(mr);
- if (_regionStack.overflow()) {
- set_has_overflown();
- return false;
- }
- return true;
- }
-
- MemRegion region_stack_pop_with_lock() {
- // Currently we only call the lock-based version during either
- // concurrent marking or remark.
- assert(!SafepointSynchronize::is_at_safepoint() || !concurrent(),
- "if we are at a safepoint it should be the remark safepoint");
-
- return _regionStack.pop_with_lock();
- }
-#endif
-
- int region_stack_size() { return _regionStack.size(); }
- bool region_stack_overflow() { return _regionStack.overflow(); }
- bool region_stack_empty() { return _regionStack.isEmpty(); }
-
- // Iterate over any regions that were aborted while draining the
- // region stack (any such regions are saved in the corresponding
- // CMTask) and invalidate (i.e. assign to the empty MemRegion())
- // any regions that point into the collection set.
- bool invalidate_aborted_regions_in_cset();
-
- // Returns true if there are any aborted memory regions.
- bool has_aborted_regions();
-
CMRootRegions* root_regions() { return &_root_regions; }
bool concurrent_marking_in_progress() {
@@ -774,11 +636,7 @@ public:
return _task_queues->steal(task_num, hash_seed, obj);
}
- // It grays an object by first marking it. Then, if it's behind the
- // global finger, it also pushes it on the global stack.
- void deal_with_reference(oop obj);
-
- ConcurrentMark(ReservedSpace rs, int max_regions);
+ ConcurrentMark(ReservedSpace rs, uint max_regions);
~ConcurrentMark();
ConcurrentMarkThread* cmThread() { return _cmThread; }
@@ -810,22 +668,6 @@ public:
inline void grayRoot(oop obj, size_t word_size,
uint worker_id, HeapRegion* hr = NULL);
- // It's used during evacuation pauses to gray a region, if
- // necessary, and it's MT-safe. It assumes that the caller has
- // marked any objects on that region. If _should_gray_objects is
- // true and we're still doing concurrent marking, the region is
- // pushed on the region stack, if it is located below the global
- // finger, otherwise we do nothing.
- void grayRegionIfNecessary(MemRegion mr);
-
- // It's used during evacuation pauses to mark and, if necessary,
- // gray a single object and it's MT-safe. It assumes the caller did
- // not mark the object. If _should_gray_objects is true and we're
- // still doing concurrent marking, the objects is pushed on the
- // global stack, if it is located below the global finger, otherwise
- // we do nothing.
- void markAndGrayObjectIfNecessary(oop p);
-
// It iterates over the heap and for each object it comes across it
// will dump the contents of its reference fields, as well as
// liveness information for the object and its referents. The dump
@@ -869,10 +711,6 @@ public:
// Do concurrent phase of marking, to a tentative transitive closure.
void markFromRoots();
- // Process all unprocessed SATB buffers. It is called at the
- // beginning of an evacuation pause.
- void drainAllSATBBuffers();
-
void checkpointRootsFinal(bool clear_all_soft_refs);
void checkpointRootsFinalWork();
void cleanup();
@@ -899,10 +737,6 @@ public:
_markStack.note_end_of_gc();
}
- // Iterate over the oops in the mark stack and all local queues. It
- // also calls invalidate_entries_into_cset() on the region stack.
- void oops_do(OopClosure* f);
-
// Verify that there are no CSet oops on the stacks (taskqueues /
// global mark stack), enqueued SATB buffers, per-thread SATB
// buffers, and fingers (global / per-task). The boolean parameters
@@ -919,40 +753,6 @@ public:
// unless the force parameter is true.
void update_g1_committed(bool force = false);
- void complete_marking_in_collection_set();
-
- // It indicates that a new collection set is being chosen.
- void newCSet();
-
- // It registers a collection set heap region with CM. This is used
- // to determine whether any heap regions are located above the finger.
- void registerCSetRegion(HeapRegion* hr);
-
- // Resets the region fields of any active CMTask whose region fields
- // are in the collection set (i.e. the region currently claimed by
- // the CMTask will be evacuated and may be used, subsequently, as
- // an alloc region). When this happens the region fields in the CMTask
- // are stale and, hence, should be cleared causing the worker thread
- // to claim a new region.
- void reset_active_task_region_fields_in_cset();
-
- // Registers the maximum region-end associated with a set of
- // regions with CM. Again this is used to determine whether any
- // heap regions are located above the finger.
- void register_collection_set_finger(HeapWord* max_finger) {
- // max_finger is the highest heap region end of the regions currently
- // contained in the collection set. If this value is larger than
- // _min_finger then we need to gray objects.
- // This routine is like registerCSetRegion but for an entire
- // collection of regions.
- if (max_finger > _min_finger) {
- _should_gray_objects = true;
- }
- }
-
- // Returns "true" if at least one mark has been completed.
- bool at_least_one_mark_complete() { return _at_least_one_mark_complete; }
-
bool isMarked(oop p) const {
assert(p != NULL && p->is_oop(), "expected an oop");
HeapWord* addr = (HeapWord*)p;
@@ -1164,23 +964,6 @@ private:
// limit of the region this task is scanning, NULL if we're not scanning one
HeapWord* _region_limit;
- // This is used only when we scan regions popped from the region
- // stack. It records what the last object on such a region we
- // scanned was. It is used to ensure that, if we abort region
- // iteration, we do not rescan the first part of the region. This
- // should be NULL when we're not scanning a region from the region
- // stack.
- HeapWord* _region_finger;
-
- // If we abort while scanning a region we record the remaining
- // unscanned portion and check this field when marking restarts.
- // This avoids having to push on the region stack while other
- // marking threads may still be popping regions.
- // If we were to push the unscanned portion directly to the
- // region stack then we would need to using locking versions
- // of the push and pop operations.
- MemRegion _aborted_region;
-
// the number of words this task has scanned
size_t _words_scanned;
// When _words_scanned reaches this limit, the regular clock is
@@ -1268,8 +1051,6 @@ private:
int _global_transfers_to;
int _global_transfers_from;
- int _region_stack_pops;
-
int _regions_claimed;
int _objs_found_on_bitmap;
@@ -1347,15 +1128,6 @@ public:
bool has_timed_out() { return _has_timed_out; }
bool claimed() { return _claimed; }
- // Support routines for the partially scanned region that may be
- // recorded as a result of aborting while draining the CMRegionStack
- MemRegion aborted_region() { return _aborted_region; }
- void set_aborted_region(MemRegion mr)
- { _aborted_region = mr; }
-
- // Clears any recorded partially scanned region
- void clear_aborted_region() { set_aborted_region(MemRegion()); }
-
void set_cm_oop_closure(G1CMOopClosure* cm_oop_closure);
// It grays the object by marking it and, if necessary, pushing it
@@ -1385,22 +1157,12 @@ public:
// buffers are available.
void drain_satb_buffers();
- // It keeps popping regions from the region stack and processing
- // them until the region stack is empty.
- void drain_region_stack(BitMapClosure* closure);
-
// moves the local finger to a new location
inline void move_finger_to(HeapWord* new_finger) {
assert(new_finger >= _finger && new_finger < _region_limit, "invariant");
_finger = new_finger;
}
- // moves the region finger to a new location
- inline void move_region_finger_to(HeapWord* new_finger) {
- assert(new_finger < _cm->finger(), "invariant");
- _region_finger = new_finger;
- }
-
CMTask(int task_num, ConcurrentMark *cm,
size_t* marked_bytes, BitMap* card_bm,
CMTaskQueue* task_queue, CMTaskQueueSet* task_queues);
diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp
index 27c3411051d..aca12a885e1 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp
@@ -49,7 +49,7 @@ inline void ConcurrentMark::count_region(MemRegion mr, HeapRegion* hr,
HeapWord* start = mr.start();
HeapWord* last = mr.last();
size_t region_size_bytes = mr.byte_size();
- size_t index = hr->hrs_index();
+ uint index = hr->hrs_index();
assert(!hr->continuesHumongous(), "should not be HC region");
assert(hr == g1h->heap_region_containing(start), "sanity");
diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp
index 9dcb124ceaa..9959260d51c 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp
@@ -26,6 +26,7 @@
#include "gc_implementation/g1/concurrentMarkThread.inline.hpp"
#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
#include "gc_implementation/g1/g1CollectorPolicy.hpp"
+#include "gc_implementation/g1/g1Log.hpp"
#include "gc_implementation/g1/g1MMUTracker.hpp"
#include "gc_implementation/g1/vm_operations_g1.hpp"
#include "memory/resourceArea.hpp"
@@ -104,7 +105,7 @@ void ConcurrentMarkThread::run() {
double scan_start = os::elapsedTime();
if (!cm()->has_aborted()) {
- if (PrintGC) {
+ if (G1Log::fine()) {
gclog_or_tty->date_stamp(PrintGCDateStamps);
gclog_or_tty->stamp(PrintGCTimeStamps);
gclog_or_tty->print_cr("[GC concurrent-root-region-scan-start]");
@@ -113,7 +114,7 @@ void ConcurrentMarkThread::run() {
_cm->scanRootRegions();
double scan_end = os::elapsedTime();
- if (PrintGC) {
+ if (G1Log::fine()) {
gclog_or_tty->date_stamp(PrintGCDateStamps);
gclog_or_tty->stamp(PrintGCTimeStamps);
gclog_or_tty->print_cr("[GC concurrent-root-region-scan-end, %1.7lf]",
@@ -122,7 +123,7 @@ void ConcurrentMarkThread::run() {
}
double mark_start_sec = os::elapsedTime();
- if (PrintGC) {
+ if (G1Log::fine()) {
gclog_or_tty->date_stamp(PrintGCDateStamps);
gclog_or_tty->stamp(PrintGCTimeStamps);
gclog_or_tty->print_cr("[GC concurrent-mark-start]");
@@ -146,7 +147,7 @@ void ConcurrentMarkThread::run() {
os::sleep(current_thread, sleep_time_ms, false);
}
- if (PrintGC) {
+ if (G1Log::fine()) {
gclog_or_tty->date_stamp(PrintGCDateStamps);
gclog_or_tty->stamp(PrintGCTimeStamps);
gclog_or_tty->print_cr("[GC concurrent-mark-end, %1.7lf sec]",
@@ -165,7 +166,7 @@ void ConcurrentMarkThread::run() {
}
if (cm()->restart_for_overflow()) {
- if (PrintGC) {
+ if (G1Log::fine()) {
gclog_or_tty->date_stamp(PrintGCDateStamps);
gclog_or_tty->stamp(PrintGCTimeStamps);
gclog_or_tty->print_cr("[GC concurrent-mark-restart-for-overflow]");
@@ -211,7 +212,7 @@ void ConcurrentMarkThread::run() {
// reclaimed by cleanup.
double cleanup_start_sec = os::elapsedTime();
- if (PrintGC) {
+ if (G1Log::fine()) {
gclog_or_tty->date_stamp(PrintGCDateStamps);
gclog_or_tty->stamp(PrintGCTimeStamps);
gclog_or_tty->print_cr("[GC concurrent-cleanup-start]");
@@ -232,7 +233,7 @@ void ConcurrentMarkThread::run() {
g1h->reset_free_regions_coming();
double cleanup_end_sec = os::elapsedTime();
- if (PrintGC) {
+ if (G1Log::fine()) {
gclog_or_tty->date_stamp(PrintGCDateStamps);
gclog_or_tty->stamp(PrintGCTimeStamps);
gclog_or_tty->print_cr("[GC concurrent-cleanup-end, %1.7lf]",
@@ -273,7 +274,7 @@ void ConcurrentMarkThread::run() {
_sts.leave();
if (cm()->has_aborted()) {
- if (PrintGC) {
+ if (G1Log::fine()) {
gclog_or_tty->date_stamp(PrintGCDateStamps);
gclog_or_tty->stamp(PrintGCTimeStamps);
gclog_or_tty->print_cr("[GC concurrent-mark-abort]");
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp
index ca31817197b..bb02d6acead 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -140,7 +140,7 @@ HeapWord* G1AllocRegion::new_alloc_region_and_allocate(size_t word_size,
}
void G1AllocRegion::fill_in_ext_msg(ar_ext_msg* msg, const char* message) {
- msg->append("[%s] %s c: "SIZE_FORMAT" b: %s r: "PTR_FORMAT" u: "SIZE_FORMAT,
+ msg->append("[%s] %s c: %u b: %s r: "PTR_FORMAT" u: "SIZE_FORMAT,
_name, message, _count, BOOL_TO_STR(_bot_updates),
_alloc_region, _used_bytes_before);
}
@@ -215,7 +215,7 @@ void G1AllocRegion::trace(const char* str, size_t word_size, HeapWord* result) {
jio_snprintf(rest_buffer, buffer_length, "");
}
- tty->print_cr("[%s] "SIZE_FORMAT" %s : %s %s",
+ tty->print_cr("[%s] %u %s : %s %s",
_name, _count, hr_buffer, str, rest_buffer);
}
}
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp
index caf7ff9888f..1f2c6cbdc2f 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1AllocRegion.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -64,7 +64,7 @@ private:
// the region that is re-used using the set() method. This count can
// be used in any heuristics that might want to bound how many
// distinct regions this object can used during an active interval.
- size_t _count;
+ uint _count;
// When we set up a new active region we save its used bytes in this
// field so that, when we retire it, we can calculate how much space
@@ -136,7 +136,7 @@ public:
return (_alloc_region == _dummy_region) ? NULL : _alloc_region;
}
- size_t count() { return _count; }
+ uint count() { return _count; }
// The following two are the building blocks for the allocation method.
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
index 55290cc55aa..2711a52d01b 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
@@ -33,6 +33,7 @@
#include "gc_implementation/g1/g1CollectorPolicy.hpp"
#include "gc_implementation/g1/g1ErgoVerbose.hpp"
#include "gc_implementation/g1/g1EvacFailure.hpp"
+#include "gc_implementation/g1/g1Log.hpp"
#include "gc_implementation/g1/g1MarkSweep.hpp"
#include "gc_implementation/g1/g1OopClosures.inline.hpp"
#include "gc_implementation/g1/g1RemSet.inline.hpp"
@@ -233,7 +234,7 @@ void YoungList::empty_list() {
bool YoungList::check_list_well_formed() {
bool ret = true;
- size_t length = 0;
+ uint length = 0;
HeapRegion* curr = _head;
HeapRegion* last = NULL;
while (curr != NULL) {
@@ -252,7 +253,7 @@ bool YoungList::check_list_well_formed() {
if (!ret) {
gclog_or_tty->print_cr("### YOUNG LIST seems not well formed!");
- gclog_or_tty->print_cr("### list has %d entries, _length is %d",
+ gclog_or_tty->print_cr("### list has %u entries, _length is %u",
length, _length);
}
@@ -263,7 +264,7 @@ bool YoungList::check_list_empty(bool check_sample) {
bool ret = true;
if (_length != 0) {
- gclog_or_tty->print_cr("### YOUNG LIST should have 0 length, not %d",
+ gclog_or_tty->print_cr("### YOUNG LIST should have 0 length, not %u",
_length);
ret = false;
}
@@ -336,8 +337,7 @@ YoungList::reset_auxilary_lists() {
_g1h->g1_policy()->add_region_to_incremental_cset_rhs(curr);
young_index_in_cset += 1;
}
- assert((size_t) young_index_in_cset == _survivor_length,
- "post-condition");
+ assert((uint) young_index_in_cset == _survivor_length, "post-condition");
_g1h->g1_policy()->note_stop_adding_survivor_regions();
_head = _survivor_head;
@@ -532,7 +532,7 @@ G1CollectedHeap::new_region_try_secondary_free_list() {
if (!_secondary_free_list.is_empty()) {
if (G1ConcRegionFreeingVerbose) {
gclog_or_tty->print_cr("G1ConcRegionFreeing [region alloc] : "
- "secondary_free_list has "SIZE_FORMAT" entries",
+ "secondary_free_list has %u entries",
_secondary_free_list.length());
}
// It looks as if there are free regions available on the
@@ -618,12 +618,12 @@ HeapRegion* G1CollectedHeap::new_region(size_t word_size, bool do_expand) {
return res;
}
-size_t G1CollectedHeap::humongous_obj_allocate_find_first(size_t num_regions,
- size_t word_size) {
+uint G1CollectedHeap::humongous_obj_allocate_find_first(uint num_regions,
+ size_t word_size) {
assert(isHumongous(word_size), "word_size should be humongous");
assert(num_regions * HeapRegion::GrainWords >= word_size, "pre-condition");
- size_t first = G1_NULL_HRS_INDEX;
+ uint first = G1_NULL_HRS_INDEX;
if (num_regions == 1) {
// Only one region to allocate, no need to go through the slower
// path. The caller will attempt the expasion if this fails, so
@@ -649,7 +649,7 @@ size_t G1CollectedHeap::humongous_obj_allocate_find_first(size_t num_regions,
if (free_regions() >= num_regions) {
first = _hrs.find_contiguous(num_regions);
if (first != G1_NULL_HRS_INDEX) {
- for (size_t i = first; i < first + num_regions; ++i) {
+ for (uint i = first; i < first + num_regions; ++i) {
HeapRegion* hr = region_at(i);
assert(hr->is_empty(), "sanity");
assert(is_on_master_free_list(hr), "sanity");
@@ -663,15 +663,15 @@ size_t G1CollectedHeap::humongous_obj_allocate_find_first(size_t num_regions,
}
HeapWord*
-G1CollectedHeap::humongous_obj_allocate_initialize_regions(size_t first,
- size_t num_regions,
+G1CollectedHeap::humongous_obj_allocate_initialize_regions(uint first,
+ uint num_regions,
size_t word_size) {
assert(first != G1_NULL_HRS_INDEX, "pre-condition");
assert(isHumongous(word_size), "word_size should be humongous");
assert(num_regions * HeapRegion::GrainWords >= word_size, "pre-condition");
// Index of last region in the series + 1.
- size_t last = first + num_regions;
+ uint last = first + num_regions;
// We need to initialize the region(s) we just discovered. This is
// a bit tricky given that it can happen concurrently with
@@ -682,7 +682,7 @@ G1CollectedHeap::humongous_obj_allocate_initialize_regions(size_t first,
// a specific order.
// The word size sum of all the regions we will allocate.
- size_t word_size_sum = num_regions * HeapRegion::GrainWords;
+ size_t word_size_sum = (size_t) num_regions * HeapRegion::GrainWords;
assert(word_size <= word_size_sum, "sanity");
// This will be the "starts humongous" region.
@@ -721,7 +721,7 @@ G1CollectedHeap::humongous_obj_allocate_initialize_regions(size_t first,
// Then, if there are any, we will set up the "continues
// humongous" regions.
HeapRegion* hr = NULL;
- for (size_t i = first + 1; i < last; ++i) {
+ for (uint i = first + 1; i < last; ++i) {
hr = region_at(i);
hr->set_continuesHumongous(first_hr);
}
@@ -767,7 +767,7 @@ G1CollectedHeap::humongous_obj_allocate_initialize_regions(size_t first,
// last one) is actually used when we will free up the humongous
// region in free_humongous_region().
hr = NULL;
- for (size_t i = first + 1; i < last; ++i) {
+ for (uint i = first + 1; i < last; ++i) {
hr = region_at(i);
if ((i + 1) == last) {
// last continues humongous region
@@ -803,14 +803,14 @@ HeapWord* G1CollectedHeap::humongous_obj_allocate(size_t word_size) {
verify_region_sets_optional();
- size_t num_regions =
- round_to(word_size, HeapRegion::GrainWords) / HeapRegion::GrainWords;
- size_t x_size = expansion_regions();
- size_t fs = _hrs.free_suffix();
- size_t first = humongous_obj_allocate_find_first(num_regions, word_size);
+ size_t word_size_rounded = round_to(word_size, HeapRegion::GrainWords);
+ uint num_regions = (uint) (word_size_rounded / HeapRegion::GrainWords);
+ uint x_num = expansion_regions();
+ uint fs = _hrs.free_suffix();
+ uint first = humongous_obj_allocate_find_first(num_regions, word_size);
if (first == G1_NULL_HRS_INDEX) {
// The only thing we can do now is attempt expansion.
- if (fs + x_size >= num_regions) {
+ if (fs + x_num >= num_regions) {
// If the number of regions we're trying to allocate for this
// object is at most the number of regions in the free suffix,
// then the call to humongous_obj_allocate_find_first() above
@@ -1255,10 +1255,10 @@ bool G1CollectedHeap::do_collection(bool explicit_gc,
// Timing
bool system_gc = (gc_cause() == GCCause::_java_lang_system_gc);
assert(!system_gc || explicit_gc, "invariant");
- gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps);
- TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
+ gclog_or_tty->date_stamp(G1Log::fine() && PrintGCDateStamps);
+ TraceCPUTime tcpu(G1Log::finer(), true, gclog_or_tty);
TraceTime t(system_gc ? "Full GC (System.gc())" : "Full GC",
- PrintGC, true, gclog_or_tty);
+ G1Log::fine(), true, gclog_or_tty);
TraceCollectorStats tcs(g1mm()->full_collection_counters());
TraceMemoryManagerStats tms(true /* fullGC */, gc_cause());
@@ -1290,8 +1290,7 @@ bool G1CollectedHeap::do_collection(bool explicit_gc,
HandleMark hm; // Discard invalid handles created during verification
gclog_or_tty->print(" VerifyBeforeGC:");
prepare_for_verify();
- Universe::verify(/* allow dirty */ true,
- /* silent */ false,
+ Universe::verify(/* silent */ false,
/* option */ VerifyOption_G1UsePrevMarking);
}
@@ -1365,8 +1364,7 @@ bool G1CollectedHeap::do_collection(bool explicit_gc,
HandleMark hm; // Discard invalid handles created during verification
gclog_or_tty->print(" VerifyAfterGC:");
prepare_for_verify();
- Universe::verify(/* allow dirty */ false,
- /* silent */ false,
+ Universe::verify(/* silent */ false,
/* option */ VerifyOption_G1UsePrevMarking);
}
@@ -1444,7 +1442,7 @@ bool G1CollectedHeap::do_collection(bool explicit_gc,
heap_region_iterate(&rebuild_rs);
}
- if (PrintGC) {
+ if (G1Log::fine()) {
print_size_transition(gclog_or_tty, g1h_prev_used, used(), capacity());
}
@@ -1782,7 +1780,7 @@ void G1CollectedHeap::shrink_helper(size_t shrink_bytes) {
ReservedSpace::page_align_size_down(shrink_bytes);
aligned_shrink_bytes = align_size_down(aligned_shrink_bytes,
HeapRegion::GrainBytes);
- size_t num_regions_deleted = 0;
+ uint num_regions_deleted = 0;
MemRegion mr = _hrs.shrink_by(aligned_shrink_bytes, &num_regions_deleted);
HeapWord* old_end = (HeapWord*) _g1_storage.high();
assert(mr.end() == old_end, "post-condition");
@@ -1917,6 +1915,8 @@ jint G1CollectedHeap::initialize() {
CollectedHeap::pre_initialize();
os::enable_vtime();
+ G1Log::init();
+
// Necessary to satisfy locking discipline assertions.
MutexLocker x(Heap_lock);
@@ -2003,7 +2003,7 @@ jint G1CollectedHeap::initialize() {
_reserved.set_start((HeapWord*)heap_rs.base());
_reserved.set_end((HeapWord*)(heap_rs.base() + heap_rs.size()));
- _expansion_regions = max_byte_size/HeapRegion::GrainBytes;
+ _expansion_regions = (uint) (max_byte_size / HeapRegion::GrainBytes);
// Create the gen rem set (and barrier set) for the entire reserved region.
_rem_set = collector_policy()->create_rem_set(_reserved, 2);
@@ -2040,7 +2040,7 @@ jint G1CollectedHeap::initialize() {
// 6843694 - ensure that the maximum region index can fit
// in the remembered set structures.
- const size_t max_region_idx = ((size_t)1 << (sizeof(RegionIdx_t)*BitsPerByte-1)) - 1;
+ const uint max_region_idx = (1U << (sizeof(RegionIdx_t)*BitsPerByte-1)) - 1;
guarantee((max_regions() - 1) <= max_region_idx, "too many regions");
size_t max_cards_per_region = ((size_t)1 << (sizeof(CardIdx_t)*BitsPerByte-1)) - 1;
@@ -2056,13 +2056,14 @@ jint G1CollectedHeap::initialize() {
_g1h = this;
_in_cset_fast_test_length = max_regions();
- _in_cset_fast_test_base = NEW_C_HEAP_ARRAY(bool, _in_cset_fast_test_length);
+ _in_cset_fast_test_base =
+ NEW_C_HEAP_ARRAY(bool, (size_t) _in_cset_fast_test_length);
// We're biasing _in_cset_fast_test to avoid subtracting the
// beginning of the heap every time we want to index; basically
// it's the same with what we do with the card table.
_in_cset_fast_test = _in_cset_fast_test_base -
- ((size_t) _g1_reserved.start() >> HeapRegion::LogOfHRGrainBytes);
+ ((uintx) _g1_reserved.start() >> HeapRegion::LogOfHRGrainBytes);
// Clear the _cset_fast_test bitmap in anticipation of adding
// regions to the incremental collection set for the first
@@ -2071,7 +2072,7 @@ jint G1CollectedHeap::initialize() {
// Create the ConcurrentMark data structure and thread.
// (Must do this late, so that "max_regions" is defined.)
- _cm = new ConcurrentMark(heap_rs, (int) max_regions());
+ _cm = new ConcurrentMark(heap_rs, max_regions());
_cmThread = _cm->cmThread();
// Initialize the from_card cache structure of HeapRegionRemSet.
@@ -2580,7 +2581,7 @@ G1CollectedHeap::heap_region_par_iterate_chunked(HeapRegionClosure* cl,
uint worker,
uint no_of_par_workers,
jint claim_value) {
- const size_t regions = n_regions();
+ const uint regions = n_regions();
const uint max_workers = (G1CollectedHeap::use_parallel_gc_threads() ?
no_of_par_workers :
1);
@@ -2588,11 +2589,11 @@ G1CollectedHeap::heap_region_par_iterate_chunked(HeapRegionClosure* cl,
no_of_par_workers == workers()->total_workers(),
"Non dynamic should use fixed number of workers");
// try to spread out the starting points of the workers
- const size_t start_index = regions / max_workers * (size_t) worker;
+ const uint start_index = regions / max_workers * worker;
// each worker will actually look at all regions
- for (size_t count = 0; count < regions; ++count) {
- const size_t index = (start_index + count) % regions;
+ for (uint count = 0; count < regions; ++count) {
+ const uint index = (start_index + count) % regions;
assert(0 <= index && index < regions, "sanity");
HeapRegion* r = region_at(index);
// we'll ignore "continues humongous" regions (we'll process them
@@ -2614,7 +2615,7 @@ G1CollectedHeap::heap_region_par_iterate_chunked(HeapRegionClosure* cl,
// result, we might end up processing them twice. So, we'll do
// them first (notice: most closures will ignore them anyway) and
// then we'll do the "starts humongous" region.
- for (size_t ch_index = index + 1; ch_index < regions; ++ch_index) {
+ for (uint ch_index = index + 1; ch_index < regions; ++ch_index) {
HeapRegion* chr = region_at(ch_index);
// if the region has already been claimed or it's not
@@ -2682,8 +2683,9 @@ void G1CollectedHeap::reset_cset_heap_region_claim_values() {
class CheckClaimValuesClosure : public HeapRegionClosure {
private:
jint _claim_value;
- size_t _failures;
+ uint _failures;
HeapRegion* _sh_region;
+
public:
CheckClaimValuesClosure(jint claim_value) :
_claim_value(claim_value), _failures(0), _sh_region(NULL) { }
@@ -2711,9 +2713,7 @@ public:
}
return false;
}
- size_t failures() {
- return _failures;
- }
+ uint failures() { return _failures; }
};
bool G1CollectedHeap::check_heap_region_claim_values(jint claim_value) {
@@ -2723,17 +2723,15 @@ bool G1CollectedHeap::check_heap_region_claim_values(jint claim_value) {
}
class CheckClaimValuesInCSetHRClosure: public HeapRegionClosure {
- jint _claim_value;
- size_t _failures;
+private:
+ jint _claim_value;
+ uint _failures;
public:
CheckClaimValuesInCSetHRClosure(jint claim_value) :
- _claim_value(claim_value),
- _failures(0) { }
+ _claim_value(claim_value), _failures(0) { }
- size_t failures() {
- return _failures;
- }
+ uint failures() { return _failures; }
bool doHeapRegion(HeapRegion* hr) {
assert(hr->in_collection_set(), "how?");
@@ -2800,14 +2798,14 @@ HeapRegion* G1CollectedHeap::start_cset_region_for_worker(int worker_i) {
result = g1_policy()->collection_set();
if (G1CollectedHeap::use_parallel_gc_threads()) {
- size_t cs_size = g1_policy()->cset_region_length();
+ uint cs_size = g1_policy()->cset_region_length();
uint active_workers = workers()->active_workers();
assert(UseDynamicNumberOfGCThreads ||
active_workers == workers()->total_workers(),
"Unless dynamic should use total workers");
- size_t end_ind = (cs_size * worker_i) / active_workers;
- size_t start_ind = 0;
+ uint end_ind = (cs_size * worker_i) / active_workers;
+ uint start_ind = 0;
if (worker_i > 0 &&
_worker_cset_start_region_time_stamp[worker_i - 1] == gc_time_stamp) {
@@ -2817,7 +2815,7 @@ HeapRegion* G1CollectedHeap::start_cset_region_for_worker(int worker_i) {
result = _worker_cset_start_region[worker_i - 1];
}
- for (size_t i = start_ind; i < end_ind; i++) {
+ for (uint i = start_ind; i < end_ind; i++) {
result = result->next_in_collection_set();
}
}
@@ -3033,7 +3031,6 @@ public:
class VerifyRegionClosure: public HeapRegionClosure {
private:
- bool _allow_dirty;
bool _par;
VerifyOption _vo;
bool _failures;
@@ -3041,9 +3038,8 @@ public:
// _vo == UsePrevMarking -> use "prev" marking information,
// _vo == UseNextMarking -> use "next" marking information,
// _vo == UseMarkWord -> use mark word from object header.
- VerifyRegionClosure(bool allow_dirty, bool par, VerifyOption vo)
- : _allow_dirty(allow_dirty),
- _par(par),
+ VerifyRegionClosure(bool par, VerifyOption vo)
+ : _par(par),
_vo(vo),
_failures(false) {}
@@ -3056,7 +3052,7 @@ public:
"Should be unclaimed at verify points.");
if (!r->continuesHumongous()) {
bool failures = false;
- r->verify(_allow_dirty, _vo, &failures);
+ r->verify(_vo, &failures);
if (failures) {
_failures = true;
} else {
@@ -3124,7 +3120,6 @@ public:
class G1ParVerifyTask: public AbstractGangTask {
private:
G1CollectedHeap* _g1h;
- bool _allow_dirty;
VerifyOption _vo;
bool _failures;
@@ -3132,10 +3127,9 @@ public:
// _vo == UsePrevMarking -> use "prev" marking information,
// _vo == UseNextMarking -> use "next" marking information,
// _vo == UseMarkWord -> use mark word from object header.
- G1ParVerifyTask(G1CollectedHeap* g1h, bool allow_dirty, VerifyOption vo) :
+ G1ParVerifyTask(G1CollectedHeap* g1h, VerifyOption vo) :
AbstractGangTask("Parallel verify task"),
_g1h(g1h),
- _allow_dirty(allow_dirty),
_vo(vo),
_failures(false) { }
@@ -3145,7 +3139,7 @@ public:
void work(uint worker_id) {
HandleMark hm;
- VerifyRegionClosure blk(_allow_dirty, true, _vo);
+ VerifyRegionClosure blk(true, _vo);
_g1h->heap_region_par_iterate_chunked(&blk, worker_id,
_g1h->workers()->active_workers(),
HeapRegion::ParVerifyClaimValue);
@@ -3155,12 +3149,11 @@ public:
}
};
-void G1CollectedHeap::verify(bool allow_dirty, bool silent) {
- verify(allow_dirty, silent, VerifyOption_G1UsePrevMarking);
+void G1CollectedHeap::verify(bool silent) {
+ verify(silent, VerifyOption_G1UsePrevMarking);
}
-void G1CollectedHeap::verify(bool allow_dirty,
- bool silent,
+void G1CollectedHeap::verify(bool silent,
VerifyOption vo) {
if (SafepointSynchronize::is_at_safepoint() || ! UseTLAB) {
if (!silent) { gclog_or_tty->print("Roots (excluding permgen) "); }
@@ -3212,7 +3205,7 @@ void G1CollectedHeap::verify(bool allow_dirty,
assert(check_heap_region_claim_values(HeapRegion::InitialClaimValue),
"sanity check");
- G1ParVerifyTask task(this, allow_dirty, vo);
+ G1ParVerifyTask task(this, vo);
assert(UseDynamicNumberOfGCThreads ||
workers()->active_workers() == workers()->total_workers(),
"If not dynamic should be using all the workers");
@@ -3234,7 +3227,7 @@ void G1CollectedHeap::verify(bool allow_dirty,
assert(check_heap_region_claim_values(HeapRegion::InitialClaimValue),
"sanity check");
} else {
- VerifyRegionClosure blk(allow_dirty, false, vo);
+ VerifyRegionClosure blk(false, vo);
heap_region_iterate(&blk);
if (blk.failures()) {
failures = true;
@@ -3284,12 +3277,12 @@ void G1CollectedHeap::print_on(outputStream* st) const {
_g1_storage.high_boundary());
st->cr();
st->print(" region size " SIZE_FORMAT "K, ", HeapRegion::GrainBytes / K);
- size_t young_regions = _young_list->length();
- st->print(SIZE_FORMAT " young (" SIZE_FORMAT "K), ",
- young_regions, young_regions * HeapRegion::GrainBytes / K);
- size_t survivor_regions = g1_policy()->recorded_survivor_regions();
- st->print(SIZE_FORMAT " survivors (" SIZE_FORMAT "K)",
- survivor_regions, survivor_regions * HeapRegion::GrainBytes / K);
+ uint young_regions = _young_list->length();
+ st->print("%u young (" SIZE_FORMAT "K), ", young_regions,
+ (size_t) young_regions * HeapRegion::GrainBytes / K);
+ uint survivor_regions = g1_policy()->recorded_survivor_regions();
+ st->print("%u survivors (" SIZE_FORMAT "K)", survivor_regions,
+ (size_t) survivor_regions * HeapRegion::GrainBytes / K);
st->cr();
perm()->as_gen()->print_on(st);
}
@@ -3299,7 +3292,11 @@ void G1CollectedHeap::print_extended_on(outputStream* st) const {
// Print the per-region information.
st->cr();
- st->print_cr("Heap Regions: (Y=young(eden), SU=young(survivor), HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, TS=gc time stamp, PTAMS=previous top-at-mark-start, NTAMS=next top-at-mark-start)");
+ st->print_cr("Heap Regions: (Y=young(eden), SU=young(survivor), "
+ "HS=humongous(starts), HC=humongous(continues), "
+ "CS=collection set, F=free, TS=gc time stamp, "
+ "PTAMS=previous top-at-mark-start, "
+ "NTAMS=next top-at-mark-start)");
PrintRegionClosure blk(st);
heap_region_iterate(&blk);
}
@@ -3477,16 +3474,16 @@ size_t G1CollectedHeap::cards_scanned() {
void
G1CollectedHeap::setup_surviving_young_words() {
- guarantee( _surviving_young_words == NULL, "pre-condition" );
- size_t array_length = g1_policy()->young_cset_region_length();
- _surviving_young_words = NEW_C_HEAP_ARRAY(size_t, array_length);
+ assert(_surviving_young_words == NULL, "pre-condition");
+ uint array_length = g1_policy()->young_cset_region_length();
+ _surviving_young_words = NEW_C_HEAP_ARRAY(size_t, (size_t) array_length);
if (_surviving_young_words == NULL) {
vm_exit_out_of_memory(sizeof(size_t) * array_length,
"Not enough space for young surv words summary.");
}
- memset(_surviving_young_words, 0, array_length * sizeof(size_t));
+ memset(_surviving_young_words, 0, (size_t) array_length * sizeof(size_t));
#ifdef ASSERT
- for (size_t i = 0; i < array_length; ++i) {
+ for (uint i = 0; i < array_length; ++i) {
assert( _surviving_young_words[i] == 0, "memset above" );
}
#endif // !ASSERT
@@ -3495,9 +3492,10 @@ G1CollectedHeap::setup_surviving_young_words() {
void
G1CollectedHeap::update_surviving_young_words(size_t* surv_young_words) {
MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
- size_t array_length = g1_policy()->young_cset_region_length();
- for (size_t i = 0; i < array_length; ++i)
+ uint array_length = g1_policy()->young_cset_region_length();
+ for (uint i = 0; i < array_length; ++i) {
_surviving_young_words[i] += surv_young_words[i];
+ }
}
void
@@ -3609,12 +3607,12 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) {
increment_total_full_collections();
}
- // if PrintGCDetails is on, we'll print long statistics information
+ // if the log level is "finer" is on, we'll print long statistics information
// in the collector policy code, so let's not print this as the output
// is messy if we do.
- gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps);
- TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
- TraceTime t(verbose_str, PrintGC && !PrintGCDetails, true, gclog_or_tty);
+ gclog_or_tty->date_stamp(G1Log::fine() && PrintGCDateStamps);
+ TraceCPUTime tcpu(G1Log::finer(), true, gclog_or_tty);
+ TraceTime t(verbose_str, G1Log::fine() && !G1Log::finer(), true, gclog_or_tty);
TraceCollectorStats tcs(g1mm()->incremental_collection_counters());
TraceMemoryManagerStats tms(false /* fullGC */, gc_cause());
@@ -3647,8 +3645,7 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) {
HandleMark hm; // Discard invalid handles created during verification
gclog_or_tty->print(" VerifyBeforeGC:");
prepare_for_verify();
- Universe::verify(/* allow dirty */ false,
- /* silent */ false,
+ Universe::verify(/* silent */ false,
/* option */ VerifyOption_G1UsePrevMarking);
}
@@ -3892,8 +3889,7 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) {
HandleMark hm; // Discard invalid handles created during verification
gclog_or_tty->print(" VerifyAfterGC:");
prepare_for_verify();
- Universe::verify(/* allow dirty */ true,
- /* silent */ false,
+ Universe::verify(/* silent */ false,
/* option */ VerifyOption_G1UsePrevMarking);
}
@@ -3931,8 +3927,8 @@ G1CollectedHeap::do_collection_pause_at_safepoint(double target_pause_time_ms) {
}
// The closing of the inner scope, immediately above, will complete
- // the PrintGC logging output. The record_collection_pause_end() call
- // above will complete the logging output of PrintGCDetails.
+ // logging at the "fine" level. The record_collection_pause_end() call
+ // above will complete logging at the "finer" level.
//
// It is not yet to safe, however, to tell the concurrent mark to
// start as we have some optional output below. We don't want the
@@ -4068,7 +4064,6 @@ void G1CollectedHeap::finalize_for_evac_failure() {
void G1CollectedHeap::remove_self_forwarding_pointers() {
assert(check_cset_heap_region_claim_values(HeapRegion::InitialClaimValue), "sanity");
- assert(g1_policy()->assertMarkedBytesDataOK(), "Should be!");
G1ParRemoveSelfForwardPtrsTask rsfp_task(this);
@@ -4086,7 +4081,6 @@ void G1CollectedHeap::remove_self_forwarding_pointers() {
reset_cset_heap_region_claim_values();
assert(check_cset_heap_region_claim_values(HeapRegion::InitialClaimValue), "sanity");
- assert(g1_policy()->assertMarkedBytesDataOK(), "Should be!");
// Now restore saved marks, if any.
if (_objs_with_preserved_marks != NULL) {
@@ -4248,16 +4242,16 @@ G1ParScanThreadState::G1ParScanThreadState(G1CollectedHeap* g1h, uint queue_num)
// non-young regions (where the age is -1)
// We also add a few elements at the beginning and at the end in
// an attempt to eliminate cache contention
- size_t real_length = 1 + _g1h->g1_policy()->young_cset_region_length();
- size_t array_length = PADDING_ELEM_NUM +
- real_length +
- PADDING_ELEM_NUM;
+ uint real_length = 1 + _g1h->g1_policy()->young_cset_region_length();
+ uint array_length = PADDING_ELEM_NUM +
+ real_length +
+ PADDING_ELEM_NUM;
_surviving_young_words_base = NEW_C_HEAP_ARRAY(size_t, array_length);
if (_surviving_young_words_base == NULL)
vm_exit_out_of_memory(array_length * sizeof(size_t),
"Not enough space for young surv histo.");
_surviving_young_words = _surviving_young_words_base + PADDING_ELEM_NUM;
- memset(_surviving_young_words, 0, real_length * sizeof(size_t));
+ memset(_surviving_young_words, 0, (size_t) real_length * sizeof(size_t));
_alloc_buffers[GCAllocForSurvived] = &_surviving_alloc_buffer;
_alloc_buffers[GCAllocForTenured] = &_tenured_alloc_buffer;
@@ -4355,7 +4349,8 @@ G1ParClosureSuper::G1ParClosureSuper(G1CollectedHeap* g1,
_during_initial_mark(_g1->g1_policy()->during_initial_mark_pause()),
_mark_in_progress(_g1->mark_in_progress()) { }
-void G1ParCopyHelper::mark_object(oop obj) {
+template
+void G1ParCopyClosure::mark_object(oop obj) {
#ifdef ASSERT
HeapRegion* hr = _g1->heap_region_containing(obj);
assert(hr != NULL, "sanity");
@@ -4366,7 +4361,9 @@ void G1ParCopyHelper::mark_object(oop obj) {
_cm->grayRoot(obj, (size_t) obj->size(), _worker_id);
}
-void G1ParCopyHelper::mark_forwarded_object(oop from_obj, oop to_obj) {
+template
+void G1ParCopyClosure
+ ::mark_forwarded_object(oop from_obj, oop to_obj) {
#ifdef ASSERT
assert(from_obj->is_forwarded(), "from obj should be forwarded");
assert(from_obj->forwardee() == to_obj, "to obj should be the forwardee");
@@ -4388,8 +4385,10 @@ void G1ParCopyHelper::mark_forwarded_object(oop from_obj, oop to_obj) {
_cm->grayRoot(to_obj, (size_t) from_obj->size(), _worker_id);
}
-oop G1ParCopyHelper::copy_to_survivor_space(oop old) {
- size_t word_sz = old->size();
+template
+oop G1ParCopyClosure
+ ::copy_to_survivor_space(oop old) {
+ size_t word_sz = old->size();
HeapRegion* from_region = _g1->heap_region_containing_raw(old);
// +1 to make the -1 indexes valid...
int young_index = from_region->young_index_in_cset()+1;
@@ -4457,8 +4456,8 @@ oop G1ParCopyHelper::copy_to_survivor_space(oop old) {
} else {
// No point in using the slower heap_region_containing() method,
// given that we know obj is in the heap.
- _scanner->set_region(_g1->heap_region_containing_raw(obj));
- obj->oop_iterate_backwards(_scanner);
+ _scanner.set_region(_g1->heap_region_containing_raw(obj));
+ obj->oop_iterate_backwards(&_scanner);
}
} else {
_par_scan_state->undo_allocation(alloc_purpose, obj_ptr, word_sz);
@@ -4675,67 +4674,74 @@ public:
double start_time_ms = os::elapsedTime() * 1000.0;
_g1h->g1_policy()->record_gc_worker_start_time(worker_id, start_time_ms);
- ResourceMark rm;
- HandleMark hm;
-
- ReferenceProcessor* rp = _g1h->ref_processor_stw();
-
- G1ParScanThreadState pss(_g1h, worker_id);
- G1ParScanHeapEvacClosure scan_evac_cl(_g1h, &pss, rp);
- G1ParScanHeapEvacFailureClosure evac_failure_cl(_g1h, &pss, rp);
- G1ParScanPartialArrayClosure partial_scan_cl(_g1h, &pss, rp);
-
- pss.set_evac_closure(&scan_evac_cl);
- pss.set_evac_failure_closure(&evac_failure_cl);
- pss.set_partial_scan_closure(&partial_scan_cl);
-
- G1ParScanExtRootClosure only_scan_root_cl(_g1h, &pss, rp);
- G1ParScanPermClosure only_scan_perm_cl(_g1h, &pss, rp);
-
- G1ParScanAndMarkExtRootClosure scan_mark_root_cl(_g1h, &pss, rp);
- G1ParScanAndMarkPermClosure scan_mark_perm_cl(_g1h, &pss, rp);
-
- OopClosure* scan_root_cl = &only_scan_root_cl;
- OopsInHeapRegionClosure* scan_perm_cl = &only_scan_perm_cl;
-
- if (_g1h->g1_policy()->during_initial_mark_pause()) {
- // We also need to mark copied objects.
- scan_root_cl = &scan_mark_root_cl;
- scan_perm_cl = &scan_mark_perm_cl;
- }
-
- G1ParPushHeapRSClosure push_heap_rs_cl(_g1h, &pss);
-
- pss.start_strong_roots();
- _g1h->g1_process_strong_roots(/* not collecting perm */ false,
- SharedHeap::SO_AllClasses,
- scan_root_cl,
- &push_heap_rs_cl,
- scan_perm_cl,
- worker_id);
- pss.end_strong_roots();
-
{
- double start = os::elapsedTime();
- G1ParEvacuateFollowersClosure evac(_g1h, &pss, _queues, &_terminator);
- evac.do_void();
- double elapsed_ms = (os::elapsedTime()-start)*1000.0;
- double term_ms = pss.term_time()*1000.0;
- _g1h->g1_policy()->record_obj_copy_time(worker_id, elapsed_ms-term_ms);
- _g1h->g1_policy()->record_termination(worker_id, term_ms, pss.term_attempts());
- }
- _g1h->g1_policy()->record_thread_age_table(pss.age_table());
- _g1h->update_surviving_young_words(pss.surviving_young_words()+1);
+ ResourceMark rm;
+ HandleMark hm;
- // Clean up any par-expanded rem sets.
- HeapRegionRemSet::par_cleanup();
+ ReferenceProcessor* rp = _g1h->ref_processor_stw();
- if (ParallelGCVerbose) {
- MutexLocker x(stats_lock());
- pss.print_termination_stats(worker_id);
+ G1ParScanThreadState pss(_g1h, worker_id);
+ G1ParScanHeapEvacClosure scan_evac_cl(_g1h, &pss, rp);
+ G1ParScanHeapEvacFailureClosure evac_failure_cl(_g1h, &pss, rp);
+ G1ParScanPartialArrayClosure partial_scan_cl(_g1h, &pss, rp);
+
+ pss.set_evac_closure(&scan_evac_cl);
+ pss.set_evac_failure_closure(&evac_failure_cl);
+ pss.set_partial_scan_closure(&partial_scan_cl);
+
+ G1ParScanExtRootClosure only_scan_root_cl(_g1h, &pss, rp);
+ G1ParScanPermClosure only_scan_perm_cl(_g1h, &pss, rp);
+
+ G1ParScanAndMarkExtRootClosure scan_mark_root_cl(_g1h, &pss, rp);
+ G1ParScanAndMarkPermClosure scan_mark_perm_cl(_g1h, &pss, rp);
+
+ OopClosure* scan_root_cl = &only_scan_root_cl;
+ OopsInHeapRegionClosure* scan_perm_cl = &only_scan_perm_cl;
+
+ if (_g1h->g1_policy()->during_initial_mark_pause()) {
+ // We also need to mark copied objects.
+ scan_root_cl = &scan_mark_root_cl;
+ scan_perm_cl = &scan_mark_perm_cl;
+ }
+
+ G1ParPushHeapRSClosure push_heap_rs_cl(_g1h, &pss);
+
+ pss.start_strong_roots();
+ _g1h->g1_process_strong_roots(/* not collecting perm */ false,
+ SharedHeap::SO_AllClasses,
+ scan_root_cl,
+ &push_heap_rs_cl,
+ scan_perm_cl,
+ worker_id);
+ pss.end_strong_roots();
+
+ {
+ double start = os::elapsedTime();
+ G1ParEvacuateFollowersClosure evac(_g1h, &pss, _queues, &_terminator);
+ evac.do_void();
+ double elapsed_ms = (os::elapsedTime()-start)*1000.0;
+ double term_ms = pss.term_time()*1000.0;
+ _g1h->g1_policy()->record_obj_copy_time(worker_id, elapsed_ms-term_ms);
+ _g1h->g1_policy()->record_termination(worker_id, term_ms, pss.term_attempts());
+ }
+ _g1h->g1_policy()->record_thread_age_table(pss.age_table());
+ _g1h->update_surviving_young_words(pss.surviving_young_words()+1);
+
+ // Clean up any par-expanded rem sets.
+ HeapRegionRemSet::par_cleanup();
+
+ if (ParallelGCVerbose) {
+ MutexLocker x(stats_lock());
+ pss.print_termination_stats(worker_id);
+ }
+
+ assert(pss.refs()->is_empty(), "should be empty");
+
+ // Close the inner scope so that the ResourceMark and HandleMark
+ // destructors are executed here and are included as part of the
+ // "GC Worker Time".
}
- assert(pss.refs()->is_empty(), "should be empty");
double end_time_ms = os::elapsedTime() * 1000.0;
_g1h->g1_policy()->record_gc_worker_end_time(worker_id, end_time_ms);
}
@@ -4743,6 +4749,67 @@ public:
// *** Common G1 Evacuation Stuff
+// Closures that support the filtering of CodeBlobs scanned during
+// external root scanning.
+
+// Closure applied to reference fields in code blobs (specifically nmethods)
+// to determine whether an nmethod contains references that point into
+// the collection set. Used as a predicate when walking code roots so
+// that only nmethods that point into the collection set are added to the
+// 'marked' list.
+
+class G1FilteredCodeBlobToOopClosure : public CodeBlobToOopClosure {
+
+ class G1PointsIntoCSOopClosure : public OopClosure {
+ G1CollectedHeap* _g1;
+ bool _points_into_cs;
+ public:
+ G1PointsIntoCSOopClosure(G1CollectedHeap* g1) :
+ _g1(g1), _points_into_cs(false) { }
+
+ bool points_into_cs() const { return _points_into_cs; }
+
+ template
+ void do_oop_nv(T* p) {
+ if (!_points_into_cs) {
+ T heap_oop = oopDesc::load_heap_oop(p);
+ if (!oopDesc::is_null(heap_oop) &&
+ _g1->in_cset_fast_test(oopDesc::decode_heap_oop_not_null(heap_oop))) {
+ _points_into_cs = true;
+ }
+ }
+ }
+
+ virtual void do_oop(oop* p) { do_oop_nv(p); }
+ virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
+ };
+
+ G1CollectedHeap* _g1;
+
+public:
+ G1FilteredCodeBlobToOopClosure(G1CollectedHeap* g1, OopClosure* cl) :
+ CodeBlobToOopClosure(cl, true), _g1(g1) { }
+
+ virtual void do_code_blob(CodeBlob* cb) {
+ nmethod* nm = cb->as_nmethod_or_null();
+ if (nm != NULL && !(nm->test_oops_do_mark())) {
+ G1PointsIntoCSOopClosure predicate_cl(_g1);
+ nm->oops_do(&predicate_cl);
+
+ if (predicate_cl.points_into_cs()) {
+ // At least one of the reference fields or the oop relocations
+ // in the nmethod points into the collection set. We have to
+ // 'mark' this nmethod.
+ // Note: Revisit the following if CodeBlobToOopClosure::do_code_blob()
+ // or MarkingCodeBlobClosure::do_code_blob() change.
+ if (!nm->test_set_oops_do_mark()) {
+ do_newly_marked_nmethod(nm);
+ }
+ }
+ }
+ }
+};
+
// This method is run in a GC worker.
void
@@ -4764,7 +4831,7 @@ g1_process_strong_roots(bool collecting_perm_gen,
// Walk the code cache w/o buffering, because StarTask cannot handle
// unaligned oop locations.
- CodeBlobToOopClosure eager_scan_code_roots(scan_non_heap_roots, /*do_marking=*/ true);
+ G1FilteredCodeBlobToOopClosure eager_scan_code_roots(this, scan_non_heap_roots);
process_strong_roots(false, // no scoping; this is parallel code
collecting_perm_gen, so,
@@ -5378,25 +5445,39 @@ void G1CollectedHeap::evacuate_collection_set() {
rem_set()->prepare_for_younger_refs_iterate(true);
assert(dirty_card_queue_set().completed_buffers_num() == 0, "Should be empty");
- double start_par = os::elapsedTime();
+ double start_par_time_sec = os::elapsedTime();
+ double end_par_time_sec;
- if (G1CollectedHeap::use_parallel_gc_threads()) {
- // The individual threads will set their evac-failure closures.
+ {
StrongRootsScope srs(this);
- if (ParallelGCVerbose) G1ParScanThreadState::print_termination_stats_hdr();
- // These tasks use ShareHeap::_process_strong_tasks
- assert(UseDynamicNumberOfGCThreads ||
- workers()->active_workers() == workers()->total_workers(),
- "If not dynamic should be using all the workers");
- workers()->run_task(&g1_par_task);
- } else {
- StrongRootsScope srs(this);
- g1_par_task.set_for_termination(n_workers);
- g1_par_task.work(0);
+
+ if (G1CollectedHeap::use_parallel_gc_threads()) {
+ // The individual threads will set their evac-failure closures.
+ if (ParallelGCVerbose) G1ParScanThreadState::print_termination_stats_hdr();
+ // These tasks use ShareHeap::_process_strong_tasks
+ assert(UseDynamicNumberOfGCThreads ||
+ workers()->active_workers() == workers()->total_workers(),
+ "If not dynamic should be using all the workers");
+ workers()->run_task(&g1_par_task);
+ } else {
+ g1_par_task.set_for_termination(n_workers);
+ g1_par_task.work(0);
+ }
+ end_par_time_sec = os::elapsedTime();
+
+ // Closing the inner scope will execute the destructor
+ // for the StrongRootsScope object. We record the current
+ // elapsed time before closing the scope so that time
+ // taken for the SRS destructor is NOT included in the
+ // reported parallel time.
}
- double par_time = (os::elapsedTime() - start_par) * 1000.0;
- g1_policy()->record_par_time(par_time);
+ double par_time_ms = (end_par_time_sec - start_par_time_sec) * 1000.0;
+ g1_policy()->record_par_time(par_time_ms);
+
+ double code_root_fixup_time_ms =
+ (os::elapsedTime() - end_par_time_sec) * 1000.0;
+ g1_policy()->record_code_root_fixup_time(code_root_fixup_time_ms);
set_par_threads(0);
@@ -5427,9 +5508,9 @@ void G1CollectedHeap::evacuate_collection_set() {
if (evacuation_failed()) {
remove_self_forwarding_pointers();
- if (PrintGCDetails) {
+ if (G1Log::finer()) {
gclog_or_tty->print(" (to-space overflow)");
- } else if (PrintGC) {
+ } else if (G1Log::fine()) {
gclog_or_tty->print("--");
}
}
@@ -5504,8 +5585,8 @@ void G1CollectedHeap::free_humongous_region(HeapRegion* hr,
hr->set_notHumongous();
free_region(hr, &hr_pre_used, free_list, par);
- size_t i = hr->hrs_index() + 1;
- size_t num = 1;
+ uint i = hr->hrs_index() + 1;
+ uint num = 1;
while (i < n_regions()) {
HeapRegion* curr_hr = region_at(i);
if (!curr_hr->continuesHumongous()) {
@@ -5714,7 +5795,7 @@ void G1CollectedHeap::free_collection_set(HeapRegion* cs_head) {
if (cur->is_young()) {
int index = cur->young_index_in_cset();
assert(index != -1, "invariant");
- assert((size_t) index < policy->young_cset_region_length(), "invariant");
+ assert((uint) index < policy->young_cset_region_length(), "invariant");
size_t words_survived = _surviving_young_words[index];
cur->record_surv_words_in_group(words_survived);
@@ -6054,7 +6135,7 @@ void MutatorAllocRegion::retire_region(HeapRegion* alloc_region,
// Methods for the GC alloc regions
HeapRegion* G1CollectedHeap::new_gc_alloc_region(size_t word_size,
- size_t count,
+ uint count,
GCAllocPurpose ap) {
assert(FreeList_lock->owned_by_self(), "pre-condition");
@@ -6126,7 +6207,7 @@ private:
FreeRegionList* _free_list;
OldRegionSet* _old_set;
HumongousRegionSet* _humongous_set;
- size_t _region_count;
+ uint _region_count;
public:
VerifyRegionListsClosure(OldRegionSet* old_set,
@@ -6135,7 +6216,7 @@ public:
_old_set(old_set), _humongous_set(humongous_set),
_free_list(free_list), _region_count(0) { }
- size_t region_count() { return _region_count; }
+ uint region_count() { return _region_count; }
bool doHeapRegion(HeapRegion* hr) {
_region_count += 1;
@@ -6157,7 +6238,7 @@ public:
}
};
-HeapRegion* G1CollectedHeap::new_heap_region(size_t hrs_index,
+HeapRegion* G1CollectedHeap::new_heap_region(uint hrs_index,
HeapWord* bottom) {
HeapWord* end = bottom + HeapRegion::GrainWords;
MemRegion mr(bottom, end);
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
index c1ccc4fac2b..9b8e795c024 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
@@ -85,8 +85,8 @@ private:
HeapRegion* _curr;
- size_t _length;
- size_t _survivor_length;
+ uint _length;
+ uint _survivor_length;
size_t _last_sampled_rs_lengths;
size_t _sampled_rs_lengths;
@@ -101,8 +101,8 @@ public:
void empty_list();
bool is_empty() { return _length == 0; }
- size_t length() { return _length; }
- size_t survivor_length() { return _survivor_length; }
+ uint length() { return _length; }
+ uint survivor_length() { return _survivor_length; }
// Currently we do not keep track of the used byte sum for the
// young list and the survivors and it'd be quite a lot of work to
@@ -111,10 +111,10 @@ public:
// we'll report the more accurate information then.
size_t eden_used_bytes() {
assert(length() >= survivor_length(), "invariant");
- return (length() - survivor_length()) * HeapRegion::GrainBytes;
+ return (size_t) (length() - survivor_length()) * HeapRegion::GrainBytes;
}
size_t survivor_used_bytes() {
- return survivor_length() * HeapRegion::GrainBytes;
+ return (size_t) survivor_length() * HeapRegion::GrainBytes;
}
void rs_length_sampling_init();
@@ -199,7 +199,8 @@ class G1CollectedHeap : public SharedHeap {
friend class OldGCAllocRegion;
// Closures used in implementation.
- friend class G1ParCopyHelper;
+ template
+ friend class G1ParCopyClosure;
friend class G1IsAliveClosure;
friend class G1EvacuateFollowersClosure;
friend class G1ParScanThreadState;
@@ -246,7 +247,7 @@ private:
MasterHumongousRegionSet _humongous_set;
// The number of regions we could create by expansion.
- size_t _expansion_regions;
+ uint _expansion_regions;
// The block offset table for the G1 heap.
G1BlockOffsetSharedArray* _bot_shared;
@@ -338,7 +339,7 @@ private:
bool* _in_cset_fast_test_base;
// The length of the _in_cset_fast_test_base array.
- size_t _in_cset_fast_test_length;
+ uint _in_cset_fast_test_length;
volatile unsigned _gc_time_stamp;
@@ -457,14 +458,14 @@ protected:
// length and remove them from the master free list. Return the
// index of the first region or G1_NULL_HRS_INDEX if the search
// was unsuccessful.
- size_t humongous_obj_allocate_find_first(size_t num_regions,
- size_t word_size);
+ uint humongous_obj_allocate_find_first(uint num_regions,
+ size_t word_size);
// Initialize a contiguous set of free regions of length num_regions
// and starting at index first so that they appear as a single
// humongous region.
- HeapWord* humongous_obj_allocate_initialize_regions(size_t first,
- size_t num_regions,
+ HeapWord* humongous_obj_allocate_initialize_regions(uint first,
+ uint num_regions,
size_t word_size);
// Attempt to allocate a humongous object of the given size. Return
@@ -573,7 +574,7 @@ protected:
size_t allocated_bytes);
// For GC alloc regions.
- HeapRegion* new_gc_alloc_region(size_t word_size, size_t count,
+ HeapRegion* new_gc_alloc_region(size_t word_size, uint count,
GCAllocPurpose ap);
void retire_gc_alloc_region(HeapRegion* alloc_region,
size_t allocated_bytes, GCAllocPurpose ap);
@@ -640,7 +641,7 @@ public:
void register_region_with_in_cset_fast_test(HeapRegion* r) {
assert(_in_cset_fast_test_base != NULL, "sanity");
assert(r->in_collection_set(), "invariant");
- size_t index = r->hrs_index();
+ uint index = r->hrs_index();
assert(index < _in_cset_fast_test_length, "invariant");
assert(!_in_cset_fast_test_base[index], "invariant");
_in_cset_fast_test_base[index] = true;
@@ -654,7 +655,7 @@ public:
if (_g1_committed.contains((HeapWord*) obj)) {
// no need to subtract the bottom of the heap from obj,
// _in_cset_fast_test is biased
- size_t index = ((size_t) obj) >> HeapRegion::LogOfHRGrainBytes;
+ uintx index = (uintx) obj >> HeapRegion::LogOfHRGrainBytes;
bool ret = _in_cset_fast_test[index];
// let's make sure the result is consistent with what the slower
// test returns
@@ -669,7 +670,7 @@ public:
void clear_cset_fast_test() {
assert(_in_cset_fast_test_base != NULL, "sanity");
memset(_in_cset_fast_test_base, false,
- _in_cset_fast_test_length * sizeof(bool));
+ (size_t) _in_cset_fast_test_length * sizeof(bool));
}
// This is called at the end of either a concurrent cycle or a Full
@@ -1100,23 +1101,23 @@ public:
}
// The total number of regions in the heap.
- size_t n_regions() { return _hrs.length(); }
+ uint n_regions() { return _hrs.length(); }
// The max number of regions in the heap.
- size_t max_regions() { return _hrs.max_length(); }
+ uint max_regions() { return _hrs.max_length(); }
// The number of regions that are completely free.
- size_t free_regions() { return _free_list.length(); }
+ uint free_regions() { return _free_list.length(); }
// The number of regions that are not completely free.
- size_t used_regions() { return n_regions() - free_regions(); }
+ uint used_regions() { return n_regions() - free_regions(); }
// The number of regions available for "regular" expansion.
- size_t expansion_regions() { return _expansion_regions; }
+ uint expansion_regions() { return _expansion_regions; }
// Factory method for HeapRegion instances. It will return NULL if
// the allocation fails.
- HeapRegion* new_heap_region(size_t hrs_index, HeapWord* bottom);
+ HeapRegion* new_heap_region(uint hrs_index, HeapWord* bottom);
void verify_not_dirty_region(HeapRegion* hr) PRODUCT_RETURN;
void verify_dirty_region(HeapRegion* hr) PRODUCT_RETURN;
@@ -1300,7 +1301,7 @@ public:
void heap_region_iterate_from(HeapRegion* r, HeapRegionClosure* blk) const;
// Return the region with the given index. It assumes the index is valid.
- HeapRegion* region_at(size_t index) const { return _hrs.at(index); }
+ HeapRegion* region_at(uint index) const { return _hrs.at(index); }
// Divide the heap region sequence into "chunks" of some size (the number
// of regions divided by the number of parallel threads times some
@@ -1503,10 +1504,10 @@ public:
// Currently there is only one place where this is called with
// vo == UseMarkWord, which is to verify the marking during a
// full GC.
- void verify(bool allow_dirty, bool silent, VerifyOption vo);
+ void verify(bool silent, VerifyOption vo);
// Override; it uses the "prev" marking information
- virtual void verify(bool allow_dirty, bool silent);
+ virtual void verify(bool silent);
virtual void print_on(outputStream* st) const;
virtual void print_extended_on(outputStream* st) const;
@@ -1676,202 +1677,6 @@ protected:
size_t _max_heap_capacity;
};
-#define use_local_bitmaps 1
-#define verify_local_bitmaps 0
-#define oop_buffer_length 256
-
-#ifndef PRODUCT
-class GCLabBitMap;
-class GCLabBitMapClosure: public BitMapClosure {
-private:
- ConcurrentMark* _cm;
- GCLabBitMap* _bitmap;
-
-public:
- GCLabBitMapClosure(ConcurrentMark* cm,
- GCLabBitMap* bitmap) {
- _cm = cm;
- _bitmap = bitmap;
- }
-
- virtual bool do_bit(size_t offset);
-};
-#endif // !PRODUCT
-
-class GCLabBitMap: public BitMap {
-private:
- ConcurrentMark* _cm;
-
- int _shifter;
- size_t _bitmap_word_covers_words;
-
- // beginning of the heap
- HeapWord* _heap_start;
-
- // this is the actual start of the GCLab
- HeapWord* _real_start_word;
-
- // this is the actual end of the GCLab
- HeapWord* _real_end_word;
-
- // this is the first word, possibly located before the actual start
- // of the GCLab, that corresponds to the first bit of the bitmap
- HeapWord* _start_word;
-
- // size of a GCLab in words
- size_t _gclab_word_size;
-
- static int shifter() {
- return MinObjAlignment - 1;
- }
-
- // how many heap words does a single bitmap word corresponds to?
- static size_t bitmap_word_covers_words() {
- return BitsPerWord << shifter();
- }
-
- size_t gclab_word_size() const {
- return _gclab_word_size;
- }
-
- // Calculates actual GCLab size in words
- size_t gclab_real_word_size() const {
- return bitmap_size_in_bits(pointer_delta(_real_end_word, _start_word))
- / BitsPerWord;
- }
-
- static size_t bitmap_size_in_bits(size_t gclab_word_size) {
- size_t bits_in_bitmap = gclab_word_size >> shifter();
- // We are going to ensure that the beginning of a word in this
- // bitmap also corresponds to the beginning of a word in the
- // global marking bitmap. To handle the case where a GCLab
- // starts from the middle of the bitmap, we need to add enough
- // space (i.e. up to a bitmap word) to ensure that we have
- // enough bits in the bitmap.
- return bits_in_bitmap + BitsPerWord - 1;
- }
-public:
- GCLabBitMap(HeapWord* heap_start, size_t gclab_word_size)
- : BitMap(bitmap_size_in_bits(gclab_word_size)),
- _cm(G1CollectedHeap::heap()->concurrent_mark()),
- _shifter(shifter()),
- _bitmap_word_covers_words(bitmap_word_covers_words()),
- _heap_start(heap_start),
- _gclab_word_size(gclab_word_size),
- _real_start_word(NULL),
- _real_end_word(NULL),
- _start_word(NULL) {
- guarantee(false, "GCLabBitMap::GCLabBitmap(): don't call this any more");
- }
-
- inline unsigned heapWordToOffset(HeapWord* addr) {
- unsigned offset = (unsigned) pointer_delta(addr, _start_word) >> _shifter;
- assert(offset < size(), "offset should be within bounds");
- return offset;
- }
-
- inline HeapWord* offsetToHeapWord(size_t offset) {
- HeapWord* addr = _start_word + (offset << _shifter);
- assert(_real_start_word <= addr && addr < _real_end_word, "invariant");
- return addr;
- }
-
- bool fields_well_formed() {
- bool ret1 = (_real_start_word == NULL) &&
- (_real_end_word == NULL) &&
- (_start_word == NULL);
- if (ret1)
- return true;
-
- bool ret2 = _real_start_word >= _start_word &&
- _start_word < _real_end_word &&
- (_real_start_word + _gclab_word_size) == _real_end_word &&
- (_start_word + _gclab_word_size + _bitmap_word_covers_words)
- > _real_end_word;
- return ret2;
- }
-
- inline bool mark(HeapWord* addr) {
- guarantee(use_local_bitmaps, "invariant");
- assert(fields_well_formed(), "invariant");
-
- if (addr >= _real_start_word && addr < _real_end_word) {
- assert(!isMarked(addr), "should not have already been marked");
-
- // first mark it on the bitmap
- at_put(heapWordToOffset(addr), true);
-
- return true;
- } else {
- return false;
- }
- }
-
- inline bool isMarked(HeapWord* addr) {
- guarantee(use_local_bitmaps, "invariant");
- assert(fields_well_formed(), "invariant");
-
- return at(heapWordToOffset(addr));
- }
-
- void set_buffer(HeapWord* start) {
- guarantee(false, "set_buffer(): don't call this any more");
-
- guarantee(use_local_bitmaps, "invariant");
- clear();
-
- assert(start != NULL, "invariant");
- _real_start_word = start;
- _real_end_word = start + _gclab_word_size;
-
- size_t diff =
- pointer_delta(start, _heap_start) % _bitmap_word_covers_words;
- _start_word = start - diff;
-
- assert(fields_well_formed(), "invariant");
- }
-
-#ifndef PRODUCT
- void verify() {
- // verify that the marks have been propagated
- GCLabBitMapClosure cl(_cm, this);
- iterate(&cl);
- }
-#endif // PRODUCT
-
- void retire() {
- guarantee(false, "retire(): don't call this any more");
-
- guarantee(use_local_bitmaps, "invariant");
- assert(fields_well_formed(), "invariant");
-
- if (_start_word != NULL) {
- CMBitMap* mark_bitmap = _cm->nextMarkBitMap();
-
- // this means that the bitmap was set up for the GCLab
- assert(_real_start_word != NULL && _real_end_word != NULL, "invariant");
-
- mark_bitmap->mostly_disjoint_range_union(this,
- 0, // always start from the start of the bitmap
- _start_word,
- gclab_real_word_size());
- _cm->grayRegionIfNecessary(MemRegion(_real_start_word, _real_end_word));
-
-#ifndef PRODUCT
- if (use_local_bitmaps && verify_local_bitmaps)
- verify();
-#endif // PRODUCT
- } else {
- assert(_real_start_word == NULL && _real_end_word == NULL, "invariant");
- }
- }
-
- size_t bitmap_size_in_words() const {
- return (bitmap_size_in_bits(gclab_word_size()) + BitsPerWord - 1) / BitsPerWord;
- }
-
-};
-
class G1ParGCAllocBuffer: public ParGCAllocBuffer {
private:
bool _retired;
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp
index 9e01add3f9d..d656f260ba1 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp
@@ -29,6 +29,7 @@
#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
#include "gc_implementation/g1/g1CollectorPolicy.hpp"
#include "gc_implementation/g1/g1ErgoVerbose.hpp"
+#include "gc_implementation/g1/g1Log.hpp"
#include "gc_implementation/g1/heapRegionRemSet.hpp"
#include "gc_implementation/shared/gcPolicyCounters.hpp"
#include "runtime/arguments.hpp"
@@ -140,7 +141,6 @@ G1CollectorPolicy::G1CollectorPolicy() :
_summary(new Summary()),
_cur_clear_ct_time_ms(0.0),
- _mark_closure_time_ms(0.0),
_root_region_scan_wait_time_ms(0.0),
_cur_ref_proc_time_ms(0.0),
@@ -192,11 +192,6 @@ G1CollectorPolicy::G1CollectorPolicy() :
_in_marking_window(false),
_in_marking_window_im(false),
- _known_garbage_ratio(0.0),
- _known_garbage_bytes(0),
-
- _young_gc_eff_seq(new TruncatedSeq(TruncatedSeqLength)),
-
_recent_prev_end_times_for_all_gcs_sec(
new TruncatedSeq(NumPrevPausesForHeuristics)),
@@ -431,31 +426,36 @@ G1YoungGenSizer::G1YoungGenSizer() : _sizer_kind(SizerDefaults), _adaptive_size(
}
if (FLAG_IS_CMDLINE(NewSize)) {
- _min_desired_young_length = MAX2((size_t) 1, NewSize / HeapRegion::GrainBytes);
+ _min_desired_young_length = MAX2((uint) (NewSize / HeapRegion::GrainBytes),
+ 1U);
if (FLAG_IS_CMDLINE(MaxNewSize)) {
- _max_desired_young_length = MAX2((size_t) 1, MaxNewSize / HeapRegion::GrainBytes);
+ _max_desired_young_length =
+ MAX2((uint) (MaxNewSize / HeapRegion::GrainBytes),
+ 1U);
_sizer_kind = SizerMaxAndNewSize;
_adaptive_size = _min_desired_young_length == _max_desired_young_length;
} else {
_sizer_kind = SizerNewSizeOnly;
}
} else if (FLAG_IS_CMDLINE(MaxNewSize)) {
- _max_desired_young_length = MAX2((size_t) 1, MaxNewSize / HeapRegion::GrainBytes);
+ _max_desired_young_length =
+ MAX2((uint) (MaxNewSize / HeapRegion::GrainBytes),
+ 1U);
_sizer_kind = SizerMaxNewSizeOnly;
}
}
-size_t G1YoungGenSizer::calculate_default_min_length(size_t new_number_of_heap_regions) {
- size_t default_value = (new_number_of_heap_regions * G1DefaultMinNewGenPercent) / 100;
- return MAX2((size_t)1, default_value);
+uint G1YoungGenSizer::calculate_default_min_length(uint new_number_of_heap_regions) {
+ uint default_value = (new_number_of_heap_regions * G1DefaultMinNewGenPercent) / 100;
+ return MAX2(1U, default_value);
}
-size_t G1YoungGenSizer::calculate_default_max_length(size_t new_number_of_heap_regions) {
- size_t default_value = (new_number_of_heap_regions * G1DefaultMaxNewGenPercent) / 100;
- return MAX2((size_t)1, default_value);
+uint G1YoungGenSizer::calculate_default_max_length(uint new_number_of_heap_regions) {
+ uint default_value = (new_number_of_heap_regions * G1DefaultMaxNewGenPercent) / 100;
+ return MAX2(1U, default_value);
}
-void G1YoungGenSizer::heap_size_changed(size_t new_number_of_heap_regions) {
+void G1YoungGenSizer::heap_size_changed(uint new_number_of_heap_regions) {
assert(new_number_of_heap_regions > 0, "Heap must be initialized");
switch (_sizer_kind) {
@@ -512,16 +512,16 @@ void G1CollectorPolicy::initialize_gc_policy_counters() {
_gc_policy_counters = new GCPolicyCounters("GarbageFirst", 1, 3);
}
-bool G1CollectorPolicy::predict_will_fit(size_t young_length,
+bool G1CollectorPolicy::predict_will_fit(uint young_length,
double base_time_ms,
- size_t base_free_regions,
+ uint base_free_regions,
double target_pause_time_ms) {
if (young_length >= base_free_regions) {
// end condition 1: not enough space for the young regions
return false;
}
- double accum_surv_rate = accum_yg_surv_rate_pred((int)(young_length - 1));
+ double accum_surv_rate = accum_yg_surv_rate_pred((int) young_length - 1);
size_t bytes_to_copy =
(size_t) (accum_surv_rate * (double) HeapRegion::GrainBytes);
double copy_time_ms = predict_object_copy_time_ms(bytes_to_copy);
@@ -533,7 +533,7 @@ bool G1CollectorPolicy::predict_will_fit(size_t young_length,
}
size_t free_bytes =
- (base_free_regions - young_length) * HeapRegion::GrainBytes;
+ (base_free_regions - young_length) * HeapRegion::GrainBytes;
if ((2.0 * sigma()) * (double) bytes_to_copy > (double) free_bytes) {
// end condition 3: out-of-space (conservatively!)
return false;
@@ -543,25 +543,25 @@ bool G1CollectorPolicy::predict_will_fit(size_t young_length,
return true;
}
-void G1CollectorPolicy::record_new_heap_size(size_t new_number_of_regions) {
+void G1CollectorPolicy::record_new_heap_size(uint new_number_of_regions) {
// re-calculate the necessary reserve
double reserve_regions_d = (double) new_number_of_regions * _reserve_factor;
// We use ceiling so that if reserve_regions_d is > 0.0 (but
// smaller than 1.0) we'll get 1.
- _reserve_regions = (size_t) ceil(reserve_regions_d);
+ _reserve_regions = (uint) ceil(reserve_regions_d);
_young_gen_sizer->heap_size_changed(new_number_of_regions);
}
-size_t G1CollectorPolicy::calculate_young_list_desired_min_length(
- size_t base_min_length) {
- size_t desired_min_length = 0;
+uint G1CollectorPolicy::calculate_young_list_desired_min_length(
+ uint base_min_length) {
+ uint desired_min_length = 0;
if (adaptive_young_list_length()) {
if (_alloc_rate_ms_seq->num() > 3) {
double now_sec = os::elapsedTime();
double when_ms = _mmu_tracker->when_max_gc_sec(now_sec) * 1000.0;
double alloc_rate_ms = predict_alloc_rate_ms();
- desired_min_length = (size_t) ceil(alloc_rate_ms * when_ms);
+ desired_min_length = (uint) ceil(alloc_rate_ms * when_ms);
} else {
// otherwise we don't have enough info to make the prediction
}
@@ -571,7 +571,7 @@ size_t G1CollectorPolicy::calculate_young_list_desired_min_length(
return MAX2(_young_gen_sizer->min_desired_young_length(), desired_min_length);
}
-size_t G1CollectorPolicy::calculate_young_list_desired_max_length() {
+uint G1CollectorPolicy::calculate_young_list_desired_max_length() {
// Here, we might want to also take into account any additional
// constraints (i.e., user-defined minimum bound). Currently, we
// effectively don't set this bound.
@@ -588,11 +588,11 @@ void G1CollectorPolicy::update_young_list_target_length(size_t rs_lengths) {
// Calculate the absolute and desired min bounds.
// This is how many young regions we already have (currently: the survivors).
- size_t base_min_length = recorded_survivor_regions();
+ uint base_min_length = recorded_survivor_regions();
// This is the absolute minimum young length, which ensures that we
// can allocate one eden region in the worst-case.
- size_t absolute_min_length = base_min_length + 1;
- size_t desired_min_length =
+ uint absolute_min_length = base_min_length + 1;
+ uint desired_min_length =
calculate_young_list_desired_min_length(base_min_length);
if (desired_min_length < absolute_min_length) {
desired_min_length = absolute_min_length;
@@ -601,16 +601,16 @@ void G1CollectorPolicy::update_young_list_target_length(size_t rs_lengths) {
// Calculate the absolute and desired max bounds.
// We will try our best not to "eat" into the reserve.
- size_t absolute_max_length = 0;
+ uint absolute_max_length = 0;
if (_free_regions_at_end_of_collection > _reserve_regions) {
absolute_max_length = _free_regions_at_end_of_collection - _reserve_regions;
}
- size_t desired_max_length = calculate_young_list_desired_max_length();
+ uint desired_max_length = calculate_young_list_desired_max_length();
if (desired_max_length > absolute_max_length) {
desired_max_length = absolute_max_length;
}
- size_t young_list_target_length = 0;
+ uint young_list_target_length = 0;
if (adaptive_young_list_length()) {
if (gcs_are_young()) {
young_list_target_length =
@@ -648,11 +648,11 @@ void G1CollectorPolicy::update_young_list_target_length(size_t rs_lengths) {
update_max_gc_locker_expansion();
}
-size_t
+uint
G1CollectorPolicy::calculate_young_list_target_length(size_t rs_lengths,
- size_t base_min_length,
- size_t desired_min_length,
- size_t desired_max_length) {
+ uint base_min_length,
+ uint desired_min_length,
+ uint desired_max_length) {
assert(adaptive_young_list_length(), "pre-condition");
assert(gcs_are_young(), "only call this for young GCs");
@@ -667,9 +667,9 @@ G1CollectorPolicy::calculate_young_list_target_length(size_t rs_lengths,
// will be reflected in the predictions by the
// survivor_regions_evac_time prediction.
assert(desired_min_length > base_min_length, "invariant");
- size_t min_young_length = desired_min_length - base_min_length;
+ uint min_young_length = desired_min_length - base_min_length;
assert(desired_max_length > base_min_length, "invariant");
- size_t max_young_length = desired_max_length - base_min_length;
+ uint max_young_length = desired_max_length - base_min_length;
double target_pause_time_ms = _mmu_tracker->max_gc_time() * 1000.0;
double survivor_regions_evac_time = predict_survivor_regions_evac_time();
@@ -679,8 +679,8 @@ G1CollectorPolicy::calculate_young_list_target_length(size_t rs_lengths,
double base_time_ms =
predict_base_elapsed_time_ms(pending_cards, scanned_cards) +
survivor_regions_evac_time;
- size_t available_free_regions = _free_regions_at_end_of_collection;
- size_t base_free_regions = 0;
+ uint available_free_regions = _free_regions_at_end_of_collection;
+ uint base_free_regions = 0;
if (available_free_regions > _reserve_regions) {
base_free_regions = available_free_regions - _reserve_regions;
}
@@ -717,9 +717,9 @@ G1CollectorPolicy::calculate_young_list_target_length(size_t rs_lengths,
// the new max. This way we maintain the loop invariants.
assert(min_young_length < max_young_length, "invariant");
- size_t diff = (max_young_length - min_young_length) / 2;
+ uint diff = (max_young_length - min_young_length) / 2;
while (diff > 0) {
- size_t young_length = min_young_length + diff;
+ uint young_length = min_young_length + diff;
if (predict_will_fit(young_length, base_time_ms,
base_free_regions, target_pause_time_ms)) {
min_young_length = young_length;
@@ -863,8 +863,6 @@ void G1CollectorPolicy::record_full_collection_end() {
_last_young_gc = false;
clear_initiate_conc_mark_if_possible();
clear_during_initial_mark_pause();
- _known_garbage_bytes = 0;
- _known_garbage_ratio = 0.0;
_in_marking_window = false;
_in_marking_window_im = false;
@@ -877,7 +875,7 @@ void G1CollectorPolicy::record_full_collection_end() {
// Reset survivors SurvRateGroup.
_survivor_surv_rate_group->reset();
update_young_list_target_length();
- _collectionSetChooser->clearMarkedHeapRegions();
+ _collectionSetChooser->clear();
}
void G1CollectorPolicy::record_stop_world_start() {
@@ -886,7 +884,7 @@ void G1CollectorPolicy::record_stop_world_start() {
void G1CollectorPolicy::record_collection_pause_start(double start_time_sec,
size_t start_used) {
- if (PrintGCDetails) {
+ if (G1Log::finer()) {
gclog_or_tty->stamp(PrintGCTimeStamps);
gclog_or_tty->print("[GC pause");
gclog_or_tty->print(" (%s)", gcs_are_young() ? "young" : "mixed");
@@ -944,9 +942,6 @@ void G1CollectorPolicy::record_collection_pause_start(double start_time_sec,
_cur_aux_times_set[i] = false;
}
- // This is initialized to zero here and is set during
- // the evacuation pause if marking is in progress.
- _cur_satb_drain_time_ms = 0.0;
// This is initialized to zero here and is set during the evacuation
// pause if we actually waited for the root region scanning to finish.
_root_region_scan_wait_time_ms = 0.0;
@@ -1026,11 +1021,16 @@ void G1CollectorPolicy::print_par_stats(int level,
if (val > max)
max = val;
total += val;
- buf.append(" %3.1lf", val);
+ if (G1Log::finest()) {
+ buf.append(" %.1lf", val);
+ }
+ }
+
+ if (G1Log::finest()) {
+ buf.append_and_print_cr("");
}
- buf.append_and_print_cr("");
double avg = total / (double) no_of_gc_threads();
- buf.append_and_print_cr(" Avg: %5.1lf, Min: %5.1lf, Max: %5.1lf, Diff: %5.1lf]",
+ buf.append_and_print_cr(" Avg: %.1lf Min: %.1lf Max: %.1lf Diff: %.1lf]",
avg, min, max, max - min);
}
@@ -1227,7 +1227,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
// These values are used to update the summary information that is
// displayed when TraceGen0Time is enabled, and are output as part
- // of the PrintGCDetails output, in the non-parallel case.
+ // of the "finer" output, in the non-parallel case.
double ext_root_scan_time = avg_value(_par_last_ext_root_scan_times_ms);
double satb_filtering_time = avg_value(_par_last_satb_filtering_times_ms);
@@ -1246,11 +1246,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
double other_time_ms = elapsed_ms;
- // Subtract the SATB drain time. It's initialized to zero at the
- // start of the pause and is updated during the pause if marking
- // is in progress.
- other_time_ms -= _cur_satb_drain_time_ms;
-
// Subtract the root region scanning wait time. It's initialized to
// zero at the start of the pause.
other_time_ms -= _root_region_scan_wait_time_ms;
@@ -1261,15 +1256,13 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
other_time_ms -= known_time;
}
+ // Now subtract the time taken to fix up roots in generated code
+ other_time_ms -= _cur_collection_code_root_fixup_time_ms;
+
// Subtract the time taken to clean the card table from the
// current value of "other time"
other_time_ms -= _cur_clear_ct_time_ms;
- // Subtract the time spent completing marking in the collection
- // set. Note if marking is not in progress during the pause
- // the value of _mark_closure_time_ms will be zero.
- other_time_ms -= _mark_closure_time_ms;
-
// TraceGen0Time and TraceGen1Time summary info updating.
_all_pause_times_ms->add(elapsed_ms);
@@ -1280,16 +1273,8 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
MainBodySummary* body_summary = _summary->main_body_summary();
assert(body_summary != NULL, "should not be null!");
- // This will be non-zero iff marking is currently in progress (i.e.
- // _g1->mark_in_progress() == true) and the currrent pause was not
- // an initial mark pause. Since the body_summary items are NumberSeqs,
- // however, they have to be consistent and updated in lock-step with
- // each other. Therefore we unconditionally record the SATB drain
- // time - even if it's zero.
- body_summary->record_satb_drain_time_ms(_cur_satb_drain_time_ms);
body_summary->record_root_region_scan_wait_time_ms(
_root_region_scan_wait_time_ms);
-
body_summary->record_ext_root_scan_time_ms(ext_root_scan_time);
body_summary->record_satb_filtering_time_ms(satb_filtering_time);
body_summary->record_update_rs_time_ms(update_rs_time);
@@ -1305,7 +1290,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
body_summary->record_parallel_other_time_ms(parallel_other_time);
}
- body_summary->record_mark_closure_time_ms(_mark_closure_time_ms);
body_summary->record_clear_ct_time_ms(_cur_clear_ct_time_ms);
// We exempt parallel collection from this check because Alloc Buffer
@@ -1336,7 +1320,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
// given that humongous object allocations do not really affect
// either the pause's duration nor when the next pause will take
// place we can safely ignore them here.
- size_t regions_allocated = eden_cset_region_length();
+ uint regions_allocated = eden_cset_region_length();
double alloc_rate_ms = (double) regions_allocated / app_time_ms;
_alloc_rate_ms_seq->add(alloc_rate_ms);
@@ -1376,8 +1360,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
}
}
- // PrintGCDetails output
- if (PrintGCDetails) {
+ if (G1Log::finer()) {
bool print_marking_info =
_g1->mark_in_progress() && !last_pause_included_initial_mark;
@@ -1396,15 +1379,19 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
print_par_stats(2, "SATB Filtering", _par_last_satb_filtering_times_ms);
}
print_par_stats(2, "Update RS", _par_last_update_rs_times_ms);
- print_par_sizes(3, "Processed Buffers", _par_last_update_rs_processed_buffers);
+ if (G1Log::finest()) {
+ print_par_sizes(3, "Processed Buffers", _par_last_update_rs_processed_buffers);
+ }
print_par_stats(2, "Scan RS", _par_last_scan_rs_times_ms);
print_par_stats(2, "Object Copy", _par_last_obj_copy_times_ms);
print_par_stats(2, "Termination", _par_last_termination_times_ms);
- print_par_sizes(3, "Termination Attempts", _par_last_termination_attempts);
- print_par_stats(2, "GC Worker End", _par_last_gc_worker_end_times_ms);
+ if (G1Log::finest()) {
+ print_par_sizes(3, "Termination Attempts", _par_last_termination_attempts);
+ }
for (int i = 0; i < _parallel_gc_threads; i++) {
- _par_last_gc_worker_times_ms[i] = _par_last_gc_worker_end_times_ms[i] - _par_last_gc_worker_start_times_ms[i];
+ _par_last_gc_worker_times_ms[i] = _par_last_gc_worker_end_times_ms[i] -
+ _par_last_gc_worker_start_times_ms[i];
double worker_known_time = _par_last_ext_root_scan_times_ms[i] +
_par_last_satb_filtering_times_ms[i] +
@@ -1413,23 +1400,26 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
_par_last_obj_copy_times_ms[i] +
_par_last_termination_times_ms[i];
- _par_last_gc_worker_other_times_ms[i] = _cur_collection_par_time_ms - worker_known_time;
+ _par_last_gc_worker_other_times_ms[i] = _par_last_gc_worker_times_ms[i] -
+ worker_known_time;
}
- print_par_stats(2, "GC Worker", _par_last_gc_worker_times_ms);
+
print_par_stats(2, "GC Worker Other", _par_last_gc_worker_other_times_ms);
+ print_par_stats(2, "GC Worker Total", _par_last_gc_worker_times_ms);
+ print_par_stats(2, "GC Worker End", _par_last_gc_worker_end_times_ms);
} else {
print_stats(1, "Ext Root Scanning", ext_root_scan_time);
if (print_marking_info) {
print_stats(1, "SATB Filtering", satb_filtering_time);
}
print_stats(1, "Update RS", update_rs_time);
- print_stats(2, "Processed Buffers", (int)update_rs_processed_buffers);
+ if (G1Log::finest()) {
+ print_stats(2, "Processed Buffers", (int)update_rs_processed_buffers);
+ }
print_stats(1, "Scan RS", scan_rs_time);
print_stats(1, "Object Copying", obj_copy_time);
}
- if (print_marking_info) {
- print_stats(1, "Complete CSet Marking", _mark_closure_time_ms);
- }
+ print_stats(1, "Code Root Fixup", _cur_collection_code_root_fixup_time_ms);
print_stats(1, "Clear CT", _cur_clear_ct_time_ms);
#ifndef PRODUCT
print_stats(1, "Cur Clear CC", _cur_clear_cc_time_ms);
@@ -1459,16 +1449,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
}
}
- // Update the efficiency-since-mark vars.
- double proc_ms = elapsed_ms * (double) _parallel_gc_threads;
- if (elapsed_ms < MIN_TIMER_GRANULARITY) {
- // This usually happens due to the timer not having the required
- // granularity. Some Linuxes are the usual culprits.
- // We'll just set it to something (arbitrarily) small.
- proc_ms = 1.0;
- }
- double cur_efficiency = (double) freed_bytes / proc_ms;
-
bool new_in_marking_window = _in_marking_window;
bool new_in_marking_window_im = false;
if (during_initial_mark_pause()) {
@@ -1503,10 +1483,6 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
}
}
- if (_last_gc_was_young && !_during_marking) {
- _young_gc_eff_seq->add(cur_efficiency);
- }
-
_short_lived_surv_rate_group->start_adding_regions();
// do that for any other surv rate groupsx
@@ -1514,8 +1490,9 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
double pause_time_ms = elapsed_ms;
size_t diff = 0;
- if (_max_pending_cards >= _pending_cards)
+ if (_max_pending_cards >= _pending_cards) {
diff = _max_pending_cards - _pending_cards;
+ }
_pending_card_diff_seq->add((double) diff);
double cost_per_card_ms = 0.0;
@@ -1577,8 +1554,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
}
double all_other_time_ms = pause_time_ms -
- (update_rs_time + scan_rs_time + obj_copy_time +
- _mark_closure_time_ms + termination_time);
+ (update_rs_time + scan_rs_time + obj_copy_time + termination_time);
double young_other_time_ms = 0.0;
if (young_cset_region_length() > 0) {
@@ -1621,7 +1597,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
double update_rs_time_goal_ms = _mmu_tracker->max_gc_time() * MILLIUNITS * G1RSetUpdatingPauseTimePercent / 100.0;
adjust_concurrent_refinement(update_rs_time, update_rs_processed_buffers, update_rs_time_goal_ms);
- assert(assertMarkedBytesDataOK(), "Marked regions not OK at pause end.");
+ _collectionSetChooser->verify();
}
#define EXT_SIZE_FORMAT "%d%s"
@@ -1630,7 +1606,7 @@ void G1CollectorPolicy::record_collection_pause_end(int no_of_gc_threads) {
proper_unit_for_byte_size((bytes))
void G1CollectorPolicy::print_heap_transition() {
- if (PrintGCDetails) {
+ if (G1Log::finer()) {
YoungList* young_list = _g1->young_list();
size_t eden_bytes = young_list->eden_used_bytes();
size_t survivor_bytes = young_list->survivor_used_bytes();
@@ -1657,7 +1633,7 @@ void G1CollectorPolicy::print_heap_transition() {
EXT_SIZE_PARAMS(capacity));
_prev_eden_capacity = eden_capacity;
- } else if (PrintGC) {
+ } else if (G1Log::fine()) {
_g1->print_size_transition(gclog_or_tty,
_cur_collection_pause_used_at_start_bytes,
_g1->used(), _g1->capacity());
@@ -1705,41 +1681,6 @@ void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time,
dcqs.notify_if_necessary();
}
-double
-G1CollectorPolicy::
-predict_young_collection_elapsed_time_ms(size_t adjustment) {
- guarantee( adjustment == 0 || adjustment == 1, "invariant" );
-
- G1CollectedHeap* g1h = G1CollectedHeap::heap();
- size_t young_num = g1h->young_list()->length();
- if (young_num == 0)
- return 0.0;
-
- young_num += adjustment;
- size_t pending_cards = predict_pending_cards();
- size_t rs_lengths = g1h->young_list()->sampled_rs_lengths() +
- predict_rs_length_diff();
- size_t card_num;
- if (gcs_are_young()) {
- card_num = predict_young_card_num(rs_lengths);
- } else {
- card_num = predict_non_young_card_num(rs_lengths);
- }
- size_t young_byte_size = young_num * HeapRegion::GrainBytes;
- double accum_yg_surv_rate =
- _short_lived_surv_rate_group->accum_surv_rate(adjustment);
-
- size_t bytes_to_copy =
- (size_t) (accum_yg_surv_rate * (double) HeapRegion::GrainBytes);
-
- return
- predict_rs_update_time_ms(pending_cards) +
- predict_rs_scan_time_ms(card_num) +
- predict_object_copy_time_ms(bytes_to_copy) +
- predict_young_other_time_ms(young_num) +
- predict_constant_other_time_ms();
-}
-
double
G1CollectorPolicy::predict_base_elapsed_time_ms(size_t pending_cards) {
size_t rs_length = predict_rs_length_diff();
@@ -1785,8 +1726,7 @@ G1CollectorPolicy::predict_region_elapsed_time_ms(HeapRegion* hr,
return region_elapsed_time_ms;
}
-size_t
-G1CollectorPolicy::predict_bytes_to_copy(HeapRegion* hr) {
+size_t G1CollectorPolicy::predict_bytes_to_copy(HeapRegion* hr) {
size_t bytes_to_copy;
if (hr->is_marked())
bytes_to_copy = hr->max_live_bytes();
@@ -1800,8 +1740,8 @@ G1CollectorPolicy::predict_bytes_to_copy(HeapRegion* hr) {
}
void
-G1CollectorPolicy::init_cset_region_lengths(size_t eden_cset_region_length,
- size_t survivor_cset_region_length) {
+G1CollectorPolicy::init_cset_region_lengths(uint eden_cset_region_length,
+ uint survivor_cset_region_length) {
_eden_cset_region_length = eden_cset_region_length;
_survivor_cset_region_length = survivor_cset_region_length;
_old_cset_region_length = 0;
@@ -1973,7 +1913,6 @@ void G1CollectorPolicy::print_summary(PauseSummary* summary) const {
print_summary(1, "Object Copy", body_summary->get_obj_copy_seq());
}
}
- print_summary(1, "Mark Closure", body_summary->get_mark_closure_seq());
print_summary(1, "Clear CT", body_summary->get_clear_ct_seq());
print_summary(1, "Other", summary->get_other_seq());
{
@@ -1982,17 +1921,15 @@ void G1CollectorPolicy::print_summary(PauseSummary* summary) const {
if (parallel) {
// parallel
NumberSeq* other_parts[] = {
- body_summary->get_satb_drain_seq(),
body_summary->get_root_region_scan_wait_seq(),
body_summary->get_parallel_seq(),
body_summary->get_clear_ct_seq()
};
calc_other_times_ms = NumberSeq(summary->get_total_seq(),
- 4, other_parts);
+ 3, other_parts);
} else {
// serial
NumberSeq* other_parts[] = {
- body_summary->get_satb_drain_seq(),
body_summary->get_root_region_scan_wait_seq(),
body_summary->get_update_rs_seq(),
body_summary->get_ext_root_scan_seq(),
@@ -2001,7 +1938,7 @@ void G1CollectorPolicy::print_summary(PauseSummary* summary) const {
body_summary->get_obj_copy_seq()
};
calc_other_times_ms = NumberSeq(summary->get_total_seq(),
- 7, other_parts);
+ 6, other_parts);
}
check_other_times(1, summary->get_other_seq(), &calc_other_times_ms);
}
@@ -2068,7 +2005,7 @@ region_num_to_mbs(int length) {
}
#endif // PRODUCT
-size_t G1CollectorPolicy::max_regions(int purpose) {
+uint G1CollectorPolicy::max_regions(int purpose) {
switch (purpose) {
case GCAllocForSurvived:
return _max_survivor_regions;
@@ -2081,13 +2018,13 @@ size_t G1CollectorPolicy::max_regions(int purpose) {
}
void G1CollectorPolicy::update_max_gc_locker_expansion() {
- size_t expansion_region_num = 0;
+ uint expansion_region_num = 0;
if (GCLockerEdenExpansionPercent > 0) {
double perc = (double) GCLockerEdenExpansionPercent / 100.0;
double expansion_region_num_d = perc * (double) _young_list_target_length;
// We use ceiling so that if expansion_region_num_d is > 0.0 (but
// less than 1.0) we'll get 1.
- expansion_region_num = (size_t) ceil(expansion_region_num_d);
+ expansion_region_num = (uint) ceil(expansion_region_num_d);
} else {
assert(expansion_region_num == 0, "sanity");
}
@@ -2101,34 +2038,12 @@ void G1CollectorPolicy::update_survivors_policy() {
(double) _young_list_target_length / (double) SurvivorRatio;
// We use ceiling so that if max_survivor_regions_d is > 0.0 (but
// smaller than 1.0) we'll get 1.
- _max_survivor_regions = (size_t) ceil(max_survivor_regions_d);
+ _max_survivor_regions = (uint) ceil(max_survivor_regions_d);
_tenuring_threshold = _survivors_age_table.compute_tenuring_threshold(
HeapRegion::GrainWords * _max_survivor_regions);
}
-#ifndef PRODUCT
-class HRSortIndexIsOKClosure: public HeapRegionClosure {
- CollectionSetChooser* _chooser;
-public:
- HRSortIndexIsOKClosure(CollectionSetChooser* chooser) :
- _chooser(chooser) {}
-
- bool doHeapRegion(HeapRegion* r) {
- if (!r->continuesHumongous()) {
- assert(_chooser->regionProperlyOrdered(r), "Ought to be.");
- }
- return false;
- }
-};
-
-bool G1CollectorPolicy::assertMarkedBytesDataOK() {
- HRSortIndexIsOKClosure cl(_collectionSetChooser);
- _g1->heap_region_iterate(&cl);
- return true;
-}
-#endif
-
bool G1CollectorPolicy::force_initial_mark_if_outside_cycle(
GCCause::Cause gc_cause) {
bool during_cycle = _g1->concurrent_mark()->cmThread()->during_cycle();
@@ -2226,8 +2141,8 @@ public:
// We will skip any region that's currently used as an old GC
// alloc region (we should not consider those for collection
// before we fill them up).
- if (_hrSorted->shouldAdd(r) && !_g1h->is_old_gc_alloc_region(r)) {
- _hrSorted->addMarkedHeapRegion(r);
+ if (_hrSorted->should_add(r) && !_g1h->is_old_gc_alloc_region(r)) {
+ _hrSorted->add_region(r);
}
}
return false;
@@ -2237,16 +2152,14 @@ public:
class ParKnownGarbageHRClosure: public HeapRegionClosure {
G1CollectedHeap* _g1h;
CollectionSetChooser* _hrSorted;
- jint _marked_regions_added;
+ uint _marked_regions_added;
size_t _reclaimable_bytes_added;
- jint _chunk_size;
- jint _cur_chunk_idx;
- jint _cur_chunk_end; // Cur chunk [_cur_chunk_idx, _cur_chunk_end)
- int _worker;
- int _invokes;
+ uint _chunk_size;
+ uint _cur_chunk_idx;
+ uint _cur_chunk_end; // Cur chunk [_cur_chunk_idx, _cur_chunk_end)
void get_new_chunk() {
- _cur_chunk_idx = _hrSorted->getParMarkedHeapRegionChunk(_chunk_size);
+ _cur_chunk_idx = _hrSorted->claim_array_chunk(_chunk_size);
_cur_chunk_end = _cur_chunk_idx + _chunk_size;
}
void add_region(HeapRegion* r) {
@@ -2254,7 +2167,7 @@ class ParKnownGarbageHRClosure: public HeapRegionClosure {
get_new_chunk();
}
assert(_cur_chunk_idx < _cur_chunk_end, "postcondition");
- _hrSorted->setMarkedHeapRegion(_cur_chunk_idx, r);
+ _hrSorted->set_region(_cur_chunk_idx, r);
_marked_regions_added++;
_reclaimable_bytes_added += r->reclaimable_bytes();
_cur_chunk_idx++;
@@ -2262,104 +2175,79 @@ class ParKnownGarbageHRClosure: public HeapRegionClosure {
public:
ParKnownGarbageHRClosure(CollectionSetChooser* hrSorted,
- jint chunk_size,
- int worker) :
+ uint chunk_size) :
_g1h(G1CollectedHeap::heap()),
- _hrSorted(hrSorted), _chunk_size(chunk_size), _worker(worker),
+ _hrSorted(hrSorted), _chunk_size(chunk_size),
_marked_regions_added(0), _reclaimable_bytes_added(0),
- _cur_chunk_idx(0), _cur_chunk_end(0), _invokes(0) { }
+ _cur_chunk_idx(0), _cur_chunk_end(0) { }
bool doHeapRegion(HeapRegion* r) {
- // We only include humongous regions in collection
- // sets when concurrent mark shows that their contained object is
- // unreachable.
- _invokes++;
-
// Do we have any marking information for this region?
if (r->is_marked()) {
// We will skip any region that's currently used as an old GC
// alloc region (we should not consider those for collection
// before we fill them up).
- if (_hrSorted->shouldAdd(r) && !_g1h->is_old_gc_alloc_region(r)) {
+ if (_hrSorted->should_add(r) && !_g1h->is_old_gc_alloc_region(r)) {
add_region(r);
}
}
return false;
}
- jint marked_regions_added() { return _marked_regions_added; }
+ uint marked_regions_added() { return _marked_regions_added; }
size_t reclaimable_bytes_added() { return _reclaimable_bytes_added; }
- int invokes() { return _invokes; }
};
class ParKnownGarbageTask: public AbstractGangTask {
CollectionSetChooser* _hrSorted;
- jint _chunk_size;
+ uint _chunk_size;
G1CollectedHeap* _g1;
public:
- ParKnownGarbageTask(CollectionSetChooser* hrSorted, jint chunk_size) :
+ ParKnownGarbageTask(CollectionSetChooser* hrSorted, uint chunk_size) :
AbstractGangTask("ParKnownGarbageTask"),
_hrSorted(hrSorted), _chunk_size(chunk_size),
_g1(G1CollectedHeap::heap()) { }
void work(uint worker_id) {
- ParKnownGarbageHRClosure parKnownGarbageCl(_hrSorted,
- _chunk_size,
- worker_id);
+ ParKnownGarbageHRClosure parKnownGarbageCl(_hrSorted, _chunk_size);
+
// Back to zero for the claim value.
_g1->heap_region_par_iterate_chunked(&parKnownGarbageCl, worker_id,
_g1->workers()->active_workers(),
HeapRegion::InitialClaimValue);
- jint regions_added = parKnownGarbageCl.marked_regions_added();
+ uint regions_added = parKnownGarbageCl.marked_regions_added();
size_t reclaimable_bytes_added =
parKnownGarbageCl.reclaimable_bytes_added();
- _hrSorted->updateTotals(regions_added, reclaimable_bytes_added);
- if (G1PrintParCleanupStats) {
- gclog_or_tty->print_cr(" Thread %d called %d times, added %d regions to list.",
- worker_id, parKnownGarbageCl.invokes(), regions_added);
- }
+ _hrSorted->update_totals(regions_added, reclaimable_bytes_added);
}
};
void
G1CollectorPolicy::record_concurrent_mark_cleanup_end(int no_of_gc_threads) {
- double start_sec;
- if (G1PrintParCleanupStats) {
- start_sec = os::elapsedTime();
- }
-
- _collectionSetChooser->clearMarkedHeapRegions();
- double clear_marked_end_sec;
- if (G1PrintParCleanupStats) {
- clear_marked_end_sec = os::elapsedTime();
- gclog_or_tty->print_cr(" clear marked regions: %8.3f ms.",
- (clear_marked_end_sec - start_sec) * 1000.0);
- }
+ _collectionSetChooser->clear();
+ uint region_num = _g1->n_regions();
if (G1CollectedHeap::use_parallel_gc_threads()) {
- const size_t OverpartitionFactor = 4;
- size_t WorkUnit;
+ const uint OverpartitionFactor = 4;
+ uint WorkUnit;
// The use of MinChunkSize = 8 in the original code
// causes some assertion failures when the total number of
// region is less than 8. The code here tries to fix that.
// Should the original code also be fixed?
if (no_of_gc_threads > 0) {
- const size_t MinWorkUnit =
- MAX2(_g1->n_regions() / no_of_gc_threads, (size_t) 1U);
- WorkUnit =
- MAX2(_g1->n_regions() / (no_of_gc_threads * OverpartitionFactor),
- MinWorkUnit);
+ const uint MinWorkUnit = MAX2(region_num / no_of_gc_threads, 1U);
+ WorkUnit = MAX2(region_num / (no_of_gc_threads * OverpartitionFactor),
+ MinWorkUnit);
} else {
assert(no_of_gc_threads > 0,
"The active gc workers should be greater than 0");
// In a product build do something reasonable to avoid a crash.
- const size_t MinWorkUnit =
- MAX2(_g1->n_regions() / ParallelGCThreads, (size_t) 1U);
+ const uint MinWorkUnit = MAX2(region_num / (uint) ParallelGCThreads, 1U);
WorkUnit =
- MAX2(_g1->n_regions() / (ParallelGCThreads * OverpartitionFactor),
+ MAX2(region_num / (uint) (ParallelGCThreads * OverpartitionFactor),
MinWorkUnit);
}
- _collectionSetChooser->prepareForAddMarkedHeapRegionsPar(_g1->n_regions(),
- WorkUnit);
+ _collectionSetChooser->prepare_for_par_region_addition(_g1->n_regions(),
+ WorkUnit);
ParKnownGarbageTask parKnownGarbageTask(_collectionSetChooser,
(int) WorkUnit);
_g1->workers()->run_task(&parKnownGarbageTask);
@@ -2370,20 +2258,10 @@ G1CollectorPolicy::record_concurrent_mark_cleanup_end(int no_of_gc_threads) {
KnownGarbageClosure knownGarbagecl(_collectionSetChooser);
_g1->heap_region_iterate(&knownGarbagecl);
}
- double known_garbage_end_sec;
- if (G1PrintParCleanupStats) {
- known_garbage_end_sec = os::elapsedTime();
- gclog_or_tty->print_cr(" compute known garbage: %8.3f ms.",
- (known_garbage_end_sec - clear_marked_end_sec) * 1000.0);
- }
- _collectionSetChooser->sortMarkedHeapRegions();
+ _collectionSetChooser->sort_regions();
+
double end_sec = os::elapsedTime();
- if (G1PrintParCleanupStats) {
- gclog_or_tty->print_cr(" sorting: %8.3f ms.",
- (end_sec - known_garbage_end_sec) * 1000.0);
- }
-
double elapsed_time_ms = (end_sec - _mark_cleanup_start_sec) * 1000.0;
_concurrent_mark_cleanup_times_ms->add(elapsed_time_ms);
_cur_mark_stop_world_time_ms += elapsed_time_ms;
@@ -2599,13 +2477,13 @@ void G1CollectorPolicy::print_collection_set(HeapRegion* list_head, outputStream
bool G1CollectorPolicy::next_gc_should_be_mixed(const char* true_action_str,
const char* false_action_str) {
CollectionSetChooser* cset_chooser = _collectionSetChooser;
- if (cset_chooser->isEmpty()) {
+ if (cset_chooser->is_empty()) {
ergo_verbose0(ErgoMixedGCs,
false_action_str,
ergo_format_reason("candidate old regions not available"));
return false;
}
- size_t reclaimable_bytes = cset_chooser->remainingReclaimableBytes();
+ size_t reclaimable_bytes = cset_chooser->remaining_reclaimable_bytes();
size_t capacity_bytes = _g1->capacity();
double perc = (double) reclaimable_bytes * 100.0 / (double) capacity_bytes;
double threshold = (double) G1HeapWastePercent;
@@ -2616,7 +2494,7 @@ bool G1CollectorPolicy::next_gc_should_be_mixed(const char* true_action_str,
ergo_format_region("candidate old regions")
ergo_format_byte_perc("reclaimable")
ergo_format_perc("threshold"),
- cset_chooser->remainingRegions(),
+ cset_chooser->remaining_regions(),
reclaimable_bytes, perc, threshold);
return false;
}
@@ -2627,7 +2505,7 @@ bool G1CollectorPolicy::next_gc_should_be_mixed(const char* true_action_str,
ergo_format_region("candidate old regions")
ergo_format_byte_perc("reclaimable")
ergo_format_perc("threshold"),
- cset_chooser->remainingRegions(),
+ cset_chooser->remaining_regions(),
reclaimable_bytes, perc, threshold);
return true;
}
@@ -2671,8 +2549,8 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) {
// pause are appended to the RHS of the young list, i.e.
// [Newly Young Regions ++ Survivors from last pause].
- size_t survivor_region_length = young_list->survivor_length();
- size_t eden_region_length = young_list->length() - survivor_region_length;
+ uint survivor_region_length = young_list->survivor_length();
+ uint eden_region_length = young_list->length() - survivor_region_length;
init_cset_region_lengths(eden_region_length, survivor_region_length);
hr = young_list->first_survivor_region();
while (hr != NULL) {
@@ -2710,11 +2588,11 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) {
if (!gcs_are_young()) {
CollectionSetChooser* cset_chooser = _collectionSetChooser;
- assert(cset_chooser->verify(), "CSet Chooser verification - pre");
- const size_t min_old_cset_length = cset_chooser->calcMinOldCSetLength();
- const size_t max_old_cset_length = cset_chooser->calcMaxOldCSetLength();
+ cset_chooser->verify();
+ const uint min_old_cset_length = cset_chooser->calc_min_old_cset_length();
+ const uint max_old_cset_length = cset_chooser->calc_max_old_cset_length();
- size_t expensive_region_num = 0;
+ uint expensive_region_num = 0;
bool check_time_remaining = adaptive_young_list_length();
HeapRegion* hr = cset_chooser->peek();
while (hr != NULL) {
@@ -2799,7 +2677,7 @@ void G1CollectorPolicy::finalize_cset(double target_pause_time_ms) {
time_remaining_ms);
}
- assert(cset_chooser->verify(), "CSet Chooser verification - post");
+ cset_chooser->verify();
}
stop_incremental_cset_building();
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp
index 743859b1da5..7cdf79d7feb 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.hpp
@@ -64,7 +64,6 @@ public:
};
class MainBodySummary: public CHeapObj {
- define_num_seq(satb_drain) // optional
define_num_seq(root_region_scan_wait)
define_num_seq(parallel) // parallel only
define_num_seq(ext_root_scan)
@@ -74,7 +73,6 @@ class MainBodySummary: public CHeapObj {
define_num_seq(obj_copy)
define_num_seq(termination) // parallel only
define_num_seq(parallel_other) // parallel only
- define_num_seq(mark_closure)
define_num_seq(clear_ct)
};
@@ -130,19 +128,19 @@ private:
SizerNewRatio
};
SizerKind _sizer_kind;
- size_t _min_desired_young_length;
- size_t _max_desired_young_length;
+ uint _min_desired_young_length;
+ uint _max_desired_young_length;
bool _adaptive_size;
- size_t calculate_default_min_length(size_t new_number_of_heap_regions);
- size_t calculate_default_max_length(size_t new_number_of_heap_regions);
+ uint calculate_default_min_length(uint new_number_of_heap_regions);
+ uint calculate_default_max_length(uint new_number_of_heap_regions);
public:
G1YoungGenSizer();
- void heap_size_changed(size_t new_number_of_heap_regions);
- size_t min_desired_young_length() {
+ void heap_size_changed(uint new_number_of_heap_regions);
+ uint min_desired_young_length() {
return _min_desired_young_length;
}
- size_t max_desired_young_length() {
+ uint max_desired_young_length() {
return _max_desired_young_length;
}
bool adaptive_young_list_length() {
@@ -177,9 +175,11 @@ private:
double _cur_collection_start_sec;
size_t _cur_collection_pause_used_at_start_bytes;
- size_t _cur_collection_pause_used_regions_at_start;
+ uint _cur_collection_pause_used_regions_at_start;
double _cur_collection_par_time_ms;
- double _cur_satb_drain_time_ms;
+
+ double _cur_collection_code_root_fixup_time_ms;
+
double _cur_clear_ct_time_ms;
double _cur_ref_proc_time_ms;
double _cur_ref_enq_time_ms;
@@ -226,20 +226,20 @@ private:
double* _par_last_gc_worker_times_ms;
// Each workers 'other' time i.e. the elapsed time of the parallel
- // phase of the pause minus the sum of the individual sub-phase
- // times for a given worker thread.
+ // code executed by a worker minus the sum of the individual sub-phase
+ // times for that worker thread.
double* _par_last_gc_worker_other_times_ms;
// indicates whether we are in young or mixed GC mode
bool _gcs_are_young;
- size_t _young_list_target_length;
- size_t _young_list_fixed_length;
+ uint _young_list_target_length;
+ uint _young_list_fixed_length;
size_t _prev_eden_capacity; // used for logging
// The max number of regions we can extend the eden by while the GC
// locker is active. This should be >= _young_list_target_length;
- size_t _young_list_max_length;
+ uint _young_list_max_length;
bool _last_gc_was_young;
@@ -257,7 +257,7 @@ private:
double _gc_overhead_perc;
double _reserve_factor;
- size_t _reserve_regions;
+ uint _reserve_regions;
bool during_marking() {
return _during_marking;
@@ -288,22 +288,20 @@ private:
TruncatedSeq* _cost_per_byte_ms_during_cm_seq;
- TruncatedSeq* _young_gc_eff_seq;
-
G1YoungGenSizer* _young_gen_sizer;
- size_t _eden_cset_region_length;
- size_t _survivor_cset_region_length;
- size_t _old_cset_region_length;
+ uint _eden_cset_region_length;
+ uint _survivor_cset_region_length;
+ uint _old_cset_region_length;
- void init_cset_region_lengths(size_t eden_cset_region_length,
- size_t survivor_cset_region_length);
+ void init_cset_region_lengths(uint eden_cset_region_length,
+ uint survivor_cset_region_length);
- size_t eden_cset_region_length() { return _eden_cset_region_length; }
- size_t survivor_cset_region_length() { return _survivor_cset_region_length; }
- size_t old_cset_region_length() { return _old_cset_region_length; }
+ uint eden_cset_region_length() { return _eden_cset_region_length; }
+ uint survivor_cset_region_length() { return _survivor_cset_region_length; }
+ uint old_cset_region_length() { return _old_cset_region_length; }
- size_t _free_regions_at_end_of_collection;
+ uint _free_regions_at_end_of_collection;
size_t _recorded_rs_lengths;
size_t _max_rs_lengths;
@@ -315,9 +313,6 @@ private:
size_t _rs_lengths_prediction;
- size_t _known_garbage_bytes;
- double _known_garbage_ratio;
-
double sigma() { return _sigma; }
// A function that prevents us putting too much stock in small sample
@@ -488,7 +483,6 @@ public:
get_new_prediction(_non_young_other_cost_per_region_ms_seq);
}
- double predict_young_collection_elapsed_time_ms(size_t adjustment);
double predict_base_elapsed_time_ms(size_t pending_cards);
double predict_base_elapsed_time_ms(size_t pending_cards,
size_t scanned_cards);
@@ -497,10 +491,10 @@ public:
void set_recorded_rs_lengths(size_t rs_lengths);
- size_t cset_region_length() { return young_cset_region_length() +
- old_cset_region_length(); }
- size_t young_cset_region_length() { return eden_cset_region_length() +
- survivor_cset_region_length(); }
+ uint cset_region_length() { return young_cset_region_length() +
+ old_cset_region_length(); }
+ uint young_cset_region_length() { return eden_cset_region_length() +
+ survivor_cset_region_length(); }
void record_young_free_cset_time_ms(double time_ms) {
_recorded_young_free_cset_time_ms = time_ms;
@@ -510,10 +504,6 @@ public:
_recorded_non_young_free_cset_time_ms = time_ms;
}
- double predict_young_gc_eff() {
- return get_new_neg_prediction(_young_gc_eff_seq);
- }
-
double predict_survivor_regions_evac_time();
void cset_regions_freed() {
@@ -523,20 +513,6 @@ public:
// also call it on any more surv rate groups
}
- void set_known_garbage_bytes(size_t known_garbage_bytes) {
- _known_garbage_bytes = known_garbage_bytes;
- size_t heap_bytes = _g1->capacity();
- _known_garbage_ratio = (double) _known_garbage_bytes / (double) heap_bytes;
- }
-
- void decrease_known_garbage_bytes(size_t known_garbage_bytes) {
- guarantee( _known_garbage_bytes >= known_garbage_bytes, "invariant" );
-
- _known_garbage_bytes -= known_garbage_bytes;
- size_t heap_bytes = _g1->capacity();
- _known_garbage_ratio = (double) _known_garbage_bytes / (double) heap_bytes;
- }
-
G1MMUTracker* mmu_tracker() {
return _mmu_tracker;
}
@@ -709,7 +685,6 @@ private:
double _cur_mark_stop_world_time_ms;
double _mark_remark_start_sec;
double _mark_cleanup_start_sec;
- double _mark_closure_time_ms;
double _root_region_scan_wait_time_ms;
// Update the young list target length either by setting it to the
@@ -722,12 +697,12 @@ private:
// Calculate and return the minimum desired young list target
// length. This is the minimum desired young list length according
// to the user's inputs.
- size_t calculate_young_list_desired_min_length(size_t base_min_length);
+ uint calculate_young_list_desired_min_length(uint base_min_length);
// Calculate and return the maximum desired young list target
// length. This is the maximum desired young list length according
// to the user's inputs.
- size_t calculate_young_list_desired_max_length();
+ uint calculate_young_list_desired_max_length();
// Calculate and return the maximum young list target length that
// can fit into the pause time goal. The parameters are: rs_lengths
@@ -735,18 +710,18 @@ private:
// be, base_min_length is the alreay existing number of regions in
// the young list, min_length and max_length are the desired min and
// max young list length according to the user's inputs.
- size_t calculate_young_list_target_length(size_t rs_lengths,
- size_t base_min_length,
- size_t desired_min_length,
- size_t desired_max_length);
+ uint calculate_young_list_target_length(size_t rs_lengths,
+ uint base_min_length,
+ uint desired_min_length,
+ uint desired_max_length);
// Check whether a given young length (young_length) fits into the
// given target pause time and whether the prediction for the amount
// of objects to be copied for the given length will fit into the
// given free space (expressed by base_free_regions). It is used by
// calculate_young_list_target_length().
- bool predict_will_fit(size_t young_length, double base_time_ms,
- size_t base_free_regions, double target_pause_time_ms);
+ bool predict_will_fit(uint young_length, double base_time_ms,
+ uint base_free_regions, double target_pause_time_ms);
// Count the number of bytes used in the CS.
void count_CS_bytes_used();
@@ -775,7 +750,7 @@ public:
}
// This should be called after the heap is resized.
- void record_new_heap_size(size_t new_number_of_regions);
+ void record_new_heap_size(uint new_number_of_regions);
void init();
@@ -809,10 +784,6 @@ public:
void record_concurrent_mark_init_end(double
mark_init_elapsed_time_ms);
- void record_mark_closure_time(double mark_closure_time_ms) {
- _mark_closure_time_ms = mark_closure_time_ms;
- }
-
void record_root_region_scan_wait_time(double time_ms) {
_root_region_scan_wait_time_ms = time_ms;
}
@@ -846,11 +817,6 @@ public:
_par_last_satb_filtering_times_ms[worker_i] = ms;
}
- void record_satb_drain_time(double ms) {
- assert(_g1->mark_in_progress(), "shouldn't be here otherwise");
- _cur_satb_drain_time_ms = ms;
- }
-
void record_update_rs_time(int thread, double ms) {
_par_last_update_rs_times_ms[thread] = ms;
}
@@ -897,6 +863,10 @@ public:
_cur_collection_par_time_ms = ms;
}
+ void record_code_root_fixup_time(double ms) {
+ _cur_collection_code_root_fixup_time_ms = ms;
+ }
+
void record_aux_start_time(int i) {
guarantee(i < _aux_num, "should be within range");
_cur_aux_start_times_ms[i] = os::elapsedTime() * 1000.0;
@@ -1033,12 +1003,6 @@ public:
// exceeded the desired limit, return an amount to expand by.
size_t expansion_amount();
-#ifndef PRODUCT
- // Check any appropriate marked bytes info, asserting false if
- // something's wrong, else returning "true".
- bool assertMarkedBytesDataOK();
-#endif
-
// Print tracing information.
void print_tracing_info() const;
@@ -1055,18 +1019,18 @@ public:
}
bool is_young_list_full() {
- size_t young_list_length = _g1->young_list()->length();
- size_t young_list_target_length = _young_list_target_length;
+ uint young_list_length = _g1->young_list()->length();
+ uint young_list_target_length = _young_list_target_length;
return young_list_length >= young_list_target_length;
}
bool can_expand_young_list() {
- size_t young_list_length = _g1->young_list()->length();
- size_t young_list_max_length = _young_list_max_length;
+ uint young_list_length = _g1->young_list()->length();
+ uint young_list_max_length = _young_list_max_length;
return young_list_length < young_list_max_length;
}
- size_t young_list_max_length() {
+ uint young_list_max_length() {
return _young_list_max_length;
}
@@ -1081,19 +1045,6 @@ public:
return _young_gen_sizer->adaptive_young_list_length();
}
- inline double get_gc_eff_factor() {
- double ratio = _known_garbage_ratio;
-
- double square = ratio * ratio;
- // square = square * square;
- double ret = square * 9.0 + 1.0;
-#if 0
- gclog_or_tty->print_cr("ratio = %1.2lf, ret = %1.2lf", ratio, ret);
-#endif // 0
- guarantee(0.0 <= ret && ret < 10.0, "invariant!");
- return ret;
- }
-
private:
//
// Survivor regions policy.
@@ -1104,7 +1055,7 @@ private:
int _tenuring_threshold;
// The limit on the number of regions allocated for survivors.
- size_t _max_survivor_regions;
+ uint _max_survivor_regions;
// For reporting purposes.
size_t _eden_bytes_before_gc;
@@ -1112,7 +1063,7 @@ private:
size_t _capacity_before_gc;
// The amount of survor regions after a collection.
- size_t _recorded_survivor_regions;
+ uint _recorded_survivor_regions;
// List of survivor regions.
HeapRegion* _recorded_survivor_head;
HeapRegion* _recorded_survivor_tail;
@@ -1134,9 +1085,9 @@ public:
return purpose == GCAllocForSurvived;
}
- static const size_t REGIONS_UNLIMITED = ~(size_t)0;
+ static const uint REGIONS_UNLIMITED = (uint) -1;
- size_t max_regions(int purpose);
+ uint max_regions(int purpose);
// The limit on regions for a particular purpose is reached.
void note_alloc_region_limit_reached(int purpose) {
@@ -1153,7 +1104,7 @@ public:
_survivor_surv_rate_group->stop_adding_regions();
}
- void record_survivor_regions(size_t regions,
+ void record_survivor_regions(uint regions,
HeapRegion* head,
HeapRegion* tail) {
_recorded_survivor_regions = regions;
@@ -1161,12 +1112,11 @@ public:
_recorded_survivor_tail = tail;
}
- size_t recorded_survivor_regions() {
+ uint recorded_survivor_regions() {
return _recorded_survivor_regions;
}
- void record_thread_age_table(ageTable* age_table)
- {
+ void record_thread_age_table(ageTable* age_table) {
_survivors_age_table.merge_par(age_table);
}
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp
index 1e738fd9af0..20d34ddb7ff 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -120,7 +120,7 @@ public:
// Single parameter format strings
#define ergo_format_str(_name_) ", " _name_ ": %s"
-#define ergo_format_region(_name_) ", " _name_ ": "SIZE_FORMAT" regions"
+#define ergo_format_region(_name_) ", " _name_ ": %u regions"
#define ergo_format_byte(_name_) ", " _name_ ": "SIZE_FORMAT" bytes"
#define ergo_format_double(_name_) ", " _name_ ": %1.2f"
#define ergo_format_perc(_name_) ", " _name_ ": %1.2f %%"
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1Log.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1Log.cpp
new file mode 100644
index 00000000000..56d957f76b4
--- /dev/null
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1Log.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc_implementation/g1/g1_globals.hpp"
+#include "gc_implementation/g1/g1Log.hpp"
+#include "runtime/globals.hpp"
+
+G1Log::LogLevel G1Log::_level = G1Log::LevelNone;
+
+// If G1LogLevel has not been set up we will use the values of PrintGC
+// and PrintGCDetails for the logging level.
+// - PrintGC maps to "fine".
+// - PrintGCDetails maps to "finer".
+void G1Log::init() {
+ if (G1LogLevel != NULL && G1LogLevel[0] != '\0') {
+ if (strncmp("none", G1LogLevel, 4) == 0 && G1LogLevel[4] == '\0') {
+ _level = LevelNone;
+ } else if (strncmp("fine", G1LogLevel, 4) == 0 && G1LogLevel[4] == '\0') {
+ _level = LevelFine;
+ } else if (strncmp("finer", G1LogLevel, 5) == 0 && G1LogLevel[5] == '\0') {
+ _level = LevelFiner;
+ } else if (strncmp("finest", G1LogLevel, 6) == 0 && G1LogLevel[6] == '\0') {
+ _level = LevelFinest;
+ } else {
+ warning("Unknown logging level '%s', should be one of 'fine', 'finer' or 'finest'.", G1LogLevel);
+ }
+ } else {
+ if (PrintGCDetails) {
+ _level = LevelFiner;
+ } else if (PrintGC) {
+ _level = LevelFine;
+ }
+ }
+}
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1Log.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1Log.hpp
new file mode 100644
index 00000000000..b8da001cfd6
--- /dev/null
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1Log.hpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1LOG_HPP
+#define SHARE_VM_GC_IMPLEMENTATION_G1_G1LOG_HPP
+
+#include "memory/allocation.hpp"
+
+class G1Log : public AllStatic {
+ typedef enum {
+ LevelNone,
+ LevelFine,
+ LevelFiner,
+ LevelFinest
+ } LogLevel;
+
+ static LogLevel _level;
+
+ public:
+ inline static bool fine() {
+ return _level >= LevelFine;
+ }
+
+ inline static bool finer() {
+ return _level >= LevelFiner;
+ }
+
+ inline static bool finest() {
+ return _level == LevelFinest;
+ }
+
+ static void init();
+};
+
+#endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1LOG_HPP
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
index f32030b4524..02d254b6703 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp
@@ -29,6 +29,7 @@
#include "classfile/vmSymbols.hpp"
#include "code/codeCache.hpp"
#include "code/icBuffer.hpp"
+#include "gc_implementation/g1/g1Log.hpp"
#include "gc_implementation/g1/g1MarkSweep.hpp"
#include "memory/gcLocker.hpp"
#include "memory/genCollectedHeap.hpp"
@@ -126,7 +127,7 @@ void G1MarkSweep::allocate_stacks() {
void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading,
bool clear_all_softrefs) {
// Recursively traverse all live objects and mark them
- TraceTime tm("phase 1", PrintGC && Verbose, true, gclog_or_tty);
+ TraceTime tm("phase 1", G1Log::fine() && Verbose, true, gclog_or_tty);
GenMarkSweep::trace(" 1");
SharedHeap* sh = SharedHeap::heap();
@@ -192,8 +193,7 @@ void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading,
// fail. At the end of the GC, the orginal mark word values
// (including hash values) are restored to the appropriate
// objects.
- Universe::heap()->verify(/* allow dirty */ true,
- /* silent */ false,
+ Universe::heap()->verify(/* silent */ false,
/* option */ VerifyOption_G1UseMarkWord);
G1CollectedHeap* g1h = G1CollectedHeap::heap();
@@ -291,7 +291,7 @@ void G1MarkSweep::mark_sweep_phase2() {
G1CollectedHeap* g1h = G1CollectedHeap::heap();
Generation* pg = g1h->perm_gen();
- TraceTime tm("phase 2", PrintGC && Verbose, true, gclog_or_tty);
+ TraceTime tm("phase 2", G1Log::fine() && Verbose, true, gclog_or_tty);
GenMarkSweep::trace("2");
FindFirstRegionClosure cl;
@@ -335,7 +335,7 @@ void G1MarkSweep::mark_sweep_phase3() {
Generation* pg = g1h->perm_gen();
// Adjust the pointers to reflect the new locations
- TraceTime tm("phase 3", PrintGC && Verbose, true, gclog_or_tty);
+ TraceTime tm("phase 3", G1Log::fine() && Verbose, true, gclog_or_tty);
GenMarkSweep::trace("3");
SharedHeap* sh = SharedHeap::heap();
@@ -399,7 +399,7 @@ void G1MarkSweep::mark_sweep_phase4() {
G1CollectedHeap* g1h = G1CollectedHeap::heap();
Generation* pg = g1h->perm_gen();
- TraceTime tm("phase 4", PrintGC && Verbose, true, gclog_or_tty);
+ TraceTime tm("phase 4", G1Log::fine() && Verbose, true, gclog_or_tty);
GenMarkSweep::trace("4");
pg->compact();
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp
index 34542618f22..55627cb5100 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -177,19 +177,19 @@ void G1MonitoringSupport::recalculate_sizes() {
// values we read here are possible (i.e., at a STW phase at the end
// of a GC).
- size_t young_list_length = g1->young_list()->length();
- size_t survivor_list_length = g1->g1_policy()->recorded_survivor_regions();
+ uint young_list_length = g1->young_list()->length();
+ uint survivor_list_length = g1->g1_policy()->recorded_survivor_regions();
assert(young_list_length >= survivor_list_length, "invariant");
- size_t eden_list_length = young_list_length - survivor_list_length;
+ uint eden_list_length = young_list_length - survivor_list_length;
// Max length includes any potential extensions to the young gen
// we'll do when the GC locker is active.
- size_t young_list_max_length = g1->g1_policy()->young_list_max_length();
+ uint young_list_max_length = g1->g1_policy()->young_list_max_length();
assert(young_list_max_length >= survivor_list_length, "invariant");
- size_t eden_list_max_length = young_list_max_length - survivor_list_length;
+ uint eden_list_max_length = young_list_max_length - survivor_list_length;
_overall_used = g1->used_unlocked();
- _eden_used = eden_list_length * HeapRegion::GrainBytes;
- _survivor_used = survivor_list_length * HeapRegion::GrainBytes;
+ _eden_used = (size_t) eden_list_length * HeapRegion::GrainBytes;
+ _survivor_used = (size_t) survivor_list_length * HeapRegion::GrainBytes;
_young_region_num = young_list_length;
_old_used = subtract_up_to_zero(_overall_used, _eden_used + _survivor_used);
@@ -207,7 +207,7 @@ void G1MonitoringSupport::recalculate_sizes() {
committed -= _survivor_committed + _old_committed;
// Next, calculate and remove the committed size for the eden.
- _eden_committed = eden_list_max_length * HeapRegion::GrainBytes;
+ _eden_committed = (size_t) eden_list_max_length * HeapRegion::GrainBytes;
// Somewhat defensive: be robust in case there are inaccuracies in
// the calculations
_eden_committed = MIN2(_eden_committed, committed);
@@ -237,10 +237,10 @@ void G1MonitoringSupport::recalculate_eden_size() {
// When a new eden region is allocated, only the eden_used size is
// affected (since we have recalculated everything else at the last GC).
- size_t young_region_num = g1h()->young_list()->length();
+ uint young_region_num = g1h()->young_list()->length();
if (young_region_num > _young_region_num) {
- size_t diff = young_region_num - _young_region_num;
- _eden_used += diff * HeapRegion::GrainBytes;
+ uint diff = young_region_num - _young_region_num;
+ _eden_used += (size_t) diff * HeapRegion::GrainBytes;
// Somewhat defensive: cap the eden used size to make sure it
// never exceeds the committed size.
_eden_used = MIN2(_eden_used, _eden_committed);
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp
index a428b10378d..61e278a7ff7 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1MonitoringSupport.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -147,7 +147,7 @@ class G1MonitoringSupport : public CHeapObj {
size_t _overall_committed;
size_t _overall_used;
- size_t _young_region_num;
+ uint _young_region_num;
size_t _young_gen_committed;
size_t _eden_committed;
size_t _eden_used;
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp
index 52a6c50665b..c20a1a7713b 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1OopClosures.hpp
@@ -118,9 +118,11 @@ public:
virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
};
+template
+class G1ParCopyClosure : public G1ParClosureSuper {
+ G1ParScanClosure _scanner;
+ template void do_oop_work(T* p);
-class G1ParCopyHelper : public G1ParClosureSuper {
- G1ParScanClosure *_scanner;
protected:
// Mark the object if it's not already marked. This is used to mark
// objects pointed to by roots that are guaranteed not to move
@@ -134,23 +136,11 @@ protected:
oop copy_to_survivor_space(oop obj);
-public:
- G1ParCopyHelper(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state,
- G1ParScanClosure *scanner) :
- G1ParClosureSuper(g1, par_scan_state), _scanner(scanner) { }
-};
-
-template
-class G1ParCopyClosure : public G1ParCopyHelper {
- G1ParScanClosure _scanner;
-
- template void do_oop_work(T* p);
-
public:
G1ParCopyClosure(G1CollectedHeap* g1, G1ParScanThreadState* par_scan_state,
ReferenceProcessor* rp) :
_scanner(g1, par_scan_state, rp),
- G1ParCopyHelper(g1, par_scan_state, &_scanner) {
+ G1ParClosureSuper(g1, par_scan_state) {
assert(_ref_processor == NULL, "sanity");
}
diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp
index 3de711c009d..0378688c015 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/g1_globals.hpp
@@ -26,7 +26,6 @@
#define SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP
#include "runtime/globals.hpp"
-
//
// Defines all globals flags used by the garbage-first compiler.
//
@@ -69,9 +68,6 @@
diagnostic(bool, G1TraceConcRefinement, false, \
"Trace G1 concurrent refinement") \
\
- product(intx, G1MarkRegionStackSize, 1024 * 1024, \
- "Size of the region stack for concurrent marking.") \
- \
product(double, G1ConcMarkStepDurationMillis, 10.0, \
"Target duration of individual concurrent marking steps " \
"in milliseconds.") \
@@ -131,9 +127,6 @@
"Prints the liveness information for all regions in the heap " \
"at the end of a marking cycle.") \
\
- develop(bool, G1PrintParCleanupStats, false, \
- "When true, print extra stats about parallel cleanup.") \
- \
product(intx, G1UpdateBufferSize, 256, \
"Size of an update buffer") \
\
@@ -312,7 +305,10 @@
\
develop(uintx, G1OldCSetRegionThresholdPercent, 10, \
"An upper bound for the number of old CSet regions expressed " \
- "as a percentage of the heap size.")
+ "as a percentage of the heap size.") \
+ \
+ experimental(ccstr, G1LogLevel, NULL, \
+ "Log level for G1 logging: fine, finer, finest")
G1_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG, DECLARE_MANAGEABLE_FLAG, DECLARE_PRODUCT_RW_FLAG)
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp
index 0fc499ebb78..09b80cce581 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.cpp
@@ -334,7 +334,7 @@ void HeapRegion::setup_heap_region_size(uintx min_heap_size) {
guarantee(GrainWords == 0, "we should only set it once");
GrainWords = GrainBytes >> LogHeapWordSize;
- guarantee((size_t)(1 << LogOfHRGrainWords) == GrainWords, "sanity");
+ guarantee((size_t) 1 << LogOfHRGrainWords == GrainWords, "sanity");
guarantee(CardsPerRegion == 0, "we should only set it once");
CardsPerRegion = GrainBytes >> CardTableModRefBS::card_shift;
@@ -370,7 +370,6 @@ void HeapRegion::hr_clear(bool par, bool clear_space) {
_claimed = InitialClaimValue;
}
zero_marked_bytes();
- set_sort_index(-1);
_offsets.resize(HeapRegion::GrainWords);
init_top_at_mark_start();
@@ -482,17 +481,16 @@ void HeapRegion::initialize(MemRegion mr, bool clear_space, bool mangle_space) {
#endif // _MSC_VER
-HeapRegion::
-HeapRegion(size_t hrs_index, G1BlockOffsetSharedArray* sharedOffsetArray,
- MemRegion mr, bool is_zeroed)
- : G1OffsetTableContigSpace(sharedOffsetArray, mr, is_zeroed),
+HeapRegion::HeapRegion(uint hrs_index,
+ G1BlockOffsetSharedArray* sharedOffsetArray,
+ MemRegion mr, bool is_zeroed) :
+ G1OffsetTableContigSpace(sharedOffsetArray, mr, is_zeroed),
_hrs_index(hrs_index),
_humongous_type(NotHumongous), _humongous_start_region(NULL),
_in_collection_set(false),
_next_in_special_set(NULL), _orig_end(NULL),
_claimed(InitialClaimValue), _evacuation_failed(false),
- _prev_marked_bytes(0), _next_marked_bytes(0), _sort_index(-1),
- _gc_efficiency(0.0),
+ _prev_marked_bytes(0), _next_marked_bytes(0), _gc_efficiency(0.0),
_young_type(NotYoung), _next_young_region(NULL),
_next_dirty_cards_region(NULL), _next(NULL), _pending_removal(false),
#ifdef ASSERT
@@ -779,16 +777,15 @@ void HeapRegion::print_on(outputStream* st) const {
G1OffsetTableContigSpace::print_on(st);
}
-void HeapRegion::verify(bool allow_dirty) const {
+void HeapRegion::verify() const {
bool dummy = false;
- verify(allow_dirty, VerifyOption_G1UsePrevMarking, /* failures */ &dummy);
+ verify(VerifyOption_G1UsePrevMarking, /* failures */ &dummy);
}
// This really ought to be commoned up into OffsetTableContigSpace somehow.
// We would need a mechanism to make that code skip dead objects.
-void HeapRegion::verify(bool allow_dirty,
- VerifyOption vo,
+void HeapRegion::verify(VerifyOption vo,
bool* failures) const {
G1CollectedHeap* g1 = G1CollectedHeap::heap();
*failures = false;
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp
index 76843a01f05..cd6e164e136 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegion.hpp
@@ -52,12 +52,15 @@ class HeapRegionRemSetIterator;
class HeapRegion;
class HeapRegionSetBase;
-#define HR_FORMAT SIZE_FORMAT":(%s)["PTR_FORMAT","PTR_FORMAT","PTR_FORMAT"]"
+#define HR_FORMAT "%u:(%s)["PTR_FORMAT","PTR_FORMAT","PTR_FORMAT"]"
#define HR_FORMAT_PARAMS(_hr_) \
(_hr_)->hrs_index(), \
(_hr_)->is_survivor() ? "S" : (_hr_)->is_young() ? "E" : "-", \
(_hr_)->bottom(), (_hr_)->top(), (_hr_)->end()
+// sentinel value for hrs_index
+#define G1_NULL_HRS_INDEX ((uint) -1)
+
// A dirty card to oop closure for heap regions. It
// knows how to get the G1 heap and how to use the bitmap
// in the concurrent marker used by G1 to filter remembered
@@ -235,7 +238,7 @@ class HeapRegion: public G1OffsetTableContigSpace {
protected:
// The index of this region in the heap region sequence.
- size_t _hrs_index;
+ uint _hrs_index;
HumongousType _humongous_type;
// For a humongous region, region in which it starts.
@@ -278,12 +281,8 @@ class HeapRegion: public G1OffsetTableContigSpace {
size_t _prev_marked_bytes; // Bytes known to be live via last completed marking.
size_t _next_marked_bytes; // Bytes known to be live via in-progress marking.
- // See "sort_index" method. -1 means is not in the array.
- int _sort_index;
-
- //
+ // The calculated GC efficiency of the region.
double _gc_efficiency;
- //
enum YoungType {
NotYoung, // a region is not young
@@ -342,7 +341,7 @@ class HeapRegion: public G1OffsetTableContigSpace {
public:
// If "is_zeroed" is "true", the region "mr" can be assumed to contain zeros.
- HeapRegion(size_t hrs_index,
+ HeapRegion(uint hrs_index,
G1BlockOffsetSharedArray* sharedOffsetArray,
MemRegion mr, bool is_zeroed);
@@ -373,10 +372,9 @@ class HeapRegion: public G1OffsetTableContigSpace {
ScrubRemSetClaimValue = 3,
ParVerifyClaimValue = 4,
RebuildRSClaimValue = 5,
- CompleteMarkCSetClaimValue = 6,
- ParEvacFailureClaimValue = 7,
- AggregateCountClaimValue = 8,
- VerifyCountClaimValue = 9
+ ParEvacFailureClaimValue = 6,
+ AggregateCountClaimValue = 7,
+ VerifyCountClaimValue = 8
};
inline HeapWord* par_allocate_no_bot_updates(size_t word_size) {
@@ -390,7 +388,7 @@ class HeapRegion: public G1OffsetTableContigSpace {
// If this region is a member of a HeapRegionSeq, the index in that
// sequence, otherwise -1.
- size_t hrs_index() const { return _hrs_index; }
+ uint hrs_index() const { return _hrs_index; }
// The number of bytes marked live in the region in the last marking phase.
size_t marked_bytes() { return _prev_marked_bytes; }
@@ -627,16 +625,6 @@ class HeapRegion: public G1OffsetTableContigSpace {
// last mark phase ended.
bool is_marked() { return _prev_top_at_mark_start != bottom(); }
- // If "is_marked()" is true, then this is the index of the region in
- // an array constructed at the end of marking of the regions in a
- // "desirability" order.
- int sort_index() {
- return _sort_index;
- }
- void set_sort_index(int i) {
- _sort_index = i;
- }
-
void init_top_at_conc_mark_count() {
_top_at_conc_mark_count = bottom();
}
@@ -824,10 +812,10 @@ class HeapRegion: public G1OffsetTableContigSpace {
// Currently there is only one place where this is called with
// vo == UseMarkWord, which is to verify the marking during a
// full GC.
- void verify(bool allow_dirty, VerifyOption vo, bool *failures) const;
+ void verify(VerifyOption vo, bool *failures) const;
// Override; it uses the "prev" marking information
- virtual void verify(bool allow_dirty) const;
+ virtual void verify() const;
};
// HeapRegionClosure is used for iterating over regions.
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp
index 47c41553838..a23bd79a7b3 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -577,7 +577,7 @@ void OtherRegionsTable::print_from_card_cache() {
#endif
void OtherRegionsTable::add_reference(OopOrNarrowOopStar from, int tid) {
- size_t cur_hrs_ind = hr()->hrs_index();
+ size_t cur_hrs_ind = (size_t) hr()->hrs_index();
#if HRRS_VERBOSE
gclog_or_tty->print_cr("ORT::add_reference_work(" PTR_FORMAT "->" PTR_FORMAT ").",
@@ -841,7 +841,7 @@ PosParPRT* OtherRegionsTable::delete_region_table() {
#endif
// Set the corresponding coarse bit.
- size_t max_hrs_index = max->hr()->hrs_index();
+ size_t max_hrs_index = (size_t) max->hr()->hrs_index();
if (!_coarse_map.at(max_hrs_index)) {
_coarse_map.at_put(max_hrs_index, true);
_n_coarse_entries++;
@@ -866,17 +866,20 @@ PosParPRT* OtherRegionsTable::delete_region_table() {
void OtherRegionsTable::scrub(CardTableModRefBS* ctbs,
BitMap* region_bm, BitMap* card_bm) {
// First eliminated garbage regions from the coarse map.
- if (G1RSScrubVerbose)
- gclog_or_tty->print_cr("Scrubbing region "SIZE_FORMAT":",
- hr()->hrs_index());
+ if (G1RSScrubVerbose) {
+ gclog_or_tty->print_cr("Scrubbing region %u:", hr()->hrs_index());
+ }
assert(_coarse_map.size() == region_bm->size(), "Precondition");
- if (G1RSScrubVerbose)
- gclog_or_tty->print(" Coarse map: before = %d...", _n_coarse_entries);
+ if (G1RSScrubVerbose) {
+ gclog_or_tty->print(" Coarse map: before = "SIZE_FORMAT"...",
+ _n_coarse_entries);
+ }
_coarse_map.set_intersection(*region_bm);
_n_coarse_entries = _coarse_map.count_one_bits();
- if (G1RSScrubVerbose)
- gclog_or_tty->print_cr(" after = %d.", _n_coarse_entries);
+ if (G1RSScrubVerbose) {
+ gclog_or_tty->print_cr(" after = "SIZE_FORMAT".", _n_coarse_entries);
+ }
// Now do the fine-grained maps.
for (size_t i = 0; i < _max_fine_entries; i++) {
@@ -885,23 +888,27 @@ void OtherRegionsTable::scrub(CardTableModRefBS* ctbs,
while (cur != NULL) {
PosParPRT* nxt = cur->next();
// If the entire region is dead, eliminate.
- if (G1RSScrubVerbose)
- gclog_or_tty->print_cr(" For other region "SIZE_FORMAT":",
+ if (G1RSScrubVerbose) {
+ gclog_or_tty->print_cr(" For other region %u:",
cur->hr()->hrs_index());
- if (!region_bm->at(cur->hr()->hrs_index())) {
+ }
+ if (!region_bm->at((size_t) cur->hr()->hrs_index())) {
*prev = nxt;
cur->set_next(NULL);
_n_fine_entries--;
- if (G1RSScrubVerbose)
+ if (G1RSScrubVerbose) {
gclog_or_tty->print_cr(" deleted via region map.");
+ }
PosParPRT::free(cur);
} else {
// Do fine-grain elimination.
- if (G1RSScrubVerbose)
+ if (G1RSScrubVerbose) {
gclog_or_tty->print(" occ: before = %4d.", cur->occupied());
+ }
cur->scrub(ctbs, card_bm);
- if (G1RSScrubVerbose)
+ if (G1RSScrubVerbose) {
gclog_or_tty->print_cr(" after = %4d.", cur->occupied());
+ }
// Did that empty the table completely?
if (cur->occupied() == 0) {
*prev = nxt;
@@ -1003,7 +1010,7 @@ void OtherRegionsTable::clear() {
void OtherRegionsTable::clear_incoming_entry(HeapRegion* from_hr) {
MutexLockerEx x(&_m, Mutex::_no_safepoint_check_flag);
- size_t hrs_ind = from_hr->hrs_index();
+ size_t hrs_ind = (size_t) from_hr->hrs_index();
size_t ind = hrs_ind & _mod_max_fine_entries_mask;
if (del_single_region_table(ind, from_hr)) {
assert(!_coarse_map.at(hrs_ind), "Inv");
@@ -1011,7 +1018,7 @@ void OtherRegionsTable::clear_incoming_entry(HeapRegion* from_hr) {
_coarse_map.par_at_put(hrs_ind, 0);
}
// Check to see if any of the fcc entries come from here.
- size_t hr_ind = hr()->hrs_index();
+ size_t hr_ind = (size_t) hr()->hrs_index();
for (int tid = 0; tid < HeapRegionRemSet::num_par_rem_sets(); tid++) {
int fcc_ent = _from_card_cache[tid][hr_ind];
if (fcc_ent != -1) {
@@ -1223,7 +1230,7 @@ bool HeapRegionRemSetIterator::coarse_has_next(size_t& card_index) {
if ((size_t)_coarse_cur_region_index < _coarse_map->size()) {
_coarse_cur_region_cur_card = 0;
HeapWord* r_bot =
- _g1h->region_at(_coarse_cur_region_index)->bottom();
+ _g1h->region_at((uint) _coarse_cur_region_index)->bottom();
_cur_region_card_offset = _bosa->index_for(r_bot);
} else {
return false;
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp
index 453435098bb..504afa2ef04 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionRemSet.hpp
@@ -329,13 +329,13 @@ public:
// Declare the heap size (in # of regions) to the HeapRegionRemSet(s).
// (Uses it to initialize from_card_cache).
- static void init_heap(size_t max_regions) {
- OtherRegionsTable::init_from_card_cache(max_regions);
+ static void init_heap(uint max_regions) {
+ OtherRegionsTable::init_from_card_cache((size_t) max_regions);
}
// Declares that only regions i s.t. 0 <= i < new_n_regs are in use.
- static void shrink_heap(size_t new_n_regs) {
- OtherRegionsTable::shrink_from_card_cache(new_n_regs);
+ static void shrink_heap(uint new_n_regs) {
+ OtherRegionsTable::shrink_from_card_cache((size_t) new_n_regs);
}
#ifndef PRODUCT
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp
index fecdca15515..dfac7d47d29 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -31,16 +31,15 @@
// Private
-size_t HeapRegionSeq::find_contiguous_from(size_t from, size_t num) {
- size_t len = length();
+uint HeapRegionSeq::find_contiguous_from(uint from, uint num) {
+ uint len = length();
assert(num > 1, "use this only for sequences of length 2 or greater");
assert(from <= len,
- err_msg("from: "SIZE_FORMAT" should be valid and <= than "SIZE_FORMAT,
- from, len));
+ err_msg("from: %u should be valid and <= than %u", from, len));
- size_t curr = from;
- size_t first = G1_NULL_HRS_INDEX;
- size_t num_so_far = 0;
+ uint curr = from;
+ uint first = G1_NULL_HRS_INDEX;
+ uint num_so_far = 0;
while (curr < len && num_so_far < num) {
if (at(curr)->is_empty()) {
if (first == G1_NULL_HRS_INDEX) {
@@ -60,7 +59,7 @@ size_t HeapRegionSeq::find_contiguous_from(size_t from, size_t num) {
// we found enough space for the humongous object
assert(from <= first && first < len, "post-condition");
assert(first < curr && (curr - first) == num, "post-condition");
- for (size_t i = first; i < first + num; ++i) {
+ for (uint i = first; i < first + num; ++i) {
assert(at(i)->is_empty(), "post-condition");
}
return first;
@@ -73,10 +72,10 @@ size_t HeapRegionSeq::find_contiguous_from(size_t from, size_t num) {
// Public
void HeapRegionSeq::initialize(HeapWord* bottom, HeapWord* end,
- size_t max_length) {
- assert((size_t) bottom % HeapRegion::GrainBytes == 0,
+ uint max_length) {
+ assert((uintptr_t) bottom % HeapRegion::GrainBytes == 0,
"bottom should be heap region aligned");
- assert((size_t) end % HeapRegion::GrainBytes == 0,
+ assert((uintptr_t) end % HeapRegion::GrainBytes == 0,
"end should be heap region aligned");
_length = 0;
@@ -88,8 +87,8 @@ void HeapRegionSeq::initialize(HeapWord* bottom, HeapWord* end,
_max_length = max_length;
_regions = NEW_C_HEAP_ARRAY(HeapRegion*, max_length);
- memset(_regions, 0, max_length * sizeof(HeapRegion*));
- _regions_biased = _regions - ((size_t) bottom >> _region_shift);
+ memset(_regions, 0, (size_t) max_length * sizeof(HeapRegion*));
+ _regions_biased = _regions - ((uintx) bottom >> _region_shift);
assert(&_regions[0] == &_regions_biased[addr_to_index_biased(bottom)],
"bottom should be included in the region with index 0");
@@ -105,7 +104,7 @@ MemRegion HeapRegionSeq::expand_by(HeapWord* old_end,
assert(_heap_bottom <= next_bottom, "invariant");
while (next_bottom < new_end) {
assert(next_bottom < _heap_end, "invariant");
- size_t index = length();
+ uint index = length();
assert(index < _max_length, "otherwise we cannot expand further");
if (index == 0) {
@@ -139,9 +138,9 @@ MemRegion HeapRegionSeq::expand_by(HeapWord* old_end,
return MemRegion(old_end, next_bottom);
}
-size_t HeapRegionSeq::free_suffix() {
- size_t res = 0;
- size_t index = length();
+uint HeapRegionSeq::free_suffix() {
+ uint res = 0;
+ uint index = length();
while (index > 0) {
index -= 1;
if (!at(index)->is_empty()) {
@@ -152,27 +151,24 @@ size_t HeapRegionSeq::free_suffix() {
return res;
}
-size_t HeapRegionSeq::find_contiguous(size_t num) {
+uint HeapRegionSeq::find_contiguous(uint num) {
assert(num > 1, "use this only for sequences of length 2 or greater");
assert(_next_search_index <= length(),
- err_msg("_next_search_indeex: "SIZE_FORMAT" "
- "should be valid and <= than "SIZE_FORMAT,
+ err_msg("_next_search_index: %u should be valid and <= than %u",
_next_search_index, length()));
- size_t start = _next_search_index;
- size_t res = find_contiguous_from(start, num);
+ uint start = _next_search_index;
+ uint res = find_contiguous_from(start, num);
if (res == G1_NULL_HRS_INDEX && start > 0) {
// Try starting from the beginning. If _next_search_index was 0,
// no point in doing this again.
res = find_contiguous_from(0, num);
}
if (res != G1_NULL_HRS_INDEX) {
- assert(res < length(),
- err_msg("res: "SIZE_FORMAT" should be valid", res));
+ assert(res < length(), err_msg("res: %u should be valid", res));
_next_search_index = res + num;
assert(_next_search_index <= length(),
- err_msg("_next_search_indeex: "SIZE_FORMAT" "
- "should be valid and <= than "SIZE_FORMAT,
+ err_msg("_next_search_index: %u should be valid and <= than %u",
_next_search_index, length()));
}
return res;
@@ -183,20 +179,20 @@ void HeapRegionSeq::iterate(HeapRegionClosure* blk) const {
}
void HeapRegionSeq::iterate_from(HeapRegion* hr, HeapRegionClosure* blk) const {
- size_t hr_index = 0;
+ uint hr_index = 0;
if (hr != NULL) {
- hr_index = (size_t) hr->hrs_index();
+ hr_index = hr->hrs_index();
}
- size_t len = length();
- for (size_t i = hr_index; i < len; i += 1) {
+ uint len = length();
+ for (uint i = hr_index; i < len; i += 1) {
bool res = blk->doHeapRegion(at(i));
if (res) {
blk->incomplete();
return;
}
}
- for (size_t i = 0; i < hr_index; i += 1) {
+ for (uint i = 0; i < hr_index; i += 1) {
bool res = blk->doHeapRegion(at(i));
if (res) {
blk->incomplete();
@@ -206,7 +202,7 @@ void HeapRegionSeq::iterate_from(HeapRegion* hr, HeapRegionClosure* blk) const {
}
MemRegion HeapRegionSeq::shrink_by(size_t shrink_bytes,
- size_t* num_regions_deleted) {
+ uint* num_regions_deleted) {
// Reset this in case it's currently pointing into the regions that
// we just removed.
_next_search_index = 0;
@@ -218,7 +214,7 @@ MemRegion HeapRegionSeq::shrink_by(size_t shrink_bytes,
assert(_allocated_length > 0, "we should have at least one region committed");
// around the loop, i will be the next region to be removed
- size_t i = length() - 1;
+ uint i = length() - 1;
assert(i > 0, "we should never remove all regions");
// [last_start, end) is the MemRegion that covers the regions we will remove.
HeapWord* end = at(i)->end();
@@ -249,29 +245,24 @@ MemRegion HeapRegionSeq::shrink_by(size_t shrink_bytes,
#ifndef PRODUCT
void HeapRegionSeq::verify_optional() {
guarantee(_length <= _allocated_length,
- err_msg("invariant: _length: "SIZE_FORMAT" "
- "_allocated_length: "SIZE_FORMAT,
+ err_msg("invariant: _length: %u _allocated_length: %u",
_length, _allocated_length));
guarantee(_allocated_length <= _max_length,
- err_msg("invariant: _allocated_length: "SIZE_FORMAT" "
- "_max_length: "SIZE_FORMAT,
+ err_msg("invariant: _allocated_length: %u _max_length: %u",
_allocated_length, _max_length));
guarantee(_next_search_index <= _length,
- err_msg("invariant: _next_search_index: "SIZE_FORMAT" "
- "_length: "SIZE_FORMAT,
+ err_msg("invariant: _next_search_index: %u _length: %u",
_next_search_index, _length));
HeapWord* prev_end = _heap_bottom;
- for (size_t i = 0; i < _allocated_length; i += 1) {
+ for (uint i = 0; i < _allocated_length; i += 1) {
HeapRegion* hr = _regions[i];
- guarantee(hr != NULL, err_msg("invariant: i: "SIZE_FORMAT, i));
+ guarantee(hr != NULL, err_msg("invariant: i: %u", i));
guarantee(hr->bottom() == prev_end,
- err_msg("invariant i: "SIZE_FORMAT" "HR_FORMAT" "
- "prev_end: "PTR_FORMAT,
+ err_msg("invariant i: %u "HR_FORMAT" prev_end: "PTR_FORMAT,
i, HR_FORMAT_PARAMS(hr), prev_end));
guarantee(hr->hrs_index() == i,
- err_msg("invariant: i: "SIZE_FORMAT" hrs_index(): "SIZE_FORMAT,
- i, hr->hrs_index()));
+ err_msg("invariant: i: %u hrs_index(): %u", i, hr->hrs_index()));
if (i < _length) {
// Asserts will fire if i is >= _length
HeapWord* addr = hr->bottom();
@@ -290,8 +281,8 @@ void HeapRegionSeq::verify_optional() {
prev_end = hr->end();
}
}
- for (size_t i = _allocated_length; i < _max_length; i += 1) {
- guarantee(_regions[i] == NULL, err_msg("invariant i: "SIZE_FORMAT, i));
+ for (uint i = _allocated_length; i < _max_length; i += 1) {
+ guarantee(_regions[i] == NULL, err_msg("invariant i: %u", i));
}
}
#endif // PRODUCT
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp
index 3df8d738bdc..94f4c0f7699 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -29,8 +29,6 @@ class HeapRegion;
class HeapRegionClosure;
class FreeRegionList;
-#define G1_NULL_HRS_INDEX ((size_t) -1)
-
// This class keeps track of the region metadata (i.e., HeapRegion
// instances). They are kept in the _regions array in address
// order. A region's index in the array corresponds to its index in
@@ -65,7 +63,7 @@ class HeapRegionSeq: public CHeapObj {
HeapRegion** _regions_biased;
// The number of regions committed in the heap.
- size_t _length;
+ uint _length;
// The address of the first reserved word in the heap.
HeapWord* _heap_bottom;
@@ -74,32 +72,32 @@ class HeapRegionSeq: public CHeapObj {
HeapWord* _heap_end;
// The log of the region byte size.
- size_t _region_shift;
+ uint _region_shift;
// A hint for which index to start searching from for humongous
// allocations.
- size_t _next_search_index;
+ uint _next_search_index;
// The number of regions for which we have allocated HeapRegions for.
- size_t _allocated_length;
+ uint _allocated_length;
// The maximum number of regions in the heap.
- size_t _max_length;
+ uint _max_length;
// Find a contiguous set of empty regions of length num, starting
// from the given index.
- size_t find_contiguous_from(size_t from, size_t num);
+ uint find_contiguous_from(uint from, uint num);
// Map a heap address to a biased region index. Assume that the
// address is valid.
- inline size_t addr_to_index_biased(HeapWord* addr) const;
+ inline uintx addr_to_index_biased(HeapWord* addr) const;
- void increment_length(size_t* length) {
+ void increment_length(uint* length) {
assert(*length < _max_length, "pre-condition");
*length += 1;
}
- void decrement_length(size_t* length) {
+ void decrement_length(uint* length) {
assert(*length > 0, "pre-condition");
*length -= 1;
}
@@ -108,11 +106,11 @@ class HeapRegionSeq: public CHeapObj {
// Empty contructor, we'll initialize it with the initialize() method.
HeapRegionSeq() { }
- void initialize(HeapWord* bottom, HeapWord* end, size_t max_length);
+ void initialize(HeapWord* bottom, HeapWord* end, uint max_length);
// Return the HeapRegion at the given index. Assume that the index
// is valid.
- inline HeapRegion* at(size_t index) const;
+ inline HeapRegion* at(uint index) const;
// If addr is within the committed space return its corresponding
// HeapRegion, otherwise return NULL.
@@ -123,10 +121,10 @@ class HeapRegionSeq: public CHeapObj {
inline HeapRegion* addr_to_region_unsafe(HeapWord* addr) const;
// Return the number of regions that have been committed in the heap.
- size_t length() const { return _length; }
+ uint length() const { return _length; }
// Return the maximum number of regions in the heap.
- size_t max_length() const { return _max_length; }
+ uint max_length() const { return _max_length; }
// Expand the sequence to reflect that the heap has grown from
// old_end to new_end. Either create new HeapRegions, or re-use
@@ -139,12 +137,12 @@ class HeapRegionSeq: public CHeapObj {
// Return the number of contiguous regions at the end of the sequence
// that are available for allocation.
- size_t free_suffix();
+ uint free_suffix();
// Find a contiguous set of empty regions of length num and return
// the index of the first region or G1_NULL_HRS_INDEX if the
// search was unsuccessful.
- size_t find_contiguous(size_t num);
+ uint find_contiguous(uint num);
// Apply blk->doHeapRegion() on all committed regions in address order,
// terminating the iteration early if doHeapRegion() returns true.
@@ -159,7 +157,7 @@ class HeapRegionSeq: public CHeapObj {
// sequence. Return a MemRegion that corresponds to the address
// range of the uncommitted regions. Assume shrink_bytes is page and
// heap region aligned.
- MemRegion shrink_by(size_t shrink_bytes, size_t* num_regions_deleted);
+ MemRegion shrink_by(size_t shrink_bytes, uint* num_regions_deleted);
// Do some sanity checking.
void verify_optional() PRODUCT_RETURN;
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.inline.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.inline.hpp
index 3cc5aa8a619..e840287edc7 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.inline.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSeq.inline.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -28,11 +28,11 @@
#include "gc_implementation/g1/heapRegion.hpp"
#include "gc_implementation/g1/heapRegionSeq.hpp"
-inline size_t HeapRegionSeq::addr_to_index_biased(HeapWord* addr) const {
+inline uintx HeapRegionSeq::addr_to_index_biased(HeapWord* addr) const {
assert(_heap_bottom <= addr && addr < _heap_end,
err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT" end: "PTR_FORMAT,
addr, _heap_bottom, _heap_end));
- size_t index = (size_t) addr >> _region_shift;
+ uintx index = (uintx) addr >> _region_shift;
return index;
}
@@ -40,7 +40,7 @@ inline HeapRegion* HeapRegionSeq::addr_to_region_unsafe(HeapWord* addr) const {
assert(_heap_bottom <= addr && addr < _heap_end,
err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT" end: "PTR_FORMAT,
addr, _heap_bottom, _heap_end));
- size_t index_biased = addr_to_index_biased(addr);
+ uintx index_biased = addr_to_index_biased(addr);
HeapRegion* hr = _regions_biased[index_biased];
assert(hr != NULL, "invariant");
return hr;
@@ -55,7 +55,7 @@ inline HeapRegion* HeapRegionSeq::addr_to_region(HeapWord* addr) const {
return NULL;
}
-inline HeapRegion* HeapRegionSeq::at(size_t index) const {
+inline HeapRegion* HeapRegionSeq::at(uint index) const {
assert(index < length(), "pre-condition");
HeapRegion* hr = _regions[index];
assert(hr != NULL, "sanity");
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp
index e21cdd74d85..ac5f96b9093 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,28 +25,26 @@
#include "precompiled.hpp"
#include "gc_implementation/g1/heapRegionSet.inline.hpp"
-size_t HeapRegionSetBase::_unrealistically_long_length = 0;
+uint HeapRegionSetBase::_unrealistically_long_length = 0;
HRSPhase HeapRegionSetBase::_phase = HRSPhaseNone;
//////////////////// HeapRegionSetBase ////////////////////
-void HeapRegionSetBase::set_unrealistically_long_length(size_t len) {
+void HeapRegionSetBase::set_unrealistically_long_length(uint len) {
guarantee(_unrealistically_long_length == 0, "should only be set once");
_unrealistically_long_length = len;
}
-size_t HeapRegionSetBase::calculate_region_num(HeapRegion* hr) {
+uint HeapRegionSetBase::calculate_region_num(HeapRegion* hr) {
assert(hr->startsHumongous(), "pre-condition");
assert(hr->capacity() % HeapRegion::GrainBytes == 0, "invariant");
- size_t region_num = hr->capacity() >> HeapRegion::LogOfHRGrainBytes;
+ uint region_num = (uint) (hr->capacity() >> HeapRegion::LogOfHRGrainBytes);
assert(region_num > 0, "sanity");
return region_num;
}
void HeapRegionSetBase::fill_in_ext_msg(hrs_ext_msg* msg, const char* message) {
- msg->append("[%s] %s "
- "ln: "SIZE_FORMAT" rn: "SIZE_FORMAT" "
- "cy: "SIZE_FORMAT" ud: "SIZE_FORMAT,
+ msg->append("[%s] %s ln: %u rn: %u cy: "SIZE_FORMAT" ud: "SIZE_FORMAT,
name(), message, length(), region_num(),
total_capacity_bytes(), total_used_bytes());
fill_in_ext_msg_extra(msg);
@@ -170,13 +168,11 @@ void HeapRegionSetBase::verify_end() {
hrs_ext_msg(this, "verification should be in progress"));
guarantee(length() == _calc_length,
- hrs_err_msg("[%s] length: "SIZE_FORMAT" should be == "
- "calc length: "SIZE_FORMAT,
+ hrs_err_msg("[%s] length: %u should be == calc length: %u",
name(), length(), _calc_length));
guarantee(region_num() == _calc_region_num,
- hrs_err_msg("[%s] region num: "SIZE_FORMAT" should be == "
- "calc region num: "SIZE_FORMAT,
+ hrs_err_msg("[%s] region num: %u should be == calc region num: %u",
name(), region_num(), _calc_region_num));
guarantee(total_capacity_bytes() == _calc_total_capacity_bytes,
@@ -211,8 +207,8 @@ void HeapRegionSetBase::print_on(outputStream* out, bool print_contents) {
out->print_cr(" humongous : %s", BOOL_TO_STR(regions_humongous()));
out->print_cr(" empty : %s", BOOL_TO_STR(regions_empty()));
out->print_cr(" Attributes");
- out->print_cr(" length : "SIZE_FORMAT_W(14), length());
- out->print_cr(" region num : "SIZE_FORMAT_W(14), region_num());
+ out->print_cr(" length : %14u", length());
+ out->print_cr(" region num : %14u", region_num());
out->print_cr(" total capacity : "SIZE_FORMAT_W(14)" bytes",
total_capacity_bytes());
out->print_cr(" total used : "SIZE_FORMAT_W(14)" bytes",
@@ -243,14 +239,12 @@ void HeapRegionSet::update_from_proxy(HeapRegionSet* proxy_set) {
if (proxy_set->is_empty()) return;
assert(proxy_set->length() <= _length,
- hrs_err_msg("[%s] proxy set length: "SIZE_FORMAT" "
- "should be <= length: "SIZE_FORMAT,
+ hrs_err_msg("[%s] proxy set length: %u should be <= length: %u",
name(), proxy_set->length(), _length));
_length -= proxy_set->length();
assert(proxy_set->region_num() <= _region_num,
- hrs_err_msg("[%s] proxy set region num: "SIZE_FORMAT" "
- "should be <= region num: "SIZE_FORMAT,
+ hrs_err_msg("[%s] proxy set region num: %u should be <= region num: %u",
name(), proxy_set->region_num(), _region_num));
_region_num -= proxy_set->region_num();
@@ -369,17 +363,17 @@ void HeapRegionLinkedList::remove_all() {
verify_optional();
}
-void HeapRegionLinkedList::remove_all_pending(size_t target_count) {
+void HeapRegionLinkedList::remove_all_pending(uint target_count) {
hrs_assert_mt_safety_ok(this);
assert(target_count > 1, hrs_ext_msg(this, "pre-condition"));
assert(!is_empty(), hrs_ext_msg(this, "pre-condition"));
verify_optional();
- DEBUG_ONLY(size_t old_length = length();)
+ DEBUG_ONLY(uint old_length = length();)
HeapRegion* curr = _head;
HeapRegion* prev = NULL;
- size_t count = 0;
+ uint count = 0;
while (curr != NULL) {
hrs_assert_region_ok(this, curr, this);
HeapRegion* next = curr->next();
@@ -387,7 +381,7 @@ void HeapRegionLinkedList::remove_all_pending(size_t target_count) {
if (curr->pending_removal()) {
assert(count < target_count,
hrs_err_msg("[%s] should not come across more regions "
- "pending for removal than target_count: "SIZE_FORMAT,
+ "pending for removal than target_count: %u",
name(), target_count));
if (prev == NULL) {
@@ -422,12 +416,11 @@ void HeapRegionLinkedList::remove_all_pending(size_t target_count) {
}
assert(count == target_count,
- hrs_err_msg("[%s] count: "SIZE_FORMAT" should be == "
- "target_count: "SIZE_FORMAT, name(), count, target_count));
+ hrs_err_msg("[%s] count: %u should be == target_count: %u",
+ name(), count, target_count));
assert(length() + target_count == old_length,
hrs_err_msg("[%s] new length should be consistent "
- "new length: "SIZE_FORMAT" old length: "SIZE_FORMAT" "
- "target_count: "SIZE_FORMAT,
+ "new length: %u old length: %u target_count: %u",
name(), length(), old_length, target_count));
verify_optional();
@@ -444,16 +437,16 @@ void HeapRegionLinkedList::verify() {
HeapRegion* curr = _head;
HeapRegion* prev1 = NULL;
HeapRegion* prev0 = NULL;
- size_t count = 0;
+ uint count = 0;
while (curr != NULL) {
verify_next_region(curr);
count += 1;
guarantee(count < _unrealistically_long_length,
- hrs_err_msg("[%s] the calculated length: "SIZE_FORMAT" "
+ hrs_err_msg("[%s] the calculated length: %u "
"seems very long, is there maybe a cycle? "
"curr: "PTR_FORMAT" prev0: "PTR_FORMAT" "
- "prev1: "PTR_FORMAT" length: "SIZE_FORMAT,
+ "prev1: "PTR_FORMAT" length: %u",
name(), count, curr, prev0, prev1, length()));
prev1 = prev0;
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.hpp
index 8231c772d3b..1f0ffe1670c 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.hpp
@@ -62,20 +62,20 @@ class HeapRegionSetBase VALUE_OBJ_CLASS_SPEC {
friend class VMStructs;
protected:
- static size_t calculate_region_num(HeapRegion* hr);
+ static uint calculate_region_num(HeapRegion* hr);
- static size_t _unrealistically_long_length;
+ static uint _unrealistically_long_length;
// The number of regions added to the set. If the set contains
// only humongous regions, this reflects only 'starts humongous'
// regions and does not include 'continues humongous' ones.
- size_t _length;
+ uint _length;
// The total number of regions represented by the set. If the set
// does not contain humongous regions, this should be the same as
// _length. If the set contains only humongous regions, this will
// include the 'continues humongous' regions.
- size_t _region_num;
+ uint _region_num;
// We don't keep track of the total capacity explicitly, we instead
// recalculate it based on _region_num and the heap region size.
@@ -86,8 +86,8 @@ protected:
const char* _name;
bool _verify_in_progress;
- size_t _calc_length;
- size_t _calc_region_num;
+ uint _calc_length;
+ uint _calc_region_num;
size_t _calc_total_capacity_bytes;
size_t _calc_total_used_bytes;
@@ -153,18 +153,18 @@ protected:
HeapRegionSetBase(const char* name);
public:
- static void set_unrealistically_long_length(size_t len);
+ static void set_unrealistically_long_length(uint len);
const char* name() { return _name; }
- size_t length() { return _length; }
+ uint length() { return _length; }
bool is_empty() { return _length == 0; }
- size_t region_num() { return _region_num; }
+ uint region_num() { return _region_num; }
size_t total_capacity_bytes() {
- return region_num() << HeapRegion::LogOfHRGrainBytes;
+ return (size_t) region_num() << HeapRegion::LogOfHRGrainBytes;
}
size_t total_used_bytes() { return _total_used_bytes; }
@@ -341,7 +341,7 @@ public:
// of regions that are pending for removal in the list, and
// target_count should be > 1 (currently, we never need to remove a
// single region using this).
- void remove_all_pending(size_t target_count);
+ void remove_all_pending(uint target_count);
virtual void verify();
diff --git a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.inline.hpp b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.inline.hpp
index 9cb40b52754..8705f40cf95 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.inline.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/heapRegionSet.inline.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -54,15 +54,15 @@ inline void HeapRegionSetBase::update_for_removal(HeapRegion* hr) {
assert(_length > 0, hrs_ext_msg(this, "pre-condition"));
_length -= 1;
- size_t region_num_diff;
+ uint region_num_diff;
if (!hr->isHumongous()) {
region_num_diff = 1;
} else {
region_num_diff = calculate_region_num(hr);
}
assert(region_num_diff <= _region_num,
- hrs_err_msg("[%s] region's region num: "SIZE_FORMAT" "
- "should be <= region num: "SIZE_FORMAT,
+ hrs_err_msg("[%s] region's region num: %u "
+ "should be <= region num: %u",
name(), region_num_diff, _region_num));
_region_num -= region_num_diff;
diff --git a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp
index 5cdd101404b..64b1be2460f 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/sparsePRT.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -481,8 +481,7 @@ size_t SparsePRT::mem_size() const {
bool SparsePRT::add_card(RegionIdx_t region_id, CardIdx_t card_index) {
#if SPARSE_PRT_VERBOSE
- gclog_or_tty->print_cr(" Adding card %d from region %d to region "
- SIZE_FORMAT" sparse.",
+ gclog_or_tty->print_cr(" Adding card %d from region %d to region %u sparse.",
card_index, region_id, _hr->hrs_index());
#endif
if (_next->occupied_entries() * 2 > _next->capacity()) {
@@ -534,7 +533,7 @@ void SparsePRT::expand() {
_next = new RSHashTable(last->capacity() * 2);
#if SPARSE_PRT_VERBOSE
- gclog_or_tty->print_cr(" Expanded sparse table for "SIZE_FORMAT" to %d.",
+ gclog_or_tty->print_cr(" Expanded sparse table for %u to %d.",
_hr->hrs_index(), _next->capacity());
#endif
for (size_t i = 0; i < last->capacity(); i++) {
diff --git a/hotspot/src/share/vm/gc_implementation/g1/vmStructs_g1.hpp b/hotspot/src/share/vm/gc_implementation/g1/vmStructs_g1.hpp
index a646b48b0c5..5507dee5f80 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/vmStructs_g1.hpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/vmStructs_g1.hpp
@@ -34,7 +34,7 @@
static_field(HeapRegion, GrainBytes, size_t) \
\
nonstatic_field(HeapRegionSeq, _regions, HeapRegion**) \
- nonstatic_field(HeapRegionSeq, _length, size_t) \
+ nonstatic_field(HeapRegionSeq, _length, uint) \
\
nonstatic_field(G1CollectedHeap, _hrs, HeapRegionSeq) \
nonstatic_field(G1CollectedHeap, _g1_committed, MemRegion) \
@@ -50,8 +50,8 @@
nonstatic_field(G1MonitoringSupport, _old_committed, size_t) \
nonstatic_field(G1MonitoringSupport, _old_used, size_t) \
\
- nonstatic_field(HeapRegionSetBase, _length, size_t) \
- nonstatic_field(HeapRegionSetBase, _region_num, size_t) \
+ nonstatic_field(HeapRegionSetBase, _length, uint) \
+ nonstatic_field(HeapRegionSetBase, _region_num, uint) \
nonstatic_field(HeapRegionSetBase, _total_used_bytes, size_t) \
diff --git a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp b/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp
index 05e7f35e1a0..1a330ba6483 100644
--- a/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp
+++ b/hotspot/src/share/vm/gc_implementation/g1/vm_operations_g1.cpp
@@ -26,6 +26,7 @@
#include "gc_implementation/g1/concurrentMarkThread.inline.hpp"
#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
#include "gc_implementation/g1/g1CollectorPolicy.hpp"
+#include "gc_implementation/g1/g1Log.hpp"
#include "gc_implementation/g1/vm_operations_g1.hpp"
#include "gc_implementation/shared/isGCActiveMark.hpp"
#include "gc_implementation/g1/vm_operations_g1.hpp"
@@ -223,9 +224,9 @@ void VM_CGC_Operation::release_and_notify_pending_list_lock() {
}
void VM_CGC_Operation::doit() {
- gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps);
- TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
- TraceTime t(_printGCMessage, PrintGC, true, gclog_or_tty);
+ gclog_or_tty->date_stamp(G1Log::fine() && PrintGCDateStamps);
+ TraceCPUTime tcpu(G1Log::finer(), true, gclog_or_tty);
+ TraceTime t(_printGCMessage, G1Log::fine(), true, gclog_or_tty);
SharedHeap* sh = SharedHeap::heap();
// This could go away if CollectedHeap gave access to _gc_is_active...
if (sh != NULL) {
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp
index 6e42facf29e..b5ee675b17b 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp
@@ -42,7 +42,7 @@ class CheckForUnmarkedOops : public OopClosure {
protected:
template void do_oop_work(T* p) {
- oop obj = oopDesc::load_decode_heap_oop_not_null(p);
+ oop obj = oopDesc::load_decode_heap_oop(p);
if (_young_gen->is_in_reserved(obj) &&
!_card_table->addr_is_marked_imprecise(p)) {
// Don't overwrite the first missing card mark
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp
index 8fef37eba32..9a8848d5399 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp
@@ -911,23 +911,23 @@ void ParallelScavengeHeap::print_tracing_info() const {
}
-void ParallelScavengeHeap::verify(bool allow_dirty, bool silent, VerifyOption option /* ignored */) {
+void ParallelScavengeHeap::verify(bool silent, VerifyOption option /* ignored */) {
// Why do we need the total_collections()-filter below?
if (total_collections() > 0) {
if (!silent) {
gclog_or_tty->print("permanent ");
}
- perm_gen()->verify(allow_dirty);
+ perm_gen()->verify();
if (!silent) {
gclog_or_tty->print("tenured ");
}
- old_gen()->verify(allow_dirty);
+ old_gen()->verify();
if (!silent) {
gclog_or_tty->print("eden ");
}
- young_gen()->verify(allow_dirty);
+ young_gen()->verify();
}
}
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp
index 5934cdfb888..e118997169d 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.hpp
@@ -257,7 +257,7 @@ CollectorPolicy* collector_policy() const { return (CollectorPolicy*) _collector
virtual void gc_threads_do(ThreadClosure* tc) const;
virtual void print_tracing_info() const;
- void verify(bool allow_dirty, bool silent, VerifyOption option /* ignored */);
+ void verify(bool silent, VerifyOption option /* ignored */);
void print_heap_change(size_t prev_used);
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp
index a46ac632904..63df001b319 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -477,8 +477,8 @@ void PSOldGen::space_invariants() {
}
#endif
-void PSOldGen::verify(bool allow_dirty) {
- object_space()->verify(allow_dirty);
+void PSOldGen::verify() {
+ object_space()->verify();
}
class VerifyObjectStartArrayClosure : public ObjectClosure {
PSOldGen* _gen;
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp
index 174db29aebb..ce45376f01e 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psOldGen.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -174,7 +174,7 @@ class PSOldGen : public CHeapObj {
virtual void print_on(outputStream* st) const;
void print_used_change(size_t prev_used) const;
- void verify(bool allow_dirty);
+ void verify();
void verify_object_start_array();
// These should not used
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp
index 5355abe0a73..70c071dfe49 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -937,10 +937,10 @@ void PSYoungGen::update_counters() {
}
}
-void PSYoungGen::verify(bool allow_dirty) {
- eden_space()->verify(allow_dirty);
- from_space()->verify(allow_dirty);
- to_space()->verify(allow_dirty);
+void PSYoungGen::verify() {
+ eden_space()->verify();
+ from_space()->verify();
+ to_space()->verify();
}
#ifndef PRODUCT
diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp
index 640c7614c10..b5a2a14bbbf 100644
--- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp
+++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psYoungGen.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -181,7 +181,7 @@ class PSYoungGen : public CHeapObj {
void print_used_change(size_t prev_used) const;
virtual const char* name() const { return "PSYoungGen"; }
- void verify(bool allow_dirty);
+ void verify();
// Space boundary invariant checker
void space_invariants() PRODUCT_RETURN;
diff --git a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.cpp b/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.cpp
index de081655685..68af9ebb6ac 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.cpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -70,7 +70,7 @@ void ImmutableSpace::print() const {
#endif
-void ImmutableSpace::verify(bool allow_dirty) {
+void ImmutableSpace::verify() {
HeapWord* p = bottom();
HeapWord* t = end();
HeapWord* prev_p = NULL;
diff --git a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp
index bc5c1bd13b0..7d6be0d9f85 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/immutableSpace.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -65,7 +65,7 @@ class ImmutableSpace: public CHeapObj {
// Debugging
virtual void print() const PRODUCT_RETURN;
virtual void print_short() const PRODUCT_RETURN;
- virtual void verify(bool allow_dirty);
+ virtual void verify();
};
#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_IMMUTABLESPACE_HPP
diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp
index 706fd3733eb..f0f6a49d958 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp
@@ -891,12 +891,12 @@ void MutableNUMASpace::print_on(outputStream* st) const {
}
}
-void MutableNUMASpace::verify(bool allow_dirty) {
+void MutableNUMASpace::verify() {
// This can be called after setting an arbitary value to the space's top,
// so an object can cross the chunk boundary. We ensure the parsablity
// of the space and just walk the objects in linear fashion.
ensure_parsability();
- MutableSpace::verify(allow_dirty);
+ MutableSpace::verify();
}
// Scan pages and gather stats about page placement and size.
diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp
index 7b70e6e29d9..db7207cc24b 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/mutableNUMASpace.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -225,7 +225,7 @@ class MutableNUMASpace : public MutableSpace {
// Debugging
virtual void print_on(outputStream* st) const;
virtual void print_short_on(outputStream* st) const;
- virtual void verify(bool allow_dirty);
+ virtual void verify();
virtual void set_top(HeapWord* value);
};
diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp b/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp
index 9725c4a1ebd..c47fbecab84 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -246,7 +246,7 @@ void MutableSpace::print_on(outputStream* st) const {
bottom(), top(), end());
}
-void MutableSpace::verify(bool allow_dirty) {
+void MutableSpace::verify() {
HeapWord* p = bottom();
HeapWord* t = top();
HeapWord* prev_p = NULL;
diff --git a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp b/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp
index 01fb23f050f..9ef8922848a 100644
--- a/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp
+++ b/hotspot/src/share/vm/gc_implementation/shared/mutableSpace.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -141,7 +141,7 @@ class MutableSpace: public ImmutableSpace {
virtual void print_on(outputStream* st) const;
virtual void print_short() const;
virtual void print_short_on(outputStream* st) const;
- virtual void verify(bool allow_dirty);
+ virtual void verify();
};
#endif // SHARE_VM_GC_IMPLEMENTATION_SHARED_MUTABLESPACE_HPP
diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp
index 2ae92076e24..105e1ea8f24 100644
--- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp
+++ b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp
@@ -659,7 +659,7 @@ class CollectedHeap : public CHeapObj {
}
// Heap verification
- virtual void verify(bool allow_dirty, bool silent, VerifyOption option) = 0;
+ virtual void verify(bool silent, VerifyOption option) = 0;
// Non product verification and debugging.
#ifndef PRODUCT
diff --git a/hotspot/src/share/vm/memory/barrierSet.hpp b/hotspot/src/share/vm/memory/barrierSet.hpp
index 113ad146268..d9cf3c29394 100644
--- a/hotspot/src/share/vm/memory/barrierSet.hpp
+++ b/hotspot/src/share/vm/memory/barrierSet.hpp
@@ -181,6 +181,8 @@ public:
// within the heap, this function tells whether they are met.
virtual bool is_aligned(HeapWord* addr) = 0;
+ // Print a description of the memory for the barrier set
+ virtual void print_on(outputStream* st) const = 0;
};
#endif // SHARE_VM_MEMORY_BARRIERSET_HPP
diff --git a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp
index 7e46d2d8734..acf6413c411 100644
--- a/hotspot/src/share/vm/memory/cardTableModRefBS.cpp
+++ b/hotspot/src/share/vm/memory/cardTableModRefBS.cpp
@@ -711,6 +711,11 @@ void CardTableModRefBS::verify_dirty_region(MemRegion mr) {
}
#endif
+void CardTableModRefBS::print_on(outputStream* st) const {
+ st->print_cr("Card table byte_map: [" INTPTR_FORMAT "," INTPTR_FORMAT "] byte_map_base: " INTPTR_FORMAT,
+ _byte_map, _byte_map + _byte_map_size, byte_map_base);
+}
+
bool CardTableModRefBSForCTRS::card_will_be_scanned(jbyte cv) {
return
CardTableModRefBS::card_will_be_scanned(cv) ||
diff --git a/hotspot/src/share/vm/memory/cardTableModRefBS.hpp b/hotspot/src/share/vm/memory/cardTableModRefBS.hpp
index e65d0348e32..ada95426245 100644
--- a/hotspot/src/share/vm/memory/cardTableModRefBS.hpp
+++ b/hotspot/src/share/vm/memory/cardTableModRefBS.hpp
@@ -472,6 +472,9 @@ public:
return _byte_map + card_index;
}
+ // Print a description of the memory for the barrier set
+ virtual void print_on(outputStream* st) const;
+
void verify();
void verify_guard();
diff --git a/hotspot/src/share/vm/memory/compactingPermGenGen.cpp b/hotspot/src/share/vm/memory/compactingPermGenGen.cpp
index c903bf46d27..7d1515b5e67 100644
--- a/hotspot/src/share/vm/memory/compactingPermGenGen.cpp
+++ b/hotspot/src/share/vm/memory/compactingPermGenGen.cpp
@@ -444,11 +444,11 @@ void CompactingPermGenGen::invalidate_remembered_set() {
}
-void CompactingPermGenGen::verify(bool allow_dirty) {
- the_space()->verify(allow_dirty);
+void CompactingPermGenGen::verify() {
+ the_space()->verify();
if (!SharedSkipVerify && spec()->enable_shared_spaces()) {
- ro_space()->verify(allow_dirty);
- rw_space()->verify(allow_dirty);
+ ro_space()->verify();
+ rw_space()->verify();
}
}
diff --git a/hotspot/src/share/vm/memory/compactingPermGenGen.hpp b/hotspot/src/share/vm/memory/compactingPermGenGen.hpp
index e3428d72f18..3cab19cf930 100644
--- a/hotspot/src/share/vm/memory/compactingPermGenGen.hpp
+++ b/hotspot/src/share/vm/memory/compactingPermGenGen.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -230,7 +230,7 @@ public:
void* new_vtable_start,
void* obj);
- void verify(bool allow_dirty);
+ void verify();
// Serialization
static void initialize_oops() KERNEL_RETURN;
diff --git a/hotspot/src/share/vm/memory/defNewGeneration.cpp b/hotspot/src/share/vm/memory/defNewGeneration.cpp
index 69ae3624a25..315a38248c9 100644
--- a/hotspot/src/share/vm/memory/defNewGeneration.cpp
+++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp
@@ -939,10 +939,10 @@ void DefNewGeneration::update_counters() {
}
}
-void DefNewGeneration::verify(bool allow_dirty) {
- eden()->verify(allow_dirty);
- from()->verify(allow_dirty);
- to()->verify(allow_dirty);
+void DefNewGeneration::verify() {
+ eden()->verify();
+ from()->verify();
+ to()->verify();
}
void DefNewGeneration::print_on(outputStream* st) const {
diff --git a/hotspot/src/share/vm/memory/defNewGeneration.hpp b/hotspot/src/share/vm/memory/defNewGeneration.hpp
index e7b85285775..1d5a4859041 100644
--- a/hotspot/src/share/vm/memory/defNewGeneration.hpp
+++ b/hotspot/src/share/vm/memory/defNewGeneration.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -340,7 +340,7 @@ protected:
// PrintHeapAtGC support.
void print_on(outputStream* st) const;
- void verify(bool allow_dirty);
+ void verify();
bool promo_failure_scan_is_complete() const {
return _promo_failure_scan_stack.is_empty();
diff --git a/hotspot/src/share/vm/memory/dump.cpp b/hotspot/src/share/vm/memory/dump.cpp
index 89eced32122..af1d7928dca 100644
--- a/hotspot/src/share/vm/memory/dump.cpp
+++ b/hotspot/src/share/vm/memory/dump.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1488,12 +1488,11 @@ void GenCollectedHeap::preload_and_dump(TRAPS) {
// sun.io.Converters
static const char obj_array_sig[] = "[[Ljava/lang/Object;";
- SymbolTable::lookup(obj_array_sig, (int)strlen(obj_array_sig), THREAD);
+ (void)SymbolTable::new_permanent_symbol(obj_array_sig, THREAD);
// java.util.HashMap
static const char map_entry_array_sig[] = "[Ljava/util/Map$Entry;";
- SymbolTable::lookup(map_entry_array_sig, (int)strlen(map_entry_array_sig),
- THREAD);
+ (void)SymbolTable::new_permanent_symbol(map_entry_array_sig, THREAD);
tty->print("Loading classes to share ... ");
while ((fgets(class_name, sizeof class_name, file)) != NULL) {
@@ -1512,7 +1511,7 @@ void GenCollectedHeap::preload_and_dump(TRAPS) {
computed_jsum = jsum(computed_jsum, class_name, (const int)name_len - 1);
// Got a class name - load it.
- TempNewSymbol class_name_symbol = SymbolTable::new_symbol(class_name, THREAD);
+ Symbol* class_name_symbol = SymbolTable::new_permanent_symbol(class_name, THREAD);
guarantee(!HAS_PENDING_EXCEPTION, "Exception creating a symbol.");
klassOop klass = SystemDictionary::resolve_or_null(class_name_symbol,
THREAD);
diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.cpp b/hotspot/src/share/vm/memory/genCollectedHeap.cpp
index 3cd791d35a2..10c3274548d 100644
--- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp
+++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp
@@ -1247,18 +1247,18 @@ GCStats* GenCollectedHeap::gc_stats(int level) const {
return _gens[level]->gc_stats();
}
-void GenCollectedHeap::verify(bool allow_dirty, bool silent, VerifyOption option /* ignored */) {
+void GenCollectedHeap::verify(bool silent, VerifyOption option /* ignored */) {
if (!silent) {
gclog_or_tty->print("permgen ");
}
- perm_gen()->verify(allow_dirty);
+ perm_gen()->verify();
for (int i = _n_gens-1; i >= 0; i--) {
Generation* g = _gens[i];
if (!silent) {
gclog_or_tty->print(g->name());
gclog_or_tty->print(" ");
}
- g->verify(allow_dirty);
+ g->verify();
}
if (!silent) {
gclog_or_tty->print("remset ");
diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.hpp b/hotspot/src/share/vm/memory/genCollectedHeap.hpp
index 5f35dec41e2..557d0a96095 100644
--- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp
+++ b/hotspot/src/share/vm/memory/genCollectedHeap.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -357,7 +357,7 @@ public:
void prepare_for_verify();
// Override.
- void verify(bool allow_dirty, bool silent, VerifyOption option);
+ void verify(bool silent, VerifyOption option);
// Override.
virtual void print_on(outputStream* st) const;
diff --git a/hotspot/src/share/vm/memory/generation.cpp b/hotspot/src/share/vm/memory/generation.cpp
index 75a373285d9..13e08586ba5 100644
--- a/hotspot/src/share/vm/memory/generation.cpp
+++ b/hotspot/src/share/vm/memory/generation.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -696,8 +696,8 @@ void OneContigSpaceCardGeneration::record_spaces_top() {
the_space()->set_top_for_allocations();
}
-void OneContigSpaceCardGeneration::verify(bool allow_dirty) {
- the_space()->verify(allow_dirty);
+void OneContigSpaceCardGeneration::verify() {
+ the_space()->verify();
}
void OneContigSpaceCardGeneration::print_on(outputStream* st) const {
diff --git a/hotspot/src/share/vm/memory/generation.hpp b/hotspot/src/share/vm/memory/generation.hpp
index 61fcf187cfd..5c62e8bf2de 100644
--- a/hotspot/src/share/vm/memory/generation.hpp
+++ b/hotspot/src/share/vm/memory/generation.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -599,7 +599,7 @@ class Generation: public CHeapObj {
virtual void print() const;
virtual void print_on(outputStream* st) const;
- virtual void verify(bool allow_dirty) = 0;
+ virtual void verify() = 0;
struct StatRecord {
int invocations;
@@ -753,7 +753,7 @@ class OneContigSpaceCardGeneration: public CardGeneration {
virtual void record_spaces_top();
- virtual void verify(bool allow_dirty);
+ virtual void verify();
virtual void print_on(outputStream* st) const;
};
diff --git a/hotspot/src/share/vm/memory/oopFactory.cpp b/hotspot/src/share/vm/memory/oopFactory.cpp
index c6e644c96d4..fcac438bbe3 100644
--- a/hotspot/src/share/vm/memory/oopFactory.cpp
+++ b/hotspot/src/share/vm/memory/oopFactory.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -127,9 +127,12 @@ constantPoolCacheOop oopFactory::new_constantPoolCache(int length,
klassOop oopFactory::new_instanceKlass(Symbol* name, int vtable_len, int itable_len,
int static_field_size,
unsigned int nonstatic_oop_map_count,
+ AccessFlags access_flags,
ReferenceType rt, TRAPS) {
instanceKlassKlass* ikk = instanceKlassKlass::cast(Universe::instanceKlassKlassObj());
- return ikk->allocate_instance_klass(name, vtable_len, itable_len, static_field_size, nonstatic_oop_map_count, rt, CHECK_NULL);
+ return ikk->allocate_instance_klass(name, vtable_len, itable_len,
+ static_field_size, nonstatic_oop_map_count,
+ access_flags, rt, CHECK_NULL);
}
diff --git a/hotspot/src/share/vm/memory/oopFactory.hpp b/hotspot/src/share/vm/memory/oopFactory.hpp
index dbb42f05332..61faf8e3db7 100644
--- a/hotspot/src/share/vm/memory/oopFactory.hpp
+++ b/hotspot/src/share/vm/memory/oopFactory.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -77,6 +77,7 @@ class oopFactory: AllStatic {
int vtable_len, int itable_len,
int static_field_size,
unsigned int nonstatic_oop_map_count,
+ AccessFlags access_flags,
ReferenceType rt, TRAPS);
// Methods
diff --git a/hotspot/src/share/vm/memory/space.cpp b/hotspot/src/share/vm/memory/space.cpp
index 7f3aceb3224..b096775cfcb 100644
--- a/hotspot/src/share/vm/memory/space.cpp
+++ b/hotspot/src/share/vm/memory/space.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -531,7 +531,7 @@ void OffsetTableContigSpace::print_on(outputStream* st) const {
bottom(), top(), _offsets.threshold(), end());
}
-void ContiguousSpace::verify(bool allow_dirty) const {
+void ContiguousSpace::verify() const {
HeapWord* p = bottom();
HeapWord* t = top();
HeapWord* prev_p = NULL;
@@ -965,27 +965,12 @@ OffsetTableContigSpace::OffsetTableContigSpace(BlockOffsetSharedArray* sharedOff
initialize(mr, SpaceDecorator::Clear, SpaceDecorator::Mangle);
}
-
-class VerifyOldOopClosure : public OopClosure {
- public:
- oop _the_obj;
- bool _allow_dirty;
- void do_oop(oop* p) {
- _the_obj->verify_old_oop(p, _allow_dirty);
- }
- void do_oop(narrowOop* p) {
- _the_obj->verify_old_oop(p, _allow_dirty);
- }
-};
-
#define OBJ_SAMPLE_INTERVAL 0
#define BLOCK_SAMPLE_INTERVAL 100
-void OffsetTableContigSpace::verify(bool allow_dirty) const {
+void OffsetTableContigSpace::verify() const {
HeapWord* p = bottom();
HeapWord* prev_p = NULL;
- VerifyOldOopClosure blk; // Does this do anything?
- blk._allow_dirty = allow_dirty;
int objs = 0;
int blocks = 0;
@@ -1007,8 +992,6 @@ void OffsetTableContigSpace::verify(bool allow_dirty) const {
if (objs == OBJ_SAMPLE_INTERVAL) {
oop(p)->verify();
- blk._the_obj = oop(p);
- oop(p)->oop_iterate(&blk);
objs = 0;
} else {
objs++;
diff --git a/hotspot/src/share/vm/memory/space.hpp b/hotspot/src/share/vm/memory/space.hpp
index 2d718c2a5c8..33b56cf0651 100644
--- a/hotspot/src/share/vm/memory/space.hpp
+++ b/hotspot/src/share/vm/memory/space.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -306,7 +306,7 @@ class Space: public CHeapObj {
}
// Debugging
- virtual void verify(bool allow_dirty) const = 0;
+ virtual void verify() const = 0;
};
// A MemRegionClosure (ResourceObj) whose "do_MemRegion" function applies an
@@ -948,7 +948,7 @@ class ContiguousSpace: public CompactibleSpace {
}
// Debugging
- virtual void verify(bool allow_dirty) const;
+ virtual void verify() const;
// Used to increase collection frequency. "factor" of 0 means entire
// space.
@@ -1100,7 +1100,7 @@ class OffsetTableContigSpace: public ContiguousSpace {
virtual void print_on(outputStream* st) const;
// Debugging
- void verify(bool allow_dirty) const;
+ void verify() const;
// Shared space support
void serialize_block_offset_array_offsets(SerializeOopClosure* soc);
diff --git a/hotspot/src/share/vm/memory/universe.cpp b/hotspot/src/share/vm/memory/universe.cpp
index 2651f4d8e30..9282828a7e9 100644
--- a/hotspot/src/share/vm/memory/universe.cpp
+++ b/hotspot/src/share/vm/memory/universe.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1326,7 +1326,7 @@ void Universe::print_heap_after_gc(outputStream* st, bool ignore_extended) {
st->print_cr("}");
}
-void Universe::verify(bool allow_dirty, bool silent, VerifyOption option) {
+void Universe::verify(bool silent, VerifyOption option) {
if (SharedSkipVerify) {
return;
}
@@ -1350,7 +1350,7 @@ void Universe::verify(bool allow_dirty, bool silent, VerifyOption option) {
if (!silent) gclog_or_tty->print("[Verifying ");
if (!silent) gclog_or_tty->print("threads ");
Threads::verify();
- heap()->verify(allow_dirty, silent, option);
+ heap()->verify(silent, option);
if (!silent) gclog_or_tty->print("syms ");
SymbolTable::verify();
diff --git a/hotspot/src/share/vm/memory/universe.hpp b/hotspot/src/share/vm/memory/universe.hpp
index 5c1587ee44a..073a5c2ca75 100644
--- a/hotspot/src/share/vm/memory/universe.hpp
+++ b/hotspot/src/share/vm/memory/universe.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -412,7 +412,7 @@ class Universe: AllStatic {
// Debugging
static bool verify_in_progress() { return _verify_in_progress; }
- static void verify(bool allow_dirty = true, bool silent = false,
+ static void verify(bool silent = false,
VerifyOption option = VerifyOption_Default );
static int verify_count() { return _verify_count; }
// The default behavior is to call print_on() on gclog_or_tty.
diff --git a/hotspot/src/share/vm/oops/instanceKlass.cpp b/hotspot/src/share/vm/oops/instanceKlass.cpp
index 81edd80946f..aa5f7765a79 100644
--- a/hotspot/src/share/vm/oops/instanceKlass.cpp
+++ b/hotspot/src/share/vm/oops/instanceKlass.cpp
@@ -567,8 +567,18 @@ void instanceKlass::set_initialization_state_and_notify_impl(instanceKlassHandle
ol.notify_all(CHECK);
}
+// The embedded _implementor field can only record one implementor.
+// When there are more than one implementors, the _implementor field
+// is set to the interface klassOop itself. Following are the possible
+// values for the _implementor field:
+// NULL - no implementor
+// implementor klassOop - one implementor
+// self - more than one implementor
+//
+// The _implementor field only exists for interfaces.
void instanceKlass::add_implementor(klassOop k) {
assert(Compile_lock->owned_by_self(), "");
+ assert(is_interface(), "not interface");
// Filter out my subinterfaces.
// (Note: Interfaces are never on the subklass list.)
if (instanceKlass::cast(k)->is_interface()) return;
@@ -583,17 +593,13 @@ void instanceKlass::add_implementor(klassOop k) {
// Any supers of the super have the same (or fewer) transitive_interfaces.
return;
- // Update number of implementors
- int i = _nof_implementors++;
-
- // Record this implementor, if there are not too many already
- if (i < implementors_limit) {
- assert(_implementors[i] == NULL, "should be exactly one implementor");
- oop_store_without_check((oop*)&_implementors[i], k);
- } else if (i == implementors_limit) {
- // clear out the list on first overflow
- for (int i2 = 0; i2 < implementors_limit; i2++)
- oop_store_without_check((oop*)&_implementors[i2], NULL);
+ klassOop ik = implementor();
+ if (ik == NULL) {
+ set_implementor(k);
+ } else if (ik != this->as_klassOop()) {
+ // There is already an implementor. Use itself as an indicator of
+ // more than one implementors.
+ set_implementor(this->as_klassOop());
}
// The implementor also implements the transitive_interfaces
@@ -603,9 +609,9 @@ void instanceKlass::add_implementor(klassOop k) {
}
void instanceKlass::init_implementor() {
- for (int i = 0; i < implementors_limit; i++)
- oop_store_without_check((oop*)&_implementors[i], NULL);
- _nof_implementors = 0;
+ if (is_interface()) {
+ set_implementor(NULL);
+ }
}
@@ -1849,24 +1855,22 @@ int instanceKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) {
void instanceKlass::follow_weak_klass_links(
BoolObjectClosure* is_alive, OopClosure* keep_alive) {
assert(is_alive->do_object_b(as_klassOop()), "this oop should be live");
- if (ClassUnloading) {
- for (int i = 0; i < implementors_limit; i++) {
- klassOop impl = _implementors[i];
- if (impl == NULL) break; // no more in the list
- if (!is_alive->do_object_b(impl)) {
- // remove this guy from the list by overwriting him with the tail
- int lasti = --_nof_implementors;
- assert(lasti >= i && lasti < implementors_limit, "just checking");
- _implementors[i] = _implementors[lasti];
- _implementors[lasti] = NULL;
- --i; // rerun the loop at this index
+
+ if (is_interface()) {
+ if (ClassUnloading) {
+ klassOop impl = implementor();
+ if (impl != NULL) {
+ if (!is_alive->do_object_b(impl)) {
+ // remove this guy
+ *start_of_implementor() = NULL;
+ }
}
- }
- } else {
- for (int i = 0; i < implementors_limit; i++) {
- keep_alive->do_oop(&adr_implementors()[i]);
+ } else {
+ assert(adr_implementor() != NULL, "just checking");
+ keep_alive->do_oop(adr_implementor());
}
}
+
Klass::follow_weak_klass_links(is_alive, keep_alive);
}
diff --git a/hotspot/src/share/vm/oops/instanceKlass.hpp b/hotspot/src/share/vm/oops/instanceKlass.hpp
index 9cbfa0fbfb6..31266375115 100644
--- a/hotspot/src/share/vm/oops/instanceKlass.hpp
+++ b/hotspot/src/share/vm/oops/instanceKlass.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -56,8 +56,6 @@
// [methods ]
// [local interfaces ]
// [transitive interfaces ]
-// [number of implementors ]
-// [implementors ] klassOop[2]
// [fields ]
// [constants ]
// [class loader ]
@@ -77,9 +75,9 @@
// [oop map cache (stack maps) ]
// [EMBEDDED Java vtable ] size in words = vtable_len
// [EMBEDDED nonstatic oop-map blocks] size in words = nonstatic_oop_map_size
-//
-// The embedded nonstatic oop-map blocks are short pairs (offset, length) indicating
-// where oops are located in instances of this klass.
+// The embedded nonstatic oop-map blocks are short pairs (offset, length)
+// indicating where oops are located in instances of this klass.
+// [EMBEDDED implementor of the interface] only exist for interface
// forward declaration for class -- see below for definition
@@ -153,10 +151,6 @@ class instanceKlass: public Klass {
oop* oop_block_beg() const { return adr_array_klasses(); }
oop* oop_block_end() const { return adr_methods_default_annotations() + 1; }
- enum {
- implementors_limit = 2 // how many implems can we track?
- };
-
protected:
//
// The oop block. See comment in klass.hpp before making changes.
@@ -200,8 +194,6 @@ class instanceKlass: public Klass {
// and EnclosingMethod attributes the _inner_classes array length is
// number_of_inner_classes * 4 + enclosing_method_attribute_size.
typeArrayOop _inner_classes;
- // Implementors of this interface (not valid if it overflows)
- klassOop _implementors[implementors_limit];
// Annotations for this class, or null if none.
typeArrayOop _class_annotations;
// Annotation objects (byte arrays) for fields, or null if no annotations.
@@ -257,7 +249,6 @@ class instanceKlass: public Klass {
nmethodBucket* _dependencies; // list of dependent nmethods
nmethod* _osr_nmethods_head; // Head of list of on-stack replacement nmethods for this class
BreakpointInfo* _breakpoints; // bpt lists, managed by methodOop
- int _nof_implementors; // No of implementors of this interface (zero if not an interface)
// Array of interesting part(s) of the previous version(s) of this
// instanceKlass. See PreviousVersionWalker below.
GrowableArray* _previous_versions;
@@ -278,6 +269,13 @@ class instanceKlass: public Klass {
// embedded Java itables follows here
// embedded static fields follows here
// embedded nonstatic oop-map blocks follows here
+ // embedded implementor of this interface follows here
+ // The embedded implementor only exists if the current klass is an
+ // iterface. The possible values of the implementor fall into following
+ // three cases:
+ // NULL: no implementor.
+ // A klassOop that's not itself: one implementor.
+ // Itsef: more than one implementors.
friend class instanceKlassKlass;
friend class SystemDictionary;
@@ -644,19 +642,40 @@ class instanceKlass: public Klass {
// support for stub routines
static ByteSize init_state_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(instanceKlass, _init_state)); }
+ TRACE_DEFINE_OFFSET;
static ByteSize init_thread_offset() { return in_ByteSize(sizeof(klassOopDesc) + offset_of(instanceKlass, _init_thread)); }
// subclass/subinterface checks
bool implements_interface(klassOop k) const;
- // Access to implementors of an interface. We only store the count
- // of implementors, and in case, there are only a few
- // implementors, we store them in a short list.
- // This accessor returns NULL if we walk off the end of the list.
- klassOop implementor(int i) const {
- return (i < implementors_limit)? _implementors[i]: (klassOop) NULL;
+ // Access to the implementor of an interface.
+ klassOop implementor() const
+ {
+ klassOop* k = start_of_implementor();
+ if (k == NULL) {
+ return NULL;
+ } else {
+ return *k;
+ }
}
- int nof_implementors() const { return _nof_implementors; }
+
+ void set_implementor(klassOop k) {
+ assert(is_interface(), "not interface");
+ oop* addr = (oop*)start_of_implementor();
+ oop_store_without_check(addr, k);
+ }
+
+ int nof_implementors() const {
+ klassOop k = implementor();
+ if (k == NULL) {
+ return 0;
+ } else if (k != this->as_klassOop()) {
+ return 1;
+ } else {
+ return 2;
+ }
+ }
+
void add_implementor(klassOop k); // k is a new class that implements this interface
void init_implementor(); // initialize
@@ -693,7 +712,15 @@ class instanceKlass: public Klass {
// Sizing (in words)
static int header_size() { return align_object_offset(oopDesc::header_size() + sizeof(instanceKlass)/HeapWordSize); }
- int object_size() const { return object_size(align_object_offset(vtable_length()) + align_object_offset(itable_length()) + nonstatic_oop_map_size()); }
+
+ int object_size() const
+ {
+ return object_size(align_object_offset(vtable_length()) +
+ align_object_offset(itable_length()) +
+ (is_interface() ?
+ (align_object_offset(nonstatic_oop_map_size()) + (int)sizeof(klassOop)/HeapWordSize) :
+ nonstatic_oop_map_size()));
+ }
static int vtable_start_offset() { return header_size(); }
static int vtable_length_offset() { return oopDesc::header_size() + offset_of(instanceKlass, _vtable_len) / HeapWordSize; }
static int object_size(int extra) { return align_object_size(header_size() + extra); }
@@ -710,6 +737,15 @@ class instanceKlass: public Klass {
return (OopMapBlock*)(start_of_itable() + align_object_offset(itable_length()));
}
+ klassOop* start_of_implementor() const {
+ if (is_interface()) {
+ return (klassOop*)(start_of_nonstatic_oop_maps() +
+ nonstatic_oop_map_count());
+ } else {
+ return NULL;
+ }
+ };
+
// Allocation profiling support
juint alloc_size() const { return _alloc_count * size_helper(); }
void set_alloc_size(juint n) {}
@@ -819,7 +855,7 @@ private:
oop* adr_host_klass() const { return (oop*)&this->_host_klass;}
oop* adr_signers() const { return (oop*)&this->_signers;}
oop* adr_inner_classes() const { return (oop*)&this->_inner_classes;}
- oop* adr_implementors() const { return (oop*)&this->_implementors[0];}
+ oop* adr_implementor() const { return (oop*)start_of_implementor(); }
oop* adr_methods_jmethod_ids() const { return (oop*)&this->_methods_jmethod_ids;}
oop* adr_methods_cached_itable_indices() const { return (oop*)&this->_methods_cached_itable_indices;}
oop* adr_class_annotations() const { return (oop*)&this->_class_annotations;}
diff --git a/hotspot/src/share/vm/oops/instanceKlassKlass.cpp b/hotspot/src/share/vm/oops/instanceKlassKlass.cpp
index 2ceef2a9107..808b6e56999 100644
--- a/hotspot/src/share/vm/oops/instanceKlassKlass.cpp
+++ b/hotspot/src/share/vm/oops/instanceKlassKlass.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -111,7 +111,7 @@ void instanceKlassKlass::oop_follow_contents(oop obj) {
MarkSweep::mark_and_push(ik->adr_methods_parameter_annotations());
MarkSweep::mark_and_push(ik->adr_methods_default_annotations());
- // We do not follow adr_implementors() here. It is followed later
+ // We do not follow adr_implementor() here. It is followed later
// in instanceKlass::follow_weak_klass_links()
klassKlass::oop_follow_contents(obj);
@@ -180,8 +180,8 @@ int instanceKlassKlass::oop_oop_iterate(oop obj, OopClosure* blk) {
blk->do_oop(ik->adr_host_klass());
blk->do_oop(ik->adr_signers());
blk->do_oop(ik->adr_inner_classes());
- for (int i = 0; i < instanceKlass::implementors_limit; i++) {
- blk->do_oop(&ik->adr_implementors()[i]);
+ if (ik->is_interface()) {
+ blk->do_oop(ik->adr_implementor());
}
blk->do_oop(ik->adr_class_annotations());
blk->do_oop(ik->adr_fields_annotations());
@@ -232,9 +232,9 @@ int instanceKlassKlass::oop_oop_iterate_m(oop obj, OopClosure* blk,
if (mr.contains(adr)) blk->do_oop(adr);
adr = ik->adr_inner_classes();
if (mr.contains(adr)) blk->do_oop(adr);
- adr = ik->adr_implementors();
- for (int i = 0; i < instanceKlass::implementors_limit; i++) {
- if (mr.contains(&adr[i])) blk->do_oop(&adr[i]);
+ if (ik->is_interface()) {
+ adr = ik->adr_implementor();
+ if (mr.contains(adr)) blk->do_oop(adr);
}
adr = ik->adr_class_annotations();
if (mr.contains(adr)) blk->do_oop(adr);
@@ -273,8 +273,8 @@ int instanceKlassKlass::oop_adjust_pointers(oop obj) {
MarkSweep::adjust_pointer(ik->adr_host_klass());
MarkSweep::adjust_pointer(ik->adr_signers());
MarkSweep::adjust_pointer(ik->adr_inner_classes());
- for (int i = 0; i < instanceKlass::implementors_limit; i++) {
- MarkSweep::adjust_pointer(&ik->adr_implementors()[i]);
+ if (ik->is_interface()) {
+ MarkSweep::adjust_pointer(ik->adr_implementor());
}
MarkSweep::adjust_pointer(ik->adr_class_annotations());
MarkSweep::adjust_pointer(ik->adr_fields_annotations());
@@ -328,6 +328,9 @@ int instanceKlassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) {
for (oop* cur_oop = beg_oop; cur_oop < end_oop; ++cur_oop) {
PSParallelCompact::adjust_pointer(cur_oop);
}
+ if (ik->is_interface()) {
+ PSParallelCompact::adjust_pointer(ik->adr_implementor());
+ }
OopClosure* closure = PSParallelCompact::adjust_root_pointer_closure();
iterate_c_heap_oops(ik, closure);
@@ -342,11 +345,18 @@ klassOop
instanceKlassKlass::allocate_instance_klass(Symbol* name, int vtable_len, int itable_len,
int static_field_size,
unsigned nonstatic_oop_map_count,
+ AccessFlags access_flags,
ReferenceType rt, TRAPS) {
const int nonstatic_oop_map_size =
instanceKlass::nonstatic_oop_map_size(nonstatic_oop_map_count);
- int size = instanceKlass::object_size(align_object_offset(vtable_len) + align_object_offset(itable_len) + nonstatic_oop_map_size);
+ int size = align_object_offset(vtable_len) + align_object_offset(itable_len);
+ if (access_flags.is_interface()) {
+ size += align_object_offset(nonstatic_oop_map_size) + (int)sizeof(klassOop)/HeapWordSize;
+ } else {
+ size += nonstatic_oop_map_size;
+ }
+ size = instanceKlass::object_size(size);
// Allocation
KlassHandle h_this_klass(THREAD, as_klassOop());
@@ -378,6 +388,7 @@ instanceKlassKlass::allocate_instance_klass(Symbol* name, int vtable_len, int it
ik->set_itable_length(itable_len);
ik->set_static_field_size(static_field_size);
ik->set_nonstatic_oop_map_size(nonstatic_oop_map_size);
+ ik->set_access_flags(access_flags);
assert(k()->size() == size, "wrong size for object");
ik->set_array_klasses(NULL);
@@ -470,16 +481,12 @@ void instanceKlassKlass::oop_print_on(oop obj, outputStream* st) {
if (ik->is_interface()) {
st->print_cr(BULLET"nof implementors: %d", ik->nof_implementors());
- int print_impl = 0;
- for (int i = 0; i < instanceKlass::implementors_limit; i++) {
- if (ik->implementor(i) != NULL) {
- if (++print_impl == 1)
- st->print_cr(BULLET"implementor: ");
- st->print(" ");
- ik->implementor(i)->print_value_on(st);
- }
+ if (ik->nof_implementors() == 1) {
+ st->print_cr(BULLET"implementor: ");
+ st->print(" ");
+ ik->implementor()->print_value_on(st);
+ st->cr();
}
- if (print_impl > 0) st->cr();
}
st->print(BULLET"arrays: "); ik->array_klasses()->print_value_on(st); st->cr();
@@ -640,16 +647,12 @@ void instanceKlassKlass::oop_verify_on(oop obj, outputStream* st) {
}
// Verify implementor fields
- bool saw_null_impl = false;
- for (int i = 0; i < instanceKlass::implementors_limit; i++) {
- klassOop im = ik->implementor(i);
- if (im == NULL) { saw_null_impl = true; continue; }
- guarantee(!saw_null_impl, "non-nulls must preceded all nulls");
+ klassOop im = ik->implementor();
+ if (im != NULL) {
guarantee(ik->is_interface(), "only interfaces should have implementor set");
- guarantee(i < ik->nof_implementors(), "should only have one implementor");
guarantee(im->is_perm(), "should be in permspace");
guarantee(im->is_klass(), "should be klass");
- guarantee(!Klass::cast(klassOop(im))->is_interface(), "implementors cannot be interfaces");
+ guarantee(!Klass::cast(klassOop(im))->is_interface() || im == ik->as_klassOop(), "implementors cannot be interfaces");
}
// Verify local interfaces
diff --git a/hotspot/src/share/vm/oops/instanceKlassKlass.hpp b/hotspot/src/share/vm/oops/instanceKlassKlass.hpp
index 9cbabe24644..ced9451da58 100644
--- a/hotspot/src/share/vm/oops/instanceKlassKlass.hpp
+++ b/hotspot/src/share/vm/oops/instanceKlassKlass.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -46,6 +46,7 @@ class instanceKlassKlass : public klassKlass {
int itable_len,
int static_field_size,
unsigned int nonstatic_oop_map_count,
+ AccessFlags access_flags,
ReferenceType rt,
TRAPS);
diff --git a/hotspot/src/share/vm/oops/instanceRefKlass.cpp b/hotspot/src/share/vm/oops/instanceRefKlass.cpp
index 71a7a1fcff3..1cabe507eae 100644
--- a/hotspot/src/share/vm/oops/instanceRefKlass.cpp
+++ b/hotspot/src/share/vm/oops/instanceRefKlass.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -497,36 +497,12 @@ void instanceRefKlass::oop_verify_on(oop obj, outputStream* st) {
if (referent != NULL) {
guarantee(referent->is_oop(), "referent field heap failed");
- if (gch != NULL && !gch->is_in_young(obj)) {
- // We do a specific remembered set check here since the referent
- // field is not part of the oop mask and therefore skipped by the
- // regular verify code.
- if (UseCompressedOops) {
- narrowOop* referent_addr = (narrowOop*)java_lang_ref_Reference::referent_addr(obj);
- obj->verify_old_oop(referent_addr, true);
- } else {
- oop* referent_addr = (oop*)java_lang_ref_Reference::referent_addr(obj);
- obj->verify_old_oop(referent_addr, true);
- }
- }
}
// Verify next field
oop next = java_lang_ref_Reference::next(obj);
if (next != NULL) {
guarantee(next->is_oop(), "next field verify failed");
guarantee(next->is_instanceRef(), "next field verify failed");
- if (gch != NULL && !gch->is_in_young(obj)) {
- // We do a specific remembered set check here since the next field is
- // not part of the oop mask and therefore skipped by the regular
- // verify code.
- if (UseCompressedOops) {
- narrowOop* next_addr = (narrowOop*)java_lang_ref_Reference::next_addr(obj);
- obj->verify_old_oop(next_addr, true);
- } else {
- oop* next_addr = (oop*)java_lang_ref_Reference::next_addr(obj);
- obj->verify_old_oop(next_addr, true);
- }
- }
}
}
diff --git a/hotspot/src/share/vm/oops/klass.cpp b/hotspot/src/share/vm/oops/klass.cpp
index 84abea68a80..8b21fdd99ed 100644
--- a/hotspot/src/share/vm/oops/klass.cpp
+++ b/hotspot/src/share/vm/oops/klass.cpp
@@ -581,14 +581,6 @@ void Klass::oop_verify_on(oop obj, outputStream* st) {
guarantee(obj->klass()->is_klass(), "klass field is not a klass");
}
-
-void Klass::oop_verify_old_oop(oop obj, oop* p, bool allow_dirty) {
- /* $$$ I think this functionality should be handled by verification of
- RememberedSet::verify_old_oop(obj, p, allow_dirty, false);
- the card table. */
-}
-void Klass::oop_verify_old_oop(oop obj, narrowOop* p, bool allow_dirty) { }
-
#ifndef PRODUCT
void Klass::verify_vtable_index(int i) {
diff --git a/hotspot/src/share/vm/oops/klass.hpp b/hotspot/src/share/vm/oops/klass.hpp
index 1b26932e8fa..bcbd4e736f4 100644
--- a/hotspot/src/share/vm/oops/klass.hpp
+++ b/hotspot/src/share/vm/oops/klass.hpp
@@ -805,8 +805,6 @@ class Klass : public Klass_vtbl {
// Verification
virtual const char* internal_name() const = 0;
virtual void oop_verify_on(oop obj, outputStream* st);
- virtual void oop_verify_old_oop(oop obj, oop* p, bool allow_dirty);
- virtual void oop_verify_old_oop(oop obj, narrowOop* p, bool allow_dirty);
// tells whether obj is partially constructed (gc during class loading)
virtual bool oop_partially_loaded(oop obj) const { return false; }
virtual void oop_set_partially_loaded(oop obj) {};
diff --git a/hotspot/src/share/vm/oops/objArrayKlass.cpp b/hotspot/src/share/vm/oops/objArrayKlass.cpp
index 79b1df24ff4..c152664bf58 100644
--- a/hotspot/src/share/vm/oops/objArrayKlass.cpp
+++ b/hotspot/src/share/vm/oops/objArrayKlass.cpp
@@ -545,10 +545,3 @@ void objArrayKlass::oop_verify_on(oop obj, outputStream* st) {
guarantee(oa->obj_at(index)->is_oop_or_null(), "should be oop");
}
}
-
-void objArrayKlass::oop_verify_old_oop(oop obj, oop* p, bool allow_dirty) {
- /* $$$ move into remembered set verification?
- RememberedSet::verify_old_oop(obj, p, allow_dirty, true);
- */
-}
-void objArrayKlass::oop_verify_old_oop(oop obj, narrowOop* p, bool allow_dirty) {}
diff --git a/hotspot/src/share/vm/oops/objArrayKlass.hpp b/hotspot/src/share/vm/oops/objArrayKlass.hpp
index 44717ec6954..ebf6a9e4187 100644
--- a/hotspot/src/share/vm/oops/objArrayKlass.hpp
+++ b/hotspot/src/share/vm/oops/objArrayKlass.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -144,8 +144,6 @@ class objArrayKlass : public arrayKlass {
// Verification
const char* internal_name() const;
void oop_verify_on(oop obj, outputStream* st);
- void oop_verify_old_oop(oop obj, oop* p, bool allow_dirty);
- void oop_verify_old_oop(oop obj, narrowOop* p, bool allow_dirty);
};
#endif // SHARE_VM_OOPS_OBJARRAYKLASS_HPP
diff --git a/hotspot/src/share/vm/oops/objArrayKlassKlass.cpp b/hotspot/src/share/vm/oops/objArrayKlassKlass.cpp
index dedd3f8829f..802ffeff4ff 100644
--- a/hotspot/src/share/vm/oops/objArrayKlassKlass.cpp
+++ b/hotspot/src/share/vm/oops/objArrayKlassKlass.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -137,7 +137,7 @@ klassOop objArrayKlassKlass::allocate_objArray_klass_impl(objArrayKlassKlassHand
new_str[idx++] = ';';
}
new_str[idx++] = '\0';
- name = SymbolTable::new_symbol(new_str, CHECK_0);
+ name = SymbolTable::new_permanent_symbol(new_str, CHECK_0);
if (element_klass->oop_is_instance()) {
instanceKlass* ik = instanceKlass::cast(element_klass());
ik->set_array_name(name);
diff --git a/hotspot/src/share/vm/oops/oop.cpp b/hotspot/src/share/vm/oops/oop.cpp
index f836fb792d8..61cf38d313f 100644
--- a/hotspot/src/share/vm/oops/oop.cpp
+++ b/hotspot/src/share/vm/oops/oop.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -107,16 +107,6 @@ void oopDesc::verify() {
verify_on(tty);
}
-
-// XXX verify_old_oop doesn't do anything (should we remove?)
-void oopDesc::verify_old_oop(oop* p, bool allow_dirty) {
- blueprint()->oop_verify_old_oop(this, p, allow_dirty);
-}
-
-void oopDesc::verify_old_oop(narrowOop* p, bool allow_dirty) {
- blueprint()->oop_verify_old_oop(this, p, allow_dirty);
-}
-
bool oopDesc::partially_loaded() {
return blueprint()->oop_partially_loaded(this);
}
diff --git a/hotspot/src/share/vm/oops/oop.hpp b/hotspot/src/share/vm/oops/oop.hpp
index 4d2f4537024..694d92113a1 100644
--- a/hotspot/src/share/vm/oops/oop.hpp
+++ b/hotspot/src/share/vm/oops/oop.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -293,8 +293,6 @@ class oopDesc {
// verification operations
void verify_on(outputStream* st);
void verify();
- void verify_old_oop(oop* p, bool allow_dirty);
- void verify_old_oop(narrowOop* p, bool allow_dirty);
// tells whether this oop is partially constructed (gc during class loading)
bool partially_loaded();
diff --git a/hotspot/src/share/vm/oops/symbol.cpp b/hotspot/src/share/vm/oops/symbol.cpp
index 4c508475064..8db92d1e2fd 100644
--- a/hotspot/src/share/vm/oops/symbol.cpp
+++ b/hotspot/src/share/vm/oops/symbol.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -29,15 +29,25 @@
#include "runtime/os.hpp"
#include "memory/allocation.inline.hpp"
-Symbol::Symbol(const u1* name, int length) : _refcount(0), _length(length) {
+Symbol::Symbol(const u1* name, int length, int refcount) : _refcount(refcount), _length(length) {
_identity_hash = os::random();
for (int i = 0; i < _length; i++) {
byte_at_put(i, name[i]);
}
}
-void* Symbol::operator new(size_t size, int len) {
- return (void *) AllocateHeap(object_size(len) * HeapWordSize, "symbol");
+void* Symbol::operator new(size_t sz, int len, TRAPS) {
+ int alloc_size = object_size(len)*HeapWordSize;
+ address res = (address) AllocateHeap(alloc_size, "symbol");
+ DEBUG_ONLY(set_allocation_type(res, ResourceObj::C_HEAP);)
+ return res;
+}
+
+void* Symbol::operator new(size_t sz, int len, Arena* arena, TRAPS) {
+ int alloc_size = object_size(len)*HeapWordSize;
+ address res = (address)arena->Amalloc(alloc_size);
+ DEBUG_ONLY(set_allocation_type(res, ResourceObj::ARENA);)
+ return res;
}
// ------------------------------------------------------------------
@@ -206,26 +216,5 @@ void Symbol::print_value_on(outputStream* st) const {
}
}
-void Symbol::increment_refcount() {
- // Only increment the refcount if positive. If negative either
- // overflow has occurred or it is a permanent symbol in a read only
- // shared archive.
- if (_refcount >= 0) {
- Atomic::inc(&_refcount);
- NOT_PRODUCT(Atomic::inc(&_total_count);)
- }
-}
-
-void Symbol::decrement_refcount() {
- if (_refcount >= 0) {
- Atomic::dec(&_refcount);
-#ifdef ASSERT
- if (_refcount < 0) {
- print();
- assert(false, "reference count underflow for symbol");
- }
-#endif
- }
-}
-
+// SymbolTable prints this in its statistics
NOT_PRODUCT(int Symbol::_total_count = 0;)
diff --git a/hotspot/src/share/vm/oops/symbol.hpp b/hotspot/src/share/vm/oops/symbol.hpp
index 269c2b72128..fba0cc9a4f9 100644
--- a/hotspot/src/share/vm/oops/symbol.hpp
+++ b/hotspot/src/share/vm/oops/symbol.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,7 @@
#include "utilities/utf8.hpp"
#include "memory/allocation.hpp"
+#include "runtime/atomic.hpp"
// A Symbol is a canonicalized string.
// All Symbols reside in global SymbolTable and are reference counted.
@@ -95,7 +96,7 @@
// TempNewSymbol (passed in as a parameter) so the reference count on its symbol
// will be decremented when it goes out of scope.
-class Symbol : public CHeapObj {
+class Symbol : public ResourceObj {
friend class VMStructs;
friend class SymbolTable;
friend class MoveSymbols;
@@ -111,7 +112,7 @@ class Symbol : public CHeapObj {
};
static int object_size(int length) {
- size_t size = heap_word_size(sizeof(Symbol) + length);
+ size_t size = heap_word_size(sizeof(Symbol) + (length > 0 ? length - 1 : 0));
return align_object_size(size);
}
@@ -120,28 +121,25 @@ class Symbol : public CHeapObj {
_body[index] = value;
}
- Symbol(const u1* name, int length);
- void* operator new(size_t size, int len);
+ Symbol(const u1* name, int length, int refcount);
+ void* operator new(size_t size, int len, TRAPS);
+ void* operator new(size_t size, int len, Arena* arena, TRAPS);
public:
// Low-level access (used with care, since not GC-safe)
const jbyte* base() const { return &_body[0]; }
- int object_size() { return object_size(utf8_length()); }
+ int object_size() { return object_size(utf8_length()); }
// Returns the largest size symbol we can safely hold.
- static int max_length() {
- return max_symbol_length;
- }
+ static int max_length() { return max_symbol_length; }
- int identity_hash() {
- return _identity_hash;
- }
+ int identity_hash() { return _identity_hash; }
// Reference counting. See comments above this class for when to use.
- int refcount() const { return _refcount; }
- void increment_refcount();
- void decrement_refcount();
+ int refcount() const { return _refcount; }
+ inline void increment_refcount();
+ inline void decrement_refcount();
int byte_at(int index) const {
assert(index >=0 && index < _length, "symbol index overflow");
@@ -220,4 +218,26 @@ int Symbol::fast_compare(Symbol* other) const {
return (((uintptr_t)this < (uintptr_t)other) ? -1
: ((uintptr_t)this == (uintptr_t) other) ? 0 : 1);
}
+
+inline void Symbol::increment_refcount() {
+ // Only increment the refcount if positive. If negative either
+ // overflow has occurred or it is a permanent symbol in a read only
+ // shared archive.
+ if (_refcount >= 0) {
+ Atomic::inc(&_refcount);
+ NOT_PRODUCT(Atomic::inc(&_total_count);)
+ }
+}
+
+inline void Symbol::decrement_refcount() {
+ if (_refcount >= 0) {
+ Atomic::dec(&_refcount);
+#ifdef ASSERT
+ if (_refcount < 0) {
+ print();
+ assert(false, "reference count underflow for symbol");
+ }
+#endif
+ }
+}
#endif // SHARE_VM_OOPS_SYMBOL_HPP
diff --git a/hotspot/src/share/vm/oops/typeArrayKlass.cpp b/hotspot/src/share/vm/oops/typeArrayKlass.cpp
index 70aed0ddc6f..5beff5592ea 100644
--- a/hotspot/src/share/vm/oops/typeArrayKlass.cpp
+++ b/hotspot/src/share/vm/oops/typeArrayKlass.cpp
@@ -55,7 +55,7 @@ klassOop typeArrayKlass::create_klass(BasicType type, int scale,
Symbol* sym = NULL;
if (name_str != NULL) {
- sym = SymbolTable::new_symbol(name_str, CHECK_NULL);
+ sym = SymbolTable::new_permanent_symbol(name_str, CHECK_NULL);
}
KlassHandle klassklass (THREAD, Universe::typeArrayKlassKlassObj());
diff --git a/hotspot/src/share/vm/opto/library_call.cpp b/hotspot/src/share/vm/opto/library_call.cpp
index 1a38fb6131b..13c3a4327ce 100644
--- a/hotspot/src/share/vm/opto/library_call.cpp
+++ b/hotspot/src/share/vm/opto/library_call.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -175,7 +175,11 @@ class LibraryCallKit : public GraphKit {
bool inline_unsafe_allocate();
bool inline_unsafe_copyMemory();
bool inline_native_currentThread();
- bool inline_native_time_funcs(bool isNano);
+#ifdef TRACE_HAVE_INTRINSICS
+ bool inline_native_classID();
+ bool inline_native_threadID();
+#endif
+ bool inline_native_time_funcs(address method, const char* funcName);
bool inline_native_isInterrupted();
bool inline_native_Class_query(vmIntrinsics::ID id);
bool inline_native_subtype_check();
@@ -638,10 +642,18 @@ bool LibraryCallKit::try_to_inline() {
case vmIntrinsics::_isInterrupted:
return inline_native_isInterrupted();
+#ifdef TRACE_HAVE_INTRINSICS
+ case vmIntrinsics::_classID:
+ return inline_native_classID();
+ case vmIntrinsics::_threadID:
+ return inline_native_threadID();
+ case vmIntrinsics::_counterTime:
+ return inline_native_time_funcs(CAST_FROM_FN_PTR(address, TRACE_TIME_METHOD), "counterTime");
+#endif
case vmIntrinsics::_currentTimeMillis:
- return inline_native_time_funcs(false);
+ return inline_native_time_funcs(CAST_FROM_FN_PTR(address, os::javaTimeMillis), "currentTimeMillis");
case vmIntrinsics::_nanoTime:
- return inline_native_time_funcs(true);
+ return inline_native_time_funcs(CAST_FROM_FN_PTR(address, os::javaTimeNanos), "nanoTime");
case vmIntrinsics::_allocateInstance:
return inline_unsafe_allocate();
case vmIntrinsics::_copyMemory:
@@ -2840,14 +2852,63 @@ bool LibraryCallKit::inline_unsafe_allocate() {
return true;
}
+#ifdef TRACE_HAVE_INTRINSICS
+/*
+ * oop -> myklass
+ * myklass->trace_id |= USED
+ * return myklass->trace_id & ~0x3
+ */
+bool LibraryCallKit::inline_native_classID() {
+ int nargs = 1 + 1;
+ null_check_receiver(callee()); // check then ignore argument(0)
+ _sp += nargs;
+ Node* cls = do_null_check(argument(1), T_OBJECT);
+ _sp -= nargs;
+ Node* kls = load_klass_from_mirror(cls, false, nargs, NULL, 0);
+ _sp += nargs;
+ kls = do_null_check(kls, T_OBJECT);
+ _sp -= nargs;
+ ByteSize offset = TRACE_ID_OFFSET;
+ Node* insp = basic_plus_adr(kls, in_bytes(offset));
+ Node* tvalue = make_load(NULL, insp, TypeLong::LONG, T_LONG);
+ Node* bits = longcon(~0x03l); // ignore bit 0 & 1
+ Node* andl = _gvn.transform(new (C, 3) AndLNode(tvalue, bits));
+ Node* clsused = longcon(0x01l); // set the class bit
+ Node* orl = _gvn.transform(new (C, 3) OrLNode(tvalue, clsused));
+
+ const TypePtr *adr_type = _gvn.type(insp)->isa_ptr();
+ store_to_memory(control(), insp, orl, T_LONG, adr_type);
+ push_pair(andl);
+ return true;
+}
+
+bool LibraryCallKit::inline_native_threadID() {
+ Node* tls_ptr = NULL;
+ Node* cur_thr = generate_current_thread(tls_ptr);
+ Node* p = basic_plus_adr(top()/*!oop*/, tls_ptr, in_bytes(JavaThread::osthread_offset()));
+ Node* osthread = make_load(NULL, p, TypeRawPtr::NOTNULL, T_ADDRESS);
+ p = basic_plus_adr(top()/*!oop*/, osthread, in_bytes(OSThread::thread_id_offset()));
+
+ Node* threadid = NULL;
+ size_t thread_id_size = OSThread::thread_id_size();
+ if (thread_id_size == (size_t) BytesPerLong) {
+ threadid = ConvL2I(make_load(control(), p, TypeLong::LONG, T_LONG));
+ push(threadid);
+ } else if (thread_id_size == (size_t) BytesPerInt) {
+ threadid = make_load(control(), p, TypeInt::INT, T_INT);
+ push(threadid);
+ } else {
+ ShouldNotReachHere();
+ }
+ return true;
+}
+#endif
+
//------------------------inline_native_time_funcs--------------
// inline code for System.currentTimeMillis() and System.nanoTime()
// these have the same type and signature
-bool LibraryCallKit::inline_native_time_funcs(bool isNano) {
- address funcAddr = isNano ? CAST_FROM_FN_PTR(address, os::javaTimeNanos) :
- CAST_FROM_FN_PTR(address, os::javaTimeMillis);
- const char * funcName = isNano ? "nanoTime" : "currentTimeMillis";
- const TypeFunc *tf = OptoRuntime::current_time_millis_Type();
+bool LibraryCallKit::inline_native_time_funcs(address funcAddr, const char* funcName) {
+ const TypeFunc *tf = OptoRuntime::void_long_Type();
const TypePtr* no_memory_effects = NULL;
Node* time = make_runtime_call(RC_LEAF, tf, funcAddr, funcName, no_memory_effects);
Node* value = _gvn.transform(new (C, 1) ProjNode(time, TypeFunc::Parms+0));
diff --git a/hotspot/src/share/vm/opto/runtime.cpp b/hotspot/src/share/vm/opto/runtime.cpp
index b97f06a024f..b03a3943a0e 100644
--- a/hotspot/src/share/vm/opto/runtime.cpp
+++ b/hotspot/src/share/vm/opto/runtime.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -709,9 +709,9 @@ const TypeFunc* OptoRuntime::Math_DD_D_Type() {
return TypeFunc::make(domain, range);
}
-//-------------- currentTimeMillis
+//-------------- currentTimeMillis, currentTimeNanos, etc
-const TypeFunc* OptoRuntime::current_time_millis_Type() {
+const TypeFunc* OptoRuntime::void_long_Type() {
// create input type (domain)
const Type **fields = TypeTuple::fields(0);
const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+0, fields);
diff --git a/hotspot/src/share/vm/opto/runtime.hpp b/hotspot/src/share/vm/opto/runtime.hpp
index 39702980597..11b5434a54d 100644
--- a/hotspot/src/share/vm/opto/runtime.hpp
+++ b/hotspot/src/share/vm/opto/runtime.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -268,7 +268,7 @@ private:
static const TypeFunc* Math_DD_D_Type(); // mod,pow & friends
static const TypeFunc* modf_Type();
static const TypeFunc* l2f_Type();
- static const TypeFunc* current_time_millis_Type();
+ static const TypeFunc* void_long_Type();
static const TypeFunc* flush_windows_Type();
diff --git a/hotspot/src/share/vm/prims/wbtestmethods/parserTests.cpp b/hotspot/src/share/vm/prims/wbtestmethods/parserTests.cpp
new file mode 100644
index 00000000000..54c8a3173f2
--- /dev/null
+++ b/hotspot/src/share/vm/prims/wbtestmethods/parserTests.cpp
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+
+#include "classfile/symbolTable.hpp"
+
+#include "prims/jni.h"
+#include "prims/whitebox.hpp"
+#include "prims/wbtestmethods/parserTests.hpp"
+#include "runtime/interfaceSupport.hpp"
+
+#include "memory/oopFactory.hpp"
+
+#include "services/diagnosticArgument.hpp"
+#include "services/diagnosticFramework.hpp"
+
+//There's no way of beforeahnd knowing an upper size
+//Of the length of a string representation of
+//the value of an argument.
+#define VALUE_MAXLEN 256
+
+// DiagnosticFramework test utility methods
+
+/*
+ * The DiagnosticArgumentType class contains an enum that says which type
+ * this argument represents. (JLONG, BOOLEAN etc).
+ * This method Returns a char* representation of that enum value.
+ */
+static const char* lookup_diagnosticArgumentEnum(const char* field_name, oop object) {
+ Thread* THREAD = Thread::current();
+ const char* enum_sig = "Lsun/hotspot/parser/DiagnosticCommand$DiagnosticArgumentType;";
+ TempNewSymbol enumSigSymbol = SymbolTable::lookup(enum_sig, (int) strlen(enum_sig), THREAD);
+ int offset = WhiteBox::offset_for_field(field_name, object, enumSigSymbol);
+ oop enumOop = object->obj_field(offset);
+
+ const char* ret = WhiteBox::lookup_jstring("name", enumOop);
+ return ret;
+}
+
+/*
+ * Takes an oop to a DiagnosticArgumentType-instance and
+ * reads the fields from it. Fills an native DCmdParser with
+ * this info.
+ */
+static void fill_in_parser(DCmdParser* parser, oop argument)
+{
+ const char* name = WhiteBox::lookup_jstring("name", argument);
+ const char* desc = WhiteBox::lookup_jstring("desc", argument);
+ const char* default_value = WhiteBox::lookup_jstring("defaultValue", argument);
+ bool mandatory = WhiteBox::lookup_bool("mandatory", argument);
+ const char* type = lookup_diagnosticArgumentEnum("type", argument);
+
+ if (strcmp(type, "STRING") == 0) {
+ DCmdArgument* argument = new DCmdArgument(
+ name, desc,
+ "STRING", mandatory, default_value);
+ parser->add_dcmd_option(argument);
+ } else if (strcmp(type, "NANOTIME") == 0) {
+ DCmdArgument* argument = new DCmdArgument(
+ name, desc,
+ "NANOTIME", mandatory, default_value);
+ parser->add_dcmd_option(argument);
+ } else if (strcmp(type, "JLONG") == 0) {
+ DCmdArgument* argument = new DCmdArgument(
+ name, desc,
+ "JLONG", mandatory, default_value);
+ parser->add_dcmd_option(argument);
+ } else if (strcmp(type, "BOOLEAN") == 0) {
+ DCmdArgument* argument = new DCmdArgument(
+ name, desc,
+ "BOOLEAN", mandatory, default_value);
+ parser->add_dcmd_option(argument);
+ } else if (strcmp(type, "MEMORYSIZE") == 0) {
+ DCmdArgument* argument = new DCmdArgument(
+ name, desc,
+ "MEMORY SIZE", mandatory, default_value);
+ parser->add_dcmd_option(argument);
+ } else if (strcmp(type, "STRINGARRAY") == 0) {
+ DCmdArgument* argument = new DCmdArgument(
+ name, desc,
+ "STRING SET", mandatory);
+ parser->add_dcmd_option(argument);
+ }
+}
+
+/*
+ * Will Fill in a java object array with alternating names of parsed command line options and
+ * the value that has been parsed for it:
+ * { name, value, name, value ... }
+ * This can then be checked from java.
+ */
+WB_ENTRY(jobjectArray, WB_ParseCommandLine(JNIEnv* env, jobject o, jstring j_cmdline, jobjectArray arguments))
+ ResourceMark rm;
+ DCmdParser parser;
+
+ const char* c_cmdline = java_lang_String::as_utf8_string(JNIHandles::resolve(j_cmdline));
+ objArrayOop argumentArray = objArrayOop(JNIHandles::resolve_non_null(arguments));
+
+ int length = argumentArray->length();
+
+ for (int i = 0; i < length; i++) {
+ oop argument_oop = argumentArray->obj_at(i);
+ fill_in_parser(&parser, argument_oop);
+ }
+
+ CmdLine cmdline(c_cmdline, strlen(c_cmdline), true);
+ parser.parse(&cmdline,',',CHECK_NULL);
+
+ klassOop k = SystemDictionary::Object_klass();
+ objArrayOop returnvalue_array = oopFactory::new_objArray(k, parser.num_arguments() * 2, CHECK_NULL);
+
+ GrowableArray*parsedArgNames = parser.argument_name_array();
+
+ for (int i = 0; i < parser.num_arguments(); i++) {
+ oop parsedName = java_lang_String::create_oop_from_str(parsedArgNames->at(i), CHECK_NULL);
+ returnvalue_array->obj_at_put(i*2, parsedName);
+ GenDCmdArgument* arg = parser.lookup_dcmd_option(parsedArgNames->at(i), strlen(parsedArgNames->at(i)));
+ char buf[VALUE_MAXLEN];
+ arg->value_as_str(buf, sizeof(buf));
+ oop parsedValue = java_lang_String::create_oop_from_str(buf, CHECK_NULL);
+ returnvalue_array->obj_at_put(i*2+1, parsedValue);
+ }
+
+ return (jobjectArray) JNIHandles::make_local(returnvalue_array);
+
+WB_END
diff --git a/hotspot/src/share/vm/prims/wbtestmethods/parserTests.hpp b/hotspot/src/share/vm/prims/wbtestmethods/parserTests.hpp
new file mode 100644
index 00000000000..8efdd9db1cc
--- /dev/null
+++ b/hotspot/src/share/vm/prims/wbtestmethods/parserTests.hpp
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#ifndef SHARE_VM_PRIMS_WBTESTMETHODS_PARSERTESTS_H
+#define SHARE_VM_PRIMS_WBTESTMETHODS_PARSERTESTS_H
+
+#include "prims/jni.h"
+#include "prims/whitebox.hpp"
+
+WB_METHOD_DECLARE WB_ParseCommandLine(JNIEnv* env, jobject o, jstring args, jobjectArray arguments);
+
+#endif //SHARE_VM_PRIMS_WBTESTMETHODS_PARSERTESTS_H
diff --git a/hotspot/src/share/vm/prims/whitebox.cpp b/hotspot/src/share/vm/prims/whitebox.cpp
index 86dd7c506cb..eadc7df523f 100644
--- a/hotspot/src/share/vm/prims/whitebox.cpp
+++ b/hotspot/src/share/vm/prims/whitebox.cpp
@@ -24,11 +24,14 @@
#include "precompiled.hpp"
-#include "jni.h"
-
#include "memory/universe.hpp"
#include "oops/oop.inline.hpp"
+
+#include "classfile/symbolTable.hpp"
+
#include "prims/whitebox.hpp"
+#include "prims/wbtestmethods/parserTests.hpp"
+
#include "runtime/interfaceSupport.hpp"
#include "runtime/os.hpp"
#include "utilities/debug.hpp"
@@ -41,13 +44,6 @@
bool WhiteBox::_used = false;
-// Entry macro to transition from JNI to VM state.
-
-#define WB_ENTRY(result_type, header) JNI_ENTRY(result_type, header)
-#define WB_END JNI_END
-
-// Definitions of functions exposed via Whitebox API
-
WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj))
return (jlong)(void*)JNIHandles::resolve(obj);
WB_END
@@ -81,11 +77,63 @@ WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o))
WB_END
#endif // !SERIALGC
+//Some convenience methods to deal with objects from java
+int WhiteBox::offset_for_field(const char* field_name, oop object,
+ Symbol* signature_symbol) {
+ assert(field_name != NULL && strlen(field_name) > 0, "Field name not valid");
+ Thread* THREAD = Thread::current();
+
+ //Get the class of our object
+ klassOop arg_klass = object->klass();
+ //Turn it into an instance-klass
+ instanceKlass* ik = instanceKlass::cast(arg_klass);
+
+ //Create symbols to look for in the class
+ TempNewSymbol name_symbol = SymbolTable::lookup(field_name, (int) strlen(field_name),
+ THREAD);
+
+ //To be filled in with an offset of the field we're looking for
+ fieldDescriptor fd;
+
+ klassOop res = ik->find_field(name_symbol, signature_symbol, &fd);
+ if (res == NULL) {
+ tty->print_cr("Invalid layout of %s at %s", ik->external_name(),
+ name_symbol->as_C_string());
+ fatal("Invalid layout of preloaded class");
+ }
+
+ //fetch the field at the offset we've found
+ int dest_offset = fd.offset();
+
+ return dest_offset;
+}
+
+
+const char* WhiteBox::lookup_jstring(const char* field_name, oop object) {
+ int offset = offset_for_field(field_name, object,
+ vmSymbols::string_signature());
+ oop string = object->obj_field(offset);
+ const char* ret = java_lang_String::as_utf8_string(string);
+ return ret;
+}
+
+bool WhiteBox::lookup_bool(const char* field_name, oop object) {
+ int offset =
+ offset_for_field(field_name, object, vmSymbols::bool_signature());
+ bool ret = (object->bool_field(offset) == JNI_TRUE);
+ return ret;
+}
+
+
#define CC (char*)
static JNINativeMethod methods[] = {
{CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
{CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
+ {CC "parseCommandLine",
+ CC "(Ljava/lang/String;[Lsun/hotspot/parser/DiagnosticCommand;)[Ljava/lang/Object;",
+ (void*) &WB_ParseCommandLine
+ },
#ifndef SERIALGC
{CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
{CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
diff --git a/hotspot/src/share/vm/prims/whitebox.hpp b/hotspot/src/share/vm/prims/whitebox.hpp
index 53adc6874a8..a5dda9b4658 100644
--- a/hotspot/src/share/vm/prims/whitebox.hpp
+++ b/hotspot/src/share/vm/prims/whitebox.hpp
@@ -25,12 +25,29 @@
#ifndef SHARE_VM_PRIMS_WHITEBOX_HPP
#define SHARE_VM_PRIMS_WHITEBOX_HPP
+#include "prims/jni.h"
+
+#include "memory/allocation.hpp"
+#include "oops/oopsHierarchy.hpp"
+
+// Entry macro to transition from JNI to VM state.
+
+#define WB_ENTRY(result_type, header) JNI_ENTRY(result_type, header)
+#define WB_END JNI_END
+#define WB_METHOD_DECLARE extern "C" jobjectArray JNICALL
+
class WhiteBox : public AllStatic {
private:
static bool _used;
public:
static bool used() { return _used; }
static void set_used() { _used = true; }
+ static int offset_for_field(const char* field_name, oop object,
+ Symbol* signature_symbol);
+ static const char* lookup_jstring(const char* field_name, oop object);
+ static bool lookup_bool(const char* field_name, oop object);
};
+
+
#endif // SHARE_VM_PRIMS_WHITEBOX_HPP
diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp
index 5476b7257e4..7ad4f9a042c 100644
--- a/hotspot/src/share/vm/runtime/globals.hpp
+++ b/hotspot/src/share/vm/runtime/globals.hpp
@@ -3807,7 +3807,7 @@ class CommandLineFlags {
product(uintx, SharedReadOnlySize, 10*M, \
"Size of read-only space in permanent generation (in bytes)") \
\
- product(uintx, SharedMiscDataSize, NOT_LP64(4*M) LP64_ONLY(5*M), \
+ product(uintx, SharedMiscDataSize, NOT_LP64(4*M) LP64_ONLY(5*M) NOT_PRODUCT(+1*M), \
"Size of the shared data area adjacent to the heap (in bytes)") \
\
product(uintx, SharedMiscCodeSize, 4*M, \
diff --git a/hotspot/src/share/vm/runtime/osThread.hpp b/hotspot/src/share/vm/runtime/osThread.hpp
index 984bc9b49f1..bb3fd79637b 100644
--- a/hotspot/src/share/vm/runtime/osThread.hpp
+++ b/hotspot/src/share/vm/runtime/osThread.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -98,6 +98,7 @@ class OSThread: public CHeapObj {
// For java intrinsics:
static ByteSize interrupted_offset() { return byte_offset_of(OSThread, _interrupted); }
+ static ByteSize thread_id_offset() { return byte_offset_of(OSThread, _thread_id); }
// Platform dependent stuff
#ifdef TARGET_OS_FAMILY_linux
diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp
index 767668289ce..76865f6ff2c 100644
--- a/hotspot/src/share/vm/runtime/thread.cpp
+++ b/hotspot/src/share/vm/runtime/thread.cpp
@@ -3468,13 +3468,13 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) {
create_vm_init_libraries();
}
+ // Notify JVMTI agents that VM initialization is complete - nop if no agents.
+ JvmtiExport::post_vm_initialized();
+
if (!TRACE_START()) {
vm_exit_during_initialization(Handle(THREAD, PENDING_EXCEPTION));
}
- // Notify JVMTI agents that VM initialization is complete - nop if no agents.
- JvmtiExport::post_vm_initialized();
-
if (CleanChunkPoolAsync) {
Chunk::start_chunk_pool_cleaner_task();
}
diff --git a/hotspot/src/share/vm/runtime/vmStructs.cpp b/hotspot/src/share/vm/runtime/vmStructs.cpp
index 924cde15404..25d3b5b4179 100644
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp
@@ -292,8 +292,6 @@ static inline uint64_t cast_uint64_t(size_t x)
nonstatic_field(instanceKlass, _method_ordering, typeArrayOop) \
nonstatic_field(instanceKlass, _local_interfaces, objArrayOop) \
nonstatic_field(instanceKlass, _transitive_interfaces, objArrayOop) \
- nonstatic_field(instanceKlass, _nof_implementors, int) \
- nonstatic_field(instanceKlass, _implementors[0], klassOop) \
nonstatic_field(instanceKlass, _fields, typeArrayOop) \
nonstatic_field(instanceKlass, _java_fields_count, u2) \
nonstatic_field(instanceKlass, _constants, constantPoolOop) \
@@ -2343,7 +2341,6 @@ static inline uint64_t cast_uint64_t(size_t x)
/* instanceKlass enum */ \
/*************************************/ \
\
- declare_constant(instanceKlass::implementors_limit) \
\
/*************************************/ \
/* FieldInfo FieldOffset enum */ \
diff --git a/hotspot/src/share/vm/runtime/vmThread.cpp b/hotspot/src/share/vm/runtime/vmThread.cpp
index d4fced26dcb..9e421488b26 100644
--- a/hotspot/src/share/vm/runtime/vmThread.cpp
+++ b/hotspot/src/share/vm/runtime/vmThread.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -304,7 +304,7 @@ void VMThread::run() {
os::check_heap();
// Silent verification so as not to pollute normal output,
// unless we really asked for it.
- Universe::verify(true, !(PrintGCDetails || Verbose));
+ Universe::verify(!(PrintGCDetails || Verbose));
}
CompileBroker::set_should_block();
diff --git a/hotspot/src/share/vm/services/diagnosticArgument.cpp b/hotspot/src/share/vm/services/diagnosticArgument.cpp
index a3a6982716a..e2ced389105 100644
--- a/hotspot/src/share/vm/services/diagnosticArgument.cpp
+++ b/hotspot/src/share/vm/services/diagnosticArgument.cpp
@@ -43,6 +43,47 @@ void GenDCmdArgument::read_value(const char* str, size_t len, TRAPS) {
set_is_set(true);
}
+void GenDCmdArgument::to_string(jlong l, char* buf, size_t len) {
+ jio_snprintf(buf, len, INT64_FORMAT, l);
+}
+
+void GenDCmdArgument::to_string(bool b, char* buf, size_t len) {
+ jio_snprintf(buf, len, b ? "true" : "false");
+}
+
+void GenDCmdArgument::to_string(NanoTimeArgument n, char* buf, size_t len) {
+ jio_snprintf(buf, len, INT64_FORMAT, n._nanotime);
+}
+
+void GenDCmdArgument::to_string(MemorySizeArgument m, char* buf, size_t len) {
+ jio_snprintf(buf, len, INT64_FORMAT, m._size);
+}
+
+void GenDCmdArgument::to_string(char* c, char* buf, size_t len) {
+ jio_snprintf(buf, len, "%s", c);
+}
+
+void GenDCmdArgument::to_string(StringArrayArgument* f, char* buf, size_t len) {
+ int length = f->array()->length();
+ size_t written = 0;
+ buf[0] = 0;
+ for (int i = 0; i < length; i++) {
+ char* next_str = f->array()->at(i);
+ size_t next_size = strlen(next_str);
+ //Check if there's room left to write next element
+ if (written + next_size > len) {
+ return;
+ }
+ //Actually write element
+ strcat(buf, next_str);
+ written += next_size;
+ //Check if there's room left for the comma
+ if (i < length-1 && len - written > 0) {
+ strcat(buf, ",");
+ }
+ }
+}
+
template <> void DCmdArgument::parse_value(const char* str,
size_t len, TRAPS) {
if (str == NULL || sscanf(str, INT64_FORMAT, &_value) != 1) {
diff --git a/hotspot/src/share/vm/services/diagnosticArgument.hpp b/hotspot/src/share/vm/services/diagnosticArgument.hpp
index 380f7ebe1e0..8881e99556c 100644
--- a/hotspot/src/share/vm/services/diagnosticArgument.hpp
+++ b/hotspot/src/share/vm/services/diagnosticArgument.hpp
@@ -110,12 +110,20 @@ public:
virtual void init_value(TRAPS) = 0;
virtual void reset(TRAPS) = 0;
virtual void cleanup() = 0;
+ virtual void value_as_str(char* buf, size_t len) = 0;
void set_next(GenDCmdArgument* arg) {
_next = arg;
}
GenDCmdArgument* next() {
return _next;
}
+
+ void to_string(jlong l, char* buf, size_t len);
+ void to_string(bool b, char* buf, size_t len);
+ void to_string(char* c, char* buf, size_t len);
+ void to_string(NanoTimeArgument n, char* buf, size_t len);
+ void to_string(MemorySizeArgument f, char* buf, size_t len);
+ void to_string(StringArrayArgument* s, char* buf, size_t len);
};
template class DCmdArgument: public GenDCmdArgument {
@@ -143,6 +151,7 @@ public:
void parse_value(const char* str, size_t len, TRAPS);
void init_value(TRAPS);
void destroy_value();
+ void value_as_str(char *buf, size_t len) { return to_string(_value, buf, len);}
};
#endif /* SHARE_VM_SERVICES_DIAGNOSTICARGUMENT_HPP */
diff --git a/hotspot/src/share/vm/services/gcNotifier.cpp b/hotspot/src/share/vm/services/gcNotifier.cpp
index 1670242019f..c43dadead0b 100644
--- a/hotspot/src/share/vm/services/gcNotifier.cpp
+++ b/hotspot/src/share/vm/services/gcNotifier.cpp
@@ -163,8 +163,8 @@ static Handle createGcInfo(GCMemoryManager *gcManager, GCStatInfo *gcStatInfo,TR
constructor_args.push_oop(gcInfo_instance);
constructor_args.push_oop(getGcInfoBuilder(gcManager,THREAD));
constructor_args.push_long(gcStatInfo->gc_index());
- constructor_args.push_long(gcStatInfo->start_time());
- constructor_args.push_long(gcStatInfo->end_time());
+ constructor_args.push_long(Management::ticks_to_ms(gcStatInfo->start_time()));
+ constructor_args.push_long(Management::ticks_to_ms(gcStatInfo->end_time()));
constructor_args.push_oop(usage_before_gc_ah);
constructor_args.push_oop(usage_after_gc_ah);
constructor_args.push_oop(extra_array);
diff --git a/hotspot/src/share/vm/trace/traceMacros.hpp b/hotspot/src/share/vm/trace/traceMacros.hpp
index 221f4d0f889..44103192083 100644
--- a/hotspot/src/share/vm/trace/traceMacros.hpp
+++ b/hotspot/src/share/vm/trace/traceMacros.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -43,5 +43,9 @@
#define TRACE_SET_KLASS_TRACE_ID(x1, x2) do { } while (0)
#define TRACE_DEFINE_KLASS_METHODS typedef int ___IGNORED_hs_trace_type1
#define TRACE_DEFINE_KLASS_TRACE_ID typedef int ___IGNORED_hs_trace_type2
+#define TRACE_DEFINE_OFFSET typedef int ___IGNORED_hs_trace_type3
+#define TRACE_ID_OFFSET in_ByteSize(0); ShouldNotReachHere()
+#define TRACE_TEMPLATES(template)
+#define TRACE_INTRINSICS(do_intrinsic, do_class, do_name, do_signature, do_alias)
#endif
diff --git a/hotspot/src/share/vm/utilities/bitMap.cpp b/hotspot/src/share/vm/utilities/bitMap.cpp
index 17231d35517..3141bc0de34 100644
--- a/hotspot/src/share/vm/utilities/bitMap.cpp
+++ b/hotspot/src/share/vm/utilities/bitMap.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -179,64 +179,6 @@ void BitMap::clear_large_range(idx_t beg, idx_t end) {
clear_range_within_word(bit_index(end_full_word), end);
}
-void BitMap::mostly_disjoint_range_union(BitMap* from_bitmap,
- idx_t from_start_index,
- idx_t to_start_index,
- size_t word_num) {
- // Ensure that the parameters are correct.
- // These shouldn't be that expensive to check, hence I left them as
- // guarantees.
- guarantee(from_bitmap->bit_in_word(from_start_index) == 0,
- "it should be aligned on a word boundary");
- guarantee(bit_in_word(to_start_index) == 0,
- "it should be aligned on a word boundary");
- guarantee(word_num >= 2, "word_num should be at least 2");
-
- intptr_t* from = (intptr_t*) from_bitmap->word_addr(from_start_index);
- intptr_t* to = (intptr_t*) word_addr(to_start_index);
-
- if (*from != 0) {
- // if it's 0, then there's no point in doing the CAS
- while (true) {
- intptr_t old_value = *to;
- intptr_t new_value = old_value | *from;
- intptr_t res = Atomic::cmpxchg_ptr(new_value, to, old_value);
- if (res == old_value) break;
- }
- }
- ++from;
- ++to;
-
- for (size_t i = 0; i < word_num - 2; ++i) {
- if (*from != 0) {
- // if it's 0, then there's no point in doing the CAS
- assert(*to == 0, "nobody else should be writing here");
- intptr_t new_value = *from;
- *to = new_value;
- }
-
- ++from;
- ++to;
- }
-
- if (*from != 0) {
- // if it's 0, then there's no point in doing the CAS
- while (true) {
- intptr_t old_value = *to;
- intptr_t new_value = old_value | *from;
- intptr_t res = Atomic::cmpxchg_ptr(new_value, to, old_value);
- if (res == old_value) break;
- }
- }
-
- // the -1 is because we didn't advance them after the final CAS
- assert(from ==
- (intptr_t*) from_bitmap->word_addr(from_start_index) + word_num - 1,
- "invariant");
- assert(to == (intptr_t*) word_addr(to_start_index) + word_num - 1,
- "invariant");
-}
-
void BitMap::at_put(idx_t offset, bool value) {
if (value) {
set_bit(offset);
diff --git a/hotspot/src/share/vm/utilities/bitMap.hpp b/hotspot/src/share/vm/utilities/bitMap.hpp
index 75778771103..2c0975f6728 100644
--- a/hotspot/src/share/vm/utilities/bitMap.hpp
+++ b/hotspot/src/share/vm/utilities/bitMap.hpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -192,31 +192,6 @@ class BitMap VALUE_OBJ_CLASS_SPEC {
void par_set_range(idx_t beg, idx_t end, RangeSizeHint hint);
void par_clear_range (idx_t beg, idx_t end, RangeSizeHint hint);
- // It performs the union operation between subsets of equal length
- // of two bitmaps (the target bitmap of the method and the
- // from_bitmap) and stores the result to the target bitmap. The
- // from_start_index represents the first bit index of the subrange
- // of the from_bitmap. The to_start_index is the equivalent of the
- // target bitmap. Both indexes should be word-aligned, i.e. they
- // should correspond to the first bit on a bitmap word (it's up to
- // the caller to ensure this; the method does check it). The length
- // of the subset is specified with word_num and it is in number of
- // bitmap words. The caller should ensure that this is at least 2
- // (smaller ranges are not support to save extra checks). Again,
- // this is checked in the method.
- //
- // Atomicity concerns: it is assumed that any contention on the
- // target bitmap with other threads will happen on the first and
- // last words; the ones in between will be "owned" exclusively by
- // the calling thread and, in fact, they will already be 0. So, the
- // method performs a CAS on the first word, copies the next
- // word_num-2 words, and finally performs a CAS on the last word.
- void mostly_disjoint_range_union(BitMap* from_bitmap,
- idx_t from_start_index,
- idx_t to_start_index,
- size_t word_num);
-
-
// Clearing
void clear_large();
inline void clear();
diff --git a/hotspot/src/share/vm/utilities/vmError.cpp b/hotspot/src/share/vm/utilities/vmError.cpp
index 3c6e1ca32a7..e450676fa7a 100644
--- a/hotspot/src/share/vm/utilities/vmError.cpp
+++ b/hotspot/src/share/vm/utilities/vmError.cpp
@@ -685,6 +685,12 @@ void VMError::report(outputStream* st) {
// extended (i.e., more detailed) version.
Universe::print_on(st, true /* extended */);
st->cr();
+
+ Universe::heap()->barrier_set()->print_on(st);
+ st->cr();
+
+ st->print_cr("Polling page: " INTPTR_FORMAT, os::get_polling_page());
+ st->cr();
}
STEP(195, "(printing code cache information)" )
diff --git a/hotspot/test/runtime/7158988/FieldMonitor.java b/hotspot/test/runtime/7158988/FieldMonitor.java
new file mode 100644
index 00000000000..584d39d20ca
--- /dev/null
+++ b/hotspot/test/runtime/7158988/FieldMonitor.java
@@ -0,0 +1,249 @@
+/*
+ * Copyright 2012 SAP AG. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test FieldMonitor.java
+ * @bug 7158988
+ * @summary verify jvm does not crash while debugging
+ * @run shell TestFieldMonitor.sh
+ * @author axel.siebenborn@sap.com
+ */
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import com.sun.jdi.Bootstrap;
+import com.sun.jdi.Field;
+import com.sun.jdi.ReferenceType;
+import com.sun.jdi.VirtualMachine;
+import com.sun.jdi.connect.Connector;
+import com.sun.jdi.connect.IllegalConnectorArgumentsException;
+import com.sun.jdi.connect.LaunchingConnector;
+import com.sun.jdi.connect.VMStartException;
+import com.sun.jdi.event.ClassPrepareEvent;
+import com.sun.jdi.event.Event;
+import com.sun.jdi.event.EventQueue;
+import com.sun.jdi.event.EventSet;
+import com.sun.jdi.event.ModificationWatchpointEvent;
+import com.sun.jdi.event.VMDeathEvent;
+import com.sun.jdi.event.VMDisconnectEvent;
+import com.sun.jdi.request.ClassPrepareRequest;
+import com.sun.jdi.request.EventRequest;
+import com.sun.jdi.request.EventRequestManager;
+import com.sun.jdi.request.ModificationWatchpointRequest;
+
+public class FieldMonitor {
+
+ public static final String CLASS_NAME = "TestPostFieldModification";
+ public static final String FIELD_NAME = "value";
+ public static final String ARGUMENTS = "-Xshare:off -XX:+PrintGC";
+
+ public static void main(String[] args)
+ throws IOException, InterruptedException {
+
+ StringBuffer sb = new StringBuffer();
+
+ for (int i=0; i < args.length; i++) {
+ sb.append(' ');
+ sb.append(args[i]);
+ }
+ //VirtualMachine vm = launchTarget(sb.toString());
+ VirtualMachine vm = launchTarget(CLASS_NAME);
+
+ System.out.println("Vm launched");
+ // set watch field on already loaded classes
+ List referenceTypes = vm
+ .classesByName(CLASS_NAME);
+ for (ReferenceType refType : referenceTypes) {
+ addFieldWatch(vm, refType);
+ }
+ // watch for loaded classes
+ addClassWatch(vm);
+
+ // process events
+ EventQueue eventQueue = vm.eventQueue();
+ // resume the vm
+
+ Process process = vm.process();
+
+
+ // Copy target's output and error to our output and error.
+ Thread outThread = new StreamRedirectThread("out reader", process.getInputStream());
+ Thread errThread = new StreamRedirectThread("error reader", process.getErrorStream());
+
+ errThread.start();
+ outThread.start();
+
+
+ vm.resume();
+ boolean connected = true;
+ while (connected) {
+ EventSet eventSet = eventQueue.remove();
+ for (Event event : eventSet) {
+ if (event instanceof VMDeathEvent
+ || event instanceof VMDisconnectEvent) {
+ // exit
+ connected = false;
+ } else if (event instanceof ClassPrepareEvent) {
+ // watch field on loaded class
+ System.out.println("ClassPrepareEvent");
+ ClassPrepareEvent classPrepEvent = (ClassPrepareEvent) event;
+ ReferenceType refType = classPrepEvent
+ .referenceType();
+ addFieldWatch(vm, refType);
+ } else if (event instanceof ModificationWatchpointEvent) {
+ System.out.println("sleep for 500 ms");
+ Thread.sleep(500);
+ System.out.println("resume...");
+
+ ModificationWatchpointEvent modEvent = (ModificationWatchpointEvent) event;
+ System.out.println("old="
+ + modEvent.valueCurrent());
+ System.out.println("new=" + modEvent.valueToBe());
+ System.out.println();
+ }
+ }
+ eventSet.resume();
+ }
+ // Shutdown begins when event thread terminates
+ try {
+ errThread.join(); // Make sure output is forwarded
+ outThread.join();
+ } catch (InterruptedException exc) {
+ // we don't interrupt
+ }
+ }
+
+ /**
+ * Find a com.sun.jdi.CommandLineLaunch connector
+ */
+ static LaunchingConnector findLaunchingConnector() {
+ List connectors = Bootstrap.virtualMachineManager().allConnectors();
+ Iterator iter = connectors.iterator();
+ while (iter.hasNext()) {
+ Connector connector = iter.next();
+ if (connector.name().equals("com.sun.jdi.CommandLineLaunch")) {
+ return (LaunchingConnector)connector;
+ }
+ }
+ throw new Error("No launching connector");
+ }
+ /**
+ * Return the launching connector's arguments.
+ */
+ static Map connectorArguments(LaunchingConnector connector, String mainArgs) {
+ Map arguments = connector.defaultArguments();
+ for (String key : arguments.keySet()) {
+ System.out.println(key);
+ }
+
+ Connector.Argument mainArg = (Connector.Argument)arguments.get("main");
+ if (mainArg == null) {
+ throw new Error("Bad launching connector");
+ }
+ mainArg.setValue(mainArgs);
+
+ Connector.Argument optionsArg = (Connector.Argument)arguments.get("options");
+ if (optionsArg == null) {
+ throw new Error("Bad launching connector");
+ }
+ optionsArg.setValue(ARGUMENTS);
+ return arguments;
+ }
+
+ static VirtualMachine launchTarget(String mainArgs) {
+ LaunchingConnector connector = findLaunchingConnector();
+ Map arguments = connectorArguments(connector, mainArgs);
+ try {
+ return (VirtualMachine) connector.launch(arguments);
+ } catch (IOException exc) {
+ throw new Error("Unable to launch target VM: " + exc);
+ } catch (IllegalConnectorArgumentsException exc) {
+ throw new Error("Internal error: " + exc);
+ } catch (VMStartException exc) {
+ throw new Error("Target VM failed to initialize: " +
+ exc.getMessage());
+ }
+}
+
+
+ private static void addClassWatch(VirtualMachine vm) {
+ EventRequestManager erm = vm.eventRequestManager();
+ ClassPrepareRequest classPrepareRequest = erm
+ .createClassPrepareRequest();
+ classPrepareRequest.addClassFilter(CLASS_NAME);
+ classPrepareRequest.setEnabled(true);
+ }
+
+
+ private static void addFieldWatch(VirtualMachine vm,
+ ReferenceType refType) {
+ EventRequestManager erm = vm.eventRequestManager();
+ Field field = refType.fieldByName(FIELD_NAME);
+ ModificationWatchpointRequest modificationWatchpointRequest = erm
+ .createModificationWatchpointRequest(field);
+ modificationWatchpointRequest.setSuspendPolicy(EventRequest.SUSPEND_EVENT_THREAD);
+ modificationWatchpointRequest.setEnabled(true);
+ }
+}
+
+class StreamRedirectThread extends Thread {
+
+ private final BufferedReader in;
+
+ private static final int BUFFER_SIZE = 2048;
+
+ /**
+ * Set up for copy.
+ * @param name Name of the thread
+ * @param in Stream to copy from
+ * @param out Stream to copy to
+ */
+ StreamRedirectThread(String name, InputStream in) {
+ super(name);
+ this.in = new BufferedReader(new InputStreamReader(in));
+ }
+
+ /**
+ * Copy.
+ */
+ public void run() {
+ try {
+ String line;
+ while ((line = in.readLine ()) != null) {
+ System.out.println ("testvm: " + line);
+ }
+ System.out.flush();
+ } catch(IOException exc) {
+ System.err.println("Child I/O Transfer - " + exc);
+ }
+ }
+}
diff --git a/hotspot/test/runtime/7158988/TestFieldMonitor.sh b/hotspot/test/runtime/7158988/TestFieldMonitor.sh
new file mode 100644
index 00000000000..8715bd546d8
--- /dev/null
+++ b/hotspot/test/runtime/7158988/TestFieldMonitor.sh
@@ -0,0 +1,94 @@
+#!/bin/sh
+
+if [ "${TESTSRC}" = "" ]
+then TESTSRC=.
+fi
+
+if [ "${TESTJAVA}" = "" ]
+then
+ PARENT=`dirname \`which java\``
+ TESTJAVA=`dirname ${PARENT}`
+ echo "TESTJAVA not set, selecting " ${TESTJAVA}
+ echo "If this is incorrect, try setting the variable manually."
+fi
+
+if [ "${TESTCLASSES}" = "" ]
+then
+ echo "TESTCLASSES not set. Test cannot execute. Failed."
+ exit 1
+fi
+
+BIT_FLAG=""
+
+# set platform-dependent variables
+OS=`uname -s`
+case "$OS" in
+ SunOS | Linux )
+ NULL=/dev/null
+ PS=":"
+ FS="/"
+ ## for solaris, linux it's HOME
+ FILE_LOCATION=$HOME
+ if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" -a `uname -p`='sparc' ]
+ then
+ BIT_FLAG="-d64"
+ fi
+ ;;
+ Windows_95 | Windows_98 | Windows_ME )
+ NULL=NUL
+ PS=";"
+ FS="\\"
+ echo "Test skipped, only for WinNT"
+ exit 0
+ ;;
+ Windows_NT )
+ NULL=NUL
+ PS=";"
+ FS="\\"
+ ;;
+ * )
+ echo "Unrecognized system!"
+ exit 1;
+ ;;
+esac
+
+#CLASSPATH=.${PS}${TESTCLASSES} ; export CLASSPATH
+
+cp ${TESTSRC}${FS}*.java .
+
+${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -fullversion
+
+${TESTJAVA}${FS}bin${FS}javac -classpath .${PS}$TESTJAVA${FS}lib${FS}tools.jar *.java
+
+${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -classpath .${PS}$TESTJAVA${FS}lib${FS}tools.jar FieldMonitor > test.out 2>&1 &
+
+P_PID=$!
+
+sleep 60
+STATUS=0
+
+case "$OS" in
+ SunOS | Linux )
+ ps -ef | grep $P_PID | grep -v grep > ${NULL}
+ if [ $? = 0 ]; then
+ kill -9 $P_PID
+ STATUS=1
+ fi
+ ;;
+ * )
+ ps | grep -i "FieldMonitor" | grep -v grep > ${NULL}
+ if [ $? = 0 ]; then
+ C_PID=`ps | grep -i "FieldMonitor" | awk '{print $1}'`
+ kill -s 9 $C_PID
+ STATUS=1
+ fi
+ ;;
+esac
+
+grep "A fatal error has been detected" test.out > ${NULL}
+if [ $? = 0 ]; then
+ cat test.out
+ STATUS=1
+fi
+
+exit $STATUS
diff --git a/hotspot/test/runtime/7158988/TestPostFieldModification.java b/hotspot/test/runtime/7158988/TestPostFieldModification.java
new file mode 100644
index 00000000000..d730003b267
--- /dev/null
+++ b/hotspot/test/runtime/7158988/TestPostFieldModification.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2012 SAP AG. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+public class TestPostFieldModification {
+
+ public String value; // watch modification of value
+
+ public static void main(String[] args){
+
+ System.out.println("Start threads");
+ // this thread modifies the field 'value'
+ new Thread() {
+ TestPostFieldModification test = new TestPostFieldModification();
+ public void run() {
+ test.value="test";
+ for(int i = 0; i < 10; i++) {
+ test.value += new String("_test");
+ }
+ }
+ }.start();
+
+ // this thread is used to trigger a gc
+ Thread d = new Thread() {
+ public void run() {
+ while(true) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+
+ }
+ System.gc();
+ }
+ }
+ };
+ d.setDaemon(true);
+ d.start();
+ }
+}
diff --git a/hotspot/test/serviceability/ParserTest.java b/hotspot/test/serviceability/ParserTest.java
new file mode 100644
index 00000000000..b031b4de017
--- /dev/null
+++ b/hotspot/test/serviceability/ParserTest.java
@@ -0,0 +1,152 @@
+/*
+ * @test ParserTest
+ * @summary verify that whitebox functions can be linked and executed
+ * @run compile -J-XX:+UnlockDiagnosticVMOptions -J-XX:+WhiteBoxAPI ParserTest.java
+ * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI ParserTest
+ */
+
+import java.math.BigInteger;
+
+import sun.hotspot.parser.DiagnosticCommand;
+import sun.hotspot.parser.DiagnosticCommand.DiagnosticArgumentType;
+import sun.hotspot.WhiteBox;
+
+public class ParserTest {
+ WhiteBox wb;
+
+ public ParserTest() throws Exception {
+ wb = WhiteBox.getWhiteBox();
+
+ testNanoTime();
+ testJLong();
+ testBool();
+ testMemorySize();
+ }
+
+ public static void main(String... args) throws Exception {
+ new ParserTest();
+ }
+
+ public void testNanoTime() throws Exception {
+ String name = "name";
+ DiagnosticCommand arg = new DiagnosticCommand(name,
+ "desc", DiagnosticArgumentType.NANOTIME,
+ false, "0");
+ DiagnosticCommand[] args = {arg};
+
+ BigInteger bi = new BigInteger("7");
+ //These should work
+ parse(name, bi.toString(), name + "=7ns", args);
+
+ bi = bi.multiply(BigInteger.valueOf(1000));
+ parse(name, bi.toString(), name + "=7us", args);
+
+ bi = bi.multiply(BigInteger.valueOf(1000));
+ parse(name, bi.toString(), name + "=7ms", args);
+
+ bi = bi.multiply(BigInteger.valueOf(1000));
+ parse(name, bi.toString(), name + "=7s", args);
+
+ bi = bi.multiply(BigInteger.valueOf(60));
+ parse(name, bi.toString() , name + "=7m", args);
+
+ bi = bi.multiply(BigInteger.valueOf(60));
+ parse(name, bi.toString() , name + "=7h", args);
+
+ bi = bi.multiply(BigInteger.valueOf(24));
+ parse(name, bi.toString() , name + "=7d", args);
+
+ parse(name, "0", name + "=0", args);
+
+ shouldFail(name + "=7xs", args);
+ shouldFail(name + "=7mms", args);
+ shouldFail(name + "=7f", args);
+ //Currently, only value 0 is allowed without unit
+ shouldFail(name + "=7", args);
+ }
+
+ public void testJLong() throws Exception {
+ String name = "name";
+ DiagnosticCommand arg = new DiagnosticCommand(name,
+ "desc", DiagnosticArgumentType.JLONG,
+ false, "0");
+ DiagnosticCommand[] args = {arg};
+
+ wb.parseCommandLine(name + "=10", args);
+ parse(name, "10", name + "=10", args);
+ parse(name, "-5", name + "=-5", args);
+
+ //shouldFail(name + "=12m", args); <-- should fail, doesn't
+ }
+
+ public void testBool() throws Exception {
+ String name = "name";
+ DiagnosticCommand arg = new DiagnosticCommand(name,
+ "desc", DiagnosticArgumentType.BOOLEAN,
+ false, "false");
+ DiagnosticCommand[] args = {arg};
+
+ parse(name, "true", name + "=true", args);
+ parse(name, "false", name + "=false", args);
+ parse(name, "true", name, args);
+
+ //Empty commandline to parse, tests default value
+ //of the parameter "name"
+ parse(name, "false", "", args);
+ }
+
+ public void testMemorySize() throws Exception {
+ String name = "name";
+ String defaultValue = "1024";
+ DiagnosticCommand arg = new DiagnosticCommand(name,
+ "desc", DiagnosticArgumentType.MEMORYSIZE,
+ false, defaultValue);
+ DiagnosticCommand[] args = {arg};
+
+ BigInteger bi = new BigInteger("7");
+ parse(name, bi.toString(), name + "=7b", args);
+
+ bi = bi.multiply(BigInteger.valueOf(1024));
+ parse(name, bi.toString(), name + "=7k", args);
+
+ bi = bi.multiply(BigInteger.valueOf(1024));
+ parse(name, bi.toString(), name + "=7m", args);
+
+ bi = bi.multiply(BigInteger.valueOf(1024));
+ parse(name, bi.toString(), name + "=7g", args);
+ parse(name, defaultValue, "", args);
+
+ //shouldFail(name + "=7gg", args); <---- should fail, doesn't
+ //shouldFail(name + "=7t", args); <----- should fail, doesn't
+ }
+
+ public void parse(String searchName, String expectedValue,
+ String cmdLine, DiagnosticCommand[] argumentTypes) throws Exception {
+ //parseCommandLine will return an object array that looks like
+ //{, ... }
+ Object[] res = wb.parseCommandLine(cmdLine, argumentTypes);
+ for (int i = 0; i < res.length-1; i+=2) {
+ String parsedName = (String) res[i];
+ if (searchName.equals(parsedName)) {
+ String parsedValue = (String) res[i+1];
+ if (expectedValue.equals(parsedValue)) {
+ return;
+ } else {
+ throw new Exception("Parsing of cmdline '" + cmdLine + "' failed!\n"
+ + searchName + " parsed as " + parsedValue
+ + "! Expected: " + expectedValue);
+ }
+ }
+ }
+ throw new Exception(searchName + " not found as a parsed Argument!");
+ }
+
+ private void shouldFail(String argument, DiagnosticCommand[] argumentTypes) throws Exception {
+ try {
+ wb.parseCommandLine(argument, argumentTypes);
+ throw new Exception("Parser accepted argument: " + argument);
+ } catch (IllegalArgumentException e) {
+ //expected
+ }
+ }
+}
diff --git a/jaxp/.hgtags b/jaxp/.hgtags
index abdf8c16890..5bacb63c648 100644
--- a/jaxp/.hgtags
+++ b/jaxp/.hgtags
@@ -154,3 +154,7 @@ f3244c1f04864d35c41fa8d13669faf4f65b81e2 jdk8-b28
3be30c25a8255803652b5c466336055d36e2ba21 jdk8-b30
94aabe098916440ae7911866311c9617d8481a36 jdk8-b31
60960fbc75df8be4c1a2504aa69fc1428cc94f93 jdk8-b32
+9bcab2b8b8ea578e594916a3d3df6dbec7984bcb jdk8-b33
+8b91a897a04486cf901af0de7f684a3eb31f121f jdk8-b34
+e187f3ede64965dc2979df9a211107cd3d38eacb jdk8-b35
+cfd288fe1d3e2b700838342e70d71d44ac991af5 jdk8-b36
diff --git a/jaxp/build.xml b/jaxp/build.xml
index 437ad0f74df..8e03380839b 100644
--- a/jaxp/build.xml
+++ b/jaxp/build.xml
@@ -44,7 +44,7 @@
-
+
diff --git a/jaxp/make/scripts/update_src.sh b/jaxp/make/scripts/update_src.sh
index b1ff207b94c..edd43153f08 100644
--- a/jaxp/make/scripts/update_src.sh
+++ b/jaxp/make/scripts/update_src.sh
@@ -40,7 +40,7 @@ mkdir -p ${srcroot}
drops_dir="/java/devtools/share/jdk8-drops"
url1="http://download.java.net/jaxp/1.4.5"
bundle1="jaxp145_01.zip"
-srcdir1="${srcroot}/share/classes"
+srcdir1="${srcroot}"
# Function to get a bundle and explode it and normalize the source files.
getBundle() # drops_dir url bundlename bundledestdir srcrootdir
diff --git a/jaxp/makefiles/Makefile b/jaxp/makefiles/Makefile
new file mode 100644
index 00000000000..6d258386a08
--- /dev/null
+++ b/jaxp/makefiles/Makefile
@@ -0,0 +1,62 @@
+#
+# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+-include $(SPEC)
+include MakeBase.gmk
+include JavaCompilation.gmk
+
+default: all
+
+JAVAC_JARS ?= "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \
+ -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar
+DISABLE_JAXP_WARNINGS:=-Xlint:all,-deprecation,-unchecked,-rawtypes,-cast,-serial,-dep-ann,-static,-fallthrough
+
+# The generate new bytecode uses the new compiler for to generate bytecode
+# for the new jdk that is being built. The code compiled by this setup
+# cannot necessarily be run with the boot jdk.
+$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE_DEBUG,\
+ JVM:=$(JAVA),\
+ JAVAC:=$(JAVAC_JARS),\
+ FLAGS:=-Xprefer:source -XDignore.symbol.file=true $(DISABLE_JAXP_WARNINGS) -g,\
+ SERVER_DIR:=$(JAVAC_SERVERS),\
+ SERVER_JVM:=$(SERVER_JAVA),\
+ MODE:=$(JAVAC_USE_MODE),\
+ USE_DEPS:=$(JAVAC_USE_DEPS)))
+
+$(eval $(call SetupJavaCompilation,BUILD_JAXP,\
+ SETUP:=GENERATE_NEWBYTECODE_DEBUG,\
+ SRC:=$(JAXP_TOPDIR)/src,\
+ CLEAN:=.properties,\
+ BIN:=$(JAXP_OUTPUTDIR)/classes,\
+ SRCZIP:=$(JAXP_OUTPUTDIR)/dist/lib/src.zip))
+
+$(eval $(call SetupArchive,ARCHIVE_JAXP,$(BUILD_JAXP),\
+ SRCS:=$(JAXP_OUTPUTDIR)/classes,\
+ SUFFIXES:=.class .properties,\
+ JAR:=$(JAXP_OUTPUTDIR)/dist/lib/classes.jar))
+
+all: $(JAXP_OUTPUTDIR)/dist/lib/classes.jar $(JAXP_OUTPUTDIR)/dist/lib/src.zip
+
+.PHONY: default all
diff --git a/jaxp/src/share/classes/com/sun/java_cup/internal/runtime/Scanner.java b/jaxp/src/com/sun/java_cup/internal/runtime/Scanner.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/java_cup/internal/runtime/Scanner.java
rename to jaxp/src/com/sun/java_cup/internal/runtime/Scanner.java
diff --git a/jaxp/src/share/classes/com/sun/java_cup/internal/runtime/Symbol.java b/jaxp/src/com/sun/java_cup/internal/runtime/Symbol.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/java_cup/internal/runtime/Symbol.java
rename to jaxp/src/com/sun/java_cup/internal/runtime/Symbol.java
diff --git a/jaxp/src/share/classes/com/sun/java_cup/internal/runtime/lr_parser.java b/jaxp/src/com/sun/java_cup/internal/runtime/lr_parser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/java_cup/internal/runtime/lr_parser.java
rename to jaxp/src/com/sun/java_cup/internal/runtime/lr_parser.java
diff --git a/jaxp/src/share/classes/com/sun/java_cup/internal/runtime/virtual_parse_stack.java b/jaxp/src/com/sun/java_cup/internal/runtime/virtual_parse_stack.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/java_cup/internal/runtime/virtual_parse_stack.java
rename to jaxp/src/com/sun/java_cup/internal/runtime/virtual_parse_stack.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/Constants.java b/jaxp/src/com/sun/org/apache/bcel/internal/Constants.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/Constants.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/Constants.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/ExceptionConstants.java b/jaxp/src/com/sun/org/apache/bcel/internal/ExceptionConstants.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/ExceptionConstants.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/ExceptionConstants.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/Repository.java b/jaxp/src/com/sun/org/apache/bcel/internal/Repository.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/Repository.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/Repository.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/AccessFlags.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/AccessFlags.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/AccessFlags.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/AccessFlags.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Attribute.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Attribute.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Attribute.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Attribute.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/AttributeReader.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/AttributeReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/AttributeReader.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/AttributeReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ClassFormatException.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ClassFormatException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ClassFormatException.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ClassFormatException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ClassParser.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ClassParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ClassParser.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ClassParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Code.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Code.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Code.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Code.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/CodeException.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/CodeException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/CodeException.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/CodeException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Constant.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Constant.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Constant.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Constant.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantCP.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantCP.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantCP.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantCP.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantClass.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantClass.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantClass.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantClass.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantDouble.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantDouble.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantDouble.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantDouble.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantFieldref.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantFieldref.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantFieldref.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantFieldref.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantFloat.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantFloat.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantFloat.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantFloat.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInteger.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantInteger.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInteger.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantInteger.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInterfaceMethodref.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantInterfaceMethodref.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantInterfaceMethodref.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantInterfaceMethodref.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantLong.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantLong.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantLong.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantLong.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodref.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantMethodref.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantMethodref.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantMethodref.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantNameAndType.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantNameAndType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantNameAndType.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantNameAndType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantObject.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantObject.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantObject.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantObject.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantPool.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantPool.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantString.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantString.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantString.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantString.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantUtf8.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantUtf8.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantUtf8.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantUtf8.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantValue.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantValue.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantValue.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantValue.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Deprecated.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Deprecated.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Deprecated.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Deprecated.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/DescendingVisitor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/EmptyVisitor.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/EmptyVisitor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/EmptyVisitor.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/EmptyVisitor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ExceptionTable.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/ExceptionTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/ExceptionTable.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/ExceptionTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Field.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Field.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Field.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Field.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/FieldOrMethod.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/FieldOrMethod.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/FieldOrMethod.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/FieldOrMethod.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/InnerClass.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/InnerClass.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/InnerClass.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/InnerClass.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/InnerClasses.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/InnerClasses.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/InnerClasses.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/InnerClasses.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/JavaClass.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/JavaClass.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/JavaClass.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/JavaClass.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/LineNumber.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/LineNumber.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/LineNumber.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/LineNumber.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/LineNumberTable.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/LineNumberTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/LineNumberTable.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/LineNumberTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariable.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/LocalVariable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariable.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/LocalVariable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariableTable.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/LocalVariableTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/LocalVariableTable.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/LocalVariableTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Method.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Method.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Method.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Method.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Node.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Node.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Node.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Node.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/PMGClass.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/PMGClass.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/PMGClass.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/PMGClass.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Signature.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Signature.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Signature.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Signature.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/SourceFile.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/SourceFile.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/SourceFile.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/SourceFile.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMap.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/StackMap.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMap.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/StackMap.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMapEntry.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/StackMapEntry.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMapEntry.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/StackMapEntry.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMapType.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/StackMapType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/StackMapType.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/StackMapType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Synthetic.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Synthetic.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Synthetic.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Synthetic.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Unknown.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Unknown.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Unknown.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Unknown.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Utility.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Utility.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Utility.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Utility.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Visitor.java b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/Visitor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/Visitor.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/Visitor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/package.html b/jaxp/src/com/sun/org/apache/bcel/internal/classfile/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/classfile/package.html
rename to jaxp/src/com/sun/org/apache/bcel/internal/classfile/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/AALOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/AALOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/AALOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/AALOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/AASTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/AASTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/AASTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/AASTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ACONST_NULL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ACONST_NULL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ACONST_NULL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ACONST_NULL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ALOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ALOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ALOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ALOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ANEWARRAY.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ANEWARRAY.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ANEWARRAY.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ANEWARRAY.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ARETURN.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ARETURN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ARETURN.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ARETURN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ARRAYLENGTH.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ARRAYLENGTH.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ARRAYLENGTH.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ARRAYLENGTH.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ASTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ASTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ASTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ASTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ATHROW.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ATHROW.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ATHROW.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ATHROW.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/AllocationInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/AllocationInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/AllocationInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/AllocationInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ArithmeticInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ArithmeticInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ArithmeticInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ArithmeticInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ArrayInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ArrayInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ArrayInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ArrayInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ArrayType.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ArrayType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ArrayType.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ArrayType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BALOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/BALOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BALOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/BALOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BASTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/BASTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BASTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/BASTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BIPUSH.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/BIPUSH.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BIPUSH.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/BIPUSH.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BREAKPOINT.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/BREAKPOINT.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BREAKPOINT.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/BREAKPOINT.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BasicType.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/BasicType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BasicType.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/BasicType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BranchHandle.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/BranchHandle.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BranchHandle.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/BranchHandle.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BranchInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/BranchInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/BranchInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/BranchInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CALOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/CALOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CALOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/CALOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CASTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/CASTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CASTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/CASTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CHECKCAST.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/CHECKCAST.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CHECKCAST.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/CHECKCAST.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CPInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/CPInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CPInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/CPInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ClassGen.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ClassGen.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ClassGen.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ClassGen.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ClassGenException.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ClassGenException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ClassGenException.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ClassGenException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ClassObserver.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ClassObserver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ClassObserver.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ClassObserver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CodeExceptionGen.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/CodeExceptionGen.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CodeExceptionGen.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/CodeExceptionGen.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CompoundInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/CompoundInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/CompoundInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/CompoundInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ConstantPoolGen.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ConstantPoolGen.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ConstantPoolGen.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ConstantPoolGen.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ConstantPushInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ConstantPushInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ConstantPushInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ConstantPushInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ConversionInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ConversionInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ConversionInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ConversionInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/D2F.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/D2F.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/D2F.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/D2F.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/D2I.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/D2I.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/D2I.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/D2I.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/D2L.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/D2L.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/D2L.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/D2L.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DADD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DADD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DADD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DADD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DALOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DALOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DALOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DALOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DASTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DASTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DASTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DASTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DCMPG.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DCMPG.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DCMPG.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DCMPG.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DCMPL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DCMPL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DCMPL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DCMPL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DCONST.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DCONST.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DCONST.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DCONST.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DDIV.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DDIV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DDIV.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DDIV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DLOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DLOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DLOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DLOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DMUL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DMUL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DMUL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DMUL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DNEG.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DNEG.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DNEG.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DNEG.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DREM.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DREM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DREM.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DREM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DRETURN.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DRETURN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DRETURN.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DRETURN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DSTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DSTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DSTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DSTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DSUB.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DSUB.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DSUB.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DSUB.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP2.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP2.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2_X1.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP2_X1.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2_X1.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP2_X1.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2_X2.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP2_X2.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP2_X2.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP2_X2.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP_X1.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP_X1.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP_X1.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP_X1.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP_X2.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP_X2.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/DUP_X2.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/DUP_X2.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/EmptyVisitor.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/EmptyVisitor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/EmptyVisitor.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/EmptyVisitor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ExceptionThrower.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ExceptionThrower.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ExceptionThrower.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ExceptionThrower.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/F2D.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/F2D.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/F2D.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/F2D.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/F2I.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/F2I.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/F2I.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/F2I.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/F2L.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/F2L.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/F2L.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/F2L.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FADD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FADD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FADD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FADD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FALOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FALOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FALOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FALOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FASTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FASTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FASTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FASTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FCMPG.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FCMPG.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FCMPG.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FCMPG.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FCMPL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FCMPL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FCMPL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FCMPL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FCONST.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FCONST.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FCONST.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FCONST.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FDIV.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FDIV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FDIV.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FDIV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FLOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FLOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FLOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FLOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FMUL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FMUL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FMUL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FMUL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FNEG.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FNEG.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FNEG.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FNEG.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FREM.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FREM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FREM.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FREM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FRETURN.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FRETURN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FRETURN.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FRETURN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FSTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FSTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FSTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FSTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FSUB.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FSUB.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FSUB.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FSUB.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FieldGen.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FieldGen.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FieldGen.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FieldGen.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FieldGenOrMethodGen.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FieldGenOrMethodGen.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FieldGenOrMethodGen.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FieldGenOrMethodGen.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FieldInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FieldInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FieldInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FieldInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FieldObserver.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FieldObserver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FieldObserver.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FieldObserver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FieldOrMethod.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/FieldOrMethod.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/FieldOrMethod.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/FieldOrMethod.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/GETFIELD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/GETFIELD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/GETFIELD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/GETFIELD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/GETSTATIC.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/GETSTATIC.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/GETSTATIC.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/GETSTATIC.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/GOTO.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/GOTO.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/GOTO.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/GOTO.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/GOTO_W.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/GOTO_W.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/GOTO_W.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/GOTO_W.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/GotoInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/GotoInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/GotoInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/GotoInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2B.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/I2B.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2B.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/I2B.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2C.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/I2C.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2C.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/I2C.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2D.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/I2D.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2D.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/I2D.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2F.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/I2F.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2F.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/I2F.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2L.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/I2L.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2L.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/I2L.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2S.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/I2S.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/I2S.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/I2S.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IADD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IADD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IADD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IADD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IALOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IALOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IALOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IALOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IAND.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IAND.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IAND.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IAND.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IASTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IASTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IASTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IASTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ICONST.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ICONST.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ICONST.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ICONST.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IDIV.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IDIV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IDIV.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IDIV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFEQ.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IFEQ.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFEQ.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IFEQ.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFGE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IFGE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFGE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IFGE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFGT.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IFGT.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFGT.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IFGT.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFLE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IFLE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFLE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IFLE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFLT.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IFLT.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFLT.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IFLT.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFNE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IFNE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFNE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IFNE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFNONNULL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IFNONNULL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFNONNULL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IFNONNULL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFNULL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IFNULL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IFNULL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IFNULL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ACMPEQ.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ACMPEQ.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ACMPEQ.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ACMPEQ.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ACMPNE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ACMPNE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ACMPNE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ACMPNE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPEQ.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPEQ.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPEQ.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPEQ.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPGE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPGE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPGE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPGE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPGT.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPGT.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPGT.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPGT.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPLE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPLE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPLE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPLE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPLT.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPLT.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPLT.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPLT.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPNE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPNE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IF_ICMPNE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IF_ICMPNE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IINC.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IINC.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IINC.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IINC.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ILOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ILOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ILOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ILOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IMPDEP1.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IMPDEP1.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IMPDEP1.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IMPDEP1.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IMPDEP2.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IMPDEP2.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IMPDEP2.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IMPDEP2.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IMUL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IMUL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IMUL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IMUL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INEG.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/INEG.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INEG.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/INEG.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INSTANCEOF.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/INSTANCEOF.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INSTANCEOF.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/INSTANCEOF.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEINTERFACE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/INVOKEINTERFACE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEINTERFACE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/INVOKEINTERFACE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKESPECIAL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/INVOKESPECIAL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKESPECIAL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/INVOKESPECIAL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKESTATIC.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/INVOKESTATIC.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKESTATIC.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/INVOKESTATIC.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEVIRTUAL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/INVOKEVIRTUAL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/INVOKEVIRTUAL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/INVOKEVIRTUAL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IOR.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IOR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IOR.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IOR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IREM.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IREM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IREM.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IREM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IRETURN.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IRETURN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IRETURN.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IRETURN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ISHL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ISHL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ISHL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ISHL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ISHR.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ISHR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ISHR.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ISHR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ISTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ISTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ISTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ISTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ISUB.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ISUB.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ISUB.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ISUB.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IUSHR.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IUSHR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IUSHR.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IUSHR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IXOR.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IXOR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IXOR.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IXOR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IfInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IfInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IfInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IfInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IndexedInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/IndexedInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/IndexedInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/IndexedInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/Instruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/Instruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/Instruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/Instruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionComparator.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionComparator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionComparator.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionComparator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionConstants.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionConstants.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionConstants.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionConstants.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionFactory.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionFactory.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionHandle.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionHandle.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionHandle.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionHandle.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionList.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionList.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionListObserver.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionListObserver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionListObserver.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionListObserver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionTargeter.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionTargeter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InstructionTargeter.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/InstructionTargeter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InvokeInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/InvokeInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/InvokeInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/InvokeInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/JSR.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/JSR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/JSR.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/JSR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/JSR_W.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/JSR_W.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/JSR_W.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/JSR_W.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/JsrInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/JsrInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/JsrInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/JsrInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/L2D.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/L2D.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/L2D.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/L2D.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/L2F.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/L2F.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/L2F.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/L2F.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/L2I.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/L2I.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/L2I.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/L2I.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LADD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LADD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LADD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LADD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LALOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LALOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LALOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LALOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LAND.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LAND.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LAND.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LAND.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LASTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LASTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LASTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LASTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LCMP.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LCMP.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LCMP.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LCMP.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LCONST.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LCONST.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LCONST.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LCONST.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LDC.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LDC.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LDC.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LDC.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LDC2_W.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LDC2_W.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LDC2_W.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LDC2_W.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LDC_W.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LDC_W.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LDC_W.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LDC_W.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LDIV.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LDIV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LDIV.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LDIV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LLOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LLOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LLOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LLOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LMUL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LMUL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LMUL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LMUL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LNEG.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LNEG.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LNEG.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LNEG.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LOOKUPSWITCH.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LOOKUPSWITCH.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LOOKUPSWITCH.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LOOKUPSWITCH.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LOR.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LOR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LOR.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LOR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LREM.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LREM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LREM.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LREM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LRETURN.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LRETURN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LRETURN.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LRETURN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LSHL.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LSHL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LSHL.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LSHL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LSHR.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LSHR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LSHR.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LSHR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LSTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LSTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LSTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LSTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LSUB.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LSUB.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LSUB.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LSUB.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LUSHR.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LUSHR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LUSHR.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LUSHR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LXOR.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LXOR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LXOR.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LXOR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LineNumberGen.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LineNumberGen.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LineNumberGen.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LineNumberGen.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LoadClass.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LoadClass.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LoadClass.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LoadClass.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LoadInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LoadInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LoadInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LoadInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LocalVariableGen.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LocalVariableGen.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LocalVariableGen.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LocalVariableGen.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LocalVariableInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/LocalVariableInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/LocalVariableInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/LocalVariableInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/MONITORENTER.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/MONITORENTER.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/MONITORENTER.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/MONITORENTER.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/MONITOREXIT.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/MONITOREXIT.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/MONITOREXIT.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/MONITOREXIT.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/MULTIANEWARRAY.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/MULTIANEWARRAY.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/MULTIANEWARRAY.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/MULTIANEWARRAY.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/MethodGen.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/MethodGen.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/MethodGen.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/MethodGen.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/MethodObserver.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/MethodObserver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/MethodObserver.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/MethodObserver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/NEW.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/NEW.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/NEW.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/NEW.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/NEWARRAY.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/NEWARRAY.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/NEWARRAY.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/NEWARRAY.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/NOP.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/NOP.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/NOP.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/NOP.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/NamedAndTyped.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/NamedAndTyped.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/NamedAndTyped.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/NamedAndTyped.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ObjectType.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ObjectType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ObjectType.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ObjectType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/POP.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/POP.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/POP.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/POP.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/POP2.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/POP2.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/POP2.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/POP2.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/PUSH.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/PUSH.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/PUSH.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/PUSH.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/PUTFIELD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/PUTFIELD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/PUTFIELD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/PUTFIELD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/PUTSTATIC.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/PUTSTATIC.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/PUTSTATIC.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/PUTSTATIC.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/PopInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/PopInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/PopInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/PopInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/PushInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/PushInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/PushInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/PushInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/RET.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/RET.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/RET.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/RET.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/RETURN.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/RETURN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/RETURN.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/RETURN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ReferenceType.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ReferenceType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ReferenceType.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ReferenceType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ReturnInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ReturnInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ReturnInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ReturnInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ReturnaddressType.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/ReturnaddressType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/ReturnaddressType.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/ReturnaddressType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/SALOAD.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/SALOAD.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/SALOAD.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/SALOAD.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/SASTORE.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/SASTORE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/SASTORE.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/SASTORE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/SIPUSH.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/SIPUSH.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/SIPUSH.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/SIPUSH.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/SWAP.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/SWAP.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/SWAP.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/SWAP.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/SWITCH.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/SWITCH.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/SWITCH.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/SWITCH.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/Select.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/Select.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/Select.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/Select.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/StackConsumer.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/StackConsumer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/StackConsumer.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/StackConsumer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/StackInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/StackInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/StackInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/StackInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/StackProducer.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/StackProducer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/StackProducer.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/StackProducer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/StoreInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/StoreInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/StoreInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/StoreInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/TABLESWITCH.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/TABLESWITCH.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/TABLESWITCH.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/TABLESWITCH.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/TargetLostException.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/TargetLostException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/TargetLostException.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/TargetLostException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/Type.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/Type.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/Type.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/Type.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/TypedInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/TypedInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/TypedInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/TypedInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/UnconditionalBranch.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/UnconditionalBranch.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/UnconditionalBranch.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/UnconditionalBranch.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/VariableLengthInstruction.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/VariableLengthInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/VariableLengthInstruction.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/VariableLengthInstruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/Visitor.java b/jaxp/src/com/sun/org/apache/bcel/internal/generic/Visitor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/Visitor.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/Visitor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/package.html b/jaxp/src/com/sun/org/apache/bcel/internal/generic/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/generic/package.html
rename to jaxp/src/com/sun/org/apache/bcel/internal/generic/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/package.html b/jaxp/src/com/sun/org/apache/bcel/internal/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/package.html
rename to jaxp/src/com/sun/org/apache/bcel/internal/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/AttributeHTML.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/AttributeHTML.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/AttributeHTML.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/AttributeHTML.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/BCELFactory.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/BCELFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/BCELFactory.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/BCELFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/BCELifier.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/BCELifier.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/BCELifier.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/BCELifier.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ByteSequence.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/ByteSequence.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ByteSequence.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/ByteSequence.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/Class2HTML.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/Class2HTML.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/Class2HTML.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/Class2HTML.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassLoader.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/ClassLoader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassLoader.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/ClassLoader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassLoaderRepository.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/ClassLoaderRepository.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassLoaderRepository.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/ClassLoaderRepository.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassPath.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/ClassPath.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassPath.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/ClassPath.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassQueue.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/ClassQueue.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassQueue.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/ClassQueue.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassSet.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/ClassSet.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassSet.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/ClassSet.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassStack.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/ClassStack.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassStack.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/ClassStack.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassVector.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/ClassVector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ClassVector.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/ClassVector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/CodeHTML.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/CodeHTML.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/CodeHTML.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/CodeHTML.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ConstantHTML.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/ConstantHTML.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/ConstantHTML.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/ConstantHTML.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/InstructionFinder.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/InstructionFinder.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/InstructionFinder.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/InstructionFinder.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/JavaWrapper.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/JavaWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/JavaWrapper.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/JavaWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/MethodHTML.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/MethodHTML.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/MethodHTML.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/MethodHTML.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/Repository.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/Repository.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/Repository.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/Repository.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/SyntheticRepository.java b/jaxp/src/com/sun/org/apache/bcel/internal/util/SyntheticRepository.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/SyntheticRepository.java
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/SyntheticRepository.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/package.html b/jaxp/src/com/sun/org/apache/bcel/internal/util/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/bcel/internal/util/package.html
rename to jaxp/src/com/sun/org/apache/bcel/internal/util/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/CharacterArrayCharacterIterator.java b/jaxp/src/com/sun/org/apache/regexp/internal/CharacterArrayCharacterIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/CharacterArrayCharacterIterator.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/CharacterArrayCharacterIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/CharacterIterator.java b/jaxp/src/com/sun/org/apache/regexp/internal/CharacterIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/CharacterIterator.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/CharacterIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/RE.java b/jaxp/src/com/sun/org/apache/regexp/internal/RE.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/RE.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/RE.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/RECompiler.java b/jaxp/src/com/sun/org/apache/regexp/internal/RECompiler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/RECompiler.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/RECompiler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/REDebugCompiler.java b/jaxp/src/com/sun/org/apache/regexp/internal/REDebugCompiler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/REDebugCompiler.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/REDebugCompiler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/REProgram.java b/jaxp/src/com/sun/org/apache/regexp/internal/REProgram.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/REProgram.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/REProgram.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/RESyntaxException.java b/jaxp/src/com/sun/org/apache/regexp/internal/RESyntaxException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/RESyntaxException.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/RESyntaxException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/RETest.java b/jaxp/src/com/sun/org/apache/regexp/internal/RETest.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/RETest.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/RETest.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/REUtil.java b/jaxp/src/com/sun/org/apache/regexp/internal/REUtil.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/REUtil.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/REUtil.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/ReaderCharacterIterator.java b/jaxp/src/com/sun/org/apache/regexp/internal/ReaderCharacterIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/ReaderCharacterIterator.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/ReaderCharacterIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/StreamCharacterIterator.java b/jaxp/src/com/sun/org/apache/regexp/internal/StreamCharacterIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/StreamCharacterIterator.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/StreamCharacterIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/StringCharacterIterator.java b/jaxp/src/com/sun/org/apache/regexp/internal/StringCharacterIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/StringCharacterIterator.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/StringCharacterIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/regexp/internal/recompile.java b/jaxp/src/com/sun/org/apache/regexp/internal/recompile.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/regexp/internal/recompile.java
rename to jaxp/src/com/sun/org/apache/regexp/internal/recompile.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/META-INF/services/javax.xml.transform.TransformerFactory b/jaxp/src/com/sun/org/apache/xalan/META-INF/services/javax.xml.transform.TransformerFactory
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/META-INF/services/javax.xml.transform.TransformerFactory
rename to jaxp/src/com/sun/org/apache/xalan/META-INF/services/javax.xml.transform.TransformerFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/META-INF/services/javax.xml.xpath.XPathFactory b/jaxp/src/com/sun/org/apache/xalan/META-INF/services/javax.xml.xpath.XPathFactory
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/META-INF/services/javax.xml.xpath.XPathFactory
rename to jaxp/src/com/sun/org/apache/xalan/META-INF/services/javax.xml.xpath.XPathFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/META-INF/services/org.apache.xml.dtm.DTMManager b/jaxp/src/com/sun/org/apache/xalan/META-INF/services/org.apache.xml.dtm.DTMManager
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/META-INF/services/org.apache.xml.dtm.DTMManager
rename to jaxp/src/com/sun/org/apache/xalan/META-INF/services/org.apache.xml.dtm.DTMManager
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/Version.java b/jaxp/src/com/sun/org/apache/xalan/internal/Version.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/Version.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/Version.java
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/XalanConstants.java b/jaxp/src/com/sun/org/apache/xalan/internal/XalanConstants.java
new file mode 100644
index 00000000000..5e21f40d854
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/XalanConstants.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.org.apache.xalan.internal;
+
+import com.sun.org.apache.xerces.internal.impl.*;
+import java.util.Enumeration;
+import java.util.NoSuchElementException;
+
+/**
+ * Commonly used constants.
+ *
+ * @author Huizhe Wang, Oracle
+ *
+ * @version $Id: Constants.java,v 1.14 2011-06-07 04:39:40 joehw Exp $
+ */
+public final class XalanConstants {
+
+ //
+ // Constants
+ //
+ // Oracle Feature:
+ /**
+ * Use Service Mechanism
+ *
+ *
+ * -
+ *
true instructs the implementation to use service mechanism to find implementation.
+ * This is the default behavior.
+ *
+ * -
+ *
false instructs the implementation to skip service mechanism and use the default implementation.
+ *
+ *
+ */
+ public static final String ORACLE_FEATURE_SERVICE_MECHANISM = "http://www.oracle.com/feature/use-service-mechanism";
+
+} // class Constants
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/extensions/ExpressionContext.java b/jaxp/src/com/sun/org/apache/xalan/internal/extensions/ExpressionContext.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/extensions/ExpressionContext.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/extensions/ExpressionContext.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/extensions/package.html b/jaxp/src/com/sun/org/apache/xalan/internal/extensions/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/extensions/package.html
rename to jaxp/src/com/sun/org/apache/xalan/internal/extensions/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltBase.java b/jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltBase.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltBase.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltBase.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltCommon.java b/jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltCommon.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltCommon.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltCommon.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltDatetime.java b/jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltDatetime.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltDatetime.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltDatetime.java
index 51b6396344b..d717d8d1fa2 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltDatetime.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltDatetime.java
@@ -97,7 +97,7 @@ public class ExsltDatetime
// In a few cases, the time zone may be +/-hh:30.
int min = offset%(60*60*1000);
char posneg = hrs < 0? '-': '+';
- buff.append(posneg + formatDigits(hrs) + ':' + formatDigits(min));
+ buff.append(posneg).append(formatDigits(hrs)).append(':').append(formatDigits(min));
}
return buff.toString();
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltDynamic.java b/jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltDynamic.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltDynamic.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltDynamic.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltMath.java b/jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltMath.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltMath.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltMath.java
index 6d760fc1975..6066832a2a6 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltMath.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltMath.java
@@ -381,7 +381,7 @@ public class ExsltMath extends ExsltBase
if (bits <= value.length())
value = value.substring(0, bits);
- return new Double(value).doubleValue();
+ return Double.parseDouble(value);
}
else
return Double.NaN;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltSets.java b/jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltSets.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltSets.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltSets.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltStrings.java b/jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltStrings.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ExsltStrings.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/lib/ExsltStrings.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/Extensions.java b/jaxp/src/com/sun/org/apache/xalan/internal/lib/Extensions.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/Extensions.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/lib/Extensions.java
index 8efb91bcce9..27e4083617d 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/Extensions.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/lib/Extensions.java
@@ -35,6 +35,7 @@ import com.sun.org.apache.xpath.internal.NodeSet;
import com.sun.org.apache.xpath.internal.objects.XBoolean;
import com.sun.org.apache.xpath.internal.objects.XNumber;
import com.sun.org.apache.xpath.internal.objects.XObject;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
@@ -363,8 +364,7 @@ public class Extensions
try
{
// Use reflection to try to find xml-commons utility 'Which'
- Class clazz = ObjectFactory.findProviderClass(
- WHICH_CLASSNAME, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(WHICH_CLASSNAME, true);
if (null == clazz)
return null;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/NodeInfo.java b/jaxp/src/com/sun/org/apache/xalan/internal/lib/NodeInfo.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/NodeInfo.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/lib/NodeInfo.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/package.html b/jaxp/src/com/sun/org/apache/xalan/internal/lib/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/package.html
rename to jaxp/src/com/sun/org/apache/xalan/internal/lib/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLMessages.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLMessages.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLMessages.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLMessages.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_en.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_en.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_en.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_en.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_pt_BR.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_pt_BR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_pt_BR.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_pt_BR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_sv.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTInfo.properties b/jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTInfo.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/XSLTInfo.properties
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/XSLTInfo.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/package.html b/jaxp/src/com/sun/org/apache/xalan/internal/res/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/res/package.html
rename to jaxp/src/com/sun/org/apache/xalan/internal/res/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/templates/Constants.java b/jaxp/src/com/sun/org/apache/xalan/internal/templates/Constants.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/templates/Constants.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/templates/Constants.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/templates/package.html b/jaxp/src/com/sun/org/apache/xalan/internal/templates/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/templates/package.html
rename to jaxp/src/com/sun/org/apache/xalan/internal/templates/package.html
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/utils/ConfigurationError.java b/jaxp/src/com/sun/org/apache/xalan/internal/utils/ConfigurationError.java
new file mode 100644
index 00000000000..5832f82868b
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/utils/ConfigurationError.java
@@ -0,0 +1,61 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/15 02:39:54 jeffsuttor Exp $
+ */
+
+package com.sun.org.apache.xalan.internal.utils;
+
+/**
+ * A configuration error. This was an internal class in ObjectFactory previously
+ */
+public final class ConfigurationError
+ extends Error {
+
+ //
+ // Data
+ //
+
+ /** Exception. */
+ private Exception exception;
+
+ //
+ // Constructors
+ //
+
+ /**
+ * Construct a new instance with the specified detail string and
+ * exception.
+ */
+ ConfigurationError(String msg, Exception x) {
+ super(msg);
+ this.exception = x;
+ } // (String,Exception)
+
+ //
+ // methods
+ //
+
+ /** Returns the exception associated to this error. */
+ public Exception getException() {
+ return exception;
+ } // getException():Exception
+
+} // class ConfigurationError
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/utils/FactoryImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/utils/FactoryImpl.java
new file mode 100644
index 00000000000..d62e0ab40cb
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/utils/FactoryImpl.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package com.sun.org.apache.xalan.internal.utils;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.SAXParserFactory;
+
+/**
+ *
+ * @author huizhe wang
+ */
+public class FactoryImpl {
+
+ static final String DBF = "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl";
+ static final String SF = "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl";
+
+ static public DocumentBuilderFactory getDOMFactory(boolean useServicesMechanism) {
+ DocumentBuilderFactory dbf =
+ useServicesMechanism ?
+ DocumentBuilderFactory.newInstance() :
+ DocumentBuilderFactory.newInstance( DBF,
+ FactoryImpl.class.getClassLoader());
+
+ return dbf;
+ }
+ static public SAXParserFactory getSAXFactory(boolean useServicesMechanism) {
+ SAXParserFactory factory =
+ useServicesMechanism ?
+ SAXParserFactory.newInstance() :
+ SAXParserFactory.newInstance(SF,
+ FactoryImpl.class.getClassLoader());
+ return factory;
+ }
+}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/ObjectFactory.java b/jaxp/src/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java
similarity index 89%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/ObjectFactory.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java
index 54f13f422f3..8e489bb736d 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/ObjectFactory.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java
@@ -18,10 +18,10 @@
* limitations under the License.
*/
/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/14 20:25:54 jeffsuttor Exp $
+ * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/15 02:39:54 jeffsuttor Exp $
*/
-package com.sun.org.apache.xpath.internal.functions;
+package com.sun.org.apache.xalan.internal.utils;
import java.io.InputStream;
import java.io.IOException;
@@ -47,9 +47,9 @@ import java.io.InputStreamReader;
* class and modified to be used as a general utility for creating objects
* dynamically.
*
- * @version $Id: ObjectFactory.java,v 1.7 2008/04/02 00:40:59 joehw Exp $
+ * @version $Id: ObjectFactory.java,v 1.11 2010-11-01 04:34:25 joehw Exp $
*/
-class ObjectFactory {
+public class ObjectFactory {
//
// Constants
@@ -100,7 +100,7 @@ class ObjectFactory {
*
* @exception ObjectFactory.ConfigurationError
*/
- static Object createObject(String factoryId, String fallbackClassName)
+ public static Object createObject(String factoryId, String fallbackClassName)
throws ConfigurationError {
return createObject(factoryId, null, fallbackClassName);
} // createObject(String,String):Object
@@ -174,7 +174,7 @@ class ObjectFactory {
*
* @exception ObjectFactory.ConfigurationError
*/
- static Class lookUpFactoryClass(String factoryId)
+ public static Class lookUpFactoryClass(String factoryId)
throws ConfigurationError
{
return lookUpFactoryClass(factoryId, null, null);
@@ -202,7 +202,7 @@ class ObjectFactory {
*
* @exception ObjectFactory.ConfigurationError
*/
- static Class lookUpFactoryClass(String factoryId,
+ public static Class lookUpFactoryClass(String factoryId,
String propertiesFilename,
String fallbackClassName)
throws ConfigurationError
@@ -260,11 +260,9 @@ class ObjectFactory {
String propertiesFilename,
String fallbackClassName)
{
- SecuritySupport ss = SecuritySupport.getInstance();
-
// Use the system property first
try {
- String systemProp = ss.getSystemProperty(factoryId);
+ String systemProp = SecuritySupport.getSystemProperty(factoryId);
if (systemProp != null) {
if (DEBUG) debugPrintln("found system property, value=" + systemProp);
return systemProp;
@@ -282,11 +280,11 @@ class ObjectFactory {
File propertiesFile = null;
boolean propertiesFileExists = false;
try {
- String javah = ss.getSystemProperty("java.home");
+ String javah = SecuritySupport.getSystemProperty("java.home");
propertiesFilename = javah + File.separator +
"lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
+ propertiesFileExists = SecuritySupport.getFileExists(propertiesFile);
} catch (SecurityException e) {
// try again...
fLastModified = -1;
@@ -300,7 +298,7 @@ class ObjectFactory {
// file existed last time
if(fLastModified >= 0) {
if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
+ (fLastModified < (fLastModified = SecuritySupport.getLastModified(propertiesFile)))) {
loadProperties = true;
} else {
// file has stopped existing...
@@ -313,14 +311,14 @@ class ObjectFactory {
// file has started to exist:
if(propertiesFileExists) {
loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
+ fLastModified = SecuritySupport.getLastModified(propertiesFile);
} // else, nothing's changed
}
if(loadProperties) {
// must never have attempted to read xalan.properties
// before (or it's outdeated)
fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
+ fis = SecuritySupport.getFileInputStream(propertiesFile);
fXalanProperties.load(fis);
}
} catch (Exception x) {
@@ -347,7 +345,7 @@ class ObjectFactory {
} else {
FileInputStream fis = null;
try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
+ fis = SecuritySupport.getFileInputStream(new File(propertiesFilename));
Properties props = new Properties();
props.load(fis);
factoryClassName = props.getProperty(factoryId);
@@ -392,15 +390,18 @@ class ObjectFactory {
* Figure out which ClassLoader to use. For JDK 1.2 and later use
* the context ClassLoader.
*/
- static ClassLoader findClassLoader()
+ public static ClassLoader findClassLoader()
throws ConfigurationError
{
- SecuritySupport ss = SecuritySupport.getInstance();
+ if (System.getSecurityManager()!=null) {
+ //this will ensure bootclassloader is used
+ return null;
+ }
// Figure out which ClassLoader to use for loading the provider
// class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
+ ClassLoader context = SecuritySupport.getContextClassLoader();
+ ClassLoader system = SecuritySupport.getSystemClassLoader();
ClassLoader chain = system;
while (true) {
@@ -425,7 +426,7 @@ class ObjectFactory {
if (chain == null) {
break;
}
- chain = ss.getParentClassLoader(chain);
+ chain = SecuritySupport.getParentClassLoader(chain);
}
// Assert: Current ClassLoader not in chain of
@@ -440,14 +441,29 @@ class ObjectFactory {
// Check for any extension ClassLoaders in chain up to
// boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
+ chain = SecuritySupport.getParentClassLoader(chain);
+ }
// Assert: Context ClassLoader not in chain of
// boot/extension/system ClassLoaders
return context;
} // findClassLoader():ClassLoader
+ /**
+ * Create an instance of a class using the same classloader for the ObjectFactory by default
+ * or bootclassloader when Security Manager is in place
+ */
+ public static Object newInstance(String className, boolean doFallback)
+ throws ConfigurationError
+ {
+ if (System.getSecurityManager()!=null) {
+ return newInstance(className, null, doFallback);
+ } else {
+ return newInstance(className,
+ findClassLoader (), doFallback);
+ }
+ }
+
/**
* Create an instance of a class using the specified ClassLoader
*/
@@ -472,6 +488,21 @@ class ObjectFactory {
}
}
+ /**
+ * Find a Class using the same classloader for the ObjectFactory by default
+ * or bootclassloader when Security Manager is in place
+ */
+ public static Class findProviderClass(String className, boolean doFallback)
+ throws ClassNotFoundException, ConfigurationError
+ {
+ if (System.getSecurityManager()!=null) {
+ return Class.forName(className);
+ } else {
+ return findProviderClass (className,
+ findClassLoader (), doFallback);
+ }
+ }
+
/**
* Find a Class using the specified ClassLoader
*/
@@ -536,21 +567,20 @@ class ObjectFactory {
*/
private static String findJarServiceProviderName(String factoryId)
{
- SecuritySupport ss = SecuritySupport.getInstance();
String serviceId = SERVICES_PATH + factoryId;
InputStream is = null;
// First try the Context ClassLoader
ClassLoader cl = findClassLoader();
- is = ss.getResourceAsStream(cl, serviceId);
+ is = SecuritySupport.getResourceAsStream(cl, serviceId);
// If no provider found then try the current ClassLoader
if (is == null) {
ClassLoader current = ObjectFactory.class.getClassLoader();
if (cl != current) {
cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
+ is = SecuritySupport.getResourceAsStream(cl, serviceId);
}
}
@@ -619,45 +649,4 @@ class ObjectFactory {
return null;
}
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = -5782303800588797207L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/SecuritySupport.java b/jaxp/src/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java
similarity index 74%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/SecuritySupport.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java
index d5a30f9f70a..4437a488e6a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/SecuritySupport.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java
@@ -3,13 +3,13 @@
* DO NOT REMOVE OR ALTER!
*/
/*
- * Copyright 2002,2004 The Apache Software Foundation.
+ * Copyright 2002-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -17,8 +17,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+/*
+ * $Id: SecuritySupport.java,v 1.1.2.1 2005/08/01 02:08:48 jeffsuttor Exp $
+ */
-package com.sun.org.apache.xerces.internal.impl.dv;
+package com.sun.org.apache.xalan.internal.utils;
import java.io.File;
import java.io.FileInputStream;
@@ -36,18 +39,18 @@ import java.security.PrivilegedExceptionAction;
*
* @xerces.internal
*/
-final class SecuritySupport {
+public final class SecuritySupport {
private static final SecuritySupport securitySupport = new SecuritySupport();
/**
* Return an instance of this class.
*/
- static SecuritySupport getInstance() {
+ public static SecuritySupport getInstance() {
return securitySupport;
}
- ClassLoader getContextClassLoader() {
+ static ClassLoader getContextClassLoader() {
return (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
@@ -60,7 +63,7 @@ final class SecuritySupport {
});
}
- ClassLoader getSystemClassLoader() {
+ static ClassLoader getSystemClassLoader() {
return (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
@@ -73,7 +76,7 @@ final class SecuritySupport {
});
}
- ClassLoader getParentClassLoader(final ClassLoader cl) {
+ static ClassLoader getParentClassLoader(final ClassLoader cl) {
return (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
@@ -89,7 +92,7 @@ final class SecuritySupport {
});
}
- String getSystemProperty(final String propName) {
+ public static String getSystemProperty(final String propName) {
return (String)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
@@ -98,7 +101,7 @@ final class SecuritySupport {
});
}
- FileInputStream getFileInputStream(final File file)
+ static FileInputStream getFileInputStream(final File file)
throws FileNotFoundException
{
try {
@@ -112,8 +115,19 @@ final class SecuritySupport {
throw (FileNotFoundException)e.getException();
}
}
+ /**
+ * Return resource using the same classloader for the ObjectFactory by default
+ * or bootclassloader when Security Manager is in place
+ */
+ public static InputStream getResourceAsStream(final String name) {
+ if (System.getSecurityManager()!=null) {
+ return getResourceAsStream(null, name);
+ } else {
+ return getResourceAsStream(ObjectFactory.findClassLoader(), name);
+ }
+ }
- InputStream getResourceAsStream(final ClassLoader cl,
+ public static InputStream getResourceAsStream(final ClassLoader cl,
final String name)
{
return (InputStream)
@@ -121,7 +135,7 @@ final class SecuritySupport {
public Object run() {
InputStream ris;
if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
+ ris = Object.class.getResourceAsStream("/"+name);
} else {
ris = cl.getResourceAsStream(name);
}
@@ -130,16 +144,16 @@ final class SecuritySupport {
});
}
- boolean getFileExists(final File f) {
+ static boolean getFileExists(final File f) {
return ((Boolean)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
- return new Boolean(f.exists());
+ return f.exists() ? Boolean.TRUE : Boolean.FALSE;
}
})).booleanValue();
}
- long getLastModified(final File f) {
+ static long getLastModified(final File f) {
return ((Long)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/EnvironmentCheck.java b/jaxp/src/com/sun/org/apache/xalan/internal/xslt/EnvironmentCheck.java
similarity index 95%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/EnvironmentCheck.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xslt/EnvironmentCheck.java
index 15003b7d4da..8940d05823b 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/EnvironmentCheck.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xslt/EnvironmentCheck.java
@@ -22,6 +22,8 @@
*/
package com.sun.org.apache.xalan.internal.xslt;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
+
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
@@ -794,8 +796,7 @@ public class EnvironmentCheck
{
final String JAXP1_CLASS = "javax.xml.stream.XMLStreamConstants";
- clazz = ObjectFactory.findProviderClass(
- JAXP1_CLASS, ObjectFactory.findClassLoader(), true);
+ clazz = ObjectFactory.findProviderClass(JAXP1_CLASS, true);
// If we succeeded, we have JAXP 1.4 available
h.put(VERSION + "JAXP", "1.4");
@@ -825,8 +826,7 @@ public class EnvironmentCheck
final String XALAN1_VERSION_CLASS =
"com.sun.org.apache.xalan.internal.xslt.XSLProcessorVersion";
- Class clazz = ObjectFactory.findProviderClass(
- XALAN1_VERSION_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(XALAN1_VERSION_CLASS, true);
// Found Xalan-J 1.x, grab it's version fields
StringBuffer buf = new StringBuffer();
@@ -858,8 +858,7 @@ public class EnvironmentCheck
final String XALAN2_VERSION_CLASS =
"com.sun.org.apache.xalan.internal.processor.XSLProcessorVersion";
- Class clazz = ObjectFactory.findProviderClass(
- XALAN2_VERSION_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(XALAN2_VERSION_CLASS, true);
// Found Xalan-J 2.x, grab it's version fields
StringBuffer buf = new StringBuffer();
@@ -880,8 +879,7 @@ public class EnvironmentCheck
final String XALAN2_2_VERSION_METHOD = "getVersion";
final Class noArgs[] = new Class[0];
- Class clazz = ObjectFactory.findProviderClass(
- XALAN2_2_VERSION_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(XALAN2_2_VERSION_CLASS, true);
Method method = clazz.getMethod(XALAN2_2_VERSION_METHOD, noArgs);
Object returnValue = method.invoke(null, new Object[0]);
@@ -913,8 +911,7 @@ public class EnvironmentCheck
{
final String XERCES1_VERSION_CLASS = "com.sun.org.apache.xerces.internal.framework.Version";
- Class clazz = ObjectFactory.findProviderClass(
- XERCES1_VERSION_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(XERCES1_VERSION_CLASS, true);
// Found Xerces-J 1.x, grab it's version fields
Field f = clazz.getField("fVersion");
@@ -932,8 +929,7 @@ public class EnvironmentCheck
{
final String XERCES2_VERSION_CLASS = "com.sun.org.apache.xerces.internal.impl.Version";
- Class clazz = ObjectFactory.findProviderClass(
- XERCES2_VERSION_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(XERCES2_VERSION_CLASS, true);
// Found Xerces-J 2.x, grab it's version fields
Field f = clazz.getField("fVersion");
@@ -950,8 +946,7 @@ public class EnvironmentCheck
{
final String CRIMSON_CLASS = "org.apache.crimson.parser.Parser2";
- Class clazz = ObjectFactory.findProviderClass(
- CRIMSON_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(CRIMSON_CLASS, true);
//@todo determine specific crimson version
h.put(VERSION + "crimson", CLASS_PRESENT);
@@ -979,8 +974,7 @@ public class EnvironmentCheck
final String ANT_VERSION_METHOD = "getAntVersion"; // noArgs
final Class noArgs[] = new Class[0];
- Class clazz = ObjectFactory.findProviderClass(
- ANT_VERSION_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(ANT_VERSION_CLASS, true);
Method method = clazz.getMethod(ANT_VERSION_METHOD, noArgs);
Object returnValue = method.invoke(null, new Object[0]);
@@ -1009,8 +1003,7 @@ public class EnvironmentCheck
try
{
- Class clazz = ObjectFactory.findProviderClass(
- DOM_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(DOM_CLASS, true);
Method method = clazz.getMethod(DOM_LEVEL3_METHOD, null);
@@ -1052,8 +1045,7 @@ public class EnvironmentCheck
try
{
- Class clazz = ObjectFactory.findProviderClass(
- DOM_LEVEL2_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(DOM_LEVEL2_CLASS, true);
Method method = clazz.getMethod(DOM_LEVEL2_METHOD, twoStringArgs);
@@ -1065,8 +1057,7 @@ public class EnvironmentCheck
{
// Check for the working draft version, which is
// commonly found, but won't work anymore
- clazz = ObjectFactory.findProviderClass(
- DOM_LEVEL2WD_CLASS, ObjectFactory.findClassLoader(), true);
+ clazz = ObjectFactory.findProviderClass(DOM_LEVEL2WD_CLASS, true);
method = clazz.getMethod(DOM_LEVEL2WD_METHOD, twoStringArgs);
@@ -1078,8 +1069,7 @@ public class EnvironmentCheck
try
{
// Check for the final draft version as well
- clazz = ObjectFactory.findProviderClass(
- DOM_LEVEL2FD_CLASS, ObjectFactory.findClassLoader(), true);
+ clazz = ObjectFactory.findProviderClass(DOM_LEVEL2FD_CLASS, true);
method = clazz.getMethod(DOM_LEVEL2FD_METHOD, twoStringArgs);
@@ -1133,8 +1123,7 @@ public class EnvironmentCheck
{
// This method was only added in the final SAX 2.0 release;
// see changes.html "Changes from SAX 2.0beta2 to SAX 2.0prerelease"
- Class clazz = ObjectFactory.findProviderClass(
- SAX_VERSION2BETA_CLASSNF, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(SAX_VERSION2BETA_CLASSNF, true);
Method method = clazz.getMethod(SAX_VERSION2BETA_METHODNF, attributesArg);
@@ -1151,8 +1140,7 @@ public class EnvironmentCheck
try
{
- Class clazz = ObjectFactory.findProviderClass(
- SAX_VERSION2_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(SAX_VERSION2_CLASS, true);
Method method = clazz.getMethod(SAX_VERSION2_METHOD, oneStringArg);
@@ -1170,8 +1158,7 @@ public class EnvironmentCheck
try
{
- Class clazz = ObjectFactory.findProviderClass(
- SAX_VERSION1_CLASS, ObjectFactory.findClassLoader(), true);
+ Class clazz = ObjectFactory.findProviderClass(SAX_VERSION1_CLASS, true);
Method method = clazz.getMethod(SAX_VERSION1_METHOD, oneStringArg);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/Process.java b/jaxp/src/com/sun/org/apache/xalan/internal/xslt/Process.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/Process.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xslt/Process.java
index abdc15f3eb2..216c4cfee28 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/Process.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xslt/Process.java
@@ -55,6 +55,8 @@ import javax.xml.transform.stream.StreamSource;
import com.sun.org.apache.xalan.internal.Version;
import com.sun.org.apache.xalan.internal.res.XSLMessages;
import com.sun.org.apache.xalan.internal.res.XSLTErrorResources;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
+import com.sun.org.apache.xalan.internal.utils.ConfigurationError;
//J2SE does not support Xalan interpretive
/*
@@ -457,12 +459,11 @@ public class Process
{
try
{
- uriResolver = (URIResolver) ObjectFactory.newInstance(
- argv[++i], ObjectFactory.findClassLoader(), true);
+ uriResolver = (URIResolver) ObjectFactory.newInstance(argv[++i], true);
tfactory.setURIResolver(uriResolver);
}
- catch (ObjectFactory.ConfigurationError cnfe)
+ catch (ConfigurationError cnfe)
{
msg = XSLMessages.createMessage(
XSLTErrorResources.ER_CLASS_NOT_FOUND_FOR_OPTION,
@@ -486,10 +487,9 @@ public class Process
{
try
{
- entityResolver = (EntityResolver) ObjectFactory.newInstance(
- argv[++i], ObjectFactory.findClassLoader(), true);
+ entityResolver = (EntityResolver) ObjectFactory.newInstance(argv[++i], true);
}
- catch (ObjectFactory.ConfigurationError cnfe)
+ catch (ConfigurationError cnfe)
{
msg = XSLMessages.createMessage(
XSLTErrorResources.ER_CLASS_NOT_FOUND_FOR_OPTION,
@@ -514,10 +514,9 @@ public class Process
{
try
{
- contentHandler = (ContentHandler) ObjectFactory.newInstance(
- argv[++i], ObjectFactory.findClassLoader(), true);
+ contentHandler = (ContentHandler) ObjectFactory.newInstance(argv[++i], true);
}
- catch (ObjectFactory.ConfigurationError cnfe)
+ catch (ConfigurationError cnfe)
{
msg = XSLMessages.createMessage(
XSLTErrorResources.ER_CLASS_NOT_FOUND_FOR_OPTION,
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/package.html b/jaxp/src/com/sun/org/apache/xalan/internal/xslt/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/package.html
rename to jaxp/src/com/sun/org/apache/xalan/internal/xslt/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/CollatorFactory.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/CollatorFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/CollatorFactory.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/CollatorFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/DOM.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/DOM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/DOM.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/DOM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/DOMCache.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/DOMCache.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/DOMCache.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/DOMCache.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/DOMEnhancedForDTM.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/DOMEnhancedForDTM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/DOMEnhancedForDTM.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/DOMEnhancedForDTM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/NodeIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/NodeIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/NodeIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/NodeIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/ProcessorVersion.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/ProcessorVersion.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/ProcessorVersion.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/ProcessorVersion.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/StripFilter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/StripFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/StripFilter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/StripFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/Translet.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/Translet.java
similarity index 95%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/Translet.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/Translet.java
index ba3552cbe10..ca6ff50ef0f 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/Translet.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/Translet.java
@@ -51,4 +51,7 @@ public interface Translet {
public String[] getUrisArray();
public int[] getTypesArray();
public String[] getNamespaceArray();
+ public boolean useServicesMechnism();
+ public void setServicesMechnism(boolean flag);
+
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/TransletException.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/TransletException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/TransletException.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/TransletException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java
similarity index 94%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java
index a27959e49ee..b6cdff01c0b 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java
@@ -55,11 +55,10 @@ public final class Compile {
public static void printUsage() {
- StringBuffer vers = new StringBuffer("XSLTC version " +
- VERSION_MAJOR + "." + VERSION_MINOR +
- ((VERSION_DELTA > 0) ? ("."+VERSION_DELTA) : ("")));
- System.err.println(vers + "\n" +
- new ErrorMsg(ErrorMsg.COMPILE_USAGE_STR));
+ System.err.println("XSLTC version " +
+ VERSION_MAJOR + "." + VERSION_MINOR +
+ ((VERSION_DELTA > 0) ? ("." + VERSION_DELTA) : ("")) + "\n" +
+ new ErrorMsg(ErrorMsg.COMPILE_USAGE_STR));
if (_allowExit) System.exit(-1);
}
@@ -78,7 +77,7 @@ public final class Compile {
final GetOpt getopt = new GetOpt(args, "o:d:j:p:uxhsinv");
if (args.length < 1) printUsage();
- final XSLTC xsltc = new XSLTC();
+ final XSLTC xsltc = new XSLTC(true);
xsltc.init();
int c;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/Transform.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Transform.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/Transform.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Transform.java
index 1f088294c4c..e2df8e31c36 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/Transform.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Transform.java
@@ -49,6 +49,7 @@ import org.xml.sax.XMLReader;
import com.sun.org.apache.xalan.internal.xsltc.StripFilter;
import com.sun.org.apache.xml.internal.dtm.DTMWSFilter;
import com.sun.org.apache.xalan.internal.xsltc.dom.DOMWSFilter;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
/**
* @author Jacek Ambroziak
@@ -97,8 +98,7 @@ final public class Transform {
private void doTransform() {
try {
- final Class clazz = ObjectFactory.findProviderClass(
- _className, ObjectFactory.findClassLoader(), true);
+ final Class clazz = ObjectFactory.findProviderClass(_className, true);
final AbstractTranslet translet = (AbstractTranslet)clazz.newInstance();
translet.postInitialization();
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOpt.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOpt.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOpt.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOpt.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOptsException.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOptsException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOptsException.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/GetOptsException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/IllegalArgumentException.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/IllegalArgumentException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/IllegalArgumentException.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/IllegalArgumentException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/MissingOptArgException.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/MissingOptArgException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/MissingOptArgException.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/getopt/MissingOptArgException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsoluteLocationPath.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsoluteLocationPath.java
similarity index 94%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsoluteLocationPath.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsoluteLocationPath.java
index ff02e29cb73..8bfe6cb9907 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsoluteLocationPath.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsoluteLocationPath.java
@@ -106,13 +106,15 @@ final class AbsoluteLocationPath extends Expression {
LocalVariableGen relPathIterator
= methodGen.addLocalVariable("abs_location_path_tmp",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(relPathIterator.getIndex()));
+ null, null);
+ relPathIterator.setStart(
+ il.append(new ASTORE(relPathIterator.getIndex())));
// Create new AbsoluteIterator
il.append(new NEW(cpg.addClass(ABSOLUTE_ITERATOR)));
il.append(DUP);
- il.append(new ALOAD(relPathIterator.getIndex()));
+ relPathIterator.setEnd(
+ il.append(new ALOAD(relPathIterator.getIndex())));
// Initialize AbsoluteIterator with iterator from the stack
il.append(new INVOKESPECIAL(initAI));
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsolutePathPattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsolutePathPattern.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsolutePathPattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsolutePathPattern.java
index e9a60f16c73..c25bae43675 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsolutePathPattern.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AbsolutePathPattern.java
@@ -87,9 +87,9 @@ final class AbsolutePathPattern extends LocationPathPattern {
// absolute path pattern temporary
methodGen.addLocalVariable2("apptmp",
Util.getJCRefType(NODE_SIG),
- il.getEnd());
+ null);
il.append(DUP);
- il.append(new ISTORE(local.getIndex()));
+ local.setStart(il.append(new ISTORE(local.getIndex())));
_left.translate(classGen, methodGen);
il.append(methodGen.loadDOM());
local.setEnd(il.append(new ILOAD(local.getIndex())));
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AlternativePattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AlternativePattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AlternativePattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AlternativePattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AncestorPattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AncestorPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AncestorPattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AncestorPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyImports.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyImports.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyImports.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyImports.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyTemplates.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyTemplates.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyTemplates.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ApplyTemplates.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ArgumentList.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ArgumentList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ArgumentList.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ArgumentList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Attribute.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Attribute.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Attribute.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Attribute.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeSet.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeSet.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeSet.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeSet.java
index fc9a475306b..1ba7abe4ec4 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeSet.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeSet.java
@@ -192,11 +192,7 @@ final class AttributeSet extends TopLevelElement {
final InstructionList il = methodGen.getInstructionList();
il.append(RETURN);
- methodGen.stripAttributes(true);
- methodGen.setMaxLocals();
- methodGen.setMaxStack();
- methodGen.removeNOPs();
- classGen.addMethod(methodGen.getMethod());
+ classGen.addMethod(methodGen);
}
public String toString() {
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValue.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValue.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValue.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValue.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValueTemplate.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValueTemplate.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValueTemplate.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/AttributeValueTemplate.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/BinOpExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/BinOpExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/BinOpExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/BinOpExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/BooleanExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CallTemplate.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CallTemplate.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CallTemplate.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CallTemplate.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CastCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CastCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CastCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CastCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CastExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CastExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CastExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CastExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CeilingCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CeilingCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CeilingCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CeilingCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Choose.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Choose.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Choose.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Choose.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Closure.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Closure.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Closure.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Closure.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Comment.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Comment.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Comment.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Comment.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CompilerException.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CompilerException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CompilerException.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CompilerException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ConcatCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ConcatCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ConcatCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ConcatCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Constants.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Constants.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Constants.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Constants.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ContainsCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ContainsCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ContainsCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ContainsCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Copy.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Copy.java
similarity index 94%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Copy.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Copy.java
index 860efe1eb52..6c921bb8383 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Copy.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Copy.java
@@ -84,11 +84,11 @@ final class Copy extends Instruction {
final LocalVariableGen name =
methodGen.addLocalVariable2("name",
Util.getJCRefType(STRING_SIG),
- il.getEnd());
+ null);
final LocalVariableGen length =
methodGen.addLocalVariable2("length",
Util.getJCRefType("I"),
- il.getEnd());
+ null);
// Get the name of the node to copy and save for later
il.append(methodGen.loadDOM());
@@ -102,7 +102,7 @@ final class Copy extends Instruction {
+ ")" + STRING_SIG);
il.append(new INVOKEINTERFACE(cpy, 3));
il.append(DUP);
- il.append(new ASTORE(name.getIndex()));
+ name.setStart(il.append(new ASTORE(name.getIndex())));
final BranchHandle ifBlock1 = il.append(new IFNULL(null));
// Get the length of the node name and save for later
@@ -110,7 +110,7 @@ final class Copy extends Instruction {
final int lengthMethod = cpg.addMethodref(STRING_CLASS,"length","()I");
il.append(new INVOKEVIRTUAL(lengthMethod));
il.append(DUP);
- il.append(new ISTORE(length.getIndex()));
+ length.setStart(il.append(new ISTORE(length.getIndex())));
// Ignore attribute sets if current node is ROOT. DOM.shallowCopy()
// returns "" for ROOT, so skip attribute sets if length == 0
@@ -144,10 +144,10 @@ final class Copy extends Instruction {
// Call the output handler's endElement() if we copied an element
// (The DOM.shallowCopy() method calls startElement().)
- il.append(new ILOAD(length.getIndex()));
+ length.setEnd(il.append(new ILOAD(length.getIndex())));
final BranchHandle ifBlock3 = il.append(new IFEQ(null));
il.append(methodGen.loadHandler());
- il.append(new ALOAD(name.getIndex()));
+ name.setEnd(il.append(new ALOAD(name.getIndex())));
il.append(methodGen.endElement());
final InstructionHandle end = il.append(NOP);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CopyOf.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CopyOf.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CopyOf.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CopyOf.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CurrentCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CurrentCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/CurrentCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/CurrentCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/DecimalFormatting.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/DecimalFormatting.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/DecimalFormatting.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/DecimalFormatting.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/DocumentCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/DocumentCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/DocumentCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/DocumentCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ElementAvailableCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ElementAvailableCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ElementAvailableCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ElementAvailableCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/EqualityExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/EqualityExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/EqualityExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/EqualityExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Expression.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Expression.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Expression.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Expression.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Fallback.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Fallback.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Fallback.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Fallback.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterExpr.java
similarity index 54%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterExpr.java
index 3a16c93ae7c..c4842835537 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterExpr.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterExpr.java
@@ -28,11 +28,12 @@ import java.util.Vector;
import com.sun.org.apache.bcel.internal.generic.ALOAD;
import com.sun.org.apache.bcel.internal.generic.ASTORE;
import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
-import com.sun.org.apache.bcel.internal.generic.NEW;
+import com.sun.org.apache.bcel.internal.generic.ILOAD;
import com.sun.org.apache.bcel.internal.generic.INVOKEINTERFACE;
import com.sun.org.apache.bcel.internal.generic.INVOKESPECIAL;
import com.sun.org.apache.bcel.internal.generic.INVOKESTATIC;
import com.sun.org.apache.bcel.internal.generic.InstructionList;
+import com.sun.org.apache.bcel.internal.generic.ISTORE;
import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
import com.sun.org.apache.bcel.internal.generic.NEW;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator;
@@ -99,6 +100,7 @@ class FilterExpr extends Expression {
*/
public Type typeCheck(SymbolTable stable) throws TypeCheckError {
Type ptype = _primary.typeCheck(stable);
+ boolean canOptimize = _primary instanceof KeyCall;
if (ptype instanceof NodeSetType == false) {
if (ptype instanceof ReferenceType) {
@@ -109,11 +111,14 @@ class FilterExpr extends Expression {
}
}
- // Type check predicates and turn all optimizations off
+ // Type check predicates and turn all optimizations off if appropriate
int n = _predicates.size();
for (int i = 0; i < n; i++) {
Predicate pred = (Predicate) _predicates.elementAt(i);
- pred.dontOptimize();
+
+ if (!canOptimize) {
+ pred.dontOptimize();
+ }
pred.typeCheck(stable);
}
return _type = Type.NodeSet;
@@ -155,52 +160,95 @@ class FilterExpr extends Expression {
translateFilterExpr(classGen, methodGen, predicateIndex);
}
else {
- // Translate predicates from right to left
- final int initCNLI = cpg.addMethodref(CURRENT_NODE_LIST_ITERATOR,
- "",
- "("+NODE_ITERATOR_SIG+"Z"+
- CURRENT_NODE_LIST_FILTER_SIG +
- NODE_SIG+TRANSLET_SIG+")V");
-
- // Backwards branches are prohibited if an uninitialized object is
- // on the stack by section 4.9.4 of the JVM Specification, 2nd Ed.
- // We don't know whether this code might contain backwards branches,
- // so we mustn't create the new object until after we've created
- // the suspect arguments to its constructor. Instead we calculate
- // the values of the arguments to the constructor first, store them
- // in temporary variables, create the object and reload the
- // arguments from the temporaries to avoid the problem.
-
// Get the next predicate to be translated
Predicate predicate = (Predicate) _predicates.get(predicateIndex--);
// Translate the rest of the predicates from right to left
translatePredicates(classGen, methodGen, predicateIndex);
- LocalVariableGen nodeIteratorTemp =
- methodGen.addLocalVariable("filter_expr_tmp1",
- Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(nodeIteratorTemp.getIndex()));
+ if (predicate.isNthPositionFilter()) {
+ int nthIteratorIdx = cpg.addMethodref(NTH_ITERATOR_CLASS,
+ "",
+ "("+NODE_ITERATOR_SIG+"I)V");
- predicate.translate(classGen, methodGen);
- LocalVariableGen filterTemp =
- methodGen.addLocalVariable("filter_expr_tmp2",
- Util.getJCRefType(CURRENT_NODE_LIST_FILTER_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(filterTemp.getIndex()));
+ // Backwards branches are prohibited if an uninitialized object
+ // is on the stack by section 4.9.4 of the JVM Specification,
+ // 2nd Ed. We don't know whether this code might contain
+ // backwards branches, so we mustn't create the new object unti
- // Create a CurrentNodeListIterator
- il.append(new NEW(cpg.addClass(CURRENT_NODE_LIST_ITERATOR)));
- il.append(DUP);
+ // after we've created the suspect arguments to its constructor
- // Initialize CurrentNodeListIterator
- il.append(new ALOAD(nodeIteratorTemp.getIndex()));
- il.append(ICONST_1);
- il.append(new ALOAD(filterTemp.getIndex()));
- il.append(methodGen.loadCurrentNode());
- il.append(classGen.loadTranslet());
- il.append(new INVOKESPECIAL(initCNLI));
+ // Instead we calculate the values of the arguments to the
+ // constructor first, store them in temporary variables, create
+ // the object and reload the arguments from the temporaries to
+ // avoid the problem.
+ LocalVariableGen iteratorTemp
+ = methodGen.addLocalVariable("filter_expr_tmp1",
+ Util.getJCRefType(NODE_ITERATOR_SIG),
+ null, null);
+ iteratorTemp.setStart(
+ il.append(new ASTORE(iteratorTemp.getIndex())));
+
+ predicate.translate(classGen, methodGen);
+ LocalVariableGen predicateValueTemp
+ = methodGen.addLocalVariable("filter_expr_tmp2",
+ Util.getJCRefType("I"),
+ null, null);
+ predicateValueTemp.setStart(
+ il.append(new ISTORE(predicateValueTemp.getIndex())));
+
+ il.append(new NEW(cpg.addClass(NTH_ITERATOR_CLASS)));
+ il.append(DUP);
+ iteratorTemp.setEnd(
+ il.append(new ALOAD(iteratorTemp.getIndex())));
+ predicateValueTemp.setEnd(
+ il.append(new ILOAD(predicateValueTemp.getIndex())));
+ il.append(new INVOKESPECIAL(nthIteratorIdx));
+ } else {
+ // Translate predicates from right to left
+ final int initCNLI = cpg.addMethodref(CURRENT_NODE_LIST_ITERATOR,
+ "",
+ "("+NODE_ITERATOR_SIG+"Z"+
+ CURRENT_NODE_LIST_FILTER_SIG +
+ NODE_SIG+TRANSLET_SIG+")V");
+
+ // Backwards branches are prohibited if an uninitialized object is
+ // on the stack by section 4.9.4 of the JVM Specification, 2nd Ed.
+ // We don't know whether this code might contain backwards branches,
+ // so we mustn't create the new object until after we've created
+ // the suspect arguments to its constructor. Instead we calculate
+ // the values of the arguments to the constructor first, store them
+ // in temporary variables, create the object and reload the
+ // arguments from the temporaries to avoid the problem.
+
+
+ LocalVariableGen nodeIteratorTemp =
+ methodGen.addLocalVariable("filter_expr_tmp1",
+ Util.getJCRefType(NODE_ITERATOR_SIG),
+ null, null);
+ nodeIteratorTemp.setStart(
+ il.append(new ASTORE(nodeIteratorTemp.getIndex())));
+
+ predicate.translate(classGen, methodGen);
+ LocalVariableGen filterTemp =
+ methodGen.addLocalVariable("filter_expr_tmp2",
+ Util.getJCRefType(CURRENT_NODE_LIST_FILTER_SIG),
+ null, null);
+ filterTemp.setStart(il.append(new ASTORE(filterTemp.getIndex())));
+
+ // Create a CurrentNodeListIterator
+ il.append(new NEW(cpg.addClass(CURRENT_NODE_LIST_ITERATOR)));
+ il.append(DUP);
+
+ // Initialize CurrentNodeListIterator
+ nodeIteratorTemp.setEnd(
+ il.append(new ALOAD(nodeIteratorTemp.getIndex())));
+ il.append(ICONST_1);
+ filterTemp.setEnd(il.append(new ALOAD(filterTemp.getIndex())));
+ il.append(methodGen.loadCurrentNode());
+ il.append(classGen.loadTranslet());
+ il.append(new INVOKESPECIAL(initCNLI));
+ }
}
}
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterParentPath.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterParentPath.java
similarity index 89%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterParentPath.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterParentPath.java
index 0c2909616a3..2d3b75dc4ec 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterParentPath.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FilterParentPath.java
@@ -128,20 +128,20 @@ final class FilterParentPath extends Expression {
LocalVariableGen filterTemp =
methodGen.addLocalVariable("filter_parent_path_tmp1",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(filterTemp.getIndex()));
+ null, null);
+ filterTemp.setStart(il.append(new ASTORE(filterTemp.getIndex())));
_path.translate(classGen, methodGen);
LocalVariableGen pathTemp =
methodGen.addLocalVariable("filter_parent_path_tmp2",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(pathTemp.getIndex()));
+ null, null);
+ pathTemp.setStart(il.append(new ASTORE(pathTemp.getIndex())));
il.append(new NEW(cpg.addClass(STEP_ITERATOR_CLASS)));
il.append(DUP);
- il.append(new ALOAD(filterTemp.getIndex()));
- il.append(new ALOAD(pathTemp.getIndex()));
+ filterTemp.setEnd(il.append(new ALOAD(filterTemp.getIndex())));
+ pathTemp.setEnd(il.append(new ALOAD(pathTemp.getIndex())));
// Initialize StepIterator with iterators from the stack
il.append(new INVOKESPECIAL(initSI));
@@ -154,8 +154,16 @@ final class FilterParentPath extends Expression {
il.append(new INVOKEVIRTUAL(incl));
}
- if (!(getParent() instanceof RelativeLocationPath) &&
- !(getParent() instanceof FilterParentPath)) {
+ SyntaxTreeNode parent = getParent();
+
+ boolean parentAlreadyOrdered =
+ (parent instanceof RelativeLocationPath)
+ || (parent instanceof FilterParentPath)
+ || (parent instanceof KeyCall)
+ || (parent instanceof CurrentCall)
+ || (parent instanceof DocumentCall);
+
+ if (!parentAlreadyOrdered) {
final int order = cpg.addInterfaceMethodref(DOM_INTF,
ORDER_ITERATOR,
ORDER_ITERATOR_SIG);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FilteredAbsoluteLocationPath.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FilteredAbsoluteLocationPath.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FilteredAbsoluteLocationPath.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FilteredAbsoluteLocationPath.java
index 379e4495c96..82174b58834 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FilteredAbsoluteLocationPath.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FilteredAbsoluteLocationPath.java
@@ -104,14 +104,14 @@ final class FilteredAbsoluteLocationPath extends Expression {
LocalVariableGen pathTemp =
methodGen.addLocalVariable("filtered_absolute_location_path_tmp",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
+ null, null);
_path.translate(classGen, methodGen);
- il.append(new ASTORE(pathTemp.getIndex()));
+ pathTemp.setStart(il.append(new ASTORE(pathTemp.getIndex())));
// Create new Dup Filter Iterator
il.append(new NEW(cpg.addClass(DUP_FILTERED_ITERATOR)));
il.append(DUP);
- il.append(new ALOAD(pathTemp.getIndex()));
+ pathTemp.setEnd(il.append(new ALOAD(pathTemp.getIndex())));
// Initialize Dup Filter Iterator with iterator from the stack
il.append(new INVOKESPECIAL(initDFI));
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FloorCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FloorCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FloorCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FloorCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FlowList.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FlowList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FlowList.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FlowList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ForEach.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ForEach.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ForEach.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ForEach.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FormatNumberCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FormatNumberCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FormatNumberCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FormatNumberCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionAvailableCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionAvailableCall.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionAvailableCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionAvailableCall.java
index 0d6789fdf8c..8cad4275a5b 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionAvailableCall.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionAvailableCall.java
@@ -35,6 +35,7 @@ import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodGenerator;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.TypeCheckError;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Util;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
/**
* @author G. Todd Miller
@@ -132,8 +133,7 @@ final class FunctionAvailableCall extends FunctionCall {
methodName = replaceDash(methodName);
try {
- final Class clazz = ObjectFactory.findProviderClass(
- className, ObjectFactory.findClassLoader(), true);
+ final Class clazz = ObjectFactory.findProviderClass(className, true);
if (clazz == null) {
return false;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java
index a790cb4ded7..f4f903b2be9 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java
@@ -53,6 +53,7 @@ import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ObjectType;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ReferenceType;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.TypeCheckError;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
/**
* @author Jacek Ambroziak
@@ -355,8 +356,7 @@ class FunctionCall extends Expression {
else {
if (_className != null && _className.length() > 0) {
try {
- _clazz = ObjectFactory.findProviderClass(
- _className, ObjectFactory.findClassLoader(), true);
+ _clazz = ObjectFactory.findProviderClass(_className, true);
_namespace_format = NAMESPACE_FORMAT_CLASS;
}
catch (ClassNotFoundException e) {
@@ -775,8 +775,10 @@ class FunctionCall extends Expression {
paramTemp[i] =
methodGen.addLocalVariable("function_call_tmp"+i,
expType.toJCType(),
- il.getEnd(), null);
- il.append(expType.STORE(paramTemp[i].getIndex()));
+ null, null);
+ paramTemp[i].setStart(
+ il.append(expType.STORE(paramTemp[i].getIndex())));
+
}
il.append(new NEW(cpg.addClass(_className)));
@@ -784,7 +786,8 @@ class FunctionCall extends Expression {
for (int i = 0; i < n; i++) {
final Expression arg = argument(i);
- il.append(arg.getType().LOAD(paramTemp[i].getIndex()));
+ paramTemp[i].setEnd(
+ il.append(arg.getType().LOAD(paramTemp[i].getIndex())));
}
final StringBuffer buffer = new StringBuffer();
@@ -882,8 +885,7 @@ class FunctionCall extends Expression {
final int nArgs = _arguments.size();
try {
if (_clazz == null) {
- _clazz = ObjectFactory.findProviderClass(
- _className, ObjectFactory.findClassLoader(), true);
+ _clazz = ObjectFactory.findProviderClass(_className, true);
if (_clazz == null) {
final ErrorMsg msg =
@@ -929,8 +931,7 @@ class FunctionCall extends Expression {
final int nArgs = _arguments.size();
try {
if (_clazz == null) {
- _clazz = ObjectFactory.findProviderClass(
- _className, ObjectFactory.findClassLoader(), true);
+ _clazz = ObjectFactory.findProviderClass(_className, true);
if (_clazz == null) {
final ErrorMsg msg = new ErrorMsg(ErrorMsg.CLASS_NOT_FOUND_ERR, _className);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/GenerateIdCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/GenerateIdCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/GenerateIdCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/GenerateIdCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/IdKeyPattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/IdKeyPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/IdKeyPattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/IdKeyPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/IdPattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/IdPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/IdPattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/IdPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/If.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/If.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/If.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/If.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/IllegalCharException.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/IllegalCharException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/IllegalCharException.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/IllegalCharException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Import.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Import.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Import.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Import.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Include.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Include.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Include.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Include.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Instruction.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Instruction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Instruction.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Instruction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/IntExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/IntExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/IntExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/IntExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Key.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Key.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Key.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Key.java
index 3e3d6eef71d..82dbffb7edf 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Key.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Key.java
@@ -166,10 +166,10 @@ final class Key extends TopLevelElement {
final LocalVariableGen parentNode =
methodGen.addLocalVariable("parentNode",
Util.getJCRefType("I"),
- il.getEnd(), null);
+ null, null);
// Get the 'parameter' from the stack and store it in a local var.
- il.append(new ISTORE(parentNode.getIndex()));
+ parentNode.setStart(il.append(new ISTORE(parentNode.getIndex())));
// Save current node and current iterator on the stack
il.append(methodGen.loadCurrentNode());
@@ -186,9 +186,9 @@ final class Key extends TopLevelElement {
// Prepare to call buildKeyIndex(String name, int node, String value);
il.append(classGen.loadTranslet());
il.append(new PUSH(cpg, _name.toString()));
- il.append(new ILOAD(parentNode.getIndex()));
+ parentNode.setEnd(il.append(new ILOAD(parentNode.getIndex())));
- // Now get the node value and feck it on the parameter stack
+ // Now get the node value and push it on the parameter stack
il.append(methodGen.loadDOM());
il.append(methodGen.loadCurrentNode());
il.append(new INVOKEINTERFACE(getNodeValue, 2));
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/KeyCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/KeyCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/KeyCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/KeyCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/KeyPattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/KeyPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/KeyPattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/KeyPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LangCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LangCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LangCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LangCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LastCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LastCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LastCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LastCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralAttribute.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralAttribute.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralAttribute.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralAttribute.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralElement.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralElement.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralElement.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralElement.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LiteralExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LocalNameCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LocalNameCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LocalNameCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LocalNameCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LocationPathPattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LocationPathPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LocationPathPattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LocationPathPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LogicalExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LogicalExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/LogicalExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/LogicalExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Makefile.inc b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Makefile.inc
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Makefile.inc
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Makefile.inc
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Message.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Message.java
similarity index 81%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Message.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Message.java
index 81fa111612e..034a26782ef 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Message.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Message.java
@@ -24,6 +24,7 @@
package com.sun.org.apache.xalan.internal.xsltc.compiler;
import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
+import com.sun.org.apache.bcel.internal.generic.INVOKEINTERFACE;
import com.sun.org.apache.bcel.internal.generic.INVOKESPECIAL;
import com.sun.org.apache.bcel.internal.generic.INVOKEVIRTUAL;
import com.sun.org.apache.bcel.internal.generic.InstructionList;
@@ -97,36 +98,41 @@ final class Message extends Instruction {
// Invoke output.setWriter(STRING_WRITER)
il.append(methodGen.loadHandler());
il.append(SWAP);
- il.append(new INVOKEVIRTUAL(
- cpg.addMethodref(OUTPUT_BASE, "setWriter",
- "("+WRITER_SIG+")V")));
+ il.append(new INVOKEINTERFACE(
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "setWriter",
+ "("+WRITER_SIG+")V"), 2));
// Invoke output.setEncoding("UTF-8")
il.append(methodGen.loadHandler());
il.append(new PUSH(cpg, "UTF-8")); // other encodings?
- il.append(new INVOKEVIRTUAL(
- cpg.addMethodref(OUTPUT_BASE, "setEncoding",
- "("+STRING_SIG+")V")));
+ il.append(new INVOKEINTERFACE(
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "setEncoding",
+ "("+STRING_SIG+")V"), 2));
// Invoke output.setOmitXMLDeclaration(true)
il.append(methodGen.loadHandler());
il.append(ICONST_1);
- il.append(new INVOKEVIRTUAL(
- cpg.addMethodref(OUTPUT_BASE, "setOmitXMLDeclaration",
- "(Z)V")));
+ il.append(new INVOKEINTERFACE(
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "setOmitXMLDeclaration",
+ "(Z)V"), 2));
il.append(methodGen.loadHandler());
- il.append(new INVOKEVIRTUAL(
- cpg.addMethodref(OUTPUT_BASE, "startDocument",
- "()V")));
+ il.append(new INVOKEINTERFACE(
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "startDocument",
+ "()V"), 1));
// Inline translation of contents
translateContents(classGen, methodGen);
il.append(methodGen.loadHandler());
- il.append(new INVOKEVIRTUAL(
- cpg.addMethodref(OUTPUT_BASE, "endDocument",
- "()V")));
+ il.append(new INVOKEINTERFACE(
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "endDocument",
+ "()V"), 1));
// Call toString() on StringWriter
il.append(new INVOKEVIRTUAL(
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Mode.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Mode.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Mode.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Mode.java
index 2e76d90144c..66f7a95984f 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Mode.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Mode.java
@@ -553,11 +553,7 @@ for (int i = 0; i < _templates.size(); i++) {
il.append(template.compile(classGen, methodGen));
il.append(RETURN);
- methodGen.stripAttributes(true);
- methodGen.setMaxLocals();
- methodGen.setMaxStack();
- methodGen.removeNOPs();
- classGen.addMethod(methodGen.getMethod());
+ classGen.addMethod(methodGen);
}
private void compileTemplates(ClassGenerator classGen,
@@ -765,12 +761,16 @@ for (int i = 0; i < _templates.size(); i++) {
getClassName(), mainIL,
classGen.getConstantPool());
methodGen.addException("com.sun.org.apache.xalan.internal.xsltc.TransletException");
+ // Insert an extra NOP just to keep "current" from appearing as if it
+ // has a value before the start of the loop.
+ mainIL.append(NOP);
+
// Create a local variable to hold the current node
final LocalVariableGen current;
current = methodGen.addLocalVariable2("current",
com.sun.org.apache.bcel.internal.generic.Type.INT,
- mainIL.getEnd());
+ null);
_currentIndex = current.getIndex();
// Create the "body" instruction list that will eventually hold the
@@ -793,6 +793,11 @@ for (int i = 0; i < _templates.size(); i++) {
ifeq.setTarget(ilLoop.append(RETURN)); // applyTemplates() ends here!
final InstructionHandle ihLoop = ilLoop.getStart();
+ current.setStart(mainIL.append(new GOTO_W(ihLoop)));
+
+ // Live range of "current" ends at end of loop
+ current.setEnd(loop);
+
// Compile default handling of elements (traverse children)
InstructionList ilRecurse =
compileDefaultRecursion(classGen, methodGen, ihLoop);
@@ -1029,18 +1034,12 @@ for (int i = 0; i < _templates.size(); i++) {
body.append(ilText);
// putting together constituent instruction lists
- mainIL.append(new GOTO_W(ihLoop));
mainIL.append(body);
// fall through to ilLoop
mainIL.append(ilLoop);
peepHoleOptimization(methodGen);
- methodGen.stripAttributes(true);
-
- methodGen.setMaxLocals();
- methodGen.setMaxStack();
- methodGen.removeNOPs();
- classGen.addMethod(methodGen.getMethod());
+ classGen.addMethod(methodGen);
// Compile method(s) for for this mode
if (_importLevels != null) {
@@ -1131,11 +1130,11 @@ for (int i = 0; i < _templates.size(); i++) {
final LocalVariableGen current;
current = methodGen.addLocalVariable2("current",
com.sun.org.apache.bcel.internal.generic.Type.INT,
- mainIL.getEnd());
+ null);
_currentIndex = current.getIndex();
- mainIL.append(new ILOAD(methodGen.getLocalIndex(NODE_PNAME)));
- mainIL.append(new ISTORE(_currentIndex));
+ mainIL.append(new ILOAD(methodGen.getLocalIndex(NODE_PNAME)));
+ current.setStart(mainIL.append(new ISTORE(_currentIndex)));
// Create the "body" instruction list that will eventually hold the
// code for the entire method (other ILs will be appended).
@@ -1145,7 +1144,7 @@ for (int i = 0; i < _templates.size(); i++) {
// Create an instruction list that contains the default next-node
// iteration
final InstructionList ilLoop = new InstructionList();
- ilLoop.append(RETURN);
+ ilLoop.append(RETURN);
final InstructionHandle ihLoop = ilLoop.getStart();
// Compile default handling of elements (traverse children)
@@ -1385,16 +1384,15 @@ for (int i = 0; i < _templates.size(); i++) {
// putting together constituent instruction lists
mainIL.append(body);
+
+ // Mark the end of the live range for the "current" variable
+ current.setEnd(body.getEnd());
+
// fall through to ilLoop
mainIL.append(ilLoop);
peepHoleOptimization(methodGen);
- methodGen.stripAttributes(true);
-
- methodGen.setMaxLocals();
- methodGen.setMaxStack();
- methodGen.removeNOPs();
- classGen.addMethod(methodGen.getMethod());
+ classGen.addMethod(methodGen);
// Restore original (complete) set of templates for this transformation
_templates = oldTemplates;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NameBase.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NameBase.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NameBase.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NameBase.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NameCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NameCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NameCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NameCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceAlias.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceAlias.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceAlias.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceAlias.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceUriCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceUriCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceUriCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NamespaceUriCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NodeTest.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NodeTest.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NodeTest.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NodeTest.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NotCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NotCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NotCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NotCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Number.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Number.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Number.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Number.java
index 93d5c399986..9b586ac265a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Number.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Number.java
@@ -323,10 +323,7 @@ final class Number extends Instruction implements Closure {
il.append(new INVOKESPECIAL(index));
il.append(RETURN);
- cons.stripAttributes(true);
- cons.setMaxLocals();
- cons.setMaxStack();
- classGen.addMethod(cons.getMethod());
+ classGen.addMethod(cons);
}
/**
@@ -349,7 +346,7 @@ final class Number extends Instruction implements Closure {
ITERATOR_FIELD_SIG);
il.append(ALOAD_0); // 'this' pointer on stack
il.append(new GETFIELD(field));
- il.append(new ASTORE(local.getIndex()));
+ local.setStart(il.append(new ASTORE(local.getIndex())));
matchGen.setIteratorIndex(local.getIndex());
// Get NodeCounter._translet and store locally
@@ -361,7 +358,7 @@ final class Number extends Instruction implements Closure {
il.append(ALOAD_0); // 'this' pointer on stack
il.append(new GETFIELD(field));
il.append(new CHECKCAST(cpg.addClass(TRANSLET_CLASS)));
- il.append(new ASTORE(local.getIndex()));
+ local.setStart(il.append(new ASTORE(local.getIndex())));
nodeCounterGen.setTransletIndex(local.getIndex());
// Get NodeCounter._document and store locally
@@ -372,7 +369,7 @@ final class Number extends Instruction implements Closure {
il.append(ALOAD_0); // 'this' pointer on stack
il.append(new GETFIELD(field));
// Make sure we have the correct DOM type on the stack!!!
- il.append(new ASTORE(local.getIndex()));
+ local.setStart(il.append(new ASTORE(local.getIndex())));
matchGen.setDomIndex(local.getIndex());
}
@@ -436,11 +433,7 @@ final class Number extends Instruction implements Closure {
_from.synthesize(nodeCounterGen, matchGen);
il.append(IRETURN);
- matchGen.stripAttributes(true);
- matchGen.setMaxLocals();
- matchGen.setMaxStack();
- matchGen.removeNOPs();
- nodeCounterGen.addMethod(matchGen.getMethod());
+ nodeCounterGen.addMethod(matchGen);
}
/*
@@ -467,11 +460,7 @@ final class Number extends Instruction implements Closure {
il.append(IRETURN);
- matchGen.stripAttributes(true);
- matchGen.setMaxLocals();
- matchGen.setMaxStack();
- matchGen.removeNOPs();
- nodeCounterGen.addMethod(matchGen.getMethod());
+ nodeCounterGen.addMethod(matchGen);
}
getXSLTC().dumpClass(nodeCounterGen.getJavaClass());
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NumberCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NumberCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/NumberCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/NumberCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Otherwise.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Otherwise.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Otherwise.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Otherwise.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Output.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Output.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Output.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Output.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Param.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Param.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Param.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Param.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ParameterRef.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ParameterRef.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ParameterRef.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ParameterRef.java
index 762f853a302..ed051fa6607 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ParameterRef.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ParameterRef.java
@@ -84,12 +84,10 @@ final class ParameterRef extends VariableRefBase {
}
else {
il.append(_variable.loadInstruction());
- _variable.removeReference(this);
}
}
else {
il.append(_variable.loadInstruction());
- _variable.removeReference(this);
}
}
else {
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentLocationPath.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentLocationPath.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentLocationPath.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentLocationPath.java
index 6dbd88f3fcc..9ecd74a5aab 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentLocationPath.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentLocationPath.java
@@ -190,15 +190,15 @@ final class ParentLocationPath extends RelativeLocationPath {
LocalVariableGen pathTemp
= methodGen.addLocalVariable("parent_location_path_tmp1",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(pathTemp.getIndex()));
+ null, null);
+ pathTemp.setStart(il.append(new ASTORE(pathTemp.getIndex())));
_step.translate(classGen, methodGen);
LocalVariableGen stepTemp
= methodGen.addLocalVariable("parent_location_path_tmp2",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(stepTemp.getIndex()));
+ null, null);
+ stepTemp.setStart(il.append(new ASTORE(stepTemp.getIndex())));
// Create new StepIterator
final int initSI = cpg.addMethodref(STEP_ITERATOR_CLASS,
@@ -210,8 +210,8 @@ final class ParentLocationPath extends RelativeLocationPath {
il.append(new NEW(cpg.addClass(STEP_ITERATOR_CLASS)));
il.append(DUP);
- il.append(new ALOAD(pathTemp.getIndex()));
- il.append(new ALOAD(stepTemp.getIndex()));
+ pathTemp.setEnd(il.append(new ALOAD(pathTemp.getIndex())));
+ stepTemp.setEnd(il.append(new ALOAD(stepTemp.getIndex())));
// Initialize StepIterator with iterators from the stack
il.append(new INVOKESPECIAL(initSI));
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentPattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentPattern.java
similarity index 93%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentPattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentPattern.java
index eed075058c9..26b01a21980 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentPattern.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ParentPattern.java
@@ -27,6 +27,7 @@ import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
import com.sun.org.apache.bcel.internal.generic.ILOAD;
import com.sun.org.apache.bcel.internal.generic.INVOKEINTERFACE;
import com.sun.org.apache.bcel.internal.generic.ISTORE;
+import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
import com.sun.org.apache.bcel.internal.generic.InstructionList;
import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator;
@@ -77,7 +78,7 @@ final class ParentPattern extends RelativePathPattern {
final LocalVariableGen local =
methodGen.addLocalVariable2("ppt",
Util.getJCRefType(NODE_SIG),
- il.getEnd());
+ null);
final com.sun.org.apache.bcel.internal.generic.Instruction loadLocal =
new ILOAD(local.getIndex());
@@ -90,7 +91,7 @@ final class ParentPattern extends RelativePathPattern {
}
else if (_right instanceof StepPattern) {
il.append(DUP);
- il.append(storeLocal);
+ local.setStart(il.append(storeLocal));
_right.translate(classGen, methodGen);
@@ -119,7 +120,11 @@ final class ParentPattern extends RelativePathPattern {
}
else {
il.append(DUP);
- il.append(storeLocal);
+ InstructionHandle storeInst = il.append(storeLocal);
+
+ if (local.getStart() == null) {
+ local.setStart(storeInst);
+ }
_left.translate(classGen, methodGen);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java
index 47d5e50c205..3cf487aa4ef 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java
@@ -44,6 +44,8 @@ import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.MethodType;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Type;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.TypeCheckError;
+import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.ContentHandler;
@@ -93,8 +95,11 @@ public class Parser implements Constants, ContentHandler {
private int _currentImportPrecedence;
- public Parser(XSLTC xsltc) {
+ private boolean _useServicesMechanism = true;
+
+ public Parser(XSLTC xsltc, boolean useServicesMechanism) {
_xsltc = xsltc;
+ _useServicesMechanism = useServicesMechanism;
}
public void init() {
@@ -306,17 +311,22 @@ public class Parser implements Constants, ContentHandler {
}
else {
Dictionary space = (Dictionary)_namespaces.get(namespace);
+ String lexicalQName =
+ (prefix == null || prefix.length() == 0)
+ ? localname
+ : (prefix + ':' + localname);
+
if (space == null) {
final QName name = new QName(namespace, prefix, localname);
_namespaces.put(namespace, space = new Hashtable());
- space.put(localname, name);
+ space.put(lexicalQName, name);
return name;
}
else {
- QName name = (QName)space.get(localname);
+ QName name = (QName)space.get(lexicalQName);
if (name == null) {
name = new QName(namespace, prefix, localname);
- space.put(localname, name);
+ space.put(lexicalQName, name);
}
return name;
}
@@ -449,7 +459,7 @@ public class Parser implements Constants, ContentHandler {
public SyntaxTreeNode parse(InputSource input) {
try {
// Create a SAX parser and get the XMLReader object it uses
- final SAXParserFactory factory = SAXParserFactory.newInstance();
+ final SAXParserFactory factory = FactoryImpl.getSAXFactory(_useServicesMechanism);
if (_xsltc.isSecureProcessing()) {
try {
@@ -918,8 +928,7 @@ public class Parser implements Constants, ContentHandler {
if (className != null) {
try {
- final Class clazz = ObjectFactory.findProviderClass(
- className, ObjectFactory.findClassLoader(), true);
+ final Class clazz = ObjectFactory.findProviderClass(className, true);
node = (SyntaxTreeNode)clazz.newInstance();
node.setQName(qname);
node.setParser(this);
@@ -1273,7 +1282,7 @@ public class Parser implements Constants, ContentHandler {
// handled at this point in order to correctly generate
// Fallback elements from s.
getSymbolTable().setCurrentNode(element);
- ((Stylesheet)element).excludeExtensionPrefixes(this);
+ ((Stylesheet)element).declareExtensionPrefixes(this);
}
_prefixMapping = null;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Pattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Pattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Pattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Pattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/PositionCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/PositionCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/PositionCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/PositionCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Predicate.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Predicate.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Predicate.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Predicate.java
index 2e10fdef1d3..4327f0de939 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Predicate.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Predicate.java
@@ -412,7 +412,7 @@ final class Predicate extends Expression implements Closure {
il.append(new CHECKCAST(cpg.addClass(className)));
il.append(new GETFIELD(cpg.addFieldref(className,
DOM_FIELD, DOM_INTF_SIG)));
- il.append(new ASTORE(local.getIndex()));
+ local.setStart(il.append(new ASTORE(local.getIndex())));
// Store the dom index in the test generator
testGen.setDomIndex(local.getIndex());
@@ -420,12 +420,8 @@ final class Predicate extends Expression implements Closure {
_exp.translate(filterGen, testGen);
il.append(IRETURN);
- testGen.stripAttributes(true);
- testGen.setMaxLocals();
- testGen.setMaxStack();
- testGen.removeNOPs();
filterGen.addEmptyConstructor(ACC_PUBLIC);
- filterGen.addMethod(testGen.getMethod());
+ filterGen.addMethod(testGen);
getXSLTC().dumpClass(filterGen.getJavaClass());
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstruction.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstruction.java
similarity index 94%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstruction.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstruction.java
index ee00fec6500..53971c91bef 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstruction.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstruction.java
@@ -83,13 +83,14 @@ final class ProcessingInstruction extends Instruction {
if (!_isLiteral) {
// if the ncname is an AVT, then the ncname has to be checked at runtime if it is a valid ncname
- LocalVariableGen nameValue = methodGen.addLocalVariable2("nameValue",
+ LocalVariableGen nameValue =
+ methodGen.addLocalVariable2("nameValue",
Util.getJCRefType(STRING_SIG),
- il.getEnd());
+ null);
// store the name into a variable first so _name.translate only needs to be called once
_name.translate(classGen, methodGen);
- il.append(new ASTORE(nameValue.getIndex()));
+ nameValue.setStart(il.append(new ASTORE(nameValue.getIndex())));
il.append(new ALOAD(nameValue.getIndex()));
// call checkNCName if the name is an AVT
@@ -104,7 +105,7 @@ final class ProcessingInstruction extends Instruction {
il.append(DUP); // first arg to "attributes" call
// load name value again
- il.append(new ALOAD(nameValue.getIndex()));
+ nameValue.setEnd(il.append(new ALOAD(nameValue.getIndex())));
} else {
// Save the current handler base on the stack
il.append(methodGen.loadHandler());
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstructionPattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstructionPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstructionPattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ProcessingInstructionPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/QName.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/QName.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/QName.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/QName.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/RealExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/RealExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/RealExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/RealExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/RelationalExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/RelationalExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/RelationalExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/RelationalExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/RelativeLocationPath.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/RelativeLocationPath.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/RelativeLocationPath.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/RelativeLocationPath.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/RelativePathPattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/RelativePathPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/RelativePathPattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/RelativePathPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/RoundCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/RoundCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/RoundCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/RoundCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SimpleAttributeValue.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/SimpleAttributeValue.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SimpleAttributeValue.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/SimpleAttributeValue.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java
similarity index 94%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java
index 035a1fc0ed9..d8264a23f93 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Sort.java
@@ -270,12 +270,12 @@ final class Sort extends Instruction implements Closure {
LocalVariableGen nodesTemp =
methodGen.addLocalVariable("sort_tmp1",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
+ null, null);
LocalVariableGen sortRecordFactoryTemp =
methodGen.addLocalVariable("sort_tmp2",
Util.getJCRefType(NODE_SORT_FACTORY_SIG),
- il.getEnd(), null);
+ null, null);
// Get the current node iterator
if (nodeSet == null) { // apply-templates default
@@ -291,17 +291,19 @@ final class Sort extends Instruction implements Closure {
nodeSet.translate(classGen, methodGen);
}
- il.append(new ASTORE(nodesTemp.getIndex()));
+ nodesTemp.setStart(il.append(new ASTORE(nodesTemp.getIndex())));
// Compile the code for the NodeSortRecord producing class and pass
// that as the last argument to the SortingIterator constructor.
compileSortRecordFactory(sortObjects, classGen, methodGen);
- il.append(new ASTORE(sortRecordFactoryTemp.getIndex()));
+ sortRecordFactoryTemp.setStart(
+ il.append(new ASTORE(sortRecordFactoryTemp.getIndex())));
il.append(new NEW(cpg.addClass(SORT_ITERATOR)));
il.append(DUP);
- il.append(new ALOAD(nodesTemp.getIndex()));
- il.append(new ALOAD(sortRecordFactoryTemp.getIndex()));
+ nodesTemp.setEnd(il.append(new ALOAD(nodesTemp.getIndex())));
+ sortRecordFactoryTemp.setEnd(
+ il.append(new ALOAD(sortRecordFactoryTemp.getIndex())));
il.append(new INVOKESPECIAL(init));
}
@@ -346,7 +348,7 @@ final class Sort extends Instruction implements Closure {
LocalVariableGen sortOrderTemp
= methodGen.addLocalVariable("sort_order_tmp",
Util.getJCRefType("[" + STRING_SIG),
- il.getEnd(), null);
+ null, null);
il.append(new PUSH(cpg, nsorts));
il.append(new ANEWARRAY(cpg.addClass(STRING)));
for (int level = 0; level < nsorts; level++) {
@@ -356,12 +358,12 @@ final class Sort extends Instruction implements Closure {
sort.translateSortOrder(classGen, methodGen);
il.append(AASTORE);
}
- il.append(new ASTORE(sortOrderTemp.getIndex()));
+ sortOrderTemp.setStart(il.append(new ASTORE(sortOrderTemp.getIndex())));
LocalVariableGen sortTypeTemp
= methodGen.addLocalVariable("sort_type_tmp",
Util.getJCRefType("[" + STRING_SIG),
- il.getEnd(), null);
+ null, null);
il.append(new PUSH(cpg, nsorts));
il.append(new ANEWARRAY(cpg.addClass(STRING)));
for (int level = 0; level < nsorts; level++) {
@@ -371,12 +373,12 @@ final class Sort extends Instruction implements Closure {
sort.translateSortType(classGen, methodGen);
il.append(AASTORE);
}
- il.append(new ASTORE(sortTypeTemp.getIndex()));
+ sortTypeTemp.setStart(il.append(new ASTORE(sortTypeTemp.getIndex())));
LocalVariableGen sortLangTemp
= methodGen.addLocalVariable("sort_lang_tmp",
Util.getJCRefType("[" + STRING_SIG),
- il.getEnd(), null);
+ null, null);
il.append(new PUSH(cpg, nsorts));
il.append(new ANEWARRAY(cpg.addClass(STRING)));
for (int level = 0; level < nsorts; level++) {
@@ -386,12 +388,12 @@ final class Sort extends Instruction implements Closure {
sort.translateLang(classGen, methodGen);
il.append(AASTORE);
}
- il.append(new ASTORE(sortLangTemp.getIndex()));
+ sortLangTemp.setStart(il.append(new ASTORE(sortLangTemp.getIndex())));
LocalVariableGen sortCaseOrderTemp
= methodGen.addLocalVariable("sort_case_order_tmp",
Util.getJCRefType("[" + STRING_SIG),
- il.getEnd(), null);
+ null, null);
il.append(new PUSH(cpg, nsorts));
il.append(new ANEWARRAY(cpg.addClass(STRING)));
for (int level = 0; level < nsorts; level++) {
@@ -401,7 +403,8 @@ final class Sort extends Instruction implements Closure {
sort.translateCaseOrder(classGen, methodGen);
il.append(AASTORE);
}
- il.append(new ASTORE(sortCaseOrderTemp.getIndex()));
+ sortCaseOrderTemp.setStart(
+ il.append(new ASTORE(sortCaseOrderTemp.getIndex())));
il.append(new NEW(cpg.addClass(sortRecordFactoryClass)));
il.append(DUP);
@@ -409,10 +412,11 @@ final class Sort extends Instruction implements Closure {
il.append(new PUSH(cpg, sortRecordClass));
il.append(classGen.loadTranslet());
- il.append(new ALOAD(sortOrderTemp.getIndex()));
- il.append(new ALOAD(sortTypeTemp.getIndex()));
- il.append(new ALOAD(sortLangTemp.getIndex()));
- il.append(new ALOAD(sortCaseOrderTemp.getIndex()));
+ sortOrderTemp.setEnd(il.append(new ALOAD(sortOrderTemp.getIndex())));
+ sortTypeTemp.setEnd(il.append(new ALOAD(sortTypeTemp.getIndex())));
+ sortLangTemp.setEnd(il.append(new ALOAD(sortLangTemp.getIndex())));
+ sortCaseOrderTemp.setEnd(
+ il.append(new ALOAD(sortCaseOrderTemp.getIndex())));
il.append(new INVOKESPECIAL(
cpg.addMethodref(sortRecordFactoryClass, "",
@@ -584,10 +588,10 @@ final class Sort extends Instruction implements Closure {
constructor.setMaxLocals();
constructor.setMaxStack();
- sortRecordFactory.addMethod(constructor.getMethod());
+ sortRecordFactory.addMethod(constructor);
makeNodeSortRecord.setMaxLocals();
makeNodeSortRecord.setMaxStack();
- sortRecordFactory.addMethod(makeNodeSortRecord.getMethod());
+ sortRecordFactory.addMethod(makeNodeSortRecord);
xsltc.dumpClass(sortRecordFactory.getJavaClass());
return className;
@@ -640,9 +644,9 @@ final class Sort extends Instruction implements Closure {
}
}
- Method init = compileInit(sortObjects, sortRecord,
+ MethodGenerator init = compileInit(sortObjects, sortRecord,
cpg, className);
- Method extract = compileExtract(sortObjects, sortRecord,
+ MethodGenerator extract = compileExtract(sortObjects, sortRecord,
cpg, className);
sortRecord.addMethod(init);
sortRecord.addMethod(extract);
@@ -656,7 +660,7 @@ final class Sort extends Instruction implements Closure {
* collator in the super calls only when the stylesheet specifies a new
* language in xsl:sort.
*/
- private static Method compileInit(Vector sortObjects,
+ private static MethodGenerator compileInit(Vector sortObjects,
NodeSortRecordGenerator sortRecord,
ConstantPoolGen cpg,
String className)
@@ -677,18 +681,14 @@ final class Sort extends Instruction implements Closure {
il.append(RETURN);
- init.stripAttributes(true);
- init.setMaxLocals();
- init.setMaxStack();
-
- return init.getMethod();
+ return init;
}
/**
* Compiles a method that overloads NodeSortRecord.extractValueFromDOM()
*/
- private static Method compileExtract(Vector sortObjects,
+ private static MethodGenerator compileExtract(Vector sortObjects,
NodeSortRecordGenerator sortRecord,
ConstantPoolGen cpg,
String className) {
@@ -745,11 +745,6 @@ final class Sort extends Instruction implements Closure {
il.append(ARETURN);
}
- extractMethod.stripAttributes(true);
- extractMethod.setMaxLocals();
- extractMethod.setMaxStack();
- extractMethod.removeNOPs();
-
- return extractMethod.getMethod();
+ return extractMethod;
}
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SourceLoader.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/SourceLoader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SourceLoader.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/SourceLoader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/StartsWithCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StartsWithCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/StartsWithCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StartsWithCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Step.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Step.java
similarity index 95%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Step.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Step.java
index 05f8c110291..cca28f90a9d 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Step.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Step.java
@@ -447,20 +447,24 @@ final class Step extends RelativeLocationPath {
LocalVariableGen iteratorTemp
= methodGen.addLocalVariable("step_tmp1",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(iteratorTemp.getIndex()));
+ null, null);
+ iteratorTemp.setStart(
+ il.append(new ASTORE(iteratorTemp.getIndex())));
predicate.translate(classGen, methodGen);
LocalVariableGen predicateValueTemp
= methodGen.addLocalVariable("step_tmp2",
Util.getJCRefType("I"),
- il.getEnd(), null);
- il.append(new ISTORE(predicateValueTemp.getIndex()));
+ null, null);
+ predicateValueTemp.setStart(
+ il.append(new ISTORE(predicateValueTemp.getIndex())));
il.append(new NEW(cpg.addClass(NTH_ITERATOR_CLASS)));
il.append(DUP);
- il.append(new ALOAD(iteratorTemp.getIndex()));
- il.append(new ILOAD(predicateValueTemp.getIndex()));
+ iteratorTemp.setEnd(
+ il.append(new ALOAD(iteratorTemp.getIndex())));
+ predicateValueTemp.setEnd(
+ il.append(new ILOAD(predicateValueTemp.getIndex())));
il.append(new INVOKESPECIAL(idx));
}
else {
@@ -486,22 +490,24 @@ final class Step extends RelativeLocationPath {
LocalVariableGen iteratorTemp
= methodGen.addLocalVariable("step_tmp1",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(iteratorTemp.getIndex()));
+ null, null);
+ iteratorTemp.setStart(
+ il.append(new ASTORE(iteratorTemp.getIndex())));
predicate.translateFilter(classGen, methodGen);
LocalVariableGen filterTemp
= methodGen.addLocalVariable("step_tmp2",
Util.getJCRefType(CURRENT_NODE_LIST_FILTER_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(filterTemp.getIndex()));
-
+ null, null);
+ filterTemp.setStart(
+ il.append(new ASTORE(filterTemp.getIndex())));
// create new CurrentNodeListIterator
il.append(new NEW(cpg.addClass(CURRENT_NODE_LIST_ITERATOR)));
il.append(DUP);
- il.append(new ALOAD(iteratorTemp.getIndex()));
- il.append(new ALOAD(filterTemp.getIndex()));
+ iteratorTemp.setEnd(
+ il.append(new ALOAD(iteratorTemp.getIndex())));
+ filterTemp.setEnd(il.append(new ALOAD(filterTemp.getIndex())));
il.append(methodGen.loadCurrentNode());
il.append(classGen.loadTranslet());
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/StepPattern.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StepPattern.java
similarity index 94%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/StepPattern.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StepPattern.java
index f817ce40a12..82582ae24bc 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/StepPattern.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StepPattern.java
@@ -328,8 +328,8 @@ class StepPattern extends RelativePathPattern {
LocalVariableGen match;
match = methodGen.addLocalVariable("step_pattern_tmp1",
Util.getJCRefType(NODE_SIG),
- il.getEnd(), null);
- il.append(new ISTORE(match.getIndex()));
+ null, null);
+ match.setStart(il.append(new ISTORE(match.getIndex())));
// If pattern not reduced then check kernel
if (!_isEpsilon) {
@@ -358,13 +358,15 @@ class StepPattern extends RelativePathPattern {
LocalVariableGen stepIteratorTemp =
methodGen.addLocalVariable("step_pattern_tmp2",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
- il.append(new ASTORE(stepIteratorTemp.getIndex()));
+ null, null);
+ stepIteratorTemp.setStart(
+ il.append(new ASTORE(stepIteratorTemp.getIndex())));
il.append(new NEW(cpg.addClass(MATCHING_ITERATOR)));
il.append(DUP);
il.append(new ILOAD(match.getIndex()));
- il.append(new ALOAD(stepIteratorTemp.getIndex()));
+ stepIteratorTemp.setEnd(
+ il.append(new ALOAD(stepIteratorTemp.getIndex())));
il.append(new INVOKESPECIAL(index));
// Get the parent of the matching node
@@ -378,7 +380,7 @@ class StepPattern extends RelativePathPattern {
// Overwrite current iterator and current node
il.append(methodGen.storeIterator());
- il.append(new ILOAD(match.getIndex()));
+ match.setEnd(il.append(new ILOAD(match.getIndex())));
il.append(methodGen.storeCurrentNode());
// Translate the expression of the predicate
@@ -415,13 +417,13 @@ class StepPattern extends RelativePathPattern {
// Store node on the stack into a local variable
node = methodGen.addLocalVariable("step_pattern_tmp1",
Util.getJCRefType(NODE_SIG),
- il.getEnd(), null);
- il.append(new ISTORE(node.getIndex()));
+ null, null);
+ node.setStart(il.append(new ISTORE(node.getIndex())));
// Create a new local to store the iterator
iter = methodGen.addLocalVariable("step_pattern_tmp2",
Util.getJCRefType(NODE_ITERATOR_SIG),
- il.getEnd(), null);
+ null, null);
// Add a new private field if this is the main class
if (!classGen.isExternal()) {
@@ -438,20 +440,24 @@ class StepPattern extends RelativePathPattern {
il.append(classGen.loadTranslet());
il.append(new GETFIELD(iteratorIndex));
il.append(DUP);
- il.append(new ASTORE(iter.getIndex()));
+ iter.setStart(il.append(new ASTORE(iter.getIndex())));
ifBlock = il.append(new IFNONNULL(null));
il.append(classGen.loadTranslet());
}
// Compile the step created at type checking time
_step.translate(classGen, methodGen);
- il.append(new ASTORE(iter.getIndex()));
+ InstructionHandle iterStore = il.append(new ASTORE(iter.getIndex()));
// If in the main class update the field too
if (!classGen.isExternal()) {
il.append(new ALOAD(iter.getIndex()));
il.append(new PUTFIELD(iteratorIndex));
ifBlock.setTarget(il.append(NOP));
+ } else {
+ // If class is not external, start of range for iter variable was
+ // set above
+ iter.setStart(iterStore);
}
// Get the parent of the node on the stack
@@ -478,10 +484,11 @@ class StepPattern extends RelativePathPattern {
InstructionHandle begin, next;
node2 = methodGen.addLocalVariable("step_pattern_tmp3",
Util.getJCRefType(NODE_SIG),
- il.getEnd(), null);
+ null, null);
skipNext = il.append(new GOTO(null));
next = il.append(new ALOAD(iter.getIndex()));
+ node2.setStart(next);
begin = il.append(methodGen.nextNode());
il.append(DUP);
il.append(new ISTORE(node2.getIndex()));
@@ -489,10 +496,10 @@ class StepPattern extends RelativePathPattern {
il.append(new ILOAD(node2.getIndex()));
il.append(new ILOAD(node.getIndex()));
- il.append(new IF_ICMPLT(next));
+ iter.setEnd(il.append(new IF_ICMPLT(next)));
- il.append(new ILOAD(node2.getIndex()));
- il.append(new ILOAD(node.getIndex()));
+ node2.setEnd(il.append(new ILOAD(node2.getIndex())));
+ node.setEnd(il.append(new ILOAD(node.getIndex())));
_falseList.add(il.append(new IF_ICMPNE(null)));
skipNext.setTarget(begin);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/StringCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/StringCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/StringLengthCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Stylesheet.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Stylesheet.java
similarity index 92%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Stylesheet.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Stylesheet.java
index d47d9e03c91..2c244e151eb 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Stylesheet.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Stylesheet.java
@@ -23,9 +23,6 @@
package com.sun.org.apache.xalan.internal.xsltc.compiler;
-import java.net.URL;
-import java.net.MalformedURLException;
-
import java.util.Vector;
import java.util.Enumeration;
import java.util.Hashtable;
@@ -203,8 +200,9 @@ public final class Stylesheet extends SyntaxTreeNode {
/**
* Set to true to enable template inlining optimization.
+ * @see XSLTC#_templateInlining
*/
- private boolean _templateInlining = true;
+ private boolean _templateInlining = false;
/**
* A reference to the last xsl:output object found in the styleshet.
@@ -467,11 +465,11 @@ public final class Stylesheet extends SyntaxTreeNode {
for (int i = 0; i < n; i++) {
final Template template = (Template)templates.elementAt(i);
if (template.hasParams()) {
- _hasLocalParams = new Boolean(true);
+ _hasLocalParams = Boolean.TRUE;
return true;
}
}
- _hasLocalParams = new Boolean(false);
+ _hasLocalParams = Boolean.FALSE;
return false;
}
else {
@@ -509,15 +507,9 @@ public final class Stylesheet extends SyntaxTreeNode {
return (_extensions.get(uri) != null);
}
- public void excludeExtensionPrefixes(Parser parser) {
+ public void declareExtensionPrefixes(Parser parser) {
final SymbolTable stable = parser.getSymbolTable();
- final String excludePrefixes = getAttribute("exclude-result-prefixes");
final String extensionPrefixes = getAttribute("extension-element-prefixes");
-
- // Exclude XSLT uri
- stable.excludeURI(Constants.XSLT_URI);
- stable.excludeNamespaces(excludePrefixes);
- stable.excludeNamespaces(extensionPrefixes);
extensionURI(extensionPrefixes, stable);
}
@@ -571,6 +563,16 @@ public final class Stylesheet extends SyntaxTreeNode {
* Parse all direct children of the element.
*/
public final void parseOwnChildren(Parser parser) {
+ final SymbolTable stable = parser.getSymbolTable();
+ final String excludePrefixes = getAttribute("exclude-result-prefixes");
+ final String extensionPrefixes = getAttribute("extension-element-prefixes");
+
+ // Exclude XSLT uri
+ stable.pushExcludedNamespacesContext();
+ stable.excludeURI(Constants.XSLT_URI);
+ stable.excludeNamespaces(excludePrefixes);
+ stable.excludeNamespaces(extensionPrefixes);
+
final Vector contents = getContents();
final int count = contents.size();
@@ -602,6 +604,8 @@ public final class Stylesheet extends SyntaxTreeNode {
template.setName(parser.getQName(name));
}
}
+
+ stable.popExcludedNamespacesContext();
}
public void processModes() {
@@ -801,81 +805,99 @@ public final class Stylesheet extends SyntaxTreeNode {
}
}
+ staticConst.markChunkStart();
il.append(new PUSH(cpg, size));
il.append(new ANEWARRAY(cpg.addClass(STRING)));
+ int namesArrayRef = cpg.addFieldref(_className,
+ STATIC_NAMES_ARRAY_FIELD,
+ NAMES_INDEX_SIG);
+ il.append(new PUTSTATIC(namesArrayRef));
+ staticConst.markChunkEnd();
for (int i = 0; i < size; i++) {
final String name = namesArray[i];
- il.append(DUP);
+ staticConst.markChunkStart();
+ il.append(new GETSTATIC(namesArrayRef));
il.append(new PUSH(cpg, i));
il.append(new PUSH(cpg, name));
il.append(AASTORE);
+ staticConst.markChunkEnd();
}
- il.append(new PUTSTATIC(cpg.addFieldref(_className,
- STATIC_NAMES_ARRAY_FIELD,
- NAMES_INDEX_SIG)));
+ staticConst.markChunkStart();
il.append(new PUSH(cpg, size));
il.append(new ANEWARRAY(cpg.addClass(STRING)));
+ int urisArrayRef = cpg.addFieldref(_className,
+ STATIC_URIS_ARRAY_FIELD,
+ URIS_INDEX_SIG);
+ il.append(new PUTSTATIC(urisArrayRef));
+ staticConst.markChunkEnd();
for (int i = 0; i < size; i++) {
final String uri = urisArray[i];
- il.append(DUP);
+ staticConst.markChunkStart();
+ il.append(new GETSTATIC(urisArrayRef));
il.append(new PUSH(cpg, i));
il.append(new PUSH(cpg, uri));
il.append(AASTORE);
+ staticConst.markChunkEnd();
}
- il.append(new PUTSTATIC(cpg.addFieldref(_className,
- STATIC_URIS_ARRAY_FIELD,
- URIS_INDEX_SIG)));
+ staticConst.markChunkStart();
il.append(new PUSH(cpg, size));
il.append(new NEWARRAY(BasicType.INT));
+ int typesArrayRef = cpg.addFieldref(_className,
+ STATIC_TYPES_ARRAY_FIELD,
+ TYPES_INDEX_SIG);
+ il.append(new PUTSTATIC(typesArrayRef));
+ staticConst.markChunkEnd();
for (int i = 0; i < size; i++) {
final int nodeType = typesArray[i];
- il.append(DUP);
+ staticConst.markChunkStart();
+ il.append(new GETSTATIC(typesArrayRef));
il.append(new PUSH(cpg, i));
il.append(new PUSH(cpg, nodeType));
il.append(IASTORE);
}
- il.append(new PUTSTATIC(cpg.addFieldref(_className,
- STATIC_TYPES_ARRAY_FIELD,
- TYPES_INDEX_SIG)));
// Put the namespace names array into the translet
final Vector namespaces = getXSLTC().getNamespaceIndex();
+ staticConst.markChunkStart();
il.append(new PUSH(cpg, namespaces.size()));
il.append(new ANEWARRAY(cpg.addClass(STRING)));
+ int namespaceArrayRef = cpg.addFieldref(_className,
+ STATIC_NAMESPACE_ARRAY_FIELD,
+ NAMESPACE_INDEX_SIG);
+ il.append(new PUTSTATIC(namespaceArrayRef));
+ staticConst.markChunkEnd();
for (int i = 0; i < namespaces.size(); i++) {
final String ns = (String)namespaces.elementAt(i);
- il.append(DUP);
+ staticConst.markChunkStart();
+ il.append(new GETSTATIC(namespaceArrayRef));
il.append(new PUSH(cpg, i));
il.append(new PUSH(cpg, ns));
il.append(AASTORE);
+ staticConst.markChunkEnd();
}
- il.append(new PUTSTATIC(cpg.addFieldref(_className,
- STATIC_NAMESPACE_ARRAY_FIELD,
- NAMESPACE_INDEX_SIG)));
// Grab all the literal text in the stylesheet and put it in a char[]
final int charDataCount = getXSLTC().getCharacterDataCount();
final int toCharArray = cpg.addMethodref(STRING, "toCharArray", "()[C");
for (int i = 0; i < charDataCount; i++) {
+ staticConst.markChunkStart();
il.append(new PUSH(cpg, getXSLTC().getCharacterData(i)));
il.append(new INVOKEVIRTUAL(toCharArray));
il.append(new PUTSTATIC(cpg.addFieldref(_className,
STATIC_CHAR_DATA_FIELD+i,
STATIC_CHAR_DATA_FIELD_SIG)));
+ staticConst.markChunkEnd();
}
il.append(RETURN);
- staticConst.stripAttributes(true);
- staticConst.setMaxLocals();
- staticConst.setMaxStack();
- classGen.addMethod(staticConst.getMethod());
+ classGen.addMethod(staticConst);
}
@@ -898,6 +920,7 @@ public final class Stylesheet extends SyntaxTreeNode {
il.append(new INVOKESPECIAL(cpg.addMethodref(TRANSLET_CLASS,
"", "()V")));
+ constructor.markChunkStart();
il.append(classGen.loadTranslet());
il.append(new GETSTATIC(cpg.addFieldref(_className,
STATIC_NAMES_ARRAY_FIELD,
@@ -913,7 +936,9 @@ public final class Stylesheet extends SyntaxTreeNode {
il.append(new PUTFIELD(cpg.addFieldref(TRANSLET_CLASS,
URIS_INDEX,
URIS_INDEX_SIG)));
+ constructor.markChunkEnd();
+ constructor.markChunkStart();
il.append(classGen.loadTranslet());
il.append(new GETSTATIC(cpg.addFieldref(_className,
STATIC_TYPES_ARRAY_FIELD,
@@ -921,7 +946,9 @@ public final class Stylesheet extends SyntaxTreeNode {
il.append(new PUTFIELD(cpg.addFieldref(TRANSLET_CLASS,
TYPES_INDEX,
TYPES_INDEX_SIG)));
+ constructor.markChunkEnd();
+ constructor.markChunkStart();
il.append(classGen.loadTranslet());
il.append(new GETSTATIC(cpg.addFieldref(_className,
STATIC_NAMESPACE_ARRAY_FIELD,
@@ -929,38 +956,45 @@ public final class Stylesheet extends SyntaxTreeNode {
il.append(new PUTFIELD(cpg.addFieldref(TRANSLET_CLASS,
NAMESPACE_INDEX,
NAMESPACE_INDEX_SIG)));
+ constructor.markChunkEnd();
+ constructor.markChunkStart();
il.append(classGen.loadTranslet());
il.append(new PUSH(cpg, AbstractTranslet.CURRENT_TRANSLET_VERSION));
il.append(new PUTFIELD(cpg.addFieldref(TRANSLET_CLASS,
TRANSLET_VERSION_INDEX,
TRANSLET_VERSION_INDEX_SIG)));
+ constructor.markChunkEnd();
if (_hasIdCall) {
+ constructor.markChunkStart();
il.append(classGen.loadTranslet());
il.append(new PUSH(cpg, Boolean.TRUE));
il.append(new PUTFIELD(cpg.addFieldref(TRANSLET_CLASS,
HASIDCALL_INDEX,
HASIDCALL_INDEX_SIG)));
+ constructor.markChunkEnd();
}
// Compile in code to set the output configuration from
if (output != null) {
// Set all the output settings files in the translet
+ constructor.markChunkStart();
output.translate(classGen, constructor);
+ constructor.markChunkEnd();
}
// Compile default decimal formatting symbols.
// This is an implicit, nameless xsl:decimal-format top-level element.
- if (_numberFormattingUsed)
+ if (_numberFormattingUsed) {
+ constructor.markChunkStart();
DecimalFormatting.translateDefaultDFS(classGen, constructor);
+ constructor.markChunkEnd();
+ }
il.append(RETURN);
- constructor.stripAttributes(true);
- constructor.setMaxLocals();
- constructor.setMaxStack();
- classGen.addMethod(constructor.getMethod());
+ classGen.addMethod(constructor);
}
/**
@@ -1000,25 +1034,23 @@ public final class Stylesheet extends SyntaxTreeNode {
toplevel.addException("com.sun.org.apache.xalan.internal.xsltc.TransletException");
+ // Define and initialize 'current' variable with the root node
+ final LocalVariableGen current =
+ toplevel.addLocalVariable("current",
+ com.sun.org.apache.bcel.internal.generic.Type.INT,
+ null, null);
+
final int setFilter = cpg.addInterfaceMethodref(DOM_INTF,
"setFilter",
"(Lcom/sun/org/apache/xalan/internal/xsltc/StripFilter;)V");
- // Define and initialize 'current' variable with the root node
- final LocalVariableGen current =
- toplevel.addLocalVariable("current",
- com.sun.org.apache.bcel.internal.generic.Type.INT,
- il.getEnd(), null);
-
- // Get root node from main DOM by calling dom.getIterator().next()
final int gitr = cpg.addInterfaceMethodref(DOM_INTF,
- "getIterator", "()"+NODE_ITERATOR_SIG);
- final int next = cpg.addInterfaceMethodref(NODE_ITERATOR,
- "next", "()I");
+ "getIterator",
+ "()"+NODE_ITERATOR_SIG);
il.append(toplevel.loadDOM());
il.append(new INVOKEINTERFACE(gitr, 1));
- il.append(new INVOKEINTERFACE(next, 1));
- il.append(new ISTORE(current.getIndex()));
+ il.append(toplevel.nextNode());
+ current.setStart(il.append(new ISTORE(current.getIndex())));
// Create a new list containing variables/params + keys
Vector varDepElements = new Vector(_globals);
@@ -1073,12 +1105,7 @@ public final class Stylesheet extends SyntaxTreeNode {
il.append(RETURN);
// Compute max locals + stack and add method to class
- toplevel.stripAttributes(true);
- toplevel.setMaxLocals();
- toplevel.setMaxStack();
- toplevel.removeNOPs();
-
- classGen.addMethod(toplevel.getMethod());
+ classGen.addMethod(toplevel);
return("("+DOM_INTF_SIG+NODE_ITERATOR_SIG+TRANSLET_OUTPUT_SIG+")V");
}
@@ -1233,7 +1260,7 @@ public final class Stylesheet extends SyntaxTreeNode {
final LocalVariableGen current =
transf.addLocalVariable("current",
com.sun.org.apache.bcel.internal.generic.Type.INT,
- il.getEnd(), null);
+ null, null);
final String applyTemplatesSig = classGen.getApplyTemplatesSig();
final int applyTemplates = cpg.addMethodref(getClassName(),
"applyTemplates",
@@ -1270,6 +1297,15 @@ public final class Stylesheet extends SyntaxTreeNode {
//store to _dom variable
il.append(new PUTFIELD(domField));
+ // continue with globals initialization
+ final int gitr = cpg.addInterfaceMethodref(DOM_INTF,
+ "getIterator",
+ "()"+NODE_ITERATOR_SIG);
+ il.append(transf.loadDOM());
+ il.append(new INVOKEINTERFACE(gitr, 1));
+ il.append(transf.nextNode());
+ current.setStart(il.append(new ISTORE(current.getIndex())));
+
// Transfer the output settings to the output post-processor
il.append(classGen.loadTranslet());
il.append(transf.loadHandler());
@@ -1326,12 +1362,8 @@ public final class Stylesheet extends SyntaxTreeNode {
il.append(RETURN);
// Compute max locals + stack and add method to class
- transf.stripAttributes(true);
- transf.setMaxLocals();
- transf.setMaxStack();
- transf.removeNOPs();
+ classGen.addMethod(transf);
- classGen.addMethod(transf.getMethod());
}
/**
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SymbolTable.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/SymbolTable.java
similarity index 86%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SymbolTable.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/SymbolTable.java
index f4eb7c4a3e2..9a59fe26731 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SymbolTable.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/SymbolTable.java
@@ -24,6 +24,7 @@
package com.sun.org.apache.xalan.internal.xsltc.compiler;
import java.util.Hashtable;
+import java.util.Stack;
import java.util.StringTokenizer;
import java.util.Vector;
@@ -46,6 +47,7 @@ final class SymbolTable {
private Hashtable _attributeSets = null;
private Hashtable _aliases = null;
private Hashtable _excludedURI = null;
+ private Stack _excludedURIStack = null;
private Hashtable _decimalFormats = null;
private Hashtable _keys = null;
@@ -158,7 +160,7 @@ final class SymbolTable {
private int _nsCounter = 0;
public String generateNamespacePrefix() {
- return(new String("ns"+(_nsCounter++)));
+ return("ns"+(_nsCounter++));
}
/**
@@ -261,5 +263,33 @@ final class SymbolTable {
}
}
}
+ /**
+ * Exclusion of namespaces by a stylesheet does not extend to any stylesheet
+ * imported or included by the stylesheet. Upon entering the context of a
+ * new stylesheet, a call to this method is needed to clear the current set
+ * of excluded namespaces temporarily. Every call to this method requires
+ * a corresponding call to {@link #popExcludedNamespacesContext()}.
+ */
+ public void pushExcludedNamespacesContext() {
+ if (_excludedURIStack == null) {
+ _excludedURIStack = new Stack();
+ }
+ _excludedURIStack.push(_excludedURI);
+ _excludedURI = null;
+ }
+
+ /**
+ * Exclusion of namespaces by a stylesheet does not extend to any stylesheet
+ * imported or included by the stylesheet. Upon exiting the context of a
+ * stylesheet, a call to this method is needed to restore the set of
+ * excluded namespaces that was in effect prior to entering the context of
+ * the current stylesheet.
+ */
+ public void popExcludedNamespacesContext() {
+ _excludedURI = (Hashtable) _excludedURIStack.pop();
+ if (_excludedURIStack.isEmpty()) {
+ _excludedURIStack = null;
+ }
+ }
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SyntaxTreeNode.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/SyntaxTreeNode.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SyntaxTreeNode.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/SyntaxTreeNode.java
index 092d5979ace..a14aac61b91 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SyntaxTreeNode.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/SyntaxTreeNode.java
@@ -512,9 +512,12 @@ public abstract class SyntaxTreeNode implements Constants {
MethodGenerator methodGen) {
// Call translate() on all child nodes
final int n = elementCount();
+
for (int i = 0; i < n; i++) {
+ methodGen.markChunkStart();
final SyntaxTreeNode item = (SyntaxTreeNode)_contents.elementAt(i);
item.translate(classGen, methodGen);
+ methodGen.markChunkEnd();
}
// After translation, unmap any registers for any variables/parameters
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Template.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Template.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Template.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Template.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/TestSeq.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/TestSeq.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/TestSeq.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/TestSeq.java
index 3f06a36ba46..72164de6c34 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/TestSeq.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/TestSeq.java
@@ -108,10 +108,10 @@ final class TestSeq {
(LocationPathPattern) _patterns.elementAt(i);
if (i == 0) {
- result.append("Testseq for kernel " + _kernelType)
+ result.append("Testseq for kernel ").append(_kernelType)
.append('\n');
}
- result.append(" pattern " + i + ": ")
+ result.append(" pattern ").append(i).append(": ")
.append(pattern.toString())
.append('\n');
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Text.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Text.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Text.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Text.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/TopLevelElement.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/TopLevelElement.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/TopLevelElement.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/TopLevelElement.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/TransletOutput.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/TransletOutput.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/TransletOutput.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/TransletOutput.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UnaryOpExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UnaryOpExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UnaryOpExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UnaryOpExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UnionPathExpr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UnionPathExpr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UnionPathExpr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UnionPathExpr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UnparsedEntityUriCall.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UnparsedEntityUriCall.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UnparsedEntityUriCall.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UnparsedEntityUriCall.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UnresolvedRef.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UnresolvedRef.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UnresolvedRef.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UnresolvedRef.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UnsupportedElement.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UnsupportedElement.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UnsupportedElement.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UnsupportedElement.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UseAttributeSets.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UseAttributeSets.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/UseAttributeSets.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/UseAttributeSets.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ValueOf.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ValueOf.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ValueOf.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/ValueOf.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Variable.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Variable.java
similarity index 90%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Variable.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Variable.java
index f925c54f265..3226a36a898 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Variable.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Variable.java
@@ -28,6 +28,7 @@ import com.sun.org.apache.bcel.internal.generic.ACONST_NULL;
import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
import com.sun.org.apache.bcel.internal.generic.DCONST;
import com.sun.org.apache.bcel.internal.generic.ICONST;
+import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
import com.sun.org.apache.bcel.internal.generic.InstructionList;
import com.sun.org.apache.bcel.internal.generic.PUTFIELD;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.BooleanType;
@@ -128,7 +129,7 @@ final class Variable extends VariableBase {
if (_local == null) {
_local = methodGen.addLocalVariable2(getEscapedName(),
_type.toJCType(),
- il.getEnd());
+ null);
}
// Push the default value on the JVM's stack
if ((_type instanceof IntType) ||
@@ -139,7 +140,10 @@ final class Variable extends VariableBase {
il.append(new DCONST(0)); // 0.0 for floating point numbers
else
il.append(new ACONST_NULL()); // and 'null' for anything else
- il.append(_type.STORE(_local.getIndex()));
+
+ // Mark the store as the start of the live range of the variable
+ _local.setStart(il.append(_type.STORE(_local.getIndex())));
+
}
}
@@ -163,10 +167,20 @@ final class Variable extends VariableBase {
translateValue(classGen, methodGen);
// Add a new local variable and store value
- if (_local == null) {
+ boolean createLocal = _local == null;
+ if (createLocal) {
mapRegister(methodGen);
}
+ InstructionHandle storeInst =
il.append(_type.STORE(_local.getIndex()));
+
+ // If the local is just being created, mark the store as the start
+ // of its live range. Note that it might have been created by
+ // initializeVariables already, which would have set the start of
+ // the live range already.
+ if (createLocal) {
+ _local.setStart(storeInst);
+ }
}
else {
String signature = _type.toSignature();
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableBase.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableBase.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableBase.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableBase.java
index eb498e3dc72..7ef4c1cabd6 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableBase.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableBase.java
@@ -83,14 +83,6 @@ class VariableBase extends TopLevelElement {
_refs.addElement(vref);
}
- /**
- * Remove a reference to this variable. Called by VariableRef when this
- * variable goes out of scope.
- */
- public void removeReference(VariableRefBase vref) {
- _refs.remove(vref);
- }
-
/**
* When a variable is overriden by another, e.g. via xsl:import,
* its references need to be copied or otherwise it may be
@@ -121,7 +113,7 @@ class VariableBase extends TopLevelElement {
* Called when we leave the AST scope of the variable's declaration
*/
public void unmapRegister(MethodGenerator methodGen) {
- if (_refs.isEmpty() && (_local != null)) {
+ if (_local != null) {
_local.setEnd(methodGen.getInstructionList().getEnd());
methodGen.removeLocalVariable(_local);
_refs = null;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRef.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRef.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRef.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRef.java
index 9cf4e35c76d..fe918b0011a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRef.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRef.java
@@ -70,12 +70,10 @@ final class VariableRef extends VariableRefBase {
}
else {
il.append(_variable.loadInstruction());
- _variable.removeReference(this);
}
}
else {
il.append(_variable.loadInstruction());
- _variable.removeReference(this);
}
}
else {
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRefBase.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRefBase.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRefBase.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/VariableRefBase.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/When.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/When.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/When.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/When.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Whitespace.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Whitespace.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Whitespace.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Whitespace.java
index 37d1f9d1396..edfa5a8d3dd 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/Whitespace.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Whitespace.java
@@ -157,8 +157,7 @@ final class Whitespace extends TopLevelElement {
if (col != -1) {
namespace = lookupNamespace(token.substring(0,col));
if (namespace != null) {
- elements.append(namespace+":"+
- token.substring(col+1,token.length()));
+ elements.append(namespace).append(':').append(token.substring(col + 1));
} else {
elements.append(token);
}
@@ -426,12 +425,7 @@ final class Whitespace extends TopLevelElement {
compileStripSpace(strip, sCount, il);
}
- stripSpace.stripAttributes(true);
- stripSpace.setMaxLocals();
- stripSpace.setMaxStack();
- stripSpace.removeNOPs();
-
- classGen.addMethod(stripSpace.getMethod());
+ classGen.addMethod(stripSpace);
}
/**
@@ -463,12 +457,7 @@ final class Whitespace extends TopLevelElement {
il.append(ICONST_0);
il.append(IRETURN);
- stripSpace.stripAttributes(true);
- stripSpace.setMaxLocals();
- stripSpace.setMaxStack();
- stripSpace.removeNOPs();
-
- classGen.addMethod(stripSpace.getMethod());
+ classGen.addMethod(stripSpace);
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/WithParam.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/WithParam.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/WithParam.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/WithParam.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathLexer.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathLexer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathLexer.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathLexer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XPathParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java
index 203ffefbaa6..e29915c0ecd 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java
@@ -131,11 +131,13 @@ public final class XSLTC {
*/
private boolean _isSecureProcessing = false;
+ private boolean _useServicesMechanism = true;
+
/**
* XSLTC compiler constructor
*/
- public XSLTC() {
- _parser = new Parser(this);
+ public XSLTC(boolean useServicesMechanism) {
+ _parser = new Parser(this, useServicesMechanism);
}
/**
@@ -151,6 +153,19 @@ public final class XSLTC {
public boolean isSecureProcessing() {
return _isSecureProcessing;
}
+ /**
+ * Return the state of the services mechanism feature.
+ */
+ public boolean useServicesMechnism() {
+ return _useServicesMechanism;
+ }
+
+ /**
+ * Set the state of the services mechanism feature.
+ */
+ public void setServicesMechnism(boolean flag) {
+ _useServicesMechanism = flag;
+ }
/**
* Only for user by the internal TrAX implementation.
@@ -230,6 +245,12 @@ public final class XSLTC {
public void setTemplateInlining(boolean templateInlining) {
_templateInlining = templateInlining;
}
+ /**
+ * Return the state of the template inlining feature.
+ */
+ public boolean getTemplateInlining() {
+ return _templateInlining;
+ }
/**
* Set the parameters to use to locate the correct
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XslAttribute.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XslAttribute.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XslAttribute.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XslAttribute.java
index 5edd465da22..5d86d7e5fa8 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XslAttribute.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XslAttribute.java
@@ -209,13 +209,14 @@ final class XslAttribute extends Instruction {
if (!_isLiteral) {
// if the qname is an AVT, then the qname has to be checked at runtime if it is a valid qname
- LocalVariableGen nameValue = methodGen.addLocalVariable2("nameValue",
+ LocalVariableGen nameValue =
+ methodGen.addLocalVariable2("nameValue",
Util.getJCRefType(STRING_SIG),
- il.getEnd());
+ null);
// store the name into a variable first so _name.translate only needs to be called once
_name.translate(classGen, methodGen);
- il.append(new ASTORE(nameValue.getIndex()));
+ nameValue.setStart(il.append(new ASTORE(nameValue.getIndex())));
il.append(new ALOAD(nameValue.getIndex()));
// call checkQName if the name is an AVT
@@ -230,7 +231,7 @@ final class XslAttribute extends Instruction {
il.append(DUP); // first arg to "attributes" call
// load name value again
- il.append(new ALOAD(nameValue.getIndex()));
+ nameValue.setEnd(il.append(new ALOAD(nameValue.getIndex())));
} else {
// Save the current handler base on the stack
il.append(methodGen.loadHandler());
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XslElement.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XslElement.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XslElement.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XslElement.java
index b6a30670c74..429cccda552 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/XslElement.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XslElement.java
@@ -224,13 +224,14 @@ final class XslElement extends Instruction {
if (!_ignore) {
// if the qname is an AVT, then the qname has to be checked at runtime if it is a valid qname
- LocalVariableGen nameValue = methodGen.addLocalVariable2("nameValue",
- Util.getJCRefType(STRING_SIG),
- il.getEnd());
+ LocalVariableGen nameValue =
+ methodGen.addLocalVariable2("nameValue",
+ Util.getJCRefType(STRING_SIG),
+ null);
// store the name into a variable first so _name.translate only needs to be called once
_name.translate(classGen, methodGen);
- il.append(new ASTORE(nameValue.getIndex()));
+ nameValue.setStart(il.append(new ASTORE(nameValue.getIndex())));
il.append(new ALOAD(nameValue.getIndex()));
// call checkQName if the name is an AVT
@@ -244,7 +245,7 @@ final class XslElement extends Instruction {
il.append(methodGen.loadHandler());
// load name value again
- il.append(new ALOAD(nameValue.getIndex()));
+ nameValue.setEnd(il.append(new ALOAD(nameValue.getIndex())));
if (_namespace != null) {
_namespace.translate(classGen, methodGen);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/sym.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/sym.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/sym.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/sym.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/AttributeSetMethodGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/AttributeSetMethodGenerator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/AttributeSetMethodGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/AttributeSetMethodGenerator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/BooleanType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/BooleanType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/BooleanType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/BooleanType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ClassGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ClassGenerator.java
similarity index 94%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ClassGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ClassGenerator.java
index b3a3cbc56a3..d747075ea8f 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ClassGenerator.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ClassGenerator.java
@@ -23,6 +23,7 @@
package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
+import com.sun.org.apache.bcel.internal.classfile.Method;
import com.sun.org.apache.bcel.internal.generic.ALOAD;
import com.sun.org.apache.bcel.internal.generic.ClassGen;
import com.sun.org.apache.bcel.internal.generic.Instruction;
@@ -134,4 +135,10 @@ public class ClassGenerator extends ClassGen {
public boolean isExternal() {
return false;
}
+ public void addMethod(MethodGenerator methodGen) {
+ Method[] methodsToAdd = methodGen.getGeneratedMethods(this);
+ for (int i = 0; i < methodsToAdd.length; i++) {
+ addMethod(methodsToAdd[i]);
+}
+ }
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/CompareGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/CompareGenerator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/CompareGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/CompareGenerator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java
similarity index 93%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java
index 2f80c53f28e..d2e68d4c1f0 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java
@@ -941,7 +941,64 @@ public class ErrorMessages extends ListResourceBundle {
"Cannot set the feature ''{0}'' on this TransformerFactory."},
{ErrorMsg.JAXP_SECUREPROCESSING_FEATURE,
- "FEATURE_SECURE_PROCESSING: Cannot set the feature to false when security manager is present."}
+ "FEATURE_SECURE_PROCESSING: Cannot set the feature to false when security manager is present."},
+
+ /*
+ * Note to translators: This message describes an internal error in the
+ * processor. The term "byte code" is a Java technical term for the
+ * executable code in a Java method, and "try-catch-finally block"
+ * refers to the Java keywords with those names. "Outlined" is a
+ * technical term internal to XSLTC and should not be translated.
+ */
+ {ErrorMsg.OUTLINE_ERR_TRY_CATCH,
+ "Internal XSLTC error: the generated byte code contains a " +
+ "try-catch-finally block and cannot be outlined."},
+
+ /*
+ * Note to translators: This message describes an internal error in the
+ * processor. The terms "OutlineableChunkStart" and
+ * "OutlineableChunkEnd" are the names of classes internal to XSLTC and
+ * should not be translated. The message indicates that for every
+ * "start" there must be a corresponding "end", and vice versa, and
+ * that if one of a pair of "start" and "end" appears between another
+ * pair of corresponding "start" and "end", then the other half of the
+ * pair must also be between that same enclosing pair.
+ */
+ {ErrorMsg.OUTLINE_ERR_UNBALANCED_MARKERS,
+ "Internal XSLTC error: OutlineableChunkStart and " +
+ "OutlineableChunkEnd markers must be balanced and properly nested."},
+
+ /*
+ * Note to translators: This message describes an internal error in the
+ * processor. The term "byte code" is a Java technical term for the
+ * executable code in a Java method. The "method" that is being
+ * referred to is a Java method in a translet that XSLTC is generating
+ * in processing a stylesheet. The "instruction" that is being
+ * referred to is one of the instrutions in the Java byte code in that
+ * method. "Outlined" is a technical term internal to XSLTC and
+ * should not be translated.
+ */
+ {ErrorMsg.OUTLINE_ERR_DELETED_TARGET,
+ "Internal XSLTC error: an instruction that was part of a block of " +
+ "byte code that was outlined is still referred to in the original " +
+ "method."
+ },
+
+
+ /*
+ * Note to translators: This message describes an internal error in the
+ * processor. The "method" that is being referred to is a Java method
+ * in a translet that XSLTC is generating.
+ *
+ */
+ {ErrorMsg.OUTLINE_ERR_METHOD_TOO_BIG,
+ "Internal XSLTC error: a method in the translet exceeds the Java " +
+ "Virtual Machine limitation on the length of a method of 64 " +
+ "kilobytes. This is usually caused by templates in a stylesheet " +
+ "that are very large. Try restructuring your stylesheet to use " +
+ "smaller templates."
+ }
+
};
/** Get the lookup table for error messages.
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ca.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ca.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ca.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ca.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_cs.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_cs.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_cs.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_cs.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_de.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_es.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_es.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_es.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_es.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_fr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_fr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_fr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_fr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_it.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_it.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_it.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_it.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ja.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ko.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ko.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ko.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_ko.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_pt_BR.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_pt_BR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_pt_BR.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_pt_BR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sk.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sk.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sk.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sk.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sv.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sv.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sv.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_sv.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_CN.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_CN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_CN.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_CN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_TW.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_TW.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_TW.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages_zh_TW.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java
index ef9f1a0db49..1b1a80d8eea 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java
@@ -157,6 +157,14 @@ public final class ErrorMsg {
public static final String INVALID_NCNAME_ERR = "INVALID_NCNAME_ERR";
public static final String INVALID_METHOD_IN_OUTPUT = "INVALID_METHOD_IN_OUTPUT";
+ public static final String OUTLINE_ERR_TRY_CATCH = "OUTLINE_ERR_TRY_CATCH";
+ public static final String OUTLINE_ERR_UNBALANCED_MARKERS =
+ "OUTLINE_ERR_UNBALANCED_MARKERS";
+ public static final String OUTLINE_ERR_DELETED_TARGET =
+ "OUTLINE_ERR_DELETED_TARGET";
+ public static final String OUTLINE_ERR_METHOD_TOO_BIG =
+ "OUTLINE_ERR_METHOD_TOO_BIG";
+
// All error messages are localized and are stored in resource bundles.
// This array and the following 4 strings are read from that bundle.
private static ResourceBundle _bundle;
@@ -261,7 +269,7 @@ public final class ErrorMsg {
*/
public String toString() {
String suffix = (_params == null) ?
- (null != _code ? new String(getErrorMessage()) : _message)
+ (null != _code ? getErrorMessage() : _message)
: MessageFormat.format(getErrorMessage(), _params);
return formatLine() + suffix;
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/FilterGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/FilterGenerator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/FilterGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/FilterGenerator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/IntType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/IntType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/IntType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/IntType.java
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/InternalError.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/InternalError.java
new file mode 100644
index 00000000000..2bb0c3df3c5
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/InternalError.java
@@ -0,0 +1,37 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * $Id: InternalError.java,v 1.0 2011-08-18 04:34:19 joehw Exp $
+ */
+package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
+/**
+ * Marks a class of errors in which XSLTC has reached some incorrect internal
+ * state from which it cannot recover.
+ */
+public class InternalError extends Error {
+ /**
+ * Construct an InternalError with the specified error message.
+ * @param msg the error message
+ */
+ public InternalError(String msg) {
+ super(msg);
+ }
+}
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MarkerInstruction.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MarkerInstruction.java
new file mode 100644
index 00000000000..e76a3fe500f
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MarkerInstruction.java
@@ -0,0 +1,98 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * $Id: MethodGenerator.java,v 1.10 2010-11-01 04:34:19 joehw Exp $
+ */
+package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import com.sun.org.apache.bcel.internal.Constants;
+import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
+import com.sun.org.apache.bcel.internal.generic.Instruction;
+import com.sun.org.apache.bcel.internal.generic.Visitor;
+
+/**
+ * A special abstract dummy subclass of
+ * {@link org.apache.bcel.generic.Instruction} used to mark locations of
+ * interest in an {@link com.sun.org.apache.bcel.internal.generic.InstructionList}. It and
+ * its subclasses are only used as placeholders, and do not contribute to the
+ * actual byte code instruction stream.
+ */
+abstract class MarkerInstruction extends Instruction {
+ /**
+ * Zero-argument constructor. Sets the opcode to an invalid value and
+ * sets the length to zero, as it will not be written as part of the
+ * generated byte code.
+ */
+ public MarkerInstruction() {
+ super(Constants.UNDEFINED, (short) 0);
+ }
+
+ /**
+ * {@link com.sun.org.apache.bcel.internal.generic.Visitor}s will know nothing about this
+ * kind of {@link org.apche.bcel.generic.Instruction}, so this method does
+ * nothing.
+ */
+ public void accept(Visitor v) {
+ }
+
+ /**
+ * The number of JVM stack entries consumed by the instruction.
+ * This instruction is just a place holder, so it does not consume any
+ * stack entries.
+ * @param cpg The {@link com.sun.org.apache.bcel.internal.generic.ConstantPoolGen} for the
+ * current {@link com.sun.org.apache.bcel.internal.generic.ClassGen}
+ * @return 0 always
+ */
+ final public int consumeStack(ConstantPoolGen cpg) {
+ return 0;
+ }
+ /**
+ * The number of JVM stack entries produced by the instruction.
+ * This instruction is just a place holder, so it does not produce any
+ * stack entries.
+ * @param cpg The {@link com.sun.org.apache.bcel.internal.generic.ConstantPoolGen} for the
+ * current {@link com.sun.org.apache.bcel.internal.generic.ClassGen}
+ * @return 0 always
+ */
+ final public int produceStack(ConstantPoolGen cpg) {
+ return 0;
+ }
+
+ /**
+ * Produce a copy of the instruction. By default a
+ * {@link MarkerInstruction} has no parameters, so the base implementation
+ * of {@link #copy()} returns the instruction itself.
+ * @return The instruction itself.
+ */
+ public Instruction copy() {
+ return this;
+ }
+ /**
+ * Dump instruction as byte code to stream out. A {@link MarkerInstruction}
+ * has no effect on the generated byte code so it is never emitted to the
+ * output stream.
+ * @param out Output stream
+ */
+ final public void dump(DataOutputStream out) throws IOException {
+ }
+}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MatchGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MatchGenerator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MatchGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MatchGenerator.java
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator.java
new file mode 100644
index 00000000000..9ba426f24f6
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator.java
@@ -0,0 +1,2149 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * $Id: MethodGenerator.java,v 1.2.4.1 2005/09/05 11:16:47 pvedula Exp $
+ */
+
+package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+ import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Stack;
+
+
+import com.sun.org.apache.bcel.internal.Constants;
+import com.sun.org.apache.bcel.internal.classfile.Field;
+import com.sun.org.apache.bcel.internal.classfile.Method;
+import com.sun.org.apache.bcel.internal.generic.ALOAD;
+import com.sun.org.apache.bcel.internal.generic.ASTORE;
+import com.sun.org.apache.bcel.internal.generic.BranchHandle;
+import com.sun.org.apache.bcel.internal.generic.BranchInstruction;
+import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
+import com.sun.org.apache.bcel.internal.generic.DLOAD;
+import com.sun.org.apache.bcel.internal.generic.DSTORE;
+import com.sun.org.apache.bcel.internal.generic.FLOAD;
+import com.sun.org.apache.bcel.internal.generic.FSTORE;
+import com.sun.org.apache.bcel.internal.generic.GETFIELD;
+import com.sun.org.apache.bcel.internal.generic.GOTO;
+import com.sun.org.apache.bcel.internal.generic.ICONST;
+import com.sun.org.apache.bcel.internal.generic.IfInstruction;
+import com.sun.org.apache.bcel.internal.generic.ILOAD;
+import com.sun.org.apache.bcel.internal.generic.IndexedInstruction;
+import com.sun.org.apache.bcel.internal.generic.INVOKEINTERFACE;
+import com.sun.org.apache.bcel.internal.generic.INVOKESPECIAL;
+import com.sun.org.apache.bcel.internal.generic.INVOKESTATIC;
+import com.sun.org.apache.bcel.internal.generic.INVOKEVIRTUAL;
+import com.sun.org.apache.bcel.internal.generic.ISTORE;
+import com.sun.org.apache.bcel.internal.generic.Instruction;
+import com.sun.org.apache.bcel.internal.generic.InstructionConstants;
+import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
+import com.sun.org.apache.bcel.internal.generic.InstructionList;
+import com.sun.org.apache.bcel.internal.generic.InstructionTargeter;
+import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
+import com.sun.org.apache.bcel.internal.generic.LocalVariableInstruction;
+import com.sun.org.apache.bcel.internal.generic.LLOAD;
+import com.sun.org.apache.bcel.internal.generic.LSTORE;
+import com.sun.org.apache.bcel.internal.generic.MethodGen;
+import com.sun.org.apache.bcel.internal.generic.NEW;
+import com.sun.org.apache.bcel.internal.generic.PUTFIELD;
+import com.sun.org.apache.bcel.internal.generic.RET;
+import com.sun.org.apache.bcel.internal.generic.Select;
+import com.sun.org.apache.bcel.internal.generic.TargetLostException;
+import com.sun.org.apache.bcel.internal.generic.Type;
+
+import com.sun.org.apache.xalan.internal.xsltc.compiler.Pattern;
+import com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC;
+
+/**
+ * @author Jacek Ambroziak
+ * @author Santiago Pericas-Geertsen
+ */
+public class MethodGenerator extends MethodGen
+ implements com.sun.org.apache.xalan.internal.xsltc.compiler.Constants {
+ protected static final int INVALID_INDEX = -1;
+
+ private static final String START_ELEMENT_SIG
+ = "(" + STRING_SIG + ")V";
+ private static final String END_ELEMENT_SIG
+ = START_ELEMENT_SIG;
+
+ private InstructionList _mapTypeSub;
+
+ private static final int DOM_INDEX = 1;
+ private static final int ITERATOR_INDEX = 2;
+ private static final int HANDLER_INDEX = 3;
+
+ private static final int MAX_METHOD_SIZE = 65535;
+ private static final int MAX_BRANCH_TARGET_OFFSET = 32767;
+ private static final int MIN_BRANCH_TARGET_OFFSET = -32768;
+
+ private static final int TARGET_METHOD_SIZE = 60000;
+ private static final int MINIMUM_OUTLINEABLE_CHUNK_SIZE = 1000;
+
+ private Instruction _iloadCurrent;
+ private Instruction _istoreCurrent;
+ private final Instruction _astoreHandler;
+ private final Instruction _aloadHandler;
+ private final Instruction _astoreIterator;
+ private final Instruction _aloadIterator;
+ private final Instruction _aloadDom;
+ private final Instruction _astoreDom;
+
+ private final Instruction _startElement;
+ private final Instruction _endElement;
+ private final Instruction _startDocument;
+ private final Instruction _endDocument;
+ private final Instruction _attribute;
+ private final Instruction _uniqueAttribute;
+ private final Instruction _namespace;
+
+ private final Instruction _setStartNode;
+ private final Instruction _reset;
+ private final Instruction _nextNode;
+
+ private SlotAllocator _slotAllocator;
+ private boolean _allocatorInit = false;
+ private LocalVariableRegistry _localVariableRegistry;
+ /**
+ * A mapping between patterns and instruction lists used by
+ * test sequences to avoid compiling the same pattern multiple
+ * times. Note that patterns whose kernels are "*", "node()"
+ * and "@*" can between shared by test sequences.
+ */
+ private Hashtable _preCompiled = new Hashtable();
+
+
+ public MethodGenerator(int access_flags, Type return_type,
+ Type[] arg_types, String[] arg_names,
+ String method_name, String class_name,
+ InstructionList il, ConstantPoolGen cpg) {
+ super(access_flags, return_type, arg_types, arg_names, method_name,
+ class_name, il, cpg);
+
+ _astoreHandler = new ASTORE(HANDLER_INDEX);
+ _aloadHandler = new ALOAD(HANDLER_INDEX);
+ _astoreIterator = new ASTORE(ITERATOR_INDEX);
+ _aloadIterator = new ALOAD(ITERATOR_INDEX);
+ _aloadDom = new ALOAD(DOM_INDEX);
+ _astoreDom = new ASTORE(DOM_INDEX);
+
+ final int startElement =
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "startElement",
+ START_ELEMENT_SIG);
+ _startElement = new INVOKEINTERFACE(startElement, 2);
+
+ final int endElement =
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "endElement",
+ END_ELEMENT_SIG);
+ _endElement = new INVOKEINTERFACE(endElement, 2);
+
+ final int attribute =
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "addAttribute",
+ "("
+ + STRING_SIG
+ + STRING_SIG
+ + ")V");
+ _attribute = new INVOKEINTERFACE(attribute, 3);
+
+ final int uniqueAttribute =
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "addUniqueAttribute",
+ "("
+ + STRING_SIG
+ + STRING_SIG
+ + "I)V");
+ _uniqueAttribute = new INVOKEINTERFACE(uniqueAttribute, 4);
+
+ final int namespace =
+ cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "namespaceAfterStartElement",
+ "("
+ + STRING_SIG
+ + STRING_SIG
+ + ")V");
+ _namespace = new INVOKEINTERFACE(namespace, 3);
+
+ int index = cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "startDocument",
+ "()V");
+ _startDocument = new INVOKEINTERFACE(index, 1);
+
+ index = cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
+ "endDocument",
+ "()V");
+ _endDocument = new INVOKEINTERFACE(index, 1);
+
+
+ index = cpg.addInterfaceMethodref(NODE_ITERATOR,
+ SET_START_NODE,
+ SET_START_NODE_SIG);
+ _setStartNode = new INVOKEINTERFACE(index, 2);
+
+ index = cpg.addInterfaceMethodref(NODE_ITERATOR,
+ "reset", "()"+NODE_ITERATOR_SIG);
+ _reset = new INVOKEINTERFACE(index, 1);
+
+ index = cpg.addInterfaceMethodref(NODE_ITERATOR, NEXT, NEXT_SIG);
+ _nextNode = new INVOKEINTERFACE(index, 1);
+
+ _slotAllocator = new SlotAllocator();
+ _slotAllocator.initialize(getLocalVariableRegistry().getLocals(false));
+ _allocatorInit = true;
+ }
+
+ /**
+ * Allocates a local variable. If the slot allocator has already been
+ * initialized, then call addLocalVariable2() so that the new variable
+ * is known to the allocator. Failing to do this may cause the allocator
+ * to return a slot that is already in use.
+ */
+ public LocalVariableGen addLocalVariable(String name, Type type,
+ InstructionHandle start,
+ InstructionHandle end)
+ {
+ LocalVariableGen lvg;
+
+ if (_allocatorInit) {
+ lvg = addLocalVariable2(name, type, start);
+ } else {
+ lvg = super.addLocalVariable(name, type, start, end);
+ getLocalVariableRegistry().registerLocalVariable(lvg);
+ }
+ return lvg;
+ }
+
+ public LocalVariableGen addLocalVariable2(String name, Type type,
+ InstructionHandle start)
+ {
+ LocalVariableGen lvg = super.addLocalVariable(name, type,
+ _slotAllocator.allocateSlot(type),
+ start, null);
+ getLocalVariableRegistry().registerLocalVariable(lvg);
+ return lvg;
+ }
+ private LocalVariableRegistry getLocalVariableRegistry() {
+ if (_localVariableRegistry == null) {
+ _localVariableRegistry = new LocalVariableRegistry();
+ }
+
+ return _localVariableRegistry;
+ }
+
+ /**
+ * Keeps track of all local variables used in the method.
+ * The
+ * {@link MethodGen#addLocalVariable(String,Type,InstructionHandle,InstructionHandle)}
+ * and
+ * {@link MethodGen#addLocalVariable(String,Type,int,InstructionHandle,InstructionHandle)}
+ * methods of {@link MethodGen} will only keep track of
+ * {@link LocalVariableGen} object until it'ss removed by a call to
+ * {@link MethodGen#removeLocalVariable(LocalVariableGen)}.
+ * In order to support efficient copying of local variables to outlined
+ * methods by
+ * {@link #outline(InstructionHandle,InstructionHandle,String,ClassGenerator)},
+ * this class keeps track of all local variables defined by the method.
+ */
+ protected class LocalVariableRegistry {
+ /**
+ * A java.lang.ArrayList of all
+ * {@link LocalVariableGen}s created for this method, indexed by the
+ * slot number of the local variable. The JVM stack frame of local
+ * variables is divided into "slots". A single slot can be used to
+ * store more than one variable in a method, without regard to type, so
+ * long as the byte code keeps the ranges of the two disjoint.
+ * If only one registration of use of a particular slot occurs, the
+ * corresponding entry of _variables contains the
+ * LocalVariableGen; if more than one occurs, the
+ * corresponding entry contains all such LocalVariableGens
+ * registered for the same slot; and if none occurs, the entry will be
+ * null.
+ */
+ protected ArrayList _variables = new ArrayList();
+
+ /**
+ * Maps a name to a {@link LocalVariableGen}
+ */
+ protected HashMap _nameToLVGMap = new HashMap();
+
+ /**
+ * Registers a {@link org.apache.bcel.generic.LocalVariableGen}
+ * for this method.
+ *
Preconditions:
+ *
+ * - The range of instructions for
lvg does not
+ * overlap with the range of instructions for any
+ * LocalVariableGen with the same slot index previously
+ * registered for this method. (Unchecked.)
+ *
+ * @param lvg The variable to be registered
+ */
+ protected void registerLocalVariable(LocalVariableGen lvg) {
+ int slot = lvg.getIndex();
+
+ int registrySize = _variables.size();
+
+ // If the LocalVariableGen uses a slot index beyond any previously
+ // encountered, expand the _variables, padding with intervening null
+ // entries as required.
+ if (slot >= registrySize) {
+ for (int i = registrySize; i < slot; i++) {
+ _variables.add(null);
+ }
+ _variables.add(lvg);
+ } else {
+ // If the LocalVariableGen reuses a slot, make sure the entry
+ // in _variables contains an ArrayList and add the newly
+ // registered LocalVariableGen to the list. If the entry in
+ // _variables just contains null padding, store the
+ // LocalVariableGen directly.
+ Object localsInSlot = _variables.get(slot);
+ if (localsInSlot != null) {
+ if (localsInSlot instanceof LocalVariableGen) {
+ ArrayList listOfLocalsInSlot = new ArrayList();
+ listOfLocalsInSlot.add(localsInSlot);
+ listOfLocalsInSlot.add(lvg);
+ _variables.set(slot, listOfLocalsInSlot);
+ } else {
+ ((ArrayList) localsInSlot).add(lvg);
+ }
+ } else {
+ _variables.set(slot, lvg);
+ }
+ }
+
+ registerByName(lvg);
+ }
+
+ /**
+ * Find which {@link LocalVariableGen}, if any, is registered for a
+ * particular JVM local stack frame slot at a particular position in the
+ * byte code for the method.
+ * Preconditions:
+ *
+ * - The {@link InstructionList#setPositions()} has been called for
+ * the {@link InstructionList} associated with this
+ * {@link MethodGenerator}.
+ *
+ * @param slot the JVM local stack frame slot number
+ * @param offset the position in the byte code
+ * @return the LocalVariableGen for the local variable
+ * stored in the relevant slot at the relevant offset; null
+ * if there is none.
+ */
+ protected LocalVariableGen lookupRegisteredLocalVariable(int slot,
+ int offset) {
+ Object localsInSlot = (_variables != null) ? _variables.get(slot)
+ : null;
+
+ // If this slot index was never used, _variables.get will return
+ // null; if it was used once, it will return the LocalVariableGen;
+ // more than once it will return an ArrayList of all the
+ // LocalVariableGens for variables stored in that slot. For each
+ // LocalVariableGen, check whether its range includes the
+ // specified offset, and return the first such encountered.
+ if (localsInSlot != null) {
+ if (localsInSlot instanceof LocalVariableGen) {
+ LocalVariableGen lvg = (LocalVariableGen)localsInSlot;
+ if (offsetInLocalVariableGenRange(lvg, offset)) {
+ return lvg;
+ }
+ } else {
+ ArrayList listOfLocalsInSlot = (ArrayList) localsInSlot;
+ int size = listOfLocalsInSlot.size();
+
+ for (int i = 0; i < size; i++) {
+ LocalVariableGen lvg =
+ (LocalVariableGen)listOfLocalsInSlot.get(i);
+ if (offsetInLocalVariableGenRange(lvg, offset)) {
+ return lvg;
+ }
+ }
+ }
+ }
+
+ // No local variable stored in the specified slot at the specified
+ return null;
+ }
+
+ /**
+ * Set up a mapping of the name of the specified
+ * {@link LocalVariableGen} object to the LocalVariableGen
+ * itself.
+ * This is a bit of a hack. XSLTC is relying on the fact that the
+ * name that is being looked up won't be duplicated, which isn't
+ * guaranteed. It replaces code which used to call
+ * {@link MethodGen#getLocalVariables()} and looped through the
+ * LocalVariableGen objects it contained to find the one
+ * with the specified name. However, getLocalVariables()
+ * has the side effect of setting the start and end for any
+ * LocalVariableGen which did not already have them
+ * set, which causes problems for outlining..
+ * See also {@link #lookUpByName(String)} and
+ * {@link #removeByNameTracking(LocalVariableGen)}
LocalVariableGen
+ */
+ protected void registerByName(LocalVariableGen lvg) {
+ Object duplicateNameEntry = _nameToLVGMap.get(lvg.getName());
+
+ if (duplicateNameEntry == null) {
+ _nameToLVGMap.put(lvg.getName(), lvg);
+ } else {
+ ArrayList sameNameList;
+
+ if (duplicateNameEntry instanceof ArrayList) {
+ sameNameList = (ArrayList) duplicateNameEntry;
+ sameNameList.add(lvg);
+ } else {
+ sameNameList = new ArrayList();
+ sameNameList.add(duplicateNameEntry);
+ sameNameList.add(lvg);
+ }
+
+ _nameToLVGMap.put(lvg.getName(), sameNameList);
+ }
+ }
+
+ /**
+ * Remove the mapping from the name of the specified
+ * {@link LocalVariableGen} to itself.
+ * See also {@link #registerByName(LocalVariableGen)} and
+ * {@link #lookUpByName(String)}
+ * @param lvg a LocalVariableGen
+ */
+ protected void removeByNameTracking(LocalVariableGen lvg) {
+ Object duplicateNameEntry = _nameToLVGMap.get(lvg.getName());
+
+ if (duplicateNameEntry instanceof ArrayList) {
+ ArrayList sameNameList = (ArrayList) duplicateNameEntry;
+ for (int i = 0; i < sameNameList.size(); i++) {
+ if (sameNameList.get(i) == lvg) {
+ sameNameList.remove(i);
+ break;
+ }
+ }
+ } else {
+ _nameToLVGMap.remove(lvg);
+ }
+ }
+
+ /**
+ * Given the name of a variable, finds a {@link LocalVariableGen}
+ * corresponding to it.
+ * See also {@link #registerByName(LocalVariableGen)} and
+ * {@link #removeByNameTracking(LocalVariableGen)}
+ * @param name
+ * @return
+ */
+ protected LocalVariableGen lookUpByName(String name) {
+ LocalVariableGen lvg = null;
+ Object duplicateNameEntry = _nameToLVGMap.get(name);
+
+ if (duplicateNameEntry instanceof ArrayList) {
+ ArrayList sameNameList = (ArrayList) duplicateNameEntry;
+
+ for (int i = 0; i < sameNameList.size(); i++) {
+ lvg = (LocalVariableGen)sameNameList.get(i);
+ if (lvg.getName() == name) {
+ break;
+ }
+ }
+ } else {
+ lvg = (LocalVariableGen) duplicateNameEntry;
+ }
+
+ return lvg;
+ }
+
+ /**
+ * Gets all {@link LocalVariableGen} objects for this method.
+ * When the includeRemoved argument has the value
+ * false, this method replaces uses of
+ * {@link MethodGen#getLocalVariables()} which has
+ * a side-effect of setting the start and end range for any
+ * LocalVariableGen if either was null. That
+ * side-effect causes problems for outlining of code in XSLTC.
+ * @param includeRemoved Specifies whether all local variables ever
+ * declared should be returned (true) or only those not
+ * removed (false)
+ * @return an array of LocalVariableGen containing all the
+ * local variables
+ */
+ protected LocalVariableGen[] getLocals(boolean includeRemoved) {
+ LocalVariableGen[] locals = null;
+ ArrayList allVarsEverDeclared = new ArrayList();
+
+ if (includeRemoved) {
+ int slotCount = allVarsEverDeclared.size();
+
+ for (int i = 0; i < slotCount; i++) {
+ Object slotEntries = _variables.get(i);
+ if (slotEntries != null) {
+ if (slotEntries instanceof ArrayList) {
+ ArrayList slotList = (ArrayList) slotEntries;
+
+ for (int j = 0; j < slotList.size(); j++) {
+ allVarsEverDeclared.add(slotList.get(i));
+ }
+ } else {
+ allVarsEverDeclared.add(slotEntries);
+ }
+ }
+ }
+ } else {
+ Iterator nameVarsPairsIter = _nameToLVGMap.entrySet().iterator();
+
+ while (nameVarsPairsIter.hasNext()) {
+ Map.Entry nameVarsPair =
+ (Map.Entry) nameVarsPairsIter.next();
+ Object vars = nameVarsPair.getValue();
+ if (vars != null) {
+ if (vars instanceof ArrayList) {
+ ArrayList varsList = (ArrayList) vars;
+ for (int i = 0; i < varsList.size(); i++) {
+ allVarsEverDeclared.add(varsList.get(i));
+ }
+ } else {
+ allVarsEverDeclared.add(vars);
+ }
+ }
+ }
+ }
+
+ locals = new LocalVariableGen[allVarsEverDeclared.size()];
+ allVarsEverDeclared.toArray(locals);
+
+ return locals;
+ }
+ }
+
+ /**
+ * Determines whether a particular variable is in use at a particular offset
+ * in the byte code for this method.
+ *
Preconditions:
+ *
+ * - The {@link InstructionList#setPositions()} has been called for the
+ * {@link InstructionList} associated with this {@link MethodGenerator}.
+ *
+ * @param lvg the {@link LocalVariableGen} for the variable
+ * @param offset the position in the byte code
+ * @return true if and only if the specified variable is in
+ * use at the particular byte code offset.
+ */
+ boolean offsetInLocalVariableGenRange(LocalVariableGen lvg, int offset) {
+ InstructionHandle lvgStart = lvg.getStart();
+ InstructionHandle lvgEnd = lvg.getEnd();
+
+ // If no start handle is recorded for the LocalVariableGen, it is
+ // assumed to be in use from the beginning of the method.
+ if (lvgStart == null) {
+ lvgStart = getInstructionList().getStart();
+ }
+
+ // If no end handle is recorded for the LocalVariableGen, it is assumed
+ // to be in use to the end of the method.
+ if (lvgEnd == null) {
+ lvgEnd = getInstructionList().getEnd();
+ }
+
+ // Does the range of the instruction include the specified offset?
+ // Note that the InstructionHandle.getPosition method returns the
+ // offset of the beginning of an instruction. A LocalVariableGen's
+ // range includes the end instruction itself, so that instruction's
+ // length must be taken into consideration in computing whether the
+ // varible is in range at a particular offset.
+ return ((lvgStart.getPosition() <= offset)
+ && (lvgEnd.getPosition()
+ + lvgEnd.getInstruction().getLength() >= offset));
+ }
+
+ public void removeLocalVariable(LocalVariableGen lvg) {
+ _slotAllocator.releaseSlot(lvg);
+ getLocalVariableRegistry().removeByNameTracking(lvg);
+ super.removeLocalVariable(lvg);
+ }
+
+ public Instruction loadDOM() {
+ return _aloadDom;
+ }
+
+ public Instruction storeDOM() {
+ return _astoreDom;
+ }
+
+ public Instruction storeHandler() {
+ return _astoreHandler;
+ }
+
+ public Instruction loadHandler() {
+ return _aloadHandler;
+ }
+
+ public Instruction storeIterator() {
+ return _astoreIterator;
+ }
+
+ public Instruction loadIterator() {
+ return _aloadIterator;
+ }
+
+ public final Instruction setStartNode() {
+ return _setStartNode;
+ }
+
+ public final Instruction reset() {
+ return _reset;
+ }
+
+ public final Instruction nextNode() {
+ return _nextNode;
+ }
+
+ public final Instruction startElement() {
+ return _startElement;
+ }
+
+ public final Instruction endElement() {
+ return _endElement;
+ }
+
+ public final Instruction startDocument() {
+ return _startDocument;
+ }
+
+ public final Instruction endDocument() {
+ return _endDocument;
+ }
+
+ public final Instruction attribute() {
+ return _attribute;
+ }
+
+ public final Instruction uniqueAttribute() {
+ return _uniqueAttribute;
+ }
+
+ public final Instruction namespace() {
+ return _namespace;
+ }
+
+ public Instruction loadCurrentNode() {
+ if (_iloadCurrent == null) {
+ int idx = getLocalIndex("current");
+ if (idx > 0)
+ _iloadCurrent = new ILOAD(idx);
+ else
+ _iloadCurrent = new ICONST(0);
+ }
+ return _iloadCurrent;
+ }
+
+ public Instruction storeCurrentNode() {
+ return _istoreCurrent != null
+ ? _istoreCurrent
+ : (_istoreCurrent = new ISTORE(getLocalIndex("current")));
+ }
+
+ /** by default context node is the same as current node. MK437 */
+ public Instruction loadContextNode() {
+ return loadCurrentNode();
+ }
+
+ public Instruction storeContextNode() {
+ return storeCurrentNode();
+ }
+
+ public int getLocalIndex(String name) {
+ return getLocalVariable(name).getIndex();
+ }
+
+ public LocalVariableGen getLocalVariable(String name) {
+ return getLocalVariableRegistry().lookUpByName(name);
+ }
+
+ public void setMaxLocals() {
+
+ // Get the current number of local variable slots
+ int maxLocals = super.getMaxLocals();
+ int prevLocals = maxLocals;
+
+ // Get numer of actual variables
+ final LocalVariableGen[] localVars = super.getLocalVariables();
+ if (localVars != null) {
+ if (localVars.length > maxLocals)
+ maxLocals = localVars.length;
+ }
+
+ // We want at least 5 local variable slots (for parameters)
+ if (maxLocals < 5) maxLocals = 5;
+
+ super.setMaxLocals(maxLocals);
+ }
+
+ /**
+ * Add a pre-compiled pattern to this mode.
+ */
+ public void addInstructionList(Pattern pattern, InstructionList ilist) {
+ _preCompiled.put(pattern, ilist);
+ }
+
+ /**
+ * Get the instruction list for a pre-compiled pattern. Used by
+ * test sequences to avoid compiling patterns more than once.
+ */
+ public InstructionList getInstructionList(Pattern pattern) {
+ return (InstructionList) _preCompiled.get(pattern);
+ }
+
+ /**
+ * Used to keep track of an outlineable chunk of instructions in the
+ * current method. See {@link OutlineableChunkStart} and
+ * {@link OutlineableChunkEnd} for more information.
+ */
+ private class Chunk implements Comparable {
+ /**
+ * {@link InstructionHandle} of the first instruction in the outlineable
+ * chunk.
+ */
+ private InstructionHandle m_start;
+
+ /**
+ * {@link org.apache.bcel.generic.InstructionHandle} of the first
+ * instruction in the outlineable chunk.
+ */
+ private InstructionHandle m_end;
+
+ /**
+ * Number of bytes in the instructions contained in this outlineable
+ * chunk.
+ */
+ private int m_size;
+
+ /**
+ * Constructor for an outlineable {@link MethodGenerator.Chunk}.
+ * Preconditions:
+ *
+ * - The {@link InstructionList#setPositions()} has been called for
+ * the {@link InstructionList} associated with this
+ * {@link MethodGenerator}.
+ *
+ * @param start The {@link InstructionHandle} of the first
+ * instruction in the outlineable chunk.
+ * @param end The {@link InstructionHandle} of the last
+ * instruction in the outlineable chunk.
+ */
+ Chunk(InstructionHandle start, InstructionHandle end) {
+ m_start = start;
+ m_end = end;
+ m_size = end.getPosition() - start.getPosition();
+ }
+
+ /**
+ * Determines whether this outlineable {@link MethodGenerator.Chunk} is
+ * followed immediately by the argument
+ * MethodGenerator.Chunk, with no other intervening
+ * instructions, including {@link OutlineableChunkStart} or
+ * {@link OutlineableChunkEnd} instructions.
+ * @param neighbour an outlineable {@link MethodGenerator.Chunk}
+ * @return true if and only if the argument chunk
+ * immediately follows this chunk
+ */
+ boolean isAdjacentTo(Chunk neighbour) {
+ return getChunkEnd().getNext() == neighbour.getChunkStart();
+ }
+
+ /**
+ * Getter method for the start of this {@linke MethodGenerator.Chunk}
+ * @return the {@link org.apache.bcel.generic.InstructionHandle} of the
+ * start of this chunk
+ */
+ InstructionHandle getChunkStart() {
+ return m_start;
+ }
+
+ /**
+ * Getter method for the end of this {@link MethodGenerator.Chunk}
+ * @return the {@link InstructionHandle} of the start of this chunk
+ */
+ InstructionHandle getChunkEnd() {
+ return m_end;
+ }
+
+ /**
+ * The size of this {@link MethodGenerator.Chunk}
+ * @return the number of bytes in the byte code represented by this
+ * chunk.
+ */
+ int getChunkSize() {
+ return m_size;
+ }
+
+ /**
+ * Implements the java.util.Comparable.compareTo(Object)
+ * method.
+ * @return
+ *
+ * - A positive
int if the length of this
+ * chunk in bytes is greater than that of comparand
+ * - A negative
int if the length of this
+ * chunk in bytes is less than that of comparand
+ * - Zero, otherwise.
+ *
+ */
+ public int compareTo(Object comparand) {
+ return getChunkSize() - ((Chunk)comparand).getChunkSize();
+ }
+ }
+
+ /**
+ * Find the outlineable chunks in this method that would be the best choices
+ * to outline, based on size and position in the method.
+ * @param classGen The {@link ClassGen} with which the generated methods
+ * will be associated
+ * @param totalMethodSize the size of the bytecode in the original method
+ * @return a java.util.ArrayList containing the
+ * {@link MethodGenerator.Chunk}s that may be outlined from this method
+ */
+ private ArrayList getCandidateChunks(ClassGenerator classGen,
+ int totalMethodSize) {
+ Iterator instructions = getInstructionList().iterator();
+ ArrayList candidateChunks = new ArrayList();
+ ArrayList currLevelChunks = new ArrayList();
+ Stack subChunkStack = new Stack();
+ boolean openChunkAtCurrLevel = false;
+ boolean firstInstruction = true;
+
+ InstructionHandle currentHandle;
+
+ if (m_openChunks != 0) {
+ String msg =
+ (new ErrorMsg(ErrorMsg.OUTLINE_ERR_UNBALANCED_MARKERS))
+ .toString();
+ throw new InternalError(msg);
+ }
+
+ // Scan instructions in the method, keeping track of the nesting level
+ // of outlineable chunks.
+ //
+ // currLevelChunks
+ // keeps track of the child chunks of a chunk. For each chunk,
+ // there will be a pair of entries: the InstructionHandles for the
+ // start and for the end of the chunk
+ // subChunkStack
+ // a stack containing the partially accumulated currLevelChunks for
+ // each chunk that's still open at the current position in the
+ // InstructionList.
+ // candidateChunks
+ // the list of chunks which have been accepted as candidates chunks
+ // for outlining
+ do {
+ // Get the next instruction. The loop will perform one extra
+ // iteration after it reaches the end of the InstructionList, with
+ // currentHandle set to null.
+ currentHandle = instructions.hasNext()
+ ? (InstructionHandle) instructions.next()
+ : null;
+ Instruction inst =
+ (currentHandle != null) ? currentHandle.getInstruction()
+ : null;
+
+ // At the first iteration, create a chunk representing all the
+ // code in the method. This is done just to simplify the logic -
+ // this chunk can never be outlined because it will be too big.
+ if (firstInstruction) {
+ openChunkAtCurrLevel = true;
+ currLevelChunks.add(currentHandle);
+ firstInstruction = false;
+ }
+
+ // Found a new chunk
+ if (inst instanceof OutlineableChunkStart) {
+ // If last MarkerInstruction encountered was an
+ // OutlineableChunkStart, this represents the first chunk
+ // nested within that previous chunk - push the list of chunks
+ // from the outer level onto the stack
+ if (openChunkAtCurrLevel) {
+ subChunkStack.push(currLevelChunks);
+ currLevelChunks = new ArrayList();
+ }
+
+ openChunkAtCurrLevel = true;
+ currLevelChunks.add(currentHandle);
+ // Close off an open chunk
+ } else if (currentHandle == null
+ || inst instanceof OutlineableChunkEnd) {
+ ArrayList nestedSubChunks = null;
+
+ // If the last MarkerInstruction encountered was an
+ // OutlineableChunkEnd, it means that the current instruction
+ // marks the end of a chunk that contained child chunks.
+ // Those children might need to be examined below in case they
+ // are better candidates for outlining than the current chunk.
+ if (!openChunkAtCurrLevel) {
+ nestedSubChunks = currLevelChunks;
+ currLevelChunks = (ArrayList)subChunkStack.pop();
+ }
+
+ // Get the handle for the start of this chunk (the last entry
+ // in currLevelChunks)
+ InstructionHandle chunkStart =
+ (InstructionHandle) currLevelChunks.get(
+ currLevelChunks.size()-1);
+
+ int chunkEndPosition =
+ (currentHandle != null) ? currentHandle.getPosition()
+ : totalMethodSize;
+ int chunkSize = chunkEndPosition - chunkStart.getPosition();
+
+ // Two ranges of chunk size to consider:
+ //
+ // 1. [0,TARGET_METHOD_SIZE]
+ // Keep this chunk in consideration as a candidate,
+ // and ignore its subchunks, if any - there's nothing to be
+ // gained by outlining both the current chunk and its
+ // children!
+ //
+ // 2. (TARGET_METHOD_SIZE,+infinity)
+ // Ignore this chunk - it's too big. Add its subchunks
+ // as candidates, after merging adjacent chunks to produce
+ // chunks that are as large as possible
+ if (chunkSize <= TARGET_METHOD_SIZE) {
+ currLevelChunks.add(currentHandle);
+ } else {
+ if (!openChunkAtCurrLevel) {
+ int childChunkCount = nestedSubChunks.size() / 2;
+ if (childChunkCount > 0) {
+ Chunk[] childChunks = new Chunk[childChunkCount];
+
+ // Gather all the child chunks of the current chunk
+ for (int i = 0; i < childChunkCount; i++) {
+ InstructionHandle start =
+ (InstructionHandle) nestedSubChunks
+ .get(i*2);
+ InstructionHandle end =
+ (InstructionHandle) nestedSubChunks
+ .get(i*2+1);
+
+ childChunks[i] = new Chunk(start, end);
+ }
+
+ // Merge adjacent siblings
+ ArrayList mergedChildChunks =
+ mergeAdjacentChunks(childChunks);
+
+ // Add chunks that mean minimum size requirements
+ // to the list of candidate chunks for outlining
+ for (int i = 0; i < mergedChildChunks.size(); i++) {
+ Chunk mergedChunk =
+ (Chunk)mergedChildChunks.get(i);
+ int mergedSize = mergedChunk.getChunkSize();
+
+ if (mergedSize >= MINIMUM_OUTLINEABLE_CHUNK_SIZE
+ && mergedSize <= TARGET_METHOD_SIZE) {
+ candidateChunks.add(mergedChunk);
+ }
+ }
+ }
+ }
+
+ // Drop the chunk which was too big
+ currLevelChunks.remove(currLevelChunks.size() - 1);
+ }
+
+ // currLevelChunks contains pairs of InstructionHandles. If
+ // its size is an odd number, the loop has encountered the
+ // start of a chunk at this level, but not its end.
+ openChunkAtCurrLevel = ((currLevelChunks.size() & 0x1) == 1);
+ }
+
+ } while (currentHandle != null);
+
+ return candidateChunks;
+ }
+
+ /**
+ * Merge adjacent sibling chunks to produce larger candidate chunks for
+ * outlining
+ * @param chunks array of sibling {@link MethodGenerator.Chunk}s that are
+ * under consideration for outlining. Chunks must be in
+ * the order encountered in the {@link InstructionList}
+ * @return a java.util.ArrayList of
+ * MethodGenerator.Chunks maximally merged
+ */
+ private ArrayList mergeAdjacentChunks(Chunk[] chunks) {
+ int[] adjacencyRunStart = new int[chunks.length];
+ int[] adjacencyRunLength = new int[chunks.length];
+ boolean[] chunkWasMerged = new boolean[chunks.length];
+
+ int maximumRunOfChunks = 0;
+ int startOfCurrentRun;
+ int numAdjacentRuns = 0;
+
+ ArrayList mergedChunks = new ArrayList();
+
+ startOfCurrentRun = 0;
+
+ // Loop through chunks, and record in adjacencyRunStart where each
+ // run of adjacent chunks begins and how many are in that run. For
+ // example, given chunks A B C D E F, if A is adjacent to B, but not
+ // to C, and C, D, E and F are all adjacent,
+ // adjacencyRunStart[0] == 0; adjacencyRunLength[0] == 2
+ // adjacencyRunStart[1] == 2; adjacencyRunLength[1] == 4
+ for (int i = 1; i < chunks.length; i++) {
+ if (!chunks[i-1].isAdjacentTo(chunks[i])) {
+ int lengthOfRun = i - startOfCurrentRun;
+
+ // Track the longest run of chunks found
+ if (maximumRunOfChunks < lengthOfRun) {
+ maximumRunOfChunks = lengthOfRun;
+ }
+
+ if (lengthOfRun > 1 ) {
+ adjacencyRunLength[numAdjacentRuns] = lengthOfRun;
+ adjacencyRunStart[numAdjacentRuns] = startOfCurrentRun;
+ numAdjacentRuns++;
+ }
+
+ startOfCurrentRun = i;
+ }
+ }
+
+ if (chunks.length - startOfCurrentRun > 1) {
+ int lengthOfRun = chunks.length - startOfCurrentRun;
+
+ // Track the longest run of chunks found
+ if (maximumRunOfChunks < lengthOfRun) {
+ maximumRunOfChunks = lengthOfRun;
+ }
+
+ adjacencyRunLength[numAdjacentRuns] =
+ chunks.length - startOfCurrentRun;
+ adjacencyRunStart[numAdjacentRuns] = startOfCurrentRun;
+ numAdjacentRuns++;
+ }
+
+ // Try merging adjacent chunks to come up with better sized chunks for
+ // outlining. This algorithm is not optimal, but it should be
+ // reasonably fast. Consider an example like this, where four chunks
+ // of the sizes specified in brackets are adjacent. The best way of
+ // combining these chunks would be to merge the first pair and merge
+ // the last three to form two chunks, but the algorithm will merge the
+ // three in the middle instead, leaving three chunks in all.
+ // [25000] [25000] [20000] [1000] [20000]
+
+ // Start by trying to merge the maximum number of adjacent chunks, and
+ // work down from there.
+ for (int numToMerge = maximumRunOfChunks; numToMerge>1; numToMerge--) {
+ // Look at each run of adjacent chunks
+ for (int run = 0; run < numAdjacentRuns; run++) {
+ int runStart = adjacencyRunStart[run];
+ int runEnd = runStart + adjacencyRunLength[run] - 1;
+
+ boolean foundChunksToMerge = false;
+
+ // Within the current run of adjacent chunks, look at all
+ // "subruns" of length numToMerge, until we run out or find
+ // a subrun that can be merged.
+ for (int mergeStart = runStart;
+ mergeStart+numToMerge-1 <= runEnd && !foundChunksToMerge;
+ mergeStart++) {
+ int mergeEnd = mergeStart + numToMerge - 1;
+ int mergeSize = 0;
+
+ // Find out how big the subrun is
+ for (int j = mergeStart; j <= mergeEnd; j++) {
+ mergeSize = mergeSize + chunks[j].getChunkSize();
+ }
+
+ // If the current subrun is small enough to outline,
+ // merge it, and split the remaining chunks in the run
+ if (mergeSize <= TARGET_METHOD_SIZE) {
+ foundChunksToMerge = true;
+
+ for (int j = mergeStart; j <= mergeEnd; j++) {
+ chunkWasMerged[j] = true;
+ }
+
+ mergedChunks.add(
+ new Chunk(chunks[mergeStart].getChunkStart(),
+ chunks[mergeEnd].getChunkEnd()));
+
+ // Adjust the length of the current run of adjacent
+ // chunks to end at the newly merged chunk...
+ adjacencyRunLength[run] =
+ adjacencyRunStart[run] - mergeStart;
+
+ int trailingRunLength = runEnd - mergeEnd;
+
+ // and any chunks that follow the newly merged chunk
+ // in the current run of adjacent chunks form another
+ // new run of adjacent chunks
+ if (trailingRunLength >= 2) {
+ adjacencyRunStart[numAdjacentRuns] = mergeEnd + 1;
+ adjacencyRunLength[numAdjacentRuns] =
+ trailingRunLength;
+ numAdjacentRuns++;
+ }
+ }
+ }
+ }
+ }
+
+ // Make a final pass for any chunk that wasn't merged with a sibling
+ // and include it in the list of chunks after merging.
+ for (int i = 0; i < chunks.length; i++) {
+ if (!chunkWasMerged[i]) {
+ mergedChunks.add(chunks[i]);
+ }
+ }
+
+ return mergedChunks;
+ }
+
+ /**
+ * Breaks up the IL for this {@link MethodGenerator} into separate
+ * outlined methods so that no method exceeds the 64KB limit on the length
+ * of the byte code associated with a method.
+ * @param classGen The {@link ClassGen} with which the generated methods
+ * will be associated
+ * @param originalMethodSize The number of bytes of bytecode represented by
+ * the {@link InstructionList} of this method
+ * @return an array of the outlined Methods and the original
+ * method itself
+ */
+ public Method[] outlineChunks(ClassGenerator classGen,
+ int originalMethodSize) {
+ ArrayList methodsOutlined = new ArrayList();
+ int currentMethodSize = originalMethodSize;
+
+ int outlinedCount = 0;
+ boolean moreMethodsOutlined;
+ String originalMethodName = getName();
+
+ // Special handling for initialization methods. No other methods can
+ // include the less than and greater than characters in their names,
+ // so we munge the names here.
+ if (originalMethodName.equals("")) {
+ originalMethodName = "$lt$init$gt$";
+ } else if (originalMethodName.equals("")) {
+ originalMethodName = "$lt$clinit$gt$";
+ }
+
+ // Loop until the original method comes in under the JVM limit or
+ // the loop was unable to outline any more methods
+ do {
+ // Get all the best candidates for outlining, and sort them in
+ // ascending order of size
+ ArrayList candidateChunks = getCandidateChunks(classGen,
+ currentMethodSize);
+ Collections.sort(candidateChunks);
+
+ moreMethodsOutlined = false;
+
+ // Loop over the candidates for outlining, from the largest to the
+ // smallest and outline them one at a time, until the loop has
+ // outlined all or the original method comes in under the JVM
+ // limit on the size of a method.
+ for (int i = candidateChunks.size()-1;
+ i >= 0 && currentMethodSize > TARGET_METHOD_SIZE;
+ i--) {
+ Chunk chunkToOutline = (Chunk)candidateChunks.get(i);
+
+ methodsOutlined.add(outline(chunkToOutline.getChunkStart(),
+ chunkToOutline.getChunkEnd(),
+ originalMethodName + "$outline$"
+ + outlinedCount,
+ classGen));
+ outlinedCount++;
+ moreMethodsOutlined = true;
+
+ InstructionList il = getInstructionList();
+ InstructionHandle lastInst = il.getEnd();
+ il.setPositions();
+
+ // Check the size of the method now
+ currentMethodSize =
+ lastInst.getPosition()
+ + lastInst.getInstruction().getLength();
+ }
+ } while (moreMethodsOutlined && currentMethodSize > TARGET_METHOD_SIZE);
+
+ // Outlining failed to reduce the size of the current method
+ // sufficiently. Throw an internal error.
+ if (currentMethodSize > MAX_METHOD_SIZE) {
+ String msg = (new ErrorMsg(ErrorMsg.OUTLINE_ERR_METHOD_TOO_BIG))
+ .toString();
+ throw new InternalError(msg);
+ }
+
+ Method[] methodsArr = new Method[methodsOutlined.size() + 1];
+ methodsOutlined.toArray(methodsArr);
+
+ methodsArr[methodsOutlined.size()] = getThisMethod();
+
+ return methodsArr;
+ }
+
+ /**
+ * Given an outlineable chunk of code in the current {@link MethodGenerator}
+ * move ("outline") the chunk to a new method, and replace the chunk in the
+ * old method with a reference to that new method. No
+ * {@link OutlineableChunkStart} or {@link OutlineableChunkEnd} instructions
+ * are copied.
+ * @param first The {@link InstructionHandle} of the first instruction in
+ * the chunk to outline
+ * @param last The InstructionHandle of the last instruction in
+ * the chunk to outline
+ * @param outlinedMethodName The name of the new method
+ * @param classGen The {@link ClassGenerator} of which the original
+ * and new methods will be members
+ * @return The new {@link Method} containing the outlined code.
+ */
+ private Method outline(InstructionHandle first, InstructionHandle last,
+ String outlinedMethodName, ClassGenerator classGen) {
+ // We're not equipped to deal with exception handlers yet. Bail out!
+ if (getExceptionHandlers().length != 0) {
+ String msg = (new ErrorMsg(ErrorMsg.OUTLINE_ERR_TRY_CATCH))
+ .toString();
+ throw new InternalError(msg);
+ }
+
+ int outlineChunkStartOffset = first.getPosition();
+ int outlineChunkEndOffset = last.getPosition()
+ + last.getInstruction().getLength();
+
+ ConstantPoolGen cpg = getConstantPool();
+
+ // Create new outlined method with signature:
+ //
+ // private final outlinedMethodName(CopyLocals copyLocals);
+ //
+ // CopyLocals is an object that is used to copy-in/copy-out local
+ // variables that are used by the outlined method. Only locals whose
+ // value is potentially set or referenced outside the range of the
+ // chunk that is being outlined will be represented in CopyLocals. The
+ // type of the variable for copying local variables is actually
+ // generated to be unique - it is not named CopyLocals.
+ //
+ // The outlined method never needs to be referenced outside of this
+ // class, and will never be overridden, so we mark it private final.
+ final InstructionList newIL = new InstructionList();
+
+ final XSLTC xsltc = classGen.getParser().getXSLTC();
+ final String argTypeName = xsltc.getHelperClassName();
+ final Type[] argTypes =
+ new Type[] {(new ObjectType(argTypeName)).toJCType()};
+ final String argName = "copyLocals";
+ final String[] argNames = new String[] {argName};
+
+ int methodAttributes = ACC_PRIVATE | ACC_FINAL;
+ final boolean isStaticMethod = (getAccessFlags() & ACC_STATIC) != 0;
+
+ if (isStaticMethod) {
+ methodAttributes = methodAttributes | ACC_STATIC;
+ }
+
+ final MethodGenerator outlinedMethodGen =
+ new MethodGenerator(methodAttributes,
+ com.sun.org.apache.bcel.internal.generic.Type.VOID,
+ argTypes, argNames, outlinedMethodName,
+ getClassName(), newIL, cpg);
+
+ // Create class for copying local variables to the outlined method.
+ // The fields the class will need to contain will be determined as the
+ // code in the outlineable chunk is examined.
+ ClassGenerator copyAreaCG
+ = new ClassGenerator(argTypeName, OBJECT_CLASS, argTypeName+".java",
+ ACC_FINAL | ACC_PUBLIC | ACC_SUPER, null,
+ classGen.getStylesheet()) {
+ public boolean isExternal() {
+ return true;
+ }
+ };
+ ConstantPoolGen copyAreaCPG = copyAreaCG.getConstantPool();
+ copyAreaCG.addEmptyConstructor(ACC_PUBLIC);
+
+ // Number of fields in the copy class
+ int copyAreaFieldCount = 0;
+
+ // The handle for the instruction after the last one to be outlined.
+ // Note that this should never end up being null. An outlineable chunk
+ // won't contain a RETURN instruction or other branch out of the chunk,
+ // and the JVM specification prohibits code in a method from just
+ // "falling off the end" so this should always point to a valid handle.
+ InstructionHandle limit = last.getNext();
+
+ // InstructionLists for copying values into and out of an instance of
+ // CopyLocals:
+ // oldMethCoypInIL - from locals in old method into an instance
+ // of the CopyLocals class (oldMethCopyInIL)
+ // oldMethCopyOutIL - from CopyLocals back into locals in the old
+ // method
+ // newMethCopyInIL - from CopyLocals into locals in the new
+ // method
+ // newMethCopyOutIL - from locals in new method into the instance
+ // of the CopyLocals class
+ InstructionList oldMethCopyInIL = new InstructionList();
+ InstructionList oldMethCopyOutIL = new InstructionList();
+ InstructionList newMethCopyInIL = new InstructionList();
+ InstructionList newMethCopyOutIL = new InstructionList();
+
+ // Allocate instance of class in which we'll copy in or copy out locals
+ // and make two copies: last copy is used to invoke constructor;
+ // other two are used for references to fields in the CopyLocals object
+ InstructionHandle outlinedMethodCallSetup =
+ oldMethCopyInIL.append(new NEW(cpg.addClass(argTypeName)));
+ oldMethCopyInIL.append(InstructionConstants.DUP);
+ oldMethCopyInIL.append(InstructionConstants.DUP);
+ oldMethCopyInIL.append(
+ new INVOKESPECIAL(cpg.addMethodref(argTypeName, "", "()V")));
+
+ // Generate code to invoke the new outlined method, and place the code
+ // on oldMethCopyOutIL
+ InstructionHandle outlinedMethodRef;
+
+ if (isStaticMethod) {
+ outlinedMethodRef =
+ oldMethCopyOutIL.append(
+ new INVOKESTATIC(cpg.addMethodref(
+ classGen.getClassName(),
+ outlinedMethodName,
+ outlinedMethodGen.getSignature())));
+ } else {
+ oldMethCopyOutIL.append(InstructionConstants.THIS);
+ oldMethCopyOutIL.append(InstructionConstants.SWAP);
+ outlinedMethodRef =
+ oldMethCopyOutIL.append(
+ new INVOKEVIRTUAL(cpg.addMethodref(
+ classGen.getClassName(),
+ outlinedMethodName,
+ outlinedMethodGen.getSignature())));
+ }
+
+ // Used to keep track of the first in a sequence of
+ // OutlineableChunkStart instructions
+ boolean chunkStartTargetMappingsPending = false;
+ InstructionHandle pendingTargetMappingHandle = null;
+
+ // Used to keep track of the last instruction that was copied
+ InstructionHandle lastCopyHandle = null;
+
+ // Keeps track of the mapping from instruction handles in the old
+ // method to instruction handles in the outlined method. Only need
+ // to track instructions that are targeted by something else in the
+ // generated BCEL
+ HashMap targetMap = new HashMap();
+
+ // Keeps track of the mapping from local variables in the old method
+ // to local variables in the outlined method.
+ HashMap localVarMap = new HashMap();
+
+ HashMap revisedLocalVarStart = new HashMap();
+ HashMap revisedLocalVarEnd = new HashMap();
+
+ // Pass 1: Make copies of all instructions, append them to the new list
+ // and associate old instruction references with the new ones, i.e.,
+ // a 1:1 mapping. The special marker instructions are not copied.
+ // Also, identify local variables whose values need to be copied into or
+ // out of the new outlined method, and builds up targetMap and
+ // localVarMap as described above. The code identifies those local
+ // variables first so that they can have fixed slots in the stack
+ // frame for the outlined method assigned them ahead of all those
+ // variables that don't need to exist for the entirety of the outlined
+ // method invocation.
+ for (InstructionHandle ih = first; ih != limit; ih = ih.getNext()) {
+ Instruction inst = ih.getInstruction();
+
+ // MarkerInstructions are not copied, so if something else targets
+ // one, the targetMap will point to the nearest copied sibling
+ // InstructionHandle: for an OutlineableChunkEnd, the nearest
+ // preceding sibling; for an OutlineableChunkStart, the nearest
+ // following sibling.
+ if (inst instanceof MarkerInstruction) {
+ if (ih.hasTargeters()) {
+ if (inst instanceof OutlineableChunkEnd) {
+ targetMap.put(ih, lastCopyHandle);
+ } else {
+ if (!chunkStartTargetMappingsPending) {
+ chunkStartTargetMappingsPending = true;
+ pendingTargetMappingHandle = ih;
+ }
+ }
+ }
+ } else {
+ // Copy the instruction and append it to the outlined method's
+ // InstructionList.
+ Instruction c = inst.copy(); // Use clone for shallow copy
+
+ if (c instanceof BranchInstruction) {
+ lastCopyHandle = newIL.append((BranchInstruction)c);
+ } else {
+ lastCopyHandle = newIL.append(c);
+ }
+
+ if (c instanceof LocalVariableInstruction
+ || c instanceof RET) {
+ // For any instruction that touches a local variable,
+ // check whether the local variable's value needs to be
+ // copied into or out of the outlined method. If so,
+ // generate the code to perform the necessary copying, and
+ // use localVarMap to map the variable in the original
+ // method to the variable in the new method.
+ IndexedInstruction lvi = (IndexedInstruction)c;
+ int oldLocalVarIndex = lvi.getIndex();
+ LocalVariableGen oldLVG =
+ getLocalVariableRegistry()
+ .lookupRegisteredLocalVariable(oldLocalVarIndex,
+ ih.getPosition());
+ LocalVariableGen newLVG =
+ (LocalVariableGen)localVarMap.get(oldLVG);
+
+ // Has the code already mapped this local variable to a
+ // local in the new method?
+ if (localVarMap.get(oldLVG) == null) {
+ // Determine whether the local variable needs to be
+ // copied into or out of the outlined by checking
+ // whether the range of instructions in which the
+ // variable is accessible is outside the range of
+ // instructions in the outlineable chunk.
+ // Special case a chunk start offset of zero: a local
+ // variable live at that position must be a method
+ // parameter, so the code doesn't need to check whether
+ // the variable is live before that point; being live
+ // at offset zero is sufficient to know that the value
+ // must be copied in to the outlined method.
+ boolean copyInLocalValue =
+ offsetInLocalVariableGenRange(oldLVG,
+ (outlineChunkStartOffset != 0)
+ ? outlineChunkStartOffset-1
+ : 0);
+ boolean copyOutLocalValue =
+ offsetInLocalVariableGenRange(oldLVG,
+ outlineChunkEndOffset+1);
+
+ // For any variable that needs to be copied into or out
+ // of the outlined method, create a field in the
+ // CopyLocals class, and generate the necessary code for
+ // copying the value.
+ if (copyInLocalValue || copyOutLocalValue) {
+ String varName = oldLVG.getName();
+ Type varType = oldLVG.getType();
+ newLVG = outlinedMethodGen.addLocalVariable(varName,
+ varType,
+ null,
+ null);
+ int newLocalVarIndex = newLVG.getIndex();
+ String varSignature = varType.getSignature();
+
+ // Record the mapping from the old local to the new
+ localVarMap.put(oldLVG, newLVG);
+
+ copyAreaFieldCount++;
+ String copyAreaFieldName =
+ "field" + copyAreaFieldCount;
+ copyAreaCG.addField(
+ new Field(ACC_PUBLIC,
+ copyAreaCPG.addUtf8(copyAreaFieldName),
+ copyAreaCPG.addUtf8(varSignature),
+ null, copyAreaCPG.getConstantPool()));
+
+ int fieldRef = cpg.addFieldref(argTypeName,
+ copyAreaFieldName,
+ varSignature);
+
+ if (copyInLocalValue) {
+ // Generate code for the old method to store the
+ // value of the local into the correct field in
+ // CopyLocals prior to invocation of the
+ // outlined method.
+ oldMethCopyInIL.append(
+ InstructionConstants.DUP);
+ InstructionHandle copyInLoad =
+ oldMethCopyInIL.append(
+ loadLocal(oldLocalVarIndex, varType));
+ oldMethCopyInIL.append(new PUTFIELD(fieldRef));
+
+ // If the end of the live range of the old
+ // variable was in the middle of the outlined
+ // chunk. Make the load of its value the new
+ // end of its range.
+ if (!copyOutLocalValue) {
+ revisedLocalVarEnd.put(oldLVG, copyInLoad);
+ }
+
+ // Generate code for start of the outlined
+ // method to copy the value from a field in
+ // CopyLocals to the new local in the outlined
+ // method
+ newMethCopyInIL.append(
+ InstructionConstants.ALOAD_1);
+ newMethCopyInIL.append(new GETFIELD(fieldRef));
+ newMethCopyInIL.append(
+ storeLocal(newLocalVarIndex, varType));
+ }
+
+ if (copyOutLocalValue) {
+ // Generate code for the end of the outlined
+ // method to copy the value from the new local
+ // variable into a field in CopyLocals
+ // method
+ newMethCopyOutIL.append(
+ InstructionConstants.ALOAD_1);
+ newMethCopyOutIL.append(
+ loadLocal(newLocalVarIndex, varType));
+ newMethCopyOutIL.append(new PUTFIELD(fieldRef));
+
+ // Generate code to copy the value from a field
+ // in CopyLocals into a local in the original
+ // method following invocation of the outlined
+ // method.
+ oldMethCopyOutIL.append(
+ InstructionConstants.DUP);
+ oldMethCopyOutIL.append(new GETFIELD(fieldRef));
+ InstructionHandle copyOutStore =
+ oldMethCopyOutIL.append(
+ storeLocal(oldLocalVarIndex, varType));
+
+ // If the start of the live range of the old
+ // variable was in the middle of the outlined
+ // chunk. Make this store into it the new start
+ // of its range.
+ if (!copyInLocalValue) {
+ revisedLocalVarStart.put(oldLVG,
+ copyOutStore);
+ }
+ }
+ }
+ }
+ }
+
+ if (ih.hasTargeters()) {
+ targetMap.put(ih, lastCopyHandle);
+ }
+
+ // If this is the first instruction copied following a sequence
+ // of OutlineableChunkStart instructions, indicate that the
+ // sequence of old instruction all map to this newly created
+ // instruction
+ if (chunkStartTargetMappingsPending) {
+ do {
+ targetMap.put(pendingTargetMappingHandle,
+ lastCopyHandle);
+ pendingTargetMappingHandle =
+ pendingTargetMappingHandle.getNext();
+ } while(pendingTargetMappingHandle != ih);
+
+ chunkStartTargetMappingsPending = false;
+ }
+ }
+ }
+
+ // Pass 2: Walk old and new instruction lists, updating branch targets
+ // and local variable references in the new list
+ InstructionHandle ih = first;
+ InstructionHandle ch = newIL.getStart();
+
+ while (ch != null) {
+ // i == old instruction; c == copied instruction
+ Instruction i = ih.getInstruction();
+ Instruction c = ch.getInstruction();
+
+ if (i instanceof BranchInstruction) {
+ BranchInstruction bc = (BranchInstruction)c;
+ BranchInstruction bi = (BranchInstruction)i;
+ InstructionHandle itarget = bi.getTarget(); // old target
+
+ // New target must be in targetMap
+ InstructionHandle newTarget =
+ (InstructionHandle)targetMap.get(itarget);
+
+ bc.setTarget(newTarget);
+
+ // Handle LOOKUPSWITCH or TABLESWITCH which may have many
+ // target instructions
+ if (bi instanceof Select) {
+ InstructionHandle[] itargets = ((Select)bi).getTargets();
+ InstructionHandle[] ctargets = ((Select)bc).getTargets();
+
+ // Update all targets
+ for (int j=0; j < itargets.length; j++) {
+ ctargets[j] =
+ (InstructionHandle)targetMap.get(itargets[j]);
+ }
+ }
+ } else if (i instanceof LocalVariableInstruction
+ || i instanceof RET) {
+ // For any instruction that touches a local variable,
+ // map the location of the variable in the original
+ // method to its location in the new method.
+ IndexedInstruction lvi = (IndexedInstruction)c;
+ int oldLocalVarIndex = lvi.getIndex();
+ LocalVariableGen oldLVG =
+ getLocalVariableRegistry()
+ .lookupRegisteredLocalVariable(oldLocalVarIndex,
+ ih.getPosition());
+ LocalVariableGen newLVG =
+ (LocalVariableGen)localVarMap.get(oldLVG);
+ int newLocalVarIndex;
+
+ if (newLVG == null) {
+ // Create new variable based on old variable - use same
+ // name and type, but we will let the variable be active
+ // for the entire outlined method.
+ // LocalVariableGen oldLocal = oldLocals[oldLocalVarIndex];
+ String varName = oldLVG.getName();
+ Type varType = oldLVG.getType();
+ newLVG = outlinedMethodGen.addLocalVariable(varName,
+ varType,
+ null,
+ null);
+ newLocalVarIndex = newLVG.getIndex();
+ localVarMap.put(oldLVG, newLVG);
+
+ // The old variable's live range was wholly contained in
+ // the outlined chunk. There should no longer be stores
+ // of values into it or loads of its value, so we can just
+ // mark its live range as the reference to the outlined
+ // method.
+ revisedLocalVarStart.put(oldLVG, outlinedMethodRef);
+ revisedLocalVarEnd.put(oldLVG, outlinedMethodRef);
+ } else {
+ newLocalVarIndex = newLVG.getIndex();
+ }
+ lvi.setIndex(newLocalVarIndex);
+ }
+
+ // If the old instruction marks the end of the range of a local
+ // variable, make sure that any slots on the stack reserved for
+ // local variables are made available for reuse by calling
+ // MethodGenerator.removeLocalVariable
+ if (ih.hasTargeters()) {
+ InstructionTargeter[] targeters = ih.getTargeters();
+
+ for (int idx = 0; idx < targeters.length; idx++) {
+ InstructionTargeter targeter = targeters[idx];
+
+ if (targeter instanceof LocalVariableGen
+ && ((LocalVariableGen)targeter).getEnd()==ih) {
+ Object newLVG = localVarMap.get(targeter);
+ if (newLVG != null) {
+ outlinedMethodGen.removeLocalVariable(
+ (LocalVariableGen)newLVG);
+ }
+ }
+ }
+ }
+
+ // If the current instruction in the original list was a marker,
+ // it wasn't copied, so don't advance through the list of copied
+ // instructions yet.
+ if (!(i instanceof MarkerInstruction)) {
+ ch = ch.getNext();
+ }
+ ih = ih.getNext();
+
+ }
+
+ // POP the reference to the CopyLocals object from the stack
+ oldMethCopyOutIL.append(InstructionConstants.POP);
+
+ // Now that the generation of the outlined code is complete, update
+ // the old local variables with new start and end ranges, as required.
+ Iterator revisedLocalVarStartPairIter = revisedLocalVarStart.entrySet()
+ .iterator();
+ while (revisedLocalVarStartPairIter.hasNext()) {
+ Map.Entry lvgRangeStartPair =
+ (Map.Entry)revisedLocalVarStartPairIter.next();
+ LocalVariableGen lvg = (LocalVariableGen)lvgRangeStartPair.getKey();
+ InstructionHandle startInst =
+ (InstructionHandle)lvgRangeStartPair.getValue();
+
+ lvg.setStart(startInst);
+
+ }
+
+ Iterator revisedLocalVarEndPairIter = revisedLocalVarEnd.entrySet()
+ .iterator();
+ while (revisedLocalVarEndPairIter.hasNext()) {
+ Map.Entry lvgRangeEndPair =
+ (Map.Entry)revisedLocalVarEndPairIter.next();
+ LocalVariableGen lvg = (LocalVariableGen)lvgRangeEndPair.getKey();
+ InstructionHandle endInst =
+ (InstructionHandle)lvgRangeEndPair.getValue();
+
+ lvg.setEnd(endInst);
+ }
+
+ xsltc.dumpClass(copyAreaCG.getJavaClass());
+
+ // Assemble the instruction lists so that the old method invokes the
+ // new outlined method
+ InstructionList oldMethodIL = getInstructionList();
+
+ oldMethodIL.insert(first, oldMethCopyInIL);
+ oldMethodIL.insert(first, oldMethCopyOutIL);
+
+ // Insert the copying code into the outlined method
+ newIL.insert(newMethCopyInIL);
+ newIL.append(newMethCopyOutIL);
+ newIL.append(InstructionConstants.RETURN);
+
+ // Discard instructions in outlineable chunk from old method
+ try {
+ oldMethodIL.delete(first, last);
+ } catch (TargetLostException e) {
+ InstructionHandle[] targets = e.getTargets();
+ // If there were still references to old instructions lingering,
+ // clean those up. The only instructions targetting the deleted
+ // instructions should have been part of the chunk that was just
+ // deleted, except that instructions might branch to the start of
+ // the outlined chunk; similarly, all the live ranges of local
+ // variables should have been adjusted, except for unreferenced
+ // variables.
+ for (int i = 0; i < targets.length; i++) {
+ InstructionHandle lostTarget = targets[i];
+ InstructionTargeter[] targeters = lostTarget.getTargeters();
+ for (int j = 0; j < targeters.length; j++) {
+ if (targeters[j] instanceof LocalVariableGen) {
+ LocalVariableGen lvgTargeter =
+ (LocalVariableGen) targeters[j];
+ // In the case of any lingering variable references,
+ // just make the live range point to the outlined
+ // function reference. Such variables should be unused
+ // anyway.
+ if (lvgTargeter.getStart() == lostTarget) {
+ lvgTargeter.setStart(outlinedMethodRef);
+ }
+ if (lvgTargeter.getEnd() == lostTarget) {
+ lvgTargeter.setEnd(outlinedMethodRef);
+ }
+ } else {
+ targeters[j].updateTarget(lostTarget,
+ outlinedMethodCallSetup);
+ }
+ }
+ }
+ }
+
+ // Make a copy for the new method of all exceptions that might be thrown
+ String[] exceptions = getExceptions();
+ for (int i = 0; i < exceptions.length; i++) {
+ outlinedMethodGen.addException(exceptions[i]);
+ }
+
+ return outlinedMethodGen.getThisMethod();
+ }
+
+ /**
+ * Helper method to generate an instance of a subclass of
+ * {@link LoadInstruction} based on the specified {@link Type} that will
+ * load the specified local variable
+ * @param index the JVM stack frame index of the variable that is to be
+ * loaded
+ * @param type the {@link Type} of the variable
+ * @return the generated {@link LoadInstruction}
+ */
+ private static Instruction loadLocal(int index, Type type) {
+ if (type == Type.BOOLEAN) {
+ return new ILOAD(index);
+ } else if (type == Type.INT) {
+ return new ILOAD(index);
+ } else if (type == Type.SHORT) {
+ return new ILOAD(index);
+ } else if (type == Type.LONG) {
+ return new LLOAD(index);
+ } else if (type == Type.BYTE) {
+ return new ILOAD(index);
+ } else if (type == Type.CHAR) {
+ return new ILOAD(index);
+ } else if (type == Type.FLOAT) {
+ return new FLOAD(index);
+ } else if (type == Type.DOUBLE) {
+ return new DLOAD(index);
+ } else {
+ return new ALOAD(index);
+ }
+ }
+
+ /**
+ * Helper method to generate an instance of a subclass of
+ * {@link StoreInstruction} based on the specified {@link Type} that will
+ * store a value in the specified local variable
+ * @param index the JVM stack frame index of the variable that is to be
+ * stored
+ * @param type the {@link Type} of the variable
+ * @return the generated {@link StoredInstruction}
+ */
+ private static Instruction storeLocal(int index, Type type) {
+ if (type == Type.BOOLEAN) {
+ return new ISTORE(index);
+ } else if (type == Type.INT) {
+ return new ISTORE(index);
+ } else if (type == Type.SHORT) {
+ return new ISTORE(index);
+ } else if (type == Type.LONG) {
+ return new LSTORE(index);
+ } else if (type == Type.BYTE) {
+ return new ISTORE(index);
+ } else if (type == Type.CHAR) {
+ return new ISTORE(index);
+ } else if (type == Type.FLOAT) {
+ return new FSTORE(index);
+ } else if (type == Type.DOUBLE) {
+ return new DSTORE(index);
+ } else {
+ return new ASTORE(index);
+ }
+ }
+
+ /**
+ * Track the number of outlineable chunks seen.
+ */
+ private int m_totalChunks = 0;
+
+ /**
+ * Track the number of outlineable chunks started but not yet ended. Used
+ * to detect imbalances in byte code generation.
+ */
+ private int m_openChunks = 0;
+
+ /**
+ * Mark the end of the method's
+ * {@link InstructionList} as the start of an outlineable chunk of code.
+ * The outlineable chunk begins after the {@link InstructionHandle} that is
+ * at the end of the method's {@link InstructionList}, or at the start of
+ * the method if the InstructionList is empty.
+ * See {@link OutlineableChunkStart} for more information.
+ */
+ public void markChunkStart() {
+ // m_chunkTree.markChunkStart();
+ getInstructionList()
+ .append(OutlineableChunkStart.OUTLINEABLECHUNKSTART);
+ m_totalChunks++;
+ m_openChunks++;
+ }
+
+ /**
+ * Mark the end of an outlineable chunk of code. See
+ * {@link OutlineableChunkStart} for more information.
+ */
+ public void markChunkEnd() {
+ // m_chunkTree.markChunkEnd();
+ getInstructionList()
+ .append(OutlineableChunkEnd.OUTLINEABLECHUNKEND);
+ m_openChunks--;
+ if (m_openChunks < 0) {
+ String msg = (new ErrorMsg(ErrorMsg.OUTLINE_ERR_UNBALANCED_MARKERS))
+ .toString();
+ throw new InternalError(msg);
+ }
+ }
+
+ /**
+ * Get all {@link Method}s generated by this {@link MethodGenerator}.
+ * The {@link MethodGen#getMethod()} only returns a single
+ * Method object. This method takes into account the Java
+ * Virtual Machine Specification limit of 64KB on the size of a method, and
+ * may return more than one Method.
+ * If the code associated with the MethodGenerator would
+ * exceed the 64KB limit, this method will attempt to split the code in
+ * the {@link InstructionList} associated with this
+ * MethodGenerator into several methods.
+ * @param classGen the {@link ClassGenerator} of which these methods are
+ * members
+ * @return an array of all the Methods generated
+ */
+ Method[] getGeneratedMethods(ClassGenerator classGen) {
+ Method[] generatedMethods;
+ InstructionList il = getInstructionList();
+ InstructionHandle last = il.getEnd();
+
+ il.setPositions();
+
+ int instructionListSize =
+ last.getPosition() + last.getInstruction().getLength();
+
+ // Need to look for any branch target offsets that exceed the range
+ // [-32768,32767]
+ if (instructionListSize > MAX_BRANCH_TARGET_OFFSET) {
+ boolean ilChanged = widenConditionalBranchTargetOffsets();
+
+ // If any branch instructions needed widening, recompute the size
+ // of the byte code for the method
+ if (ilChanged) {
+ il.setPositions();
+ last = il.getEnd();
+ instructionListSize =
+ last.getPosition() + last.getInstruction().getLength();
+ }
+ }
+
+ if (instructionListSize > MAX_METHOD_SIZE) {
+ generatedMethods = outlineChunks(classGen, instructionListSize);
+ } else {
+ generatedMethods = new Method[] {getThisMethod()};
+ }
+ return generatedMethods;
+ }
+
+ protected Method getThisMethod() {
+ stripAttributes(true);
+ setMaxLocals();
+ setMaxStack();
+ removeNOPs();
+
+ return getMethod();
+ }
+ /**
+ * Rewrites branches to avoid the JVM limits of relative branch
+ * offsets. There is no need to invoke this method if the bytecode for the
+ * {@link MethodGenerator} does not exceed 32KB.
+ * The Java Virtual Machine Specification permits the code portion of a
+ * method to be up to 64KB in length. However, some control transfer
+ * instructions specify relative offsets as a signed 16-bit quantity,
+ * limiting the range to a subset of the instructions that might be in a
+ * method.
+ * The TABLESWITCH and LOOKUPSWITCH
+ * instructions always use 32-bit signed relative offsets, so they are
+ * immune to this problem.
+ * The GOTO and JSR
+ * instructions come in two forms, one of which uses 16-bit relative
+ * offsets, and the other of which uses 32-bit relative offsets. The BCEL
+ * library decides whether to use the wide form of GOTO or
+ * JSRinstructions based on the relative offset of the target
+ * of the instruction without any intervention by the user of the
+ * library.
+ * This leaves the various conditional branch instructions,
+ * IFEQ, IFNULL, IF_ICMPEQ,
+ * et al., all of which use 16-bit signed relative offsets, with no
+ * 32-bit wide form available.
+ * This method scans the {@link InstructionList} associated with this
+ * {@link MethodGenerator} and finds all conditional branch instructions
+ * that might exceed the 16-bit limitation for relative branch offsets.
+ * The logic of each such instruction is inverted, and made to target the
+ * instruction which follows it. An unconditional branch to the original
+ * target of the instruction is then inserted between the conditional
+ * branch and the instruction which previously followed it. The
+ * unconditional branch is permitted to have a 16-bit or a 32-bit relative
+ * offset, as described above. For example,
+ *
+ * 1234: NOP
+ * ...
+ * 55278: IFEQ -54044
+ * 55280: NOP
+ *
+ * is rewritten as
+ *
+ * 1234: NOP
+ * ...
+ * 55278: IFNE 7
+ * 55280: GOTO_W -54046
+ * 55285: NOP
+ *
+ * Preconditions:
+ *
- The {@link InstructionList#setPositions()} has been called for
+ * the
InstructionList associated with this
+ * MethodGenerator.
+ *
+ * Postconditions:
+ *
- Any further changes to the
InstructionList for this
+ * MethodGenerator will invalidate the changes made by this
+ * method.
+ *
+ * @return true if the InstructionList was
+ * modified; false otherwise
+ * @see The Java Virtual Machine Specification, Second Edition
+ */
+ boolean widenConditionalBranchTargetOffsets() {
+ boolean ilChanged = false;
+ int maxOffsetChange = 0;
+ InstructionList il = getInstructionList();
+
+ // Loop through all the instructions, finding those that would be
+ // affected by inserting new instructions in the InstructionList, and
+ // calculating the maximum amount by which the relative offset between
+ // two instructions could possibly change.
+ // In part this loop duplicates code in
+ // org.apache.bcel.generic.InstructionList.setPosition(), which does
+ // this to determine whether to use 16-bit or 32-bit offsets for GOTO
+ // and JSR instructions. Ideally, that method would do the same for
+ // conditional branch instructions, but it doesn't, so we duplicate the
+ // processing here.
+ for (InstructionHandle ih = il.getStart();
+ ih != null;
+ ih = ih.getNext()) {
+ Instruction inst = ih.getInstruction();
+
+ switch (inst.getOpcode()) {
+ // Instructions that may have 16-bit or 32-bit branch targets.
+ // The size of the branch offset might increase by two bytes.
+ case Constants.GOTO:
+ case Constants.JSR:
+ maxOffsetChange = maxOffsetChange + 2;
+ break;
+ // Instructions that contain padding for alignment purposes
+ // Up to three bytes of padding might be needed. For greater
+ // accuracy, we should be able to discount any padding already
+ // added to these instructions by InstructionList.setPosition(),
+ // their APIs do not expose that information.
+ case Constants.TABLESWITCH:
+ case Constants.LOOKUPSWITCH:
+ maxOffsetChange = maxOffsetChange + 3;
+ break;
+ // Instructions that might be rewritten by this method as a
+ // conditional branch followed by an unconditional branch.
+ // The unconditional branch would require five bytes.
+ case Constants.IF_ACMPEQ:
+ case Constants.IF_ACMPNE:
+ case Constants.IF_ICMPEQ:
+ case Constants.IF_ICMPGE:
+ case Constants.IF_ICMPGT:
+ case Constants.IF_ICMPLE:
+ case Constants.IF_ICMPLT:
+ case Constants.IF_ICMPNE:
+ case Constants.IFEQ:
+ case Constants.IFGE:
+ case Constants.IFGT:
+ case Constants.IFLE:
+ case Constants.IFLT:
+ case Constants.IFNE:
+ case Constants.IFNONNULL:
+ case Constants.IFNULL:
+ maxOffsetChange = maxOffsetChange + 5;
+ break;
+ }
+ }
+
+ // Now that the maximum number of bytes by which the method might grow
+ // has been determined, look for conditional branches to see which
+ // might possibly exceed the 16-bit relative offset.
+ for (InstructionHandle ih = il.getStart();
+ ih != null;
+ ih = ih.getNext()) {
+ Instruction inst = ih.getInstruction();
+
+ if (inst instanceof IfInstruction) {
+ IfInstruction oldIfInst = (IfInstruction)inst;
+ BranchHandle oldIfHandle = (BranchHandle)ih;
+ InstructionHandle target = oldIfInst.getTarget();
+ int relativeTargetOffset = target.getPosition()
+ - oldIfHandle.getPosition();
+
+ // Consider the worst case scenario in which the conditional
+ // branch and its target are separated by all the instructions
+ // in the method that might increase in size. If that results
+ // in a relative offset that cannot be represented as a 32-bit
+ // signed quantity, rewrite the instruction as described above.
+ if ((relativeTargetOffset - maxOffsetChange
+ < MIN_BRANCH_TARGET_OFFSET)
+ || (relativeTargetOffset + maxOffsetChange
+ > MAX_BRANCH_TARGET_OFFSET)) {
+ // Invert the logic of the IF instruction, and append
+ // that to the InstructionList following the original IF
+ // instruction
+ InstructionHandle nextHandle = oldIfHandle.getNext();
+ IfInstruction invertedIfInst = oldIfInst.negate();
+ BranchHandle invertedIfHandle = il.append(oldIfHandle,
+ invertedIfInst);
+
+ // Append an unconditional branch to the target of the
+ // original IF instruction after the new IF instruction
+ BranchHandle gotoHandle = il.append(invertedIfHandle,
+ new GOTO(target));
+
+ // If the original IF was the last instruction in
+ // InstructionList, add a new no-op to act as the target
+ // of the new IF
+ if (nextHandle == null) {
+ nextHandle = il.append(gotoHandle, NOP);
+ }
+
+ // Make the new IF instruction branch around the GOTO
+ invertedIfHandle.updateTarget(target, nextHandle);
+
+ // If anything still "points" to the old IF instruction,
+ // make adjustments to refer to either the new IF or GOTO
+ // instruction
+ if (oldIfHandle.hasTargeters()) {
+ InstructionTargeter[] targeters =
+ oldIfHandle.getTargeters();
+
+ for (int i = 0; i < targeters.length; i++) {
+ InstructionTargeter targeter = targeters[i];
+ // Ideally, one should simply be able to use
+ // InstructionTargeter.updateTarget to change
+ // references to the old IF instruction to the new
+ // IF instruction. However, if a LocalVariableGen
+ // indicated the old IF marked the end of the range
+ // in which the IF variable is in use, the live
+ // range of the variable must extend to include the
+ // newly created GOTO instruction. The need for
+ // this sort of specific knowledge of an
+ // implementor of the InstructionTargeter interface
+ // makes the code more fragile. Future implementors
+ // of the interface might have similar requirements
+ // which wouldn't be accommodated seemlessly.
+ if (targeter instanceof LocalVariableGen) {
+ LocalVariableGen lvg =
+ (LocalVariableGen) targeter;
+ if (lvg.getStart() == oldIfHandle) {
+ lvg.setStart(invertedIfHandle);
+ } else if (lvg.getEnd() == oldIfHandle) {
+ lvg.setEnd(gotoHandle);
+ }
+ } else {
+ targeter.updateTarget(oldIfHandle,
+ invertedIfHandle);
+ }
+ }
+ }
+
+ try {
+ il.delete(oldIfHandle);
+ } catch (TargetLostException tle) {
+ // This can never happen - we updated the list of
+ // instructions that target the deleted instruction
+ // prior to deleting it.
+ String msg =
+ new ErrorMsg(ErrorMsg.OUTLINE_ERR_DELETED_TARGET,
+ tle.getMessage()).toString();
+ throw new InternalError(msg);
+ }
+
+ // Adjust the pointer in the InstructionList to point after
+ // the newly inserted IF instruction
+ ih = gotoHandle;
+
+ // Indicate that this method rewrote at least one IF
+ ilChanged = true;
+ }
+ }
+ }
+
+ // Did this method rewrite any IF instructions?
+ return ilChanged;
+ }
+}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MultiHashtable.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MultiHashtable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MultiHashtable.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MultiHashtable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NamedMethodGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NamedMethodGenerator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NamedMethodGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NamedMethodGenerator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeCounterGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeCounterGenerator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeCounterGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeCounterGenerator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSetType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSetType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSetType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSetType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordFactGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordFactGenerator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordFactGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordFactGenerator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordGenerator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeSortRecordGenerator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NodeType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NumberType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NumberType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NumberType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/NumberType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectType.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectType.java
index e093bd163d5..206b59efe62 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectType.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectType.java
@@ -34,6 +34,7 @@ import com.sun.org.apache.bcel.internal.generic.Instruction;
import com.sun.org.apache.bcel.internal.generic.InstructionList;
import com.sun.org.apache.bcel.internal.generic.PUSH;
import com.sun.org.apache.xalan.internal.xsltc.compiler.Constants;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
/**
* @author Todd Miller
@@ -53,8 +54,7 @@ public final class ObjectType extends Type {
_javaClassName = javaClassName;
try {
- _clazz = ObjectFactory.findProviderClass(
- javaClassName, ObjectFactory.findClassLoader(), true);
+ _clazz = ObjectFactory.findProviderClass(javaClassName, true);
}
catch (ClassNotFoundException e) {
_clazz = null;
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/OutlineableChunkEnd.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/OutlineableChunkEnd.java
new file mode 100644
index 00000000000..b2daff35cf0
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/OutlineableChunkEnd.java
@@ -0,0 +1,70 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * $Id: OutlineableChunkEnd.java,v 1.10 2010-11-01 04:34:19 joehw Exp $
+ */
+package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
+import com.sun.org.apache.bcel.internal.generic.Instruction;
+/**
+ * Marks the end of a region of byte code that can be copied into a new
+ * method. See the {@link OutlineableChunkStart} pseudo-instruction for
+ * details.
+ */
+class OutlineableChunkEnd extends MarkerInstruction {
+ /**
+ * A constant instance of {@link OutlineableChunkEnd}. As it has no fields,
+ * there should be no need to create an instance of this class.
+ */
+ public static final Instruction OUTLINEABLECHUNKEND =
+ new OutlineableChunkEnd();
+
+ /**
+ * Private default constructor. As it has no fields,
+ * there should be no need to create an instance of this class. See
+ * {@link OutlineableChunkEnd#OUTLINEABLECHUNKEND}.
+ */
+ private OutlineableChunkEnd() {
+ }
+
+ /**
+ * Get the name of this instruction. Used for debugging.
+ * @return the instruction name
+ */
+ public String getName() {
+ return OutlineableChunkEnd.class.getName();
+ }
+
+ /**
+ * Get the name of this instruction. Used for debugging.
+ * @return the instruction name
+ */
+ public String toString() {
+ return getName();
+ }
+
+ /**
+ * Get the name of this instruction. Used for debugging.
+ * @return the instruction name
+ */
+ public String toString(boolean verbose) {
+ return getName();
+ }
+}
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/OutlineableChunkStart.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/OutlineableChunkStart.java
new file mode 100644
index 00000000000..9b54cac0f22
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/OutlineableChunkStart.java
@@ -0,0 +1,80 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * $Id: MethodGenerator.java,v 1.10 2010-11-01 04:34:19 joehw Exp $
+ */
+package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
+import com.sun.org.apache.bcel.internal.generic.Instruction;
+
+/**
+ * This pseudo-instruction marks the beginning of a region of byte code that
+ * can be copied into a new method, termed an "outlineable" chunk. The size of
+ * the Java stack must be the same at the start of the region as it is at the
+ * end of the region, any value on the stack at the start of the region must not
+ * be consumed by an instruction in the region of code, the region must not
+ * contain a return instruction, no branch instruction in the region is
+ * permitted to have a target that is outside the region, and no branch
+ * instruction outside the region is permitted to have a target that is inside
+ * the region.
+ * The end of the region is marked by an {@link OutlineableChunkEnd}
+ * pseudo-instruction.
+ * Such a region of code may contain other outlineable regions.
+ */
+class OutlineableChunkStart extends MarkerInstruction {
+ /**
+ * A constant instance of {@link OutlineableChunkStart}. As it has no fields,
+ * there should be no need to create an instance of this class.
+ */
+ public static final Instruction OUTLINEABLECHUNKSTART =
+ new OutlineableChunkStart();
+
+ /**
+ * Private default constructor. As it has no fields,
+ * there should be no need to create an instance of this class. See
+ * {@link OutlineableChunkStart#OUTLINEABLECHUNKSTART}.
+ */
+ private OutlineableChunkStart() {
+ }
+
+ /**
+ * Get the name of this instruction. Used for debugging.
+ * @return the instruction name
+ */
+ public String getName() {
+ return OutlineableChunkStart.class.getName();
+ }
+
+ /**
+ * Get the name of this instruction. Used for debugging.
+ * @return the instruction name
+ */
+ public String toString() {
+ return getName();
+ }
+
+ /**
+ * Get the name of this instruction. Used for debugging.
+ * @return the instruction name
+ */
+ public String toString(boolean verbose) {
+ return getName();
+ }
+}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/RealType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/RealType.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/RealType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/RealType.java
index 2d1e74504de..f70a210c0ab 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/RealType.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/RealType.java
@@ -170,8 +170,8 @@ public final class RealType extends NumberType {
il.append(DUP2);
local = methodGen.addLocalVariable("real_to_boolean_tmp",
com.sun.org.apache.bcel.internal.generic.Type.DOUBLE,
- il.getEnd(), null);
- il.append(new DSTORE(local.getIndex()));
+ null, null);
+ local.setStart(il.append(new DSTORE(local.getIndex())));
// Compare it to 0.0
il.append(DCONST_0);
@@ -181,7 +181,7 @@ public final class RealType extends NumberType {
//!!! call isNaN
// Compare it to itself to see if NaN
il.append(new DLOAD(local.getIndex()));
- il.append(new DLOAD(local.getIndex()));
+ local.setEnd(il.append(new DLOAD(local.getIndex())));
il.append(DCMPG);
flowlist.add(il.append(new IFNE(null))); // NaN != NaN
return flowlist;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ReferenceType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ReferenceType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ReferenceType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ReferenceType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ResultTreeType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ResultTreeType.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ResultTreeType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ResultTreeType.java
index c6d8dd0e3dd..e61f7cbc87a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ResultTreeType.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ResultTreeType.java
@@ -180,7 +180,7 @@ public final class ResultTreeType extends Type {
methodGen.addLocalVariable("rt_to_string_handler",
Util.getJCRefType(STRING_VALUE_HANDLER_SIG),
null, null);
- il.append(new ASTORE(handler.getIndex()));
+ handler.setStart(il.append(new ASTORE(handler.getIndex())));
// Call the method that implements this result tree
index = cpg.addMethodref(className, _methodName,
@@ -188,7 +188,7 @@ public final class ResultTreeType extends Type {
il.append(new INVOKEVIRTUAL(index));
// Restore new handler and call getValue()
- il.append(new ALOAD(handler.getIndex()));
+ handler.setEnd(il.append(new ALOAD(handler.getIndex())));
index = cpg.addMethodref(STRING_VALUE_HANDLER,
"getValue",
"()" + STRING_SIG);
@@ -255,7 +255,7 @@ public final class ResultTreeType extends Type {
Util.getJCRefType(DOM_INTF_SIG),
null, null);
il.append(new CHECKCAST(cpg.addClass(DOM_INTF_SIG)));
- il.append(new ASTORE(newDom.getIndex()));
+ newDom.setStart(il.append(new ASTORE(newDom.getIndex())));
// Overwrite old handler with DOM handler
index = cpg.addInterfaceMethodref(DOM_INTF,
@@ -275,7 +275,7 @@ public final class ResultTreeType extends Type {
methodGen.addLocalVariable("rt_to_reference_handler",
Util.getJCRefType(TRANSLET_OUTPUT_SIG),
null, null);
- il.append(new ASTORE(domBuilder.getIndex()));
+ domBuilder.setStart(il.append(new ASTORE(domBuilder.getIndex())));
// Call startDocument on the new handler
index = cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
@@ -292,13 +292,13 @@ public final class ResultTreeType extends Type {
il.append(new INVOKEVIRTUAL(index));
// Call endDocument on the DOM handler
- il.append(new ALOAD(domBuilder.getIndex()));
+ domBuilder.setEnd(il.append(new ALOAD(domBuilder.getIndex())));
index = cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
"endDocument", "()V");
il.append(new INVOKEINTERFACE(index, 1));
// Push the new DOM on the stack
- il.append(new ALOAD(newDom.getIndex()));
+ newDom.setEnd(il.append(new ALOAD(newDom.getIndex())));
}
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/RtMethodGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/RtMethodGenerator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/RtMethodGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/RtMethodGenerator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/SlotAllocator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/SlotAllocator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/SlotAllocator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/SlotAllocator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringStack.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringStack.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringStack.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringStack.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/StringType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TestGenerator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TestGenerator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TestGenerator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TestGenerator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/Type.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/Type.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/Type.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/Type.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TypeCheckError.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TypeCheckError.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TypeCheckError.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TypeCheckError.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/Util.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/Util.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/Util.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/Util.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/VoidType.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/VoidType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/VoidType.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/VoidType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/xpath.cup b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/xpath.cup
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/xpath.cup
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/xpath.cup
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/xpath.lex b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/xpath.lex
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/xpath.lex
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/compiler/xpath.lex
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/AbsoluteIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/AbsoluteIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/AbsoluteIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/AbsoluteIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/AdaptiveResultTreeImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/AdaptiveResultTreeImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/AdaptiveResultTreeImpl.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/AdaptiveResultTreeImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/AnyNodeCounter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/AnyNodeCounter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/AnyNodeCounter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/AnyNodeCounter.java
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/ArrayNodeListIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/ArrayNodeListIterator.java
new file mode 100644
index 00000000000..d7cf3a54fd0
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/ArrayNodeListIterator.java
@@ -0,0 +1,91 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * $Id: ArrayNodeListIterator.java,v 1.0 2009-11-25 04:34:24 joehw Exp $
+ */
+package com.sun.org.apache.xalan.internal.xsltc.dom;
+
+import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
+
+public class ArrayNodeListIterator implements DTMAxisIterator {
+
+ private int _pos = 0;
+
+ private int _mark = 0;
+
+ private int _nodes[];
+
+ private static final int[] EMPTY = { };
+
+ public ArrayNodeListIterator(int[] nodes) {
+ _nodes = nodes;
+ }
+
+ public int next() {
+ return _pos < _nodes.length ? _nodes[_pos++] : END;
+ }
+
+ public DTMAxisIterator reset() {
+ _pos = 0;
+ return this;
+ }
+
+ public int getLast() {
+ return _nodes.length;
+ }
+
+ public int getPosition() {
+ return _pos;
+ }
+
+ public void setMark() {
+ _mark = _pos;
+ }
+
+ public void gotoMark() {
+ _pos = _mark;
+ }
+
+ public DTMAxisIterator setStartNode(int node) {
+ if (node == END) _nodes = EMPTY;
+ return this;
+ }
+
+ public int getStartNode() {
+ return END;
+ }
+
+ public boolean isReverse() {
+ return false;
+ }
+
+ public DTMAxisIterator cloneIterator() {
+ return new ArrayNodeListIterator(_nodes);
+ }
+
+ public void setRestartable(boolean isRestartable) {
+ }
+
+ public int getNodeByPosition(int position) {
+ return _nodes[position - 1];
+ }
+
+}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/BitArray.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/BitArray.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/BitArray.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/BitArray.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/CachedNodeListIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/CachedNodeListIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/CachedNodeListIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/CachedNodeListIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ClonedNodeListIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/ClonedNodeListIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ClonedNodeListIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/ClonedNodeListIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/CollatorFactoryBase.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/CollatorFactoryBase.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/CollatorFactoryBase.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/CollatorFactoryBase.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListFilter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListFilter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/CurrentNodeListIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DOMAdapter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DOMAdapter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DOMAdapter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DOMAdapter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DOMBuilder.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DOMBuilder.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DOMBuilder.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DOMBuilder.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DOMWSFilter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DOMWSFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DOMWSFilter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DOMWSFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DocumentCache.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DocumentCache.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DocumentCache.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DocumentCache.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DupFilterIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DupFilterIterator.java
similarity index 93%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DupFilterIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DupFilterIterator.java
index c76f11d61e7..8ba00f4c6bf 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/DupFilterIterator.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/DupFilterIterator.java
@@ -88,7 +88,9 @@ public final class DupFilterIterator extends DTMAxisIteratorBase {
if (_isRestartable) {
// KeyIndex iterators are always relative to the root node, so there
// is never any point in re-reading the iterator (and we SHOULD NOT).
- if (_source instanceof KeyIndex
+ boolean sourceIsKeyIndex = _source instanceof KeyIndex;
+
+ if (sourceIsKeyIndex
&& _startNode == DTMDefaultBase.ROOTNODE) {
return this;
}
@@ -100,7 +102,12 @@ public final class DupFilterIterator extends DTMAxisIteratorBase {
while ((node = _source.next()) != END) {
_nodes.add(node);
}
- _nodes.sort();
+
+ // Nodes produced by KeyIndex are known to be in document order.
+ // Take advantage of it.
+ if (!sourceIsKeyIndex) {
+ _nodes.sort();
+ }
_nodesSize = _nodes.cardinality();
_current = 0;
_lastNext = END;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/EmptyFilter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/EmptyFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/EmptyFilter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/EmptyFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ExtendedSAX.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/ExtendedSAX.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ExtendedSAX.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/ExtendedSAX.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/Filter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/Filter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/Filter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/Filter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/FilterIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/FilterIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/FilterIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/FilterIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/FilteredStepIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/FilteredStepIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/FilteredStepIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/FilteredStepIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ForwardPositionIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/ForwardPositionIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ForwardPositionIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/ForwardPositionIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/KeyIndex.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/KeyIndex.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/KeyIndex.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/KeyIndex.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/LoadDocument.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/LoadDocument.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/LoadDocument.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/LoadDocument.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MatchingIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/MatchingIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MatchingIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/MatchingIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/MultiDOM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultiValuedNodeHeapIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/MultiValuedNodeHeapIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultiValuedNodeHeapIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/MultiValuedNodeHeapIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultipleNodeCounter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/MultipleNodeCounter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/MultipleNodeCounter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/MultipleNodeCounter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeCounter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeCounter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeCounter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeCounter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeIteratorBase.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeIteratorBase.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeIteratorBase.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeIteratorBase.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java
index 8f3684a7ae8..7057a32ffe2 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java
@@ -32,6 +32,7 @@ import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.utils.StringComparable;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
/**
* Base class for sort records containing application specific sort keys
@@ -119,8 +120,7 @@ public abstract class NodeSortRecord {
if (colFactClassname != null) {
try {
- Object candObj = ObjectFactory.findProviderClass(
- colFactClassname, ObjectFactory.findClassLoader(), true);
+ Object candObj = ObjectFactory.findProviderClass(colFactClassname, true);
_collatorFactory = (CollatorFactory)candObj;
} catch (ClassNotFoundException e) {
throw new TransletException(e);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecordFactory.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecordFactory.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecordFactory.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecordFactory.java
index 009abcb7edf..1cc464c4937 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecordFactory.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecordFactory.java
@@ -28,6 +28,7 @@ import com.sun.org.apache.xalan.internal.xsltc.Translet;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.utils.LocaleUtility;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
import java.util.Locale;
import java.text.Collator;
@@ -82,8 +83,7 @@ public class NodeSortRecordFactory {
_class = translet.getAuxiliaryClass(className);
// This code is only run when the native API is used
if (_class == null) {
- _class = ObjectFactory.findProviderClass(
- className, ObjectFactory.findClassLoader(), true);
+ _class = ObjectFactory.findProviderClass(className, true);
}
int levels = order.length;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NthIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NthIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/NthIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/NthIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SAXImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SimpleResultTreeImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SingleNodeCounter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SingleNodeCounter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SingleNodeCounter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SingleNodeCounter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SingletonIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SingletonIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SingletonIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SingletonIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SortSettings.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SortSettings.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SortSettings.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SortSettings.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SortingIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SortingIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SortingIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/SortingIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/StepIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/StepIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/StepIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/StepIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/StripWhitespaceFilter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/StripWhitespaceFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/StripWhitespaceFilter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/StripWhitespaceFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/UnionIterator.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/UnionIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/UnionIterator.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/UnionIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/XSLTCDTMManager.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/XSLTCDTMManager.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/XSLTCDTMManager.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/XSLTCDTMManager.java
index b416ca714cd..43eb1024c3e 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/XSLTCDTMManager.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/dom/XSLTCDTMManager.java
@@ -42,6 +42,7 @@ import com.sun.org.apache.xml.internal.utils.SystemIDResolver;
import com.sun.org.apache.xalan.internal.xsltc.trax.DOM2SAX;
import com.sun.org.apache.xalan.internal.xsltc.trax.StAXEvent2SAX;
import com.sun.org.apache.xalan.internal.xsltc.trax.StAXStream2SAX;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXNotRecognizedException;
@@ -102,9 +103,22 @@ public class XSLTCDTMManager extends DTMManagerDefault
* The default is com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager.
*/
public static Class getDTMManagerClass() {
- Class mgrClass = ObjectFactory.lookUpFactoryClass(DEFAULT_PROP_NAME,
+ return getDTMManagerClass(true);
+ }
+
+ public static Class getDTMManagerClass(boolean useServicesMechanism) {
+ Class mgrClass = null;
+ if (useServicesMechanism) {
+ mgrClass = ObjectFactory.lookUpFactoryClass(DEFAULT_PROP_NAME,
null,
DEFAULT_CLASS_NAME);
+ } else {
+ try {
+ mgrClass = ObjectFactory.findProviderClass(DEFAULT_CLASS_NAME, true);
+ } catch (Exception e) {
+ //will not happen
+ }
+ }
// If no class found, default to this one. (This should never happen -
// the ObjectFactory has already been told that the current class is
// the default).
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/javax.xml.transform.TransformerFactory b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/javax.xml.transform.TransformerFactory
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/javax.xml.transform.TransformerFactory
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/javax.xml.transform.TransformerFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java
index c902255336e..71e1e4abf7a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java
@@ -23,6 +23,7 @@
package com.sun.org.apache.xalan.internal.xsltc.runtime;
+import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import java.io.File;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
@@ -66,6 +67,8 @@ public abstract class AbstractTranslet implements Translet {
public String _encoding = "UTF-8";
public boolean _omitHeader = false;
public String _standalone = null;
+ //see OutputPropertiesFactory.ORACLE_IS_STANDALONE
+ public boolean _isStandalone = false;
public String _doctypePublic = null;
public String _doctypeSystem = null;
public boolean _indent = false;
@@ -105,6 +108,7 @@ public abstract class AbstractTranslet implements Translet {
// This is the name of the index used for ID attributes
private final static String ID_INDEX_NAME = "##id";
+ private boolean _useServicesMechanism;
/************************************************************************
* Debugging
@@ -669,6 +673,7 @@ public abstract class AbstractTranslet implements Translet {
if (_doctypeSystem != null) {
handler.setDoctype(_doctypeSystem, _doctypePublic);
}
+ handler.setIsStandalone(_isStandalone);
}
else if (_method.equals("html")) {
handler.setIndent(_indent);
@@ -691,6 +696,7 @@ public abstract class AbstractTranslet implements Translet {
}
handler.setIndent(_indent);
handler.setDoctype(_doctypeSystem, _doctypePublic);
+ handler.setIsStandalone(_isStandalone);
}
}
@@ -738,6 +744,19 @@ public abstract class AbstractTranslet implements Translet {
public void setTemplates(Templates templates) {
_templates = templates;
}
+ /**
+ * Return the state of the services mechanism feature.
+ */
+ public boolean useServicesMechnism() {
+ return _useServicesMechanism;
+ }
+
+ /**
+ * Set the state of the services mechanism feature.
+ */
+ public void setServicesMechnism(boolean flag) {
+ _useServicesMechanism = flag;
+ }
/************************************************************************
* DOMImplementation caching for basis library
@@ -748,8 +767,8 @@ public abstract class AbstractTranslet implements Translet {
throws ParserConfigurationException
{
if (_domImplementation == null) {
- _domImplementation = DocumentBuilderFactory.newInstance()
- .newDocumentBuilder().getDOMImplementation();
+ DocumentBuilderFactory dbf = FactoryImpl.getDOMFactory(_useServicesMechanism);
+ _domImplementation = dbf.newDocumentBuilder().getDOMImplementation();
}
return _domImplementation.createDocument(uri, qname, null);
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Attributes.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Attributes.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Attributes.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Attributes.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java
similarity index 87%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java
index b8e766dced0..fc388d92ea9 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java
@@ -40,12 +40,17 @@ import com.sun.org.apache.xalan.internal.xsltc.dom.DOMAdapter;
import com.sun.org.apache.xalan.internal.xsltc.dom.MultiDOM;
import com.sun.org.apache.xalan.internal.xsltc.dom.SingletonIterator;
import com.sun.org.apache.xalan.internal.xsltc.dom.StepIterator;
+import com.sun.org.apache.xalan.internal.xsltc.dom.ArrayNodeListIterator;
+import com.sun.org.apache.xml.internal.dtm.DTM;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.dtm.DTMManager;
import com.sun.org.apache.xml.internal.dtm.ref.DTMDefaultBase;
+import com.sun.org.apache.xml.internal.dtm.ref.DTMNodeProxy;
import org.w3c.dom.DOMException;
+import org.w3c.dom.Attr;
import org.w3c.dom.Document;
+import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.sun.org.apache.xml.internal.serializer.NamespaceMappings;
@@ -153,7 +158,7 @@ public final class BasisLibrary {
return dom.getStringValueX(((Node)obj).node);
}
else if (obj instanceof DOM) {
- // When the first argument is a DOM we want the whole fecking
+ // When the first argument is a DOM we want the whole
// DOM and not just a single node - that would not make sense.
//return ((DOM)obj).getStringValueX(node);
return ((DOM)obj).getStringValue();
@@ -1003,7 +1008,7 @@ public final class BasisLibrary {
}
// Convert var/param -> node-set
else if (obj instanceof DTMAxisIterator) {
- return(((DTMAxisIterator)obj).cloneIterator());
+ return(((DTMAxisIterator)obj).cloneIterator().reset());
}
else {
final String className = obj.getClass().getName();
@@ -1143,90 +1148,42 @@ public final class BasisLibrary {
}
/**
- * Utility function used to copy a node list to be under a parent node.
+ * In a perfect world, this would be the implementation for
+ * nodeList2Iterator. In reality, though, this causes a
+ * ClassCastException in getDTMHandleFromNode because SAXImpl is
+ * not an instance of DOM2DTM. So we use the more lengthy
+ * implementation below until this issue has been addressed.
+ *
+ * @see org.apache.xml.dtm.ref.DTMManagerDefault#getDTMHandleFromNode
*/
- private static void copyNodes(org.w3c.dom.NodeList nodeList,
- org.w3c.dom.Document doc, org.w3c.dom.Node parent)
+ private static DTMAxisIterator nodeList2IteratorUsingHandleFromNode(
+ org.w3c.dom.NodeList nodeList,
+ Translet translet, DOM dom)
{
- final int size = nodeList.getLength();
-
- // copy Nodes from NodeList into new w3c DOM
- for (int i = 0; i < size; i++)
- {
- org.w3c.dom.Node curr = nodeList.item(i);
- int nodeType = curr.getNodeType();
- String value = null;
- try {
- value = curr.getNodeValue();
- } catch (DOMException ex) {
- runTimeError(RUN_TIME_INTERNAL_ERR, ex.getMessage());
- return;
+ final int n = nodeList.getLength();
+ final int[] dtmHandles = new int[n];
+ DTMManager dtmManager = null;
+ if (dom instanceof MultiDOM)
+ dtmManager = ((MultiDOM) dom).getDTMManager();
+ for (int i = 0; i < n; ++i) {
+ org.w3c.dom.Node node = nodeList.item(i);
+ int handle;
+ if (dtmManager != null) {
+ handle = dtmManager.getDTMHandleFromNode(node);
}
-
- String nodeName = curr.getNodeName();
- org.w3c.dom.Node newNode = null;
- switch (nodeType){
- case org.w3c.dom.Node.ATTRIBUTE_NODE:
- newNode = doc.createAttributeNS(curr.getNamespaceURI(),
- nodeName);
- break;
- case org.w3c.dom.Node.CDATA_SECTION_NODE:
- newNode = doc.createCDATASection(value);
- break;
- case org.w3c.dom.Node.COMMENT_NODE:
- newNode = doc.createComment(value);
- break;
- case org.w3c.dom.Node.DOCUMENT_FRAGMENT_NODE:
- newNode = doc.createDocumentFragment();
- break;
- case org.w3c.dom.Node.DOCUMENT_NODE:
- newNode = doc.createElementNS(null, "__document__");
- copyNodes(curr.getChildNodes(), doc, newNode);
- break;
- case org.w3c.dom.Node.DOCUMENT_TYPE_NODE:
- // nothing?
- break;
- case org.w3c.dom.Node.ELEMENT_NODE:
- // For Element node, also copy the children and the
- // attributes.
- org.w3c.dom.Element element = doc.createElementNS(
- curr.getNamespaceURI(), nodeName);
- if (curr.hasAttributes())
- {
- org.w3c.dom.NamedNodeMap attributes = curr.getAttributes();
- for (int k = 0; k < attributes.getLength(); k++) {
- org.w3c.dom.Node attr = attributes.item(k);
- element.setAttributeNS(attr.getNamespaceURI(),
- attr.getNodeName(), attr.getNodeValue());
- }
- }
- copyNodes(curr.getChildNodes(), doc, element);
- newNode = element;
- break;
- case org.w3c.dom.Node.ENTITY_NODE:
- // nothing ?
- break;
- case org.w3c.dom.Node.ENTITY_REFERENCE_NODE:
- newNode = doc.createEntityReference(nodeName);
- break;
- case org.w3c.dom.Node.NOTATION_NODE:
- // nothing ?
- break;
- case org.w3c.dom.Node.PROCESSING_INSTRUCTION_NODE:
- newNode = doc.createProcessingInstruction(nodeName,
- value);
- break;
- case org.w3c.dom.Node.TEXT_NODE:
- newNode = doc.createTextNode(value);
- break;
+ else if (node instanceof DTMNodeProxy
+ && ((DTMNodeProxy) node).getDTM() == dom) {
+ handle = ((DTMNodeProxy) node).getDTMNodeNumber();
}
- try {
- parent.appendChild(newNode);
- } catch (DOMException e) {
- runTimeError(RUN_TIME_INTERNAL_ERR, e.getMessage());
- return;
+ else {
+ runTimeError(RUN_TIME_INTERNAL_ERR, "need MultiDOM");
+ return null;
}
+ dtmHandles[i] = handle;
+ System.out.println("Node " + i + " has handle 0x" +
+ Integer.toString(handle, 16));
}
+ return new ArrayNodeListIterator(dtmHandles);
}
/**
@@ -1237,26 +1194,93 @@ public final class BasisLibrary {
org.w3c.dom.NodeList nodeList,
Translet translet, DOM dom)
{
- // w3c NodeList -> w3c DOM
+ // First pass: build w3c DOM for all nodes not proxied from our DOM.
+ //
+ // Notice: this looses some (esp. parent) context for these nodes,
+ // so some way to wrap the original nodes inside a DTMAxisIterator
+ // might be preferable in the long run.
+ int n = 0; // allow for change in list length, just in case.
Document doc = null;
- try {
- doc = ((AbstractTranslet) translet).newDocument("", "__top__");
+ DTMManager dtmManager = null;
+ int[] proxyNodes = new int[nodeList.getLength()];
+ if (dom instanceof MultiDOM)
+ dtmManager = ((MultiDOM) dom).getDTMManager();
+ for (int i = 0; i < nodeList.getLength(); ++i) {
+ org.w3c.dom.Node node = nodeList.item(i);
+ if (node instanceof DTMNodeProxy) {
+ DTMNodeProxy proxy = (DTMNodeProxy)node;
+ DTM nodeDTM = proxy.getDTM();
+ int handle = proxy.getDTMNodeNumber();
+ boolean isOurDOM = (nodeDTM == dom);
+ if (!isOurDOM && dtmManager != null) {
+ try {
+ isOurDOM = (nodeDTM == dtmManager.getDTM(handle));
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ // invalid node handle, so definitely not our doc
+ }
+ }
+ if (isOurDOM) {
+ proxyNodes[i] = handle;
+ ++n;
+ continue;
+ }
+ }
+ proxyNodes[i] = DTM.NULL;
+ int nodeType = node.getNodeType();
+ if (doc == null) {
+ if (dom instanceof MultiDOM == false) {
+ runTimeError(RUN_TIME_INTERNAL_ERR, "need MultiDOM");
+ return null;
+ }
+ try {
+ AbstractTranslet at = (AbstractTranslet) translet;
+ doc = at.newDocument("", "__top__");
+ }
+ catch (javax.xml.parsers.ParserConfigurationException e) {
+ runTimeError(RUN_TIME_INTERNAL_ERR, e.getMessage());
+ return null;
+ }
+ }
+ // Use one dummy element as container for each node of the
+ // list. That way, it is easier to detect resp. avoid
+ // funny things which change the number of nodes,
+ // e.g. auto-concatenation of text nodes.
+ Element mid;
+ switch (nodeType) {
+ case org.w3c.dom.Node.ELEMENT_NODE:
+ case org.w3c.dom.Node.TEXT_NODE:
+ case org.w3c.dom.Node.CDATA_SECTION_NODE:
+ case org.w3c.dom.Node.COMMENT_NODE:
+ case org.w3c.dom.Node.ENTITY_REFERENCE_NODE:
+ case org.w3c.dom.Node.PROCESSING_INSTRUCTION_NODE:
+ mid = doc.createElementNS(null, "__dummy__");
+ mid.appendChild(doc.importNode(node, true));
+ doc.getDocumentElement().appendChild(mid);
+ ++n;
+ break;
+ case org.w3c.dom.Node.ATTRIBUTE_NODE:
+ // The mid element also serves as a container for
+ // attributes, avoiding problems with conflicting
+ // attributes or node order.
+ mid = doc.createElementNS(null, "__dummy__");
+ mid.setAttributeNodeNS((Attr)doc.importNode(node, true));
+ doc.getDocumentElement().appendChild(mid);
+ ++n;
+ break;
+ default:
+ // Better play it safe for all types we aren't sure we know
+ // how to deal with.
+ runTimeError(RUN_TIME_INTERNAL_ERR,
+ "Don't know how to convert node type "
+ + nodeType);
+ }
}
- catch (javax.xml.parsers.ParserConfigurationException e) {
- runTimeError(RUN_TIME_INTERNAL_ERR, e.getMessage());
- return null;
- }
-
- // Copy all the nodes in the nodelist to be under the top element
- copyNodes(nodeList, doc, doc.getDocumentElement());
// w3cDOM -> DTM -> DOMImpl
- if (dom instanceof MultiDOM) {
+ DTMAxisIterator iter = null, childIter = null, attrIter = null;
+ if (doc != null) {
final MultiDOM multiDOM = (MultiDOM) dom;
-
- DTMDefaultBase dtm = (DTMDefaultBase)((DOMAdapter)multiDOM.getMain()).getDOMImpl();
- DTMManager dtmManager = dtm.getManager();
-
DOM idom = (DOM)dtmManager.getDTM(new DOMSource(doc), false,
null, true, false);
// Create DOMAdapter and register with MultiDOM
@@ -1269,16 +1293,57 @@ public final class BasisLibrary {
DTMAxisIterator iter1 = idom.getAxisIterator(Axis.CHILD);
DTMAxisIterator iter2 = idom.getAxisIterator(Axis.CHILD);
- DTMAxisIterator iter = new AbsoluteIterator(
+ iter = new AbsoluteIterator(
new StepIterator(iter1, iter2));
iter.setStartNode(DTMDefaultBase.ROOTNODE);
- return iter;
+
+ childIter = idom.getAxisIterator(Axis.CHILD);
+ attrIter = idom.getAxisIterator(Axis.ATTRIBUTE);
}
- else {
- runTimeError(RUN_TIME_INTERNAL_ERR, "nodeList2Iterator()");
- return null;
+
+ // Second pass: find DTM handles for every node in the list.
+ int[] dtmHandles = new int[n];
+ n = 0;
+ for (int i = 0; i < nodeList.getLength(); ++i) {
+ if (proxyNodes[i] != DTM.NULL) {
+ dtmHandles[n++] = proxyNodes[i];
+ continue;
+ }
+ org.w3c.dom.Node node = nodeList.item(i);
+ DTMAxisIterator iter3 = null;
+ int nodeType = node.getNodeType();
+ switch (nodeType) {
+ case org.w3c.dom.Node.ELEMENT_NODE:
+ case org.w3c.dom.Node.TEXT_NODE:
+ case org.w3c.dom.Node.CDATA_SECTION_NODE:
+ case org.w3c.dom.Node.COMMENT_NODE:
+ case org.w3c.dom.Node.ENTITY_REFERENCE_NODE:
+ case org.w3c.dom.Node.PROCESSING_INSTRUCTION_NODE:
+ iter3 = childIter;
+ break;
+ case org.w3c.dom.Node.ATTRIBUTE_NODE:
+ iter3 = attrIter;
+ break;
+ default:
+ // Should not happen, as first run should have got all these
+ throw new InternalRuntimeError("Mismatched cases");
+ }
+ if (iter3 != null) {
+ iter3.setStartNode(iter.next());
+ dtmHandles[n] = iter3.next();
+ // For now, play it self and perform extra checks:
+ if (dtmHandles[n] == DTMAxisIterator.END)
+ throw new InternalRuntimeError("Expected element missing at " + i);
+ if (iter3.next() != DTMAxisIterator.END)
+ throw new InternalRuntimeError("Too many elements at " + i);
+ ++n;
+ }
}
+ if (n != dtmHandles.length)
+ throw new InternalRuntimeError("Nodes lost in second pass");
+
+ return new ArrayNodeListIterator(dtmHandles);
}
/**
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Constants.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Constants.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Constants.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Constants.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ca.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ca.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ca.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ca.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_cs.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_cs.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_cs.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_cs.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_de.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_de.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_de.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_de.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_es.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_es.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_es.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_es.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_fr.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_fr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_fr.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_fr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_it.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_it.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_it.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_it.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ja.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ja.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ja.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ja.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ko.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ko.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ko.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_ko.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_pt_BR.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_pt_BR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_pt_BR.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_pt_BR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sk.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sk.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sk.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sk.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sv.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sv.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sv.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_sv.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_CN.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_CN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_CN.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_CN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_TW.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_TW.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_TW.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/ErrorMessages_zh_TW.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Hashtable.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Hashtable.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Hashtable.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Hashtable.java
index 12c9b5127ae..e222e476adb 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Hashtable.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Hashtable.java
@@ -294,7 +294,7 @@ public class Hashtable {
for (i = 0; i <= max; i++) {
String s1 = k.nextElement().toString();
String s2 = e.nextElement().toString();
- buf.append(s1 + "=" + s2);
+ buf.append(s1).append('=').append(s2);
if (i < max) buf.append(", ");
}
buf.append("}");
diff --git a/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/InternalRuntimeError.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/InternalRuntimeError.java
new file mode 100644
index 00000000000..1f11788021e
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/InternalRuntimeError.java
@@ -0,0 +1,36 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * Copyright 2001-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * $Id: InternalRuntimeError.java,v 1.0 2009-11-25 04:34:28 joehw Exp $
+ */
+package com.sun.org.apache.xalan.internal.xsltc.runtime;
+
+/**
+ * Class to express failed assertions and similar for the xsltc runtime.
+ * As java.lang.AssertionError was introduced in JDK 1.4 we can't use that yet.
+ */
+public class InternalRuntimeError extends Error {
+
+ public InternalRuntimeError(String message) {
+ super(message);
+ }
+
+}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/MessageHandler.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/MessageHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/MessageHandler.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/MessageHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Node.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Node.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Node.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Node.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Operators.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Operators.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Operators.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Operators.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Parameter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Parameter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/Parameter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/Parameter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/StringValueHandler.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/StringValueHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/StringValueHandler.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/StringValueHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/OutputBuffer.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/OutputBuffer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/OutputBuffer.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/OutputBuffer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/StringOutputBuffer.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/StringOutputBuffer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/StringOutputBuffer.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/StringOutputBuffer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java
similarity index 94%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java
index 29c5a322bd8..8b76f3a68b0 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java
@@ -72,10 +72,18 @@ public class TransletOutputHandlerFactory {
private ContentHandler _handler = null;
private LexicalHandler _lexHandler = null;
+ private boolean _useServicesMechanism;
+
static public TransletOutputHandlerFactory newInstance() {
- return new TransletOutputHandlerFactory();
+ return new TransletOutputHandlerFactory(true);
+ }
+ static public TransletOutputHandlerFactory newInstance(boolean useServicesMechanism) {
+ return new TransletOutputHandlerFactory(useServicesMechanism);
}
+ public TransletOutputHandlerFactory(boolean useServicesMechanism) {
+ _useServicesMechanism = useServicesMechanism;
+ }
public void setOutputType(int outputType) {
_outputType = outputType;
}
@@ -188,7 +196,7 @@ public class TransletOutputHandlerFactory {
return result;
case DOM :
- _handler = (_node != null) ? new SAX2DOM(_node, _nextSibling) : new SAX2DOM();
+ _handler = (_node != null) ? new SAX2DOM(_node, _nextSibling, _useServicesMechanism) : new SAX2DOM(_useServicesMechanism);
_lexHandler = (LexicalHandler) _handler;
// falls through
case STAX :
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/WriterOutputBuffer.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/WriterOutputBuffer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/output/WriterOutputBuffer.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/WriterOutputBuffer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/DOM2SAX.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/DOM2SAX.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/DOM2SAX.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/DOM2SAX.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/DOM2TO.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/DOM2TO.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/DOM2TO.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/DOM2TO.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/OutputSettings.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/OutputSettings.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/OutputSettings.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/OutputSettings.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java
similarity index 88%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java
index b4d20526abb..a26f093ee08 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java
@@ -49,6 +49,7 @@ import org.xml.sax.ext.Locator2;
/**
* @author G. Todd Miller
* @author Sunitha Reddy
+ * @author Huizhe Wang
*/
public class SAX2DOM implements ContentHandler, LexicalHandler, Constants {
@@ -69,27 +70,16 @@ public class SAX2DOM implements ContentHandler, LexicalHandler, Constants {
* synchronization because the Javadoc is not explicit about
* thread safety.
*/
- static final DocumentBuilderFactory _factory =
+ private DocumentBuilderFactory _factory =
DocumentBuilderFactory.newInstance();
- static final DocumentBuilder _internalBuilder;
- static {
- DocumentBuilder tmpBuilder = null;
- try {
- if (_factory instanceof com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl) {
- tmpBuilder = _factory.newDocumentBuilder();
- }
- } catch(Exception e) {
- // It's OK. Will create DocumentBuilder every time
- }
- _internalBuilder = tmpBuilder;
- }
+ private boolean _internal = true;
- public SAX2DOM() throws ParserConfigurationException {
- _document = createDocument();
+ public SAX2DOM(boolean useServicesMachnism) throws ParserConfigurationException {
+ _document = createDocument(useServicesMachnism);
_root = _document;
}
- public SAX2DOM(Node root, Node nextSibling) throws ParserConfigurationException {
+ public SAX2DOM(Node root, Node nextSibling, boolean useServicesMachnism) throws ParserConfigurationException {
_root = root;
if (root instanceof Document) {
_document = (Document)root;
@@ -98,15 +88,15 @@ public class SAX2DOM implements ContentHandler, LexicalHandler, Constants {
_document = root.getOwnerDocument();
}
else {
- _document = createDocument();
+ _document = createDocument(useServicesMachnism);
_root = _document;
}
_nextSibling = nextSibling;
}
- public SAX2DOM(Node root) throws ParserConfigurationException {
- this(root, null);
+ public SAX2DOM(Node root, boolean useServicesMachnism) throws ParserConfigurationException {
+ this(root, null, useServicesMachnism);
}
public Node getDOM() {
@@ -318,11 +308,23 @@ public class SAX2DOM implements ContentHandler, LexicalHandler, Constants {
public void startDTD(String name, String publicId, String systemId)
throws SAXException {}
- private static Document createDocument() throws ParserConfigurationException {
+ private Document createDocument(boolean useServicesMachnism) throws ParserConfigurationException {
+ if (_factory == null) {
+ if (useServicesMachnism)
+ _factory = DocumentBuilderFactory.newInstance();
+ if (!(_factory instanceof com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl)) {
+ _internal = false;
+ }
+ else
+ _factory = DocumentBuilderFactory.newInstance(
+ "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl",
+ SAX2DOM.class.getClassLoader()
+ );
+ }
Document doc;
- if (_internalBuilder != null) {
+ if (_internal) {
//default implementation is thread safe
- doc = _internalBuilder.newDocument();
+ doc = _factory.newDocumentBuilder().newDocument();
} else {
synchronized(SAX2DOM.class) {
doc = _factory.newDocumentBuilder().newDocument();
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXBaseWriter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXBaseWriter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXBaseWriter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXBaseWriter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXEventWriter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXEventWriter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXEventWriter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXEventWriter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXStreamWriter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXStreamWriter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXStreamWriter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXStreamWriter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SmartTransformerFactoryImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SmartTransformerFactoryImpl.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SmartTransformerFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SmartTransformerFactoryImpl.java
index 8f030d8ce15..4637dce2035 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SmartTransformerFactoryImpl.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/SmartTransformerFactoryImpl.java
@@ -43,6 +43,7 @@ import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
import org.xml.sax.XMLFilter;
/**
@@ -93,7 +94,7 @@ public class SmartTransformerFactoryImpl extends SAXTransformerFactory
try {
Class xalanFactClass = ObjectFactory.findProviderClass(
"com.sun.org.apache.xalan.internal.processor.TransformerFactoryImpl",
- ObjectFactory.findClassLoader(), true);
+ true);
_xalanFactory = (SAXTransformerFactory)
xalanFactClass.newInstance();
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/StAXEvent2SAX.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/StAXEvent2SAX.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/StAXEvent2SAX.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/StAXEvent2SAX.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/StAXStream2SAX.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/StAXStream2SAX.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/StAXStream2SAX.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/StAXStream2SAX.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java
similarity index 95%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java
index e7b0f0a2b4d..2eb161dafee 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java
@@ -95,10 +95,15 @@ public class TemplatesHandlerImpl
_tfactory = tfactory;
// Instantiate XSLTC and get reference to parser object
- XSLTC xsltc = new XSLTC();
+ XSLTC xsltc = new XSLTC(tfactory.useServicesMechnism());
if (tfactory.getFeature(XMLConstants.FEATURE_SECURE_PROCESSING))
xsltc.setSecureProcessing(true);
+ if ("true".equals(tfactory.getAttribute(TransformerFactoryImpl.ENABLE_INLINING)))
+ xsltc.setTemplateInlining(true);
+ else
+ xsltc.setTemplateInlining(false);
+
_parser = xsltc.getParser();
}
@@ -188,7 +193,7 @@ public class TemplatesHandlerImpl
XSLTC xsltc = _parser.getXSLTC();
// Set the translet class name if not already set
- String transletName = null;
+ String transletName;
if (_systemId != null) {
transletName = Util.baseName(_systemId);
}
@@ -210,6 +215,11 @@ public class TemplatesHandlerImpl
stylesheet.setSystemId(_systemId);
stylesheet.setParentStylesheet(null);
+ if (xsltc.getTemplateInlining())
+ stylesheet.setTemplateInlining(true);
+ else
+ stylesheet.setTemplateInlining(false);
+
// Set a document loader (for xsl:include/import) if defined
if (_uriResolver != null) {
stylesheet.setSourceLoader(this);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java
similarity index 95%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java
index f31ed040d96..4ebf238565f 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java
@@ -42,6 +42,7 @@ import com.sun.org.apache.xalan.internal.xsltc.Translet;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
/**
* @author Morten Jorgensen
@@ -118,6 +119,8 @@ public final class TemplatesImpl implements Templates, Serializable {
*/
private transient TransformerFactoryImpl _tfactory = null;
+ private boolean _useServicesMechanism;
+
static final class TransletClassLoader extends ClassLoader {
TransletClassLoader(ClassLoader parent) {
super(parent);
@@ -142,10 +145,7 @@ public final class TemplatesImpl implements Templates, Serializable {
TransformerFactoryImpl tfactory)
{
_bytecodes = bytecodes;
- _name = transletName;
- _outputProperties = outputProperties;
- _indentNumber = indentNumber;
- _tfactory = tfactory;
+ init(transletName, outputProperties, indentNumber, tfactory);
}
/**
@@ -156,14 +156,19 @@ public final class TemplatesImpl implements Templates, Serializable {
TransformerFactoryImpl tfactory)
{
_class = transletClasses;
- _name = transletName;
_transletIndex = 0;
+ init(transletName, outputProperties, indentNumber, tfactory);
+ }
+
+ private void init(String transletName,
+ Properties outputProperties, int indentNumber,
+ TransformerFactoryImpl tfactory) {
+ _name = transletName;
_outputProperties = outputProperties;
_indentNumber = indentNumber;
_tfactory = tfactory;
+ _useServicesMechanism = tfactory.useServicesMechnism();
}
-
-
/**
* Need for de-serialization, see readObject().
*/
@@ -207,6 +212,12 @@ public final class TemplatesImpl implements Templates, Serializable {
}
}
+ /**
+ * Return the state of the services mechanism feature.
+ */
+ public boolean useServicesMechnism() {
+ return _useServicesMechanism;
+ }
/**
* Store URIResolver needed for Transformers.
@@ -357,6 +368,7 @@ public final class TemplatesImpl implements Templates, Serializable {
AbstractTranslet translet = (AbstractTranslet) _class[_transletIndex].newInstance();
translet.postInitialization();
translet.setTemplates(this);
+ translet.setServicesMechnism(_useServicesMechanism);
if (_auxClasses != null) {
translet.setAuxiliaryClasses(_auxClasses);
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java
similarity index 94%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java
index 400bdab82ac..172907e7af0 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java
@@ -55,6 +55,7 @@ public class TrAXFilter extends XMLFilterImpl {
private Templates _templates;
private TransformerImpl _transformer;
private TransformerHandlerImpl _transformerHandler;
+ private boolean _useServicesMechanism = true;
public TrAXFilter(Templates templates) throws
TransformerConfigurationException
@@ -62,6 +63,7 @@ public class TrAXFilter extends XMLFilterImpl {
_templates = templates;
_transformer = (TransformerImpl) templates.newTransformer();
_transformerHandler = new TransformerHandlerImpl(_transformer);
+ _useServicesMechanism = _transformer.useServicesMechnism();
}
public Transformer getTransformer() {
@@ -106,7 +108,7 @@ public class TrAXFilter extends XMLFilterImpl {
try {
if (getParent() == null) {
try {
- managedReader = XMLReaderManager.getInstance()
+ managedReader = XMLReaderManager.getInstance(_useServicesMechanism)
.getXMLReader();
setParent(managedReader);
} catch (SAXException e) {
@@ -118,7 +120,7 @@ public class TrAXFilter extends XMLFilterImpl {
getParent().parse(input);
} finally {
if (managedReader != null) {
- XMLReaderManager.getInstance().releaseXMLReader(managedReader);
+ XMLReaderManager.getInstance(_useServicesMechanism).releaseXMLReader(managedReader);
}
}
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java
index 4211d40d0d8..26b2f56de86 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java
@@ -49,6 +49,7 @@ import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
import javax.xml.transform.URIResolver;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
@@ -64,11 +65,14 @@ import javax.xml.transform.stax.*;
import com.sun.org.apache.xml.internal.utils.StylesheetPIHandler;
import com.sun.org.apache.xml.internal.utils.StopParseException;
+import com.sun.org.apache.xalan.internal.XalanConstants;
import com.sun.org.apache.xalan.internal.xsltc.compiler.Constants;
import com.sun.org.apache.xalan.internal.xsltc.compiler.SourceLoader;
import com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
import com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
+import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import org.xml.sax.InputSource;
@@ -212,11 +216,28 @@ public class TransformerFactoryImpl
* State of secure mode.
*/
private boolean _isSecureMode = false;
+
+ /**
+ * Indicates whether implementation parts should use
+ * service loader (or similar).
+ * Note the default value (false) is the safe option..
+ */
+ private boolean _useServicesMechanism;
+
/**
* javax.xml.transform.sax.TransformerFactory implementation.
*/
public TransformerFactoryImpl() {
- m_DTMManagerClass = XSLTCDTMManager.getDTMManagerClass();
+ this(true);
+ }
+
+ public static TransformerFactory newTransformerFactoryNoServiceLoader() {
+ return new TransformerFactoryImpl(false);
+ }
+
+ private TransformerFactoryImpl(boolean useServicesMechanism) {
+ this.m_DTMManagerClass = XSLTCDTMManager.getDTMManagerClass(useServicesMechanism);
+ this._useServicesMechanism = useServicesMechanism;
if (System.getSecurityManager() != null) {
_isSecureMode = true;
_isNotSecureProcessing = false;
@@ -274,6 +295,12 @@ public class TransformerFactoryImpl
else if (name.equals(AUTO_TRANSLET)) {
return new Boolean(_autoTranslet);
}
+ else if (name.equals(ENABLE_INLINING)) {
+ if (_enableInlining)
+ return Boolean.TRUE;
+ else
+ return Boolean.FALSE;
+ }
// Throw an exception for all other attributes
ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_INVALID_ATTR_ERR, name);
@@ -420,6 +447,11 @@ public class TransformerFactoryImpl
// all done processing feature
return;
}
+ else if (name.equals(XalanConstants.ORACLE_FEATURE_SERVICE_MECHANISM)) {
+ //in secure mode, let _useServicesMechanism be determined by the constructor
+ if (!_isSecureMode)
+ _useServicesMechanism = value;
+ }
else {
// unknown feature
ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_UNSUPPORTED_FEATURE, name);
@@ -448,7 +480,8 @@ public class TransformerFactoryImpl
StreamSource.FEATURE,
StreamResult.FEATURE,
SAXTransformerFactory.FEATURE,
- SAXTransformerFactory.FEATURE_XMLFILTER
+ SAXTransformerFactory.FEATURE_XMLFILTER,
+ XalanConstants.ORACLE_FEATURE_SERVICE_MECHANISM
};
// feature name cannot be null
@@ -471,6 +504,12 @@ public class TransformerFactoryImpl
// Feature not supported
return false;
}
+ /**
+ * Return the state of the services mechanism feature.
+ */
+ public boolean useServicesMechnism() {
+ return _useServicesMechanism;
+ }
/**
* javax.xml.transform.sax.TransformerFactory implementation.
@@ -543,7 +582,7 @@ public class TransformerFactoryImpl
isource = SAXSource.sourceToInputSource(source);
baseId = isource.getSystemId();
- SAXParserFactory factory = SAXParserFactory.newInstance();
+ SAXParserFactory factory = FactoryImpl.getSAXFactory(_useServicesMechanism);
factory.setNamespaceAware(true);
if (!_isNotSecureProcessing) {
@@ -702,8 +741,7 @@ public class TransformerFactoryImpl
transletName = _packageName + "." + transletName;
try {
- final Class clazz = ObjectFactory.findProviderClass(
- transletName, ObjectFactory.findClassLoader(), true);
+ final Class clazz = ObjectFactory.findProviderClass(transletName, true);
resetTransientAttributes();
return new TemplatesImpl(new Class[]{clazz}, transletName, null, _indentNumber, this);
@@ -753,9 +791,13 @@ public class TransformerFactoryImpl
}
// Create and initialize a stylesheet compiler
- final XSLTC xsltc = new XSLTC();
+ final XSLTC xsltc = new XSLTC(_useServicesMechanism);
if (_debug) xsltc.setDebug(true);
- if (_enableInlining) xsltc.setTemplateInlining(true);
+ if (_enableInlining)
+ xsltc.setTemplateInlining(true);
+ else
+ xsltc.setTemplateInlining(false);
+
if (!_isNotSecureProcessing) xsltc.setSecureProcessing(true);
xsltc.init();
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerHandlerImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerHandlerImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerHandlerImpl.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerHandlerImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java
index 6af03b77fea..16e178eba9a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerImpl.java
@@ -23,6 +23,7 @@
package com.sun.org.apache.xalan.internal.xsltc.trax;
+import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -182,7 +183,7 @@ public final class TransformerImpl extends Transformer
/**
* A reference to an object that creates and caches XMLReader objects.
*/
- private XMLReaderManager _readerManager = XMLReaderManager.getInstance();
+ private XMLReaderManager _readerManager;
/**
* A flag indicating whether we use incremental building of the DTM.
@@ -200,6 +201,13 @@ public final class TransformerImpl extends Transformer
*/
private boolean _isSecureProcessing = false;
+ /**
+ * Indicates whether implementation parts should use
+ * service loader (or similar).
+ * Note the default value (false) is the safe option..
+ */
+ private boolean _useServicesMechanism;
+
/**
* A hashtable to store parameters for the identity transform. These
* are not needed during the transformation, but we must keep track of
@@ -251,6 +259,8 @@ public final class TransformerImpl extends Transformer
_propertiesClone = (Properties) _properties.clone();
_indentNumber = indentNumber;
_tfactory = tfactory;
+ _useServicesMechanism = _tfactory.useServicesMechnism();
+ _readerManager = XMLReaderManager.getInstance(_useServicesMechanism);
//_isIncremental = tfactory._incremental;
}
@@ -267,6 +277,19 @@ public final class TransformerImpl extends Transformer
public void setSecureProcessing(boolean flag) {
_isSecureProcessing = flag;
}
+ /**
+ * Return the state of the services mechanism feature.
+ */
+ public boolean useServicesMechnism() {
+ return _useServicesMechanism;
+ }
+
+ /**
+ * Set the state of the services mechanism feature.
+ */
+ public void setServicesMechnism(boolean flag) {
+ _useServicesMechanism = flag;
+ }
/**
* Returns the translet wrapped inside this Transformer or
@@ -347,7 +370,7 @@ public final class TransformerImpl extends Transformer
// Get encoding using getProperty() to use defaults
_encoding = (String) _properties.getProperty(OutputKeys.ENCODING);
- _tohFactory = TransletOutputHandlerFactory.newInstance();
+ _tohFactory = TransletOutputHandlerFactory.newInstance(_useServicesMechanism);
_tohFactory.setEncoding(_encoding);
if (_method != null) {
_tohFactory.setOutputMethod(_method);
@@ -435,9 +458,7 @@ public final class TransformerImpl extends Transformer
// the systemId will be URI encoded as a result of File.toURI(),
// it must be decoded for use by URL
try{
- Class clazz = ObjectFactory.findProviderClass("java.net.URI", ObjectFactory.findClassLoader(), true);
- Constructor construct = clazz.getConstructor(new Class[] {java.lang.String.class} );
- URI uri = (URI) construct.newInstance(new Object[]{systemId}) ;
+ URI uri = new URI(systemId) ;
systemId = "file:";
String host = uri.getHost(); // decoded String
@@ -454,10 +475,6 @@ public final class TransformerImpl extends Transformer
systemId += "//" + path;
}
}
- catch(ClassNotFoundException e){
- // running on J2SE 1.3 which doesn't have URI Class so OK to ignore
- //ClassNotFoundException.
- }
catch (Exception exception) {
// URI exception which means nothing can be done so OK to ignore
}
@@ -524,6 +541,7 @@ public final class TransformerImpl extends Transformer
_dtmManager =
(XSLTCDTMManager)_tfactory.getDTMManagerClass()
.newInstance();
+ _dtmManager.setServicesMechnism(_useServicesMechanism);
}
dom = (DOM)_dtmManager.getDTM(source, false, wsfilter, true,
false, false, 0, hasIdCall);
@@ -695,10 +713,8 @@ public final class TransformerImpl extends Transformer
((SAXSource)source).getXMLReader()==null )||
(source instanceof DOMSource &&
((DOMSource)source).getNode()==null)){
- DocumentBuilderFactory builderF =
- DocumentBuilderFactory.newInstance();
- DocumentBuilder builder =
- builderF.newDocumentBuilder();
+ DocumentBuilderFactory builderF = FactoryImpl.getDOMFactory(_useServicesMechanism);
+ DocumentBuilder builder = builderF.newDocumentBuilder();
String systemID = source.getSystemId();
source = new DOMSource(builder.newDocument());
@@ -974,6 +990,11 @@ public final class TransformerImpl extends Transformer
}
}
}
+ else if (name.equals(OutputPropertiesFactory.ORACLE_IS_STANDALONE)) {
+ if (value != null && value.equals("yes")) {
+ translet._isStandalone = true;
+ }
+ }
}
}
@@ -1033,6 +1054,11 @@ public final class TransformerImpl extends Transformer
handler.setIndentAmount(Integer.parseInt(value));
}
}
+ else if (name.equals(OutputPropertiesFactory.ORACLE_IS_STANDALONE)) {
+ if (value != null && value.equals("yes")) {
+ handler.setIsStandalone(true);
+ }
+ }
else if (name.equals(OutputKeys.CDATA_SECTION_ELEMENTS)) {
if (value != null) {
StringTokenizer e = new StringTokenizer(value);
@@ -1146,6 +1172,7 @@ public final class TransformerImpl extends Transformer
name.equals(OutputKeys.OMIT_XML_DECLARATION) ||
name.equals(OutputKeys.STANDALONE) ||
name.equals(OutputKeys.VERSION) ||
+ name.equals(OutputPropertiesFactory.ORACLE_IS_STANDALONE) ||
name.charAt(0) == '{');
}
@@ -1252,7 +1279,7 @@ public final class TransformerImpl extends Transformer
try {
// Argument to document function was: document('');
if (href.length() == 0) {
- href = new String(baseURI);
+ href = baseURI;
}
/*
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/Util.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/Util.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/Util.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/Util.java
index 76a071df641..f5e1c85b98c 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/Util.java
+++ b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/Util.java
@@ -42,6 +42,7 @@ import javax.xml.transform.stax.StAXResult;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
+import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
@@ -109,8 +110,7 @@ public final class Util {
//Incase there is an exception thrown
// resort to JAXP
- SAXParserFactory parserFactory =
- SAXParserFactory.newInstance();
+ SAXParserFactory parserFactory = FactoryImpl.getSAXFactory(xsltc.useServicesMechnism());
parserFactory.setNamespaceAware(true);
if (xsltc.isSecureProcessing()) {
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/XSLTCSource.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/XSLTCSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/XSLTCSource.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/trax/XSLTCSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/util/IntegerArray.java b/jaxp/src/com/sun/org/apache/xalan/internal/xsltc/util/IntegerArray.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/util/IntegerArray.java
rename to jaxp/src/com/sun/org/apache/xalan/internal/xsltc/util/IntegerArray.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/AttrImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/AttrImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/AttrImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/AttrImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/AttrNSImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/AttrNSImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/AttrNSImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/AttrNSImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/AttributeMap.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/AttributeMap.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/AttributeMap.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/AttributeMap.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CDATASectionImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/CDATASectionImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CDATASectionImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/CDATASectionImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CharacterDataImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/CharacterDataImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CharacterDataImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/CharacterDataImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ChildNode.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/ChildNode.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ChildNode.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/ChildNode.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CommentImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/CommentImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CommentImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/CommentImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java
index ab1952cb1a4..f20775e3f7a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java
@@ -21,7 +21,10 @@ package com.sun.org.apache.xerces.internal.dom;
import com.sun.org.apache.xerces.internal.impl.RevalidationHandler;
import com.sun.org.apache.xerces.internal.parsers.DOMParserImpl;
+import com.sun.org.apache.xerces.internal.parsers.DTDConfiguration;
+import com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration;
import com.sun.org.apache.xerces.internal.util.XMLChar;
+import com.sun.org.apache.xerces.internal.utils.ObjectFactory;
import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarDescription;
import com.sun.org.apache.xml.internal.serialize.DOMSerializerImpl;
import org.w3c.dom.DOMException;
@@ -49,6 +52,7 @@ import org.w3c.dom.ls.LSSerializer;
*
* @xerces.internal
*
+ * @version $Id: CoreDOMImplementationImpl.java,v 1.6 2010-11-01 04:39:37 joehw Exp $
* @since PR-DOM-Level-1-19980818.
*/
public class CoreDOMImplementationImpl
@@ -114,8 +118,7 @@ public class CoreDOMImplementationImpl
&& (anyVersion || version.equals("3.0"))) {
try {
Class xpathClass = ObjectFactory.findProviderClass(
- "com.sun.org.apache.xpath.internal.domapi.XPathEvaluatorImpl",
- ObjectFactory.findClassLoader(), true);
+ "com.sun.org.apache.xpath.internal.domapi.XPathEvaluatorImpl", true);
// Check if the DOM XPath implementation implements
// the interface org.w3c.dom.XPathEvaluator
@@ -281,9 +284,7 @@ public class CoreDOMImplementationImpl
if ((feature.equalsIgnoreCase("+XPath"))) {
try {
Class xpathClass = ObjectFactory.findProviderClass(
- "com.sun.org.apache.xpath.internal.domapi.XPathEvaluatorImpl",
- ObjectFactory.findClassLoader(), true);
-
+ "com.sun.org.apache.xpath.internal.domapi.XPathEvaluatorImpl", true);
// Check if the DOM XPath implementation implements
// the interface org.w3c.dom.XPathEvaluator
Class interfaces[] = xpathClass.getInterfaces();
@@ -361,14 +362,12 @@ public class CoreDOMImplementationImpl
}
if (schemaType != null
&& schemaType.equals("http://www.w3.org/TR/REC-xml")) {
- return new DOMParserImpl(
- "com.sun.org.apache.xerces.internal.parsers.DTDConfiguration",
+ return new DOMParserImpl(new DTDConfiguration(),
schemaType);
}
else {
// create default parser configuration validating against XMLSchemas
- return new DOMParserImpl(
- "com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration",
+ return new DOMParserImpl(new XIncludeAwareParserConfiguration(),
schemaType);
}
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java
index 56e280950cb..46cbc349ff4 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/dom/CoreDocumentImpl.java
@@ -31,6 +31,8 @@ import org.w3c.dom.UserDataHandler;
import com.sun.org.apache.xerces.internal.util.XMLChar;
import com.sun.org.apache.xerces.internal.util.XML11Char;
import com.sun.org.apache.xerces.internal.xni.NamespaceContext;
+import com.sun.org.apache.xerces.internal.utils.ObjectFactory;
+import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
import org.w3c.dom.Attr;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Comment;
@@ -77,7 +79,7 @@ import org.w3c.dom.ls.LSSerializer;
* @author Joe Kesselman, IBM
* @author Andy Clark, IBM
* @author Ralf Pfeiffer, IBM
- * @version $Id: CoreDocumentImpl.java,v 1.7 2009/08/04 05:07:20 joehw Exp $
+ * @version $Id: CoreDocumentImpl.java,v 1.9 2010-11-01 04:39:37 joehw Exp $
* @since PR-DOM-Level-1-19980818.
*/
@@ -258,8 +260,7 @@ extends ParentNode implements Document {
super(null);
ownerDocument = this;
allowGrammarAccess = grammarAccess;
- SecuritySupport ss = SecuritySupport.getInstance();
- String systemProp = ss.getSystemProperty(Constants.SUN_DOM_PROPERTY_PREFIX+Constants.SUN_DOM_ANCESTOR_CHECCK);
+ String systemProp = SecuritySupport.getSystemProperty(Constants.SUN_DOM_PROPERTY_PREFIX+Constants.SUN_DOM_ANCESTOR_CHECCK);
if (systemProp != null) {
if (systemProp.equalsIgnoreCase("false")) {
ancestorChecking = false;
@@ -516,9 +517,8 @@ extends ParentNode implements Document {
}
try {
- Class xpathClass = ObjectFactory.findProviderClass(
- "com.sun.org.apache.xpath.internal.domapi.XPathEvaluatorImpl",
- ObjectFactory.findClassLoader(), true);
+ Class xpathClass = ObjectFactory.findProviderClass (
+ "com.sun.org.apache.xpath.internal.domapi.XPathEvaluatorImpl", true);
Constructor xpathClassConstr =
xpathClass.getConstructor(new Class[] { Document.class });
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java
index 012c827bed4..ad11c0416ee 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMConfigurationImpl.java
@@ -55,6 +55,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLEntityResolver;
import com.sun.org.apache.xerces.internal.xni.parser.XMLErrorHandler;
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
+import com.sun.org.apache.xerces.internal.utils.ObjectFactory;
import org.w3c.dom.DOMException;
import org.w3c.dom.ls.LSResourceResolver;
@@ -324,8 +325,7 @@ public class DOMConfigurationImpl extends ParserConfigurationSettings
MessageFormatter xmft = null;
try {
xmft = (MessageFormatter)(
- ObjectFactory.newInstance("com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatter",
- ObjectFactory.findClassLoader(), true));
+ ObjectFactory.newInstance("com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatter", true));
} catch (Exception exception){
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMErrorImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMErrorImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMErrorImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMErrorImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMImplementationImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMImplementationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMImplementationImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMImplementationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMImplementationListImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMImplementationListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMImplementationListImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMImplementationListImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMImplementationSourceImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMImplementationSourceImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMImplementationSourceImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMImplementationSourceImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMInputImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMInputImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMInputImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMInputImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMLocatorImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMLocatorImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMLocatorImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMLocatorImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMMessageFormatter.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMMessageFormatter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMMessageFormatter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMMessageFormatter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMNormalizer.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMNormalizer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMNormalizer.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMNormalizer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMOutputImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMOutputImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMOutputImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMOutputImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMStringListImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMStringListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMStringListImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMStringListImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMXSImplementationSourceImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMXSImplementationSourceImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DOMXSImplementationSourceImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DOMXSImplementationSourceImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeepNodeListImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeepNodeListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeepNodeListImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeepNodeListImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredAttrImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredAttrImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredAttrImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredAttrImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredAttrNSImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredAttrNSImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredAttrNSImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredAttrNSImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredCDATASectionImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredCDATASectionImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredCDATASectionImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredCDATASectionImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredCommentImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredCommentImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredCommentImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredCommentImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredDOMImplementationImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredDOMImplementationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredDOMImplementationImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredDOMImplementationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredDocumentImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredDocumentImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredDocumentImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredDocumentImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredDocumentTypeImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredDocumentTypeImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredDocumentTypeImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredDocumentTypeImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredElementDefinitionImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredElementDefinitionImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredElementDefinitionImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredElementDefinitionImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredElementImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredElementImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredElementImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredElementImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredElementNSImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredElementNSImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredElementNSImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredElementNSImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredEntityImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredEntityImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredEntityImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredEntityImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredEntityReferenceImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredEntityReferenceImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredEntityReferenceImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredEntityReferenceImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredNode.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredNode.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredNode.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredNode.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredNotationImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredNotationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredNotationImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredNotationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredProcessingInstructionImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredProcessingInstructionImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredProcessingInstructionImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredProcessingInstructionImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredTextImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredTextImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DeferredTextImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DeferredTextImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DocumentFragmentImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DocumentFragmentImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DocumentFragmentImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DocumentFragmentImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DocumentImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DocumentImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DocumentImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DocumentImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DocumentTypeImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/DocumentTypeImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/DocumentTypeImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/DocumentTypeImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ElementDefinitionImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/ElementDefinitionImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ElementDefinitionImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/ElementDefinitionImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ElementImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/ElementImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ElementImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/ElementImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ElementNSImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/ElementNSImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ElementNSImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/ElementNSImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/EntityImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/EntityImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/EntityImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/EntityImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/EntityReferenceImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/EntityReferenceImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/EntityReferenceImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/EntityReferenceImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/LCount.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/LCount.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/LCount.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/LCount.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/NamedNodeMapImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/NamedNodeMapImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/NamedNodeMapImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/NamedNodeMapImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/NodeImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/NodeImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/NodeImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/NodeImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/NodeIteratorImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/NodeIteratorImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/NodeIteratorImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/NodeIteratorImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/NodeListCache.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/NodeListCache.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/NodeListCache.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/NodeListCache.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/NotationImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/NotationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/NotationImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/NotationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/PSVIAttrNSImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/PSVIAttrNSImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/PSVIAttrNSImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/PSVIAttrNSImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/PSVIDOMImplementationImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/PSVIDOMImplementationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/PSVIDOMImplementationImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/PSVIDOMImplementationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/PSVIDocumentImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/PSVIDocumentImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/PSVIDocumentImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/PSVIDocumentImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/PSVIElementNSImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/PSVIElementNSImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/PSVIElementNSImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/PSVIElementNSImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ParentNode.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/ParentNode.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ParentNode.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/ParentNode.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ProcessingInstructionImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/ProcessingInstructionImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ProcessingInstructionImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/ProcessingInstructionImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/RangeExceptionImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/RangeExceptionImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/RangeExceptionImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/RangeExceptionImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/RangeImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/RangeImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/RangeImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/RangeImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/TextImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/TextImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/TextImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/TextImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/TreeWalkerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/TreeWalkerImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/TreeWalkerImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/TreeWalkerImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/events/EventImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/events/EventImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/events/EventImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/events/EventImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/events/MutationEventImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/dom/events/MutationEventImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/events/MutationEventImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/events/MutationEventImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/org.apache.xerces.dom.DOMImplementationSourceImpl b/jaxp/src/com/sun/org/apache/xerces/internal/dom/org.apache.xerces.dom.DOMImplementationSourceImpl
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/org.apache.xerces.dom.DOMImplementationSourceImpl
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/org.apache.xerces.dom.DOMImplementationSourceImpl
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/org.w3c.dom.DOMImplementationSourceList b/jaxp/src/com/sun/org/apache/xerces/internal/dom/org.w3c.dom.DOMImplementationSourceList
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/org.w3c.dom.DOMImplementationSourceList
rename to jaxp/src/com/sun/org/apache/xerces/internal/dom/org.w3c.dom.DOMImplementationSourceList
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/Constants.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/Constants.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/Constants.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/Constants.java
index 63095ea9092..d6f457db839 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/Constants.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/Constants.java
@@ -136,7 +136,9 @@ public final class Constants {
/** XML string property ("xml-string"). */
public static final String XML_STRING_PROPERTY = "xml-string";
- public static final String FEATURE_SECURE_PROCESSING = "http://javax.xml.XMLConstants/feature/secure-processing";
+ public static final String FEATURE_SECURE_PROCESSING = "http://javax.xml.XMLConstants/feature/secure-processing";
+
+ public static final String ORACLE_FEATURE_SERVICE_MECHANISM = "http://www.oracle.com/feature/use-service-mechanism";
/** Document XML version property ("document-xml-version"). */
public static final String DOCUMENT_XML_VERSION_PROPERTY = "document-xml-version";
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/ExternalSubsetResolver.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/ExternalSubsetResolver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/ExternalSubsetResolver.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/ExternalSubsetResolver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/PropertyManager.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/PropertyManager.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/PropertyManager.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/PropertyManager.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/RevalidationHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/RevalidationHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/RevalidationHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/RevalidationHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/Version.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/Version.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/Version.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/Version.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XML11DTDScannerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11DTDScannerImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XML11DTDScannerImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11DTDScannerImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XML11DocumentScannerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11DocumentScannerImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XML11DocumentScannerImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11DocumentScannerImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11NSDocumentScannerImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XML11NamespaceBinder.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11NamespaceBinder.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XML11NamespaceBinder.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XML11NamespaceBinder.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java
index 2bba625a65d..f1c611b0d1a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java
@@ -1803,6 +1803,7 @@ public class XMLDocumentFragmentScannerImpl
String name = fEntityScanner.scanName();
if (name == null) {
reportFatalError("NameRequiredInReference", null);
+ return;
}
if (!fEntityScanner.skipChar(';')) {
reportFatalError("SemicolonRequiredInReference", new Object []{name});
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityDescription.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityDescription.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityDescription.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityDescription.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java
index 78ad12c3713..c1ddeb6cb59 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java
@@ -365,11 +365,6 @@ protected static final String PARSER_SETTINGS =
// shared context
- /** Shared declared entities.
- * XXX understand it more deeply, why are we doing this ?? Is it really required ?
- */
- protected Hashtable fDeclaredEntities;
-
protected XMLEntityStorage fEntityStorage ;
protected final Object [] defaultEncoding = new Object[]{"UTF-8", null};
@@ -408,24 +403,6 @@ protected static final String PARSER_SETTINGS =
reset(propertyManager);
} // ()
- /**
- * Constructs an entity manager that shares the specified entity
- * declarations during each parse.
- *
- * REVISIT: We might want to think about the "right"
- * way to expose the list of declared entities. For now, the knowledge
- * how to access the entity declarations is implicit.
- */
- public XMLEntityManager(XMLEntityManager entityManager) {
-
-
- // save shared entity declarations
- fDeclaredEntities = entityManager != null
- ? entityManager.getEntityStore().getDeclaredEntities() : null;
-
- setScannerVersion(Constants.XML_VERSION_1_0);
- } // (XMLEntityManager)
-
/**
* Adds an internal entity declaration.
*
@@ -1111,7 +1088,7 @@ protected static final String PARSER_SETTINGS =
throws IOException, XNIException {
// was entity declared?
- Entity entity = (Entity)fEntityStorage.getDeclaredEntities().get(entityName);
+ Entity entity = (Entity)fEntityStorage.getEntity(entityName);
if (entity == null) {
if (fEntityHandler != null) {
String encoding = null;
@@ -1331,23 +1308,16 @@ protected static final String PARSER_SETTINGS =
(fEntityStack.empty() ? null : fEntityStack.elementAt(0));
}
- // a list of Readers ever seen
- protected Vector fOwnReaders = new Vector();
/**
* Close all opened InputStreams and Readers opened by this parser.
*/
public void closeReaders() {
- // close all readers
- for (int i = fOwnReaders.size()-1; i >= 0; i--) {
- try {
- ((Reader)fOwnReaders.elementAt(i)).close();
- } catch (IOException e) {
- // ignore
- }
- }
- // and clear the list
- fOwnReaders.removeAllElements();
+ /** this call actually does nothing, readers are closed in the endEntity method
+ * through the current entity.
+ * The change seems to have happened during the jdk6 development with the
+ * addition of StAX
+ **/
}
public void endEntity() throws IOException, XNIException {
@@ -1361,6 +1331,20 @@ protected static final String PARSER_SETTINGS =
//pop the entity from the stack
Entity.ScannedEntity entity = fEntityStack.size() > 0 ? (Entity.ScannedEntity)fEntityStack.pop() : null ;
+ /** need to close the reader first since the program can end
+ * prematurely (e.g. fEntityHandler.endEntity may throw exception)
+ * leaving the reader open
+ */
+ //close the reader
+ if(fCurrentEntity != null){
+ //close the reader
+ try{
+ fCurrentEntity.close();
+ }catch(IOException ex){
+ throw new XNIException(ex);
+ }
+ }
+
if (fEntityHandler != null) {
//so this is the last opened entity, signal it to current fEntityHandler using Augmentation
if(entity == null){
@@ -1375,16 +1359,6 @@ protected static final String PARSER_SETTINGS =
//check if it is a document entity
boolean documentEntity = fCurrentEntity.name == XMLEntity;
- //close the reader
- if(fCurrentEntity != null){
- //close the reader
- try{
- fCurrentEntity.close();
- }catch(IOException ex){
- throw new XNIException(ex);
- }
- }
-
//set popped entity as current entity
fCurrentEntity = entity;
fEntityScanner.setCurrentEntity(fCurrentEntity);
@@ -1536,15 +1510,6 @@ protected static final String PARSER_SETTINGS =
}
}
- // copy declared entities
- if (fDeclaredEntities != null) {
- java.util.Enumeration keys = fDeclaredEntities.keys();
- while (keys.hasMoreElements()) {
- Object key = keys.nextElement();
- Object value = fDeclaredEntities.get(key);
- fEntities.put(key, value);
- }
- }
fEntityHandler = null;
// reset scanner
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java
index 90deaa14b16..48a1c88a6b3 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java
@@ -136,7 +136,9 @@ public class XMLEntityScanner implements XMLLocator {
VALID_NAMES[58]=true;
VALID_NAMES[95]=true;
}
-
+ // SAPJVM: Remember, that the XML version has explicitly been set,
+ // so that XMLStreamReader.getVersion() can find that out.
+ boolean xmlVersionSetExplicitly = false;
//
// Constructors
//
@@ -248,6 +250,7 @@ public class XMLEntityScanner implements XMLLocator {
* @param xmlVersion the XML version of the current entity
*/
public final void setXMLVersion(String xmlVersion) {
+ xmlVersionSetExplicitly = true; // SAPJVM
fCurrentEntity.xmlVersion = xmlVersion;
} // setXMLVersion(String)
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLErrorReporter.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLErrorReporter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLErrorReporter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLErrorReporter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLNSDocumentScannerImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLNamespaceBinder.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLNamespaceBinder.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLNamespaceBinder.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLNamespaceBinder.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLScanner.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLScanner.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLScanner.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLScanner.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLStreamFilterImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLStreamFilterImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLStreamFilterImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLStreamFilterImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLStreamReaderImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLStreamReaderImpl.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLStreamReaderImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLStreamReaderImpl.java
index a6f166b701c..a0c999df21f 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLStreamReaderImpl.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLStreamReaderImpl.java
@@ -447,7 +447,13 @@ public class XMLStreamReaderImpl implements javax.xml.stream.XMLStreamReader {
/** Get the XML language version of the current document being parsed */
public String getVersion() {
- return fEntityScanner.getXMLVersion();
+ //apply SAP's patch: the default version in the scanner was set to 1.0 because of DOM and SAX
+ //so this patch is a workaround of the difference between StAX and DOM
+ // SAPJVM: Return null if the XML version has not been declared (as specified in the JavaDoc).
+
+ String version = fEntityScanner.getXMLVersion();
+
+ return "1.0".equals(version) && !fEntityScanner.xmlVersionSetExplicitly ? null : version;
}
/**
@@ -1045,11 +1051,10 @@ public class XMLStreamReaderImpl implements javax.xml.stream.XMLStreamReader {
return fScanner.getCharacterData().toString();
XMLEntityStorage entityStore = fEntityManager.getEntityStore();
- Hashtable ht = entityStore.getDeclaredEntities();
- Entity en = (Entity)ht.get(name);
- if(en == null)
- return null;
- if(en.isExternal())
+ Entity en = entityStore.getEntity(name);
+ if(en == null)
+ return null;
+ if(en.isExternal())
return ((Entity.ExternalEntity)en).entityLocation.getExpandedSystemId();
else
return ((Entity.InternalEntity)en).text;
@@ -1176,8 +1181,7 @@ public class XMLStreamReaderImpl implements javax.xml.stream.XMLStreamReader {
return true;
XMLEntityStorage entityStore = fEntityManager.getEntityStore();
- Hashtable ht = entityStore.getDeclaredEntities();
- Entity en =(Entity)ht.get(name);
+ Entity en = entityStore.getEntity(name);
if(en == null)
return false;
if(en.isExternal()){
@@ -1318,15 +1322,14 @@ public class XMLStreamReaderImpl implements javax.xml.stream.XMLStreamReader {
protected List getEntityDecls(){
if(fEventType == XMLStreamConstants.DTD){
XMLEntityStorage entityStore = fEntityManager.getEntityStore();
- Hashtable ht = entityStore.getDeclaredEntities();
ArrayList list = null;
- if(ht != null){
+ if(entityStore.hasEntities()){
EntityDeclarationImpl decl = null;
- list = new ArrayList(ht.size());
- Enumeration enu = ht.keys();
+ list = new ArrayList(entityStore.getEntitySize());
+ Enumeration enu = entityStore.getEntityKeys();
while(enu.hasMoreElements()){
String key = (String)enu.nextElement();
- Entity en = (Entity)ht.get(key);
+ Entity en = (Entity)entityStore.getEntity(key);
decl = new EntityDeclarationImpl();
decl.setEntityName(key);
if(en.isExternal()){
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/BalancedDTDGrammar.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/BalancedDTDGrammar.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/BalancedDTDGrammar.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/BalancedDTDGrammar.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammar.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammar.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammar.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammar.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammarBucket.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammarBucket.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammarBucket.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/DTDGrammarBucket.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDProcessor.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDProcessor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDProcessor.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDProcessor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XML11DTDValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XML11NSDTDValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XML11NSDTDValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XML11NSDTDValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XML11NSDTDValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLAttributeDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLAttributeDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLAttributeDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLAttributeDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLContentSpec.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLContentSpec.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLContentSpec.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLContentSpec.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDDescription.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDDescription.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDDescription.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDDescription.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDLoader.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDLoader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDLoader.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDLoader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDProcessor.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDProcessor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDProcessor.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDProcessor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidatorFilter.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidatorFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidatorFilter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLDTDValidatorFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLElementDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLElementDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLElementDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLElementDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLEntityDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLEntityDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLEntityDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLEntityDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLNSDTDValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLNSDTDValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLNSDTDValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLNSDTDValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLNotationDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLNotationDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLNotationDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLNotationDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLSimpleType.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLSimpleType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/XMLSimpleType.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/XMLSimpleType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMAny.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMAny.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMAny.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMAny.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMBinOp.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMBinOp.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMBinOp.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMBinOp.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMLeaf.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMLeaf.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMLeaf.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMLeaf.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMNode.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMNode.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMNode.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMNode.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMStateSet.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMStateSet.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMStateSet.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMStateSet.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMUniOp.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMUniOp.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/CMUniOp.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/CMUniOp.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/ContentModelValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/ContentModelValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/ContentModelValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/ContentModelValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/DFAContentModel.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/DFAContentModel.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/DFAContentModel.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/DFAContentModel.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/MixedContentModel.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/MixedContentModel.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/MixedContentModel.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/MixedContentModel.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/SimpleContentModel.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/SimpleContentModel.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dtd/models/SimpleContentModel.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dtd/models/SimpleContentModel.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DTDDVFactory.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/DTDDVFactory.java
similarity index 85%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DTDDVFactory.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/DTDDVFactory.java
index 5e13994db33..15afa2e1407 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DTDDVFactory.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/DTDDVFactory.java
@@ -21,6 +21,7 @@
package com.sun.org.apache.xerces.internal.impl.dv;
import java.util.Hashtable;
+import com.sun.org.apache.xerces.internal.utils.ObjectFactory;
/**
* The factory to create and return DTD types. The implementation should
@@ -31,6 +32,7 @@ import java.util.Hashtable;
*
* @author Sandy Gao, IBM
*
+ * @version $Id: DTDDVFactory.java,v 1.6 2010-11-01 04:39:43 joehw Exp $
*/
public abstract class DTDDVFactory {
@@ -43,7 +45,7 @@ public abstract class DTDDVFactory {
* @exception DVFactoryException cannot create an instance of the specified
* class name or the default class name
*/
- public static synchronized final DTDDVFactory getInstance() throws DVFactoryException {
+ public static final DTDDVFactory getInstance() throws DVFactoryException {
return getInstance(DEFAULT_FACTORY_CLASS);
}
@@ -55,19 +57,19 @@ public abstract class DTDDVFactory {
* @exception DVFactoryException cannot create an instance of the specified
* class name or the default class name
*/
- public static synchronized final DTDDVFactory getInstance(String factoryClass) throws DVFactoryException {
-
+ public static final DTDDVFactory getInstance(String factoryClass) throws DVFactoryException {
try {
// if the class name is not specified, use the default one
return (DTDDVFactory)
- (ObjectFactory.newInstance(factoryClass, ObjectFactory.findClassLoader(), true));
- } catch (ClassCastException e) {
+ (ObjectFactory.newInstance(factoryClass, true));
+ }
+ catch (ClassCastException e) {
throw new DVFactoryException("DTD factory class " + factoryClass + " does not extend from DTDDVFactory.");
}
}
// can't create a new object of this class
- protected DTDDVFactory(){}
+ protected DTDDVFactory() {}
/**
* return a dtd type of the given name
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DVFactoryException.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/DVFactoryException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DVFactoryException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/DVFactoryException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/DatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/DatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeFacetException.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeFacetException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeFacetException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeFacetException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeValueException.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeValueException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeValueException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/InvalidDatatypeValueException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java
index 3a04ae4f801..902d9d3fdea 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java
@@ -22,6 +22,7 @@ package com.sun.org.apache.xerces.internal.impl.dv;
import com.sun.org.apache.xerces.internal.util.SymbolHash;
import com.sun.org.apache.xerces.internal.xs.XSObjectList;
+import com.sun.org.apache.xerces.internal.utils.ObjectFactory;
/**
* Defines a factory API that enables applications to
@@ -39,6 +40,7 @@ import com.sun.org.apache.xerces.internal.xs.XSObjectList;
*
* @author Sandy Gao, IBM
*
+ * @version $Id: SchemaDVFactory.java,v 1.6 2010-11-01 04:39:43 joehw Exp $
*/
public abstract class SchemaDVFactory {
@@ -68,8 +70,7 @@ public abstract class SchemaDVFactory {
try {
// if the class name is not specified, use the default one
- return (SchemaDVFactory)(ObjectFactory.newInstance(
- factoryClass, ObjectFactory.findClassLoader(), true));
+ return (SchemaDVFactory)(ObjectFactory.newInstance(factoryClass, true));
} catch (ClassCastException e4) {
throw new DVFactoryException("Schema factory class " + factoryClass + " does not extend from SchemaDVFactory.");
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/ValidatedInfo.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/ValidatedInfo.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/ValidatedInfo.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/ValidatedInfo.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/ValidationContext.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/ValidationContext.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/ValidationContext.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/ValidationContext.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/XSFacets.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/XSFacets.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/XSFacets.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/XSFacets.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/XSSimpleType.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/XSSimpleType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/XSSimpleType.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/XSSimpleType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/DTDDVFactoryImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/DTDDVFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/DTDDVFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/DTDDVFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/ENTITYDatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/ENTITYDatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/ENTITYDatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/ENTITYDatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/IDDatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/IDDatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/IDDatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/IDDatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/IDREFDatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/IDREFDatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/IDREFDatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/IDREFDatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/ListDatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/ListDatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/ListDatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/ListDatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/NMTOKENDatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/NMTOKENDatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/NMTOKENDatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/NMTOKENDatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/NOTATIONDatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/NOTATIONDatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/NOTATIONDatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/NOTATIONDatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/StringDatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/StringDatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/StringDatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/StringDatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11DTDDVFactoryImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11DTDDVFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11DTDDVFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11DTDDVFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDDatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDDatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDDatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDDatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDREFDatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDREFDatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDREFDatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11IDREFDatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11NMTOKENDatatypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11NMTOKENDatatypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11NMTOKENDatatypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/dtd/XML11NMTOKENDatatypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/util/Base64.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/util/Base64.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/util/Base64.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/util/Base64.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/util/ByteListImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/util/ByteListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/util/ByteListImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/util/ByteListImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/util/HexBin.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/util/HexBin.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/util/HexBin.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/util/HexBin.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/AbstractDateTimeDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/AbstractDateTimeDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/AbstractDateTimeDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/AbstractDateTimeDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/AnyAtomicDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/AnyAtomicDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/AnyAtomicDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/AnyAtomicDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/AnySimpleDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/AnySimpleDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/AnySimpleDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/AnySimpleDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/AnyURIDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/AnyURIDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/AnyURIDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/AnyURIDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/Base64BinaryDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/Base64BinaryDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/Base64BinaryDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/Base64BinaryDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/BaseDVFactory.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/BaseDVFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/BaseDVFactory.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/BaseDVFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/BaseSchemaDVFactory.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/BaseSchemaDVFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/BaseSchemaDVFactory.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/BaseSchemaDVFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/BooleanDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/BooleanDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/BooleanDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/BooleanDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DateDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DateDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DateDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DateDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DateTimeDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DateTimeDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DateTimeDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DateTimeDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DayDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DayDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DayDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DayDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DayTimeDurationDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DayTimeDurationDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DayTimeDurationDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DayTimeDurationDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DecimalDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DecimalDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DecimalDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DecimalDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DoubleDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DoubleDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DoubleDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DoubleDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DurationDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DurationDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/DurationDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/DurationDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/EntityDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/EntityDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/EntityDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/EntityDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/ExtendedSchemaDVFactoryImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/ExtendedSchemaDVFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/ExtendedSchemaDVFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/ExtendedSchemaDVFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/FloatDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/FloatDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/FloatDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/FloatDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/FullDVFactory.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/FullDVFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/FullDVFactory.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/FullDVFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/HexBinaryDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/HexBinaryDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/HexBinaryDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/HexBinaryDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/IDDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/IDDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/IDDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/IDDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/IDREFDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/IDREFDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/IDREFDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/IDREFDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/IntegerDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/IntegerDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/IntegerDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/IntegerDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/ListDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/ListDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/ListDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/ListDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDayDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDayDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDayDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/MonthDayDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/PrecisionDecimalDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/PrecisionDecimalDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/PrecisionDecimalDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/PrecisionDecimalDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/QNameDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/QNameDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/QNameDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/QNameDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDVFactoryImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDVFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDVFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDVFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDateTimeException.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDateTimeException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDateTimeException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/SchemaDateTimeException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/StringDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/StringDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/StringDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/StringDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/TimeDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/TimeDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/TimeDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/TimeDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/TypeValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/TypeValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/TypeValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/TypeValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/UnionDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/UnionDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/UnionDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/UnionDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDelegate.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDelegate.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDelegate.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/XSSimpleTypeDelegate.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/YearDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/YearDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/YearDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/YearDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDurationDV.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDurationDV.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDurationDV.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/dv/xs/YearMonthDurationDV.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/io/ASCIIReader.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/io/ASCIIReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/io/ASCIIReader.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/io/ASCIIReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/io/MalformedByteSequenceException.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/io/MalformedByteSequenceException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/io/MalformedByteSequenceException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/io/MalformedByteSequenceException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/io/UCSReader.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/io/UCSReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/io/UCSReader.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/io/UCSReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/io/UTF8Reader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_de.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_de.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_de.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_de.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_es.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_es.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_es.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_es.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_fr.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_fr.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_fr.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_fr.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_it.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_it.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_it.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_it.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_ja.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_ja.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_ja.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_ja.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_ko.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_ko.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_ko.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_ko.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_pt_BR.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_pt_BR.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_pt_BR.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_pt_BR.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_sv.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_sv.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_sv.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_sv.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_zh_CN.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_zh_CN.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_zh_CN.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_zh_CN.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_zh_TW.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_zh_TW.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_zh_TW.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DOMMessages_zh_TW.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_de.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_de.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_de.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_de.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_es.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_es.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_es.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_es.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_fr.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_fr.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_fr.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_fr.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_it.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_it.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_it.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_it.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_ja.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_ja.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_ja.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_ja.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_ko.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_ko.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_ko.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_ko.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_pt_BR.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_pt_BR.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_pt_BR.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_pt_BR.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_sv.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_sv.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_sv.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_sv.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_zh_CN.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_zh_CN.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_zh_CN.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_zh_CN.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_zh_TW.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_zh_TW.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_zh_TW.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/DatatypeMessages_zh_TW.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_de.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_de.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_de.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_de.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_es.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_es.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_es.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_es.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_fr.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_fr.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_fr.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_fr.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_it.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_it.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_it.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_it.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_ja.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_ja.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_ja.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_ja.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_ko.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_ko.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_ko.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_ko.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_pt_BR.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_pt_BR.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_pt_BR.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_pt_BR.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_sv.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_sv.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_sv.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_sv.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_zh_CN.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_zh_CN.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_zh_CN.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_zh_CN.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_zh_TW.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_zh_TW.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_zh_TW.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/JAXPValidationMessages_zh_TW.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_de.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_de.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_de.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_de.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_es.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_es.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_es.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_es.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_fr.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_fr.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_fr.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_fr.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_it.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_it.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_it.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_it.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_ja.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_ja.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_ja.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_ja.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_ko.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_ko.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_ko.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_ko.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_pt_BR.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_pt_BR.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_pt_BR.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_pt_BR.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_sv.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_sv.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_sv.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_sv.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_zh_CN.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_zh_CN.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_zh_CN.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_zh_CN.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_zh_TW.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_zh_TW.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_zh_TW.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/SAXMessages_zh_TW.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_de.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_de.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_de.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_de.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_es.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_es.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_es.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_es.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_fr.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_fr.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_fr.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_fr.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_it.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_it.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_it.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_it.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_ja.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_ja.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_ja.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_ja.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_ko.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_ko.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_ko.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_ko.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_pt_BR.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_pt_BR.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_pt_BR.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_pt_BR.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_sv.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_sv.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_sv.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_sv.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_zh_CN.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_zh_CN.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_zh_CN.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_zh_CN.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_zh_TW.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_zh_TW.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_zh_TW.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XIncludeMessages_zh_TW.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_de.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_de.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_de.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_de.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_es.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_es.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_es.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_es.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_fr.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_fr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_fr.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_fr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_it.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_it.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_it.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_it.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_ja.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_ja.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_ja.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_ja.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_ko.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_ko.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_ko.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_ko.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_pt_BR.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_pt_BR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_pt_BR.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_pt_BR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_sv.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_sv.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_sv.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_sv.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_CN.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_CN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_CN.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_CN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_TW.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_TW.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_TW.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter_zh_TW.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_de.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_de.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_de.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_de.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_es.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_es.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_es.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_es.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_fr.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_fr.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_fr.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_fr.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_it.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_it.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_it.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_it.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ja.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ja.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ja.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ja.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ko.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ko.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ko.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_ko.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_pt_BR.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_pt_BR.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_pt_BR.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_pt_BR.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_sv.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_sv.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_sv.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_sv.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_CN.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_CN.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_CN.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_CN.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_TW.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_TW.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_TW.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessages_zh_TW.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages.properties
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages.properties
index 9605b7d9027..d2e847199ec 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages.properties
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages.properties
@@ -289,3 +289,6 @@
TargetNamespace.2 = TargetNamespace.2: Expecting no namespace, but the schema document has a target namespace of ''{1}''.
UndeclaredEntity = UndeclaredEntity: Entity ''{0}'' is not declared.
UndeclaredPrefix = UndeclaredPrefix: Cannot resolve ''{0}'' as a QName: the prefix ''{1}'' is not declared.
+null
+null
+null
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_de.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_de.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_de.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_de.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_es.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_es.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_es.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_es.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_fr.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_fr.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_fr.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_fr.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_it.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_it.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_it.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_it.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_ja.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_ja.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_ja.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_ja.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_ko.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_ko.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_ko.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_ko.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_pt_BR.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_pt_BR.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_pt_BR.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_pt_BR.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_sv.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_sv.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_sv.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_sv.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_zh_CN.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_zh_CN.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_zh_CN.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_zh_CN.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_zh_TW.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_zh_TW.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_zh_TW.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSchemaMessages_zh_TW.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_de.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_de.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_de.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_de.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_es.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_es.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_es.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_es.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_fr.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_fr.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_fr.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_fr.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_it.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_it.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_it.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_it.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_ja.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_ja.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_ja.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_ja.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_ko.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_ko.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_ko.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_ko.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_pt_BR.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_pt_BR.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_pt_BR.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_pt_BR.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_sv.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_sv.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_sv.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_sv.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_zh_CN.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_zh_CN.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_zh_CN.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_zh_CN.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_zh_TW.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_zh_TW.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_zh_TW.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XMLSerializerMessages_zh_TW.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_de.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_de.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_de.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_de.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_es.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_es.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_es.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_es.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_fr.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_fr.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_fr.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_fr.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_it.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_it.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_it.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_it.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_ja.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_ja.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_ja.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_ja.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_ko.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_ko.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_ko.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_ko.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_pt_BR.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_pt_BR.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_pt_BR.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_pt_BR.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_sv.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_sv.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_sv.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_sv.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_zh_CN.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_zh_CN.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_zh_CN.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_zh_CN.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_zh_TW.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_zh_TW.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_zh_TW.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/msg/XPointerMessages_zh_TW.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/validation/EntityState.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/validation/EntityState.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/validation/EntityState.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/validation/EntityState.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/validation/ValidationManager.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/validation/ValidationManager.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/validation/ValidationManager.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/validation/ValidationManager.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/validation/ValidationState.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/validation/ValidationState.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/validation/ValidationState.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/validation/ValidationState.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/XPath.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/XPath.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/XPath.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/XPath.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/XPathException.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/XPathException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/XPathException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/XPathException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/BMPattern.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/BMPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/BMPattern.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/BMPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/CaseInsensitiveMap.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/CaseInsensitiveMap.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/CaseInsensitiveMap.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/CaseInsensitiveMap.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/Match.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/Match.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/Match.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/Match.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/Op.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/Op.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/Op.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/Op.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/ParseException.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/ParseException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/ParseException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/ParseException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/ParserForXMLSchema.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/ParserForXMLSchema.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/ParserForXMLSchema.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/ParserForXMLSchema.java
index 3576ad28703..22e2a710c9b 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/ParserForXMLSchema.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/ParserForXMLSchema.java
@@ -383,16 +383,13 @@ class ParserForXMLSchema extends RegexParser {
tok = Token.createRange();
setupRange(tok, DIGITS);
- ranges.put("xml:isDigit", tok);
- ranges2.put("xml:isDigit", Token.complementRanges(tok));
-
- tok = Token.createRange();
- setupRange(tok, DIGITS);
+ setupRange(tok, DIGITS_INT);
ranges.put("xml:isDigit", tok);
ranges2.put("xml:isDigit", Token.complementRanges(tok));
tok = Token.createRange();
setupRange(tok, LETTERS);
+ setupRange(tok, LETTERS_INT);
tok.mergeRanges((Token)ranges.get("xml:isDigit"));
ranges.put("xml:isWord", tok);
ranges2.put("xml:isWord", Token.complementRanges(tok));
@@ -420,6 +417,12 @@ class ParserForXMLSchema extends RegexParser {
range.addRange(src.charAt(i), src.charAt(i+1));
}
+ static void setupRange(Token range, int[] src) {
+ int len = src.length;
+ for (int i = 0; i < len; i += 2)
+ range.addRange(src[i], src[i+1]);
+ }
+
private static final String SPACES = "\t\n\r\r ";
private static final String NAMECHARS =
"\u002d\u002e\u0030\u003a\u0041\u005a\u005f\u005f\u0061\u007a\u00b7\u00b7\u00c0\u00d6"
@@ -466,7 +469,8 @@ class ParserForXMLSchema extends RegexParser {
+"";
private static final String LETTERS =
"\u0041\u005a\u0061\u007a\u00c0\u00d6\u00d8\u00f6\u00f8\u0131\u0134\u013e\u0141\u0148"
- +"\u014a\u017e\u0180\u01c3\u01cd\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1"
+ +"\u014a\u017e\u0180\u01f0\u01f4\u01f5\u01fa\u0217\u0250\u02a8\u02bb\u02c1"
+ +"\u02b0\u02d1"
+"\u0386\u0386\u0388\u038a\u038c\u038c\u038e\u03a1\u03a3\u03ce\u03d0\u03d6\u03da\u03da"
+"\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03f3\u0401\u040c\u040e\u044f\u0451\u045c"
+"\u045e\u0481\u0490\u04c4\u04c7\u04c8\u04cb\u04cc\u04d0\u04eb\u04ee\u04f5\u04f8\u04f9"
@@ -494,9 +498,15 @@ class ParserForXMLSchema extends RegexParser {
+"\u1f5f\u1f7d\u1f80\u1fb4\u1fb6\u1fbc\u1fbe\u1fbe\u1fc2\u1fc4\u1fc6\u1fcc\u1fd0\u1fd3"
+"\u1fd6\u1fdb\u1fe0\u1fec\u1ff2\u1ff4\u1ff6\u1ffc\u2126\u2126\u212a\u212b\u212e\u212e"
+"\u2180\u2182\u3007\u3007\u3021\u3029\u3041\u3094\u30a1\u30fa\u3105\u312c\u4e00\u9fa5"
- +"\uac00\ud7a3";
+ +"\uac00\ud7a3\uff66\uff9f";
+
+ private static final int[] LETTERS_INT = {0x1d790, 0x1d7a8, 0x1d7aa, 0x1d7c9, 0x2fa1b, 0x2fa1d};
+
private static final String DIGITS =
"\u0030\u0039\u0660\u0669\u06F0\u06F9\u0966\u096F\u09E6\u09EF\u0A66\u0A6F\u0AE6\u0AEF"
+"\u0B66\u0B6F\u0BE7\u0BEF\u0C66\u0C6F\u0CE6\u0CEF\u0D66\u0D6F\u0E50\u0E59\u0ED0\u0ED9"
+"\u0F20\u0F29\u1040\u1049\u1369\u1371\u17E0\u17E9\u1810\u1819\uFF10\uFF19";
+
+ private static final int[] DIGITS_INT = {0x1D7CE, 0x1D7FF};
+
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/REUtil.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/REUtil.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/REUtil.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/REUtil.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/RangeToken.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/RangeToken.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/RangeToken.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/RangeToken.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/RegexParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/RegexParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/RegexParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/RegexParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/RegularExpression.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/Token.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/Token.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/Token.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/Token.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/message.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/message.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/message.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/message.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/message_fr.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/message_fr.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/message_fr.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/message_fr.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/message_ja.properties b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/message_ja.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xpath/regex/message_ja.properties
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xpath/regex/message_ja.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/AttributePSVImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/AttributePSVImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/AttributePSVImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/AttributePSVImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/ElementPSVImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/ElementPSVImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/ElementPSVImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/ElementPSVImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/SchemaGrammar.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SchemaNamespaceSupport.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/SchemaNamespaceSupport.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SchemaNamespaceSupport.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/SchemaNamespaceSupport.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SchemaSymbols.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/SchemaSymbols.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SchemaSymbols.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/SchemaSymbols.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/SubstitutionGroupHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaException.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java
index ff5b46b0005..4b7ba136685 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java
@@ -154,6 +154,8 @@ XSLoader, DOMConfiguration {
protected static final String SCHEMA_DV_FACTORY =
Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_DV_FACTORY_PROPERTY;
+ protected static final String USE_SERVICE_MECHANISM = Constants.ORACLE_FEATURE_SERVICE_MECHANISM;
+
// recognized features:
private static final String[] RECOGNIZED_FEATURES = {
SCHEMA_FULL_CHECKING,
@@ -166,7 +168,8 @@ XSLoader, DOMConfiguration {
VALIDATE_ANNOTATIONS,
HONOUR_ALL_SCHEMALOCATIONS,
NAMESPACE_GROWTH,
- TOLERATE_DUPLICATES
+ TOLERATE_DUPLICATES,
+ USE_SERVICE_MECHANISM
};
// property identifiers
@@ -1148,7 +1151,8 @@ XSLoader, DOMConfiguration {
name.equals(GENERATE_SYNTHETIC_ANNOTATIONS) ||
name.equals(HONOUR_ALL_SCHEMALOCATIONS) ||
name.equals(NAMESPACE_GROWTH) ||
- name.equals(TOLERATE_DUPLICATES)) {
+ name.equals(TOLERATE_DUPLICATES) ||
+ name.equals(USE_SERVICE_MECHANISM)) {
return true;
}
@@ -1227,6 +1231,7 @@ XSLoader, DOMConfiguration {
v.add(HONOUR_ALL_SCHEMALOCATIONS);
v.add(NAMESPACE_GROWTH);
v.add(TOLERATE_DUPLICATES);
+ v.add(USE_SERVICE_MECHANISM);
fRecognizedParameters = new DOMStringListImpl(v);
}
return fRecognizedParameters;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java
index aa6dc744252..c14673ec26a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaValidator.java
@@ -233,6 +233,8 @@ public class XMLSchemaValidator
protected static final String SCHEMA_DV_FACTORY =
Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_DV_FACTORY_PROPERTY;
+ protected static final String USE_SERVICE_MECHANISM = Constants.ORACLE_FEATURE_SERVICE_MECHANISM;
+
// recognized features and properties
/** Recognized features. */
@@ -250,7 +252,8 @@ public class XMLSchemaValidator
HONOUR_ALL_SCHEMALOCATIONS,
USE_GRAMMAR_POOL_ONLY,
NAMESPACE_GROWTH,
- TOLERATE_DUPLICATES
+ TOLERATE_DUPLICATES,
+ USE_SERVICE_MECHANISM
};
/** Feature defaults. */
@@ -272,7 +275,8 @@ public class XMLSchemaValidator
null,
null,
null,
- null
+ null,
+ Boolean.TRUE
};
/** Recognized properties. */
@@ -3488,7 +3492,8 @@ public class XMLSchemaValidator
if (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY) {
String code = "AbsentKeyValue";
String eName = fIdentityConstraint.getElementName();
- reportSchemaError(code, new Object[] { eName });
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { eName, cName });
}
return;
}
@@ -3503,9 +3508,9 @@ public class XMLSchemaValidator
if (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY) {
String code = "KeyNotEnoughValues";
UniqueOrKey key = (UniqueOrKey) fIdentityConstraint;
- String ename = fIdentityConstraint.getElementName();
- String kname = key.getIdentityConstraintName();
- reportSchemaError(code, new Object[] { ename, kname });
+ String eName = fIdentityConstraint.getElementName();
+ String cName = key.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { eName, cName });
}
return;
}
@@ -3558,12 +3563,15 @@ public class XMLSchemaValidator
// do we even know this field?
if (i == -1) {
String code = "UnknownField";
- reportSchemaError(code, new Object[] { field.toString()});
+ String eName = fIdentityConstraint.getElementName();
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { field.toString(), eName, cName });
return;
}
if (Boolean.TRUE != mayMatch(field)) {
String code = "FieldMultipleMatch";
- reportSchemaError(code, new Object[] { field.toString()});
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { field.toString(), cName });
} else {
fValuesCount++;
}
@@ -3844,8 +3852,9 @@ public class XMLSchemaValidator
if (contains()) {
String code = "DuplicateUnique";
String value = toString(fLocalValues);
- String ename = fIdentityConstraint.getElementName();
- reportSchemaError(code, new Object[] { value, ename });
+ String eName = fIdentityConstraint.getElementName();
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { value, eName, cName });
}
} // duplicateValue(Hashtable)
@@ -3880,8 +3889,9 @@ public class XMLSchemaValidator
if (contains()) {
String code = "DuplicateKey";
String value = toString(fLocalValues);
- String ename = fIdentityConstraint.getElementName();
- reportSchemaError(code, new Object[] { value, ename });
+ String eName = fIdentityConstraint.getElementName();
+ String cName = fIdentityConstraint.getIdentityConstraintName();
+ reportSchemaError(code, new Object[] { value, eName, cName });
}
} // duplicateValue(Hashtable)
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSAnnotationImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSAnnotationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSAnnotationImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSAnnotationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeGroupDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeGroupDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeGroupDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeGroupDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeUseImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeUseImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeUseImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSAttributeUseImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSComplexTypeDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSComplexTypeDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSComplexTypeDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSComplexTypeDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSConstraints.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSConstraints.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSConstraints.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSConstraints.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSDDescription.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSDDescription.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSDDescription.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSDDescription.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSDeclarationPool.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSDeclarationPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSDeclarationPool.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSDeclarationPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSElementDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSElementDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSElementDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSElementDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSGrammarBucket.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSGrammarBucket.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSGrammarBucket.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSGrammarBucket.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSGroupDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSGroupDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSGroupDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSGroupDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSImplementationImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSImplementationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSImplementationImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSImplementationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSLoaderImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSLoaderImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSLoaderImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSLoaderImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSMessageFormatter.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSMessageFormatter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSMessageFormatter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSMessageFormatter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSModelGroupImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSModelGroupImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSModelGroupImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSModelGroupImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSModelImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSModelImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSModelImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSModelImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSNotationDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSNotationDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSNotationDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSNotationDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSParticleDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSParticleDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSParticleDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSParticleDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSWildcardDecl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSWildcardDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/XSWildcardDecl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/XSWildcardDecl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/Field.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/Field.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/Field.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/Field.java
index ae1ae14e2ae..ca968f8d41e 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/Field.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/Field.java
@@ -35,6 +35,7 @@ import com.sun.org.apache.xerces.internal.xs.XSTypeDefinition;
* @xerces.internal
*
* @author Andy Clark, IBM
+ * @version $Id: Field.java,v 1.6 2010-11-01 04:39:57 joehw Exp $
*/
public class Field {
@@ -176,7 +177,8 @@ public class Field {
super.matched(actualValue, valueType, itemValueType, isNil);
if(isNil && (fIdentityConstraint.getCategory() == IdentityConstraint.IC_KEY)) {
String code = "KeyMatchesNillable";
- fStore.reportError(code, new Object[]{fIdentityConstraint.getElementName()});
+ fStore.reportError(code,
+ new Object[]{fIdentityConstraint.getElementName(), fIdentityConstraint.getIdentityConstraintName()});
}
fStore.addValue(Field.this, actualValue, convertToPrimitiveKind(valueType), convertToPrimitiveKind(itemValueType));
// once we've stored the value for this field, we set the mayMatch
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/FieldActivator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/FieldActivator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/FieldActivator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/FieldActivator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/IdentityConstraint.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/IdentityConstraint.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/IdentityConstraint.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/IdentityConstraint.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/KeyRef.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/KeyRef.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/KeyRef.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/KeyRef.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/Selector.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/Selector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/Selector.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/Selector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/UniqueOrKey.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/UniqueOrKey.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/UniqueOrKey.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/UniqueOrKey.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/ValueStore.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/ValueStore.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/ValueStore.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/ValueStore.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/XPathMatcher.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/XPathMatcher.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/identity/XPathMatcher.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/identity/XPathMatcher.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/CMBuilder.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/CMBuilder.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/CMBuilder.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/CMBuilder.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/CMNodeFactory.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/CMNodeFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/CMNodeFactory.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/CMNodeFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSAllCM.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSAllCM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSAllCM.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSAllCM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMBinOp.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMBinOp.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMBinOp.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMBinOp.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMLeaf.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMLeaf.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMLeaf.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMLeaf.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMRepeatingLeaf.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMRepeatingLeaf.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMRepeatingLeaf.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMRepeatingLeaf.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMUniOp.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMUniOp.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMUniOp.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMUniOp.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMValidator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMValidator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMValidator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSCMValidator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSDFACM.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSDFACM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSDFACM.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSDFACM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSEmptyCM.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSEmptyCM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/models/XSEmptyCM.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/models/XSEmptyCM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/AttrImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/AttrImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/AttrImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/AttrImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultDocument.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultDocument.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultDocument.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultDocument.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultElement.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultElement.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultElement.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultElement.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultNode.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultNode.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultNode.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultNode.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultText.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultText.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultText.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultText.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultXMLDocumentHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultXMLDocumentHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultXMLDocumentHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/DefaultXMLDocumentHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/ElementImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/ElementImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/ElementImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/ElementImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/NamedNodeMapImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/NamedNodeMapImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/NamedNodeMapImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/NamedNodeMapImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/NodeImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/NodeImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/NodeImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/NodeImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOM.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOM.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMImplementation.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMImplementation.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMImplementation.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMImplementation.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaDOMParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/TextImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/TextImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/TextImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/opti/TextImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/SchemaContentHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/SchemaContentHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/SchemaContentHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/SchemaContentHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/StAXSchemaParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/StAXSchemaParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/StAXSchemaParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/StAXSchemaParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAnnotationInfo.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAnnotationInfo.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAnnotationInfo.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAnnotationInfo.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractIDConstraintTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractParticleTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractParticleTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractParticleTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractParticleTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAbstractTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeGroupTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeGroupTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeGroupTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeGroupTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDAttributeTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDComplexTypeTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDComplexTypeTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDComplexTypeTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDComplexTypeTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDElementTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDElementTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDElementTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDElementTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDGroupTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDGroupTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDGroupTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDGroupTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDKeyrefTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDKeyrefTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDKeyrefTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDKeyrefTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDNotationTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDNotationTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDNotationTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDNotationTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDSimpleTypeTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDSimpleTypeTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDSimpleTypeTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDSimpleTypeTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDUniqueOrKeyTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDUniqueOrKeyTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDUniqueOrKeyTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDUniqueOrKeyTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDWildcardTraverser.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDWildcardTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDWildcardTraverser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDWildcardTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDocumentInfo.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDocumentInfo.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDocumentInfo.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDocumentInfo.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/LSInputListImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/LSInputListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/LSInputListImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/LSInputListImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/ObjectListImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/ObjectListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/ObjectListImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/ObjectListImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/ShortListImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/ShortListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/ShortListImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/ShortListImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/SimpleLocator.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/SimpleLocator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/SimpleLocator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/SimpleLocator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/StringListImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/StringListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/StringListImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/StringListImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XInt.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XInt.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XInt.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XInt.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XIntPool.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XIntPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XIntPool.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XIntPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XSGrammarPool.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XSGrammarPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XSGrammarPool.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XSGrammarPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XSInputSource.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XSInputSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XSInputSource.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XSInputSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMap4Types.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMap4Types.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMap4Types.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMap4Types.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMapImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMapImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMapImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XSNamedMapImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XSObjectListImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XSObjectListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/xs/util/XSObjectListImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/impl/xs/util/XSObjectListImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/DefaultValidationErrorHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DefaultValidationErrorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/DefaultValidationErrorHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DefaultValidationErrorHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderFactoryImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/JAXPConstants.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/JAXPConstants.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/JAXPConstants.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/JAXPConstants.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/JAXPValidatorComponent.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/SAXParserFactoryImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/SAXParserFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/SchemaValidatorConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SchemaValidatorConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/SchemaValidatorConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/SchemaValidatorConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/TeeXMLDocumentFilterImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/TeeXMLDocumentFilterImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/TeeXMLDocumentFilterImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/TeeXMLDocumentFilterImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/UnparsedEntityHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/UnparsedEntityHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/UnparsedEntityHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/UnparsedEntityHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/DatatypeFactoryImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/DatatypeFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/DatatypeFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/DatatypeFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationDayTimeImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationDayTimeImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationDayTimeImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationDayTimeImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationYearMonthImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationYearMonthImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationYearMonthImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/DurationYearMonthImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.java
index 3322cd23820..dac7fbf09f2 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/XMLGregorianCalendarImpl.java
@@ -39,7 +39,7 @@ import javax.xml.datatype.Duration;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;
import com.sun.org.apache.xerces.internal.util.DatatypeMessageFormatter;
-
+import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
/**
*
Representation for W3C XML Schema 1.0 date/time datatypes.
@@ -2394,7 +2394,10 @@ public class XMLGregorianCalendarImpl
GregorianCalendar result = null;
final int DEFAULT_TIMEZONE_OFFSET = DatatypeConstants.FIELD_UNDEFINED;
TimeZone tz = getTimeZone(DEFAULT_TIMEZONE_OFFSET);
- Locale locale = Locale.getDefault();
+ /** Use the following instead for JDK7 only:
+ * Locale locale = Locale.getDefault(Locale.Category.FORMAT);
+ */
+ Locale locale = getDefaultLocale();
result = new GregorianCalendar(tz, locale);
result.clear();
@@ -2441,6 +2444,33 @@ public class XMLGregorianCalendarImpl
return result;
}
+ /**
+ *
+ * @return default locale
+ */
+ private Locale getDefaultLocale() {
+
+ String lang = SecuritySupport.getSystemProperty("user.language.format");
+ String country = SecuritySupport.getSystemProperty("user.country.format");
+ String variant = SecuritySupport.getSystemProperty("user.variant.format");
+ Locale locale = null;
+ if (lang != null) {
+ if (country != null) {
+ if (variant != null) {
+ locale = new Locale(lang, country, variant);
+ } else {
+ locale = new Locale(lang, country);
+ }
+ } else {
+ locale = new Locale(lang);
+ }
+ }
+ if (locale == null) {
+ locale = Locale.getDefault();
+ }
+ return locale;
+ }
+
/**
*
Convert this along with provided parameters
* to java.util.GregorianCalendar instance.
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/javax.xml.datatype.DatatypeFactory b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/javax.xml.datatype.DatatypeFactory
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/datatype/javax.xml.datatype.DatatypeFactory
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/datatype/javax.xml.datatype.DatatypeFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/javax.xml.parsers.DocumentBuilderFactory b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/javax.xml.parsers.DocumentBuilderFactory
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/javax.xml.parsers.DocumentBuilderFactory
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/javax.xml.parsers.DocumentBuilderFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/javax.xml.parsers.SAXParserFactory b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/javax.xml.parsers.SAXParserFactory
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/javax.xml.parsers.SAXParserFactory
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/javax.xml.parsers.SAXParserFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/AbstractXMLSchema.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/AbstractXMLSchema.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/AbstractXMLSchema.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/AbstractXMLSchema.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DOMDocumentHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMDocumentHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DOMDocumentHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMDocumentHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DOMResultAugmentor.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMResultAugmentor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DOMResultAugmentor.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMResultAugmentor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DOMResultBuilder.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMResultBuilder.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DOMResultBuilder.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMResultBuilder.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper.java
index 5bdb1f27af1..4c69e70c0e4 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper.java
@@ -37,6 +37,7 @@ import com.sun.org.apache.xerces.internal.impl.validation.EntityState;
import com.sun.org.apache.xerces.internal.impl.validation.ValidationManager;
import com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator;
import com.sun.org.apache.xerces.internal.impl.xs.util.SimpleLocator;
+import com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl;
import com.sun.org.apache.xerces.internal.util.NamespaceSupport;
import com.sun.org.apache.xerces.internal.util.SymbolTable;
import com.sun.org.apache.xerces.internal.util.XMLAttributesImpl;
@@ -62,7 +63,7 @@ import org.xml.sax.SAXException;
* A validator helper for DOMSources.
*
* @author Michael Glavassevich, IBM
- * @version $Id: DOMValidatorHelper.java,v 1.8 2010/07/23 02:09:26 joehw Exp $
+ * @version $Id: DOMValidatorHelper.java,v 1.9 2010-11-01 04:40:08 joehw Exp $
*/
final class DOMValidatorHelper implements ValidatorHelper, EntityState {
@@ -381,7 +382,8 @@ final class DOMValidatorHelper implements ValidatorHelper, EntityState {
}
if (result.getNode() == null) {
try {
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ DocumentBuilderFactory factory = fComponentManager.getFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM) ?
+ DocumentBuilderFactory.newInstance() : new DocumentBuilderFactoryImpl();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
result.setNode(builder.newDocument());
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DraconianErrorHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DraconianErrorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/DraconianErrorHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/DraconianErrorHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/EmptyXMLSchema.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/EmptyXMLSchema.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/EmptyXMLSchema.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/EmptyXMLSchema.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ErrorHandlerAdaptor.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ErrorHandlerAdaptor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ErrorHandlerAdaptor.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ErrorHandlerAdaptor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/JAXPValidationMessageFormatter.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/JAXPValidationMessageFormatter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/JAXPValidationMessageFormatter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/JAXPValidationMessageFormatter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ReadOnlyGrammarPool.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ReadOnlyGrammarPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ReadOnlyGrammarPool.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ReadOnlyGrammarPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/SimpleXMLSchema.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/SimpleXMLSchema.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/SimpleXMLSchema.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/SimpleXMLSchema.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/SoftReferenceGrammarPool.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/SoftReferenceGrammarPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/SoftReferenceGrammarPool.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/SoftReferenceGrammarPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java
similarity index 86%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java
index 84dddd6b099..f398e037d18 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java
@@ -25,6 +25,7 @@
package com.sun.org.apache.xerces.internal.jaxp.validation;
+import com.sun.org.apache.xerces.internal.impl.Constants;
import java.io.IOException;
import javax.xml.transform.Result;
@@ -32,6 +33,7 @@ import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.sax.SAXTransformerFactory;
@@ -47,6 +49,7 @@ import org.xml.sax.SAXException;
* @author Sunitha Reddy
*/
public final class StAXValidatorHelper implements ValidatorHelper {
+ private static final String DEFAULT_TRANSFORMER_IMPL = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl";
/** Component manager. **/
private XMLSchemaValidatorComponentManager fComponentManager;
@@ -67,7 +70,9 @@ public final class StAXValidatorHelper implements ValidatorHelper {
if( identityTransformer1==null ) {
try {
- SAXTransformerFactory tf = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+ SAXTransformerFactory tf = fComponentManager.getFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM) ?
+ (SAXTransformerFactory)SAXTransformerFactory.newInstance()
+ : (SAXTransformerFactory) TransformerFactory.newInstance(DEFAULT_TRANSFORMER_IMPL, StAXValidatorHelper.class.getClassLoader());
identityTransformer1 = tf.newTransformer();
identityTransformer2 = tf.newTransformerHandler();
} catch (TransformerConfigurationException e) {
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java
similarity index 92%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java
index 58c8a8554ee..3919c0ca80f 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java
@@ -30,7 +30,7 @@ import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import com.sun.org.apache.xerces.internal.impl.Constants;
@@ -48,7 +48,7 @@ import org.xml.sax.SAXException;
*
* @author Michael Glavassevich, IBM
* @author Sunitha Reddy
- * @version $Id: StreamValidatorHelper.java,v 1.6 2010/07/23 02:09:26 joehw Exp $
+ * @version $Id: StreamValidatorHelper.java,v 1.7 2010-11-01 04:40:08 joehw Exp $
*/
final class StreamValidatorHelper implements ValidatorHelper {
@@ -84,6 +84,7 @@ final class StreamValidatorHelper implements ValidatorHelper {
private static final String VALIDATION_MANAGER =
Constants.XERCES_PROPERTY_PREFIX + Constants.VALIDATION_MANAGER_PROPERTY;
+ private static final String DEFAULT_TRANSFORMER_IMPL = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl";
//
// Data
//
@@ -112,7 +113,9 @@ final class StreamValidatorHelper implements ValidatorHelper {
if( result!=null ) {
try {
- SAXTransformerFactory tf = (SAXTransformerFactory)SAXTransformerFactory.newInstance();
+ SAXTransformerFactory tf = fComponentManager.getFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM) ?
+ (SAXTransformerFactory)SAXTransformerFactory.newInstance()
+ : (SAXTransformerFactory) TransformerFactory.newInstance(DEFAULT_TRANSFORMER_IMPL, StreamValidatorHelper.class.getClassLoader());
identityTransformerHandler = tf.newTransformerHandler();
} catch (TransformerConfigurationException e) {
throw new TransformerFactoryConfigurationError(e);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/Util.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/Util.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/Util.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/Util.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java
index 529c6037fbe..2d9f2807910 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java
@@ -43,6 +43,7 @@ import com.sun.org.apache.xerces.internal.impl.dv.XSSimpleType;
import com.sun.org.apache.xerces.internal.impl.validation.EntityState;
import com.sun.org.apache.xerces.internal.impl.validation.ValidationManager;
import com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator;
+import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl;
import com.sun.org.apache.xerces.internal.util.AttributesProxy;
import com.sun.org.apache.xerces.internal.util.SAXLocatorWrapper;
import com.sun.org.apache.xerces.internal.util.SAXMessageFormatter;
@@ -669,7 +670,8 @@ final class ValidatorHandlerImpl extends ValidatorHandler implements
XMLReader reader = saxSource.getXMLReader();
if( reader==null ) {
// create one now
- SAXParserFactory spf = SAXParserFactory.newInstance();
+ SAXParserFactory spf = fComponentManager.getFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM) ?
+ SAXParserFactory.newInstance() : new SAXParserFactoryImpl();
spf.setNamespaceAware(true);
try {
reader = spf.newSAXParser().getXMLReader();
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHelper.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHelper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHelper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHelper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/WeakReferenceXMLSchema.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/WeakReferenceXMLSchema.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/WeakReferenceXMLSchema.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/WeakReferenceXMLSchema.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/WrappedSAXException.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/WrappedSAXException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/WrappedSAXException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/WrappedSAXException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchema.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchema.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchema.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchema.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java
similarity index 95%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java
index bffd8e8abf2..fece15d7697 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java
@@ -107,7 +107,20 @@ public final class XMLSchemaFactory extends SchemaFactory {
/** The container for the real grammar pool. */
private XMLGrammarPoolWrapper fXMLGrammarPoolWrapper;
+ /**
+ * Indicates whether implementation parts should use
+ * service loader (or similar).
+ * Note the default value (false) is the safe option..
+ */
+ private final boolean fUseServicesMechanism;
public XMLSchemaFactory() {
+ this(true);
+ }
+ public static XMLSchemaFactory newXMLSchemaFactoryNoServiceLoader() {
+ return new XMLSchemaFactory(false);
+ }
+ private XMLSchemaFactory(boolean useServicesMechanism) {
+ fUseServicesMechanism = useServicesMechanism;
fErrorHandlerWrapper = new ErrorHandlerWrapper(DraconianErrorHandler.getInstance());
fDOMEntityResolverWrapper = new DOMEntityResolverWrapper();
fXMLGrammarPoolWrapper = new XMLGrammarPoolWrapper();
@@ -338,6 +351,10 @@ public final class XMLSchemaFactory extends SchemaFactory {
fSecurityManager = value ? new SecurityManager() : null;
fXMLSchemaLoader.setProperty(SECURITY_MANAGER, fSecurityManager);
return;
+ } else if (name.equals(Constants.ORACLE_FEATURE_SERVICE_MECHANISM)) {
+ //in secure mode, let _useServicesMechanism be determined by the constructor
+ if (System.getSecurityManager() != null)
+ return;
}
try {
fXMLSchemaLoader.setFeature(name, value);
@@ -393,6 +410,7 @@ public final class XMLSchemaFactory extends SchemaFactory {
private void propagateFeatures(AbstractXMLSchema schema) {
schema.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, fSecurityManager != null);
+ schema.setFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM, fUseServicesMechanism);
String[] features = fXMLSchemaLoader.getRecognizedFeatures();
for (int i = 0; i < features.length; ++i) {
boolean state = fXMLSchemaLoader.getFeature(features[i]);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XSGrammarPoolContainer.java b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XSGrammarPoolContainer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XSGrammarPoolContainer.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/XSGrammarPoolContainer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/javax.xml.validation.SchemaFactory b/jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/javax.xml.validation.SchemaFactory
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/javax.xml.validation.SchemaFactory
rename to jaxp/src/com/sun/org/apache/xerces/internal/jaxp/validation/javax.xml.validation.SchemaFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/AbstractDOMParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractDOMParser.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/AbstractDOMParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractDOMParser.java
index b42556661ec..88ea9518646 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/AbstractDOMParser.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractDOMParser.java
@@ -56,6 +56,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
import com.sun.org.apache.xerces.internal.xs.AttributePSVI;
import com.sun.org.apache.xerces.internal.xs.ElementPSVI;
import com.sun.org.apache.xerces.internal.xs.XSTypeDefinition;
+import com.sun.org.apache.xerces.internal.utils.ObjectFactory;
import org.w3c.dom.Attr;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Comment;
@@ -314,7 +315,7 @@ public class AbstractDOMParser extends AbstractXMLDocumentParser {
} // (XMLParserConfiguration)
/**
- * This method retreives the name of current document class.
+ * This method retrieves the name of current document class.
*/
protected String getDocumentClassName () {
return fDocumentClassName;
@@ -345,8 +346,7 @@ public class AbstractDOMParser extends AbstractXMLDocumentParser {
!documentClassName.equals(PSVI_DOCUMENT_CLASS_NAME)) {
// verify that this class exists and is of the right type
try {
- Class _class = ObjectFactory.findProviderClass (documentClassName,
- ObjectFactory.findClassLoader (), true);
+ Class _class = ObjectFactory.findProviderClass (documentClassName, true);
//if (!_class.isAssignableFrom(Document.class)) {
if (!Document.class.isAssignableFrom (_class)) {
throw new IllegalArgumentException (
@@ -789,20 +789,16 @@ public class AbstractDOMParser extends AbstractXMLDocumentParser {
else {
// use specified document class
try {
- ClassLoader cl = ObjectFactory.findClassLoader();
- Class documentClass = ObjectFactory.findProviderClass (fDocumentClassName,
- cl, true);
+ Class documentClass = ObjectFactory.findProviderClass (fDocumentClassName, true);
fDocument = (Document)documentClass.newInstance ();
// if subclass of our own class that's cool too
Class defaultDocClass =
- ObjectFactory.findProviderClass (CORE_DOCUMENT_CLASS_NAME,
- cl, true);
+ ObjectFactory.findProviderClass (CORE_DOCUMENT_CLASS_NAME, true);
if (defaultDocClass.isAssignableFrom (documentClass)) {
fDocumentImpl = (CoreDocumentImpl)fDocument;
- Class psviDocClass = ObjectFactory.findProviderClass (PSVI_DOCUMENT_CLASS_NAME,
- cl, true);
+ Class psviDocClass = ObjectFactory.findProviderClass (PSVI_DOCUMENT_CLASS_NAME, true);
if (psviDocClass.isAssignableFrom (documentClass)) {
fStorePSVI = true;
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractSAXParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/AbstractXMLDocumentParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractXMLDocumentParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/AbstractXMLDocumentParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/AbstractXMLDocumentParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/BasicParserConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/BasicParserConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/BasicParserConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/BasicParserConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/CachingParserPool.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/CachingParserPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/CachingParserPool.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/CachingParserPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/DOMParser.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/DOMParser.java
index b259cfbb4bc..cfdab6b4024 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/DOMParser.java
@@ -135,10 +135,7 @@ public class DOMParser
* grammar pool.
*/
public DOMParser(SymbolTable symbolTable, XMLGrammarPool grammarPool) {
- super((XMLParserConfiguration)ObjectFactory.createObject(
- "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",
- "com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration"
- ));
+ super(new XIncludeAwareParserConfiguration());
// set properties
fConfiguration.addRecognizedProperties(RECOGNIZED_PROPERTIES);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParserImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/DOMParserImpl.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParserImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/DOMParserImpl.java
index df9c12a474f..614c826047e 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParserImpl.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/DOMParserImpl.java
@@ -55,6 +55,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLEntityResolver;
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
import com.sun.org.apache.xerces.internal.xni.parser.XMLParseException;
import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
+import com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.DOMError;
import org.w3c.dom.DOMErrorHandler;
@@ -165,11 +166,8 @@ extends AbstractDOMParser implements LSParser, DOMConfiguration {
/**
* Constructs a DOM Builder using the standard parser configuration.
*/
- public DOMParserImpl (String configuration, String schemaType) {
- this (
- (XMLParserConfiguration) ObjectFactory.createObject (
- "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",
- configuration));
+ public DOMParserImpl (XMLParserConfiguration config, String schemaType) {
+ this (config);
if (schemaType != null) {
if (schemaType.equals (Constants.NS_DTD)) {
//Schema validation is false by default and hence there is no
@@ -261,10 +259,7 @@ extends AbstractDOMParser implements LSParser, DOMConfiguration {
* Constructs a DOM Builder using the specified symbol table.
*/
public DOMParserImpl (SymbolTable symbolTable) {
- this (
- (XMLParserConfiguration) ObjectFactory.createObject (
- "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",
- "com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration"));
+ this (new XIncludeAwareParserConfiguration());
fConfiguration.setProperty (
Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY,
symbolTable);
@@ -276,10 +271,7 @@ extends AbstractDOMParser implements LSParser, DOMConfiguration {
* grammar pool.
*/
public DOMParserImpl (SymbolTable symbolTable, XMLGrammarPool grammarPool) {
- this (
- (XMLParserConfiguration) ObjectFactory.createObject (
- "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",
- "com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration"));
+ this (new XIncludeAwareParserConfiguration());
fConfiguration.setProperty (
Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY,
symbolTable);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/DTDParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/DTDParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/IntegratedParserConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/IntegratedParserConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/IntegratedParserConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/IntegratedParserConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/SAXParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/SAXParser.java
similarity index 92%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/SAXParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/SAXParser.java
index 3a5a5d0ca54..d134454e8cc 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/SAXParser.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/SAXParser.java
@@ -33,7 +33,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
* @author Arnaud Le Hors, IBM
* @author Andy Clark, IBM
*
- * @version $Id: SAXParser.java,v 1.5 2007/07/19 04:38:54 ofung Exp $
+ * @version $Id: SAXParser.java,v 1.7 2010-11-01 04:40:09 joehw Exp $
*/
public class SAXParser
extends AbstractSAXParser {
@@ -103,10 +103,7 @@ public class SAXParser
* grammar pool.
*/
public SAXParser(SymbolTable symbolTable, XMLGrammarPool grammarPool) {
- super((XMLParserConfiguration)ObjectFactory.createObject(
- "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",
- "com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration"
- ));
+ super(new XIncludeAwareParserConfiguration());
// set features
fConfiguration.addRecognizedFeatures(RECOGNIZED_FEATURES);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/SecurityConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/SecurityConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/SecurityConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/SecurityConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/StandardParserConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/StandardParserConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/StandardParserConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/StandardParserConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XIncludeAwareParserConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XIncludeAwareParserConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XIncludeAwareParserConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XIncludeAwareParserConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XIncludeParserConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XIncludeParserConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XIncludeParserConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XIncludeParserConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11Configurable.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11Configurable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11Configurable.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11Configurable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLDocumentParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLDocumentParser.java
similarity index 76%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLDocumentParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLDocumentParser.java
index 1b87b04bade..8a89e98f297 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLDocumentParser.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLDocumentParser.java
@@ -33,6 +33,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
* @author Arnaud Le Hors, IBM
* @author Andy Clark, IBM
*
+ * @version $Id: XMLDocumentParser.java,v 1.6 2010-11-01 04:40:10 joehw Exp $
*/
public class XMLDocumentParser
extends AbstractXMLDocumentParser {
@@ -46,10 +47,7 @@ public class XMLDocumentParser
* configuration.
*/
public XMLDocumentParser() {
- super((XMLParserConfiguration)ObjectFactory.createObject(
- "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",
- "com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration"
- ));
+ super(new XIncludeAwareParserConfiguration());
} // ()
/**
@@ -63,10 +61,7 @@ public class XMLDocumentParser
* Constructs a document parser using the specified symbol table.
*/
public XMLDocumentParser(SymbolTable symbolTable) {
- super((XMLParserConfiguration)ObjectFactory.createObject(
- "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",
- "com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration"
- ));
+ super(new XIncludeAwareParserConfiguration());
fConfiguration.setProperty(Constants.XERCES_PROPERTY_PREFIX+Constants.SYMBOL_TABLE_PROPERTY, symbolTable);
} // (SymbolTable)
@@ -76,10 +71,7 @@ public class XMLDocumentParser
*/
public XMLDocumentParser(SymbolTable symbolTable,
XMLGrammarPool grammarPool) {
- super((XMLParserConfiguration)ObjectFactory.createObject(
- "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",
- "com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration"
- ));
+ super(new XIncludeAwareParserConfiguration());
fConfiguration.setProperty(Constants.XERCES_PROPERTY_PREFIX+Constants.SYMBOL_TABLE_PROPERTY, symbolTable);
fConfiguration.setProperty(Constants.XERCES_PROPERTY_PREFIX+Constants.XMLGRAMMAR_POOL_PROPERTY, grammarPool);
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLGrammarCachingConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLGrammarCachingConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLGrammarCachingConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLGrammarCachingConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLGrammarParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLGrammarParser.java
similarity index 81%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLGrammarParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLGrammarParser.java
index 966df3c9a13..7d88781e679 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLGrammarParser.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLGrammarParser.java
@@ -23,9 +23,9 @@ package com.sun.org.apache.xerces.internal.parsers;
import com.sun.org.apache.xerces.internal.impl.Constants;
import com.sun.org.apache.xerces.internal.impl.dv.DTDDVFactory;
import com.sun.org.apache.xerces.internal.util.SymbolTable;
-import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
/**
+ * @version $Id: XMLGrammarParser.java,v 1.6 2010-11-01 04:40:10 joehw Exp $
*/
public abstract class XMLGrammarParser
extends XMLParser {
@@ -47,10 +47,7 @@ public abstract class XMLGrammarParser
* @param symbolTable
*/
protected XMLGrammarParser(SymbolTable symbolTable) {
- super((XMLParserConfiguration)ObjectFactory.createObject(
- "com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",
- "com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration"
- ));
+ super(new XIncludeAwareParserConfiguration());
fConfiguration.setProperty(Constants.XERCES_PROPERTY_PREFIX+Constants.SYMBOL_TABLE_PROPERTY, symbolTable);
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLGrammarPreparser.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLGrammarPreparser.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLGrammarPreparser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLGrammarPreparser.java
index e4a67cbd143..6690922da71 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLGrammarPreparser.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLGrammarPreparser.java
@@ -37,6 +37,7 @@ import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarPool;
import com.sun.org.apache.xerces.internal.xni.parser.XMLEntityResolver;
import com.sun.org.apache.xerces.internal.xni.parser.XMLErrorHandler;
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
+import com.sun.org.apache.xerces.internal.utils.ObjectFactory;
/**
* This class provides an easy way for a user to preparse grammars
@@ -48,7 +49,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
*
* @author Neil Graham, IBM
*
- * @version $Id: XMLGrammarPreparser.java,v 1.6 2010/07/23 02:09:28 joehw Exp $
+ * @version $Id: XMLGrammarPreparser.java,v 1.7 2010-11-01 04:40:10 joehw Exp $
*/
public class XMLGrammarPreparser {
@@ -155,8 +156,7 @@ public class XMLGrammarPreparser {
// got one; just instantiate it...
String loaderName = (String)KNOWN_LOADERS.get(grammarType);
try {
- ClassLoader cl = ObjectFactory.findClassLoader();
- XMLGrammarLoader gl = (XMLGrammarLoader)(ObjectFactory.newInstance(loaderName, cl, true));
+ XMLGrammarLoader gl = (XMLGrammarLoader)(ObjectFactory.newInstance(loaderName, true));
fLoaders.put(grammarType, gl);
} catch (Exception e) {
return false;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XMLParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XPointerParserConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/XPointerParserConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/XPointerParserConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/XPointerParserConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.DTDConfiguration b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.DTDConfiguration
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.DTDConfiguration
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.DTDConfiguration
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.XML11Configuration b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.XML11Configuration
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.XML11Configuration
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.XML11Configuration
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.XMLParserConfiguration b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.XMLParserConfiguration
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.XMLParserConfiguration
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/org.apache.xerces.xni.parser.XMLParserConfiguration
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/org.xml.sax.driver b/jaxp/src/com/sun/org/apache/xerces/internal/parsers/org.xml.sax.driver
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/org.xml.sax.driver
rename to jaxp/src/com/sun/org/apache/xerces/internal/parsers/org.xml.sax.driver
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/AttributesProxy.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/AttributesProxy.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/AttributesProxy.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/AttributesProxy.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/AugmentationsImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/AugmentationsImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/AugmentationsImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/AugmentationsImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DOMEntityResolverWrapper.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/DOMEntityResolverWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DOMEntityResolverWrapper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/DOMEntityResolverWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DOMErrorHandlerWrapper.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/DOMErrorHandlerWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DOMErrorHandlerWrapper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/DOMErrorHandlerWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DOMInputSource.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/DOMInputSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DOMInputSource.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/DOMInputSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DOMUtil.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/DOMUtil.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DOMUtil.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/DOMUtil.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DatatypeMessageFormatter.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/DatatypeMessageFormatter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DatatypeMessageFormatter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/DatatypeMessageFormatter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DefaultErrorHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/DefaultErrorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DefaultErrorHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/DefaultErrorHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DraconianErrorHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/DraconianErrorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/DraconianErrorHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/DraconianErrorHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/EncodingMap.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/EncodingMap.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/EncodingMap.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/EncodingMap.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/EntityResolver2Wrapper.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/EntityResolver2Wrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/EntityResolver2Wrapper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/EntityResolver2Wrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/EntityResolverWrapper.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/EntityResolverWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/EntityResolverWrapper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/EntityResolverWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/ErrorHandlerProxy.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/ErrorHandlerProxy.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/ErrorHandlerProxy.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/ErrorHandlerProxy.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/ErrorHandlerWrapper.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/ErrorHandlerWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/ErrorHandlerWrapper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/ErrorHandlerWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/FeatureState.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/FeatureState.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/FeatureState.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/FeatureState.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/HTTPInputSource.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/HTTPInputSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/HTTPInputSource.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/HTTPInputSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/IntStack.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/IntStack.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/IntStack.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/IntStack.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/JAXPNamespaceContextWrapper.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/JAXPNamespaceContextWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/JAXPNamespaceContextWrapper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/JAXPNamespaceContextWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/LocatorProxy.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/LocatorProxy.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/LocatorProxy.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/LocatorProxy.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/LocatorWrapper.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/LocatorWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/LocatorWrapper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/LocatorWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/MessageFormatter.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/MessageFormatter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/MessageFormatter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/MessageFormatter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/NamespaceContextWrapper.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/NamespaceContextWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/NamespaceContextWrapper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/NamespaceContextWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/NamespaceSupport.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/NamespaceSupport.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/NamespaceSupport.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/NamespaceSupport.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java
index 13e12309db5..a13d8154c96 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java
@@ -112,7 +112,16 @@ public class ParserConfigurationSettings
* to be recognized.
*/
public void addRecognizedFeatures(String[] featureIds) {
- fRecognizedFeatures.addAll(Arrays.asList(featureIds));
+
+ // add recognized features
+ int featureIdsCount = featureIds != null ? featureIds.length : 0;
+ for (int i = 0; i < featureIdsCount; i++) {
+ String featureId = featureIds[i];
+ if (!fRecognizedFeatures.contains(featureId)) {
+ fRecognizedFeatures.add(featureId);
+ }
+ }
+
} // addRecognizedFeatures(String[])
/**
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/PropertyState.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/PropertyState.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/PropertyState.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/PropertyState.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SAX2XNI.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/SAX2XNI.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SAX2XNI.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/SAX2XNI.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SAXInputSource.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/SAXInputSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SAXInputSource.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/SAXInputSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SAXLocatorWrapper.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/SAXLocatorWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SAXLocatorWrapper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/SAXLocatorWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SAXMessageFormatter.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/SAXMessageFormatter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SAXMessageFormatter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/SAXMessageFormatter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SecurityManager.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/SecurityManager.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SecurityManager.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/SecurityManager.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/ShadowedSymbolTable.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/ShadowedSymbolTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/ShadowedSymbolTable.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/ShadowedSymbolTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/StAXInputSource.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/StAXInputSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/StAXInputSource.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/StAXInputSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/StAXLocationWrapper.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/StAXLocationWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/StAXLocationWrapper.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/StAXLocationWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/Status.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/Status.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/Status.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/Status.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SymbolHash.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/SymbolHash.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SymbolHash.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/SymbolHash.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SymbolTable.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/SymbolTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SymbolTable.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/SymbolTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SynchronizedSymbolTable.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/SynchronizedSymbolTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/SynchronizedSymbolTable.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/SynchronizedSymbolTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/TeeXMLDocumentFilterImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/TeeXMLDocumentFilterImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/TeeXMLDocumentFilterImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/TeeXMLDocumentFilterImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/TypeInfoImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/TypeInfoImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/TypeInfoImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/TypeInfoImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/URI.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/URI.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/URI.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/URI.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XML11Char.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XML11Char.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XML11Char.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XML11Char.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLAttributesImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLAttributesImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLAttributesImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLAttributesImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLAttributesIteratorImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLAttributesIteratorImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLAttributesIteratorImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLAttributesIteratorImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLCatalogResolver.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLCatalogResolver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLCatalogResolver.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLCatalogResolver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLChar.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLChar.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLChar.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLChar.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLDocumentFilterImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLDocumentFilterImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLDocumentFilterImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLDocumentFilterImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLEntityDescriptionImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLEntityDescriptionImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLEntityDescriptionImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLEntityDescriptionImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLErrorCode.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLErrorCode.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLErrorCode.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLErrorCode.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLGrammarPoolImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLGrammarPoolImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLGrammarPoolImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLGrammarPoolImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLInputSourceAdaptor.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLInputSourceAdaptor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLInputSourceAdaptor.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLInputSourceAdaptor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLResourceIdentifierImpl.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLResourceIdentifierImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLResourceIdentifierImpl.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLResourceIdentifierImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLStringBuffer.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLStringBuffer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLStringBuffer.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLStringBuffer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLSymbols.java b/jaxp/src/com/sun/org/apache/xerces/internal/util/XMLSymbols.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/util/XMLSymbols.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/util/XMLSymbols.java
diff --git a/jaxp/src/com/sun/org/apache/xerces/internal/utils/ConfigurationError.java b/jaxp/src/com/sun/org/apache/xerces/internal/utils/ConfigurationError.java
new file mode 100644
index 00000000000..9cd86732f32
--- /dev/null
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/utils/ConfigurationError.java
@@ -0,0 +1,58 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.sun.org.apache.xerces.internal.utils;
+
+/**
+ * A configuration error. This was an internal class in ObjectFactory previously
+ */
+public final class ConfigurationError
+ extends Error {
+
+ //
+ // Data
+ //
+
+ /** Exception. */
+ private Exception exception;
+
+ //
+ // Constructors
+ //
+
+ /**
+ * Construct a new instance with the specified detail string and
+ * exception.
+ */
+ ConfigurationError(String msg, Exception x) {
+ super(msg);
+ this.exception = x;
+ } // (String,Exception)
+
+ //
+ // methods
+ //
+
+ /** Returns the exception associated to this error. */
+ public Exception getException() {
+ return exception;
+ } // getException():Exception
+
+} // class ConfigurationError
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/ObjectFactory.java b/jaxp/src/com/sun/org/apache/xerces/internal/utils/ObjectFactory.java
similarity index 64%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/ObjectFactory.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/utils/ObjectFactory.java
index b2cfbe906c6..afc0d45a5a1 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/ObjectFactory.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/utils/ObjectFactory.java
@@ -18,7 +18,7 @@
* limitations under the License.
*/
-package com.sun.org.apache.xerces.internal.parsers;
+package com.sun.org.apache.xerces.internal.utils;
import java.io.InputStream;
import java.io.IOException;
@@ -41,8 +41,9 @@ import java.io.InputStreamReader;
* when bundled as part of the JDK.
*
*
+ * @version $Id: ObjectFactory.java,v 1.6 2010/04/23 01:44:34 joehw Exp $
*/
-final class ObjectFactory {
+public final class ObjectFactory {
//
// Constants
@@ -52,7 +53,7 @@ final class ObjectFactory {
private static final String DEFAULT_PROPERTIES_FILENAME = "xerces.properties";
/** Set to true for debugging */
- private static final boolean DEBUG = false;
+ private static final boolean DEBUG = isDebugEnabled();
/**
* Default columns per line.
@@ -95,7 +96,7 @@ final class ObjectFactory {
*
* @exception ObjectFactory.ConfigurationError
*/
- static Object createObject(String factoryId, String fallbackClassName)
+ public static Object createObject(String factoryId, String fallbackClassName)
throws ConfigurationError {
return createObject(factoryId, null, fallbackClassName);
} // createObject(String,String):Object
@@ -122,20 +123,19 @@ final class ObjectFactory {
*
* @exception ObjectFactory.ConfigurationError
*/
- static Object createObject(String factoryId,
+ public static Object createObject(String factoryId,
String propertiesFilename,
String fallbackClassName)
throws ConfigurationError
{
if (DEBUG) debugPrintln("debug is on");
- SecuritySupport ss = SecuritySupport.getInstance();
ClassLoader cl = findClassLoader();
// Use the system property first
try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
+ String systemProp = SecuritySupport.getSystemProperty(factoryId);
+ if (systemProp != null && systemProp.length() > 0) {
if (DEBUG) debugPrintln("found system property, value=" + systemProp);
return newInstance(systemProp, cl, true);
}
@@ -147,118 +147,6 @@ final class ObjectFactory {
// always use fallback class to avoid the expense of constantly
// "stat"ing a non-existent "xerces.properties" and jar SPI entry
// see CR 6400863: Expensive creating of SAX parser in Mustang
- if (true) {
- if (fallbackClassName == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- if (DEBUG) debugPrintln("using fallback, value=" + fallbackClassName);
- return newInstance(fallbackClassName, cl, true);
- }
-
- // Try to read from propertiesFilename, or $java.home/lib/xerces.properties
- String factoryClassName = null;
- // no properties file name specified; use $JAVA_HOME/lib/xerces.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXercesProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXercesProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xerces.properties before (or it's outdeated)
- fXercesProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXercesProperties.load(fis);
- }
- } catch (Exception x) {
- fXercesProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXercesProperties != null) {
- factoryClassName = fXercesProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value=" + factoryClassName);
- return newInstance(factoryClassName, cl, true);
- }
-
- // Try Jar Service Provider Mechanism
- Object provider = findJarServiceProvider(factoryId);
- if (provider != null) {
- return provider;
- }
-
if (fallbackClassName == null) {
throw new ConfigurationError(
"Provider for " + factoryId + " cannot be found", null);
@@ -266,16 +154,28 @@ final class ObjectFactory {
if (DEBUG) debugPrintln("using fallback, value=" + fallbackClassName);
return newInstance(fallbackClassName, cl, true);
+
} // createObject(String,String,String):Object
//
// Private static methods
//
+ /** Returns true if debug has been enabled. */
+ private static boolean isDebugEnabled() {
+ try {
+ String val = SecuritySupport.getSystemProperty("xerces.debug");
+ // Allow simply setting the prop to turn on debug
+ return (val != null && (!"false".equals(val)));
+ }
+ catch (SecurityException se) {}
+ return false;
+ } // isDebugEnabled()
+
/** Prints a message to standard error if debugging is enabled. */
private static void debugPrintln(String msg) {
if (DEBUG) {
- System.err.println("JAXP: " + msg);
+ System.err.println("XERCES: " + msg);
}
} // debugPrintln(String)
@@ -283,15 +183,17 @@ final class ObjectFactory {
* Figure out which ClassLoader to use. For JDK 1.2 and later use
* the context ClassLoader.
*/
- static ClassLoader findClassLoader()
+ public static ClassLoader findClassLoader()
throws ConfigurationError
{
- SecuritySupport ss = SecuritySupport.getInstance();
-
+ if (System.getSecurityManager()!=null) {
+ //this will ensure bootclassloader is used
+ return null;
+ }
// Figure out which ClassLoader to use for loading the provider
// class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
+ ClassLoader context = SecuritySupport.getContextClassLoader();
+ ClassLoader system = SecuritySupport.getSystemClassLoader();
ClassLoader chain = system;
while (true) {
@@ -316,7 +218,7 @@ final class ObjectFactory {
if (chain == null) {
break;
}
- chain = ss.getParentClassLoader(chain);
+ chain = SecuritySupport.getParentClassLoader(chain);
}
// Assert: Current ClassLoader not in chain of
@@ -331,7 +233,7 @@ final class ObjectFactory {
// Check for any extension ClassLoaders in chain up to
// boot ClassLoader
- chain = ss.getParentClassLoader(chain);
+ chain = SecuritySupport.getParentClassLoader(chain);
};
// Assert: Context ClassLoader not in chain of
@@ -339,10 +241,25 @@ final class ObjectFactory {
return context;
} // findClassLoader():ClassLoader
+ /**
+ * Create an instance of a class using the same classloader for the ObjectFactory by default
+ * or bootclassloader when Security Manager is in place
+ */
+ public static Object newInstance(String className, boolean doFallback)
+ throws ConfigurationError
+ {
+ if (System.getSecurityManager()!=null) {
+ return newInstance(className, null, doFallback);
+ } else {
+ return newInstance(className,
+ findClassLoader (), doFallback);
+ }
+ }
+
/**
* Create an instance of a class using the specified ClassLoader
*/
- static Object newInstance(String className, ClassLoader cl,
+ public static Object newInstance(String className, ClassLoader cl,
boolean doFallback)
throws ConfigurationError
{
@@ -363,10 +280,24 @@ final class ObjectFactory {
}
}
+ /**
+ * Find a Class using the same classloader for the ObjectFactory by default
+ * or bootclassloader when Security Manager is in place
+ */
+ public static Class findProviderClass(String className, boolean doFallback)
+ throws ClassNotFoundException, ConfigurationError
+ {
+ if (System.getSecurityManager()!=null) {
+ return Class.forName(className);
+ } else {
+ return findProviderClass (className,
+ findClassLoader (), doFallback);
+ }
+ }
/**
* Find a Class using the specified ClassLoader
*/
- static Class findProviderClass(String className, ClassLoader cl,
+ public static Class findProviderClass(String className, ClassLoader cl,
boolean doFallback)
throws ClassNotFoundException, ConfigurationError
{
@@ -381,15 +312,7 @@ final class ObjectFactory {
}
Class providerClass;
if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
+ //use the bootstrap ClassLoader.
providerClass = Class.forName(className);
} else {
try {
@@ -423,21 +346,20 @@ final class ObjectFactory {
private static Object findJarServiceProvider(String factoryId)
throws ConfigurationError
{
- SecuritySupport ss = SecuritySupport.getInstance();
String serviceId = "META-INF/services/" + factoryId;
InputStream is = null;
// First try the Context ClassLoader
ClassLoader cl = findClassLoader();
- is = ss.getResourceAsStream(cl, serviceId);
+ is = SecuritySupport.getResourceAsStream(cl, serviceId);
// If no provider found then try the current ClassLoader
if (is == null) {
ClassLoader current = ObjectFactory.class.getClassLoader();
if (cl != current) {
cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
+ is = SecuritySupport.getResourceAsStream(cl, serviceId);
}
}
@@ -506,48 +428,4 @@ final class ObjectFactory {
return null;
}
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static final class ConfigurationError
- extends Error {
-
- /** Serialization version. */
- static final long serialVersionUID = -7285495612271660427L;
-
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/SecuritySupport.java b/jaxp/src/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java
similarity index 77%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/SecuritySupport.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java
index 4b1507bb8f8..42ca503a8cb 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/SecuritySupport.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java
@@ -18,7 +18,7 @@
* limitations under the License.
*/
-package com.sun.org.apache.xerces.internal.dom;
+package com.sun.org.apache.xerces.internal.utils;
import java.io.File;
import java.io.FileInputStream;
@@ -36,18 +36,18 @@ import java.security.PrivilegedExceptionAction;
*
* @xerces.internal
*/
-final class SecuritySupport {
+public final class SecuritySupport {
private static final SecuritySupport securitySupport = new SecuritySupport();
/**
* Return an instance of this class.
*/
- static SecuritySupport getInstance() {
+ public static SecuritySupport getInstance() {
return securitySupport;
}
- ClassLoader getContextClassLoader() {
+ static ClassLoader getContextClassLoader() {
return (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
@@ -60,7 +60,7 @@ final class SecuritySupport {
});
}
- ClassLoader getSystemClassLoader() {
+ static ClassLoader getSystemClassLoader() {
return (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
@@ -73,7 +73,7 @@ final class SecuritySupport {
});
}
- ClassLoader getParentClassLoader(final ClassLoader cl) {
+ static ClassLoader getParentClassLoader(final ClassLoader cl) {
return (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
@@ -89,7 +89,7 @@ final class SecuritySupport {
});
}
- String getSystemProperty(final String propName) {
+ public static String getSystemProperty(final String propName) {
return (String)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
@@ -98,7 +98,7 @@ final class SecuritySupport {
});
}
- FileInputStream getFileInputStream(final File file)
+ static FileInputStream getFileInputStream(final File file)
throws FileNotFoundException
{
try {
@@ -112,8 +112,19 @@ final class SecuritySupport {
throw (FileNotFoundException)e.getException();
}
}
+ /**
+ * Return resource using the same classloader for the ObjectFactory by default
+ * or bootclassloader when Security Manager is in place
+ */
+ public static InputStream getResourceAsStream(final String name) {
+ if (System.getSecurityManager()!=null) {
+ return getResourceAsStream(null, name);
+ } else {
+ return getResourceAsStream(ObjectFactory.findClassLoader(), name);
+ }
+ }
- InputStream getResourceAsStream(final ClassLoader cl,
+ public static InputStream getResourceAsStream(final ClassLoader cl,
final String name)
{
return (InputStream)
@@ -121,7 +132,7 @@ final class SecuritySupport {
public Object run() {
InputStream ris;
if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
+ ris = Object.class.getResourceAsStream("/"+name);
} else {
ris = cl.getResourceAsStream(name);
}
@@ -130,16 +141,16 @@ final class SecuritySupport {
});
}
- boolean getFileExists(final File f) {
+ static boolean getFileExists(final File f) {
return ((Boolean)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
- return new Boolean(f.exists());
+ return f.exists() ? Boolean.TRUE : Boolean.FALSE;
}
})).booleanValue();
}
- long getLastModified(final File f) {
+ static long getLastModified(final File f) {
return ((Long)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/MultipleScopeNamespaceSupport.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/MultipleScopeNamespaceSupport.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/MultipleScopeNamespaceSupport.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/MultipleScopeNamespaceSupport.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/ObjectFactory.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/ObjectFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/ObjectFactory.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/ObjectFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/SecuritySupport.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/SecuritySupport.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/SecuritySupport.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/SecuritySupport.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XInclude11TextReader.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XInclude11TextReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XInclude11TextReader.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XInclude11TextReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java
index 08c0f4d073e..347ae24e446 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java
+++ b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeHandler.java
@@ -66,6 +66,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
import com.sun.org.apache.xerces.internal.xpointer.XPointerHandler;
import com.sun.org.apache.xerces.internal.xpointer.XPointerProcessor;
+import com.sun.org.apache.xerces.internal.utils.ObjectFactory;
/**
*
@@ -111,6 +112,7 @@ import com.sun.org.apache.xerces.internal.xpointer.XPointerProcessor;
* @author Peter McCracken, IBM
* @author Michael Glavassevich, IBM
*
+ * @version $Id: XIncludeHandler.java,v 1.7 2010-11-01 04:40:18 joehw Exp $
*
* @see XIncludeNamespaceSupport
*/
@@ -943,7 +945,8 @@ public class XIncludeHandler
setState(STATE_IGNORE);
}
else {
- reportFatalError("NoFallback");
+ reportFatalError("NoFallback",
+ new Object[] { attributes.getValue(null, "href") });
}
}
else if (isFallbackElement(element)) {
@@ -1001,7 +1004,8 @@ public class XIncludeHandler
// we check to see if the children of this include element contained a fallback
if (getState() == STATE_EXPECT_FALLBACK
&& !getSawFallback(fDepth + 1)) {
- reportFatalError("NoFallback");
+ reportFatalError("NoFallback",
+ new Object[] { "unknown" });
}
}
if (isFallbackElement(element)) {
@@ -1567,7 +1571,6 @@ public class XIncludeHandler
fChildConfig =
(XMLParserConfiguration)ObjectFactory.newInstance(
parserName,
- ObjectFactory.findClassLoader(),
true);
// use the same symbol table, error reporter, entity resolver, security manager and buffer size.
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeMessageFormatter.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeMessageFormatter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeMessageFormatter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeMessageFormatter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeNamespaceSupport.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeNamespaceSupport.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeNamespaceSupport.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeNamespaceSupport.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeTextReader.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeTextReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeTextReader.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XIncludeTextReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XPointerElementHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XPointerElementHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XPointerElementHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XPointerElementHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XPointerFramework.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XPointerFramework.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XPointerFramework.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XPointerFramework.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XPointerSchema.java b/jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XPointerSchema.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xinclude/XPointerSchema.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xinclude/XPointerSchema.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/Augmentations.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/Augmentations.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/Augmentations.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/Augmentations.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/NamespaceContext.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/NamespaceContext.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/NamespaceContext.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/NamespaceContext.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/QName.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/QName.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/QName.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/QName.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLAttributes.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLAttributes.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLAttributes.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLAttributes.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLDTDContentModelHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLDTDContentModelHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLDTDContentModelHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLDTDContentModelHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLDTDHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLDTDHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLDTDHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLDTDHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLDocumentFragmentHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLDocumentFragmentHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLDocumentFragmentHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLDocumentFragmentHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLDocumentHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLDocumentHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLDocumentHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLDocumentHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLLocator.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLLocator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLLocator.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLLocator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLResourceIdentifier.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLResourceIdentifier.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLResourceIdentifier.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLResourceIdentifier.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLString.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLString.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XMLString.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/XMLString.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XNIException.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/XNIException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/XNIException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/XNIException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/Grammar.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/Grammar.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/Grammar.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/Grammar.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XMLDTDDescription.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XMLDTDDescription.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XMLDTDDescription.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XMLDTDDescription.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarDescription.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarDescription.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarDescription.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarDescription.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarLoader.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarLoader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarLoader.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarLoader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarPool.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarPool.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XMLGrammarPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XMLSchemaDescription.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XMLSchemaDescription.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XMLSchemaDescription.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XMLSchemaDescription.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XSGrammar.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XSGrammar.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/grammars/XSGrammar.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/grammars/XSGrammar.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLComponent.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLComponent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLComponent.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLComponent.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLComponentManager.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLComponentManager.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLComponentManager.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLComponentManager.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLConfigurationException.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLConfigurationException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLConfigurationException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLConfigurationException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelFilter.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelFilter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelSource.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelSource.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDContentModelSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDFilter.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDFilter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDScanner.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDScanner.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDScanner.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDScanner.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDSource.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDSource.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDTDSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentFilter.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentFilter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentScanner.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentScanner.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentScanner.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentScanner.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentSource.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentSource.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLDocumentSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLEntityResolver.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLEntityResolver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLEntityResolver.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLEntityResolver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLErrorHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLErrorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLErrorHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLErrorHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLParseException.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLParseException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLParseException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLParseException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLParserConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLParserConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLParserConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLParserConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLPullParserConfiguration.java b/jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLPullParserConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLPullParserConfiguration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xni/parser/XMLPullParserConfiguration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/ElementSchemePointer.java b/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/ElementSchemePointer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/ElementSchemePointer.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xpointer/ElementSchemePointer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/ShortHandPointer.java b/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/ShortHandPointer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/ShortHandPointer.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xpointer/ShortHandPointer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/XPointerErrorHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerErrorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/XPointerErrorHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerErrorHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/XPointerHandler.java b/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/XPointerHandler.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/XPointerMessageFormatter.java b/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerMessageFormatter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/XPointerMessageFormatter.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerMessageFormatter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/XPointerPart.java b/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerPart.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/XPointerPart.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerPart.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/XPointerProcessor.java b/jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerProcessor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xpointer/XPointerProcessor.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xpointer/XPointerProcessor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/AttributePSVI.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/AttributePSVI.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/AttributePSVI.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/AttributePSVI.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/ElementPSVI.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/ElementPSVI.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/ElementPSVI.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/ElementPSVI.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/ItemPSVI.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/ItemPSVI.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/ItemPSVI.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/ItemPSVI.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/LSInputList.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/LSInputList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/LSInputList.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/LSInputList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/PSVIProvider.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/PSVIProvider.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/PSVIProvider.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/PSVIProvider.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/ShortList.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/ShortList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/ShortList.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/ShortList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/StringList.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/StringList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/StringList.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/StringList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSAnnotation.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSAnnotation.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSAnnotation.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSAnnotation.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSAttributeDeclaration.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSAttributeDeclaration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSAttributeDeclaration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSAttributeDeclaration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSAttributeGroupDefinition.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSAttributeGroupDefinition.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSAttributeGroupDefinition.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSAttributeGroupDefinition.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSAttributeUse.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSAttributeUse.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSAttributeUse.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSAttributeUse.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSComplexTypeDefinition.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSComplexTypeDefinition.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSComplexTypeDefinition.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSComplexTypeDefinition.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSConstants.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSConstants.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSConstants.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSConstants.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSElementDeclaration.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSElementDeclaration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSElementDeclaration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSElementDeclaration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSException.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSException.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSFacet.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSFacet.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSFacet.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSFacet.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSIDCDefinition.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSIDCDefinition.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSIDCDefinition.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSIDCDefinition.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSImplementation.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSImplementation.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSImplementation.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSImplementation.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSLoader.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSLoader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSLoader.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSLoader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSModel.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSModel.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSModel.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSModel.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSModelGroup.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSModelGroup.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSModelGroup.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSModelGroup.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSModelGroupDefinition.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSModelGroupDefinition.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSModelGroupDefinition.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSModelGroupDefinition.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSMultiValueFacet.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSMultiValueFacet.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSMultiValueFacet.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSMultiValueFacet.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSNamedMap.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSNamedMap.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSNamedMap.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSNamedMap.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSNamespaceItem.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSNamespaceItem.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSNamespaceItem.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSNamespaceItem.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSNamespaceItemList.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSNamespaceItemList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSNamespaceItemList.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSNamespaceItemList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSNotationDeclaration.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSNotationDeclaration.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSNotationDeclaration.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSNotationDeclaration.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSObject.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSObject.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSObject.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSObject.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSObjectList.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSObjectList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSObjectList.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSObjectList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSParticle.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSParticle.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSParticle.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSParticle.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSSimpleTypeDefinition.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSSimpleTypeDefinition.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSSimpleTypeDefinition.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSSimpleTypeDefinition.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSTerm.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSTerm.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSTerm.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSTerm.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSTypeDefinition.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSTypeDefinition.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSTypeDefinition.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSTypeDefinition.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSWildcard.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/XSWildcard.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/XSWildcard.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/XSWildcard.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/ByteList.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/ByteList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/ByteList.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/ByteList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/ObjectList.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/ObjectList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/ObjectList.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/ObjectList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/XSDateTime.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/XSDateTime.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/XSDateTime.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/XSDateTime.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/XSDecimal.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/XSDecimal.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/XSDecimal.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/XSDecimal.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/XSDouble.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/XSDouble.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/XSDouble.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/XSDouble.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/XSFloat.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/XSFloat.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/XSFloat.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/XSFloat.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/XSQName.java b/jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/XSQName.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/XSQName.java
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/XSQName.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/package.html b/jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xerces/internal/xs/datatypes/package.html
rename to jaxp/src/com/sun/org/apache/xerces/internal/xs/datatypes/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/Axis.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/Axis.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/Axis.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/Axis.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTM.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTM.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/DTM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMAxisIterator.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMAxisIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMAxisIterator.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMAxisIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMAxisTraverser.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMAxisTraverser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMAxisTraverser.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMAxisTraverser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMConfigurationException.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMConfigurationException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMConfigurationException.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMConfigurationException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMDOMException.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMDOMException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMDOMException.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMDOMException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMException.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMException.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMFilter.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMFilter.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMIterator.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMIterator.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMManager.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMManager.java
similarity index 88%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMManager.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMManager.java
index 84908f5eaaa..0c5c0866dcb 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMManager.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMManager.java
@@ -26,6 +26,7 @@ import com.sun.org.apache.xml.internal.res.XMLErrorResources;
import com.sun.org.apache.xml.internal.res.XMLMessages;
import com.sun.org.apache.xml.internal.utils.PrefixResolver;
import com.sun.org.apache.xml.internal.utils.XMLStringFactory;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
/**
* A DTMManager instance can be used to create DTM and
@@ -64,6 +65,7 @@ public abstract class DTMManager
*/
protected XMLStringFactory m_xsf = null;
+ private boolean _useServicesMechanism;
/**
* Default constructor is protected on purpose.
*/
@@ -132,14 +134,24 @@ public abstract class DTMManager
*/
public static DTMManager newInstance(XMLStringFactory xsf)
throws DTMConfigurationException
+ {
+ return newInstance(xsf, true);
+ }
+
+ public static DTMManager newInstance(XMLStringFactory xsf, boolean useServicesMechanism)
+ throws DTMConfigurationException
{
DTMManager factoryImpl = null;
try
{
- factoryImpl = (DTMManager) ObjectFactory
- .createObject(defaultPropName, defaultClassName);
+ if (useServicesMechanism) {
+ factoryImpl = (DTMManager) ObjectFactory
+ .createObject(defaultPropName, defaultClassName);
+ } else {
+ factoryImpl = new com.sun.org.apache.xml.internal.dtm.ref.DTMManagerDefault();
+ }
}
- catch (ObjectFactory.ConfigurationError e)
+ catch (ConfigurationError e)
{
throw new DTMConfigurationException(XMLMessages.createXMLMessage(
XMLErrorResources.ER_NO_DEFAULT_IMPL, null), e.getException());
@@ -346,6 +358,19 @@ public abstract class DTMManager
m_source_location = sourceLocation;
}
+ /**
+ * Return the state of the services mechanism feature.
+ */
+ public boolean useServicesMechnism() {
+ return _useServicesMechanism;
+ }
+
+ /**
+ * Set the state of the services mechanism feature.
+ */
+ public void setServicesMechnism(boolean flag) {
+ _useServicesMechanism = flag;
+ }
// -------------------- private methods --------------------
@@ -429,4 +454,46 @@ public abstract class DTMManager
return IDENT_NODE_DEFAULT;
}
+ //
+ // Classes
+ //
+
+ /**
+ * A configuration error.
+ * Originally in ObjectFactory. This is the only portion used in this package
+ */
+ static class ConfigurationError
+ extends Error {
+ static final long serialVersionUID = 5122054096615067992L;
+ //
+ // Data
+ //
+
+ /** Exception. */
+ private Exception exception;
+
+ //
+ // Constructors
+ //
+
+ /**
+ * Construct a new instance with the specified detail string and
+ * exception.
+ */
+ ConfigurationError(String msg, Exception x) {
+ super(msg);
+ this.exception = x;
+ } // (String,Exception)
+
+ //
+ // Public methods
+ //
+
+ /** Returns the exception associated to this error. */
+ Exception getException() {
+ return exception;
+ } // getException():Exception
+
+ } // class ConfigurationError
+
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMWSFilter.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMWSFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/DTMWSFilter.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/DTMWSFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/ChunkedIntArray.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/ChunkedIntArray.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/ChunkedIntArray.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/ChunkedIntArray.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/CoroutineManager.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/CoroutineManager.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/CoroutineManager.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/CoroutineManager.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/CoroutineParser.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/CoroutineParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/CoroutineParser.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/CoroutineParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/CustomStringPool.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/CustomStringPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/CustomStringPool.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/CustomStringPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIteratorBase.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIteratorBase.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIteratorBase.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIteratorBase.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMChildIterNodeList.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMChildIterNodeList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMChildIterNodeList.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMChildIterNodeList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBase.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBase.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBase.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBase.java
index 82b9c263756..58fae690c92 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBase.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBase.java
@@ -844,12 +844,10 @@ public abstract class DTMDefaultBase implements DTM
break;
}
- StringBuffer sb=new StringBuffer();
- sb.append("["+nodeHandle+": "+typestring+
- "(0x"+Integer.toHexString(getExpandedTypeID(nodeHandle))+") "+
- getNodeNameX(nodeHandle)+" {"+getNamespaceURI(nodeHandle)+"}"+
- "=\""+ getNodeValue(nodeHandle)+"\"]");
- return sb.toString();
+ return "[" + nodeHandle + ": " + typestring +
+ "(0x" + Integer.toHexString(getExpandedTypeID(nodeHandle)) + ") " +
+ getNodeNameX(nodeHandle) + " {" + getNamespaceURI(nodeHandle) + "}" +
+ "=\"" + getNodeValue(nodeHandle) + "\"]";
}
// ========= DTM Implementation Control Functions. ==============
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseIterators.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMDefaultBaseTraversers.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDocumentImpl.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMDocumentImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMDocumentImpl.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMDocumentImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java
index e83cd9452cb..9f93f802ae5 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java
@@ -22,6 +22,7 @@
*/
package com.sun.org.apache.xml.internal.dtm.ref;
+import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Source;
@@ -606,7 +607,7 @@ public class DTMManagerDefault extends DTMManager
// If user did not supply a reader, ask for one from the reader manager
if (null == reader) {
if (m_readerManager == null) {
- m_readerManager = XMLReaderManager.getInstance();
+ m_readerManager = XMLReaderManager.getInstance(super.useServicesMechnism());
}
reader = m_readerManager.getXMLReader();
@@ -765,8 +766,7 @@ public class DTMManagerDefault extends DTMManager
try
{
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-
+ DocumentBuilderFactory dbf = FactoryImpl.getDOMFactory(super.useServicesMechnism());
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMNamedNodeMap.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMNamedNodeMap.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMNamedNodeMap.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMNamedNodeMap.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeIterator.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeIterator.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeList.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeList.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeListBase.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeListBase.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeListBase.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeListBase.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeProxy.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeProxy.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeProxy.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMNodeProxy.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMSafeStringPool.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMSafeStringPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMSafeStringPool.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMSafeStringPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMStringPool.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMStringPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMStringPool.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMStringPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMTreeWalker.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMTreeWalker.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMTreeWalker.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/DTMTreeWalker.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/EmptyIterator.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/EmptyIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/EmptyIterator.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/EmptyIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/ExpandedNameTable.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/ExpandedNameTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/ExpandedNameTable.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/ExpandedNameTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/ExtendedType.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/ExtendedType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/ExtendedType.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/ExtendedType.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Filter.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Filter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Filter.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Filter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java
index ac5eba3313d..29881ebabcc 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java
@@ -30,6 +30,7 @@ import java.lang.reflect.Method;
import com.sun.org.apache.xerces.internal.parsers.SAXParser;
import com.sun.org.apache.xml.internal.res.XMLErrorResources;
import com.sun.org.apache.xml.internal.res.XMLMessages;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@@ -101,7 +102,7 @@ public class IncrementalSAXSource_Xerces
// If we can't get the magic constructor, no need to look further.
Class xniConfigClass=ObjectFactory.findProviderClass(
"com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration",
- ObjectFactory.findClassLoader(), true);
+ true);
Class[] args1={xniConfigClass};
Constructor ctor=SAXParser.class.getConstructor(args1);
@@ -110,7 +111,7 @@ public class IncrementalSAXSource_Xerces
// we're going to want to use.
Class xniStdConfigClass=ObjectFactory.findProviderClass(
"com.sun.org.apache.xerces.internal.parsers.StandardParserConfiguration",
- ObjectFactory.findClassLoader(), true);
+ true);
fPullParserConfig=xniStdConfigClass.newInstance();
Object[] args2={fPullParserConfig};
fIncrementalParser = (SAXParser)ctor.newInstance(args2);
@@ -120,7 +121,7 @@ public class IncrementalSAXSource_Xerces
// API changes again.
Class fXniInputSourceClass=ObjectFactory.findProviderClass(
"com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource",
- ObjectFactory.findClassLoader(), true);
+ true);
Class[] args3={fXniInputSourceClass};
fConfigSetInput=xniStdConfigClass.getMethod("setInputSource",args3);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/NodeLocator.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/NodeLocator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/NodeLocator.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/NodeLocator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTM.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTM.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTM.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTM.java
index cee8474d89f..0e871e071e4 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTM.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTM.java
@@ -1725,7 +1725,7 @@ public class DOM2DTM extends DTMDefaultBaseIterators
try
{
Node node = getNode(nodeHandle);
- treeWalker.traverse(node);
+ treeWalker.traverseFragment(node);
}
finally
{
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2DTM2.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2RTFDTM.java b/jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2RTFDTM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2RTFDTM.java
rename to jaxp/src/com/sun/org/apache/xml/internal/dtm/ref/sax2dtm/SAX2RTFDTM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_ca.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ca.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_ca.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ca.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_cs.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_cs.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_cs.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_cs.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_de.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_de.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_de.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_de.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_en.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_en.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_en.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_en.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_es.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_es.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_es.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_es.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_fr.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_fr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_fr.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_fr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_it.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_it.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_it.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_it.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_ja.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ja.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_ja.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ja.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_ko.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ko.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_ko.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ko.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_pt_BR.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_pt_BR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_pt_BR.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_pt_BR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_sk.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_sk.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_sk.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_sk.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_sv.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_sv.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_sv.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_sv.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_tr.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_tr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_tr.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_tr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_CN.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_CN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_CN.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_CN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_HK.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_HK.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_HK.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_HK.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_TW.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_TW.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_TW.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_TW.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLMessages.java b/jaxp/src/com/sun/org/apache/xml/internal/res/XMLMessages.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/res/XMLMessages.java
rename to jaxp/src/com/sun/org/apache/xml/internal/res/XMLMessages.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/Catalog.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/Catalog.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/Catalog.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/Catalog.java
index c7ddc1f9e09..24a14b21f1d 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/Catalog.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/resolver/Catalog.java
@@ -23,6 +23,7 @@
package com.sun.org.apache.xml.internal.resolver;
+import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.InputStream;
@@ -399,7 +400,8 @@ public class Catalog {
* Setup readers.
*/
public void setupReaders() {
- SAXParserFactory spf = SAXParserFactory.newInstance();
+ SAXParserFactory spf = catalogManager.useServicesMechanism() ?
+ SAXParserFactory.newInstance() : new SAXParserFactoryImpl();
spf.setNamespaceAware(true);
spf.setValidating(false);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/CatalogEntry.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/CatalogEntry.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/CatalogEntry.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/CatalogEntry.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/CatalogException.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/CatalogException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/CatalogException.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/CatalogException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/CatalogManager.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/CatalogManager.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java
index 0b5a0f8d90b..166c0331a45 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/CatalogManager.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java
@@ -122,6 +122,7 @@ import com.sun.org.apache.xml.internal.resolver.Catalog;
* @author Norman Walsh
* Norman.Walsh@Sun.COM
*
+ * @version 1.0
*/
public class CatalogManager {
@@ -197,6 +198,12 @@ public class CatalogManager {
/** Current catalog class name. */
private String catalogClassName = null;
+ /**
+ * Indicates whether implementation parts should use
+ * service loader (or similar).
+ * Note the default value (false) is the safe option..
+ */
+ private boolean useServicesMechanism;
/** The manager's debug object. Used for printing debugging messages.
*
@@ -207,26 +214,26 @@ public class CatalogManager {
/** Constructor. */
public CatalogManager() {
- debug = new Debug();
- // Note that we don't setDebug() here; we do that lazily. Either the
- // user will set it explicitly, or we'll do it automagically if they
- // read from the propertyFile for some other reason. That way, there's
- // no attempt to read from the file before the caller has had a chance
- // to avoid it.
+ init();
}
/** Constructor that specifies an explicit property file. */
public CatalogManager(String propertyFile) {
this.propertyFile = propertyFile;
+ init();
+ }
+ private void init() {
debug = new Debug();
// Note that we don't setDebug() here; we do that lazily. Either the
// user will set it explicitly, or we'll do it automagically if they
// read from the propertyFile for some other reason. That way, there's
// no attempt to read from the file before the caller has had a chance
// to avoid it.
+ if (System.getSecurityManager() == null) {
+ useServicesMechanism = true;
+ }
}
-
/** Set the bootstrap resolver.*/
public void setBootstrapResolver(BootstrapResolver resolver) {
bResolver = resolver;
@@ -773,6 +780,9 @@ public class CatalogManager {
return oasisXMLCatalogPI.booleanValue();
}
+ public boolean useServicesMechanism() {
+ return useServicesMechanism;
+ }
/**
* Set the XML Catalog PI setting
*/
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/Resolver.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/Resolver.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/Resolver.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/Resolver.java
index aff09a6b08b..35a852fbf60 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/Resolver.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/resolver/Resolver.java
@@ -31,10 +31,11 @@ import java.util.Vector;
import java.net.URL;
import java.net.URLConnection;
import java.net.MalformedURLException;
+import javax.xml.parsers.SAXParserFactory;
+import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl;
import com.sun.org.apache.xml.internal.resolver.readers.SAXCatalogReader;
import com.sun.org.apache.xml.internal.resolver.readers.OASISXMLCatalogReader;
import com.sun.org.apache.xml.internal.resolver.readers.TR9401CatalogReader;
-import javax.xml.parsers.SAXParserFactory;
/**
* An extension to OASIS Open Catalog files, this class supports
@@ -45,6 +46,7 @@ import javax.xml.parsers.SAXParserFactory;
* @author Norman Walsh
* Norman.Walsh@Sun.COM
*
+ * @version 1.0
*/
public class Resolver extends Catalog {
/**
@@ -84,7 +86,8 @@ public class Resolver extends Catalog {
* Setup readers.
*/
public void setupReaders() {
- SAXParserFactory spf = SAXParserFactory.newInstance();
+ SAXParserFactory spf = catalogManager.useServicesMechanism() ?
+ SAXParserFactory.newInstance() : new SAXParserFactoryImpl();
spf.setNamespaceAware(true);
spf.setValidating(false);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/BootstrapResolver.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/helpers/BootstrapResolver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/BootstrapResolver.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/helpers/BootstrapResolver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/Debug.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/helpers/Debug.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/Debug.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/helpers/Debug.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/FileURL.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/helpers/FileURL.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/FileURL.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/helpers/FileURL.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/Namespaces.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/helpers/Namespaces.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/Namespaces.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/helpers/Namespaces.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/PublicId.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/helpers/PublicId.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/helpers/PublicId.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/helpers/PublicId.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/CatalogReader.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/CatalogReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/CatalogReader.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/CatalogReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogParser.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogParser.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogReader.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogReader.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/DOMCatalogReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/ExtendedXMLCatalogReader.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/ExtendedXMLCatalogReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/ExtendedXMLCatalogReader.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/ExtendedXMLCatalogReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/OASISXMLCatalogReader.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/OASISXMLCatalogReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/OASISXMLCatalogReader.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/OASISXMLCatalogReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogParser.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogParser.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXParserHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/SAXParserHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXParserHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/SAXParserHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/TR9401CatalogReader.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/TR9401CatalogReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/TR9401CatalogReader.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/TR9401CatalogReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/TextCatalogReader.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/TextCatalogReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/TextCatalogReader.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/TextCatalogReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/XCatalogReader.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/XCatalogReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/readers/XCatalogReader.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/readers/XCatalogReader.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.java
index 778e5a2a276..25951aa490b 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.java
@@ -23,6 +23,7 @@
package com.sun.org.apache.xml.internal.resolver.tools;
+import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
@@ -61,6 +62,7 @@ import com.sun.org.apache.xml.internal.resolver.helpers.FileURL;
* @author Norman Walsh
* Norman.Walsh@Sun.COM
*
+ * @version 1.0
*/
public class CatalogResolver implements EntityResolver, URIResolver {
/** Make the parser Namespace aware? */
@@ -302,7 +304,8 @@ public class CatalogResolver implements EntityResolver, URIResolver {
private void setEntityResolver(SAXSource source) throws TransformerException {
XMLReader reader = source.getXMLReader();
if (reader == null) {
- SAXParserFactory spFactory = SAXParserFactory.newInstance();
+ SAXParserFactory spFactory = catalogManager.useServicesMechanism() ?
+ SAXParserFactory.newInstance() : new SAXParserFactoryImpl();
spFactory.setNamespaceAware(true);
try {
reader = spFactory.newSAXParser().getXMLReader();
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.java
index c4b72dc68b7..0d90d573a39 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.java
@@ -42,6 +42,7 @@ import org.xml.sax.SAXException;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
+import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl;
import com.sun.org.apache.xml.internal.resolver.Catalog;
import com.sun.org.apache.xml.internal.resolver.CatalogManager;
import com.sun.org.apache.xml.internal.resolver.helpers.FileURL;
@@ -62,6 +63,7 @@ import com.sun.org.apache.xml.internal.resolver.helpers.FileURL;
* @author Norman Walsh
* Norman.Walsh@Sun.COM
*
+ * @version 1.0
*/
public class ResolvingParser
implements Parser, DTDHandler, DocumentHandler, EntityResolver {
@@ -121,8 +123,8 @@ public class ResolvingParser
/** Initialize the parser. */
private void initParser() {
catalogResolver = new CatalogResolver(catalogManager);
-
- SAXParserFactory spf = SAXParserFactory.newInstance();
+ SAXParserFactory spf = catalogManager.useServicesMechanism() ?
+ SAXParserFactory.newInstance() : new SAXParserFactoryImpl();
spf.setNamespaceAware(namespaceAware);
spf.setValidating(validating);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLFilter.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLFilter.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLFilter.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLFilter.java
index 786f5bba565..660e4af6a13 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLFilter.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLFilter.java
@@ -53,6 +53,7 @@ import com.sun.org.apache.xml.internal.resolver.helpers.FileURL;
* @author Norman Walsh
* Norman.Walsh@Sun.COM
*
+ * @version 1.0
*/
public class ResolvingXMLFilter extends XMLFilterImpl {
/**
@@ -63,7 +64,7 @@ public class ResolvingXMLFilter extends XMLFilterImpl {
public static boolean suppressExplanation = false;
/** The manager for the underlying resolver. */
- private CatalogManager catalogManager = CatalogManager.getStaticManager();
+ CatalogManager catalogManager = CatalogManager.getStaticManager();
/** The underlying catalog resolver. */
private CatalogResolver catalogResolver = null;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.java b/jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.java
similarity index 87%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.java
rename to jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.java
index e8dc595065b..0a98cd8dbe6 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.java
@@ -27,6 +27,7 @@ import org.xml.sax.*;
import javax.xml.parsers.*;
+import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl;
import com.sun.org.apache.xml.internal.resolver.*;
/**
@@ -43,6 +44,7 @@ import com.sun.org.apache.xml.internal.resolver.*;
* @author Norman Walsh
* Norman.Walsh@Sun.COM
*
+ * @version 1.0
*/
public class ResolvingXMLReader extends ResolvingXMLFilter {
/** Make the parser Namespace aware? */
@@ -60,7 +62,8 @@ public class ResolvingXMLReader extends ResolvingXMLFilter {
*/
public ResolvingXMLReader() {
super();
- SAXParserFactory spf = SAXParserFactory.newInstance();
+ SAXParserFactory spf = catalogManager.useServicesMechanism() ?
+ SAXParserFactory.newInstance() : new SAXParserFactoryImpl();
spf.setNamespaceAware(namespaceAware);
spf.setValidating(validating);
try {
@@ -80,7 +83,8 @@ public class ResolvingXMLReader extends ResolvingXMLFilter {
*/
public ResolvingXMLReader(CatalogManager manager) {
super(manager);
- SAXParserFactory spf = SAXParserFactory.newInstance();
+ SAXParserFactory spf = catalogManager.useServicesMechanism() ?
+ SAXParserFactory.newInstance() : new SAXParserFactoryImpl();
spf.setNamespaceAware(namespaceAware);
spf.setValidating(validating);
try {
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/DOMSerializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/ElementState.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/ElementState.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/ElementState.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/ElementState.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/Encodings.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/Encodings.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/Encodings.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLEntities.res b/jaxp/src/com/sun/org/apache/xml/internal/serialize/HTMLEntities.res
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLEntities.res
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/HTMLEntities.res
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLSerializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/HTMLSerializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLSerializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/HTMLSerializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/HTMLdtd.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/IndentPrinter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/LineSeparator.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/LineSeparator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/LineSeparator.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/LineSeparator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/Method.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/Method.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/Method.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/Method.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/ObjectFactory.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/ObjectFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/ObjectFactory.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/ObjectFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/OutputFormat.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/OutputFormat.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/OutputFormat.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/OutputFormat.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/Printer.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/Printer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/Printer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/Printer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/SecuritySupport.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/SecuritySupport.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/SecuritySupport.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/SecuritySupport.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/Serializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/Serializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/Serializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/Serializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java
index 477ff6d0a0d..22bcad610cb 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java
@@ -21,7 +21,7 @@
package com.sun.org.apache.xml.internal.serialize;
-
+import com.sun.org.apache.xerces.internal.utils.ObjectFactory;
import java.io.OutputStream;
import java.io.Writer;
import java.io.UnsupportedEncodingException;
@@ -31,6 +31,7 @@ import java.util.StringTokenizer;
/**
*
*
+ * @version $Revision: 1.6 $ $Date: 2010-11-01 04:40:36 $
* @author Scott Boag
* @author Assaf Arkin
*/
@@ -69,8 +70,7 @@ public abstract class SerializerFactory
while ( token.hasMoreTokens() ) {
className = token.nextToken();
try {
- factory = (SerializerFactory) ObjectFactory.newInstance( className,
- SerializerFactory.class.getClassLoader(), true);
+ factory = (SerializerFactory) ObjectFactory.newInstance( className, true);
if ( _factories.containsKey( factory.getSupportedMethod() ) )
_factories.put( factory.getSupportedMethod(), factory );
} catch ( Exception except ) { }
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/SerializerFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/TextSerializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/TextSerializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/TextSerializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/TextSerializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/XHTMLSerializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/XHTMLSerializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/XHTMLSerializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/XHTMLSerializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/XML11Serializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serialize/XMLSerializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/AttributesImplSerializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/AttributesImplSerializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/AttributesImplSerializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/AttributesImplSerializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/CharInfo.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java
similarity index 71%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/CharInfo.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java
index 4970e0b0f73..99c05b901bf 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/CharInfo.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/CharInfo.java
@@ -40,6 +40,7 @@ import com.sun.org.apache.xml.internal.serializer.utils.MsgKey;
import com.sun.org.apache.xml.internal.serializer.utils.SystemIDResolver;
import com.sun.org.apache.xml.internal.serializer.utils.Utils;
import com.sun.org.apache.xml.internal.serializer.utils.WrappedRuntimeException;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
/**
* This class provides services that tell if a character should have
@@ -54,7 +55,7 @@ import com.sun.org.apache.xml.internal.serializer.utils.WrappedRuntimeException;
final class CharInfo
{
/** Given a character, lookup a String to output (e.g. a decorated entity reference). */
- private HashMap m_charToString = new HashMap();
+ private HashMap m_charToString;
/**
* The name of the HTML entities file.
@@ -71,42 +72,50 @@ final class CharInfo
"com.sun.org.apache.xml.internal.serializer.XMLEntities";
/** The horizontal tab character, which the parser should always normalize. */
- public static final char S_HORIZONAL_TAB = 0x09;
+ static final char S_HORIZONAL_TAB = 0x09;
/** The linefeed character, which the parser should always normalize. */
- public static final char S_LINEFEED = 0x0A;
+ static final char S_LINEFEED = 0x0A;
/** The carriage return character, which the parser should always normalize. */
- public static final char S_CARRIAGERETURN = 0x0D;
+ static final char S_CARRIAGERETURN = 0x0D;
+ static final char S_SPACE = 0x20;
+ static final char S_QUOTE = 0x22;
+ static final char S_LT = 0x3C;
+ static final char S_GT = 0x3E;
+ static final char S_NEL = 0x85;
+ static final char S_LINE_SEPARATOR = 0x2028;
/** This flag is an optimization for HTML entities. It false if entities
* other than quot (34), amp (38), lt (60) and gt (62) are defined
* in the range 0 to 127.
* @xsl.usage internal
*/
- final boolean onlyQuotAmpLtGt;
+ boolean onlyQuotAmpLtGt;
/** Copy the first 0,1 ... ASCII_MAX values into an array */
- private static final int ASCII_MAX = 128;
+ static final int ASCII_MAX = 128;
/** Array of values is faster access than a set of bits
- * to quickly check ASCII characters in attribute values.
+ * to quickly check ASCII characters in attribute values,
+ * the value is true if the character in an attribute value
+ * should be mapped to a String.
*/
- private boolean[] isSpecialAttrASCII = new boolean[ASCII_MAX];
+ private final boolean[] shouldMapAttrChar_ASCII;
/** Array of values is faster access than a set of bits
- * to quickly check ASCII characters in text nodes.
+ * to quickly check ASCII characters in text nodes,
+ * the value is true if the character in a text node
+ * should be mapped to a String.
*/
- private boolean[] isSpecialTextASCII = new boolean[ASCII_MAX];
-
- private boolean[] isCleanTextASCII = new boolean[ASCII_MAX];
+ private final boolean[] shouldMapTextChar_ASCII;
/** An array of bits to record if the character is in the set.
* Although information in this array is complete, the
* isSpecialAttrASCII array is used first because access to its values
* is common and faster.
*/
- private int array_of_bits[] = createEmptySetOfIntegers(65535);
+ private final int array_of_bits[];
// 5 for 32 bit words, 6 for 64 bit words ...
@@ -137,33 +146,38 @@ final class CharInfo
/**
- * Constructor that reads in a resource file that describes the mapping of
- * characters to entity references.
- * This constructor is private, just to force the use
- * of the getCharInfo(entitiesResource) factory
+ * A base constructor just to explicitly create the fields,
+ * with the exception of m_charToString which is handled
+ * by the constructor that delegates base construction to this one.
+ *
+ * m_charToString is not created here only for performance reasons,
+ * to avoid creating a Hashtable that will be replaced when
+ * making a mutable copy, {@link #mutableCopyOf(CharInfo)}.
*
- * Resource files must be encoded in UTF-8 and can either be properties
- * files with a .properties extension assumed. Alternatively, they can
- * have the following form, with no particular extension assumed:
- *
- *
- * # First char # is a comment
- * Entity numericValue
- * quot 34
- * amp 38
- *
- *
- * @param entitiesResource Name of properties or resource file that should
- * be loaded, which describes that mapping of characters to entity
- * references.
*/
- private CharInfo(String entitiesResource, String method)
+ private CharInfo()
{
- this(entitiesResource, method, false);
+ this.array_of_bits = createEmptySetOfIntegers(65535);
+ this.firstWordNotUsed = 0;
+ this.shouldMapAttrChar_ASCII = new boolean[ASCII_MAX];
+ this.shouldMapTextChar_ASCII = new boolean[ASCII_MAX];
+ this.m_charKey = new CharKey();
+
+ // Not set here, but in a constructor that uses this one
+ // this.m_charToString = new Hashtable();
+
+ this.onlyQuotAmpLtGt = true;
+
+
+ return;
}
private CharInfo(String entitiesResource, String method, boolean internal)
{
+ // call the default constructor to create the fields
+ this();
+ m_charToString = new HashMap();
+
ResourceBundle entities = null;
boolean noExtraEntities = true;
@@ -189,12 +203,10 @@ final class CharInfo
String name = (String) keys.nextElement();
String value = entities.getString(name);
int code = Integer.parseInt(value);
- defineEntity(name, (char) code);
- if (extraEntity(code))
+ boolean extra = defineEntity(name, (char) code);
+ if (extra)
noExtraEntities = false;
}
- set(S_LINEFEED);
- set(S_CARRIAGERETURN);
} else {
InputStream is = null;
@@ -278,8 +290,8 @@ final class CharInfo
int code = Integer.parseInt(value);
- defineEntity(name, (char) code);
- if (extraEntity(code))
+ boolean extra = defineEntity(name, (char) code);
+ if (extra)
noExtraEntities = false;
}
}
@@ -288,8 +300,6 @@ final class CharInfo
}
is.close();
- set(S_LINEFEED);
- set(S_CARRIAGERETURN);
} catch (Exception e) {
throw new RuntimeException(
Utils.messages.createMessage(
@@ -307,31 +317,8 @@ final class CharInfo
}
}
- /* initialize the array isCleanTextASCII[] with a cache of values
- * for use by ToStream.character(char[], int , int)
- * and the array isSpecialTextASCII[] with the opposite values
- * (all in the name of performance!)
- */
- for (int ch = 0; ch Unlike internal entities, character references are a string to single
* character mapping. They are used to map non-ASCII characters both on
- * parsing and printing, primarily for HTML documents. '<amp;' is an
+ * parsing and printing, primarily for HTML documents. '<' is an
* example of a character reference.
*
* @param name The entity's name
* @param value The entity's value
+ * @return true if the mapping is not one of:
+ *
+ * - '<' to "<"
+ *
- '>' to ">"
+ *
- '&' to "&"
+ *
- '"' to """
+ *
*/
- private void defineEntity(String name, char value)
+ private boolean defineEntity(String name, char value)
{
StringBuilder sb = new StringBuilder("&");
sb.append(name);
sb.append(';');
String entityString = sb.toString();
- defineChar2StringMapping(entityString, value);
+ boolean extra = defineChar2StringMapping(entityString, value);
+ return extra;
}
+ /**
+ * A utility object, just used to map characters to output Strings,
+ * needed because a HashMap needs to map an object as a key, not a
+ * Java primitive type, like a char, so this object gets around that
+ * and it is reusable.
+ */
+ private final CharKey m_charKey;
+
/**
* Map a character to a String. For example given
* the character '>' this method would return the fully decorated
@@ -399,21 +413,21 @@ final class CharInfo
/**
* Tell if the character argument that is from
- * an attribute value should have special treatment.
+ * an attribute value has a mapping to a String.
*
* @param value the value of a character that is in an attribute value
* @return true if the character should have any special treatment,
* such as when writing out attribute values,
- * or entity references.
+ * such as when writing out entity references.
* @xsl.usage internal
*/
- final boolean isSpecialAttrChar(int value)
+ final boolean shouldMapAttrChar(int value)
{
// for performance try the values in the boolean array first,
// this is faster access than the BitSet for common ASCII values
if (value < ASCII_MAX)
- return isSpecialAttrASCII[value];
+ return shouldMapAttrChar_ASCII[value];
// rather than java.util.BitSet, our private
// implementation is faster (and less general).
@@ -422,48 +436,27 @@ final class CharInfo
/**
* Tell if the character argument that is from a
- * text node should have special treatment.
+ * text node has a mapping to a String, for example
+ * to map '<' to "<".
*
* @param value the value of a character that is in a text node
- * @return true if the character should have any special treatment,
- * such as when writing out attribute values,
- * or entity references.
+ * @return true if the character has a mapping to a String,
+ * such as when writing out entity references.
* @xsl.usage internal
*/
- final boolean isSpecialTextChar(int value)
+ final boolean shouldMapTextChar(int value)
{
// for performance try the values in the boolean array first,
// this is faster access than the BitSet for common ASCII values
if (value < ASCII_MAX)
- return isSpecialTextASCII[value];
+ return shouldMapTextChar_ASCII[value];
// rather than java.util.BitSet, our private
// implementation is faster (and less general).
return get(value);
}
- /**
- * This method is used to determine if an ASCII character in
- * a text node (not an attribute value) is "clean".
- * @param value the character to check (0 to 127).
- * @return true if the character can go to the writer as-is
- * @xsl.usage internal
- */
- final boolean isTextASCIIClean(int value)
- {
- return isCleanTextASCII[value];
- }
-
-// In the future one might want to use the array directly and avoid
-// the method call, but I think the JIT alreay inlines this well enough
-// so don't do it (for now) - bjm
-// public final boolean[] getASCIIClean()
-// {
-// return isCleanTextASCII;
-// }
-
-
private static CharInfo getCharInfoBasedOnPrivilege(
final String entitiesFileName, final String method,
final boolean internal){
@@ -498,15 +491,17 @@ final class CharInfo
{
CharInfo charInfo = (CharInfo) m_getCharInfoCache.get(entitiesFileName);
if (charInfo != null) {
- return charInfo;
+ return mutableCopyOf(charInfo);
}
// try to load it internally - cache
try {
charInfo = getCharInfoBasedOnPrivilege(entitiesFileName,
method, true);
+ // Put the common copy of charInfo in the cache, but return
+ // a copy of it.
m_getCharInfoCache.put(entitiesFileName, charInfo);
- return charInfo;
+ return mutableCopyOf(charInfo);
} catch (Exception e) {}
// try to load it externally - do not cache
@@ -533,7 +528,41 @@ final class CharInfo
method, false);
}
- /** Table of user-specified char infos. */
+ /**
+ * Create a mutable copy of the cached one.
+ * @param charInfo The cached one.
+ * @return
+ */
+ private static CharInfo mutableCopyOf(CharInfo charInfo) {
+ CharInfo copy = new CharInfo();
+
+ int max = charInfo.array_of_bits.length;
+ System.arraycopy(charInfo.array_of_bits,0,copy.array_of_bits,0,max);
+
+ copy.firstWordNotUsed = charInfo.firstWordNotUsed;
+
+ max = charInfo.shouldMapAttrChar_ASCII.length;
+ System.arraycopy(charInfo.shouldMapAttrChar_ASCII,0,copy.shouldMapAttrChar_ASCII,0,max);
+
+ max = charInfo.shouldMapTextChar_ASCII.length;
+ System.arraycopy(charInfo.shouldMapTextChar_ASCII,0,copy.shouldMapTextChar_ASCII,0,max);
+
+ // utility field copy.m_charKey is already created in the default constructor
+
+ copy.m_charToString = (HashMap) charInfo.m_charToString.clone();
+
+ copy.onlyQuotAmpLtGt = charInfo.onlyQuotAmpLtGt;
+
+ return copy;
+ }
+
+ /**
+ * Table of user-specified char infos.
+ * The table maps entify file names (the name of the
+ * property file without the .properties extension)
+ * to CharInfo objects populated with entities defined in
+ * corresponding property file.
+ */
private static HashMap m_getCharInfoCache = new HashMap();
/**
@@ -575,7 +604,8 @@ final class CharInfo
* the creation of the set.
*/
private final void set(int i) {
- setASCIIdirty(i);
+ setASCIItextDirty(i);
+ setASCIIattrDirty(i);
int j = (i >> SHIFT_PER_WORD); // this word is used
int k = j + 1;
@@ -610,24 +640,43 @@ final class CharInfo
return in_the_set;
}
- // record if there are any entities other than
- // quot, amp, lt, gt (probably user defined)
/**
- * @return true if the entity
- * @param code The value of the character that has an entity defined
- * for it.
+ * This method returns true if there are some non-standard mappings to
+ * entities other than quot, amp, lt, gt, and its only purpose is for
+ * performance.
+ * @param charToMap The value of the character that is mapped to a String
+ * @param outputString The String to which the character is mapped, usually
+ * an entity reference such as "<".
+ * @return true if the mapping is not one of:
+ *
+ * - '<' to "<"
+ *
- '>' to ">"
+ *
- '&' to "&"
+ *
- '"' to """
+ *
*/
- private boolean extraEntity(int entityValue)
+ private boolean extraEntity(String outputString, int charToMap)
{
boolean extra = false;
- if (entityValue < 128)
+ if (charToMap < ASCII_MAX)
{
- switch (entityValue)
+ switch (charToMap)
{
- case 34 : // quot
- case 38 : // amp
- case 60 : // lt
- case 62 : // gt
+ case '"' : // quot
+ if (!outputString.equals("""))
+ extra = true;
+ break;
+ case '&' : // amp
+ if (!outputString.equals("&"))
+ extra = true;
+ break;
+ case '<' : // lt
+ if (!outputString.equals("<"))
+ extra = true;
+ break;
+ case '>' : // gt
+ if (!outputString.equals(">"))
+ extra = true;
break;
default : // other entity in range 0 to 127
extra = true;
@@ -637,49 +686,61 @@ final class CharInfo
}
/**
- * If the character is a printable ASCII character then
- * mark it as not clean and needing replacement with
- * a String on output.
+ * If the character is in the ASCII range then
+ * mark it as needing replacement with
+ * a String on output if it occurs in a text node.
* @param ch
*/
- private void setASCIIdirty(int j)
+ private void setASCIItextDirty(int j)
{
if (0 <= j && j < ASCII_MAX)
{
- isCleanTextASCII[j] = false;
- isSpecialTextASCII[j] = true;
+ shouldMapTextChar_ASCII[j] = true;
}
}
/**
- * If the character is a printable ASCII character then
- * mark it as and not needing replacement with
- * a String on output.
+ * If the character is in the ASCII range then
+ * mark it as needing replacement with
+ * a String on output if it occurs in a attribute value.
* @param ch
*/
- private void setASCIIclean(int j)
+ private void setASCIIattrDirty(int j)
{
if (0 <= j && j < ASCII_MAX)
{
- isCleanTextASCII[j] = true;
- isSpecialTextASCII[j] = false;
+ shouldMapAttrChar_ASCII[j] = true;
}
}
- private void defineChar2StringMapping(String outputString, char inputChar)
+ /**
+ * Call this method to register a char to String mapping, for example
+ * to map '<' to "<".
+ * @param outputString The String to map to.
+ * @param inputChar The char to map from.
+ * @return true if the mapping is not one of:
+ *
+ * - '<' to "<"
+ *
- '>' to ">"
+ *
- '&' to "&"
+ *
- '"' to """
+ *
+ */
+ boolean defineChar2StringMapping(String outputString, char inputChar)
{
CharKey character = new CharKey(inputChar);
m_charToString.put(character, outputString);
- set(inputChar);
+ set(inputChar); // mark the character has having a mapping to a String
+
+ boolean extraMapping = extraEntity(outputString, inputChar);
+ return extraMapping;
+
}
/**
* Simple class for fast lookup of char values, when used with
* hashtables. You can set the char, then use it as a key.
*
- * This class is a copy of the one in com.sun.org.apache.xml.internal.utils.
- * It exists to cut the serializers dependancy on that package.
- *
* @xsl.usage internal
*/
private static class CharKey extends Object
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/DOMSerializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/DOMSerializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/DOMSerializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/DOMSerializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ElemContext.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ElemContext.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ElemContext.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ElemContext.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ElemDesc.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ElemDesc.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ElemDesc.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ElemDesc.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/EmptySerializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/EmptySerializer.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/EmptySerializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/EmptySerializer.java
index 26879702512..d14c2ea00f7 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/EmptySerializer.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/EmptySerializer.java
@@ -178,6 +178,13 @@ public class EmptySerializer implements SerializationHandler
{
aMethodIsCalled();
}
+ /**
+ * @see SerializationHandler#setIsStandalone(boolean)
+ */
+ public void setIsStandalone(boolean isStandalone)
+ {
+ aMethodIsCalled();
+ }
/**
* @see SerializationHandler#setOutputFormat(java.util.Properties)
*/
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/EncodingInfo.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/EncodingInfo.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/EncodingInfo.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/EncodingInfo.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Encodings.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/Encodings.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Encodings.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/Encodings.java
index 59d1a8222f5..dcb6dc8e077 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Encodings.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/Encodings.java
@@ -34,6 +34,7 @@ import java.util.HashMap;
import java.util.Properties;
import java.util.StringTokenizer;
+import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
/**
* Provides information about encodings. Depends on the Java runtime
@@ -41,7 +42,7 @@ import java.util.StringTokenizer;
* to override encoding names and provide the last printable character
* for each encoding.
*
- * @version $Revision: 1.9 $ $Date: 2009/12/01 22:17:31 $
+ * @version $Revision: 1.11 $ $Date: 2010-11-01 04:34:44 $
* @author Assaf Arkin
*/
@@ -324,9 +325,7 @@ public final class Encodings extends Object
}
if (is == null) {
- SecuritySupport ss = SecuritySupport.getInstance();
- is = ss.getResourceAsStream(ObjectFactory.findClassLoader(),
- ENCODINGS_FILE);
+ is = SecuritySupport.getResourceAsStream(ENCODINGS_FILE);
}
Properties props = new Properties();
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Encodings.properties b/jaxp/src/com/sun/org/apache/xml/internal/serializer/Encodings.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Encodings.properties
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/Encodings.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ExtendedContentHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ExtendedContentHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ExtendedContentHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ExtendedContentHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ExtendedLexicalHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ExtendedLexicalHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ExtendedLexicalHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ExtendedLexicalHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/HTMLEntities.properties b/jaxp/src/com/sun/org/apache/xml/internal/serializer/HTMLEntities.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/HTMLEntities.properties
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/HTMLEntities.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Method.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/Method.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Method.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/Method.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/NamespaceMappings.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/NamespaceMappings.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/NamespaceMappings.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/NamespaceMappings.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java
index 72f79c6a777..3daff744064 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java
@@ -175,6 +175,26 @@ public final class OutputPropertiesFactory
public static final int S_BUILTIN_OLD_EXTENSIONS_UNIVERSAL_LEN =
S_BUILTIN_OLD_EXTENSIONS_UNIVERSAL.length();
+ /**
+ * This non-standard, Oracle-impl only property key is used as if OutputKeys.STANDALONE is specified but
+ * without writing it out in the declaration; It can be used to reverse the change by Xalan patch 1495.
+ * Since Xalan patch 1495 can cause incompatible behavior, this property is add for application to neutralize
+ * the effect of Xalan patch 1495
+ */
+ /**
+ * Is Standalone
+ *
+ *
+ * -
+ *
yes to indicate the output is intended to be used as standalone
+ *
+ * -
+ *
no has no effect.
+ *
+ *
+ */
+ public static final String ORACLE_IS_STANDALONE = "http://www.oracle.com/xml/is-standalone";
+
//************************************************************
//* PRIVATE CONSTANTS
//************************************************************
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/OutputPropertyUtils.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/OutputPropertyUtils.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/OutputPropertyUtils.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/OutputPropertyUtils.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializationHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializationHandler.java
similarity index 93%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializationHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializationHandler.java
index a4d03791576..1e918553be7 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializationHandler.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializationHandler.java
@@ -124,5 +124,11 @@ public interface SerializationHandler
*/
public void setDTDEntityExpansion(boolean expand);
+ /**
+ * Specify if the output will be treated as a standalone property
+ * @param isStandalone true if the http://www.oracle.com/xml/is-standalone is set to yes
+ * @see OutputPropertiesFactory ORACLE_IS_STANDALONE
+ */
+ public void setIsStandalone(boolean b);
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Serializer.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/Serializer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Serializer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/Serializer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerBase.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerBase.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerBase.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerBase.java
index fd324fe8070..a47789037d9 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerBase.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerBase.java
@@ -142,6 +142,11 @@ public abstract class SerializerBase
*/
protected boolean m_standaloneWasSpecified = false;
+ /**
+ * Determine if the output is a standalone.
+ */
+ protected boolean m_isStandalone = false;
+
/**
* Flag to tell if indenting (pretty-printing) is on.
*/
@@ -739,6 +744,16 @@ public abstract class SerializerBase
m_doIndent = doIndent;
}
+ /**
+ * Sets the isStandalone property
+ * @param isStandalone true if the ORACLE_IS_STANDALONE is set to yes
+ * @see OutputPropertiesFactory ORACLE_IS_STANDALONE
+ */
+ public void setIsStandalone(boolean isStandalone)
+ {
+ m_isStandalone = isStandalone;
+ }
+
/**
* This method is used when a prefix/uri namespace mapping
* is indicated after the element was started with a
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerConstants.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerConstants.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerConstants.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerConstants.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerFactory.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerFactory.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerFactory.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerFactory.java
index 4a8192b4497..358c4f25bb6 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerFactory.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerFactory.java
@@ -29,6 +29,7 @@ import javax.xml.transform.OutputKeys;
import com.sun.org.apache.xml.internal.serializer.utils.MsgKey;
import com.sun.org.apache.xml.internal.serializer.utils.Utils;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
import org.xml.sax.ContentHandler;
/**
@@ -126,9 +127,7 @@ public final class SerializerFactory
- ClassLoader loader = ObjectFactory.findClassLoader();
-
- Class cls = ObjectFactory.findProviderClass(className, loader, true);
+ Class cls = ObjectFactory.findProviderClass(className, true);
// _serializers.put(method, cls);
@@ -156,7 +155,7 @@ public final class SerializerFactory
* SAX ContentHandler events to the users handler.
*/
className = SerializerConstants.DEFAULT_SAX_SERIALIZER;
- cls = ObjectFactory.findProviderClass(className, loader, true);
+ cls = ObjectFactory.findProviderClass(className, true);
SerializationHandler sh =
(SerializationHandler) cls.newInstance();
sh.setContentHandler( (ContentHandler) obj);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerTrace.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerTrace.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerTrace.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerTrace.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerTraceWriter.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerTraceWriter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SerializerTraceWriter.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/SerializerTraceWriter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToHTMLSAXHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLSAXHandler.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToHTMLSAXHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLSAXHandler.java
index fd4801e7750..596a6418e53 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToHTMLSAXHandler.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLSAXHandler.java
@@ -56,7 +56,7 @@ public final class ToHTMLSAXHandler extends ToSAXHandler
/**
* Keeps track of whether output escaping is currently enabled
*/
- protected boolean m_escapeSetting = false;
+ protected boolean m_escapeSetting = true;
/**
* Returns null.
@@ -742,6 +742,6 @@ public final class ToHTMLSAXHandler extends ToSAXHandler
*/
private void resetToHTMLSAXHandler()
{
- this.m_escapeSetting = false;
+ this.m_escapeSetting = true;
}
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java
index aa48eaed8b4..94fbce6d64e 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToHTMLStream.java
@@ -58,7 +58,7 @@ public final class ToHTMLStream extends ToStream
* Map that tells which XML characters should have special treatment, and it
* provides character to entity name lookup.
*/
- private static final CharInfo m_htmlcharInfo =
+ private final CharInfo m_htmlcharInfo =
// new CharInfo(CharInfo.HTML_ENTITIES_RESOURCE);
CharInfo.getCharInfo(CharInfo.HTML_ENTITIES_RESOURCE, Method.HTML);
@@ -1369,7 +1369,7 @@ public final class ToHTMLStream extends ToStream
// System.out.println("ch: "+(int)ch);
// System.out.println("m_maxCharacter: "+(int)m_maxCharacter);
// System.out.println("m_attrCharsMap[ch]: "+(int)m_attrCharsMap[ch]);
- if (escapingNotNeeded(ch) && (!m_charInfo.isSpecialAttrChar(ch)))
+ if (escapingNotNeeded(ch) && (!m_charInfo.shouldMapAttrChar(ch)))
{
cleanLength++;
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToSAXHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToSAXHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToSAXHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ToSAXHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToStream.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToStream.java
similarity index 89%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToStream.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ToStream.java
index e09f6809555..cf07a695c83 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToStream.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToStream.java
@@ -919,7 +919,8 @@ abstract public class ToStream extends SerializerBase
{
// This is the old/fast code here, but is this
// correct for all encodings?
- if (ch >= 0x20 || (0x0A == ch || 0x0D == ch || 0x09 == ch))
+ if (ch >= CharInfo.S_SPACE || (CharInfo.S_LINEFEED == ch ||
+ CharInfo.S_CARRIAGERETURN == ch || CharInfo.S_HORIZONAL_TAB == ch))
ret= true;
else
ret = false;
@@ -1028,7 +1029,7 @@ abstract public class ToStream extends SerializerBase
*
* @throws java.io.IOException
*/
- protected int accumDefaultEntity(
+ int accumDefaultEntity(
java.io.Writer writer,
char ch,
int i,
@@ -1047,7 +1048,7 @@ abstract public class ToStream extends SerializerBase
{
// if this is text node character and a special one of those,
// or if this is a character from attribute value and a special one of those
- if ((fromTextNode && m_charInfo.isSpecialTextChar(ch)) || (!fromTextNode && m_charInfo.isSpecialAttrChar(ch)))
+ if ((fromTextNode && m_charInfo.shouldMapTextChar(ch)) || (!fromTextNode && m_charInfo.shouldMapAttrChar(ch)))
{
String outputStringForChar = m_charInfo.getOutputStringForChar(ch);
@@ -1398,7 +1399,6 @@ abstract public class ToStream extends SerializerBase
if (m_cdataTagOpen)
closeCDATA();
- // the check with _escaping is a bit of a hack for XLSTC
if (m_disableOutputEscapingStates.peekOrFalse() || (!m_escaping))
{
@@ -1421,82 +1421,173 @@ abstract public class ToStream extends SerializerBase
try
{
int i;
- char ch1;
int startClean;
// skip any leading whitspace
// don't go off the end and use a hand inlined version
// of isWhitespace(ch)
final int end = start + length;
- int lastDirty = start - 1; // last character that needed processing
- for (i = start;
- ((i < end)
- && ((ch1 = chars[i]) == 0x20
- || (ch1 == 0xA && m_lineSepUse)
- || ch1 == 0xD
- || ch1 == 0x09));
- i++)
- {
- /*
- * We are processing leading whitespace, but are doing the same
- * processing for dirty characters here as for non-whitespace.
- *
- */
- if (!m_charInfo.isTextASCIIClean(ch1))
- {
- lastDirty = processDirty(chars,end, i,ch1, lastDirty, true);
- i = lastDirty;
+ int lastDirtyCharProcessed = start - 1; // last non-clean character that was processed
+ // that was processed
+ final Writer writer = m_writer;
+ boolean isAllWhitespace = true;
+
+ // process any leading whitspace
+ i = start;
+ while (i < end && isAllWhitespace) {
+ char ch1 = chars[i];
+
+ if (m_charInfo.shouldMapTextChar(ch1)) {
+ // The character is supposed to be replaced by a String
+ // so write out the clean whitespace characters accumulated
+ // so far
+ // then the String.
+ writeOutCleanChars(chars, i, lastDirtyCharProcessed);
+ String outputStringForChar = m_charInfo
+ .getOutputStringForChar(ch1);
+ writer.write(outputStringForChar);
+ // We can't say that everything we are writing out is
+ // all whitespace, we just wrote out a String.
+ isAllWhitespace = false;
+ lastDirtyCharProcessed = i; // mark the last non-clean
+ // character processed
+ i++;
+ } else {
+ // The character is clean, but is it a whitespace ?
+ switch (ch1) {
+ // TODO: Any other whitespace to consider?
+ case CharInfo.S_SPACE:
+ // Just accumulate the clean whitespace
+ i++;
+ break;
+ case CharInfo.S_LINEFEED:
+ lastDirtyCharProcessed = processLineFeed(chars, i,
+ lastDirtyCharProcessed, writer);
+ i++;
+ break;
+ case CharInfo.S_CARRIAGERETURN:
+ writeOutCleanChars(chars, i, lastDirtyCharProcessed);
+ writer.write("
");
+ lastDirtyCharProcessed = i;
+ i++;
+ break;
+ case CharInfo.S_HORIZONAL_TAB:
+ // Just accumulate the clean whitespace
+ i++;
+ break;
+ default:
+ // The character was clean, but not a whitespace
+ // so break the loop to continue with this character
+ // (we don't increment index i !!)
+ isAllWhitespace = false;
+ break;
}
}
+ }
/* If there is some non-whitespace, mark that we may need
* to preserve this. This is only important if we have indentation on.
*/
- if (i < end)
+ if (i < end || !isAllWhitespace)
m_ispreserve = true;
-
-// int lengthClean; // number of clean characters in a row
-// final boolean[] isAsciiClean = m_charInfo.getASCIIClean();
-
- final boolean isXML10 = XMLVERSION10.equals(getVersion());
- // we've skipped the leading whitespace, now deal with the rest
for (; i < end; i++)
{
- {
- // A tight loop to skip over common clean chars
- // This tight loop makes it easier for the JIT
- // to optimize.
- char ch2;
- while (i "&"
+ // e.g. '<' --> "<"
+ writeOutCleanChars(chars, i, lastDirtyCharProcessed);
+ String outputStringForChar = m_charInfo.getOutputStringForChar(ch);
+ writer.write(outputStringForChar);
+ lastDirtyCharProcessed = i;
}
- else
- {
- lastDirty = processDirty(chars,end, i, ch, lastDirty, true);
- i = lastDirty;
+ else {
+ if (ch <= 0x1F) {
+ // Range 0x00 through 0x1F inclusive
+ //
+ // This covers the non-whitespace control characters
+ // in the range 0x1 to 0x1F inclusive.
+ // It also covers the whitespace control characters in the same way:
+ // 0x9 TAB
+ // 0xA NEW LINE
+ // 0xD CARRIAGE RETURN
+ //
+ // We also cover 0x0 ... It isn't valid
+ // but we will output ""
+
+ // The default will handle this just fine, but this
+ // is a little performance boost to handle the more
+ // common TAB, NEW-LINE, CARRIAGE-RETURN
+ switch (ch) {
+
+ case CharInfo.S_HORIZONAL_TAB:
+ // Leave whitespace TAB as a real character
+ break;
+ case CharInfo.S_LINEFEED:
+ lastDirtyCharProcessed = processLineFeed(chars, i, lastDirtyCharProcessed, writer);
+ break;
+ case CharInfo.S_CARRIAGERETURN:
+ writeOutCleanChars(chars, i, lastDirtyCharProcessed);
+ writer.write("
");
+ lastDirtyCharProcessed = i;
+ // Leave whitespace carriage return as a real character
+ break;
+ default:
+ writeOutCleanChars(chars, i, lastDirtyCharProcessed);
+ writer.write("");
+ writer.write(Integer.toString(ch));
+ writer.write(';');
+ lastDirtyCharProcessed = i;
+ break;
+
+ }
+ }
+ else if (ch < 0x7F) {
+ // Range 0x20 through 0x7E inclusive
+ // Normal ASCII chars, do nothing, just add it to
+ // the clean characters
+
+ }
+ else if (ch <= 0x9F){
+ // Range 0x7F through 0x9F inclusive
+ // More control characters, including NEL (0x85)
+ writeOutCleanChars(chars, i, lastDirtyCharProcessed);
+ writer.write("");
+ writer.write(Integer.toString(ch));
+ writer.write(';');
+ lastDirtyCharProcessed = i;
+ }
+ else if (ch == CharInfo.S_LINE_SEPARATOR) {
+ // LINE SEPARATOR
+ writeOutCleanChars(chars, i, lastDirtyCharProcessed);
+ writer.write("
");
+ lastDirtyCharProcessed = i;
+ }
+ else if (m_encodingInfo.isInEncoding(ch)) {
+ // If the character is in the encoding, and
+ // not in the normal ASCII range, we also
+ // just leave it get added on to the clean characters
+
+ }
+ else {
+ // This is a fallback plan, we should never get here
+ // but if the character wasn't previously handled
+ // (i.e. isn't in the encoding, etc.) then what
+ // should we do? We choose to write out an entity
+ writeOutCleanChars(chars, i, lastDirtyCharProcessed);
+ writer.write("");
+ writer.write(Integer.toString(ch));
+ writer.write(';');
+ lastDirtyCharProcessed = i;
+ }
}
}
// we've reached the end. Any clean characters at the
// end of the array than need to be written out?
- startClean = lastDirty + 1;
+ startClean = lastDirtyCharProcessed + 1;
if (i > startClean)
{
int lengthClean = i - startClean;
@@ -1515,6 +1606,32 @@ abstract public class ToStream extends SerializerBase
if (m_tracer != null)
super.fireCharEvent(chars, start, length);
}
+
+ private int processLineFeed(final char[] chars, int i, int lastProcessed, final Writer writer) throws IOException {
+ if (!m_lineSepUse
+ || (m_lineSepLen ==1 && m_lineSep[0] == CharInfo.S_LINEFEED)){
+ // We are leaving the new-line alone, and it is just
+ // being added to the 'clean' characters,
+ // so the last dirty character processed remains unchanged
+ }
+ else {
+ writeOutCleanChars(chars, i, lastProcessed);
+ writer.write(m_lineSep, 0, m_lineSepLen);
+ lastProcessed = i;
+ }
+ return lastProcessed;
+ }
+
+ private void writeOutCleanChars(final char[] chars, int i, int lastProcessed) throws IOException {
+ int startClean;
+ startClean = lastProcessed + 1;
+ if (startClean < i)
+ {
+ int lengthClean = i - startClean;
+ m_writer.write(chars, startClean, lengthClean);
+ }
+ }
+
/**
* This method checks if a given character is between C0 or C1 range
* of Control characters.
@@ -1634,7 +1751,7 @@ abstract public class ToStream extends SerializerBase
*
* @throws org.xml.sax.SAXException
*/
- protected int accumDefaultEscape(
+ private int accumDefaultEscape(
Writer writer,
char ch,
int i,
@@ -1698,16 +1815,15 @@ abstract public class ToStream extends SerializerBase
* to write it out as Numeric Character Reference(NCR) regardless of XML Version
* being used for output document.
*/
- if (isCharacterInC0orC1Range(ch) ||
- (XMLVERSION11.equals(getVersion()) && isNELorLSEPCharacter(ch)))
+ if (isCharacterInC0orC1Range(ch) || isNELorLSEPCharacter(ch))
{
writer.write("");
writer.write(Integer.toString(ch));
writer.write(';');
}
else if ((!escapingNotNeeded(ch) ||
- ( (fromTextNode && m_charInfo.isSpecialTextChar(ch))
- || (!fromTextNode && m_charInfo.isSpecialAttrChar(ch))))
+ ( (fromTextNode && m_charInfo.shouldMapTextChar(ch))
+ || (!fromTextNode && m_charInfo.shouldMapAttrChar(ch))))
&& m_elemContext.m_currentElemDepth > 0)
{
writer.write("");
@@ -1971,28 +2087,86 @@ abstract public class ToStream extends SerializerBase
string.getChars(0,len, m_attrBuff, 0);
final char[] stringChars = m_attrBuff;
- for (int i = 0; i < len; )
+ for (int i = 0; i < len;)
{
char ch = stringChars[i];
- if (escapingNotNeeded(ch) && (!m_charInfo.isSpecialAttrChar(ch)))
- {
- writer.write(ch);
- i++;
- }
- else
- { // I guess the parser doesn't normalize cr/lf in attributes. -sb
-// if ((CharInfo.S_CARRIAGERETURN == ch)
-// && ((i + 1) < len)
-// && (CharInfo.S_LINEFEED == stringChars[i + 1]))
-// {
-// i++;
-// ch = CharInfo.S_LINEFEED;
-// }
+ if (m_charInfo.shouldMapAttrChar(ch) || !(escapingNotNeeded(ch))) {
+ // The character is supposed to be replaced by a String
+ // e.g. '&' --> "&"
+ // e.g. '<' --> "<"
i = accumDefaultEscape(writer, ch, i, stringChars, len, false, true);
}
- }
+ else {
+ i++;
+ if (0x0 <= ch && ch <= 0x1F) {
+ // Range 0x00 through 0x1F inclusive
+ // This covers the non-whitespace control characters
+ // in the range 0x1 to 0x1F inclusive.
+ // It also covers the whitespace control characters in the same way:
+ // 0x9 TAB
+ // 0xA NEW LINE
+ // 0xD CARRIAGE RETURN
+ //
+ // We also cover 0x0 ... It isn't valid
+ // but we will output ""
+ // The default will handle this just fine, but this
+ // is a little performance boost to handle the more
+ // common TAB, NEW-LINE, CARRIAGE-RETURN
+ switch (ch) {
+
+ case CharInfo.S_HORIZONAL_TAB:
+ writer.write(" ");
+ break;
+ case CharInfo.S_LINEFEED:
+ writer.write("
");
+ break;
+ case CharInfo.S_CARRIAGERETURN:
+ writer.write("
");
+ break;
+ default:
+ writer.write("");
+ writer.write(Integer.toString(ch));
+ writer.write(';');
+ break;
+
+ }
+ }
+ else if (ch < 0x7F) {
+ // Range 0x20 through 0x7E inclusive
+ // Normal ASCII chars
+ writer.write(ch);
+ }
+ else if (ch <= 0x9F){
+ // Range 0x7F through 0x9F inclusive
+ // More control characters
+ writer.write("");
+ writer.write(Integer.toString(ch));
+ writer.write(';');
+ }
+ else if (ch == CharInfo.S_LINE_SEPARATOR) {
+ // LINE SEPARATOR
+ writer.write("
");
+ }
+ else if (m_encodingInfo.isInEncoding(ch)) {
+ // If the character is in the encoding, and
+ // not in the normal ASCII range, we also
+ // just write it out
+ writer.write(ch);
+ }
+ else {
+ // This is a fallback plan, we should never get here
+ // but if the character wasn't previously handled
+ // (i.e. isn't in the encoding, etc.) then what
+ // should we do? We choose to write out a character ref
+ writer.write("");
+ writer.write(Integer.toString(ch));
+ writer.write(';');
+ }
+
+ }
+ }
}
/**
@@ -2219,13 +2393,17 @@ abstract public class ToStream extends SerializerBase
try
{
- if (shouldIndent())
+ if (shouldIndent() && m_isStandalone)
indent();
final int limit = start + length;
boolean wasDash = false;
if (m_cdataTagOpen)
closeCDATA();
+
+ if (shouldIndent() && !m_isStandalone)
+ indent();
+
final java.io.Writer writer = m_writer;
writer.write(COMMENT_BEGIN);
// Detect occurrences of two consecutive dashes, handle as necessary.
@@ -2258,6 +2436,15 @@ abstract public class ToStream extends SerializerBase
throw new SAXException(e);
}
+ /*
+ * Don't write out any indentation whitespace now,
+ * because there may be non-whitespace text after this.
+ *
+ * Simply mark that at this point if we do decide
+ * to indent that we should
+ * add a newline on the end of the current line before
+ * the indentation at the start of the next line.
+ */
m_startNewLine = true;
// time to generate comment event
if (m_tracer != null)
@@ -2506,7 +2693,7 @@ abstract public class ToStream extends SerializerBase
*/
protected boolean shouldIndent()
{
- return m_doIndent && (!m_ispreserve && !m_isprevtext);
+ return m_doIndent && (!m_ispreserve && !m_isprevtext) && (m_elemContext.m_currentElemDepth > 0 || m_isStandalone);
}
/**
@@ -2749,6 +2936,14 @@ abstract public class ToStream extends SerializerBase
closeCDATA();
m_cdataTagOpen = false;
}
+ if (m_writer != null) {
+ try {
+ m_writer.flush();
+ }
+ catch(IOException e) {
+ // what? me worry?
+ }
+ }
}
public void setContentHandler(ContentHandler ch)
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToTextSAXHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToTextSAXHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToTextSAXHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ToTextSAXHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToTextStream.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToTextStream.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToTextStream.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ToTextStream.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToUnknownStream.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToUnknownStream.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToUnknownStream.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ToUnknownStream.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToXMLSAXHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLSAXHandler.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToXMLSAXHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLSAXHandler.java
index 6cdb5917570..7b165e4116f 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToXMLSAXHandler.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLSAXHandler.java
@@ -50,7 +50,7 @@ public final class ToXMLSAXHandler extends ToSAXHandler
/**
* Keeps track of whether output escaping is currently enabled
*/
- protected boolean m_escapeSetting = false;
+ protected boolean m_escapeSetting = true;
public ToXMLSAXHandler()
{
@@ -772,7 +772,7 @@ public final class ToXMLSAXHandler extends ToSAXHandler
*/
private void resetToXMLSAXHandler()
{
- this.m_escapeSetting = false;
+ this.m_escapeSetting = true;
}
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java
similarity index 91%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java
index b70e9e38bc0..51e1331144a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/ToXMLStream.java
@@ -56,7 +56,7 @@ public final class ToXMLStream extends ToStream
* Map that tells which XML characters should have special treatment, and it
* provides character to entity name lookup.
*/
- private static CharInfo m_xmlcharInfo =
+ private CharInfo m_xmlcharInfo =
// new CharInfo(CharInfo.XML_ENTITIES_RESOURCE);
CharInfo.getCharInfo(CharInfo.XML_ENTITIES_RESOURCE, Method.XML);
@@ -160,8 +160,23 @@ public final class ToXMLStream extends ToStream
writer.write('\"');
writer.write(standalone);
writer.write("?>");
- if (m_doIndent)
- writer.write(m_lineSep, 0, m_lineSepLen);
+ if (m_doIndent) {
+ if (m_standaloneWasSpecified
+ || getDoctypePublic() != null
+ || getDoctypeSystem() != null
+ || m_isStandalone) {
+ // We almost never put a newline after the XML
+ // header because this XML could be used as
+ // an extenal general parsed entity
+ // and we don't know the context into which it
+ // will be used in the future. Only when
+ // standalone, or a doctype system or public is
+ // specified are we free to insert a new line
+ // after the header. Is it even worth bothering
+ // in these rare cases?
+ writer.write(m_lineSep, 0, m_lineSepLen);
+ }
+ }
}
catch(IOException e)
{
@@ -312,12 +327,22 @@ public final class ToXMLStream extends ToStream
writer.write('?');
writer.write('>');
- // Always output a newline char if not inside of an
- // element. The whitespace is not significant in that
- // case.
- if (m_elemContext.m_currentElemDepth <= 0)
+ /**
+ * Before Xalan 1497, a newline char was printed out if not inside of an
+ * element. The whitespace is not significant if the output is standalone
+ */
+ if (m_elemContext.m_currentElemDepth <= 0 && m_isStandalone)
writer.write(m_lineSep, 0, m_lineSepLen);
+ /*
+ * Don't write out any indentation whitespace now,
+ * because there may be non-whitespace text after this.
+ *
+ * Simply mark that at this point if we do decide
+ * to indent that we should
+ * add a newline on the end of the current line before
+ * the indentation at the start of the next line.
+ */
m_startNewLine = true;
}
catch(IOException e)
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/TransformStateSetter.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/TransformStateSetter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/TransformStateSetter.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/TransformStateSetter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/TreeWalker.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/TreeWalker.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/TreeWalker.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/TreeWalker.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Utils.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/Utils.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Utils.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/Utils.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Version.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/Version.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/Version.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/Version.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/WriterChain.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/WriterChain.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/WriterChain.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/WriterChain.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/WriterToASCI.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/WriterToASCI.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/WriterToASCI.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/WriterToASCI.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/WriterToUTF8Buffered.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/WriterToUTF8Buffered.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/WriterToUTF8Buffered.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/WriterToUTF8Buffered.java
index f6b8bd8460c..b9291ccdb10 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/WriterToUTF8Buffered.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/WriterToUTF8Buffered.java
@@ -204,10 +204,10 @@ final class WriterToUTF8Buffered extends Writer implements WriterChain
*/
int split = length/CHARS_MAX;
final int chunks;
- if (split > 1)
- chunks = split;
+ if (length % CHARS_MAX > 0)
+ chunks = split + 1;
else
- chunks = 2;
+ chunks = split;
int end_chunk = start;
for (int chunk = 1; chunk <= chunks; chunk++)
{
@@ -339,10 +339,10 @@ final class WriterToUTF8Buffered extends Writer implements WriterChain
final int start = 0;
int split = length/CHARS_MAX;
final int chunks;
- if (split > 1)
- chunks = split;
+ if (length % CHARS_MAX > 0)
+ chunks = split + 1;
else
- chunks = 2;
+ chunks = split;
int end_chunk = 0;
for (int chunk = 1; chunk <= chunks; chunk++)
{
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/XMLEntities.properties b/jaxp/src/com/sun/org/apache/xml/internal/serializer/XMLEntities.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/XMLEntities.properties
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/XMLEntities.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/XSLOutputAttributes.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/XSLOutputAttributes.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/XSLOutputAttributes.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/XSLOutputAttributes.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/output_html.properties b/jaxp/src/com/sun/org/apache/xml/internal/serializer/output_html.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/output_html.properties
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/output_html.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/output_text.properties b/jaxp/src/com/sun/org/apache/xml/internal/serializer/output_text.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/output_text.properties
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/output_text.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/output_unknown.properties b/jaxp/src/com/sun/org/apache/xml/internal/serializer/output_unknown.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/output_unknown.properties
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/output_unknown.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/output_xml.properties b/jaxp/src/com/sun/org/apache/xml/internal/serializer/output_xml.properties
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/output_xml.properties
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/output_xml.properties
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/package.html b/jaxp/src/com/sun/org/apache/xml/internal/serializer/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/package.html
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/AttList.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/AttList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/AttList.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/AttList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/BoolStack.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/BoolStack.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/BoolStack.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/BoolStack.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/DOM2Helper.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/DOM2Helper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/DOM2Helper.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/DOM2Helper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/Messages.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/Messages.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/Messages.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/Messages.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/MsgKey.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/MsgKey.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/MsgKey.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/MsgKey.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ca.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ca.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ca.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ca.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_cs.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_cs.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_cs.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_cs.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_de.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_de.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_de.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_de.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_en.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_en.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_en.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_en.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_es.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_es.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_es.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_es.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_fr.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_fr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_fr.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_fr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_it.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_it.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_it.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_it.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ja.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ja.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ja.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ja.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ko.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ko.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ko.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_ko.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_sv.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_sv.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_sv.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_sv.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_zh_CN.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_zh_CN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_zh_CN.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_zh_CN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_zh_TW.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_zh_TW.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_zh_TW.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SerializerMessages_zh_TW.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/StringToIntTable.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/StringToIntTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/StringToIntTable.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/StringToIntTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SystemIDResolver.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SystemIDResolver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/SystemIDResolver.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/SystemIDResolver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/URI.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/URI.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/URI.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/URI.java
index 0aa1307b620..8af2fd8a1b4 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/URI.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/URI.java
@@ -502,7 +502,7 @@ final class URI
// if we get to this point, we need to resolve relative path
// RFC 2396 5.2 #6
- String path = new String();
+ String path = "";
String basePath = p_base.getPath();
// 6a - get all but the last segment of the base URI path
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/Utils.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/Utils.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/Utils.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/Utils.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/WrappedRuntimeException.java b/jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/WrappedRuntimeException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/utils/WrappedRuntimeException.java
rename to jaxp/src/com/sun/org/apache/xml/internal/serializer/utils/WrappedRuntimeException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/AttList.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/AttList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/AttList.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/AttList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/BoolStack.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/BoolStack.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/BoolStack.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/BoolStack.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/CharKey.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/CharKey.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/CharKey.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/CharKey.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/Constants.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/Constants.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/Constants.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/Constants.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/DOM2Helper.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/DOM2Helper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/DOM2Helper.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/DOM2Helper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/DOMBuilder.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/DOMBuilder.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/DOMBuilder.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/DOMBuilder.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/DOMHelper.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/DOMHelper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/DOMHelper.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/DOMHelper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/DOMOrder.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/DOMOrder.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/DOMOrder.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/DOMOrder.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/DefaultErrorHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/DefaultErrorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/DefaultErrorHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/DefaultErrorHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ElemDesc.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/ElemDesc.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ElemDesc.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/ElemDesc.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/FastStringBuffer.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/FastStringBuffer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/FastStringBuffer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/FastStringBuffer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/Hashtree2Node.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/Hashtree2Node.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/Hashtree2Node.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/Hashtree2Node.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/IntStack.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/IntStack.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/IntStack.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/IntStack.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/IntVector.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/IntVector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/IntVector.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/IntVector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ListingErrorHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/ListingErrorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ListingErrorHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/ListingErrorHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/LocaleUtility.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/LocaleUtility.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/LocaleUtility.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/LocaleUtility.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/MutableAttrListImpl.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/MutableAttrListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/MutableAttrListImpl.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/MutableAttrListImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/NSInfo.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/NSInfo.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/NSInfo.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/NSInfo.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/NameSpace.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/NameSpace.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/NameSpace.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/NameSpace.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/NamespaceSupport2.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/NamespaceSupport2.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/NamespaceSupport2.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/NamespaceSupport2.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/NodeConsumer.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/NodeConsumer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/NodeConsumer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/NodeConsumer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/NodeVector.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/NodeVector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/NodeVector.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/NodeVector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ObjectPool.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/ObjectPool.java
similarity index 86%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ObjectPool.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/ObjectPool.java
index 09a2c2b34f1..fb75bc46dc1 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ObjectPool.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/utils/ObjectPool.java
@@ -22,10 +22,11 @@
*/
package com.sun.org.apache.xml.internal.utils;
-import java.util.Vector;
+import java.util.ArrayList;
import com.sun.org.apache.xml.internal.res.XMLErrorResources;
import com.sun.org.apache.xml.internal.res.XMLMessages;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
/**
@@ -40,9 +41,9 @@ public class ObjectPool implements java.io.Serializable
* @serial */
private final Class objectType;
- /** Vector of given objects this points to.
+ /** Stack of given objects this points to.
* @serial */
- private final Vector freeStack;
+ private final ArrayList freeStack;
/**
* Constructor ObjectPool
@@ -52,7 +53,7 @@ public class ObjectPool implements java.io.Serializable
public ObjectPool(Class type)
{
objectType = type;
- freeStack = new Vector();
+ freeStack = new ArrayList();
}
/**
@@ -64,14 +65,13 @@ public class ObjectPool implements java.io.Serializable
{
try
{
- objectType = ObjectFactory.findProviderClass(
- className, ObjectFactory.findClassLoader(), true);
+ objectType = ObjectFactory.findProviderClass(className, true);
}
catch(ClassNotFoundException cnfe)
{
throw new WrappedRuntimeException(cnfe);
}
- freeStack = new Vector();
+ freeStack = new ArrayList();
}
@@ -85,7 +85,7 @@ public class ObjectPool implements java.io.Serializable
public ObjectPool(Class type, int size)
{
objectType = type;
- freeStack = new Vector(size);
+ freeStack = new ArrayList(size);
}
/**
@@ -95,7 +95,7 @@ public class ObjectPool implements java.io.Serializable
public ObjectPool()
{
objectType = null;
- freeStack = new Vector();
+ freeStack = new ArrayList();
}
/**
@@ -112,10 +112,7 @@ public class ObjectPool implements java.io.Serializable
{
// Remove object from end of free pool.
- Object result = freeStack.lastElement();
-
- freeStack.setSize(freeStack.size() - 1);
-
+ Object result = freeStack.remove(freeStack.size() - 1);
return result;
}
@@ -150,10 +147,7 @@ public class ObjectPool implements java.io.Serializable
{
// Remove object from end of free pool.
- Object result = freeStack.lastElement();
-
- freeStack.setSize(freeStack.size() - 1);
-
+ Object result = freeStack.remove(freeStack.size() - 1);
return result;
}
}
@@ -171,7 +165,7 @@ public class ObjectPool implements java.io.Serializable
// Remove safety. -sb
// if (objectType.isInstance(obj))
// {
- freeStack.addElement(obj);
+ freeStack.add(obj);
// }
// else
// {
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ObjectStack.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/ObjectStack.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ObjectStack.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/ObjectStack.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ObjectVector.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/ObjectVector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ObjectVector.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/ObjectVector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/PrefixResolver.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/PrefixResolver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/PrefixResolver.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/PrefixResolver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/PrefixResolverDefault.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/PrefixResolverDefault.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/PrefixResolverDefault.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/PrefixResolverDefault.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/QName.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/QName.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/QName.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/QName.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/RawCharacterHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/RawCharacterHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/RawCharacterHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/RawCharacterHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SAXSourceLocator.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/SAXSourceLocator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SAXSourceLocator.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/SAXSourceLocator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SerializableLocatorImpl.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/SerializableLocatorImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SerializableLocatorImpl.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/SerializableLocatorImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StopParseException.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/StopParseException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StopParseException.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/StopParseException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringBufferPool.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/StringBufferPool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringBufferPool.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/StringBufferPool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringComparable.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/StringComparable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringComparable.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/StringComparable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringToIntTable.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/StringToIntTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringToIntTable.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/StringToIntTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringToStringTable.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/StringToStringTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringToStringTable.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/StringToStringTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringToStringTableVector.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/StringToStringTableVector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringToStringTableVector.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/StringToStringTableVector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringVector.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/StringVector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StringVector.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/StringVector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StylesheetPIHandler.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/StylesheetPIHandler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/StylesheetPIHandler.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/StylesheetPIHandler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SuballocatedByteVector.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/SuballocatedByteVector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SuballocatedByteVector.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/SuballocatedByteVector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SuballocatedIntVector.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/SuballocatedIntVector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SuballocatedIntVector.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/SuballocatedIntVector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SystemIDResolver.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/SystemIDResolver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SystemIDResolver.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/SystemIDResolver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ThreadControllerWrapper.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/ThreadControllerWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ThreadControllerWrapper.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/ThreadControllerWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/TreeWalker.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/TreeWalker.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/TreeWalker.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/TreeWalker.java
index 3bfc1be10b5..a26a00684ba 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/TreeWalker.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/utils/TreeWalker.java
@@ -153,9 +153,25 @@ public class TreeWalker
*/
public void traverse(Node pos) throws org.xml.sax.SAXException
{
-
this.m_contentHandler.startDocument();
+ traverseFragment(pos);
+
+ this.m_contentHandler.endDocument();
+ }
+
+ /**
+ * Perform a pre-order traversal non-recursive style.
+ *
+ * In contrast to the traverse() method this method will not issue
+ * startDocument() and endDocument() events to the SAX listener.
+ *
+ * @param pos Node in the tree where to start traversal
+ *
+ * @throws TransformerException
+ */
+ public void traverseFragment(Node pos) throws org.xml.sax.SAXException
+ {
Node top = pos;
while (null != pos)
@@ -191,7 +207,6 @@ public class TreeWalker
pos = nextNode;
}
- this.m_contentHandler.endDocument();
}
/**
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/Trie.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/Trie.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/Trie.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/Trie.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/URI.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/URI.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/URI.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/URI.java
index 7ae25793667..b2606a7134e 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/URI.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/utils/URI.java
@@ -522,7 +522,7 @@ public class URI implements Serializable
// if we get to this point, we need to resolve relative path
// RFC 2396 5.2 #6
- String path = new String();
+ String path = "";
String basePath = p_base.getPath();
// 6a - get all but the last segment of the base URI path
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/UnImplNode.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/UnImplNode.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/UnImplNode.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/UnImplNode.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/WrappedRuntimeException.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/WrappedRuntimeException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/WrappedRuntimeException.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/WrappedRuntimeException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/WrongParserException.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/WrongParserException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/WrongParserException.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/WrongParserException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XML11Char.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/XML11Char.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XML11Char.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/XML11Char.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLChar.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/XMLChar.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLChar.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/XMLChar.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLCharacterRecognizer.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/XMLCharacterRecognizer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLCharacterRecognizer.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/XMLCharacterRecognizer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLReaderManager.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/XMLReaderManager.java
similarity index 87%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLReaderManager.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/XMLReaderManager.java
index 4778d9aec6b..20ed918f909 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLReaderManager.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/utils/XMLReaderManager.java
@@ -22,6 +22,8 @@
*/
package com.sun.org.apache.xml.internal.utils;
+import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import java.util.HashMap;
import javax.xml.parsers.FactoryConfigurationError;
@@ -60,6 +62,7 @@ public class XMLReaderManager {
*/
private HashMap m_inUse;
+ private boolean m_useServicesMechanism = true;
/**
* Hidden constructor
*/
@@ -69,7 +72,8 @@ public class XMLReaderManager {
/**
* Retrieves the singleton reader manager
*/
- public static XMLReaderManager getInstance() {
+ public static XMLReaderManager getInstance(boolean useServicesMechanism) {
+ m_singletonManager.setServicesMechnism(useServicesMechanism);
return m_singletonManager;
}
@@ -97,7 +101,7 @@ public class XMLReaderManager {
// instance of the class set in the 'org.xml.sax.driver' property
reader = (XMLReader) m_readers.get();
boolean threadHasReader = (reader != null);
- String factory = SecuritySupport.getInstance().getSystemProperty(property);
+ String factory = SecuritySupport.getSystemProperty(property);
if (threadHasReader && m_inUse.get(reader) != Boolean.TRUE &&
( factory == null || reader.getClass().getName().equals(factory))) {
m_inUse.put(reader, Boolean.TRUE);
@@ -115,7 +119,7 @@ public class XMLReaderManager {
// If unable to create an instance, let's try to use
// the XMLReader from JAXP
if (m_parserFactory == null) {
- m_parserFactory = SAXParserFactory.newInstance();
+ m_parserFactory = FactoryImpl.getSAXFactory(m_useServicesMechanism);
m_parserFactory.setNamespaceAware(true);
}
@@ -163,4 +167,18 @@ public class XMLReaderManager {
m_inUse.remove(reader);
}
}
+ /**
+ * Return the state of the services mechanism feature.
+ */
+ public boolean useServicesMechnism() {
+ return m_useServicesMechanism;
+ }
+
+ /**
+ * Set the state of the services mechanism feature.
+ */
+ public void setServicesMechnism(boolean flag) {
+ m_useServicesMechanism = flag;
+ }
+
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLString.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/XMLString.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLString.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/XMLString.java
index ac96a6b936e..e8de6f35191 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLString.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/utils/XMLString.java
@@ -127,7 +127,7 @@ public interface XMLString
/**
* Compares this string to the specified object.
* The result is true if and only if the argument is not
- * null and is a String object that represents
+ * null and is an XMLString object that represents
* the same sequence of characters as this object.
*
* @param anObject the object to compare this String
@@ -139,6 +139,20 @@ public interface XMLString
*/
public abstract boolean equals(XMLString anObject);
+ /**
+ * Compares this string to the specified String.
+ * The result is true if and only if the argument is not
+ * null and is a String object that represents
+ * the same sequence of characters as this object.
+ *
+ * @param anotherString the object to compare this String
+ * against.
+ * @return true if the Strings are equal;
+ * false otherwise.
+ * @see java.lang.String#compareTo(java.lang.String)
+ * @see java.lang.String#equalsIgnoreCase(java.lang.String)
+ */
+ public abstract boolean equals(String anotherString);
/**
* Compares this string to the specified object.
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLStringDefault.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/XMLStringDefault.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLStringDefault.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/XMLStringDefault.java
index e681aeacea9..3953c863cc4 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLStringDefault.java
+++ b/jaxp/src/com/sun/org/apache/xml/internal/utils/XMLStringDefault.java
@@ -152,6 +152,22 @@ public class XMLStringDefault implements XMLString
}
}
+ /**
+ * Compares this string to the specified String.
+ * The result is true if and only if the argument is not
+ * null and is a String object that represents
+ * the same sequence of characters as this object.
+ *
+ * @param obj2 the object to compare this String against.
+ * @return true if the Strings are equal;
+ * false otherwise.
+ * @see java.lang.String#compareTo(java.lang.String)
+ * @see java.lang.String#equalsIgnoreCase(java.lang.String)
+ */
+ public boolean equals(String obj2) {
+ return m_str.equals(obj2);
+ }
+
/**
* Compares this string to the specified object.
* The result is true if and only if the argument is not
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLStringFactory.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/XMLStringFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLStringFactory.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/XMLStringFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLStringFactoryDefault.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/XMLStringFactoryDefault.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/XMLStringFactoryDefault.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/XMLStringFactoryDefault.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/package.html b/jaxp/src/com/sun/org/apache/xml/internal/utils/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/package.html
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/CharArrayWrapper.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/CharArrayWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/CharArrayWrapper.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/CharArrayWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/IntArrayWrapper.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/IntArrayWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/IntArrayWrapper.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/IntArrayWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/LongArrayWrapper.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/LongArrayWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/LongArrayWrapper.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/LongArrayWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/StringArrayWrapper.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/StringArrayWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/StringArrayWrapper.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/StringArrayWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResourceBundle.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResourceBundle.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResourceBundle.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResourceBundle.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResourceBundleBase.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResourceBundleBase.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResourceBundleBase.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResourceBundleBase.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_de.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_de.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_de.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_de.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_en.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_en.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_en.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_en.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_es.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_es.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_es.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_es.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_fr.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_fr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_fr.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_fr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_it.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_it.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_it.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_it.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_A.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_A.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_A.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_A.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HA.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HA.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HA.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HA.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HI.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HI.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HI.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_HI.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_I.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_I.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_I.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_ja_JP_I.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_ko.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_ko.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_ko.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_ko.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_sv.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_sv.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_sv.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_sv.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_zh_CN.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_zh_CN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_zh_CN.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_zh_CN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_zh_TW.java b/jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_zh_TW.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/res/XResources_zh_TW.java
rename to jaxp/src/com/sun/org/apache/xml/internal/utils/res/XResources_zh_TW.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/Arg.java b/jaxp/src/com/sun/org/apache/xpath/internal/Arg.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/Arg.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/Arg.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/CachedXPathAPI.java b/jaxp/src/com/sun/org/apache/xpath/internal/CachedXPathAPI.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/CachedXPathAPI.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/CachedXPathAPI.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/Expression.java b/jaxp/src/com/sun/org/apache/xpath/internal/Expression.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/Expression.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/Expression.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/ExpressionNode.java b/jaxp/src/com/sun/org/apache/xpath/internal/ExpressionNode.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/ExpressionNode.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/ExpressionNode.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/ExpressionOwner.java b/jaxp/src/com/sun/org/apache/xpath/internal/ExpressionOwner.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/ExpressionOwner.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/ExpressionOwner.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/ExtensionsProvider.java b/jaxp/src/com/sun/org/apache/xpath/internal/ExtensionsProvider.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/ExtensionsProvider.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/ExtensionsProvider.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/FoundIndex.java b/jaxp/src/com/sun/org/apache/xpath/internal/FoundIndex.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/FoundIndex.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/FoundIndex.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/NodeSet.java b/jaxp/src/com/sun/org/apache/xpath/internal/NodeSet.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/NodeSet.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/NodeSet.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/NodeSetDTM.java b/jaxp/src/com/sun/org/apache/xpath/internal/NodeSetDTM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/NodeSetDTM.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/NodeSetDTM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/SourceTree.java b/jaxp/src/com/sun/org/apache/xpath/internal/SourceTree.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/SourceTree.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/SourceTree.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/SourceTreeManager.java b/jaxp/src/com/sun/org/apache/xpath/internal/SourceTreeManager.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/SourceTreeManager.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/SourceTreeManager.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/VariableStack.java b/jaxp/src/com/sun/org/apache/xpath/internal/VariableStack.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/VariableStack.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/VariableStack.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/WhitespaceStrippingElementMatcher.java b/jaxp/src/com/sun/org/apache/xpath/internal/WhitespaceStrippingElementMatcher.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/WhitespaceStrippingElementMatcher.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/WhitespaceStrippingElementMatcher.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPath.java b/jaxp/src/com/sun/org/apache/xpath/internal/XPath.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPath.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/XPath.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathAPI.java b/jaxp/src/com/sun/org/apache/xpath/internal/XPathAPI.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathAPI.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/XPathAPI.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathContext.java b/jaxp/src/com/sun/org/apache/xpath/internal/XPathContext.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathContext.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/XPathContext.java
index eef7347d87f..dc1063e8f3d 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathContext.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/XPathContext.java
@@ -96,6 +96,8 @@ public class XPathContext extends DTMManager // implements ExpressionContext
*/
private boolean m_isSecureProcessing = false;
+ private boolean m_useServicesMechanism = true;
+
/**
* Though XPathContext context extends
* the DTMManager, it really is a proxy for this object, which
@@ -308,13 +310,14 @@ public class XPathContext extends DTMManager // implements ExpressionContext
*/
public XPathContext()
{
- m_prefixResolvers.push(null);
- m_currentNodes.push(DTM.NULL);
- m_currentExpressionNodes.push(DTM.NULL);
- m_saxLocations.push(null);
+ this(true);
}
+ public XPathContext(boolean useServicesMechanism) {
+ init(useServicesMechanism);
+ }
/**
+ **This constructor doesn't seem to be used anywhere -- huizhe wang**
* Create an XPathContext instance.
* @param owner Value that can be retrieved via the getOwnerObject() method.
* @see #getOwnerObject
@@ -326,10 +329,18 @@ public class XPathContext extends DTMManager // implements ExpressionContext
m_ownerGetErrorListener = m_owner.getClass().getMethod("getErrorListener", new Class[] {});
}
catch (NoSuchMethodException nsme) {}
+ init(true);
+ }
+
+ private void init(boolean useServicesMechanism) {
m_prefixResolvers.push(null);
m_currentNodes.push(DTM.NULL);
m_currentExpressionNodes.push(DTM.NULL);
m_saxLocations.push(null);
+ m_useServicesMechanism = useServicesMechanism;
+ m_dtmManager = DTMManager.newInstance(
+ com.sun.org.apache.xpath.internal.objects.XMLStringFactoryImpl.getFactory(),
+ m_useServicesMechanism);
}
/**
@@ -352,7 +363,8 @@ public class XPathContext extends DTMManager // implements ExpressionContext
m_dtmManager = DTMManager.newInstance(
- com.sun.org.apache.xpath.internal.objects.XMLStringFactoryImpl.getFactory());
+ com.sun.org.apache.xpath.internal.objects.XMLStringFactoryImpl.getFactory(),
+ m_useServicesMechanism);
m_saxLocations.removeAllElements();
m_axesIteratorStack.removeAllElements();
@@ -1098,6 +1110,19 @@ public class XPathContext extends DTMManager // implements ExpressionContext
{
return XPathContext.this.getErrorListener();
}
+ /**
+ * Return the state of the services mechanism feature.
+ */
+ public boolean useServicesMechnism() {
+ return m_useServicesMechanism;
+ }
+
+ /**
+ * Set the state of the services mechanism feature.
+ */
+ public void setServicesMechnism(boolean flag) {
+ m_useServicesMechanism = flag;
+ }
/**
* Get the value of a node as a number.
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathException.java b/jaxp/src/com/sun/org/apache/xpath/internal/XPathException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathException.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/XPathException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathFactory.java b/jaxp/src/com/sun/org/apache/xpath/internal/XPathFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathFactory.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/XPathFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathProcessorException.java b/jaxp/src/com/sun/org/apache/xpath/internal/XPathProcessorException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathProcessorException.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/XPathProcessorException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathVisitable.java b/jaxp/src/com/sun/org/apache/xpath/internal/XPathVisitable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathVisitable.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/XPathVisitable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathVisitor.java b/jaxp/src/com/sun/org/apache/xpath/internal/XPathVisitor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/XPathVisitor.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/XPathVisitor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/AttributeIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/AttributeIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/AttributeIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/AttributeIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/AxesWalker.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/AxesWalker.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/AxesWalker.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/AxesWalker.java
index 0369779b9f4..1834264de50 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/AxesWalker.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/axes/AxesWalker.java
@@ -427,7 +427,7 @@ public class AxesWalker extends PredicatedNodeTest
return -1;
}
- walker.setPredicateCount(walker.getPredicateCount() - 1);
+ walker.setPredicateCount(m_predicateIndex);
walker.setNextWalker(null);
walker.setPrevWalker(null);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/BasicTestIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/BasicTestIterator.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/BasicTestIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/BasicTestIterator.java
index 5740affe42f..cbea6db7e0b 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/BasicTestIterator.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/axes/BasicTestIterator.java
@@ -27,6 +27,7 @@ import com.sun.org.apache.xml.internal.dtm.DTMFilter;
import com.sun.org.apache.xml.internal.dtm.DTMIterator;
import com.sun.org.apache.xml.internal.utils.PrefixResolver;
import com.sun.org.apache.xpath.internal.compiler.Compiler;
+import com.sun.org.apache.xpath.internal.compiler.OpMap;
/**
* Base for iterators that handle predicates. Does the basic next
@@ -76,7 +77,7 @@ public abstract class BasicTestIterator extends LocPathIterator
{
super(compiler, opPos, analysis, false);
- int firstStepPos = compiler.getFirstChildPos(opPos);
+ int firstStepPos = OpMap.getFirstChildPos(opPos);
int whatToShow = compiler.getWhatToShow(firstStepPos);
if ((0 == (whatToShow
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/ChildIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/ChildIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/ChildIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/ChildIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/ChildTestIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/ChildTestIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/ChildTestIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/ChildTestIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/ContextNodeList.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/ContextNodeList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/ContextNodeList.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/ContextNodeList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/DescendantIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/DescendantIterator.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/DescendantIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/DescendantIterator.java
index d8990af21ac..729f89d629f 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/DescendantIterator.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/axes/DescendantIterator.java
@@ -31,7 +31,9 @@ import com.sun.org.apache.xpath.internal.Expression;
import com.sun.org.apache.xpath.internal.XPathContext;
import com.sun.org.apache.xpath.internal.compiler.Compiler;
import com.sun.org.apache.xpath.internal.compiler.OpCodes;
+import com.sun.org.apache.xpath.internal.compiler.OpMap;
import com.sun.org.apache.xpath.internal.patterns.NodeTest;
+import org.w3c.dom.DOMException;
/**
* This class implements an optimized iterator for
@@ -57,7 +59,7 @@ public class DescendantIterator extends LocPathIterator
super(compiler, opPos, analysis, false);
- int firstStepPos = compiler.getFirstChildPos(opPos);
+ int firstStepPos = OpMap.getFirstChildPos(opPos);
int stepType = compiler.getOp(firstStepPos);
boolean orSelf = (OpCodes.FROM_DESCENDANTS_OR_SELF == stepType);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/FilterExprIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/FilterExprIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/FilterExprIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/FilterExprIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/FilterExprIteratorSimple.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/FilterExprIteratorSimple.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/FilterExprIteratorSimple.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/FilterExprIteratorSimple.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/FilterExprWalker.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/FilterExprWalker.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/FilterExprWalker.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/FilterExprWalker.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/HasPositionalPredChecker.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/HasPositionalPredChecker.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/HasPositionalPredChecker.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/HasPositionalPredChecker.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/IteratorPool.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/IteratorPool.java
similarity index 81%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/IteratorPool.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/IteratorPool.java
index 4c8094dc7fc..ccaca31daef 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/IteratorPool.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/axes/IteratorPool.java
@@ -22,7 +22,7 @@
*/
package com.sun.org.apache.xpath.internal.axes;
-import java.util.Vector;
+import java.util.ArrayList;
import com.sun.org.apache.xml.internal.dtm.DTMIterator;
import com.sun.org.apache.xml.internal.utils.WrappedRuntimeException;
@@ -31,17 +31,19 @@ import com.sun.org.apache.xml.internal.utils.WrappedRuntimeException;
* Pool of object of a given type to pick from to help memory usage
* @xsl.usage internal
*/
-public class IteratorPool implements java.io.Serializable
+public final class IteratorPool implements java.io.Serializable
{
static final long serialVersionUID = -460927331149566998L;
- /** Type of objects in this pool.
- * @serial */
+ /**
+ * Type of objects in this pool.
+ */
private final DTMIterator m_orig;
- /** Vector of given objects this points to.
- * @serial */
- private final Vector m_freeStack;
+ /**
+ * Stack of given objects this points to.
+ */
+ private final ArrayList m_freeStack;
/**
* Constructor IteratorPool
@@ -51,7 +53,7 @@ public class IteratorPool implements java.io.Serializable
public IteratorPool(DTMIterator original)
{
m_orig = original;
- m_freeStack = new Vector();
+ m_freeStack = new ArrayList();
}
/**
@@ -72,10 +74,7 @@ public class IteratorPool implements java.io.Serializable
else
{
// Remove object from end of free pool.
- DTMIterator result = (DTMIterator)m_freeStack.lastElement();
-
- m_freeStack.setSize(m_freeStack.size() - 1);
-
+ DTMIterator result = (DTMIterator)m_freeStack.remove(m_freeStack.size() - 1);
return result;
}
}
@@ -104,10 +103,7 @@ public class IteratorPool implements java.io.Serializable
else
{
// Remove object from end of free pool.
- DTMIterator result = (DTMIterator)m_freeStack.lastElement();
-
- m_freeStack.setSize(m_freeStack.size() - 1);
-
+ DTMIterator result = (DTMIterator)m_freeStack.remove(m_freeStack.size() - 1);
return result;
}
}
@@ -120,6 +116,6 @@ public class IteratorPool implements java.io.Serializable
*/
public synchronized void freeInstance(DTMIterator obj)
{
- m_freeStack.addElement(obj);
+ m_freeStack.add(obj);
}
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/LocPathIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/LocPathIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/LocPathIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/LocPathIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/MatchPatternIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/MatchPatternIterator.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/MatchPatternIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/MatchPatternIterator.java
index b7e36493afb..edba3a272a4 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/MatchPatternIterator.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/axes/MatchPatternIterator.java
@@ -28,6 +28,7 @@ import com.sun.org.apache.xml.internal.dtm.DTMAxisTraverser;
import com.sun.org.apache.xml.internal.dtm.DTMIterator;
import com.sun.org.apache.xpath.internal.XPathContext;
import com.sun.org.apache.xpath.internal.compiler.Compiler;
+import com.sun.org.apache.xpath.internal.compiler.OpMap;
import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.org.apache.xpath.internal.patterns.NodeTest;
import com.sun.org.apache.xpath.internal.patterns.StepPattern;
@@ -78,7 +79,7 @@ public class MatchPatternIterator extends LocPathIterator
super(compiler, opPos, analysis, false);
- int firstStepPos = compiler.getFirstChildPos(opPos);
+ int firstStepPos = OpMap.getFirstChildPos(opPos);
m_pattern = WalkerFactory.loadSteps(this, compiler, firstStepPos, 0);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/NodeSequence.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/NodeSequence.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/NodeSequence.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/NodeSequence.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/OneStepIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/OneStepIterator.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/OneStepIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/OneStepIterator.java
index 9ec79e873e8..539068498dc 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/OneStepIterator.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/axes/OneStepIterator.java
@@ -29,6 +29,7 @@ import com.sun.org.apache.xml.internal.dtm.DTMIterator;
import com.sun.org.apache.xpath.internal.Expression;
import com.sun.org.apache.xpath.internal.XPathContext;
import com.sun.org.apache.xpath.internal.compiler.Compiler;
+import com.sun.org.apache.xpath.internal.compiler.OpMap;
/**
* This class implements a general iterator for
@@ -58,7 +59,7 @@ public class OneStepIterator extends ChildTestIterator
throws javax.xml.transform.TransformerException
{
super(compiler, opPos, analysis);
- int firstStepPos = compiler.getFirstChildPos(opPos);
+ int firstStepPos = OpMap.getFirstChildPos(opPos);
m_axis = WalkerFactory.getAxisFromStep(compiler, firstStepPos);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/OneStepIteratorForward.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/OneStepIteratorForward.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/OneStepIteratorForward.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/OneStepIteratorForward.java
index eb78eee6591..ea1a8291414 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/OneStepIteratorForward.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/axes/OneStepIteratorForward.java
@@ -26,6 +26,7 @@ import com.sun.org.apache.xml.internal.dtm.DTM;
import com.sun.org.apache.xml.internal.dtm.DTMFilter;
import com.sun.org.apache.xpath.internal.Expression;
import com.sun.org.apache.xpath.internal.compiler.Compiler;
+import com.sun.org.apache.xpath.internal.compiler.OpMap;
/**
* This class implements a general iterator for
@@ -54,7 +55,7 @@ public class OneStepIteratorForward extends ChildTestIterator
throws javax.xml.transform.TransformerException
{
super(compiler, opPos, analysis);
- int firstStepPos = compiler.getFirstChildPos(opPos);
+ int firstStepPos = OpMap.getFirstChildPos(opPos);
m_axis = WalkerFactory.getAxisFromStep(compiler, firstStepPos);
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/PathComponent.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/PathComponent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/PathComponent.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/PathComponent.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/PredicatedNodeTest.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/PredicatedNodeTest.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/PredicatedNodeTest.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/PredicatedNodeTest.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/RTFIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/RTFIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/RTFIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/RTFIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/ReverseAxesWalker.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/ReverseAxesWalker.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/ReverseAxesWalker.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/ReverseAxesWalker.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/SelfIteratorNoPredicate.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/SelfIteratorNoPredicate.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/SelfIteratorNoPredicate.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/SelfIteratorNoPredicate.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/SubContextList.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/SubContextList.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/SubContextList.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/SubContextList.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/UnionChildIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/UnionChildIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/UnionChildIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/UnionChildIterator.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/UnionPathIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/UnionPathIterator.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/UnionPathIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/UnionPathIterator.java
index ee448b06bed..c83f4e5ed7b 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/UnionPathIterator.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/axes/UnionPathIterator.java
@@ -30,6 +30,7 @@ import com.sun.org.apache.xpath.internal.ExpressionOwner;
import com.sun.org.apache.xpath.internal.XPathVisitor;
import com.sun.org.apache.xpath.internal.compiler.Compiler;
import com.sun.org.apache.xpath.internal.compiler.OpCodes;
+import com.sun.org.apache.xpath.internal.compiler.OpMap;
/**
* This class extends NodeSetDTM, which implements DTMIterator,
@@ -160,7 +161,7 @@ public class UnionPathIterator extends LocPathIterator
super();
- opPos = compiler.getFirstChildPos(opPos);
+ opPos = OpMap.getFirstChildPos(opPos);
loadLocationPaths(compiler, opPos, 0);
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/WalkerFactory.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/WalkerFactory.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/WalkerFactory.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/WalkerFactory.java
index d4066908635..2f055354618 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/WalkerFactory.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/axes/WalkerFactory.java
@@ -30,6 +30,7 @@ import com.sun.org.apache.xpath.internal.Expression;
import com.sun.org.apache.xpath.internal.compiler.Compiler;
import com.sun.org.apache.xpath.internal.compiler.FunctionTable;
import com.sun.org.apache.xpath.internal.compiler.OpCodes;
+import com.sun.org.apache.xpath.internal.compiler.OpMap;
import com.sun.org.apache.xpath.internal.objects.XNumber;
import com.sun.org.apache.xpath.internal.patterns.ContextMatchStepPattern;
import com.sun.org.apache.xpath.internal.patterns.FunctionPattern;
@@ -162,7 +163,7 @@ public class WalkerFactory
throws javax.xml.transform.TransformerException
{
- int firstStepPos = compiler.getFirstChildPos(opPos);
+ int firstStepPos = OpMap.getFirstChildPos(opPos);
int analysis = analyze(compiler, firstStepPos, 0);
boolean isOneStep = isOneStep(analysis);
DTMIterator iter;
@@ -402,7 +403,7 @@ public class WalkerFactory
int opPos)
{
int endFunc = opPos + compiler.getOp(opPos + 1) - 1;
- opPos = compiler.getFirstChildPos(opPos);
+ opPos = OpMap.getFirstChildPos(opPos);
int funcID = compiler.getOp(opPos);
// System.out.println("funcID: "+funcID);
// System.out.println("opPos: "+opPos);
@@ -453,7 +454,7 @@ public class WalkerFactory
case OpCodes.OP_LT:
case OpCodes.OP_LTE:
case OpCodes.OP_EQUALS:
- int leftPos = compiler.getFirstChildPos(op);
+ int leftPos = OpMap.getFirstChildPos(op);
int rightPos = compiler.getNextOpPos(leftPos);
isProx = isProximateInnerExpr(compiler, leftPos);
if(isProx)
@@ -521,7 +522,7 @@ public class WalkerFactory
case OpCodes.OP_LT:
case OpCodes.OP_LTE:
case OpCodes.OP_EQUALS:
- int leftPos = compiler.getFirstChildPos(innerExprOpPos);
+ int leftPos = OpMap.getFirstChildPos(innerExprOpPos);
int rightPos = compiler.getNextOpPos(leftPos);
isProx = isProximateInnerExpr(compiler, leftPos);
if(isProx)
@@ -984,9 +985,7 @@ public class WalkerFactory
int stepType = compiler.getOp(opPos);
boolean simpleInit = false;
- int totalNumberWalkers = (analysis & BITS_COUNT);
boolean prevIsOneStepDown = true;
- int firstStepPos = compiler.getFirstChildPos(opPos);
int whatToShow = compiler.getWhatToShow(opPos);
StepPattern ai = null;
@@ -1286,7 +1285,7 @@ public class WalkerFactory
public static String getAnalysisString(int analysis)
{
StringBuffer buf = new StringBuffer();
- buf.append("count: "+getStepCount(analysis)+" ");
+ buf.append("count: ").append(getStepCount(analysis)).append(' ');
if((analysis & BIT_NODETEST_ANY) != 0)
{
buf.append("NTANY|");
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/WalkingIterator.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/WalkingIterator.java
similarity index 98%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/WalkingIterator.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/WalkingIterator.java
index c78fc96bc9b..08502fe68d2 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/WalkingIterator.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/axes/WalkingIterator.java
@@ -29,6 +29,7 @@ import com.sun.org.apache.xpath.internal.ExpressionOwner;
import com.sun.org.apache.xpath.internal.VariableStack;
import com.sun.org.apache.xpath.internal.XPathVisitor;
import com.sun.org.apache.xpath.internal.compiler.Compiler;
+import com.sun.org.apache.xpath.internal.compiler.OpMap;
/**
* Location path iterator that uses Walkers.
@@ -58,7 +59,7 @@ public class WalkingIterator extends LocPathIterator implements ExpressionOwner
{
super(compiler, opPos, analysis, shouldLoadWalkers);
- int firstStepPos = compiler.getFirstChildPos(opPos);
+ int firstStepPos = OpMap.getFirstChildPos(opPos);
if (shouldLoadWalkers)
{
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/WalkingIteratorSorted.java b/jaxp/src/com/sun/org/apache/xpath/internal/axes/WalkingIteratorSorted.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/WalkingIteratorSorted.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/WalkingIteratorSorted.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/package.html b/jaxp/src/com/sun/org/apache/xpath/internal/axes/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/axes/package.html
rename to jaxp/src/com/sun/org/apache/xpath/internal/axes/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/Compiler.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/Compiler.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/Compiler.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/Compiler.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/FuncLoader.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/FuncLoader.java
similarity index 93%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/FuncLoader.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/FuncLoader.java
index 9fa85a59670..683472a423a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/FuncLoader.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/FuncLoader.java
@@ -25,6 +25,8 @@ package com.sun.org.apache.xpath.internal.compiler;
import javax.xml.transform.TransformerException;
import com.sun.org.apache.xpath.internal.functions.Function;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
+import com.sun.org.apache.xalan.internal.utils.ConfigurationError;
/**
* Lazy load of functions into the function table as needed, so we don't
@@ -96,11 +98,10 @@ public class FuncLoader
throw new TransformerException("Application can't install his own xpath function.");
}
- return (Function) ObjectFactory.newInstance(
- className, ObjectFactory.findClassLoader(), true);
+ return (Function) ObjectFactory.newInstance(className, true);
}
- catch (ObjectFactory.ConfigurationError e)
+ catch (ConfigurationError e)
{
throw new TransformerException(e.getException());
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/FunctionTable.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/FunctionTable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/FunctionTable.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/FunctionTable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/Keywords.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/Keywords.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/Keywords.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/Keywords.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/Lexer.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/Lexer.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/Lexer.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/Lexer.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/OpCodes.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/OpCodes.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/OpCodes.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/OpCodes.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/OpMap.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/OpMap.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/OpMap.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/OpMap.java
index 88b4c8bbf3f..f0cfa94c20c 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/OpMap.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/OpMap.java
@@ -242,7 +242,7 @@ public class OpMap
else
{
throw new RuntimeException(
- XSLMessages.createXPATHMessage(XPATHErrorResources.ER_UNKNOWN_STEP, new Object[]{new Integer(stepType).toString()}));
+ XSLMessages.createXPATHMessage(XPATHErrorResources.ER_UNKNOWN_STEP, new Object[]{String.valueOf(stepType)}));
//"Programmer's assertion in getNextStepPos: unknown stepType: " + stepType);
}
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/OpMapVector.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/OpMapVector.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/OpMapVector.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/OpMapVector.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/PsuedoNames.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/PsuedoNames.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/PsuedoNames.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/PsuedoNames.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/XPathDumper.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/XPathDumper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/XPathDumper.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/XPathDumper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/XPathParser.java b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/XPathParser.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/XPathParser.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/XPathParser.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/package.html b/jaxp/src/com/sun/org/apache/xpath/internal/compiler/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/package.html
rename to jaxp/src/com/sun/org/apache/xpath/internal/compiler/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathEvaluatorImpl.java b/jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathEvaluatorImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathEvaluatorImpl.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathEvaluatorImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathExpressionImpl.java b/jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathExpressionImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathExpressionImpl.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathExpressionImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathNSResolverImpl.java b/jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathNSResolverImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathNSResolverImpl.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathNSResolverImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathNamespaceImpl.java b/jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathNamespaceImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathNamespaceImpl.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathNamespaceImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathResultImpl.java b/jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathResultImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathResultImpl.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathResultImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathStylesheetDOM3Exception.java b/jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathStylesheetDOM3Exception.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/XPathStylesheetDOM3Exception.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/domapi/XPathStylesheetDOM3Exception.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/package.html b/jaxp/src/com/sun/org/apache/xpath/internal/domapi/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/domapi/package.html
rename to jaxp/src/com/sun/org/apache/xpath/internal/domapi/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncBoolean.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncBoolean.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncBoolean.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncBoolean.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncCeiling.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncCeiling.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncCeiling.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncCeiling.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncConcat.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncConcat.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncConcat.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncConcat.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncContains.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncContains.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncContains.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncContains.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncCount.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncCount.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncCount.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncCount.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncCurrent.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncCurrent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncCurrent.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncCurrent.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncDoclocation.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncDoclocation.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncDoclocation.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncDoclocation.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncExtElementAvailable.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncExtElementAvailable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncExtElementAvailable.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncExtElementAvailable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncExtFunction.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncExtFunction.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncExtFunction.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncExtFunction.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncExtFunctionAvailable.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncExtFunctionAvailable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncExtFunctionAvailable.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncExtFunctionAvailable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncFalse.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncFalse.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncFalse.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncFalse.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncFloor.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncFloor.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncFloor.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncFloor.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncGenerateId.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncGenerateId.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncGenerateId.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncGenerateId.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncId.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncId.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncId.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncId.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncLang.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncLang.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncLang.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncLang.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncLast.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncLast.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncLast.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncLast.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncLocalPart.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncLocalPart.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncLocalPart.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncLocalPart.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncNamespace.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncNamespace.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncNamespace.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncNamespace.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncNormalizeSpace.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncNormalizeSpace.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncNormalizeSpace.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncNormalizeSpace.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncNot.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncNot.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncNot.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncNot.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncNumber.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncNumber.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncNumber.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncNumber.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncPosition.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncPosition.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncPosition.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncPosition.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncQname.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncQname.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncQname.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncQname.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncRound.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncRound.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncRound.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncRound.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncStartsWith.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncStartsWith.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncStartsWith.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncStartsWith.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncString.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncString.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncString.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncString.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncStringLength.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncStringLength.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncStringLength.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncStringLength.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSubstring.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSubstring.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSubstring.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSubstring.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSubstringAfter.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSubstringAfter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSubstringAfter.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSubstringAfter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSubstringBefore.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSubstringBefore.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSubstringBefore.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSubstringBefore.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSum.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSum.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSum.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSum.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java
index cd0ce3bd1a1..316e2a1b3af 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java
@@ -31,6 +31,8 @@ import com.sun.org.apache.xpath.internal.objects.XNumber;
import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.org.apache.xpath.internal.objects.XString;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
+import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
+import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
/**
* Execute the SystemProperty() function.
@@ -168,9 +170,8 @@ public class FuncSystemProperty extends FunctionOneArg
try
{
// Use SecuritySupport class to provide priveleged access to property file
- SecuritySupport ss = SecuritySupport.getInstance();
- InputStream is = ss.getResourceAsStream(ObjectFactory.findClassLoader(),
+ InputStream is = SecuritySupport.getResourceAsStream(ObjectFactory.findClassLoader(),
file);
// get a buffered version
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncTranslate.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncTranslate.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncTranslate.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncTranslate.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncTrue.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncTrue.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncTrue.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncTrue.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncUnparsedEntityURI.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncUnparsedEntityURI.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FuncUnparsedEntityURI.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FuncUnparsedEntityURI.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/Function.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/Function.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/Function.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/Function.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/Function2Args.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/Function2Args.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/Function2Args.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/Function2Args.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/Function3Args.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/Function3Args.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/Function3Args.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/Function3Args.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FunctionDef1Arg.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FunctionDef1Arg.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FunctionDef1Arg.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FunctionDef1Arg.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FunctionMultiArgs.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FunctionMultiArgs.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FunctionMultiArgs.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FunctionMultiArgs.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FunctionOneArg.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/FunctionOneArg.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/FunctionOneArg.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/FunctionOneArg.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/WrongNumberArgsException.java b/jaxp/src/com/sun/org/apache/xpath/internal/functions/WrongNumberArgsException.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/WrongNumberArgsException.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/WrongNumberArgsException.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/package.html b/jaxp/src/com/sun/org/apache/xpath/internal/functions/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/package.html
rename to jaxp/src/com/sun/org/apache/xpath/internal/functions/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java b/jaxp/src/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/jaxp/JAXPExtensionsProvider.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/JAXPPrefixResolver.java b/jaxp/src/com/sun/org/apache/xpath/internal/jaxp/JAXPPrefixResolver.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/JAXPPrefixResolver.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/jaxp/JAXPPrefixResolver.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/JAXPVariableStack.java b/jaxp/src/com/sun/org/apache/xpath/internal/jaxp/JAXPVariableStack.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/JAXPVariableStack.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/jaxp/JAXPVariableStack.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java b/jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java
index 2168f5057c9..2d7671ee8c7 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathExpressionImpl.java
@@ -29,6 +29,7 @@ import com.sun.org.apache.xml.internal.dtm.DTM;
import com.sun.org.apache.xml.internal.utils.PrefixResolver;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
import com.sun.org.apache.xalan.internal.res.XSLMessages;
+import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
@@ -50,6 +51,7 @@ import org.xml.sax.InputSource;
/**
* The XPathExpression interface encapsulates a (compiled) XPath expression.
*
+ * @version $Revision: 1.10 $
* @author Ramesh Mandava
*/
public class XPathExpressionImpl implements javax.xml.xpath.XPathExpression{
@@ -64,6 +66,7 @@ public class XPathExpressionImpl implements javax.xml.xpath.XPathExpression{
// extensions function need to throw XPathFunctionException
private boolean featureSecureProcessing = false;
+ private boolean useServicesMechanism = true;
/** Protected constructor to prevent direct instantiation; use compile()
* from the context.
*/
@@ -84,12 +87,13 @@ public class XPathExpressionImpl implements javax.xml.xpath.XPathExpression{
JAXPPrefixResolver prefixResolver,
XPathFunctionResolver functionResolver,
XPathVariableResolver variableResolver,
- boolean featureSecureProcessing ) {
+ boolean featureSecureProcessing, boolean useServicesMechanism ) {
this.xpath = xpath;
this.prefixResolver = prefixResolver;
this.functionResolver = functionResolver;
this.variableResolver = variableResolver;
this.featureSecureProcessing = featureSecureProcessing;
+ this.useServicesMechanism = useServicesMechanism;
};
public void setXPath (com.sun.org.apache.xpath.internal.XPath xpath ) {
@@ -286,7 +290,7 @@ public class XPathExpressionImpl implements javax.xml.xpath.XPathExpression{
}
try {
if ( dbf == null ) {
- dbf = DocumentBuilderFactory.newInstance();
+ dbf = FactoryImpl.getDOMFactory(useServicesMechanism);
dbf.setNamespaceAware( true );
dbf.setValidating( false );
}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java b/jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java
similarity index 91%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java
index dfe9a5ed448..7159896c27d 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathFactoryImpl.java
@@ -21,6 +21,7 @@
package com.sun.org.apache.xpath.internal.jaxp;
+import com.sun.org.apache.xalan.internal.XalanConstants;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
import com.sun.org.apache.xalan.internal.res.XSLMessages;
@@ -33,7 +34,7 @@ import javax.xml.xpath.XPathVariableResolver;
/**
* The XPathFactory builds XPaths.
*
- * @version $Revision: 1.9 $
+ * @version $Revision: 1.11 $
* @author Ramesh Mandava
*/
public class XPathFactoryImpl extends XPathFactory {
@@ -64,13 +65,24 @@ public class XPathFactoryImpl extends XPathFactory {
/**
* javax.xml.xpath.XPathFactory implementation.
*/
+
+ private boolean _useServicesMechanism = true;
+
public XPathFactoryImpl() {
+ this(true);
+ }
+
+ public static XPathFactory newXPathFactoryNoServiceLoader() {
+ return new XPathFactoryImpl(false);
+ }
+
+ public XPathFactoryImpl(boolean useServicesMechanism) {
if (System.getSecurityManager() != null) {
_isSecureMode = true;
_isNotSecureProcessing = false;
}
+ this._useServicesMechanism = useServicesMechanism;
}
-
/**
* Is specified object model supported by this
* XPathFactory?
@@ -119,7 +131,7 @@ public class XPathFactoryImpl extends XPathFactory {
public javax.xml.xpath.XPath newXPath() {
return new com.sun.org.apache.xpath.internal.jaxp.XPathImpl(
xPathVariableResolver, xPathFunctionResolver,
- !_isNotSecureProcessing );
+ !_isNotSecureProcessing, _useServicesMechanism );
}
/**
@@ -173,6 +185,12 @@ public class XPathFactoryImpl extends XPathFactory {
// all done processing feature
return;
}
+ if (name.equals(XalanConstants.ORACLE_FEATURE_SERVICE_MECHANISM)) {
+ //in secure mode, let _useServicesMechanism be determined by the constructor
+ if (!_isSecureMode)
+ _useServicesMechanism = value;
+ return;
+ }
// unknown feature
String fmsg = XSLMessages.createXPATHMessage(
@@ -219,7 +237,9 @@ public class XPathFactoryImpl extends XPathFactory {
if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) {
return !_isNotSecureProcessing;
}
-
+ if (name.equals(XalanConstants.ORACLE_FEATURE_SERVICE_MECHANISM)) {
+ return _useServicesMechanism;
+ }
// unknown feature
String fmsg = XSLMessages.createXPATHMessage(
XPATHErrorResources.ER_GETTING_UNKNOWN_FEATURE,
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java b/jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java
similarity index 96%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java
index 914062bbad8..6b8082586b0 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java
@@ -34,9 +34,9 @@ import com.sun.org.apache.xpath.internal.*;
import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
import com.sun.org.apache.xalan.internal.res.XSLMessages;
+import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import org.w3c.dom.Node;
-import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.traversal.NodeIterator;
@@ -53,6 +53,7 @@ import java.io.IOException;
* of an XPath expression.
*
*
+ * @version $Revision: 1.10 $
* @author Ramesh Mandava
*/
public class XPathImpl implements javax.xml.xpath.XPath {
@@ -68,6 +69,7 @@ public class XPathImpl implements javax.xml.xpath.XPath {
// Secure Processing Feature is set on XPathFactory then the invocation of
// extensions function need to throw XPathFunctionException
private boolean featureSecureProcessing = false;
+ private boolean useServiceMechanism = true;
XPathImpl( XPathVariableResolver vr, XPathFunctionResolver fr ) {
this.origVariableResolver = this.variableResolver = vr;
@@ -75,10 +77,11 @@ public class XPathImpl implements javax.xml.xpath.XPath {
}
XPathImpl( XPathVariableResolver vr, XPathFunctionResolver fr,
- boolean featureSecureProcessing ) {
+ boolean featureSecureProcessing, boolean useServiceMechanism ) {
this.origVariableResolver = this.variableResolver = vr;
this.origFunctionResolver = this.functionResolver = fr;
this.featureSecureProcessing = featureSecureProcessing;
+ this.useServiceMechanism = useServiceMechanism;
}
/**
@@ -156,7 +159,7 @@ public class XPathImpl implements javax.xml.xpath.XPath {
private static Document d = null;
- private static DocumentBuilder getParser() {
+ private DocumentBuilder getParser() {
try {
// we'd really like to cache those DocumentBuilders, but we can't because:
// 1. thread safety. parsers are not thread-safe, so at least
@@ -169,7 +172,7 @@ public class XPathImpl implements javax.xml.xpath.XPath {
//
// so we really have to create a fresh DocumentBuilder every time we need one
// - KK
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ DocumentBuilderFactory dbf = FactoryImpl.getDOMFactory(useServiceMechanism);
dbf.setNamespaceAware( true );
dbf.setValidating( false );
return dbf.newDocumentBuilder();
@@ -179,17 +182,6 @@ public class XPathImpl implements javax.xml.xpath.XPath {
}
}
- private static Document getDummyDocument( ) {
- // we don't need synchronization here; even if two threads
- // enter this code at the same time, we just waste a little time
- if(d==null) {
- DOMImplementation dim = getParser().getDOMImplementation();
- d = dim.createDocument("http://java.sun.com/jaxp/xpath",
- "dummyroot", null);
- }
- return d;
- }
-
private XObject eval(String expression, Object contextItem)
throws javax.xml.transform.TransformerException {
@@ -399,7 +391,7 @@ public class XPathImpl implements javax.xml.xpath.XPath {
// Can have errorListener
XPathExpressionImpl ximpl = new XPathExpressionImpl (xpath,
prefixResolver, functionResolver, variableResolver,
- featureSecureProcessing );
+ featureSecureProcessing, useServiceMechanism );
return ximpl;
} catch ( javax.xml.transform.TransformerException te ) {
throw new XPathExpressionException ( te ) ;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/DTMXRTreeFrag.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/DTMXRTreeFrag.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/DTMXRTreeFrag.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/DTMXRTreeFrag.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XBoolean.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XBoolean.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XBoolean.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XBoolean.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XBooleanStatic.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XBooleanStatic.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XBooleanStatic.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XBooleanStatic.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XMLStringFactoryImpl.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XMLStringFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XMLStringFactoryImpl.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XMLStringFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XNodeSet.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XNodeSet.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XNodeSet.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XNodeSet.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XNodeSetForDOM.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XNodeSetForDOM.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XNodeSetForDOM.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XNodeSetForDOM.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XNull.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XNull.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XNull.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XNull.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XNumber.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XNumber.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XNumber.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XNumber.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XObject.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XObject.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XObject.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XObject.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XObjectFactory.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XObjectFactory.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XObjectFactory.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XObjectFactory.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XRTreeFrag.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XRTreeFrag.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XRTreeFrag.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XRTreeFrag.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XRTreeFragSelectWrapper.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XRTreeFragSelectWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XRTreeFragSelectWrapper.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XRTreeFragSelectWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XString.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XString.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XString.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XString.java
index 19db24a6084..0ff2b553eb4 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XString.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XString.java
@@ -321,6 +321,22 @@ public class XString extends XObject implements XMLString
return xstr().equals(obj2.xstr());
}
+ /**
+ * Compares this string to the specified String.
+ * The result is true if and only if the argument is not
+ * null and is a String object that represents
+ * the same sequence of characters as this object.
+ *
+ * @param obj2 the object to compare this String against.
+ * @return true if the Strings are equal;
+ * false otherwise.
+ * @see java.lang.String#compareTo(java.lang.String)
+ * @see java.lang.String#equalsIgnoreCase(java.lang.String)
+ */
+ public boolean equals(String obj2) {
+ return str().equals(obj2);
+ }
+
/**
* Compares this string to the specified object.
* The result is true if and only if the argument is not
@@ -336,11 +352,14 @@ public class XString extends XObject implements XMLString
*/
public boolean equals(XMLString obj2)
{
-
- if (!obj2.hasString())
- return obj2.equals(this);
- else
- return str().equals(obj2.toString());
+ if (obj2 != null) {
+ if (!obj2.hasString()) {
+ return obj2.equals(str());
+ } else {
+ return str().equals(obj2.toString());
+ }
+ }
+ return false;
}
/**
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XStringForChars.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XStringForChars.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XStringForChars.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XStringForChars.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XStringForFSB.java b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XStringForFSB.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XStringForFSB.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/XStringForFSB.java
index 34535d798c2..d631064576a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/XStringForFSB.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/objects/XStringForFSB.java
@@ -979,7 +979,7 @@ public class XStringForFSB extends XString
return Double.NaN;
try {
- return new Double(valueString).doubleValue();
+ return Double.parseDouble(valueString);
} catch (NumberFormatException nfe) {
// This should catch double periods, empty strings.
return Double.NaN;
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/package.html b/jaxp/src/com/sun/org/apache/xpath/internal/objects/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/objects/package.html
rename to jaxp/src/com/sun/org/apache/xpath/internal/objects/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/And.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/And.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/And.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/And.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Bool.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Bool.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Bool.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Bool.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Div.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Div.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Div.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Div.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Equals.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Equals.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Equals.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Equals.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Gt.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Gt.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Gt.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Gt.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Gte.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Gte.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Gte.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Gte.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Lt.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Lt.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Lt.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Lt.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Lte.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Lte.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Lte.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Lte.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Minus.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Minus.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Minus.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Minus.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Mod.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Mod.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Mod.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Mod.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Mult.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Mult.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Mult.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Mult.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Neg.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Neg.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Neg.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Neg.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/NotEquals.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/NotEquals.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/NotEquals.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/NotEquals.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Number.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Number.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Number.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Number.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Operation.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Operation.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Operation.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Operation.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Or.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Or.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Or.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Or.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Plus.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Plus.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Plus.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Plus.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Quo.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Quo.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Quo.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Quo.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/String.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/String.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/String.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/String.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/UnaryOperation.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/UnaryOperation.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/UnaryOperation.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/UnaryOperation.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Variable.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/Variable.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/Variable.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/Variable.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/VariableSafeAbsRef.java b/jaxp/src/com/sun/org/apache/xpath/internal/operations/VariableSafeAbsRef.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/VariableSafeAbsRef.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/VariableSafeAbsRef.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/package.html b/jaxp/src/com/sun/org/apache/xpath/internal/operations/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/operations/package.html
rename to jaxp/src/com/sun/org/apache/xpath/internal/operations/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/package.html b/jaxp/src/com/sun/org/apache/xpath/internal/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/package.html
rename to jaxp/src/com/sun/org/apache/xpath/internal/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/ContextMatchStepPattern.java b/jaxp/src/com/sun/org/apache/xpath/internal/patterns/ContextMatchStepPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/ContextMatchStepPattern.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/patterns/ContextMatchStepPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/FunctionPattern.java b/jaxp/src/com/sun/org/apache/xpath/internal/patterns/FunctionPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/FunctionPattern.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/patterns/FunctionPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/NodeTest.java b/jaxp/src/com/sun/org/apache/xpath/internal/patterns/NodeTest.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/NodeTest.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/patterns/NodeTest.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/NodeTestFilter.java b/jaxp/src/com/sun/org/apache/xpath/internal/patterns/NodeTestFilter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/NodeTestFilter.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/patterns/NodeTestFilter.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/StepPattern.java b/jaxp/src/com/sun/org/apache/xpath/internal/patterns/StepPattern.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/StepPattern.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/patterns/StepPattern.java
index 1290859b8e5..ce4b3af293a 100644
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/StepPattern.java
+++ b/jaxp/src/com/sun/org/apache/xpath/internal/patterns/StepPattern.java
@@ -857,7 +857,7 @@ public class StepPattern extends NodeTest implements SubContextList, ExpressionO
}
else
{
- buf.append("?" + Integer.toHexString(pat.m_whatToShow));
+ buf.append('?').append(Integer.toHexString(pat.m_whatToShow));
}
if (null != pat.m_predicates)
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/UnionPattern.java b/jaxp/src/com/sun/org/apache/xpath/internal/patterns/UnionPattern.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/UnionPattern.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/patterns/UnionPattern.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/package.html b/jaxp/src/com/sun/org/apache/xpath/internal/patterns/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/patterns/package.html
rename to jaxp/src/com/sun/org/apache/xpath/internal/patterns/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_en.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_en.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_en.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_en.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_es.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_es.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_es.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_es.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_fr.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_fr.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_fr.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_fr.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_it.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_it.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_it.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_it.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ja.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ja.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ja.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ja.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ko.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ko.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ko.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ko.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_pt_BR.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_pt_BR.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_pt_BR.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_pt_BR.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_sv.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_sv.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_sv.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_sv.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_CN.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_CN.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_CN.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_CN.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_TW.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_TW.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_TW.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_TW.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHMessages.java b/jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHMessages.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/XPATHMessages.java
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/XPATHMessages.java
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/package.html b/jaxp/src/com/sun/org/apache/xpath/internal/res/package.html
similarity index 100%
rename from jaxp/src/share/classes/com/sun/org/apache/xpath/internal/res/package.html
rename to jaxp/src/com/sun/org/apache/xpath/internal/res/package.html
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/Entity.java b/jaxp/src/com/sun/xml/internal/stream/Entity.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/Entity.java
rename to jaxp/src/com/sun/xml/internal/stream/Entity.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/EventFilterSupport.java b/jaxp/src/com/sun/xml/internal/stream/EventFilterSupport.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/EventFilterSupport.java
rename to jaxp/src/com/sun/xml/internal/stream/EventFilterSupport.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/StaxEntityResolverWrapper.java b/jaxp/src/com/sun/xml/internal/stream/StaxEntityResolverWrapper.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/StaxEntityResolverWrapper.java
rename to jaxp/src/com/sun/xml/internal/stream/StaxEntityResolverWrapper.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/StaxErrorReporter.java b/jaxp/src/com/sun/xml/internal/stream/StaxErrorReporter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/StaxErrorReporter.java
rename to jaxp/src/com/sun/xml/internal/stream/StaxErrorReporter.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/StaxXMLInputSource.java b/jaxp/src/com/sun/xml/internal/stream/StaxXMLInputSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/StaxXMLInputSource.java
rename to jaxp/src/com/sun/xml/internal/stream/StaxXMLInputSource.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/XMLBufferListener.java b/jaxp/src/com/sun/xml/internal/stream/XMLBufferListener.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/XMLBufferListener.java
rename to jaxp/src/com/sun/xml/internal/stream/XMLBufferListener.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/XMLEntityReader.java b/jaxp/src/com/sun/xml/internal/stream/XMLEntityReader.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/XMLEntityReader.java
rename to jaxp/src/com/sun/xml/internal/stream/XMLEntityReader.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/XMLEntityStorage.java b/jaxp/src/com/sun/xml/internal/stream/XMLEntityStorage.java
similarity index 97%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/XMLEntityStorage.java
rename to jaxp/src/com/sun/xml/internal/stream/XMLEntityStorage.java
index fd85c30fdd2..8343d9bba85 100644
--- a/jaxp/src/share/classes/com/sun/xml/internal/stream/XMLEntityStorage.java
+++ b/jaxp/src/com/sun/xml/internal/stream/XMLEntityStorage.java
@@ -36,6 +36,7 @@ import com.sun.org.apache.xerces.internal.impl.XMLEntityManager;
import com.sun.org.apache.xerces.internal.impl.PropertyManager;
import com.sun.org.apache.xerces.internal.impl.XMLErrorReporter;
import com.sun.org.apache.xerces.internal.impl.Constants;
+import java.util.Enumeration;
/**
*
@@ -129,19 +130,27 @@ public class XMLEntityStorage {
} // reset(XMLComponentManager)
/**
- * Returns the hashtable of declared entities.
- *
- * REVISIT:
- * This should be done the "right" way by designing a better way to
- * enumerate the declared entities. For now, this method is needed
- * by the constructor that takes an XMLEntityManager parameter.
- * XXX Making this method public, return all the declared entities.
- * @return Hashtable hastable containing all the declared entities.
+ * Returns entity declaration.
+ *
+ * @param name The name of the entity.
+ *
+ * @see SymbolTable
*/
- public Hashtable getDeclaredEntities() {
- return fEntities;
- } // getDeclaredEntities():Hashtable
+ public Entity getEntity(String name) {
+ return (Entity)fEntities.get(name);
+ } // getEntity(String)
+ public boolean hasEntities() {
+ return (fEntities!=null);
+ } // getEntity(String)
+
+ public int getEntitySize() {
+ return fEntities.size();
+ } // getEntity(String)
+
+ public Enumeration getEntityKeys() {
+ return fEntities.keys();
+ }
/**
* Adds an internal entity declaration.
*
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/XMLEventReaderImpl.java b/jaxp/src/com/sun/xml/internal/stream/XMLEventReaderImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/XMLEventReaderImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/XMLEventReaderImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/XMLInputFactoryImpl.java b/jaxp/src/com/sun/xml/internal/stream/XMLInputFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/XMLInputFactoryImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/XMLInputFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/XMLOutputFactoryImpl.java b/jaxp/src/com/sun/xml/internal/stream/XMLOutputFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/XMLOutputFactoryImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/XMLOutputFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/DTDGrammarUtil.java b/jaxp/src/com/sun/xml/internal/stream/dtd/DTDGrammarUtil.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/DTDGrammarUtil.java
rename to jaxp/src/com/sun/xml/internal/stream/dtd/DTDGrammarUtil.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/nonvalidating/DTDGrammar.java b/jaxp/src/com/sun/xml/internal/stream/dtd/nonvalidating/DTDGrammar.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/nonvalidating/DTDGrammar.java
rename to jaxp/src/com/sun/xml/internal/stream/dtd/nonvalidating/DTDGrammar.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/nonvalidating/XMLAttributeDecl.java b/jaxp/src/com/sun/xml/internal/stream/dtd/nonvalidating/XMLAttributeDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/nonvalidating/XMLAttributeDecl.java
rename to jaxp/src/com/sun/xml/internal/stream/dtd/nonvalidating/XMLAttributeDecl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/nonvalidating/XMLElementDecl.java b/jaxp/src/com/sun/xml/internal/stream/dtd/nonvalidating/XMLElementDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/nonvalidating/XMLElementDecl.java
rename to jaxp/src/com/sun/xml/internal/stream/dtd/nonvalidating/XMLElementDecl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/nonvalidating/XMLNotationDecl.java b/jaxp/src/com/sun/xml/internal/stream/dtd/nonvalidating/XMLNotationDecl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/nonvalidating/XMLNotationDecl.java
rename to jaxp/src/com/sun/xml/internal/stream/dtd/nonvalidating/XMLNotationDecl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/nonvalidating/XMLSimpleType.java b/jaxp/src/com/sun/xml/internal/stream/dtd/nonvalidating/XMLSimpleType.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/dtd/nonvalidating/XMLSimpleType.java
rename to jaxp/src/com/sun/xml/internal/stream/dtd/nonvalidating/XMLSimpleType.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/AttributeImpl.java b/jaxp/src/com/sun/xml/internal/stream/events/AttributeImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/AttributeImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/events/AttributeImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/CharacterEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/CharacterEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/CharacterEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/CharacterEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/CommentEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/CommentEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/CommentEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/CommentEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/DTDEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/DTDEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/DTDEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/DTDEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/DummyEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/DummyEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/DummyEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/DummyEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/EndDocumentEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/EndDocumentEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/EndDocumentEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/EndDocumentEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/EndElementEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/EndElementEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/EndElementEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/EndElementEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/EntityDeclarationImpl.java b/jaxp/src/com/sun/xml/internal/stream/events/EntityDeclarationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/EntityDeclarationImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/events/EntityDeclarationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/EntityReferenceEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/EntityReferenceEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/EntityReferenceEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/EntityReferenceEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/LocationImpl.java b/jaxp/src/com/sun/xml/internal/stream/events/LocationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/LocationImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/events/LocationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/NamedEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/NamedEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/NamedEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/NamedEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/NamespaceImpl.java b/jaxp/src/com/sun/xml/internal/stream/events/NamespaceImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/NamespaceImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/events/NamespaceImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/NotationDeclarationImpl.java b/jaxp/src/com/sun/xml/internal/stream/events/NotationDeclarationImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/NotationDeclarationImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/events/NotationDeclarationImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/ProcessingInstructionEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/ProcessingInstructionEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/ProcessingInstructionEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/ProcessingInstructionEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/StartDocumentEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/StartDocumentEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/StartDocumentEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/StartDocumentEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/StartElementEvent.java b/jaxp/src/com/sun/xml/internal/stream/events/StartElementEvent.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/StartElementEvent.java
rename to jaxp/src/com/sun/xml/internal/stream/events/StartElementEvent.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/XMLEventAllocatorImpl.java b/jaxp/src/com/sun/xml/internal/stream/events/XMLEventAllocatorImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/XMLEventAllocatorImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/events/XMLEventAllocatorImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/events/XMLEventFactoryImpl.java b/jaxp/src/com/sun/xml/internal/stream/events/XMLEventFactoryImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/events/XMLEventFactoryImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/events/XMLEventFactoryImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/javax.xml.stream.XMLEventFactory b/jaxp/src/com/sun/xml/internal/stream/javax.xml.stream.XMLEventFactory
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/javax.xml.stream.XMLEventFactory
rename to jaxp/src/com/sun/xml/internal/stream/javax.xml.stream.XMLEventFactory
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/javax.xml.stream.XMLInputFactory b/jaxp/src/com/sun/xml/internal/stream/javax.xml.stream.XMLInputFactory
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/javax.xml.stream.XMLInputFactory
rename to jaxp/src/com/sun/xml/internal/stream/javax.xml.stream.XMLInputFactory
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/javax.xml.stream.XMLOutputFactory b/jaxp/src/com/sun/xml/internal/stream/javax.xml.stream.XMLOutputFactory
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/javax.xml.stream.XMLOutputFactory
rename to jaxp/src/com/sun/xml/internal/stream/javax.xml.stream.XMLOutputFactory
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/util/BufferAllocator.java b/jaxp/src/com/sun/xml/internal/stream/util/BufferAllocator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/util/BufferAllocator.java
rename to jaxp/src/com/sun/xml/internal/stream/util/BufferAllocator.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/util/ReadOnlyIterator.java b/jaxp/src/com/sun/xml/internal/stream/util/ReadOnlyIterator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/util/ReadOnlyIterator.java
rename to jaxp/src/com/sun/xml/internal/stream/util/ReadOnlyIterator.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/util/ThreadLocalBufferAllocator.java b/jaxp/src/com/sun/xml/internal/stream/util/ThreadLocalBufferAllocator.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/util/ThreadLocalBufferAllocator.java
rename to jaxp/src/com/sun/xml/internal/stream/util/ThreadLocalBufferAllocator.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/writers/UTF8OutputStreamWriter.java b/jaxp/src/com/sun/xml/internal/stream/writers/UTF8OutputStreamWriter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/writers/UTF8OutputStreamWriter.java
rename to jaxp/src/com/sun/xml/internal/stream/writers/UTF8OutputStreamWriter.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/writers/WriterUtility.java b/jaxp/src/com/sun/xml/internal/stream/writers/WriterUtility.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/writers/WriterUtility.java
rename to jaxp/src/com/sun/xml/internal/stream/writers/WriterUtility.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java b/jaxp/src/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLEventWriterImpl.java b/jaxp/src/com/sun/xml/internal/stream/writers/XMLEventWriterImpl.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLEventWriterImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/writers/XMLEventWriterImpl.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLOutputSource.java b/jaxp/src/com/sun/xml/internal/stream/writers/XMLOutputSource.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLOutputSource.java
rename to jaxp/src/com/sun/xml/internal/stream/writers/XMLOutputSource.java
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java b/jaxp/src/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java
similarity index 99%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java
rename to jaxp/src/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java
index 1aaf5191610..30bee23582c 100644
--- a/jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java
+++ b/jaxp/src/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java
@@ -233,6 +233,7 @@ public final class XMLStreamWriterImpl extends AbstractMap implements XMLStreamW
fPrefixGen = new Random();
fAttributeCache = new ArrayList();
fInternalNamespaceContext = new NamespaceSupport();
+ fInternalNamespaceContext.reset();
fNamespaceContext = new NamespaceContextImpl();
fNamespaceContext.internalContext = fInternalNamespaceContext;
@@ -383,6 +384,8 @@ public final class XMLStreamWriterImpl extends AbstractMap implements XMLStreamW
fElementStack.clear();
fInternalNamespaceContext.reset();
fReuse = true;
+ fStartTagOpened = false;
+ fNamespaceContext.userContext = null;
}
/**
diff --git a/jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLWriter.java b/jaxp/src/com/sun/xml/internal/stream/writers/XMLWriter.java
similarity index 100%
rename from jaxp/src/share/classes/com/sun/xml/internal/stream/writers/XMLWriter.java
rename to jaxp/src/com/sun/xml/internal/stream/writers/XMLWriter.java
diff --git a/jaxp/src/share/classes/javax/xml/XMLConstants.java b/jaxp/src/javax/xml/XMLConstants.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/XMLConstants.java
rename to jaxp/src/javax/xml/XMLConstants.java
diff --git a/jaxp/src/share/classes/javax/xml/datatype/DatatypeConfigurationException.java b/jaxp/src/javax/xml/datatype/DatatypeConfigurationException.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/datatype/DatatypeConfigurationException.java
rename to jaxp/src/javax/xml/datatype/DatatypeConfigurationException.java
diff --git a/jaxp/src/share/classes/javax/xml/datatype/DatatypeConstants.java b/jaxp/src/javax/xml/datatype/DatatypeConstants.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/datatype/DatatypeConstants.java
rename to jaxp/src/javax/xml/datatype/DatatypeConstants.java
diff --git a/jaxp/src/share/classes/javax/xml/datatype/DatatypeFactory.java b/jaxp/src/javax/xml/datatype/DatatypeFactory.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/datatype/DatatypeFactory.java
rename to jaxp/src/javax/xml/datatype/DatatypeFactory.java
diff --git a/jaxp/src/share/classes/javax/xml/datatype/Duration.java b/jaxp/src/javax/xml/datatype/Duration.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/datatype/Duration.java
rename to jaxp/src/javax/xml/datatype/Duration.java
diff --git a/jaxp/src/share/classes/javax/xml/datatype/FactoryFinder.java b/jaxp/src/javax/xml/datatype/FactoryFinder.java
similarity index 99%
rename from jaxp/src/share/classes/javax/xml/datatype/FactoryFinder.java
rename to jaxp/src/javax/xml/datatype/FactoryFinder.java
index 82bdabf1260..37811e6fad9 100644
--- a/jaxp/src/share/classes/javax/xml/datatype/FactoryFinder.java
+++ b/jaxp/src/javax/xml/datatype/FactoryFinder.java
@@ -59,7 +59,7 @@ class FactoryFinder {
* Flag indicating if properties from java.home/lib/jaxp.properties
* have been cached.
*/
- static boolean firstTime = true;
+ static volatile boolean firstTime = true;
/**
* Security support class use to check access control before
diff --git a/jaxp/src/share/classes/javax/xml/datatype/SecuritySupport.java b/jaxp/src/javax/xml/datatype/SecuritySupport.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/datatype/SecuritySupport.java
rename to jaxp/src/javax/xml/datatype/SecuritySupport.java
diff --git a/jaxp/src/share/classes/javax/xml/datatype/XMLGregorianCalendar.java b/jaxp/src/javax/xml/datatype/XMLGregorianCalendar.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/datatype/XMLGregorianCalendar.java
rename to jaxp/src/javax/xml/datatype/XMLGregorianCalendar.java
diff --git a/jaxp/src/share/classes/javax/xml/datatype/package.html b/jaxp/src/javax/xml/datatype/package.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/datatype/package.html
rename to jaxp/src/javax/xml/datatype/package.html
diff --git a/jaxp/src/share/classes/javax/xml/namespace/NamespaceContext.java b/jaxp/src/javax/xml/namespace/NamespaceContext.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/namespace/NamespaceContext.java
rename to jaxp/src/javax/xml/namespace/NamespaceContext.java
diff --git a/jaxp/src/share/classes/javax/xml/namespace/QName.java b/jaxp/src/javax/xml/namespace/QName.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/namespace/QName.java
rename to jaxp/src/javax/xml/namespace/QName.java
diff --git a/jaxp/src/share/classes/javax/xml/namespace/package.html b/jaxp/src/javax/xml/namespace/package.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/namespace/package.html
rename to jaxp/src/javax/xml/namespace/package.html
diff --git a/jaxp/src/share/classes/javax/xml/parsers/DocumentBuilder.java b/jaxp/src/javax/xml/parsers/DocumentBuilder.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/parsers/DocumentBuilder.java
rename to jaxp/src/javax/xml/parsers/DocumentBuilder.java
diff --git a/jaxp/src/share/classes/javax/xml/parsers/DocumentBuilderFactory.java b/jaxp/src/javax/xml/parsers/DocumentBuilderFactory.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/parsers/DocumentBuilderFactory.java
rename to jaxp/src/javax/xml/parsers/DocumentBuilderFactory.java
diff --git a/jaxp/src/share/classes/javax/xml/parsers/FactoryConfigurationError.java b/jaxp/src/javax/xml/parsers/FactoryConfigurationError.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/parsers/FactoryConfigurationError.java
rename to jaxp/src/javax/xml/parsers/FactoryConfigurationError.java
diff --git a/jaxp/src/share/classes/javax/xml/parsers/FactoryFinder.java b/jaxp/src/javax/xml/parsers/FactoryFinder.java
similarity index 83%
rename from jaxp/src/share/classes/javax/xml/parsers/FactoryFinder.java
rename to jaxp/src/javax/xml/parsers/FactoryFinder.java
index 8076ad86564..43a6e020ac7 100644
--- a/jaxp/src/share/classes/javax/xml/parsers/FactoryFinder.java
+++ b/jaxp/src/javax/xml/parsers/FactoryFinder.java
@@ -25,15 +25,12 @@
package javax.xml.parsers;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
import java.io.BufferedReader;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.net.URL;
+import java.util.Properties;
/**
*
Implements pluggable Datatypes.
@@ -42,6 +39,7 @@ import java.net.URL;
* sync. It is package private for secure class loading.
*
* @author Santiago.PericasGeertsen@sun.com
+ * @author Huizhe.Wang@oracle.com
*/
class FactoryFinder {
@@ -59,7 +57,7 @@ class FactoryFinder {
* Flag indicating if properties from java.home/lib/jaxp.properties
* have been cached.
*/
- static boolean firstTime = true;
+ static volatile boolean firstTime = true;
/**
* Security support class use to check access control before
@@ -95,18 +93,24 @@ class FactoryFinder {
* If the class loader supplied is null, first try using the
* context class loader followed by the current (i.e. bootstrap) class
* loader.
+ *
+ * Use bootstrap classLoader if cl = null and useBSClsLoader is true
*/
static private Class getProviderClass(String className, ClassLoader cl,
- boolean doFallback) throws ClassNotFoundException
+ boolean doFallback, boolean useBSClsLoader) throws ClassNotFoundException
{
try {
if (cl == null) {
- cl = ss.getContextClassLoader();
- if (cl == null) {
- throw new ClassNotFoundException();
- }
- else {
- return cl.loadClass(className);
+ if (useBSClsLoader) {
+ return Class.forName(className, true, FactoryFinder.class.getClassLoader());
+ } else {
+ cl = ss.getContextClassLoader();
+ if (cl == null) {
+ throw new ClassNotFoundException();
+ }
+ else {
+ return cl.loadClass(className);
+ }
}
}
else {
@@ -131,17 +135,39 @@ class FactoryFinder {
* @param className Name of the concrete class corresponding to the
* service provider
*
- * @param cl ClassLoader to use to load the class, null means to use
- * the bootstrap ClassLoader
+ * @param cl ClassLoader used to load the factory class. If null
+ * current Thread's context classLoader is used to load the factory class.
*
* @param doFallback True if the current ClassLoader should be tried as
* a fallback if the class is not found using cl
*/
static Object newInstance(String className, ClassLoader cl, boolean doFallback)
throws ConfigurationError
+ {
+ return newInstance(className, cl, doFallback, false);
+ }
+
+ /**
+ * Create an instance of a class. Delegates to method
+ * getProviderClass() in order to load the class.
+ *
+ * @param className Name of the concrete class corresponding to the
+ * service provider
+ *
+ * @param cl ClassLoader used to load the factory class. If null
+ * current Thread's context classLoader is used to load the factory class.
+ *
+ * @param doFallback True if the current ClassLoader should be tried as
+ * a fallback if the class is not found using cl
+ *
+ * @param useBSClsLoader True if cl=null actually meant bootstrap classLoader. This parameter
+ * is needed since DocumentBuilderFactory/SAXParserFactory defined null as context classLoader.
+ */
+ static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader)
+ throws ConfigurationError
{
try {
- Class providerClass = getProviderClass(className, cl, doFallback);
+ Class providerClass = getProviderClass(className, cl, doFallback, useBSClsLoader);
Object instance = providerClass.newInstance();
if (debug) { // Extra check to avoid computing cl strings
dPrint("created new instance of " + providerClass +
@@ -244,6 +270,7 @@ class FactoryFinder {
// First try the Context ClassLoader
ClassLoader cl = ss.getContextClassLoader();
+ boolean useBSClsLoader = false;
if (cl != null) {
is = ss.getResourceAsStream(cl, serviceId);
@@ -251,11 +278,13 @@ class FactoryFinder {
if (is == null) {
cl = FactoryFinder.class.getClassLoader();
is = ss.getResourceAsStream(cl, serviceId);
+ useBSClsLoader = true;
}
} else {
// No Context ClassLoader, try the current ClassLoader
cl = FactoryFinder.class.getClassLoader();
is = ss.getResourceAsStream(cl, serviceId);
+ useBSClsLoader = true;
}
if (is == null) {
@@ -293,7 +322,7 @@ class FactoryFinder {
// ClassLoader because we want to avoid the case where the
// resource file was found using one ClassLoader and the
// provider class was instantiated using a different one.
- return newInstance(factoryClassName, cl, false);
+ return newInstance(factoryClassName, cl, false, useBSClsLoader);
}
// No provider found
diff --git a/jaxp/src/share/classes/javax/xml/parsers/ParserConfigurationException.java b/jaxp/src/javax/xml/parsers/ParserConfigurationException.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/parsers/ParserConfigurationException.java
rename to jaxp/src/javax/xml/parsers/ParserConfigurationException.java
diff --git a/jaxp/src/share/classes/javax/xml/parsers/SAXParser.java b/jaxp/src/javax/xml/parsers/SAXParser.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/parsers/SAXParser.java
rename to jaxp/src/javax/xml/parsers/SAXParser.java
diff --git a/jaxp/src/share/classes/javax/xml/parsers/SAXParserFactory.java b/jaxp/src/javax/xml/parsers/SAXParserFactory.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/parsers/SAXParserFactory.java
rename to jaxp/src/javax/xml/parsers/SAXParserFactory.java
diff --git a/jaxp/src/share/classes/javax/xml/parsers/SecuritySupport.java b/jaxp/src/javax/xml/parsers/SecuritySupport.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/parsers/SecuritySupport.java
rename to jaxp/src/javax/xml/parsers/SecuritySupport.java
diff --git a/jaxp/src/share/classes/javax/xml/parsers/package.html b/jaxp/src/javax/xml/parsers/package.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/parsers/package.html
rename to jaxp/src/javax/xml/parsers/package.html
diff --git a/jaxp/src/share/classes/javax/xml/stream/EventFilter.java b/jaxp/src/javax/xml/stream/EventFilter.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/EventFilter.java
rename to jaxp/src/javax/xml/stream/EventFilter.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/FactoryConfigurationError.java b/jaxp/src/javax/xml/stream/FactoryConfigurationError.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/FactoryConfigurationError.java
rename to jaxp/src/javax/xml/stream/FactoryConfigurationError.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/FactoryFinder.java b/jaxp/src/javax/xml/stream/FactoryFinder.java
similarity index 99%
rename from jaxp/src/share/classes/javax/xml/stream/FactoryFinder.java
rename to jaxp/src/javax/xml/stream/FactoryFinder.java
index b35eef8dbe9..a2491ac8c59 100644
--- a/jaxp/src/share/classes/javax/xml/stream/FactoryFinder.java
+++ b/jaxp/src/javax/xml/stream/FactoryFinder.java
@@ -58,7 +58,7 @@ class FactoryFinder {
* Flag indicating if properties from java.home/lib/jaxp.properties
* have been cached.
*/
- static boolean firstTime = true;
+ static volatile boolean firstTime = true;
/**
* Security support class use to check access control before
diff --git a/jaxp/src/share/classes/javax/xml/stream/Location.java b/jaxp/src/javax/xml/stream/Location.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/Location.java
rename to jaxp/src/javax/xml/stream/Location.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/SecuritySupport.java b/jaxp/src/javax/xml/stream/SecuritySupport.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/SecuritySupport.java
rename to jaxp/src/javax/xml/stream/SecuritySupport.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/StreamFilter.java b/jaxp/src/javax/xml/stream/StreamFilter.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/StreamFilter.java
rename to jaxp/src/javax/xml/stream/StreamFilter.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLEventFactory.java b/jaxp/src/javax/xml/stream/XMLEventFactory.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLEventFactory.java
rename to jaxp/src/javax/xml/stream/XMLEventFactory.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLEventReader.java b/jaxp/src/javax/xml/stream/XMLEventReader.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLEventReader.java
rename to jaxp/src/javax/xml/stream/XMLEventReader.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLEventWriter.java b/jaxp/src/javax/xml/stream/XMLEventWriter.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLEventWriter.java
rename to jaxp/src/javax/xml/stream/XMLEventWriter.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLInputFactory.java b/jaxp/src/javax/xml/stream/XMLInputFactory.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLInputFactory.java
rename to jaxp/src/javax/xml/stream/XMLInputFactory.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLOutputFactory.java b/jaxp/src/javax/xml/stream/XMLOutputFactory.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLOutputFactory.java
rename to jaxp/src/javax/xml/stream/XMLOutputFactory.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLReporter.java b/jaxp/src/javax/xml/stream/XMLReporter.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLReporter.java
rename to jaxp/src/javax/xml/stream/XMLReporter.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLResolver.java b/jaxp/src/javax/xml/stream/XMLResolver.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLResolver.java
rename to jaxp/src/javax/xml/stream/XMLResolver.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLStreamConstants.java b/jaxp/src/javax/xml/stream/XMLStreamConstants.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLStreamConstants.java
rename to jaxp/src/javax/xml/stream/XMLStreamConstants.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLStreamException.java b/jaxp/src/javax/xml/stream/XMLStreamException.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLStreamException.java
rename to jaxp/src/javax/xml/stream/XMLStreamException.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLStreamReader.java b/jaxp/src/javax/xml/stream/XMLStreamReader.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLStreamReader.java
rename to jaxp/src/javax/xml/stream/XMLStreamReader.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/XMLStreamWriter.java b/jaxp/src/javax/xml/stream/XMLStreamWriter.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/XMLStreamWriter.java
rename to jaxp/src/javax/xml/stream/XMLStreamWriter.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/Attribute.java b/jaxp/src/javax/xml/stream/events/Attribute.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/Attribute.java
rename to jaxp/src/javax/xml/stream/events/Attribute.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/Characters.java b/jaxp/src/javax/xml/stream/events/Characters.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/Characters.java
rename to jaxp/src/javax/xml/stream/events/Characters.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/Comment.java b/jaxp/src/javax/xml/stream/events/Comment.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/Comment.java
rename to jaxp/src/javax/xml/stream/events/Comment.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/DTD.java b/jaxp/src/javax/xml/stream/events/DTD.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/DTD.java
rename to jaxp/src/javax/xml/stream/events/DTD.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/EndDocument.java b/jaxp/src/javax/xml/stream/events/EndDocument.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/EndDocument.java
rename to jaxp/src/javax/xml/stream/events/EndDocument.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/EndElement.java b/jaxp/src/javax/xml/stream/events/EndElement.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/EndElement.java
rename to jaxp/src/javax/xml/stream/events/EndElement.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/EntityDeclaration.java b/jaxp/src/javax/xml/stream/events/EntityDeclaration.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/EntityDeclaration.java
rename to jaxp/src/javax/xml/stream/events/EntityDeclaration.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/EntityReference.java b/jaxp/src/javax/xml/stream/events/EntityReference.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/EntityReference.java
rename to jaxp/src/javax/xml/stream/events/EntityReference.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/Namespace.java b/jaxp/src/javax/xml/stream/events/Namespace.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/Namespace.java
rename to jaxp/src/javax/xml/stream/events/Namespace.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/NotationDeclaration.java b/jaxp/src/javax/xml/stream/events/NotationDeclaration.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/NotationDeclaration.java
rename to jaxp/src/javax/xml/stream/events/NotationDeclaration.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/ProcessingInstruction.java b/jaxp/src/javax/xml/stream/events/ProcessingInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/ProcessingInstruction.java
rename to jaxp/src/javax/xml/stream/events/ProcessingInstruction.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/StartDocument.java b/jaxp/src/javax/xml/stream/events/StartDocument.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/StartDocument.java
rename to jaxp/src/javax/xml/stream/events/StartDocument.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/StartElement.java b/jaxp/src/javax/xml/stream/events/StartElement.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/StartElement.java
rename to jaxp/src/javax/xml/stream/events/StartElement.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/events/XMLEvent.java b/jaxp/src/javax/xml/stream/events/XMLEvent.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/events/XMLEvent.java
rename to jaxp/src/javax/xml/stream/events/XMLEvent.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/util/EventReaderDelegate.java b/jaxp/src/javax/xml/stream/util/EventReaderDelegate.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/util/EventReaderDelegate.java
rename to jaxp/src/javax/xml/stream/util/EventReaderDelegate.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/util/StreamReaderDelegate.java b/jaxp/src/javax/xml/stream/util/StreamReaderDelegate.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/util/StreamReaderDelegate.java
rename to jaxp/src/javax/xml/stream/util/StreamReaderDelegate.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/util/XMLEventAllocator.java b/jaxp/src/javax/xml/stream/util/XMLEventAllocator.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/util/XMLEventAllocator.java
rename to jaxp/src/javax/xml/stream/util/XMLEventAllocator.java
diff --git a/jaxp/src/share/classes/javax/xml/stream/util/XMLEventConsumer.java b/jaxp/src/javax/xml/stream/util/XMLEventConsumer.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/stream/util/XMLEventConsumer.java
rename to jaxp/src/javax/xml/stream/util/XMLEventConsumer.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/ErrorListener.java b/jaxp/src/javax/xml/transform/ErrorListener.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/ErrorListener.java
rename to jaxp/src/javax/xml/transform/ErrorListener.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/FactoryFinder.java b/jaxp/src/javax/xml/transform/FactoryFinder.java
similarity index 74%
rename from jaxp/src/share/classes/javax/xml/transform/FactoryFinder.java
rename to jaxp/src/javax/xml/transform/FactoryFinder.java
index bf3b48d9624..b0c6d9a1e9b 100644
--- a/jaxp/src/share/classes/javax/xml/transform/FactoryFinder.java
+++ b/jaxp/src/javax/xml/transform/FactoryFinder.java
@@ -25,15 +25,13 @@
package javax.xml.transform;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
import java.io.BufferedReader;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
-import java.net.URL;
+import java.lang.reflect.Method;
+import java.util.Properties;
/**
* Implements pluggable Datatypes.
@@ -42,6 +40,7 @@ import java.net.URL;
* sync. It is package private for secure class loading.
*
* @author Santiago.PericasGeertsen@sun.com
+ * @author Huizhe.Wang@oracle.com
*/
class FactoryFinder {
@@ -59,7 +58,7 @@ class FactoryFinder {
* Flag indicating if properties from java.home/lib/jaxp.properties
* have been cached.
*/
- static boolean firstTime = true;
+ static volatile boolean firstTime = true;
/**
* Security support class use to check access control before
@@ -95,18 +94,24 @@ class FactoryFinder {
* If the class loader supplied is null, first try using the
* context class loader followed by the current (i.e. bootstrap) class
* loader.
+ *
+ * Use bootstrap classLoader if cl = null and useBSClsLoader is true
*/
static private Class getProviderClass(String className, ClassLoader cl,
- boolean doFallback) throws ClassNotFoundException
+ boolean doFallback, boolean useBSClsLoader) throws ClassNotFoundException
{
try {
if (cl == null) {
- cl = ss.getContextClassLoader();
- if (cl == null) {
- throw new ClassNotFoundException();
- }
- else {
- return cl.loadClass(className);
+ if (useBSClsLoader) {
+ return Class.forName(className, true, FactoryFinder.class.getClassLoader());
+ } else {
+ cl = ss.getContextClassLoader();
+ if (cl == null) {
+ throw new ClassNotFoundException();
+ }
+ else {
+ return cl.loadClass(className);
+ }
}
}
else {
@@ -131,18 +136,48 @@ class FactoryFinder {
* @param className Name of the concrete class corresponding to the
* service provider
*
- * @param cl ClassLoader to use to load the class, null means to use
- * the bootstrap ClassLoader
+ * @param cl ClassLoader used to load the factory class. If null
+ * current Thread's context classLoader is used to load the factory class.
*
* @param doFallback True if the current ClassLoader should be tried as
* a fallback if the class is not found using cl
*/
static Object newInstance(String className, ClassLoader cl, boolean doFallback)
throws ConfigurationError
+ {
+ return newInstance(className, cl, doFallback, false, false);
+ }
+
+ /**
+ * Create an instance of a class. Delegates to method
+ * getProviderClass() in order to load the class.
+ *
+ * @param className Name of the concrete class corresponding to the
+ * service provider
+ *
+ * @param cl ClassLoader used to load the factory class. If null
+ * current Thread's context classLoader is used to load the factory class.
+ *
+ * @param doFallback True if the current ClassLoader should be tried as
+ * a fallback if the class is not found using cl
+ *
+ * @param useBSClsLoader True if cl=null actually meant bootstrap classLoader. This parameter
+ * is needed since DocumentBuilderFactory/SAXParserFactory defined null as context classLoader.
+ *
+ * @param useServicesMechanism True use services mechanism
+ */
+ static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader, boolean useServicesMechanism)
+ throws ConfigurationError
{
try {
- Class providerClass = getProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
+ Class providerClass = getProviderClass(className, cl, doFallback, useBSClsLoader);
+ Object instance = null;
+ if (!useServicesMechanism) {
+ instance = newInstanceNoServiceLoader(providerClass);
+ }
+ if (instance == null) {
+ instance = providerClass.newInstance();
+ }
if (debug) { // Extra check to avoid computing cl strings
dPrint("created new instance of " + providerClass +
" using ClassLoader: " + cl);
@@ -159,7 +194,29 @@ class FactoryFinder {
x);
}
}
-
+ /**
+ * Try to construct using newTransformerFactoryNoServiceLoader
+ * method if available.
+ */
+ private static Object newInstanceNoServiceLoader(
+ Class> providerClass
+ ) {
+ // Retain maximum compatibility if no security manager.
+ if (System.getSecurityManager() == null) {
+ return null;
+ }
+ try {
+ Method creationMethod =
+ providerClass.getDeclaredMethod(
+ "newTransformerFactoryNoServiceLoader"
+ );
+ return creationMethod.invoke(null, null);
+ } catch (NoSuchMethodException exc) {
+ return null;
+ } catch (Exception exc) {
+ return null;
+ }
+ }
/**
* Finds the implementation Class object in the specified order. Main
* entry point.
@@ -176,13 +233,12 @@ class FactoryFinder {
throws ConfigurationError
{
dPrint("find factoryId =" + factoryId);
-
// Use the system property first
try {
String systemProp = ss.getSystemProperty(factoryId);
if (systemProp != null) {
dPrint("found system property, value=" + systemProp);
- return newInstance(systemProp, null, true);
+ return newInstance(systemProp, null, true, false, true);
}
}
catch (SecurityException se) {
@@ -210,7 +266,7 @@ class FactoryFinder {
if (factoryClassName != null) {
dPrint("found in $java.home/jaxp.properties, value=" + factoryClassName);
- return newInstance(factoryClassName, null, true);
+ return newInstance(factoryClassName, null, true, false, true);
}
}
catch (Exception ex) {
@@ -228,7 +284,7 @@ class FactoryFinder {
}
dPrint("loaded from fallback value: " + fallbackClassName);
- return newInstance(fallbackClassName, null, true);
+ return newInstance(fallbackClassName, null, true, false, true);
}
/*
@@ -244,6 +300,7 @@ class FactoryFinder {
// First try the Context ClassLoader
ClassLoader cl = ss.getContextClassLoader();
+ boolean useBSClsLoader = false;
if (cl != null) {
is = ss.getResourceAsStream(cl, serviceId);
@@ -251,11 +308,13 @@ class FactoryFinder {
if (is == null) {
cl = FactoryFinder.class.getClassLoader();
is = ss.getResourceAsStream(cl, serviceId);
- }
+ useBSClsLoader = true;
+ }
} else {
// No Context ClassLoader, try the current ClassLoader
cl = FactoryFinder.class.getClassLoader();
is = ss.getResourceAsStream(cl, serviceId);
+ useBSClsLoader = true;
}
if (is == null) {
@@ -293,7 +352,7 @@ class FactoryFinder {
// ClassLoader because we want to avoid the case where the
// resource file was found using one ClassLoader and the
// provider class was instantiated using a different one.
- return newInstance(factoryClassName, cl, false);
+ return newInstance(factoryClassName, cl, false, useBSClsLoader, true);
}
// No provider found
diff --git a/jaxp/src/share/classes/javax/xml/transform/OutputKeys.java b/jaxp/src/javax/xml/transform/OutputKeys.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/OutputKeys.java
rename to jaxp/src/javax/xml/transform/OutputKeys.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/Result.java b/jaxp/src/javax/xml/transform/Result.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/Result.java
rename to jaxp/src/javax/xml/transform/Result.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/SecuritySupport.java b/jaxp/src/javax/xml/transform/SecuritySupport.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/SecuritySupport.java
rename to jaxp/src/javax/xml/transform/SecuritySupport.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/Source.java b/jaxp/src/javax/xml/transform/Source.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/Source.java
rename to jaxp/src/javax/xml/transform/Source.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/SourceLocator.java b/jaxp/src/javax/xml/transform/SourceLocator.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/SourceLocator.java
rename to jaxp/src/javax/xml/transform/SourceLocator.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/Templates.java b/jaxp/src/javax/xml/transform/Templates.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/Templates.java
rename to jaxp/src/javax/xml/transform/Templates.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/Transformer.java b/jaxp/src/javax/xml/transform/Transformer.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/Transformer.java
rename to jaxp/src/javax/xml/transform/Transformer.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/TransformerConfigurationException.java b/jaxp/src/javax/xml/transform/TransformerConfigurationException.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/TransformerConfigurationException.java
rename to jaxp/src/javax/xml/transform/TransformerConfigurationException.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/TransformerException.java b/jaxp/src/javax/xml/transform/TransformerException.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/TransformerException.java
rename to jaxp/src/javax/xml/transform/TransformerException.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/TransformerFactory.java b/jaxp/src/javax/xml/transform/TransformerFactory.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/TransformerFactory.java
rename to jaxp/src/javax/xml/transform/TransformerFactory.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/TransformerFactoryConfigurationError.java b/jaxp/src/javax/xml/transform/TransformerFactoryConfigurationError.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/TransformerFactoryConfigurationError.java
rename to jaxp/src/javax/xml/transform/TransformerFactoryConfigurationError.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/URIResolver.java b/jaxp/src/javax/xml/transform/URIResolver.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/URIResolver.java
rename to jaxp/src/javax/xml/transform/URIResolver.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/dom/DOMLocator.java b/jaxp/src/javax/xml/transform/dom/DOMLocator.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/dom/DOMLocator.java
rename to jaxp/src/javax/xml/transform/dom/DOMLocator.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/dom/DOMResult.java b/jaxp/src/javax/xml/transform/dom/DOMResult.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/dom/DOMResult.java
rename to jaxp/src/javax/xml/transform/dom/DOMResult.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/dom/DOMSource.java b/jaxp/src/javax/xml/transform/dom/DOMSource.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/dom/DOMSource.java
rename to jaxp/src/javax/xml/transform/dom/DOMSource.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/dom/package.html b/jaxp/src/javax/xml/transform/dom/package.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/dom/package.html
rename to jaxp/src/javax/xml/transform/dom/package.html
diff --git a/jaxp/src/share/classes/javax/xml/transform/overview.html b/jaxp/src/javax/xml/transform/overview.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/overview.html
rename to jaxp/src/javax/xml/transform/overview.html
diff --git a/jaxp/src/share/classes/javax/xml/transform/package.html b/jaxp/src/javax/xml/transform/package.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/package.html
rename to jaxp/src/javax/xml/transform/package.html
diff --git a/jaxp/src/share/classes/javax/xml/transform/sax/SAXResult.java b/jaxp/src/javax/xml/transform/sax/SAXResult.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/sax/SAXResult.java
rename to jaxp/src/javax/xml/transform/sax/SAXResult.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/sax/SAXSource.java b/jaxp/src/javax/xml/transform/sax/SAXSource.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/sax/SAXSource.java
rename to jaxp/src/javax/xml/transform/sax/SAXSource.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/sax/SAXTransformerFactory.java b/jaxp/src/javax/xml/transform/sax/SAXTransformerFactory.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/sax/SAXTransformerFactory.java
rename to jaxp/src/javax/xml/transform/sax/SAXTransformerFactory.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/sax/TemplatesHandler.java b/jaxp/src/javax/xml/transform/sax/TemplatesHandler.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/sax/TemplatesHandler.java
rename to jaxp/src/javax/xml/transform/sax/TemplatesHandler.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/sax/TransformerHandler.java b/jaxp/src/javax/xml/transform/sax/TransformerHandler.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/sax/TransformerHandler.java
rename to jaxp/src/javax/xml/transform/sax/TransformerHandler.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/sax/package.html b/jaxp/src/javax/xml/transform/sax/package.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/sax/package.html
rename to jaxp/src/javax/xml/transform/sax/package.html
diff --git a/jaxp/src/share/classes/javax/xml/transform/stax/StAXResult.java b/jaxp/src/javax/xml/transform/stax/StAXResult.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/stax/StAXResult.java
rename to jaxp/src/javax/xml/transform/stax/StAXResult.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/stax/StAXSource.java b/jaxp/src/javax/xml/transform/stax/StAXSource.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/stax/StAXSource.java
rename to jaxp/src/javax/xml/transform/stax/StAXSource.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/stax/package.html b/jaxp/src/javax/xml/transform/stax/package.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/stax/package.html
rename to jaxp/src/javax/xml/transform/stax/package.html
diff --git a/jaxp/src/share/classes/javax/xml/transform/stream/StreamResult.java b/jaxp/src/javax/xml/transform/stream/StreamResult.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/stream/StreamResult.java
rename to jaxp/src/javax/xml/transform/stream/StreamResult.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/stream/StreamSource.java b/jaxp/src/javax/xml/transform/stream/StreamSource.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/stream/StreamSource.java
rename to jaxp/src/javax/xml/transform/stream/StreamSource.java
diff --git a/jaxp/src/share/classes/javax/xml/transform/stream/package.html b/jaxp/src/javax/xml/transform/stream/package.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/transform/stream/package.html
rename to jaxp/src/javax/xml/transform/stream/package.html
diff --git a/jaxp/src/share/classes/javax/xml/validation/Schema.java b/jaxp/src/javax/xml/validation/Schema.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/validation/Schema.java
rename to jaxp/src/javax/xml/validation/Schema.java
diff --git a/jaxp/src/share/classes/javax/xml/validation/SchemaFactory.java b/jaxp/src/javax/xml/validation/SchemaFactory.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/validation/SchemaFactory.java
rename to jaxp/src/javax/xml/validation/SchemaFactory.java
diff --git a/jaxp/src/share/classes/javax/xml/validation/SchemaFactoryFinder.java b/jaxp/src/javax/xml/validation/SchemaFactoryFinder.java
similarity index 93%
rename from jaxp/src/share/classes/javax/xml/validation/SchemaFactoryFinder.java
rename to jaxp/src/javax/xml/validation/SchemaFactoryFinder.java
index e30f22c9373..8157b6bd8dd 100644
--- a/jaxp/src/share/classes/javax/xml/validation/SchemaFactoryFinder.java
+++ b/jaxp/src/javax/xml/validation/SchemaFactoryFinder.java
@@ -43,6 +43,7 @@ import java.util.Properties;
* Implementation of {@link SchemaFactory#newInstance(String)}.
*
* @author Kohsuke Kawaguchi
+ * @version $Revision: 1.8 $, $Date: 2010-11-01 04:36:13 $
* @since 1.5
*/
class SchemaFactoryFinder {
@@ -61,7 +62,7 @@ class SchemaFactoryFinder {
/**
* First time requires initialization overhead.
*/
- private static boolean firstTime = true;
+ private static volatile boolean firstTime = true;
static {
// Use try/catch block to support applets
@@ -166,7 +167,7 @@ class SchemaFactoryFinder {
String r = ss.getSystemProperty(propertyName);
if(r!=null) {
debugPrintln("The value is '"+r+"'");
- sf = createInstance(r);
+ sf = createInstance(r, true);
if(sf!=null) return sf;
} else
debugPrintln("The property is undefined.");
@@ -201,7 +202,7 @@ class SchemaFactoryFinder {
debugPrintln("found " + factoryClassName + " in $java.home/jaxp.properties");
if (factoryClassName != null) {
- sf = createInstance(factoryClassName);
+ sf = createInstance(factoryClassName, true);
if(sf != null){
return sf;
}
@@ -254,7 +255,7 @@ class SchemaFactoryFinder {
// platform default
if(schemaLanguage.equals("http://www.w3.org/2001/XMLSchema")) {
debugPrintln("attempting to use the platform default XML Schema validator");
- return createInstance("com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory");
+ return createInstance("com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory", true);
}
debugPrintln("all things were tried, but none was found. bailing out.");
@@ -294,6 +295,10 @@ class SchemaFactoryFinder {
* if it fails. Error messages will be printed by this method.
*/
SchemaFactory createInstance( String className ) {
+ return createInstance( className, false );
+ }
+
+ SchemaFactory createInstance( String className, boolean useServicesMechanism ) {
SchemaFactory schemaFactory = null;
debugPrintln("createInstance(" + className + ")");
@@ -308,7 +313,12 @@ class SchemaFactoryFinder {
// instantiate Class as a SchemaFactory
try {
- schemaFactory = (SchemaFactory) clazz.newInstance();
+ if (!useServicesMechanism) {
+ schemaFactory = (SchemaFactory) newInstanceNoServiceLoader(clazz);
+ }
+ if (schemaFactory == null) {
+ schemaFactory = (SchemaFactory) clazz.newInstance();
+ }
} catch (ClassCastException classCastException) {
debugPrintln("could not instantiate " + clazz.getName());
if (debug) {
@@ -331,6 +341,29 @@ class SchemaFactoryFinder {
return schemaFactory;
}
+ /**
+ * Try to construct using newTransformerFactoryNoServiceLoader
+ * method if available.
+ */
+ private static Object newInstanceNoServiceLoader(
+ Class> providerClass
+ ) {
+ // Retain maximum compatibility if no security manager.
+ if (System.getSecurityManager() == null) {
+ return null;
+ }
+ try {
+ Method creationMethod =
+ providerClass.getDeclaredMethod(
+ "newXMLSchemaFactoryNoServiceLoader"
+ );
+ return creationMethod.invoke(null, null);
+ } catch (NoSuchMethodException exc) {
+ return null;
+ } catch (Exception exc) {
+ return null;
+ }
+ }
/** Iterator that lazily computes one value and returns it. */
private static abstract class SingleIterator implements Iterator {
diff --git a/jaxp/src/share/classes/javax/xml/validation/SchemaFactoryLoader.java b/jaxp/src/javax/xml/validation/SchemaFactoryLoader.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/validation/SchemaFactoryLoader.java
rename to jaxp/src/javax/xml/validation/SchemaFactoryLoader.java
diff --git a/jaxp/src/share/classes/javax/xml/validation/SecuritySupport.java b/jaxp/src/javax/xml/validation/SecuritySupport.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/validation/SecuritySupport.java
rename to jaxp/src/javax/xml/validation/SecuritySupport.java
diff --git a/jaxp/src/share/classes/javax/xml/validation/TypeInfoProvider.java b/jaxp/src/javax/xml/validation/TypeInfoProvider.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/validation/TypeInfoProvider.java
rename to jaxp/src/javax/xml/validation/TypeInfoProvider.java
diff --git a/jaxp/src/share/classes/javax/xml/validation/Validator.java b/jaxp/src/javax/xml/validation/Validator.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/validation/Validator.java
rename to jaxp/src/javax/xml/validation/Validator.java
diff --git a/jaxp/src/share/classes/javax/xml/validation/ValidatorHandler.java b/jaxp/src/javax/xml/validation/ValidatorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/validation/ValidatorHandler.java
rename to jaxp/src/javax/xml/validation/ValidatorHandler.java
diff --git a/jaxp/src/share/classes/javax/xml/validation/package.html b/jaxp/src/javax/xml/validation/package.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/validation/package.html
rename to jaxp/src/javax/xml/validation/package.html
diff --git a/jaxp/src/share/classes/javax/xml/xpath/SecuritySupport.java b/jaxp/src/javax/xml/xpath/SecuritySupport.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/SecuritySupport.java
rename to jaxp/src/javax/xml/xpath/SecuritySupport.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPath.java b/jaxp/src/javax/xml/xpath/XPath.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPath.java
rename to jaxp/src/javax/xml/xpath/XPath.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathConstants.java b/jaxp/src/javax/xml/xpath/XPathConstants.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathConstants.java
rename to jaxp/src/javax/xml/xpath/XPathConstants.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathException.java b/jaxp/src/javax/xml/xpath/XPathException.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathException.java
rename to jaxp/src/javax/xml/xpath/XPathException.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathExpression.java b/jaxp/src/javax/xml/xpath/XPathExpression.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathExpression.java
rename to jaxp/src/javax/xml/xpath/XPathExpression.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathExpressionException.java b/jaxp/src/javax/xml/xpath/XPathExpressionException.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathExpressionException.java
rename to jaxp/src/javax/xml/xpath/XPathExpressionException.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathFactory.java b/jaxp/src/javax/xml/xpath/XPathFactory.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathFactory.java
rename to jaxp/src/javax/xml/xpath/XPathFactory.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathFactoryConfigurationException.java b/jaxp/src/javax/xml/xpath/XPathFactoryConfigurationException.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathFactoryConfigurationException.java
rename to jaxp/src/javax/xml/xpath/XPathFactoryConfigurationException.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathFactoryFinder.java b/jaxp/src/javax/xml/xpath/XPathFactoryFinder.java
similarity index 92%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathFactoryFinder.java
rename to jaxp/src/javax/xml/xpath/XPathFactoryFinder.java
index debe4271d2c..2833a58804b 100644
--- a/jaxp/src/share/classes/javax/xml/xpath/XPathFactoryFinder.java
+++ b/jaxp/src/javax/xml/xpath/XPathFactoryFinder.java
@@ -44,6 +44,7 @@ import java.util.Properties;
* Implementation of {@link XPathFactory#newInstance(String)}.
*
* @author Kohsuke Kawaguchi
+ * @version $Revision: 1.7 $, $Date: 2010-11-01 04:36:14 $
* @since 1.5
*/
class XPathFactoryFinder {
@@ -68,7 +69,7 @@ class XPathFactoryFinder {
/**
* First time requires initialization overhead.
*/
- private static boolean firstTime = true;
+ private volatile static boolean firstTime = true;
/**
* Conditional debug printing.
@@ -163,7 +164,7 @@ class XPathFactoryFinder {
String r = ss.getSystemProperty(propertyName);
if(r!=null) {
debugPrintln("The value is '"+r+"'");
- xpathFactory = createInstance(r);
+ xpathFactory = createInstance(r, true);
if(xpathFactory != null) return xpathFactory;
} else
debugPrintln("The property is undefined.");
@@ -198,7 +199,7 @@ class XPathFactoryFinder {
debugPrintln("found " + factoryClassName + " in $java.home/jaxp.properties");
if (factoryClassName != null) {
- xpathFactory = createInstance(factoryClassName);
+ xpathFactory = createInstance(factoryClassName, true);
if(xpathFactory != null){
return xpathFactory;
}
@@ -231,7 +232,7 @@ class XPathFactoryFinder {
// platform default
if(uri.equals(XPathFactory.DEFAULT_OBJECT_MODEL_URI)) {
debugPrintln("attempting to use the platform default W3C DOM XPath lib");
- return createInstance("com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl");
+ return createInstance("com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl", true);
}
debugPrintln("all things were tried, but none was found. bailing out.");
@@ -271,6 +272,9 @@ class XPathFactoryFinder {
* if it fails. Error messages will be printed by this method.
*/
XPathFactory createInstance( String className ) {
+ return createInstance( className, false );
+ }
+ XPathFactory createInstance( String className, boolean useServicesMechanism ) {
XPathFactory xPathFactory = null;
debugPrintln("createInstance(" + className + ")");
@@ -285,7 +289,12 @@ class XPathFactoryFinder {
// instantiate Class as a XPathFactory
try {
+ if (!useServicesMechanism) {
+ xPathFactory = (XPathFactory) newInstanceNoServiceLoader(clazz);
+ }
+ if (xPathFactory == null) {
xPathFactory = (XPathFactory) clazz.newInstance();
+ }
} catch (ClassCastException classCastException) {
debugPrintln("could not instantiate " + clazz.getName());
if (debug) {
@@ -308,6 +317,29 @@ class XPathFactoryFinder {
return xPathFactory;
}
+ /**
+ * Try to construct using newXPathFactoryNoServiceLoader
+ * method if available.
+ */
+ private static Object newInstanceNoServiceLoader(
+ Class> providerClass
+ ) {
+ // Retain maximum compatibility if no security manager.
+ if (System.getSecurityManager() == null) {
+ return null;
+ }
+ try {
+ Method creationMethod =
+ providerClass.getDeclaredMethod(
+ "newXPathFactoryNoServiceLoader"
+ );
+ return creationMethod.invoke(null, null);
+ } catch (NoSuchMethodException exc) {
+ return null;
+ } catch (Exception exc) {
+ return null;
+ }
+ }
/**
* Look up a value in a property file.
@@ -432,7 +464,7 @@ class XPathFactoryFinder {
String factoryClassName = props.getProperty(keyName);
if(factoryClassName != null){
debugPrintln("found "+keyName+" = " + factoryClassName);
- return createInstance(factoryClassName);
+ return createInstance(factoryClassName, true);
} else {
debugPrintln(keyName+" is not in the property file");
return null;
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathFunction.java b/jaxp/src/javax/xml/xpath/XPathFunction.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathFunction.java
rename to jaxp/src/javax/xml/xpath/XPathFunction.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathFunctionException.java b/jaxp/src/javax/xml/xpath/XPathFunctionException.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathFunctionException.java
rename to jaxp/src/javax/xml/xpath/XPathFunctionException.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathFunctionResolver.java b/jaxp/src/javax/xml/xpath/XPathFunctionResolver.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathFunctionResolver.java
rename to jaxp/src/javax/xml/xpath/XPathFunctionResolver.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/XPathVariableResolver.java b/jaxp/src/javax/xml/xpath/XPathVariableResolver.java
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/XPathVariableResolver.java
rename to jaxp/src/javax/xml/xpath/XPathVariableResolver.java
diff --git a/jaxp/src/share/classes/javax/xml/xpath/package.html b/jaxp/src/javax/xml/xpath/package.html
similarity index 100%
rename from jaxp/src/share/classes/javax/xml/xpath/package.html
rename to jaxp/src/javax/xml/xpath/package.html
diff --git a/jaxp/src/share/classes/org/w3c/dom/Attr.java b/jaxp/src/org/w3c/dom/Attr.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/Attr.java
rename to jaxp/src/org/w3c/dom/Attr.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/CDATASection.java b/jaxp/src/org/w3c/dom/CDATASection.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/CDATASection.java
rename to jaxp/src/org/w3c/dom/CDATASection.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/CharacterData.java b/jaxp/src/org/w3c/dom/CharacterData.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/CharacterData.java
rename to jaxp/src/org/w3c/dom/CharacterData.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/Comment.java b/jaxp/src/org/w3c/dom/Comment.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/Comment.java
rename to jaxp/src/org/w3c/dom/Comment.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DOMConfiguration.java b/jaxp/src/org/w3c/dom/DOMConfiguration.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DOMConfiguration.java
rename to jaxp/src/org/w3c/dom/DOMConfiguration.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DOMError.java b/jaxp/src/org/w3c/dom/DOMError.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DOMError.java
rename to jaxp/src/org/w3c/dom/DOMError.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DOMErrorHandler.java b/jaxp/src/org/w3c/dom/DOMErrorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DOMErrorHandler.java
rename to jaxp/src/org/w3c/dom/DOMErrorHandler.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DOMException.java b/jaxp/src/org/w3c/dom/DOMException.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DOMException.java
rename to jaxp/src/org/w3c/dom/DOMException.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DOMImplementation.java b/jaxp/src/org/w3c/dom/DOMImplementation.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DOMImplementation.java
rename to jaxp/src/org/w3c/dom/DOMImplementation.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DOMImplementationList.java b/jaxp/src/org/w3c/dom/DOMImplementationList.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DOMImplementationList.java
rename to jaxp/src/org/w3c/dom/DOMImplementationList.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DOMImplementationSource.java b/jaxp/src/org/w3c/dom/DOMImplementationSource.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DOMImplementationSource.java
rename to jaxp/src/org/w3c/dom/DOMImplementationSource.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DOMLocator.java b/jaxp/src/org/w3c/dom/DOMLocator.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DOMLocator.java
rename to jaxp/src/org/w3c/dom/DOMLocator.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DOMStringList.java b/jaxp/src/org/w3c/dom/DOMStringList.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DOMStringList.java
rename to jaxp/src/org/w3c/dom/DOMStringList.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/Document.java b/jaxp/src/org/w3c/dom/Document.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/Document.java
rename to jaxp/src/org/w3c/dom/Document.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DocumentFragment.java b/jaxp/src/org/w3c/dom/DocumentFragment.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DocumentFragment.java
rename to jaxp/src/org/w3c/dom/DocumentFragment.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/DocumentType.java b/jaxp/src/org/w3c/dom/DocumentType.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/DocumentType.java
rename to jaxp/src/org/w3c/dom/DocumentType.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/Element.java b/jaxp/src/org/w3c/dom/Element.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/Element.java
rename to jaxp/src/org/w3c/dom/Element.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/Entity.java b/jaxp/src/org/w3c/dom/Entity.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/Entity.java
rename to jaxp/src/org/w3c/dom/Entity.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/EntityReference.java b/jaxp/src/org/w3c/dom/EntityReference.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/EntityReference.java
rename to jaxp/src/org/w3c/dom/EntityReference.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/NameList.java b/jaxp/src/org/w3c/dom/NameList.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/NameList.java
rename to jaxp/src/org/w3c/dom/NameList.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/NamedNodeMap.java b/jaxp/src/org/w3c/dom/NamedNodeMap.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/NamedNodeMap.java
rename to jaxp/src/org/w3c/dom/NamedNodeMap.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/Node.java b/jaxp/src/org/w3c/dom/Node.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/Node.java
rename to jaxp/src/org/w3c/dom/Node.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/NodeList.java b/jaxp/src/org/w3c/dom/NodeList.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/NodeList.java
rename to jaxp/src/org/w3c/dom/NodeList.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/Notation.java b/jaxp/src/org/w3c/dom/Notation.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/Notation.java
rename to jaxp/src/org/w3c/dom/Notation.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ProcessingInstruction.java b/jaxp/src/org/w3c/dom/ProcessingInstruction.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ProcessingInstruction.java
rename to jaxp/src/org/w3c/dom/ProcessingInstruction.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/Text.java b/jaxp/src/org/w3c/dom/Text.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/Text.java
rename to jaxp/src/org/w3c/dom/Text.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/TypeInfo.java b/jaxp/src/org/w3c/dom/TypeInfo.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/TypeInfo.java
rename to jaxp/src/org/w3c/dom/TypeInfo.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/UserDataHandler.java b/jaxp/src/org/w3c/dom/UserDataHandler.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/UserDataHandler.java
rename to jaxp/src/org/w3c/dom/UserDataHandler.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/bootstrap/DOMImplementationRegistry.java b/jaxp/src/org/w3c/dom/bootstrap/DOMImplementationRegistry.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/bootstrap/DOMImplementationRegistry.java
rename to jaxp/src/org/w3c/dom/bootstrap/DOMImplementationRegistry.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSS2Properties.java b/jaxp/src/org/w3c/dom/css/CSS2Properties.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSS2Properties.java
rename to jaxp/src/org/w3c/dom/css/CSS2Properties.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSCharsetRule.java b/jaxp/src/org/w3c/dom/css/CSSCharsetRule.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSCharsetRule.java
rename to jaxp/src/org/w3c/dom/css/CSSCharsetRule.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSFontFaceRule.java b/jaxp/src/org/w3c/dom/css/CSSFontFaceRule.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSFontFaceRule.java
rename to jaxp/src/org/w3c/dom/css/CSSFontFaceRule.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSImportRule.java b/jaxp/src/org/w3c/dom/css/CSSImportRule.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSImportRule.java
rename to jaxp/src/org/w3c/dom/css/CSSImportRule.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSMediaRule.java b/jaxp/src/org/w3c/dom/css/CSSMediaRule.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSMediaRule.java
rename to jaxp/src/org/w3c/dom/css/CSSMediaRule.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSPageRule.java b/jaxp/src/org/w3c/dom/css/CSSPageRule.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSPageRule.java
rename to jaxp/src/org/w3c/dom/css/CSSPageRule.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSPrimitiveValue.java b/jaxp/src/org/w3c/dom/css/CSSPrimitiveValue.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSPrimitiveValue.java
rename to jaxp/src/org/w3c/dom/css/CSSPrimitiveValue.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSRule.java b/jaxp/src/org/w3c/dom/css/CSSRule.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSRule.java
rename to jaxp/src/org/w3c/dom/css/CSSRule.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSRuleList.java b/jaxp/src/org/w3c/dom/css/CSSRuleList.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSRuleList.java
rename to jaxp/src/org/w3c/dom/css/CSSRuleList.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSStyleDeclaration.java b/jaxp/src/org/w3c/dom/css/CSSStyleDeclaration.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSStyleDeclaration.java
rename to jaxp/src/org/w3c/dom/css/CSSStyleDeclaration.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSStyleRule.java b/jaxp/src/org/w3c/dom/css/CSSStyleRule.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSStyleRule.java
rename to jaxp/src/org/w3c/dom/css/CSSStyleRule.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSStyleSheet.java b/jaxp/src/org/w3c/dom/css/CSSStyleSheet.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSStyleSheet.java
rename to jaxp/src/org/w3c/dom/css/CSSStyleSheet.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSUnknownRule.java b/jaxp/src/org/w3c/dom/css/CSSUnknownRule.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSUnknownRule.java
rename to jaxp/src/org/w3c/dom/css/CSSUnknownRule.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSValue.java b/jaxp/src/org/w3c/dom/css/CSSValue.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSValue.java
rename to jaxp/src/org/w3c/dom/css/CSSValue.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/CSSValueList.java b/jaxp/src/org/w3c/dom/css/CSSValueList.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/CSSValueList.java
rename to jaxp/src/org/w3c/dom/css/CSSValueList.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/Counter.java b/jaxp/src/org/w3c/dom/css/Counter.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/Counter.java
rename to jaxp/src/org/w3c/dom/css/Counter.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/DOMImplementationCSS.java b/jaxp/src/org/w3c/dom/css/DOMImplementationCSS.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/DOMImplementationCSS.java
rename to jaxp/src/org/w3c/dom/css/DOMImplementationCSS.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/DocumentCSS.java b/jaxp/src/org/w3c/dom/css/DocumentCSS.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/DocumentCSS.java
rename to jaxp/src/org/w3c/dom/css/DocumentCSS.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/ElementCSSInlineStyle.java b/jaxp/src/org/w3c/dom/css/ElementCSSInlineStyle.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/ElementCSSInlineStyle.java
rename to jaxp/src/org/w3c/dom/css/ElementCSSInlineStyle.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/RGBColor.java b/jaxp/src/org/w3c/dom/css/RGBColor.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/RGBColor.java
rename to jaxp/src/org/w3c/dom/css/RGBColor.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/Rect.java b/jaxp/src/org/w3c/dom/css/Rect.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/Rect.java
rename to jaxp/src/org/w3c/dom/css/Rect.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/css/ViewCSS.java b/jaxp/src/org/w3c/dom/css/ViewCSS.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/css/ViewCSS.java
rename to jaxp/src/org/w3c/dom/css/ViewCSS.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/events/DocumentEvent.java b/jaxp/src/org/w3c/dom/events/DocumentEvent.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/events/DocumentEvent.java
rename to jaxp/src/org/w3c/dom/events/DocumentEvent.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/events/Event.java b/jaxp/src/org/w3c/dom/events/Event.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/events/Event.java
rename to jaxp/src/org/w3c/dom/events/Event.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/events/EventException.java b/jaxp/src/org/w3c/dom/events/EventException.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/events/EventException.java
rename to jaxp/src/org/w3c/dom/events/EventException.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/events/EventListener.java b/jaxp/src/org/w3c/dom/events/EventListener.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/events/EventListener.java
rename to jaxp/src/org/w3c/dom/events/EventListener.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/events/EventTarget.java b/jaxp/src/org/w3c/dom/events/EventTarget.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/events/EventTarget.java
rename to jaxp/src/org/w3c/dom/events/EventTarget.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/events/MouseEvent.java b/jaxp/src/org/w3c/dom/events/MouseEvent.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/events/MouseEvent.java
rename to jaxp/src/org/w3c/dom/events/MouseEvent.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/events/MutationEvent.java b/jaxp/src/org/w3c/dom/events/MutationEvent.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/events/MutationEvent.java
rename to jaxp/src/org/w3c/dom/events/MutationEvent.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/events/UIEvent.java b/jaxp/src/org/w3c/dom/events/UIEvent.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/events/UIEvent.java
rename to jaxp/src/org/w3c/dom/events/UIEvent.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLAnchorElement.java b/jaxp/src/org/w3c/dom/html/HTMLAnchorElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLAnchorElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLAnchorElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLAppletElement.java b/jaxp/src/org/w3c/dom/html/HTMLAppletElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLAppletElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLAppletElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLAreaElement.java b/jaxp/src/org/w3c/dom/html/HTMLAreaElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLAreaElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLAreaElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLBRElement.java b/jaxp/src/org/w3c/dom/html/HTMLBRElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLBRElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLBRElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLBaseElement.java b/jaxp/src/org/w3c/dom/html/HTMLBaseElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLBaseElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLBaseElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLBaseFontElement.java b/jaxp/src/org/w3c/dom/html/HTMLBaseFontElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLBaseFontElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLBaseFontElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLBodyElement.java b/jaxp/src/org/w3c/dom/html/HTMLBodyElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLBodyElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLBodyElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLButtonElement.java b/jaxp/src/org/w3c/dom/html/HTMLButtonElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLButtonElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLButtonElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLCollection.java b/jaxp/src/org/w3c/dom/html/HTMLCollection.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLCollection.java
rename to jaxp/src/org/w3c/dom/html/HTMLCollection.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLDListElement.java b/jaxp/src/org/w3c/dom/html/HTMLDListElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLDListElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLDListElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLDOMImplementation.java b/jaxp/src/org/w3c/dom/html/HTMLDOMImplementation.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLDOMImplementation.java
rename to jaxp/src/org/w3c/dom/html/HTMLDOMImplementation.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLDirectoryElement.java b/jaxp/src/org/w3c/dom/html/HTMLDirectoryElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLDirectoryElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLDirectoryElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLDivElement.java b/jaxp/src/org/w3c/dom/html/HTMLDivElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLDivElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLDivElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLDocument.java b/jaxp/src/org/w3c/dom/html/HTMLDocument.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLDocument.java
rename to jaxp/src/org/w3c/dom/html/HTMLDocument.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLElement.java b/jaxp/src/org/w3c/dom/html/HTMLElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLFieldSetElement.java b/jaxp/src/org/w3c/dom/html/HTMLFieldSetElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLFieldSetElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLFieldSetElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLFontElement.java b/jaxp/src/org/w3c/dom/html/HTMLFontElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLFontElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLFontElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLFormElement.java b/jaxp/src/org/w3c/dom/html/HTMLFormElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLFormElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLFormElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLFrameElement.java b/jaxp/src/org/w3c/dom/html/HTMLFrameElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLFrameElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLFrameElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLFrameSetElement.java b/jaxp/src/org/w3c/dom/html/HTMLFrameSetElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLFrameSetElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLFrameSetElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLHRElement.java b/jaxp/src/org/w3c/dom/html/HTMLHRElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLHRElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLHRElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLHeadElement.java b/jaxp/src/org/w3c/dom/html/HTMLHeadElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLHeadElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLHeadElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLHeadingElement.java b/jaxp/src/org/w3c/dom/html/HTMLHeadingElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLHeadingElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLHeadingElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLHtmlElement.java b/jaxp/src/org/w3c/dom/html/HTMLHtmlElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLHtmlElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLHtmlElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLIFrameElement.java b/jaxp/src/org/w3c/dom/html/HTMLIFrameElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLIFrameElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLIFrameElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLImageElement.java b/jaxp/src/org/w3c/dom/html/HTMLImageElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLImageElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLImageElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLInputElement.java b/jaxp/src/org/w3c/dom/html/HTMLInputElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLInputElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLInputElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLIsIndexElement.java b/jaxp/src/org/w3c/dom/html/HTMLIsIndexElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLIsIndexElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLIsIndexElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLLIElement.java b/jaxp/src/org/w3c/dom/html/HTMLLIElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLLIElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLLIElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLLabelElement.java b/jaxp/src/org/w3c/dom/html/HTMLLabelElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLLabelElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLLabelElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLLegendElement.java b/jaxp/src/org/w3c/dom/html/HTMLLegendElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLLegendElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLLegendElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLLinkElement.java b/jaxp/src/org/w3c/dom/html/HTMLLinkElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLLinkElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLLinkElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLMapElement.java b/jaxp/src/org/w3c/dom/html/HTMLMapElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLMapElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLMapElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLMenuElement.java b/jaxp/src/org/w3c/dom/html/HTMLMenuElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLMenuElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLMenuElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLMetaElement.java b/jaxp/src/org/w3c/dom/html/HTMLMetaElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLMetaElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLMetaElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLModElement.java b/jaxp/src/org/w3c/dom/html/HTMLModElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLModElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLModElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLOListElement.java b/jaxp/src/org/w3c/dom/html/HTMLOListElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLOListElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLOListElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLObjectElement.java b/jaxp/src/org/w3c/dom/html/HTMLObjectElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLObjectElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLObjectElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLOptGroupElement.java b/jaxp/src/org/w3c/dom/html/HTMLOptGroupElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLOptGroupElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLOptGroupElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLOptionElement.java b/jaxp/src/org/w3c/dom/html/HTMLOptionElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLOptionElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLOptionElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLParagraphElement.java b/jaxp/src/org/w3c/dom/html/HTMLParagraphElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLParagraphElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLParagraphElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLParamElement.java b/jaxp/src/org/w3c/dom/html/HTMLParamElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLParamElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLParamElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLPreElement.java b/jaxp/src/org/w3c/dom/html/HTMLPreElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLPreElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLPreElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLQuoteElement.java b/jaxp/src/org/w3c/dom/html/HTMLQuoteElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLQuoteElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLQuoteElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLScriptElement.java b/jaxp/src/org/w3c/dom/html/HTMLScriptElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLScriptElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLScriptElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLSelectElement.java b/jaxp/src/org/w3c/dom/html/HTMLSelectElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLSelectElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLSelectElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLStyleElement.java b/jaxp/src/org/w3c/dom/html/HTMLStyleElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLStyleElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLStyleElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLTableCaptionElement.java b/jaxp/src/org/w3c/dom/html/HTMLTableCaptionElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLTableCaptionElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLTableCaptionElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLTableCellElement.java b/jaxp/src/org/w3c/dom/html/HTMLTableCellElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLTableCellElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLTableCellElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLTableColElement.java b/jaxp/src/org/w3c/dom/html/HTMLTableColElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLTableColElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLTableColElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLTableElement.java b/jaxp/src/org/w3c/dom/html/HTMLTableElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLTableElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLTableElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLTableRowElement.java b/jaxp/src/org/w3c/dom/html/HTMLTableRowElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLTableRowElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLTableRowElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLTableSectionElement.java b/jaxp/src/org/w3c/dom/html/HTMLTableSectionElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLTableSectionElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLTableSectionElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLTextAreaElement.java b/jaxp/src/org/w3c/dom/html/HTMLTextAreaElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLTextAreaElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLTextAreaElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLTitleElement.java b/jaxp/src/org/w3c/dom/html/HTMLTitleElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLTitleElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLTitleElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/html/HTMLUListElement.java b/jaxp/src/org/w3c/dom/html/HTMLUListElement.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/html/HTMLUListElement.java
rename to jaxp/src/org/w3c/dom/html/HTMLUListElement.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/DOMImplementationLS.java b/jaxp/src/org/w3c/dom/ls/DOMImplementationLS.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/DOMImplementationLS.java
rename to jaxp/src/org/w3c/dom/ls/DOMImplementationLS.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/LSException.java b/jaxp/src/org/w3c/dom/ls/LSException.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/LSException.java
rename to jaxp/src/org/w3c/dom/ls/LSException.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/LSInput.java b/jaxp/src/org/w3c/dom/ls/LSInput.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/LSInput.java
rename to jaxp/src/org/w3c/dom/ls/LSInput.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/LSLoadEvent.java b/jaxp/src/org/w3c/dom/ls/LSLoadEvent.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/LSLoadEvent.java
rename to jaxp/src/org/w3c/dom/ls/LSLoadEvent.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/LSOutput.java b/jaxp/src/org/w3c/dom/ls/LSOutput.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/LSOutput.java
rename to jaxp/src/org/w3c/dom/ls/LSOutput.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/LSParser.java b/jaxp/src/org/w3c/dom/ls/LSParser.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/LSParser.java
rename to jaxp/src/org/w3c/dom/ls/LSParser.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/LSParserFilter.java b/jaxp/src/org/w3c/dom/ls/LSParserFilter.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/LSParserFilter.java
rename to jaxp/src/org/w3c/dom/ls/LSParserFilter.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/LSProgressEvent.java b/jaxp/src/org/w3c/dom/ls/LSProgressEvent.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/LSProgressEvent.java
rename to jaxp/src/org/w3c/dom/ls/LSProgressEvent.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/LSResourceResolver.java b/jaxp/src/org/w3c/dom/ls/LSResourceResolver.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/LSResourceResolver.java
rename to jaxp/src/org/w3c/dom/ls/LSResourceResolver.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/LSSerializer.java b/jaxp/src/org/w3c/dom/ls/LSSerializer.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/LSSerializer.java
rename to jaxp/src/org/w3c/dom/ls/LSSerializer.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ls/LSSerializerFilter.java b/jaxp/src/org/w3c/dom/ls/LSSerializerFilter.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ls/LSSerializerFilter.java
rename to jaxp/src/org/w3c/dom/ls/LSSerializerFilter.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/package.html b/jaxp/src/org/w3c/dom/package.html
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/package.html
rename to jaxp/src/org/w3c/dom/package.html
diff --git a/jaxp/src/share/classes/org/w3c/dom/ranges/DocumentRange.java b/jaxp/src/org/w3c/dom/ranges/DocumentRange.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ranges/DocumentRange.java
rename to jaxp/src/org/w3c/dom/ranges/DocumentRange.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ranges/Range.java b/jaxp/src/org/w3c/dom/ranges/Range.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ranges/Range.java
rename to jaxp/src/org/w3c/dom/ranges/Range.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ranges/RangeException.java b/jaxp/src/org/w3c/dom/ranges/RangeException.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ranges/RangeException.java
rename to jaxp/src/org/w3c/dom/ranges/RangeException.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/ranges/package.html b/jaxp/src/org/w3c/dom/ranges/package.html
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/ranges/package.html
rename to jaxp/src/org/w3c/dom/ranges/package.html
diff --git a/jaxp/src/share/classes/org/w3c/dom/stylesheets/DocumentStyle.java b/jaxp/src/org/w3c/dom/stylesheets/DocumentStyle.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/stylesheets/DocumentStyle.java
rename to jaxp/src/org/w3c/dom/stylesheets/DocumentStyle.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/stylesheets/LinkStyle.java b/jaxp/src/org/w3c/dom/stylesheets/LinkStyle.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/stylesheets/LinkStyle.java
rename to jaxp/src/org/w3c/dom/stylesheets/LinkStyle.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/stylesheets/MediaList.java b/jaxp/src/org/w3c/dom/stylesheets/MediaList.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/stylesheets/MediaList.java
rename to jaxp/src/org/w3c/dom/stylesheets/MediaList.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/stylesheets/StyleSheet.java b/jaxp/src/org/w3c/dom/stylesheets/StyleSheet.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/stylesheets/StyleSheet.java
rename to jaxp/src/org/w3c/dom/stylesheets/StyleSheet.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/stylesheets/StyleSheetList.java b/jaxp/src/org/w3c/dom/stylesheets/StyleSheetList.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/stylesheets/StyleSheetList.java
rename to jaxp/src/org/w3c/dom/stylesheets/StyleSheetList.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/traversal/DocumentTraversal.java b/jaxp/src/org/w3c/dom/traversal/DocumentTraversal.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/traversal/DocumentTraversal.java
rename to jaxp/src/org/w3c/dom/traversal/DocumentTraversal.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/traversal/NodeFilter.java b/jaxp/src/org/w3c/dom/traversal/NodeFilter.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/traversal/NodeFilter.java
rename to jaxp/src/org/w3c/dom/traversal/NodeFilter.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/traversal/NodeIterator.java b/jaxp/src/org/w3c/dom/traversal/NodeIterator.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/traversal/NodeIterator.java
rename to jaxp/src/org/w3c/dom/traversal/NodeIterator.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/traversal/TreeWalker.java b/jaxp/src/org/w3c/dom/traversal/TreeWalker.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/traversal/TreeWalker.java
rename to jaxp/src/org/w3c/dom/traversal/TreeWalker.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/views/AbstractView.java b/jaxp/src/org/w3c/dom/views/AbstractView.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/views/AbstractView.java
rename to jaxp/src/org/w3c/dom/views/AbstractView.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/views/DocumentView.java b/jaxp/src/org/w3c/dom/views/DocumentView.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/views/DocumentView.java
rename to jaxp/src/org/w3c/dom/views/DocumentView.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/xpath/COPYRIGHT.html b/jaxp/src/org/w3c/dom/xpath/COPYRIGHT.html
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/xpath/COPYRIGHT.html
rename to jaxp/src/org/w3c/dom/xpath/COPYRIGHT.html
diff --git a/jaxp/src/share/classes/org/w3c/dom/xpath/XPathEvaluator.java b/jaxp/src/org/w3c/dom/xpath/XPathEvaluator.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/xpath/XPathEvaluator.java
rename to jaxp/src/org/w3c/dom/xpath/XPathEvaluator.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/xpath/XPathException.java b/jaxp/src/org/w3c/dom/xpath/XPathException.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/xpath/XPathException.java
rename to jaxp/src/org/w3c/dom/xpath/XPathException.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/xpath/XPathExpression.java b/jaxp/src/org/w3c/dom/xpath/XPathExpression.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/xpath/XPathExpression.java
rename to jaxp/src/org/w3c/dom/xpath/XPathExpression.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/xpath/XPathNSResolver.java b/jaxp/src/org/w3c/dom/xpath/XPathNSResolver.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/xpath/XPathNSResolver.java
rename to jaxp/src/org/w3c/dom/xpath/XPathNSResolver.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/xpath/XPathNamespace.java b/jaxp/src/org/w3c/dom/xpath/XPathNamespace.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/xpath/XPathNamespace.java
rename to jaxp/src/org/w3c/dom/xpath/XPathNamespace.java
diff --git a/jaxp/src/share/classes/org/w3c/dom/xpath/XPathResult.java b/jaxp/src/org/w3c/dom/xpath/XPathResult.java
similarity index 100%
rename from jaxp/src/share/classes/org/w3c/dom/xpath/XPathResult.java
rename to jaxp/src/org/w3c/dom/xpath/XPathResult.java
diff --git a/jaxp/src/share/classes/org/xml/sax/AttributeList.java b/jaxp/src/org/xml/sax/AttributeList.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/AttributeList.java
rename to jaxp/src/org/xml/sax/AttributeList.java
diff --git a/jaxp/src/share/classes/org/xml/sax/Attributes.java b/jaxp/src/org/xml/sax/Attributes.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/Attributes.java
rename to jaxp/src/org/xml/sax/Attributes.java
diff --git a/jaxp/src/share/classes/org/xml/sax/COPYING b/jaxp/src/org/xml/sax/COPYING
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/COPYING
rename to jaxp/src/org/xml/sax/COPYING
diff --git a/jaxp/src/share/classes/org/xml/sax/COPYING.txt b/jaxp/src/org/xml/sax/COPYING.txt
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/COPYING.txt
rename to jaxp/src/org/xml/sax/COPYING.txt
diff --git a/jaxp/src/share/classes/org/xml/sax/ContentHandler.java b/jaxp/src/org/xml/sax/ContentHandler.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ContentHandler.java
rename to jaxp/src/org/xml/sax/ContentHandler.java
diff --git a/jaxp/src/share/classes/org/xml/sax/DTDHandler.java b/jaxp/src/org/xml/sax/DTDHandler.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/DTDHandler.java
rename to jaxp/src/org/xml/sax/DTDHandler.java
diff --git a/jaxp/src/share/classes/org/xml/sax/DocumentHandler.java b/jaxp/src/org/xml/sax/DocumentHandler.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/DocumentHandler.java
rename to jaxp/src/org/xml/sax/DocumentHandler.java
diff --git a/jaxp/src/share/classes/org/xml/sax/EntityResolver.java b/jaxp/src/org/xml/sax/EntityResolver.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/EntityResolver.java
rename to jaxp/src/org/xml/sax/EntityResolver.java
diff --git a/jaxp/src/share/classes/org/xml/sax/ErrorHandler.java b/jaxp/src/org/xml/sax/ErrorHandler.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ErrorHandler.java
rename to jaxp/src/org/xml/sax/ErrorHandler.java
diff --git a/jaxp/src/share/classes/org/xml/sax/HandlerBase.java b/jaxp/src/org/xml/sax/HandlerBase.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/HandlerBase.java
rename to jaxp/src/org/xml/sax/HandlerBase.java
diff --git a/jaxp/src/share/classes/org/xml/sax/InputSource.java b/jaxp/src/org/xml/sax/InputSource.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/InputSource.java
rename to jaxp/src/org/xml/sax/InputSource.java
diff --git a/jaxp/src/share/classes/org/xml/sax/Locator.java b/jaxp/src/org/xml/sax/Locator.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/Locator.java
rename to jaxp/src/org/xml/sax/Locator.java
diff --git a/jaxp/src/share/classes/org/xml/sax/Parser.java b/jaxp/src/org/xml/sax/Parser.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/Parser.java
rename to jaxp/src/org/xml/sax/Parser.java
diff --git a/jaxp/src/share/classes/org/xml/sax/SAXException.java b/jaxp/src/org/xml/sax/SAXException.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/SAXException.java
rename to jaxp/src/org/xml/sax/SAXException.java
diff --git a/jaxp/src/share/classes/org/xml/sax/SAXNotRecognizedException.java b/jaxp/src/org/xml/sax/SAXNotRecognizedException.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/SAXNotRecognizedException.java
rename to jaxp/src/org/xml/sax/SAXNotRecognizedException.java
diff --git a/jaxp/src/share/classes/org/xml/sax/SAXNotSupportedException.java b/jaxp/src/org/xml/sax/SAXNotSupportedException.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/SAXNotSupportedException.java
rename to jaxp/src/org/xml/sax/SAXNotSupportedException.java
diff --git a/jaxp/src/share/classes/org/xml/sax/SAXParseException.java b/jaxp/src/org/xml/sax/SAXParseException.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/SAXParseException.java
rename to jaxp/src/org/xml/sax/SAXParseException.java
diff --git a/jaxp/src/share/classes/org/xml/sax/XMLFilter.java b/jaxp/src/org/xml/sax/XMLFilter.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/XMLFilter.java
rename to jaxp/src/org/xml/sax/XMLFilter.java
diff --git a/jaxp/src/share/classes/org/xml/sax/XMLReader.java b/jaxp/src/org/xml/sax/XMLReader.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/XMLReader.java
rename to jaxp/src/org/xml/sax/XMLReader.java
diff --git a/jaxp/src/share/classes/org/xml/sax/ext/Attributes2.java b/jaxp/src/org/xml/sax/ext/Attributes2.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ext/Attributes2.java
rename to jaxp/src/org/xml/sax/ext/Attributes2.java
diff --git a/jaxp/src/share/classes/org/xml/sax/ext/Attributes2Impl.java b/jaxp/src/org/xml/sax/ext/Attributes2Impl.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ext/Attributes2Impl.java
rename to jaxp/src/org/xml/sax/ext/Attributes2Impl.java
diff --git a/jaxp/src/share/classes/org/xml/sax/ext/DeclHandler.java b/jaxp/src/org/xml/sax/ext/DeclHandler.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ext/DeclHandler.java
rename to jaxp/src/org/xml/sax/ext/DeclHandler.java
diff --git a/jaxp/src/share/classes/org/xml/sax/ext/DefaultHandler2.java b/jaxp/src/org/xml/sax/ext/DefaultHandler2.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ext/DefaultHandler2.java
rename to jaxp/src/org/xml/sax/ext/DefaultHandler2.java
diff --git a/jaxp/src/share/classes/org/xml/sax/ext/EntityResolver2.java b/jaxp/src/org/xml/sax/ext/EntityResolver2.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ext/EntityResolver2.java
rename to jaxp/src/org/xml/sax/ext/EntityResolver2.java
diff --git a/jaxp/src/share/classes/org/xml/sax/ext/LexicalHandler.java b/jaxp/src/org/xml/sax/ext/LexicalHandler.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ext/LexicalHandler.java
rename to jaxp/src/org/xml/sax/ext/LexicalHandler.java
diff --git a/jaxp/src/share/classes/org/xml/sax/ext/Locator2.java b/jaxp/src/org/xml/sax/ext/Locator2.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ext/Locator2.java
rename to jaxp/src/org/xml/sax/ext/Locator2.java
diff --git a/jaxp/src/share/classes/org/xml/sax/ext/Locator2Impl.java b/jaxp/src/org/xml/sax/ext/Locator2Impl.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ext/Locator2Impl.java
rename to jaxp/src/org/xml/sax/ext/Locator2Impl.java
diff --git a/jaxp/src/share/classes/org/xml/sax/ext/package.html b/jaxp/src/org/xml/sax/ext/package.html
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/ext/package.html
rename to jaxp/src/org/xml/sax/ext/package.html
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/AttributeListImpl.java b/jaxp/src/org/xml/sax/helpers/AttributeListImpl.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/AttributeListImpl.java
rename to jaxp/src/org/xml/sax/helpers/AttributeListImpl.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/AttributesImpl.java b/jaxp/src/org/xml/sax/helpers/AttributesImpl.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/AttributesImpl.java
rename to jaxp/src/org/xml/sax/helpers/AttributesImpl.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/DefaultHandler.java b/jaxp/src/org/xml/sax/helpers/DefaultHandler.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/DefaultHandler.java
rename to jaxp/src/org/xml/sax/helpers/DefaultHandler.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/LocatorImpl.java b/jaxp/src/org/xml/sax/helpers/LocatorImpl.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/LocatorImpl.java
rename to jaxp/src/org/xml/sax/helpers/LocatorImpl.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/NamespaceSupport.java b/jaxp/src/org/xml/sax/helpers/NamespaceSupport.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/NamespaceSupport.java
rename to jaxp/src/org/xml/sax/helpers/NamespaceSupport.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/NewInstance.java b/jaxp/src/org/xml/sax/helpers/NewInstance.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/NewInstance.java
rename to jaxp/src/org/xml/sax/helpers/NewInstance.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/ParserAdapter.java b/jaxp/src/org/xml/sax/helpers/ParserAdapter.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/ParserAdapter.java
rename to jaxp/src/org/xml/sax/helpers/ParserAdapter.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/ParserFactory.java b/jaxp/src/org/xml/sax/helpers/ParserFactory.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/ParserFactory.java
rename to jaxp/src/org/xml/sax/helpers/ParserFactory.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/XMLFilterImpl.java b/jaxp/src/org/xml/sax/helpers/XMLFilterImpl.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/XMLFilterImpl.java
rename to jaxp/src/org/xml/sax/helpers/XMLFilterImpl.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/XMLReaderAdapter.java b/jaxp/src/org/xml/sax/helpers/XMLReaderAdapter.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/XMLReaderAdapter.java
rename to jaxp/src/org/xml/sax/helpers/XMLReaderAdapter.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/XMLReaderFactory.java b/jaxp/src/org/xml/sax/helpers/XMLReaderFactory.java
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/XMLReaderFactory.java
rename to jaxp/src/org/xml/sax/helpers/XMLReaderFactory.java
diff --git a/jaxp/src/share/classes/org/xml/sax/helpers/package.html b/jaxp/src/org/xml/sax/helpers/package.html
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/helpers/package.html
rename to jaxp/src/org/xml/sax/helpers/package.html
diff --git a/jaxp/src/share/classes/org/xml/sax/package.html b/jaxp/src/org/xml/sax/package.html
similarity index 100%
rename from jaxp/src/share/classes/org/xml/sax/package.html
rename to jaxp/src/org/xml/sax/package.html
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ObjectFactory.java
deleted file mode 100644
index 39aca74e6c6..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/ObjectFactory.java
+++ /dev/null
@@ -1,661 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/15 02:39:54 jeffsuttor Exp $
- */
-
-package com.sun.org.apache.xalan.internal.lib;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.9 2008/04/02 00:40:59 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- System.err.println("JAXP: " + msg);
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = -7640369932165775029L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/SecuritySupport.java
deleted file mode 100644
index d6acb0113a0..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.1.2.1 2005/08/01 02:08:48 jeffsuttor Exp $
- */
-
-package com.sun.org.apache.xalan.internal.lib;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/SecuritySupport12.java
deleted file mode 100644
index 8cfd729d86f..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/lib/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.1.2.1 2005/08/01 02:08:47 jeffsuttor Exp $
- */
-
-package com.sun.org.apache.xalan.internal.lib;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/ObjectFactory.java
deleted file mode 100644
index 701b5e20d52..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/ObjectFactory.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/12 12:18:06 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xslt;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.9 2008/04/02 00:41:00 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = 2276082712114762609L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/SecuritySupport.java
deleted file mode 100644
index d7b9462d136..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/09 07:17:15 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xslt;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/SecuritySupport12.java
deleted file mode 100644
index 3e0bb6fa4e9..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xslt/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/09 07:17:45 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xslt;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/ObjectFactory.java
deleted file mode 100644
index 181e8e1dc37..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/ObjectFactory.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/12 09:12:02 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.cmdline;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.9 2008/04/02 00:41:02 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = -6072257854297546607L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/SecuritySupport.java
deleted file mode 100644
index 1042adeb898..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/08/31 11:30:44 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.cmdline;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/SecuritySupport12.java
deleted file mode 100644
index dc3144fe838..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/cmdline/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/08/31 11:33:55 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.cmdline;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ObjectFactory.java
deleted file mode 100644
index 74b251bacb4..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/ObjectFactory.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/12 10:51:22 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.compiler;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.9 2008/04/02 00:41:01 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = 3326843611085065902L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SecuritySupport.java
deleted file mode 100644
index 65982834f26..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/05 08:57:13 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.compiler;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SecuritySupport12.java
deleted file mode 100644
index 99ee7e88cdf..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/05 08:58:02 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.compiler;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator.java
deleted file mode 100644
index 0d21b3b3a9c..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/MethodGenerator.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: MethodGenerator.java,v 1.2.4.1 2005/09/05 11:16:47 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
-
-import java.util.Hashtable;
-
-import com.sun.org.apache.bcel.internal.generic.ALOAD;
-import com.sun.org.apache.bcel.internal.generic.ASTORE;
-import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
-import com.sun.org.apache.bcel.internal.generic.ICONST;
-import com.sun.org.apache.bcel.internal.generic.ILOAD;
-import com.sun.org.apache.bcel.internal.generic.INVOKEINTERFACE;
-import com.sun.org.apache.bcel.internal.generic.ISTORE;
-import com.sun.org.apache.bcel.internal.generic.Instruction;
-import com.sun.org.apache.bcel.internal.generic.InstructionHandle;
-import com.sun.org.apache.bcel.internal.generic.InstructionList;
-import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
-import com.sun.org.apache.bcel.internal.generic.MethodGen;
-import com.sun.org.apache.bcel.internal.generic.Type;
-import com.sun.org.apache.xalan.internal.xsltc.compiler.Pattern;
-
-/**
- * @author Jacek Ambroziak
- * @author Santiago Pericas-Geertsen
- */
-public class MethodGenerator extends MethodGen
- implements com.sun.org.apache.xalan.internal.xsltc.compiler.Constants {
- protected static final int INVALID_INDEX = -1;
-
- private static final String START_ELEMENT_SIG
- = "(" + STRING_SIG + ")V";
- private static final String END_ELEMENT_SIG
- = START_ELEMENT_SIG;
-
- private InstructionList _mapTypeSub;
-
- private static final int DOM_INDEX = 1;
- private static final int ITERATOR_INDEX = 2;
- private static final int HANDLER_INDEX = 3;
-
- private Instruction _iloadCurrent;
- private Instruction _istoreCurrent;
- private final Instruction _astoreHandler;
- private final Instruction _aloadHandler;
- private final Instruction _astoreIterator;
- private final Instruction _aloadIterator;
- private final Instruction _aloadDom;
- private final Instruction _astoreDom;
-
- private final Instruction _startElement;
- private final Instruction _endElement;
- private final Instruction _startDocument;
- private final Instruction _endDocument;
- private final Instruction _attribute;
- private final Instruction _uniqueAttribute;
- private final Instruction _namespace;
-
- private final Instruction _setStartNode;
- private final Instruction _reset;
- private final Instruction _nextNode;
-
- private SlotAllocator _slotAllocator;
- private boolean _allocatorInit = false;
- /**
- * A mapping between patterns and instruction lists used by
- * test sequences to avoid compiling the same pattern multiple
- * times. Note that patterns whose kernels are "*", "node()"
- * and "@*" can between shared by test sequences.
- */
- private Hashtable _preCompiled = new Hashtable();
-
-
- public MethodGenerator(int access_flags, Type return_type,
- Type[] arg_types, String[] arg_names,
- String method_name, String class_name,
- InstructionList il, ConstantPoolGen cpg) {
- super(access_flags, return_type, arg_types, arg_names, method_name,
- class_name, il, cpg);
-
- _astoreHandler = new ASTORE(HANDLER_INDEX);
- _aloadHandler = new ALOAD(HANDLER_INDEX);
- _astoreIterator = new ASTORE(ITERATOR_INDEX);
- _aloadIterator = new ALOAD(ITERATOR_INDEX);
- _aloadDom = new ALOAD(DOM_INDEX);
- _astoreDom = new ASTORE(DOM_INDEX);
-
- final int startElement =
- cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
- "startElement",
- START_ELEMENT_SIG);
- _startElement = new INVOKEINTERFACE(startElement, 2);
-
- final int endElement =
- cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
- "endElement",
- END_ELEMENT_SIG);
- _endElement = new INVOKEINTERFACE(endElement, 2);
-
- final int attribute =
- cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
- "addAttribute",
- "("
- + STRING_SIG
- + STRING_SIG
- + ")V");
- _attribute = new INVOKEINTERFACE(attribute, 3);
-
- final int uniqueAttribute =
- cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
- "addUniqueAttribute",
- "("
- + STRING_SIG
- + STRING_SIG
- + "I)V");
- _uniqueAttribute = new INVOKEINTERFACE(uniqueAttribute, 4);
-
- final int namespace =
- cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
- "namespaceAfterStartElement",
- "("
- + STRING_SIG
- + STRING_SIG
- + ")V");
- _namespace = new INVOKEINTERFACE(namespace, 3);
-
- int index = cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
- "startDocument",
- "()V");
- _startDocument = new INVOKEINTERFACE(index, 1);
-
- index = cpg.addInterfaceMethodref(TRANSLET_OUTPUT_INTERFACE,
- "endDocument",
- "()V");
- _endDocument = new INVOKEINTERFACE(index, 1);
-
-
- index = cpg.addInterfaceMethodref(NODE_ITERATOR,
- SET_START_NODE,
- SET_START_NODE_SIG);
- _setStartNode = new INVOKEINTERFACE(index, 2);
-
- index = cpg.addInterfaceMethodref(NODE_ITERATOR,
- "reset", "()"+NODE_ITERATOR_SIG);
- _reset = new INVOKEINTERFACE(index, 1);
-
- index = cpg.addInterfaceMethodref(NODE_ITERATOR, NEXT, NEXT_SIG);
- _nextNode = new INVOKEINTERFACE(index, 1);
-
- _slotAllocator = new SlotAllocator();
- _slotAllocator.initialize(getLocalVariables());
- _allocatorInit = true;
- }
-
- /**
- * Allocates a local variable. If the slot allocator has already been
- * initialized, then call addLocalVariable2() so that the new variable
- * is known to the allocator. Failing to do this may cause the allocator
- * to return a slot that is already in use.
- */
- public LocalVariableGen addLocalVariable(String name, Type type,
- InstructionHandle start,
- InstructionHandle end)
- {
- return (_allocatorInit) ? addLocalVariable2(name, type, start)
- : super.addLocalVariable(name, type, start, end);
- }
-
- public LocalVariableGen addLocalVariable2(String name, Type type,
- InstructionHandle start)
- {
- return super.addLocalVariable(name, type,
- _slotAllocator.allocateSlot(type),
- start, null);
- }
-
- public void removeLocalVariable(LocalVariableGen lvg) {
- _slotAllocator.releaseSlot(lvg);
- super.removeLocalVariable(lvg);
- }
-
- public Instruction loadDOM() {
- return _aloadDom;
- }
-
- public Instruction storeDOM() {
- return _astoreDom;
- }
-
- public Instruction storeHandler() {
- return _astoreHandler;
- }
-
- public Instruction loadHandler() {
- return _aloadHandler;
- }
-
- public Instruction storeIterator() {
- return _astoreIterator;
- }
-
- public Instruction loadIterator() {
- return _aloadIterator;
- }
-
- public final Instruction setStartNode() {
- return _setStartNode;
- }
-
- public final Instruction reset() {
- return _reset;
- }
-
- public final Instruction nextNode() {
- return _nextNode;
- }
-
- public final Instruction startElement() {
- return _startElement;
- }
-
- public final Instruction endElement() {
- return _endElement;
- }
-
- public final Instruction startDocument() {
- return _startDocument;
- }
-
- public final Instruction endDocument() {
- return _endDocument;
- }
-
- public final Instruction attribute() {
- return _attribute;
- }
-
- public final Instruction uniqueAttribute() {
- return _uniqueAttribute;
- }
-
- public final Instruction namespace() {
- return _namespace;
- }
-
- public Instruction loadCurrentNode() {
- if (_iloadCurrent == null) {
- int idx = getLocalIndex("current");
- if (idx > 0)
- _iloadCurrent = new ILOAD(idx);
- else
- _iloadCurrent = new ICONST(0);
- }
- return _iloadCurrent;
- }
-
- public Instruction storeCurrentNode() {
- return _istoreCurrent != null
- ? _istoreCurrent
- : (_istoreCurrent = new ISTORE(getLocalIndex("current")));
- }
-
- /** by default context node is the same as current node. MK437 */
- public Instruction loadContextNode() {
- return loadCurrentNode();
- }
-
- public Instruction storeContextNode() {
- return storeCurrentNode();
- }
-
- public int getLocalIndex(String name) {
- return getLocalVariable(name).getIndex();
- }
-
- public LocalVariableGen getLocalVariable(String name) {
- final LocalVariableGen[] vars = getLocalVariables();
- for (int i = 0; i < vars.length; i++)
- if (vars[i].getName().equals(name))
- return vars[i];
- return null;
- }
-
- public void setMaxLocals() {
-
- // Get the current number of local variable slots
- int maxLocals = super.getMaxLocals();
- int prevLocals = maxLocals;
-
- // Get numer of actual variables
- final LocalVariableGen[] localVars = super.getLocalVariables();
- if (localVars != null) {
- if (localVars.length > maxLocals)
- maxLocals = localVars.length;
- }
-
- // We want at least 5 local variable slots (for parameters)
- if (maxLocals < 5) maxLocals = 5;
-
- super.setMaxLocals(maxLocals);
- }
-
- /**
- * Add a pre-compiled pattern to this mode.
- */
- public void addInstructionList(Pattern pattern,
- InstructionList ilist)
- {
- _preCompiled.put(pattern, ilist);
- }
-
- /**
- * Get the instruction list for a pre-compiled pattern. Used by
- * test sequences to avoid compiling patterns more than once.
- */
- public InstructionList getInstructionList(Pattern pattern) {
- return (InstructionList) _preCompiled.get(pattern);
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectFactory.java
deleted file mode 100644
index ae90bf0115c..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ObjectFactory.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/12 11:45:06 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.9 2008/04/02 00:40:59 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = -4417969773510154215L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/SecuritySupport.java
deleted file mode 100644
index 25dc37bae4f..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/05 11:31:37 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/SecuritySupport12.java
deleted file mode 100644
index 1d77602909c..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/05 11:32:07 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ObjectFactory.java
deleted file mode 100644
index d38f3c21718..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/ObjectFactory.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/12 11:53:33 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.dom;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.9 2008/04/02 00:41:00 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = -5948733402959678002L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SecuritySupport.java
deleted file mode 100644
index 68ab40e5044..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/06 10:03:40 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.dom;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SecuritySupport12.java
deleted file mode 100644
index 34006210fa9..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/dom/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/06 10:06:07 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.dom;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ObjectFactory.java
deleted file mode 100644
index 9300009d562..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/ObjectFactory.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/12 12:01:33 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.runtime;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.9 2008/04/02 00:40:59 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = -2293620736651286953L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/SecuritySupport.java
deleted file mode 100644
index d730e55f7ec..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/06 11:28:13 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.runtime;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/SecuritySupport12.java
deleted file mode 100644
index 380c2f85ef2..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/runtime/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/06 11:31:16 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.runtime;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/ObjectFactory.java
deleted file mode 100644
index 1b2c36706db..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/ObjectFactory.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/12 12:05:22 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.trax;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.9 2008/04/02 00:41:02 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = -1877553852268428278L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SecuritySupport.java
deleted file mode 100644
index c415b869335..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/06 12:04:10 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.trax;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SecuritySupport12.java
deleted file mode 100644
index 5e0a48c1e6c..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/06 12:05:26 pvedula Exp $
- */
-
-package com.sun.org.apache.xalan.internal.xsltc.trax;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ObjectFactory.java
deleted file mode 100644
index eaeaa977b51..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/dom/ObjectFactory.java
+++ /dev/null
@@ -1,555 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.org.apache.xerces.internal.dom;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- *
- * @xerces.internal
- *
- */
-final class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME = "xerces.properties";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /**
- * Default columns per line.
- */
- private static final int DEFAULT_LINE_LENGTH = 80;
-
- /** cache the contents of the xerces.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXercesProperties = null;
-
- /***
- * Cache the time stamp of the xerces.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xerces.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- if (DEBUG) debugPrintln("debug is on");
-
- SecuritySupport ss = SecuritySupport.getInstance();
- ClassLoader cl = findClassLoader();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return newInstance(systemProp, cl, true);
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // JAXP specific change
- // always use fallback class to avoid the expense of constantly
- // "stat"ing a non-existent "xerces.properties" and jar SPI entry
- // see CR 6400863: Expensive creating of SAX parser in Mustang
- if (true) {
- if (fallbackClassName == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- if (DEBUG) debugPrintln("using fallback, value=" + fallbackClassName);
- return newInstance(fallbackClassName, cl, true);
- }
-
- // Try to read from propertiesFilename, or $java.home/lib/xerces.properties
- String factoryClassName = null;
- // no properties file name specified; use $JAVA_HOME/lib/xerces.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXercesProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXercesProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xerces.properties before (or it's outdeated)
- fXercesProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXercesProperties.load(fis);
- }
- } catch (Exception x) {
- fXercesProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXercesProperties != null) {
- factoryClassName = fXercesProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value=" + factoryClassName);
- return newInstance(factoryClassName, cl, true);
- }
-
- // Try Jar Service Provider Mechanism
- Object provider = findJarServiceProvider(factoryId);
- if (provider != null) {
- return provider;
- }
-
- if (fallbackClassName == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- if (DEBUG) debugPrintln("using fallback, value=" + fallbackClassName);
- return newInstance(fallbackClassName, cl, true);
- } // createObject(String,String,String):Object
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xerces
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the package
- //restrict the access to package as speicified in java.security policy
- SecurityManager security = System.getSecurityManager();
- if (security != null) {
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /*
- * Try to find provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static Object findJarServiceProvider(String factoryId)
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = "META-INF/services/" + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"), DEFAULT_LINE_LENGTH);
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is), DEFAULT_LINE_LENGTH);
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return newInstance(factoryClassName, cl, false);
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static final class ConfigurationError
- extends Error {
-
- /** Serialization version. */
- static final long serialVersionUID = 1914065341994951202L;
-
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/ObjectFactory.java
deleted file mode 100644
index f6dd089af44..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/impl/dv/ObjectFactory.java
+++ /dev/null
@@ -1,555 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.org.apache.xerces.internal.impl.dv;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- *
- * @xerces.internal
- *
- */
-final class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME = "xerces.properties";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /**
- * Default columns per line.
- */
- private static final int DEFAULT_LINE_LENGTH = 80;
-
- /** cache the contents of the xerces.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXercesProperties = null;
-
- /***
- * Cache the time stamp of the xerces.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xerces.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- if (DEBUG) debugPrintln("debug is on");
-
- SecuritySupport ss = SecuritySupport.getInstance();
- ClassLoader cl = findClassLoader();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return newInstance(systemProp, cl, true);
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // JAXP specific change
- // always use fallback class to avoid the expense of constantly
- // "stat"ing a non-existent "xerces.properties" and jar SPI entry
- // see CR 6400863: Expensive creating of SAX parser in Mustang
- if (true) {
- if (fallbackClassName == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- if (DEBUG) debugPrintln("using fallback, value=" + fallbackClassName);
- return newInstance(fallbackClassName, cl, true);
- }
-
- // Try to read from propertiesFilename, or $java.home/lib/xerces.properties
- String factoryClassName = null;
- // no properties file name specified; use $JAVA_HOME/lib/xerces.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXercesProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXercesProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xerces.properties before (or it's outdeated)
- fXercesProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXercesProperties.load(fis);
- }
- } catch (Exception x) {
- fXercesProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXercesProperties != null) {
- factoryClassName = fXercesProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value=" + factoryClassName);
- return newInstance(factoryClassName, cl, true);
- }
-
- // Try Jar Service Provider Mechanism
- Object provider = findJarServiceProvider(factoryId);
- if (provider != null) {
- return provider;
- }
-
- if (fallbackClassName == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- if (DEBUG) debugPrintln("using fallback, value=" + fallbackClassName);
- return newInstance(fallbackClassName, cl, true);
- } // createObject(String,String,String):Object
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xerces
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the package
- //restrict the access to package as speicified in java.security policy
- SecurityManager security = System.getSecurityManager();
- if (security != null) {
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /*
- * Try to find provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static Object findJarServiceProvider(String factoryId)
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = "META-INF/services/" + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"), DEFAULT_LINE_LENGTH);
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is), DEFAULT_LINE_LENGTH);
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return newInstance(factoryClassName, cl, false);
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static final class ConfigurationError
- extends Error {
-
- /** Serialization version. */
- static final long serialVersionUID = 8521878292694272124L;
-
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/SecuritySupport.java
deleted file mode 100644
index e8148109d7d..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xerces/internal/parsers/SecuritySupport.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002,2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.org.apache.xerces.internal.parsers;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- * This class is duplicated for each subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of any API.
- *
- * @xerces.internal
- */
-final class SecuritySupport {
-
- private static final SecuritySupport securitySupport = new SecuritySupport();
-
- /**
- * Return an instance of this class.
- */
- static SecuritySupport getInstance() {
- return securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
- private SecuritySupport () {}
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ObjectFactory.java
deleted file mode 100644
index fc780c57a7f..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ObjectFactory.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/15 08:14:55 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.dtm;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.7 2008/04/02 00:41:00 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = 5122054096615067992L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/SecuritySupport.java
deleted file mode 100644
index 4cd35621e53..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/15 08:14:55 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.dtm;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/SecuritySupport12.java
deleted file mode 100644
index c5c4c34e81e..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/15 08:14:56 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.dtm;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/ObjectFactory.java
deleted file mode 100644
index 3f89ec4c3f9..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/ObjectFactory.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/15 08:15:08 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.dtm.ref;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.7 2008/04/02 00:41:01 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = 7772782876036961354L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/SecuritySupport.java
deleted file mode 100644
index 24b2971154a..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/15 08:15:09 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.dtm.ref;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/SecuritySupport12.java
deleted file mode 100644
index 372970f3fc8..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/dtm/ref/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/15 08:15:09 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.dtm.ref;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ObjectFactory.java
deleted file mode 100644
index 5b1a591edf0..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/ObjectFactory.java
+++ /dev/null
@@ -1,662 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/15 08:15:20 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.serializer;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Properties;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @xsl.usage internal
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = 8859254254255146542L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SecuritySupport.java
deleted file mode 100644
index a037d26a033..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SecuritySupport.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/15 08:15:21 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.serializer;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SecuritySupport12.java
deleted file mode 100644
index 556948f5b4d..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/serializer/SecuritySupport12.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/15 08:15:22 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.serializer;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ObjectFactory.java
deleted file mode 100644
index 9628c5eb1f8..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/ObjectFactory.java
+++ /dev/null
@@ -1,658 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.3 2005/09/28 13:49:20 pvedula Exp $
- */
-
-package com.sun.org.apache.xml.internal.utils;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.8 2008/04/02 00:41:01 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- FileInputStream fis = null;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- fis = ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- FileInputStream fis = null;
- try {
- fis = ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- finally {
- // try to close the input stream if one was opened.
- if (fis != null) {
- try {
- fis.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- try{
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1) packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
- }catch(SecurityException e){
- throw e;
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- } catch (IOException x) {
- // No provider found
- return null;
- }
- finally {
- try {
- // try to close the reader.
- rd.close();
- }
- // Ignore the exception.
- catch (IOException exc) {}
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
- static final long serialVersionUID = 2036619216663421552L;
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SecuritySupport.java
deleted file mode 100644
index e66f70ac21c..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/15 08:15:53 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.utils;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SecuritySupport12.java
deleted file mode 100644
index 0d2be96e398..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xml/internal/utils/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/15 08:15:53 suresh_emailid Exp $
- */
-
-package com.sun.org.apache.xml.internal.utils;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/ObjectFactory.java b/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/ObjectFactory.java
deleted file mode 100644
index 306d7f3b632..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/ObjectFactory.java
+++ /dev/null
@@ -1,635 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: ObjectFactory.java,v 1.1.2.1 2005/08/01 01:30:35 jeffsuttor Exp $
- */
-
-package com.sun.org.apache.xpath.internal.compiler;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.File;
-import java.io.FileInputStream;
-
-import java.util.Properties;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-/**
- * This class is duplicated for each JAXP subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the JAXP
- * API.
- *
- * This code is designed to implement the JAXP 1.1 spec pluggability
- * feature and is designed to run on JDK version 1.1 and
- * later, and to compile on JDK 1.2 and onward.
- * The code also runs both as part of an unbundled jar file and
- * when bundled as part of the JDK.
- *
- * This class was moved from the javax.xml.parsers.ObjectFactory
- * class and modified to be used as a general utility for creating objects
- * dynamically.
- *
- * @version $Id: ObjectFactory.java,v 1.6 2008/04/02 00:41:02 joehw Exp $
- */
-class ObjectFactory {
-
- //
- // Constants
- //
-
- // name of default properties file to look for in JDK's jre/lib directory
- private static final String DEFAULT_PROPERTIES_FILENAME =
- "xalan.properties";
-
- private static final String SERVICES_PATH = "META-INF/services/";
-
- /** Set to true for debugging */
- private static final boolean DEBUG = false;
-
- /** cache the contents of the xalan.properties file.
- * Until an attempt has been made to read this file, this will
- * be null; if the file does not exist or we encounter some other error
- * during the read, this will be empty.
- */
- private static Properties fXalanProperties = null;
-
- /***
- * Cache the time stamp of the xalan.properties file so
- * that we know if it's been modified and can invalidate
- * the cache when necessary.
- */
- private static long fLastModified = -1;
-
- //
- // Public static methods
- //
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId, String fallbackClassName)
- throws ConfigurationError {
- return createObject(factoryId, null, fallbackClassName);
- } // createObject(String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return instance of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Object createObject(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- Class factoryClass = lookUpFactoryClass(factoryId,
- propertiesFilename,
- fallbackClassName);
-
- if (factoryClass == null) {
- throw new ConfigurationError(
- "Provider for " + factoryId + " cannot be found", null);
- }
-
- try{
- Object instance = factoryClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
- return instance;
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider for factory " + factoryId
- + " could not be instantiated: " + x, x);
- }
- } // createObject(String,String,String):Object
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object of factory, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId)
- throws ConfigurationError
- {
- return lookUpFactoryClass(factoryId, null, null);
- } // lookUpFactoryClass(String):Class
-
- /**
- * Finds the implementation Class object in the specified order. The
- * specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return Class object that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static Class lookUpFactoryClass(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- throws ConfigurationError
- {
- String factoryClassName = lookUpFactoryClassName(factoryId,
- propertiesFilename,
- fallbackClassName);
- ClassLoader cl = findClassLoader();
-
- if (factoryClassName == null) {
- factoryClassName = fallbackClassName;
- }
-
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(factoryClassName,
- cl,
- true);
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return providerClass;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + factoryClassName + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider "+factoryClassName+" could not be instantiated: "+x,
- x);
- }
- } // lookUpFactoryClass(String,String,String):Class
-
- /**
- * Finds the name of the required implementation class in the specified
- * order. The specified order is the following:
- *
- * - query the system property using
System.getProperty
- * - read
$java.home/lib/propertiesFilename file
- * - read
META-INF/services/factoryId file
- * - use fallback classname
- *
- *
- * @return name of class that provides factory service, never null
- *
- * @param factoryId Name of the factory to find, same as
- * a property name
- * @param propertiesFilename The filename in the $java.home/lib directory
- * of the properties file. If none specified,
- * ${java.home}/lib/xalan.properties will be used.
- * @param fallbackClassName Implementation class name, if nothing else
- * is found. Use null to mean no fallback.
- *
- * @exception ObjectFactory.ConfigurationError
- */
- static String lookUpFactoryClassName(String factoryId,
- String propertiesFilename,
- String fallbackClassName)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Use the system property first
- try {
- String systemProp = ss.getSystemProperty(factoryId);
- if (systemProp != null) {
- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
- return systemProp;
- }
- } catch (SecurityException se) {
- // Ignore and continue w/ next location
- }
-
- // Try to read from propertiesFilename, or
- // $java.home/lib/xalan.properties
- String factoryClassName = null;
- // no properties file name specified; use
- // $JAVA_HOME/lib/xalan.properties:
- if (propertiesFilename == null) {
- File propertiesFile = null;
- boolean propertiesFileExists = false;
- try {
- String javah = ss.getSystemProperty("java.home");
- propertiesFilename = javah + File.separator +
- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
- propertiesFile = new File(propertiesFilename);
- propertiesFileExists = ss.getFileExists(propertiesFile);
- } catch (SecurityException e) {
- // try again...
- fLastModified = -1;
- fXalanProperties = null;
- }
-
- synchronized (ObjectFactory.class) {
- boolean loadProperties = false;
- try {
- // file existed last time
- if(fLastModified >= 0) {
- if(propertiesFileExists &&
- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
- loadProperties = true;
- } else {
- // file has stopped existing...
- if(!propertiesFileExists) {
- fLastModified = -1;
- fXalanProperties = null;
- } // else, file wasn't modified!
- }
- } else {
- // file has started to exist:
- if(propertiesFileExists) {
- loadProperties = true;
- fLastModified = ss.getLastModified(propertiesFile);
- } // else, nothing's changed
- }
- if(loadProperties) {
- // must never have attempted to read xalan.properties
- // before (or it's outdeated)
- fXalanProperties = new Properties();
- FileInputStream fis =
- ss.getFileInputStream(propertiesFile);
- fXalanProperties.load(fis);
- fis.close();
- }
- } catch (Exception x) {
- fXalanProperties = null;
- fLastModified = -1;
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- }
- if(fXalanProperties != null) {
- factoryClassName = fXalanProperties.getProperty(factoryId);
- }
- } else {
- try {
- FileInputStream fis =
- ss.getFileInputStream(new File(propertiesFilename));
- Properties props = new Properties();
- props.load(fis);
- fis.close();
- factoryClassName = props.getProperty(factoryId);
- } catch (Exception x) {
- // assert(x instanceof FileNotFoundException
- // || x instanceof SecurityException)
- // In both cases, ignore and continue w/ next location
- }
- }
- if (factoryClassName != null) {
- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
- + factoryClassName);
- return factoryClassName;
- }
-
- // Try Jar Service Provider Mechanism
- return findJarServiceProviderName(factoryId);
- } // lookUpFactoryClass(String,String):String
-
- //
- // Private static methods
- //
-
- /** Prints a message to standard error if debugging is enabled. */
- private static void debugPrintln(String msg) {
- if (DEBUG) {
- System.err.println("JAXP: " + msg);
- }
- } // debugPrintln(String)
-
- /**
- * Figure out which ClassLoader to use. For JDK 1.2 and later use
- * the context ClassLoader.
- */
- static ClassLoader findClassLoader()
- throws ConfigurationError
- {
- SecuritySupport ss = SecuritySupport.getInstance();
-
- // Figure out which ClassLoader to use for loading the provider
- // class. If there is a Context ClassLoader then use it.
- ClassLoader context = ss.getContextClassLoader();
- ClassLoader system = ss.getSystemClassLoader();
-
- ClassLoader chain = system;
- while (true) {
- if (context == chain) {
- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
- // or any Context ClassLoader in chain of system classloader
- // (including extension ClassLoader) so extend to widest
- // ClassLoader (always look in system ClassLoader if Xalan
- // is in boot/extension/system classpath and in current
- // ClassLoader otherwise); normal classloaders delegate
- // back to system ClassLoader first so this widening doesn't
- // change the fact that context ClassLoader will be consulted
- ClassLoader current = ObjectFactory.class.getClassLoader();
-
- chain = system;
- while (true) {
- if (current == chain) {
- // Assert: Current ClassLoader in chain of
- // boot/extension/system ClassLoaders
- return system;
- }
- if (chain == null) {
- break;
- }
- chain = ss.getParentClassLoader(chain);
- }
-
- // Assert: Current ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return current;
- }
-
- if (chain == null) {
- // boot ClassLoader reached
- break;
- }
-
- // Check for any extension ClassLoaders in chain up to
- // boot ClassLoader
- chain = ss.getParentClassLoader(chain);
- };
-
- // Assert: Context ClassLoader not in chain of
- // boot/extension/system ClassLoaders
- return context;
- } // findClassLoader():ClassLoader
-
- /**
- * Create an instance of a class using the specified ClassLoader
- */
- static Object newInstance(String className, ClassLoader cl,
- boolean doFallback)
- throws ConfigurationError
- {
- // assert(className != null);
- try{
- Class providerClass = findProviderClass(className, cl, doFallback);
- Object instance = providerClass.newInstance();
- if (DEBUG) debugPrintln("created new instance of " + providerClass +
- " using ClassLoader: " + cl);
- return instance;
- } catch (ClassNotFoundException x) {
- throw new ConfigurationError(
- "Provider " + className + " not found", x);
- } catch (Exception x) {
- throw new ConfigurationError(
- "Provider " + className + " could not be instantiated: " + x,
- x);
- }
- }
-
- /**
- * Find a Class using the specified ClassLoader
- */
- static Class findProviderClass(String className, ClassLoader cl,
- boolean doFallback)
- throws ClassNotFoundException, ConfigurationError
- {
- //throw security exception if the calling thread is not allowed to access the
- //class. Restrict the access to the package classes as specified in java.security policy.
- SecurityManager security = System.getSecurityManager();
- if (security != null){
- final int lastDot = className.lastIndexOf(".");
- String packageName = className;
- if (lastDot != -1)
- packageName = className.substring(0, lastDot);
- security.checkPackageAccess(packageName);
- }
-
- Class providerClass;
- if (cl == null) {
- // XXX Use the bootstrap ClassLoader. There is no way to
- // load a class using the bootstrap ClassLoader that works
- // in both JDK 1.1 and Java 2. However, this should still
- // work b/c the following should be true:
- //
- // (cl == null) iff current ClassLoader == null
- //
- // Thus Class.forName(String) will use the current
- // ClassLoader which will be the bootstrap ClassLoader.
- providerClass = Class.forName(className);
- } else {
- try {
- providerClass = cl.loadClass(className);
- } catch (ClassNotFoundException x) {
- if (doFallback) {
- // Fall back to current classloader
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (current == null) {
- providerClass = Class.forName(className);
- } else if (cl != current) {
- cl = current;
- providerClass = cl.loadClass(className);
- } else {
- throw x;
- }
- } else {
- throw x;
- }
- }
- }
-
- return providerClass;
- }
-
- /**
- * Find the name of service provider using Jar Service Provider Mechanism
- *
- * @return instance of provider class if found or null
- */
- private static String findJarServiceProviderName(String factoryId)
- {
- SecuritySupport ss = SecuritySupport.getInstance();
- String serviceId = SERVICES_PATH + factoryId;
- InputStream is = null;
-
- // First try the Context ClassLoader
- ClassLoader cl = findClassLoader();
-
- is = ss.getResourceAsStream(cl, serviceId);
-
- // If no provider found then try the current ClassLoader
- if (is == null) {
- ClassLoader current = ObjectFactory.class.getClassLoader();
- if (cl != current) {
- cl = current;
- is = ss.getResourceAsStream(cl, serviceId);
- }
- }
-
- if (is == null) {
- // No provider found
- return null;
- }
-
- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
- " using ClassLoader: " + cl);
-
- // Read the service provider name in UTF-8 as specified in
- // the jar spec. Unfortunately this fails in Microsoft
- // VJ++, which does not implement the UTF-8
- // encoding. Theoretically, we should simply let it fail in
- // that case, since the JVM is obviously broken if it
- // doesn't support such a basic standard. But since there
- // are still some users attempting to use VJ++ for
- // development, we have dropped in a fallback which makes a
- // second attempt using the platform's default encoding. In
- // VJ++ this is apparently ASCII, which is a subset of
- // UTF-8... and since the strings we'll be reading here are
- // also primarily limited to the 7-bit ASCII range (at
- // least, in English versions), this should work well
- // enough to keep us on the air until we're ready to
- // officially decommit from VJ++. [Edited comment from
- // jkesselm]
- BufferedReader rd;
- try {
- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
- } catch (java.io.UnsupportedEncodingException e) {
- rd = new BufferedReader(new InputStreamReader(is));
- }
-
- String factoryClassName = null;
- try {
- // XXX Does not handle all possible input as specified by the
- // Jar Service Provider specification
- factoryClassName = rd.readLine();
- rd.close();
- } catch (IOException x) {
- // No provider found
- return null;
- }
-
- if (factoryClassName != null &&
- ! "".equals(factoryClassName)) {
- if (DEBUG) debugPrintln("found in resource, value="
- + factoryClassName);
-
- // Note: here we do not want to fall back to the current
- // ClassLoader because we want to avoid the case where the
- // resource file was found using one ClassLoader and the
- // provider class was instantiated using a different one.
- return factoryClassName;
- }
-
- // No provider found
- return null;
- }
-
- //
- // Classes
- //
-
- /**
- * A configuration error.
- */
- static class ConfigurationError
- extends Error {
-
- //
- // Data
- //
-
- /** Exception. */
- private Exception exception;
-
- //
- // Constructors
- //
-
- /**
- * Construct a new instance with the specified detail string and
- * exception.
- */
- ConfigurationError(String msg, Exception x) {
- super(msg);
- this.exception = x;
- } // (String,Exception)
-
- //
- // Public methods
- //
-
- /** Returns the exception associated to this error. */
- Exception getException() {
- return exception;
- } // getException():Exception
-
- } // class ConfigurationError
-
-} // class ObjectFactory
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/SecuritySupport.java
deleted file mode 100644
index d5fbd61e07e..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.1.2.1 2005/08/01 01:30:35 jeffsuttor Exp $
- */
-
-package com.sun.org.apache.xpath.internal.compiler;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/SecuritySupport12.java
deleted file mode 100644
index 29dfefc8c0b..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/compiler/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.1.2.1 2005/08/01 01:30:31 jeffsuttor Exp $
- */
-
-package com.sun.org.apache.xpath.internal.compiler;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/SecuritySupport.java b/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/SecuritySupport.java
deleted file mode 100644
index 1f6b1e70849..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/SecuritySupport.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport.java,v 1.1.2.1 2005/08/01 01:29:39 jeffsuttor Exp $
- */
-
-package com.sun.org.apache.xpath.internal.functions;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Base class with security related methods that work on JDK 1.1.
- */
-class SecuritySupport {
-
- /*
- * Make this of type Object so that the verifier won't try to
- * prove its type, thus possibly trying to load the SecuritySupport12
- * class.
- */
- private static final Object securitySupport;
-
- static {
- SecuritySupport ss = null;
- try {
- Class c = Class.forName("java.security.AccessController");
- // if that worked, we're on 1.2.
- /*
- // don't reference the class explicitly so it doesn't
- // get dragged in accidentally.
- c = Class.forName("javax.mail.SecuritySupport12");
- Constructor cons = c.getConstructor(new Class[] { });
- ss = (SecuritySupport)cons.newInstance(new Object[] { });
- */
- /*
- * Unfortunately, we can't load the class using reflection
- * because the class is package private. And the class has
- * to be package private so the APIs aren't exposed to other
- * code that could use them to circumvent security. Thus,
- * we accept the risk that the direct reference might fail
- * on some JDK 1.1 JVMs, even though we would never execute
- * this code in such a case. Sigh...
- */
- ss = new SecuritySupport12();
- } catch (Exception ex) {
- // ignore it
- } finally {
- if (ss == null)
- ss = new SecuritySupport();
- securitySupport = ss;
- }
- }
-
- /**
- * Return an appropriate instance of this class, depending on whether
- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
- */
- static SecuritySupport getInstance() {
- return (SecuritySupport)securitySupport;
- }
-
- ClassLoader getContextClassLoader() {
- return null;
- }
-
- ClassLoader getSystemClassLoader() {
- return null;
- }
-
- ClassLoader getParentClassLoader(ClassLoader cl) {
- return null;
- }
-
- String getSystemProperty(String propName) {
- return System.getProperty(propName);
- }
-
- FileInputStream getFileInputStream(File file)
- throws FileNotFoundException
- {
- return new FileInputStream(file);
- }
-
- InputStream getResourceAsStream(ClassLoader cl, String name) {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
-
- boolean getFileExists(File f) {
- return f.exists();
- }
-
- long getLastModified(File f) {
- return f.lastModified();
- }
-}
diff --git a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/SecuritySupport12.java b/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/SecuritySupport12.java
deleted file mode 100644
index 81a55feb4bc..00000000000
--- a/jaxp/src/share/classes/com/sun/org/apache/xpath/internal/functions/SecuritySupport12.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 2002-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * $Id: SecuritySupport12.java,v 1.1.2.1 2005/08/01 01:29:45 jeffsuttor Exp $
- */
-
-package com.sun.org.apache.xpath.internal.functions;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import java.util.Properties;
-
-/**
- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
- * It is package private and therefore is not exposed as part of the Xalan-Java
- * API.
- *
- * Security related methods that only work on J2SE 1.2 and newer.
- */
-class SecuritySupport12 extends SecuritySupport {
-
- ClassLoader getContextClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = Thread.currentThread().getContextClassLoader();
- } catch (SecurityException ex) { }
- return cl;
- }
- });
- }
-
- ClassLoader getSystemClassLoader() {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader cl = null;
- try {
- cl = ClassLoader.getSystemClassLoader();
- } catch (SecurityException ex) {}
- return cl;
- }
- });
- }
-
- ClassLoader getParentClassLoader(final ClassLoader cl) {
- return (ClassLoader)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- ClassLoader parent = null;
- try {
- parent = cl.getParent();
- } catch (SecurityException ex) {}
-
- // eliminate loops in case of the boot
- // ClassLoader returning itself as a parent
- return (parent == cl) ? null : parent;
- }
- });
- }
-
- String getSystemProperty(final String propName) {
- return (String)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return System.getProperty(propName);
- }
- });
- }
-
- FileInputStream getFileInputStream(final File file)
- throws FileNotFoundException
- {
- try {
- return (FileInputStream)
- AccessController.doPrivileged(new PrivilegedExceptionAction() {
- public Object run() throws FileNotFoundException {
- return new FileInputStream(file);
- }
- });
- } catch (PrivilegedActionException e) {
- throw (FileNotFoundException)e.getException();
- }
- }
-
- InputStream getResourceAsStream(final ClassLoader cl,
- final String name)
- {
- return (InputStream)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- InputStream ris;
- if (cl == null) {
- ris = ClassLoader.getSystemResourceAsStream(name);
- } else {
- ris = cl.getResourceAsStream(name);
- }
- return ris;
- }
- });
- }
-
- boolean getFileExists(final File f) {
- return ((Boolean)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Boolean(f.exists());
- }
- })).booleanValue();
- }
-
- long getLastModified(final File f) {
- return ((Long)
- AccessController.doPrivileged(new PrivilegedAction() {
- public Object run() {
- return new Long(f.lastModified());
- }
- })).longValue();
- }
-
-}
diff --git a/jaxws/.hgtags b/jaxws/.hgtags
index 7527b1d9fb7..ae3ccaa4829 100644
--- a/jaxws/.hgtags
+++ b/jaxws/.hgtags
@@ -154,3 +154,7 @@ b376d901e006cd9e0c59733c84e190aace23eec6 jdk8-b25
6882b10e85d6f6ba110dbb50926d6fe2222cc7ad jdk8-b30
4c41c6d0e15de3b56919a5ba0a0f248a2d07f2b2 jdk8-b31
017a7dbfaa92f5a8b144e6c890d1cebdaecaf681 jdk8-b32
+ea80b2388dce711fbde8e4fd6e07c2c64ad16743 jdk8-b33
+f1d020a49c8c33667fb10c8caa255206a78a3675 jdk8-b34
+e8afc16522e190cb93c66bcb15d6fba0fe9e6833 jdk8-b35
+89b36c658e39f0a2957be55453a3a3befd9c8a6b jdk8-b36
diff --git a/jaxws/makefiles/Makefile b/jaxws/makefiles/Makefile
new file mode 100644
index 00000000000..f44d17d8068
--- /dev/null
+++ b/jaxws/makefiles/Makefile
@@ -0,0 +1,94 @@
+#
+# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+include $(SPEC)
+include MakeBase.gmk
+include JavaCompilation.gmk
+
+default: all
+
+JAVAC_JARS ?= -Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
+ -jar $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar
+DISABLE_JAXWS_WARNINGS:=-Xlint:all,-varargs,-rawtypes,-deprecation,-unchecked,-serial,-dep-ann,-cast,-fallthrough,-static
+
+# The generate new bytecode uses the new compiler for to generate bytecode
+# for the new jdk that is being built. The code compiled by this setup
+# cannot necessarily be run with the boot jdk.
+$(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE_DEBUG,\
+ JVM:=$(JAVA),\
+ JAVAC:=$(JAVAC_JARS),\
+ FLAGS:=-Xprefer:source -XDignore.symbol.file=true -cp $(BOOT_JDK)/lib/tools.jar \
+ $(DISABLE_JAXWS_WARNINGS) -g,\
+ SERVER_DIR:=$(JAVAC_SERVERS),\
+ SERVER_JVM:=$(SERVER_JAVA),\
+ MODE:=$(JAVAC_USE_MODE),\
+ USE_DEPS:=$(JAVAC_USE_DEPS)))
+
+# Dummy here is needed to trigger copying of META-INF
+$(eval $(call SetupJavaCompilation,BUILD_JAF,\
+ SETUP:=GENERATE_NEWBYTECODE_DEBUG,\
+ SRC:=$(JAXWS_TOPDIR)/src/share/jaf_classes,\
+ CLEAN:=.properties,\
+ COPY:="dummy",\
+ BIN:=$(JAXWS_OUTPUTDIR)/jaf_classes))
+
+$(eval $(call SetupJavaCompilation,BUILD_JAXWS,\
+ SETUP:=GENERATE_NEWBYTECODE_DEBUG,\
+ SRC:=$(JAXWS_TOPDIR)/src/share/jaxws_classes,\
+ CLEAN:=.properties,\
+ BIN:=$(JAXWS_OUTPUTDIR)/jaxws_classes,\
+ COPY:=.xsd,\
+ COPY_FILES:=$(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/internal/xjc/runtime/JAXBContextFactory.java \
+ $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/internal/xjc/runtime/ZeroOneBooleanAdapter.java,\
+ ADD_JAVAC_FLAGS=-cp $(OUTPUT_ROOT)/jaxp/dist/lib/classes.jar))
+
+$(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin: \
+ $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/etc/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin
+ mkdir -p $(@D)
+ cp $< $@
+
+$(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.xjc.Plugin: \
+ $(JAXWS_TOPDIR)/src/share/jaxws_classes/com/sun/tools/etc/META-INF/services/com.sun.tools.internal.xjc.Plugin
+ mkdir -p $(@D)
+ cp $< $@
+
+# There are two META-INF services files that are needed, add these to the list of goals
+BUILD_JAXWS += $(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin \
+ $(JAXWS_OUTPUTDIR)/jaxws_classes/META-INF/services/com.sun.tools.internal.xjc.Plugin
+
+$(eval $(call SetupArchive,ARCHIVE_JAXWS,$(BUILD_JAXWS) $(BUILD_JAF),\
+ SRCS:=$(JAXWS_OUTPUTDIR)/jaxws_classes $(JAXWS_OUTPUTDIR)/jaf_classes,\
+ SUFFIXES:=.class .properties .xsd .java \
+ com.sun.mirror.apt.AnnotationProcessorFactory \
+ com.sun.tools.internal.xjc.Plugin,\
+ JAR:=$(JAXWS_OUTPUTDIR)/dist/lib/classes.jar))
+
+$(eval $(call SetupZipArchive,ZIP_JAXWS_SOURCES,\
+ SRC:=$(JAXWS_TOPDIR)/src/share/jaf_classes $(JAXWS_TOPDIR)/src/share/jaxws_classes,\
+ ZIP:=$(JAXWS_OUTPUTDIR)/dist/lib/src.zip))
+
+all: $(JAXWS_OUTPUTDIR)/dist/lib/classes.jar $(JAXWS_OUTPUTDIR)/dist/lib/src.zip
+
+.PHONY: default all
diff --git a/jdk/.hgtags b/jdk/.hgtags
index f6f4a8d7971..6f8b44b7576 100644
--- a/jdk/.hgtags
+++ b/jdk/.hgtags
@@ -155,3 +155,6 @@ cdbb33303ea344d5e9013e2dd642e7a6e7768db6 jdk8-b30
27f0c08c427c65fcab6917edf646f59058e59524 jdk8-b31
ddfe5562f61f54ed2121ac0c73b688b94f3e66b5 jdk8-b32
78cea258caaba3980ba186c426da82c8fe41bfd7 jdk8-b33
+29b680393f33bf953688c17d93aca7a870ca4024 jdk8-b34
+2e3e1356ffbddb2ae95c08da72830ba9ab8b3181 jdk8-b35
+45da9cb055ee258dc09e69c1718e27eadea38e45 jdk8-b36
diff --git a/jdk/make/com/sun/tools/attach/Makefile b/jdk/make/com/sun/tools/attach/Makefile
index 1f12824be5c..9053eaa4d24 100644
--- a/jdk/make/com/sun/tools/attach/Makefile
+++ b/jdk/make/com/sun/tools/attach/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,8 @@
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../../..
PACKAGE = com.sun.tools.attach
LIBRARY = attach
diff --git a/jdk/make/common/Defs-linux.gmk b/jdk/make/common/Defs-linux.gmk
index 499bcff8bb0..a0bfc3cc8d3 100644
--- a/jdk/make/common/Defs-linux.gmk
+++ b/jdk/make/common/Defs-linux.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -53,6 +53,11 @@ ifndef PLATFORM_SRC
PLATFORM_SRC = $(BUILDDIR)/../src/solaris
endif # PLATFORM_SRC
+# Location of the various .properties files specific to Linux platform
+ifndef PLATFORM_PROPERTIES
+ PLATFORM_PROPERTIES = $(BUILDDIR)/../src/solaris/lib
+endif # PLATFORM_SRC
+
# Platform specific closed sources
ifndef OPENJDK
ifndef CLOSED_PLATFORM_SRC
@@ -73,55 +78,90 @@ SCRIPT_SUFFIX =
# CC compiler object code output directive flag value
CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required!
-# Default OBJCOPY comes from GNU Binutils on Linux:
-DEF_OBJCOPY=/usr/bin/objcopy
-ifdef CROSS_COMPILE_ARCH
- # don't try to generate .debuginfo files when cross compiling
- _JUNK_ := $(shell \
- echo >&2 "INFO: cross compiling for ARCH $(CROSS_COMPILE_ARCH)," \
- "skipping .debuginfo generation.")
- OBJCOPY=
+# The Full Debug Symbols (FDS) default for VARIANT == OPT builds is
+# enabled with debug info files ZIP'ed to save space. For VARIANT !=
+# OPT builds, FDS is always enabled, after all a debug build without
+# debug info isn't very useful. The ZIP_DEBUGINFO_FILES option only has
+# meaning when FDS is enabled.
+#
+# If you invoke a build with FULL_DEBUG_SYMBOLS=0, then FDS will be
+# disabled for a VARIANT == OPT build.
+#
+# Note: Use of a different variable name for the FDS override option
+# versus the FDS enabled check is intentional (FULL_DEBUG_SYMBOLS
+# versus ENABLE_FULL_DEBUG_SYMBOLS). For auto build systems that pass
+# in options via environment variables, use of distinct variables
+# prevents strange behaviours. For example, in a VARIANT != OPT build,
+# the FULL_DEBUG_SYMBOLS environment variable will be 0, but the
+# ENABLE_FULL_DEBUG_SYMBOLS make variable will be 1. If the same
+# variable name is used, then different values can be picked up by
+# different parts of the build. Just to be clear, we only need two
+# variable names because the incoming option value can be overridden
+# in some situations, e.g., a VARIANT != OPT build.
+
+ifeq ($(VARIANT), OPT)
+ FULL_DEBUG_SYMBOLS ?= 1
+ ENABLE_FULL_DEBUG_SYMBOLS = $(FULL_DEBUG_SYMBOLS)
else
- OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY))
- ifneq ($(ALT_OBJCOPY),)
- _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)")
- # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path
- OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY))
- endif
+ # debug variants always get Full Debug Symbols (if available)
+ ENABLE_FULL_DEBUG_SYMBOLS = 1
endif
+_JUNK_ := $(shell \
+ echo >&2 "INFO: ENABLE_FULL_DEBUG_SYMBOLS=$(ENABLE_FULL_DEBUG_SYMBOLS)")
+# since objcopy is optional, we set ZIP_DEBUGINFO_FILES later
-ifdef LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS
-# The setting of OBJCOPY above enables the JDK build to import
-# .debuginfo files from the HotSpot build. However, adding FDS
-# support to the JDK build will occur in phases so a different
-# make variable is used to indicate that a particular library
-# supports FDS.
-
-ifeq ($(OBJCOPY),)
- _JUNK_ := $(shell \
- echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.")
-else
- _JUNK_ := $(shell \
- echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.")
-
- # Library stripping policies for .debuginfo configs:
- # all_strip - strips everything from the library
- # min_strip - strips most stuff from the library; leaves minimum symbols
- # no_strip - does not strip the library at all
- #
- # Oracle security policy requires "all_strip". A waiver was granted on
- # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE.
- #
- DEF_STRIP_POLICY="min_strip"
- ifeq ($(ALT_STRIP_POLICY),)
- STRIP_POLICY=$(DEF_STRIP_POLICY)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ # Default OBJCOPY comes from GNU Binutils on Linux:
+ DEF_OBJCOPY=/usr/bin/objcopy
+ ifdef CROSS_COMPILE_ARCH
+ # don't try to generate .debuginfo files when cross compiling
+ _JUNK_ := $(shell \
+ echo >&2 "INFO: cross compiling for ARCH $(CROSS_COMPILE_ARCH)," \
+ "skipping .debuginfo generation.")
+ OBJCOPY=
else
- STRIP_POLICY=$(ALT_STRIP_POLICY)
+ OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY))
+ ifneq ($(ALT_OBJCOPY),)
+ _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)")
+ # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path
+ OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY))
+ endif
endif
- _JUNK_ := $(shell \
- echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)")
-endif
+ # Setting ENABLE_FULL_DEBUG_SYMBOLS=1 (and OBJCOPY) above enables the
+ # JDK build to import .debuginfo or .diz files from the HotSpot build.
+ # However, adding FDS support to the JDK build will occur in phases
+ # so a different make variable (LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS
+ # and PROGRAM_SUPPORTS_FULL_DEBUG_SYMBOLS) is used to indicate that a
+ # particular library or program supports FDS.
+
+ ifeq ($(OBJCOPY),)
+ _JUNK_ := $(shell \
+ echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.")
+ ENABLE_FULL_DEBUG_SYMBOLS=0
+ else
+ _JUNK_ := $(shell \
+ echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.")
+
+ # Library stripping policies for .debuginfo configs:
+ # all_strip - strips everything from the library
+ # min_strip - strips most stuff from the library; leaves minimum symbols
+ # no_strip - does not strip the library at all
+ #
+ # Oracle security policy requires "all_strip". A waiver was granted on
+ # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE.
+ #
+ # Currently, STRIP_POLICY is only used when Full Debug Symbols is enabled.
+ STRIP_POLICY ?= min_strip
+
+ _JUNK_ := $(shell \
+ echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)")
+
+ ZIP_DEBUGINFO_FILES ?= 1
+
+ _JUNK_ := $(shell \
+ echo >&2 "INFO: ZIP_DEBUGINFO_FILES=$(ZIP_DEBUGINFO_FILES)")
+ endif
endif
#
@@ -220,6 +260,17 @@ ifeq ($(DEBUG_BINARIES), true)
CFLAGS_REQUIRED += $(DEBUG_FLAG)
endif
+# If Full Debug Symbols is enabled, then we want the same debug and
+# optimization flags as used by FASTDEBUG.
+#
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(VARIANT), OPT)
+ CC_OPT = $(DEBUG_FLAG) $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
+ endif
+ endif
+endif
+
CFLAGS_OPT = $(CC_OPT)
CFLAGS_DBG = $(DEBUG_FLAG)
CFLAGS_COMMON += $(CFLAGS_REQUIRED)
@@ -412,6 +463,7 @@ JA_TARGET_ENCODINGS = UTF-8
HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH)
SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX)
SA_DEBUGINFO_NAME = $(LIB_PREFIX)saproc.debuginfo
+SA_DIZ_NAME = $(LIB_PREFIX)saproc.diz
# The JDI - Serviceability Agent binding is not currently supported
# on Linux-ia64.
diff --git a/jdk/make/common/Defs-macosx.gmk b/jdk/make/common/Defs-macosx.gmk
index d6b8307f639..53871ac1d5f 100644
--- a/jdk/make/common/Defs-macosx.gmk
+++ b/jdk/make/common/Defs-macosx.gmk
@@ -53,6 +53,11 @@ ifndef PLATFORM_SRC
PLATFORM_SRC = $(BUILDDIR)/../src/solaris
endif # PLATFORM_SRC
+# Location of the various .properties files specific to MacOS X platform
+ifndef PLATFORM_PROPERTIES
+ PLATFORM_PROPERTIES = $(BUILDDIR)/../src/macosx/lib
+endif # PLATFORM_SRC
+
PLATFORM_SRC_MACOS = $(BUILDDIR)/../src/macosx
# BSD build pulls its platform sources from the solaris tree.
diff --git a/jdk/make/common/Defs-solaris.gmk b/jdk/make/common/Defs-solaris.gmk
index 9826b61a6f8..5c272be1c35 100644
--- a/jdk/make/common/Defs-solaris.gmk
+++ b/jdk/make/common/Defs-solaris.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -51,6 +51,11 @@ ifndef PLATFORM_SRC
PLATFORM_SRC = $(BUILDDIR)/../src/solaris
endif # PLATFORM_SRC
+# Location of the various .properties files specific to Solaris platform
+ifndef PLATFORM_PROPERTIES
+ PLATFORM_PROPERTIES = $(BUILDDIR)/../src/solaris/lib
+endif # PLATFORM_SRC
+
# Platform specific closed sources
ifndef OPENJDK
ifndef CLOSED_PLATFORM_SRC
@@ -73,67 +78,98 @@ SCRIPT_SUFFIX =
# CC compiler object code output directive flag value
CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required!
-ifdef ENABLE_FULL_DEBUG_SYMBOLS
-# Only check for Full Debug Symbols support on Solaris if it is
-# specifically enabled. Hopefully, it can be enabled by default
-# once the .debuginfo size issues are worked out.
+# The Full Debug Symbols (FDS) default for VARIANT == OPT builds is
+# enabled with debug info files ZIP'ed to save space. For VARIANT !=
+# OPT builds, FDS is always enabled, after all a debug build without
+# debug info isn't very useful. The ZIP_DEBUGINFO_FILES option only has
+# meaning when FDS is enabled.
+#
+# If you invoke a build with FULL_DEBUG_SYMBOLS=0, then FDS will be
+# disabled for a VARIANT == OPT build.
+#
+# Note: Use of a different variable name for the FDS override option
+# versus the FDS enabled check is intentional (FULL_DEBUG_SYMBOLS
+# versus ENABLE_FULL_DEBUG_SYMBOLS). For auto build systems that pass
+# in options via environment variables, use of distinct variables
+# prevents strange behaviours. For example, in a VARIANT != OPT build,
+# the FULL_DEBUG_SYMBOLS environment variable will be 0, but the
+# ENABLE_FULL_DEBUG_SYMBOLS make variable will be 1. If the same
+# variable name is used, then different values can be picked up by
+# different parts of the build. Just to be clear, we only need two
+# variable names because the incoming option value can be overridden
+# in some situations, e.g., a VARIANT != OPT build.
-# Default OBJCOPY comes from the SUNWbinutils package:
-DEF_OBJCOPY=/usr/sfw/bin/gobjcopy
-ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64)
- # On Solaris AMD64/X64, gobjcopy is not happy and fails:
- #
- # usr/sfw/bin/gobjcopy --add-gnu-debuglink=.debuginfo .so
- # BFD: stKPaiop: Not enough room for program headers, try linking with -N
- # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value
- # BFD: stKPaiop: Not enough room for program headers, try linking with -N
- # /usr/sfw/bin/gobjcopy: libsaproc.debuginfo: Bad value
- # BFD: stKPaiop: Not enough room for program headers, try linking with -N
- # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value
- _JUNK_ := $(shell \
- echo >&2 "INFO: $(DEF_OBJCOPY) is not working on Solaris AMD64/X64")
- OBJCOPY=
+ifeq ($(VARIANT), OPT)
+ FULL_DEBUG_SYMBOLS ?= 1
+ ENABLE_FULL_DEBUG_SYMBOLS = $(FULL_DEBUG_SYMBOLS)
else
- OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY))
- ifneq ($(ALT_OBJCOPY),)
- _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)")
- # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path
- OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY))
- endif
+ # debug variants always get Full Debug Symbols (if available)
+ ENABLE_FULL_DEBUG_SYMBOLS = 1
endif
+_JUNK_ := $(shell \
+ echo >&2 "INFO: ENABLE_FULL_DEBUG_SYMBOLS=$(ENABLE_FULL_DEBUG_SYMBOLS)")
+# since objcopy is optional, we set ZIP_DEBUGINFO_FILES later
-ifdef LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS
-# The setting of OBJCOPY above enables the JDK build to import
-# .debuginfo files from the HotSpot build. However, adding FDS
-# support to the JDK build will occur in phases so a different
-# make variable is used to indicate that a particular library
-# supports FDS.
-
-ifeq ($(OBJCOPY),)
- _JUNK_ := $(shell \
- echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.")
-else
- _JUNK_ := $(shell \
- echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.")
-
- # Library stripping policies for .debuginfo configs:
- # all_strip - strips everything from the library
- # min_strip - strips most stuff from the library; leaves minimum symbols
- # no_strip - does not strip the library at all
- #
- # Oracle security policy requires "all_strip". A waiver was granted on
- # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE.
- #
- DEF_STRIP_POLICY="min_strip"
- ifeq ($(ALT_STRIP_POLICY),)
- STRIP_POLICY=$(DEF_STRIP_POLICY)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ # Default OBJCOPY comes from the SUNWbinutils package:
+ DEF_OBJCOPY=/usr/sfw/bin/gobjcopy
+ ifeq ($(PLATFORM)-$(LIBARCH), solaris-amd64)
+ # On Solaris AMD64/X64, gobjcopy is not happy and fails:
+ #
+ # usr/sfw/bin/gobjcopy --add-gnu-debuglink=.debuginfo .so
+ # BFD: stKPaiop: Not enough room for program headers, try linking with -N
+ # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value
+ # BFD: stKPaiop: Not enough room for program headers, try linking with -N
+ # /usr/sfw/bin/gobjcopy: libsaproc.debuginfo: Bad value
+ # BFD: stKPaiop: Not enough room for program headers, try linking with -N
+ # /usr/sfw/bin/gobjcopy: stKPaiop: Bad value
+ _JUNK_ := $(shell \
+ echo >&2 "INFO: $(DEF_OBJCOPY) is not working on Solaris AMD64/X64")
+ OBJCOPY=
else
- STRIP_POLICY=$(ALT_STRIP_POLICY)
+ OBJCOPY=$(shell test -x $(DEF_OBJCOPY) && echo $(DEF_OBJCOPY))
+ ifneq ($(ALT_OBJCOPY),)
+ _JUNK_ := $(shell echo >&2 "INFO: ALT_OBJCOPY=$(ALT_OBJCOPY)")
+ # disable .debuginfo support by setting ALT_OBJCOPY to a non-existent path
+ OBJCOPY=$(shell test -x $(ALT_OBJCOPY) && echo $(ALT_OBJCOPY))
+ endif
+ endif
+
+ # Setting ENABLE_FULL_DEBUG_SYMBOLS=1 (and OBJCOPY) above enables the
+ # JDK build to import .debuginfo or .diz files from the HotSpot build.
+ # However, adding FDS support to the JDK build will occur in phases
+ # so a different make variable (LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS
+ # and PROGRAM_SUPPORTS_FULL_DEBUG_SYMBOLS) is used to indicate that a
+ # particular library or program supports FDS.
+
+ ifeq ($(OBJCOPY),)
+ _JUNK_ := $(shell \
+ echo >&2 "INFO: no objcopy cmd found so cannot create .debuginfo files.")
+ ENABLE_FULL_DEBUG_SYMBOLS=0
+ else
+ _JUNK_ := $(shell \
+ echo >&2 "INFO: $(OBJCOPY) cmd found so will create .debuginfo files.")
+
+ # Library stripping policies for .debuginfo configs:
+ # all_strip - strips everything from the library
+ # min_strip - strips most stuff from the library; leaves minimum symbols
+ # no_strip - does not strip the library at all
+ #
+ # Oracle security policy requires "all_strip". A waiver was granted on
+ # 2011.09.01 that permits using "min_strip" in the Java JDK and Java JRE.
+ #
+ #
+ # Currently, STRIP_POLICY is only used when Full Debug Symbols is enabled.
+ STRIP_POLICY ?= min_strip
+
+ _JUNK_ := $(shell \
+ echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)")
+
+ ZIP_DEBUGINFO_FILES ?= 1
+
+ _JUNK_ := $(shell \
+ echo >&2 "INFO: ZIP_DEBUGINFO_FILES=$(ZIP_DEBUGINFO_FILES)")
endif
- _JUNK_ := $(shell \
- echo >&2 "INFO: STRIP_POLICY=$(STRIP_POLICY)")
-endif
-endif
endif
#
@@ -203,6 +239,21 @@ ifeq ($(FASTDEBUG), true)
CXXFLAGS_DEBUG_OPTION = -g0 $(CXX_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
endif
+# If Full Debug Symbols is enabled, then we want the same debug and
+# optimization flags as used by FASTDEBUG. We also want all the
+# debug info in one place (-xs).
+#
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(VARIANT), OPT)
+ CC_OPT = -g -xs $(CC_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
+ CXX_OPT = -g0 -xs $(CXX_OPT/$(FASTDEBUG_OPTIMIZATION_LEVEL))
+ endif
+ CFLAGS_DEBUG_OPTION += -xs
+ CXXFLAGS_DEBUG_OPTION += -xs
+ endif
+endif
+
CFLAGS_COMMON = -L$(OBJDIR)
# Do not allow C99 language features like declarations in code etc.
@@ -753,5 +804,6 @@ JA_TARGET_ENCODINGS = eucJP UTF-8 PCK
HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/lib/$(LIBARCH)
SALIB_NAME = $(LIB_PREFIX)saproc.$(LIBRARY_SUFFIX)
SA_DEBUGINFO_NAME = $(LIB_PREFIX)saproc.debuginfo
+SA_DIZ_NAME = $(LIB_PREFIX)saproc.diz
INCLUDE_SA=true
diff --git a/jdk/make/common/Defs-windows.gmk b/jdk/make/common/Defs-windows.gmk
index c23d0244906..7afe0b515e0 100644
--- a/jdk/make/common/Defs-windows.gmk
+++ b/jdk/make/common/Defs-windows.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -52,6 +52,11 @@ ifndef PLATFORM_SRC
PLATFORM_SRC = $(BUILDDIR)/../src/windows
endif # PLATFORM_SRC
+# Location of the various .properties files specific to Windows platform
+ifndef PLATFORM_PROPERTIES
+ PLATFORM_PROPERTIES = $(BUILDDIR)/../src/windows/lib
+endif # PLATFORM_SRC
+
# Platform specific closed sources
ifndef OPENJDK
ifndef CLOSED_PLATFORM_SRC
@@ -75,6 +80,45 @@ endif
EXTRA_LFLAGS += /LIBPATH:$(DXSDK_LIB_PATH)
+# Full Debug Symbols has been enabled on Windows since JDK1.4.1.
+# The Full Debug Symbols (FDS) default for VARIANT == OPT builds is
+# enabled with debug info files ZIP'ed to save space. For VARIANT !=
+# OPT builds, FDS is always enabled, after all a debug build without
+# debug info isn't very useful. The ZIP_DEBUGINFO_FILES option only has
+# meaning when FDS is enabled.
+#
+# If you invoke a build with FULL_DEBUG_SYMBOLS=0, then FDS will be
+# disabled for a VARIANT == OPT build.
+#
+# Note: Use of a different variable name for the FDS override option
+# versus the FDS enabled check is intentional (FULL_DEBUG_SYMBOLS
+# versus ENABLE_FULL_DEBUG_SYMBOLS). For auto build systems that pass
+# in options via environment variables, use of distinct variables
+# prevents strange behaviours. For example, in a VARIANT != OPT build,
+# the FULL_DEBUG_SYMBOLS environment variable will be 0, but the
+# ENABLE_FULL_DEBUG_SYMBOLS make variable will be 1. If the same
+# variable name is used, then different values can be picked up by
+# different parts of the build. Just to be clear, we only need two
+# variable names because the incoming option value can be overridden
+# in some situations, e.g., a VARIANT != OPT build.
+
+ifeq ($(VARIANT), OPT)
+ FULL_DEBUG_SYMBOLS ?= 1
+ ENABLE_FULL_DEBUG_SYMBOLS = $(FULL_DEBUG_SYMBOLS)
+else
+ # debug variants always get Full Debug Symbols (if available)
+ ENABLE_FULL_DEBUG_SYMBOLS = 1
+endif
+_JUNK_ := $(shell \
+ echo >&2 "INFO: ENABLE_FULL_DEBUG_SYMBOLS=$(ENABLE_FULL_DEBUG_SYMBOLS)")
+
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ZIP_DEBUGINFO_FILES ?= 1
+else
+ ZIP_DEBUGINFO_FILES=0
+endif
+_JUNK_ := $(shell echo >&2 "INFO: ZIP_DEBUGINFO_FILES=$(ZIP_DEBUGINFO_FILES)")
+
# C Compiler flag definitions
#
@@ -201,7 +245,10 @@ ifeq ($(CC_VERSION),msvc)
# /D _STATIC_CPPLIB
# Use static link for the C++ runtime (so msvcpnn.dll not needed)
#
- CFLAGS_COMMON += -Zi -nologo
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ CFLAGS_COMMON += -Zi
+ endif
+ CFLAGS_COMMON += -nologo
CFLAGS_OPT = $(CC_OPT)
CFLAGS_DBG = -Od $(MS_RUNTIME_DEBUG_OPTION)
@@ -210,7 +257,9 @@ ifeq ($(CC_VERSION),msvc)
# All builds get the same runtime setting
CFLAGS_COMMON += $(MS_RUNTIME_OPTION) $(CFLAGS_$(COMPILER_VERSION))
- LDEBUG = /debug
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ LDEBUG = /debug
+ endif
ifeq ($(VTUNE_SUPPORT), true)
OTHER_CFLAGS = -Z7 -Ox
@@ -244,7 +293,9 @@ CPPFLAGS_COMMON += -DWIN32_LEAN_AND_MEAN
#
# Output options (use specific filenames to avoid parallel compile errors)
#
-CFLAGS_COMMON += -Fd$(OBJDIR)/$(basename $(@F)).pdb -Fm$(OBJDIR)/$(basename $(@F)).map
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ CFLAGS_COMMON += -Fd$(OBJDIR)/$(basename $(@F)).pdb -Fm$(OBJDIR)/$(basename $(@F)).map
+endif
#
# Use -wdNNNN to disable warning NNNN.
@@ -305,6 +356,7 @@ HOTSPOT_SALIB_PATH = $(HOTSPOT_IMPORT_PATH)/jre/bin
SALIB_NAME = $(LIB_PREFIX)sawindbg.$(LIBRARY_SUFFIX)
SAMAP_NAME = $(LIB_PREFIX)sawindbg.map
SAPDB_NAME = $(LIB_PREFIX)sawindbg.pdb
+SA_DIZ_NAME = $(LIB_PREFIX)sawindbg.diz
ifeq ($(ARCH), ia64)
# SA will never be supported here.
diff --git a/jdk/make/common/Library.gmk b/jdk/make/common/Library.gmk
index e952bb5e615..2583e83dc5d 100644
--- a/jdk/make/common/Library.gmk
+++ b/jdk/make/common/Library.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -167,17 +167,32 @@ else # LIBRARY
# build it into $(OBJDIR) so that the other generated files get put
# there, then copy just the DLL (and MAP file) to the requested directory.
#
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ MAP_OPTION="-map:$(OBJDIR)/$(LIBRARY).map"
+endif
+
$(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lcf
@$(prep-target)
@$(MKDIR) -p $(OBJDIR)
$(LINK) -dll -out:$(OBJDIR)/$(@F) \
- -map:$(OBJDIR)/$(LIBRARY).map \
+ $(MAP_OPTION) \
$(LFLAGS) @$(OBJDIR)/$(LIBRARY).lcf \
$(OTHER_LCF) $(LDLIBS)
$(CP) $(OBJDIR)/$(@F) $@
@$(call binary_file_verification,$@)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ (set -e ; \
+ $(CD) $(OBJDIR) ; \
+ $(ZIPEXE) -q $(LIBRARY).diz $(LIBRARY).map $(LIBRARY).pdb ; \
+ )
+ $(CP) $(OBJDIR)/$(LIBRARY).diz $(@D)
+ $(RM) $(OBJDIR)/$(LIBRARY).map $(OBJDIR)/$(LIBRARY).pdb
+ else
$(CP) $(OBJDIR)/$(LIBRARY).map $(@D)
$(CP) $(OBJDIR)/$(LIBRARY).pdb $(@D)
+ endif
+endif
endif # LIBRARY
@@ -242,6 +257,37 @@ else # LIBRARY
ifeq ($(WRITE_LIBVERSION),true)
$(MCS) -d -a "$(FULL_VERSION)" $@
endif # WRITE_LIBVERSION
+ ifneq ($(PLATFORM), macosx)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS),1)
+ (set -e ; \
+ $(CD) $(@D) ; \
+ $(OBJCOPY) --only-keep-debug $(@F) $(LIBRARY).debuginfo ; \
+ $(OBJCOPY) --add-gnu-debuglink=$(LIBRARY).debuginfo $(@F) ; \
+ )
+ ifeq ($(STRIP_POLICY),all_strip)
+ $(STRIP) $@
+ else
+ ifeq ($(STRIP_POLICY),min_strip)
+ ifeq ($(PLATFORM), solaris)
+ $(STRIP) -x $@
+ else
+ # assume Linux
+ $(STRIP) -g $@
+ endif
+ # implied else here is no stripping at all
+ endif
+ endif
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ (set -e ; \
+ $(CD) $(@D) ; \
+ $(ZIPEXE) -q $(LIBRARY).diz $(LIBRARY).debuginfo ; \
+ $(RM) $(LIBRARY).debuginfo ; \
+ )
+ endif
+ endif # LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS
+ endif # ENABLE_FULL_DEBUG_SYMBOLS
+ endif # PLATFORM-!macosx
endif # LIBRARY
endif # PLATFORM
diff --git a/jdk/make/common/Program.gmk b/jdk/make/common/Program.gmk
index 8170453234f..4e211d84600 100644
--- a/jdk/make/common/Program.gmk
+++ b/jdk/make/common/Program.gmk
@@ -171,6 +171,10 @@ ifeq ($(PLATFORM), windows)
@$(prep-target)
$(SED) 's%IMVERSION%$(IMVERSION)%g;s%PROGRAM%$(PROGRAM)%g' $< > $@
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ MAP_OPTION="-map:$(OBJDIR)/$(PROGRAM).map"
+endif
+
# We used a hand-crafted manifest file for all executables.
# It is tweaked to embed the build number and executable name.
# Use ";#2" for .dll and ";#1" for .exe in the MT command below:
@@ -179,12 +183,21 @@ ifeq ($(PLATFORM), windows)
@set -- $?; \
$(ECHO) Rebuilding $@ because of $$1 $$2 $$3 $$4 $$5 $$6 $${7:+...};
$(LINK) -out:$@ /STACK:$(STACK_SIZE) \
- -map:$(OBJDIR)/$(PROGRAM).map $(LFLAGS) $(LDFLAGS) \
+ $(MAP_OPTION) $(LFLAGS) $(LDFLAGS) \
@$(OBJDIR)/$(PROGRAM).lcf $(LDLIBS)
ifdef MT
$(MT) /manifest $(OBJDIR)/$(PROGRAM).exe.manifest /outputresource:$@;#1
endif
@$(call binary_file_verification,$@)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ (set -e ; \
+ $(CD) $(OBJDIR) ; \
+ $(ZIPEXE) -q $(PROGRAM).diz $(PROGRAM).map $(PROGRAM).pdb ; \
+ $(RM) $(PROGRAM).map $(PROGRAM).pdb ; \
+ )
+ endif
+ endif
else
#
# Note that we have to link -lthread even when USE_PTHREADS is true.
@@ -228,6 +241,42 @@ else
-codesign -s openjdk_codesign $@
endif
@$(call binary_file_verification,$@)
+ ifneq ($(PLATFORM), macosx)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(PROGRAM_SUPPORTS_FULL_DEBUG_SYMBOLS),1)
+ (set -e ; \
+ $(CD) $(@D) ; \
+ $(OBJCOPY) --only-keep-debug $(@F) $(@F).debuginfo ; \
+ $(OBJCOPY) --add-gnu-debuglink=$(@F).debuginfo $(@F) ; \
+ )
+ ifeq ($(STRIP_POLICY),all_strip)
+ $(STRIP) $@
+ else
+ ifeq ($(STRIP_POLICY),min_strip)
+ ifeq ($(PLATFORM), solaris)
+ $(STRIP) -x $@
+ else
+ # assume Linux
+ $(STRIP) -g $@
+ endif
+ # implied else here is no stripping at all
+ endif
+ endif
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ (set -e ; \
+ $(CD) $(@D) ; \
+ $(ZIPEXE) -q $(@F).diz $(@F).debuginfo ; \
+ $(RM) $(@F).debuginfo ; \
+ )
+ # save ZIP'ed debug info with rest of the program's build artifacts
+ $(MV) $@.diz $(OBJDIR)
+ else
+ # save debug info with rest of the program's build artifacts
+ $(MV) $@.debuginfo $(OBJDIR)
+ endif
+ endif # PROGRAM_SUPPORTS_FULL_DEBUG_SYMBOLS
+ endif # ENABLE_FULL_DEBUG_SYMBOLS
+ endif # PLATFORM-!macosx
endif # PLATFORM
clean::
@@ -236,12 +285,16 @@ ifeq ($(PLATFORM), windows)
$(RM) $(OBJDIR)/$(PROGRAM).ico
$(RM) $(OBJDIR)/$(PROGRAM).lcf
$(RM) $(OBJDIR)/$(PROGRAM).map
+ $(RM) $(OBJDIR)/$(PROGRAM).pdb
$(RM) $(OBJDIR)/$(PROGRAM).exp
$(RM) $(OBJDIR)/$(PROGRAM).lib
$(RM) $(OBJDIR)/$(PROGRAM)$(EXE_SUFFIX)
$(RM) $(OBJDIR)/$(PROGRAM).ilk
$(RM) *.pdb
+else
+ $(RM) $(OBJDIR)/$(PROGRAM).debuginfo
endif
+ $(RM) $(OBJDIR)/$(PROGRAM).diz
clobber::
diff --git a/jdk/make/common/Release.gmk b/jdk/make/common/Release.gmk
index c7f55e3699d..d8ec1b713d7 100644
--- a/jdk/make/common/Release.gmk
+++ b/jdk/make/common/Release.gmk
@@ -144,6 +144,7 @@ JDK_MAN_PAGES = \
javadoc.1 \
javah.1 \
javap.1 \
+ jcmd.1 \
jconsole.1 \
jdb.1 \
jhat.1 \
@@ -607,10 +608,6 @@ ifndef JAVASE_EMBEDDED
$(ECHO) "oracle/jrockit/jfr/parser/" >> $@
$(ECHO) "oracle/jrockit/jfr/settings/" >> $@
$(ECHO) "oracle/jrockit/jfr/tools/" >> $@
- $(ECHO) "oracle/jrockit/jfr/util/" >> $@
- $(ECHO) "oracle/jrockit/jfr/util/log/" >> $@
- $(ECHO) "oracle/jrockit/jfr/util/os/" >> $@
- $(ECHO) "oracle/jrockit/jfr/util/text/" >> $@
endif
endif
@@ -637,7 +634,7 @@ $(TOTAL_JAR_FILELIST): $(JARREORDER_JARFILE) $(NOT_RT_JAR_LIST)
$(MV) $@.temp $@
@($(CD) $(CLASSBINDIR) && $(java-vm-cleanup))
-# Create the jfr.jar containing Java Flight Recorder implementation
+# Create jfr.jar
JFR_JAR=
ifndef OPENJDK
ifndef JAVASE_EMBEDDED
@@ -876,7 +873,9 @@ ifeq ($(PLATFORM), windows)
-o -name \*.dll | $(EGREP) -v -i "$(MSVCRNN_DLL)" > $@
else
$(FIND) $(JRE_IMAGE_DIR)/lib -type f -name \*.$(LIB_SUFFIX) >> $@
- $(FILE) `$(FIND) $(JRE_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \
+# The FILE command reports .debuginfo files as "ELF", but we don't want
+# those files in the JRE_BIN_LIST file. EXE_SUFFIX is empty on non-Windows.
+ $(FILE) `$(FIND) $(JRE_IMAGE_DIR)/bin -type f ! -name '*.debuginfo' -name \*$(EXE_SUFFIX)` \
| $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@
endif
@@ -1143,9 +1142,11 @@ ifeq ($(PLATFORM), windows)
else
$(RM) $@
$(FIND) $(JDK_IMAGE_DIR)/jre/lib -type f -name \*.$(LIB_SUFFIX) >> $@
- $(FILE) `$(FIND) $(JDK_IMAGE_DIR)/jre/bin -type f -name \*$(EXE_SUFFIX)` \
+# The FILE command reports .debuginfo files as "ELF", but we don't want
+# those files in the JDK_BIN_LIST file. EXE_SUFFIX is empty on non-Windows.
+ $(FILE) `$(FIND) $(JDK_IMAGE_DIR)/jre/bin -type f ! -name '*.debuginfo' -name \*$(EXE_SUFFIX)` \
| $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@
- file `$(FIND) $(JDK_IMAGE_DIR)/bin -type f -name \*$(EXE_SUFFIX)` \
+ file `$(FIND) $(JDK_IMAGE_DIR)/bin -type f ! -name '*.debuginfo' -name \*$(EXE_SUFFIX)` \
| $(EGREP) 'ELF' | $(CUT) -d':' -f1 >> $@
endif
diff --git a/jdk/make/common/internal/Resources.gmk b/jdk/make/common/internal/Resources.gmk
index e7841fce6ae..56a81fbf09e 100644
--- a/jdk/make/common/internal/Resources.gmk
+++ b/jdk/make/common/internal/Resources.gmk
@@ -153,8 +153,8 @@ strip_prop_options_clean:
# Strip the properties files
strip_all_props: $(STRIPPROPERTIES_JARFILE) $(STRIP_PROP_options)
@if [ -s $(STRIP_PROP_options) ] ; then \
- $(ECHO) "$(BOOT_JAVA_CMD) -jar $(STRIPPROPERTIES_JARFILE) -optionsfile $(STRIP_PROP_options)" ; \
- $(BOOT_JAVA_CMD) -jar $(STRIPPROPERTIES_JARFILE) -optionsfile $(STRIP_PROP_options) ; \
+ $(ECHO) "$(BOOT_JAVA_CMD) -jar $(STRIPPROPERTIES_JARFILE) @$(STRIP_PROP_options)" ; \
+ $(BOOT_JAVA_CMD) -jar $(STRIPPROPERTIES_JARFILE) @$(STRIP_PROP_options) ; \
fi
@$(java-vm-cleanup)
@@ -243,8 +243,8 @@ compile_prop_options_clean:
compile_all_props: $(COMPILEPROPERTIES_JARFILE) $(COMPILE_PROP_options)
@if [ `$(CAT) $(COMPILE_PROP_options) | $(WC) -l` -ge 1 ] ; then \
$(MKDIR) -p $(GENSRCDIR); \
- $(ECHO) "$(BOOT_JAVA_CMD) -jar $(COMPILEPROPERTIES_JARFILE) -optionsfile $(COMPILE_PROP_options)";\
- $(BOOT_JAVA_CMD) -jar $(COMPILEPROPERTIES_JARFILE) -optionsfile $(COMPILE_PROP_options) ; \
+ $(ECHO) "$(BOOT_JAVA_CMD) -jar $(COMPILEPROPERTIES_JARFILE) @$(COMPILE_PROP_options)";\
+ $(BOOT_JAVA_CMD) -jar $(COMPILEPROPERTIES_JARFILE) @$(COMPILE_PROP_options) ; \
$(java-vm-cleanup); \
fi
diff --git a/jdk/make/common/shared/Sanity.gmk b/jdk/make/common/shared/Sanity.gmk
index 27af4fa2e66..b6c340cfe91 100644
--- a/jdk/make/common/shared/Sanity.gmk
+++ b/jdk/make/common/shared/Sanity.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -1037,11 +1037,22 @@ ifeq ($(PLATFORM), windows)
" and/or check your value of ALT_HOTSPOT_LIB_PATH. \n" \
"" >> $(ERROR_FILE) ; \
fi
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
@#
@# Check for the .map files - its OK if they are not there..
@#
- ifeq ($(ARCH_DATA_MODEL), 32)
+ ifeq ($(ARCH_DATA_MODEL), 32)
@# There is no 64-bit HotSpot client VM
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ @if [ ! -r $(HOTSPOT_CLIENT_PATH)/jvm.diz ]; then \
+ $(ECHO) "WARNING: HOTSPOT_CLIENT_PATH does not point to valid HotSpot .diz files. \n" \
+ " These files are optional and aid in the debugging of the JVM. \n" \
+ " Please check your access to \n" \
+ " $(HOTSPOT_CLIENT_PATH)/jvm.diz \n" \
+ " and/or check your value of ALT_HOTSPOT_CLIENT_PATH. \n" \
+ "" >> $(WARNING_FILE) ; \
+ fi
+ else
@if [ ! -r $(HOTSPOT_CLIENT_PATH)/jvm.map ]; then \
$(ECHO) "WARNING: HOTSPOT_CLIENT_PATH does not point to valid HotSpot .map files. \n" \
" These files are optional and aid in the debugging of the JVM. \n" \
@@ -1058,7 +1069,18 @@ ifeq ($(PLATFORM), windows)
" and/or check your value of ALT_HOTSPOT_CLIENT_PATH. \n" \
"" >> $(WARNING_FILE) ; \
fi
- endif
+ endif
+ endif
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ @if [ ! -r $(HOTSPOT_SERVER_PATH)/jvm.diz ]; then \
+ $(ECHO) "WARNING: HOTSPOT_SERVER_PATH does not point to valid HotSpot .diz files. \n" \
+ " These files are optional and aid in the debugging of the JVM. \n" \
+ " Please check your access to \n" \
+ " $(HOTSPOT_SERVER_PATH)/jvm.diz \n" \
+ " and/or check your value of ALT_HOTSPOT_SERVER_PATH. \n" \
+ "" >> $(WARNING_FILE) ; \
+ fi
+ else
@if [ ! -r $(HOTSPOT_SERVER_PATH)/jvm.map ]; then \
$(ECHO) "WARNING: HOTSPOT_SERVER_PATH does not point to valid HotSpot .map files. \n" \
" These files are optional and aid in the debugging of the JVM. \n" \
@@ -1075,6 +1097,8 @@ ifeq ($(PLATFORM), windows)
" and/or check your value of ALT_HOTSPOT_SERVER_PATH. \n" \
"" >> $(WARNING_FILE) ; \
fi
+ endif
+ endif
endif
diff --git a/jdk/make/java/awt/Makefile b/jdk/make/java/awt/Makefile
index 6cabc50f19a..2bc9e76a943 100644
--- a/jdk/make/java/awt/Makefile
+++ b/jdk/make/java/awt/Makefile
@@ -57,7 +57,7 @@ LIBPROPS = $(_LIBPROPS:%=$(LIBDIR)/%)
properties: $(LIBDIR) $(LIBPROPS)
-$(LIBDIR)/%.properties: $(PLATFORM_SRC)/lib/%.properties
+$(LIBDIR)/%.properties: $(PLATFORM_PROPERTIES)/%.properties
$(install-file)
properties.clean :
diff --git a/jdk/make/java/instrument/Makefile b/jdk/make/java/instrument/Makefile
index 76a05537290..c81ce671977 100644
--- a/jdk/make/java/instrument/Makefile
+++ b/jdk/make/java/instrument/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,8 @@
# Makefile for building the Java Programming Language Instrumentation Services
# agent, supporting java.lang.instrument
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../..
PACKAGE = sun.instrument
LIBRARY = instrument
diff --git a/jdk/make/java/java/FILES_java.gmk b/jdk/make/java/java/FILES_java.gmk
index 7a6d93a8f37..01529b4f9b1 100644
--- a/jdk/make/java/java/FILES_java.gmk
+++ b/jdk/make/java/java/FILES_java.gmk
@@ -51,6 +51,7 @@ JAVA_JAVA_java = \
java/lang/SuppressWarnings.java \
java/lang/AbstractStringBuilder.java \
java/lang/ClassLoader.java \
+ java/lang/ClassLoaderHelper.java \
java/lang/AssertionStatusDirectives.java \
java/lang/Enum.java \
java/lang/StrictMath.java \
diff --git a/jdk/make/java/java/reflect/Makefile b/jdk/make/java/java/reflect/Makefile
index 40bd886c081..6dfceb8bd5e 100644
--- a/jdk/make/java/java/reflect/Makefile
+++ b/jdk/make/java/java/reflect/Makefile
@@ -36,7 +36,7 @@ include $(BUILDDIR)/common/Defs.gmk
#
# Files to compile.
#
-AUTO_FILES_JAVA_DIRS = java/lang/reflect sun/reflect
+AUTO_FILES_JAVA_DIRS = java/lang/reflect sun/reflect java/lang/annotation
#
# Install .lib file.
diff --git a/jdk/make/java/java_crw_demo/Makefile b/jdk/make/java/java_crw_demo/Makefile
index ebcadd74656..96da00baaa2 100644
--- a/jdk/make/java/java_crw_demo/Makefile
+++ b/jdk/make/java/java_crw_demo/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../..
LIBRARY = java_crw_demo
diff --git a/jdk/make/java/java_hprof_demo/Makefile b/jdk/make/java/java_hprof_demo/Makefile
index 9880547be71..7aab2e412d2 100644
--- a/jdk/make/java/java_hprof_demo/Makefile
+++ b/jdk/make/java/java_hprof_demo/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../..
LIBRARY = hprof
PRODUCT = sun
diff --git a/jdk/make/java/main/java/Makefile b/jdk/make/java/main/java/Makefile
index 1766880712c..1c3478b24f0 100644
--- a/jdk/make/java/main/java/Makefile
+++ b/jdk/make/java/main/java/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+PROGRAM_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PROGRAM = java
PRODUCT = java
diff --git a/jdk/make/java/management/Makefile b/jdk/make/java/management/Makefile
index bffb5ed7bdd..61b1dc572af 100644
--- a/jdk/make/java/management/Makefile
+++ b/jdk/make/java/management/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../..
PACKAGE = java.lang.management
LIBRARY = management
diff --git a/jdk/make/java/npt/Makefile b/jdk/make/java/npt/Makefile
index b03797246a8..39fdde696ee 100644
--- a/jdk/make/java/npt/Makefile
+++ b/jdk/make/java/npt/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../..
# It's currently used by jpda and hprof. Put it in base module for now.
@@ -68,7 +70,7 @@ ifeq ($(PLATFORM), windows)
endif
# Add location of iconv header
-ifeq ($(PLATFORM), macosx))
+ifeq ($(PLATFORM), macosx)
OTHER_LDLIBS += -liconv
endif
diff --git a/jdk/make/java/redist/Makefile b/jdk/make/java/redist/Makefile
index d265ea39c35..f72ad57333b 100644
--- a/jdk/make/java/redist/Makefile
+++ b/jdk/make/java/redist/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -61,9 +61,13 @@ JVMDB_NAME = $(LIB_PREFIX)jvm$(DB_SUFFIX).$(LIBRARY_SUFFIX)
JVMDTRACE_NAME = $(LIB_PREFIX)jvm$(DTRACE_SUFFIX).$(LIBRARY_SUFFIX)
JVM_DEBUGINFO_NAME = $(LIB_PREFIX)jvm.debuginfo
+JVM_DIZ_NAME = $(LIB_PREFIX)jvm.diz
LIBJSIG_DEBUGINFO_NAME = $(LIB_PREFIX)jsig.debuginfo
+LIBJSIG_DIZ_NAME = $(LIB_PREFIX)jsig.diz
JVMDB_DEBUGINFO_NAME = $(LIB_PREFIX)jvm$(DB_SUFFIX).debuginfo
+JVMDB_DIZ_NAME = $(LIB_PREFIX)jvm$(DB_SUFFIX).diz
JVMDTRACE_DEBUGINFO_NAME = $(LIB_PREFIX)jvm$(DTRACE_SUFFIX).debuginfo
+JVMDTRACE_DIZ_NAME = $(LIB_PREFIX)jvm$(DTRACE_SUFFIX).diz
CLASSSHARINGDATA_DIR = $(BUILDDIR)/tools/sharing
@@ -86,10 +90,17 @@ INTERNAL_IMPORT_LIST = $(LIBDIR)/classlist
ifndef BUILD_CLIENT_ONLY
IMPORT_LIST = $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_NAME) \
$(LIB_LOCATION)/$(SERVER_LOCATION)/Xusage.txt
- ifneq ($(OBJCOPY),)
- # the import JDK may not contain .debuginfo files
- ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVM_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DEBUGINFO_NAME)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVM_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .debuginfo files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVM_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DEBUGINFO_NAME)
+ endif
endif
endif
else
@@ -101,10 +112,17 @@ ifneq ($(ZERO_BUILD), true)
ifeq ($(ARCH_DATA_MODEL), 32)
IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME) \
$(LIB_LOCATION)/$(CLIENT_LOCATION)/Xusage.txt
- ifneq ($(OBJCOPY),)
- # the import JDK may not contain .debuginfo files
- ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVM_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DEBUGINFO_NAME)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVM_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .debuginfo files
+ ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVM_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DEBUGINFO_NAME)
+ endif
endif
endif
endif
@@ -121,20 +139,56 @@ $(BINDIR)/$(MSVCRNN_DLL): $(MSVCRNN_DLL_PATH)/$(MSVCRNN_DLL)
# Get the hotspot .map and .pdb files for client and server
ifndef BUILD_CLIENT_ONLY
-IMPORT_LIST += \
- $(LIBDIR)/$(JVMLIB_NAME) \
- $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMMAP_NAME) \
- $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME)
+ IMPORT_LIST += $(LIBDIR)/$(JVMLIB_NAME)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVM_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .pdb files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMPDB_NAME)),)
+ # assume .map file is present if .pdb file is preset
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMMAP_NAME) \
+ $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME)
+ endif
+ endif
+ endif
endif
# Add .map and .pdb files to the import path for client and kernel VMs.
# These are only available on 32-bit windows builds.
ifeq ($(ARCH_DATA_MODEL), 32)
- IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMMAP_NAME) \
- $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMPDB_NAME)
- ifeq ($(DO_KERNEL), true)
- IMPORT_LIST += $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMMAP_NAME) \
- $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVM_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .pdb files
+ ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMPDB_NAME)),)
+ # assume .map file is present if .pdb file is preset
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMMAP_NAME) \
+ $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMPDB_NAME)
+ endif
+ endif
+ ifeq ($(DO_KERNEL), true)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_KERNEL_PATH)/$(JVM_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVM_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .pdb files
+ ifneq ($(wildcard $(HOTSPOT_KERNEL_PATH)/$(JVMPDB_NAME)),)
+ # assume .map file is present if .pdb file is preset
+ IMPORT_LIST += $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMMAP_NAME) \
+ $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME)
+ endif
+ endif
+ endif
endif
endif
@@ -165,10 +219,22 @@ $(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVMPDB_NAME):
@$(prep-target)
-$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVMPDB_NAME) $@
+$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DIZ_NAME):
+ @$(prep-target)
+ -$(CP) $(HOTSPOT_CLIENT_PATH)/$(JVM_DIZ_NAME) $@
+
+$(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVM_DIZ_NAME):
+ @$(prep-target)
+ -$(CP) $(HOTSPOT_KERNEL_PATH)/$(JVM_DIZ_NAME) $@
+
ifndef BUILD_CLIENT_ONLY
$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMPDB_NAME):
@$(prep-target)
-$(CP) $(HOTSPOT_SERVER_PATH)/$(JVMPDB_NAME) $@
+
+$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DIZ_NAME):
+ @$(prep-target)
+ -$(CP) $(HOTSPOT_SERVER_PATH)/$(JVM_DIZ_NAME) $@
endif
# Windows ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Windows
@@ -176,18 +242,33 @@ else # PLATFORM
# NOT Windows vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv NOT Windows
IMPORT_LIST += $(LIB_LOCATION)/$(LIBJSIG_NAME)
-ifneq ($(OBJCOPY),)
- # the import JDK may not contain .debuginfo files
- ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(LIBJSIG_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .debuginfo files
+ ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME)
+ endif
endif
endif
ifndef BUILD_CLIENT_ONLY
IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_NAME)
- ifneq ($(OBJCOPY),)
- # the import JDK may not contain the target of the symlink
- ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain the target of the symlink
+ ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DIZ_NAME)),)
+ # check for the .diz file, but create the .debuginfo link
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME)
+ endif
+ else
+ # the import JDK may not contain the target of the symlink
+ ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME)
+ endif
endif
endif
endif
@@ -195,19 +276,33 @@ endif
ifeq ($(PLATFORM), solaris)
ifndef BUILD_CLIENT_ONLY
IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_NAME)
- ifneq ($(OBJCOPY),)
- # the import JDK may not contain .debuginfo files
- ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDB_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DEBUGINFO_NAME)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDB_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .debuginfo files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDB_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DEBUGINFO_NAME)
+ endif
endif
endif
# The conditional can be removed when import JDKs contain these files.
ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_NAME)),)
IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_NAME)
- ifneq ($(OBJCOPY),)
- # the import JDK may not contain .debuginfo files
- ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .debuginfo files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME)
+ endif
endif
endif
else
@@ -220,10 +315,18 @@ ifneq ($(ZERO_BUILD), true)
ifeq ($(ARCH_DATA_MODEL), 32)
IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME)
-ifneq ($(OBJCOPY),)
- # the import JDK may not contain the target of the symlink
- ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain the target of the symlink
+ ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DIZ_NAME)),)
+ # check for the .diz file, but create the .debuginfo link
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME)
+ endif
+ else
+ # the import JDK may not contain the target of the symlink
+ ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME)
+ endif
endif
endif
@@ -231,10 +334,17 @@ ifeq ($(PLATFORM), solaris)
# solaris vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv solaris
IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_NAME)
-ifneq ($(OBJCOPY),)
- # the import JDK may not contain .debuginfo files
- ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDB_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_DEBUGINFO_NAME)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDB_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .debuginfo files
+ ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDB_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_DEBUGINFO_NAME)
+ endif
endif
endif
@@ -243,13 +353,22 @@ ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME)),)
IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_NAME)
IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_NAME)
IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_NAME)
- ifneq ($(OBJCOPY),)
- # the import JDK may not contain .debuginfo files
- ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME)
- IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME)
- IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME)
- endif
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DIZ_NAME)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DIZ_NAME)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .debuginfo files
+ ifneq ($(wildcard $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME)
+ IMPORT_LIST += $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME)
+ endif
+ endif
endif
else
$(warning WARNING: $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME) not found!)
@@ -259,10 +378,17 @@ ifndef BUILD_CLIENT_ONLY
# The conditional can be removed when import JDKs contain these files.
ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_NAME)),)
IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_NAME)
- ifneq ($(OBJCOPY),)
- # the import JDK may not contain .debuginfo files
- ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .debuginfo files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME)
+ endif
endif
endif
else
@@ -272,10 +398,17 @@ ifndef BUILD_CLIENT_ONLY
# The conditional can be removed when import JDKs contain these files.
ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_NAME)),)
IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_NAME)
- ifneq ($(OBJCOPY),)
- # the import JDK may not contain .debuginfo files
- ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DIZ_NAME)
+ endif
+ else
+ # the import JDK may not contain .debuginfo files
+ ifneq ($(wildcard $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME)
+ endif
endif
endif
else
@@ -304,9 +437,14 @@ $(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVM_NAM
$(install-import-file)
@$(call binary_file_verification,$@)
-ifneq ($(OBJCOPY),)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DIZ_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVM_DIZ_NAME)
+ $(install-import-file)
+ else
$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVM_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVM_DEBUGINFO_NAME)
$(install-import-file)
+ endif
endif
$(LIB_LOCATION)/$(KERNEL_LOCATION)/$(JVM_NAME): $(HOTSPOT_KERNEL_PATH)/$(JVM_NAME)
@@ -317,9 +455,14 @@ $(LIB_LOCATION)/$(LIBJSIG_NAME): $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJ
$(install-import-file)
@$(call binary_file_verification,$@)
-ifneq ($(OBJCOPY),)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+$(LIB_LOCATION)/$(LIBJSIG_DIZ_NAME): $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DIZ_NAME)
+ $(install-import-file)
+ else
$(LIB_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME): $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(LIBJSIG_DEBUGINFO_NAME)
$(install-import-file)
+ endif
endif
ifndef BUILD_CLIENT_ONLY
@@ -328,22 +471,24 @@ $(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_NAME):
@$(prep-target)
$(call install-sym-link, ../$(LIBJSIG_NAME))
-ifneq ($(OBJCOPY),)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+# we don't create a symlink to a libjsig.diz file
$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME) \
$(LIB_LOCATION)/$(SERVER_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME):
@$(prep-target)
$(call install-sym-link, ../$(LIBJSIG_DEBUGINFO_NAME))
-endif
+ endif
else
$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_NAME):
@$(prep-target)
$(call install-sym-link, ../$(LIBJSIG_NAME))
-ifneq ($(OBJCOPY),)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+# we don't create a symlink to a libjsig.diz file
$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(LIBJSIG_DEBUGINFO_NAME):
@$(prep-target)
$(call install-sym-link, ../$(LIBJSIG_DEBUGINFO_NAME))
-endif
+ endif
endif
$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDB_NAME)
@@ -354,12 +499,20 @@ $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_NAME): $(HOTSPOT_CLIENT_PATH)/64/$
$(install-import-file)
@$(call binary_file_verification,$@)
-ifneq ($(OBJCOPY),)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_DIZ_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDB_DIZ_NAME)
+ $(install-import-file)
+
+$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DIZ_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDB_DIZ_NAME)
+ $(install-import-file)
+ else
$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDB_DEBUGINFO_NAME)
$(install-import-file)
$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDB_DEBUGINFO_NAME)
$(install-import-file)
+ endif
endif
ifndef BUILD_CLIENT_ONLY
@@ -371,13 +524,21 @@ $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_NAME): $(HOTSPOT_SERVER_PATH)/64/$
$(install-import-file)
@$(call binary_file_verification,$@)
-ifneq ($(OBJCOPY),)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DIZ_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDB_DIZ_NAME)
+ $(install-import-file)
+
+$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DIZ_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DIZ_NAME)
+ $(install-import-file)
+ else
$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDB_DEBUGINFO_NAME)
$(install-import-file)
$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDB_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDB_DEBUGINFO_NAME)
$(install-import-file)
-endif
+ endif
+ endif
endif
$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_NAME)
@@ -388,12 +549,20 @@ $(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_NAME): $(HOTSPOT_CLIENT_PATH)/
$(install-import-file)
@$(call binary_file_verification,$@)
-ifneq ($(OBJCOPY),)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DIZ_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DIZ_NAME)
+ $(install-import-file)
+
+$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DIZ_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDTRACE_DIZ_NAME)
+ $(install-import-file)
+ else
$(LIB_LOCATION)/$(CLIENT_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)
$(install-import-file)
$(LIB_LOCATION)/$(CLIENT_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_CLIENT_PATH)/64/$(JVMDTRACE_DEBUGINFO_NAME)
$(install-import-file)
+ endif
endif
ifndef BUILD_CLIENT_ONLY
@@ -409,7 +578,17 @@ $(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_NAME): $(HOTSPOT_SERVER_PATH)/$(JVM_NAM
$(install-import-file)
@$(call binary_file_verification,$@)
-ifneq ($(OBJCOPY),)
+ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DIZ_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DIZ_NAME)
+ $(install-import-file)
+
+$(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DIZ_NAME): $(HOTSPOT_SERVER_PATH)/64/$(JVMDTRACE_DIZ_NAME)
+ $(install-import-file)
+
+$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DIZ_NAME): $(HOTSPOT_SERVER_PATH)/$(JVM_DIZ_NAME)
+ $(install-import-file)
+ else
$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVMDTRACE_DEBUGINFO_NAME)
$(install-import-file)
@@ -418,6 +597,7 @@ $(LIB_LOCATION)/$(SERVER_LOCATION)/64/$(JVMDTRACE_DEBUGINFO_NAME): $(HOTSPOT_SER
$(LIB_LOCATION)/$(SERVER_LOCATION)/$(JVM_DEBUGINFO_NAME): $(HOTSPOT_SERVER_PATH)/$(JVM_DEBUGINFO_NAME)
$(install-import-file)
+ endif
endif
$(LIB_LOCATION)/$(SERVER_LOCATION)/Xusage.txt : $(HOTSPOT_SERVER_PATH)/Xusage.txt
diff --git a/jdk/make/java/redist/sajdi/Makefile b/jdk/make/java/redist/sajdi/Makefile
index 1e1e818772d..6bec18ce9d0 100644
--- a/jdk/make/java/redist/sajdi/Makefile
+++ b/jdk/make/java/redist/sajdi/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -54,14 +54,26 @@ 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
- ifneq ($(OBJCOPY),)
- # the import JDK may not contain .debuginfo files
- ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SA_DEBUGINFO_NAME)),)
- IMPORT_LIST += $(LIB_LOCATION)/$(SA_DEBUGINFO_NAME)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+ # the import JDK may not contain .diz files
+ ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SA_DIZ_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SA_DIZ_NAME)
+ endif
+ else
+ ifeq ($(PLATFORM), windows)
+ # the import JDK may not contain .pdb files
+ ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SAPDB_NAME)),)
+ # assume .map file is present if .pdb is present
+ IMPORT_LIST += $(LIB_LOCATION)/$(SAMAP_NAME) \
+ $(LIB_LOCATION)/$(SAPDB_NAME)
+ endif
+ else
+ # the import JDK may not contain .debuginfo files
+ ifneq ($(wildcard $(HOTSPOT_IMPORT_PATH)/$(ARCH_VM_SUBDIR)/$(SA_DEBUGINFO_NAME)),)
+ IMPORT_LIST += $(LIB_LOCATION)/$(SA_DEBUGINFO_NAME)
+ endif
+ endif
endif
endif
endif # INCLUDE_SA
@@ -80,17 +92,22 @@ $(LIBDIR)/sa-jdi.jar: $(HOTSPOT_IMPORT_PATH)/lib/sa-jdi.jar
$(LIB_LOCATION)/$(SALIB_NAME): $(HOTSPOT_SALIB_PATH)/$(SALIB_NAME)
$(install-import-file)
-ifeq ($(PLATFORM), windows)
+ ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1)
+ ifeq ($(ZIP_DEBUGINFO_FILES),1)
+$(LIB_LOCATION)/$(SA_DIZ_NAME): $(HOTSPOT_SALIB_PATH)/$(SA_DIZ_NAME)
+ $(install-import-file)
+ else
+ 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
-
- ifneq ($(OBJCOPY),)
+ else
$(LIB_LOCATION)/$(SA_DEBUGINFO_NAME): $(HOTSPOT_SALIB_PATH)/$(SA_DEBUGINFO_NAME)
$(install-import-file)
+ endif
+ endif
endif
endif # INCLUDE_SA
diff --git a/jdk/make/java/verify/Makefile b/jdk/make/java/verify/Makefile
index 4343e4aa0dc..9100069f77c 100644
--- a/jdk/make/java/verify/Makefile
+++ b/jdk/make/java/verify/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
# Build libverify.so
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../..
PRODUCT = java
LIBRARY = verify
diff --git a/jdk/make/jpda/jdwp/Makefile b/jdk/make/jpda/jdwp/Makefile
index 99286ae8266..fb440072e68 100644
--- a/jdk/make/jpda/jdwp/Makefile
+++ b/jdk/make/jpda/jdwp/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
# Makefile for building JDWP
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../..
PACKAGE = com.sun.tools.jdwp
PRODUCT = jpda
diff --git a/jdk/make/jpda/transport/socket/Makefile b/jdk/make/jpda/transport/socket/Makefile
index efbc5a91818..6e44f3457f0 100644
--- a/jdk/make/jpda/transport/socket/Makefile
+++ b/jdk/make/jpda/transport/socket/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
# Makefile for building the JDI back-end implementation
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
LIBRARY = dt_socket
PRODUCT = jbug
@@ -40,7 +42,7 @@ ifeq ($(PLATFORM), linux)
OTHER_LDLIBS += $(LIBNSL) $(LIBSOCKET) -lpthread
endif
-ifeq ($(PLATFORM), macosx))
+ifeq ($(PLATFORM), macosx)
LIBSOCKET =
OTHER_LDLIBS += -pthread
endif
diff --git a/jdk/make/jprt.gmk b/jdk/make/jprt.gmk
index cf79b8242d8..117e934d44a 100644
--- a/jdk/make/jprt.gmk
+++ b/jdk/make/jprt.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -27,17 +27,24 @@
JPRT_ARCHIVE_BUNDLE=$(ABS_OUTPUTDIR)/$(JPRT_BUILD_FLAVOR)-bundle.zip
+ifeq ($(PLATFORM),windows)
+ ZIPFLAGS=-q
+else
+ # store symbolic links as the link
+ ZIPFLAGS=-q -y
+endif
+
jprt_build_product: all images
( $(CD) $(OUTPUTDIR)/j2sdk-image && \
- $(ZIPEXE) -q -r $(JPRT_ARCHIVE_BUNDLE) . )
+ $(ZIPEXE) $(ZIPFLAGS) -r $(JPRT_ARCHIVE_BUNDLE) . )
jprt_build_fastdebug: fastdebug images
( $(CD) $(OUTPUTDIR)/j2sdk-image && \
- $(ZIPEXE) -q -r $(JPRT_ARCHIVE_BUNDLE) . )
+ $(ZIPEXE) $(ZIPFLAGS) -r $(JPRT_ARCHIVE_BUNDLE) . )
jprt_build_debug: debug images
( $(CD) $(OUTPUTDIR)/j2sdk-image && \
- $(ZIPEXE) -q -r $(JPRT_ARCHIVE_BUNDLE) . )
+ $(ZIPEXE) $(ZIPFLAGS) -r $(JPRT_ARCHIVE_BUNDLE) . )
#
# Phonies to avoid accidents.
diff --git a/jdk/make/launchers/Makefile.launcher b/jdk/make/launchers/Makefile.launcher
index 4e32af5cb18..3183a0522d0 100644
--- a/jdk/make/launchers/Makefile.launcher
+++ b/jdk/make/launchers/Makefile.launcher
@@ -27,6 +27,8 @@
# Makefile for building simple launchers
#
+PROGRAM_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ..
PACKAGE = launcher
PRODUCT = sun
@@ -155,8 +157,10 @@ endif
# GUI tools
ifeq ($(GUI_TOOL),true)
ifneq ($(PLATFORM), windows)
- # Anything with a GUI needs X11 to be linked in.
- OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11
+ ifneq ($(PLATFORM), macosx)
+ # Anything with a GUI needs X11 to be linked in.
+ OTHER_LDLIBS += -L$(OPENWIN_LIB) -lX11
+ endif
endif
endif
diff --git a/jdk/make/mkdemo/jvmti/compiledMethodLoad/Makefile b/jdk/make/mkdemo/jvmti/compiledMethodLoad/Makefile
index b53a1e71025..955ad684188 100644
--- a/jdk/make/mkdemo/jvmti/compiledMethodLoad/Makefile
+++ b/jdk/make/mkdemo/jvmti/compiledMethodLoad/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PRODUCT = demo/jvmti
DEMONAME = compiledMethodLoad
diff --git a/jdk/make/mkdemo/jvmti/gctest/Makefile b/jdk/make/mkdemo/jvmti/gctest/Makefile
index 8423d77490d..537c0733e7a 100644
--- a/jdk/make/mkdemo/jvmti/gctest/Makefile
+++ b/jdk/make/mkdemo/jvmti/gctest/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PRODUCT = demo/jvmti
DEMONAME = gctest
diff --git a/jdk/make/mkdemo/jvmti/heapTracker/Makefile b/jdk/make/mkdemo/jvmti/heapTracker/Makefile
index 3e46e5bf8e1..e58dcccb219 100644
--- a/jdk/make/mkdemo/jvmti/heapTracker/Makefile
+++ b/jdk/make/mkdemo/jvmti/heapTracker/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PRODUCT = demo/jvmti
DEMONAME = heapTracker
diff --git a/jdk/make/mkdemo/jvmti/heapViewer/Makefile b/jdk/make/mkdemo/jvmti/heapViewer/Makefile
index e697d1939b2..2431f3de1dc 100644
--- a/jdk/make/mkdemo/jvmti/heapViewer/Makefile
+++ b/jdk/make/mkdemo/jvmti/heapViewer/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PRODUCT = demo/jvmti
DEMONAME = heapViewer
diff --git a/jdk/make/mkdemo/jvmti/hprof/Makefile b/jdk/make/mkdemo/jvmti/hprof/Makefile
index fca8ec4d193..29d71b5ba36 100644
--- a/jdk/make/mkdemo/jvmti/hprof/Makefile
+++ b/jdk/make/mkdemo/jvmti/hprof/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PRODUCT = demo/jvmti
DEMONAME = hprof
diff --git a/jdk/make/mkdemo/jvmti/minst/Makefile b/jdk/make/mkdemo/jvmti/minst/Makefile
index c73e15eed9d..bc0bd56b89b 100644
--- a/jdk/make/mkdemo/jvmti/minst/Makefile
+++ b/jdk/make/mkdemo/jvmti/minst/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PRODUCT = demo/jvmti
DEMONAME = minst
diff --git a/jdk/make/mkdemo/jvmti/mtrace/Makefile b/jdk/make/mkdemo/jvmti/mtrace/Makefile
index e4ec50f4b54..6057c964f77 100644
--- a/jdk/make/mkdemo/jvmti/mtrace/Makefile
+++ b/jdk/make/mkdemo/jvmti/mtrace/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PRODUCT = demo/jvmti
DEMONAME = mtrace
diff --git a/jdk/make/mkdemo/jvmti/versionCheck/Makefile b/jdk/make/mkdemo/jvmti/versionCheck/Makefile
index 0be53f141cc..a850ba26b2c 100644
--- a/jdk/make/mkdemo/jvmti/versionCheck/Makefile
+++ b/jdk/make/mkdemo/jvmti/versionCheck/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PRODUCT = demo/jvmti
DEMONAME = versionCheck
diff --git a/jdk/make/mkdemo/jvmti/waiters/Makefile b/jdk/make/mkdemo/jvmti/waiters/Makefile
index 9929c0602bf..dd850b4bbf4 100644
--- a/jdk/make/mkdemo/jvmti/waiters/Makefile
+++ b/jdk/make/mkdemo/jvmti/waiters/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,8 @@
# questions.
#
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PRODUCT = demo/jvmti
DEMONAME = waiters
diff --git a/jdk/make/sun/awt/mawt.gmk b/jdk/make/sun/awt/mawt.gmk
index cbf22d052b0..4c18b3855f2 100644
--- a/jdk/make/sun/awt/mawt.gmk
+++ b/jdk/make/sun/awt/mawt.gmk
@@ -208,7 +208,7 @@ ifeq ($(PLATFORM), linux)
$(wildcard /usr/include/X11/extensions))
endif
-ifeq ($(PLATFORM), macosx))
+ifeq ($(PLATFORM), macosx)
CPPFLAGS += -I$(OPENWIN_HOME)/include/X11/extensions \
-I$(OPENWIN_HOME)/include
endif
diff --git a/jdk/make/sun/font/Makefile b/jdk/make/sun/font/Makefile
index 385e2028270..5dd35dd533e 100644
--- a/jdk/make/sun/font/Makefile
+++ b/jdk/make/sun/font/Makefile
@@ -62,7 +62,7 @@ FILES_export = \
java/text/Bidi.java \
sun/font/FileFont.java \
sun/font/FileFontStrike.java \
- sun/font/FontManager.java \
+ sun/font/SunFontManager.java \
sun/font/GlyphList.java \
sun/font/NativeFont.java \
sun/font/StrikeCache.java \
@@ -172,7 +172,7 @@ else # PLATFORM
# Libraries to link, and other C flags.
#
-ifeq ($(PLATFORM), macosx))
+ifeq ($(PLATFORM), macosx)
OTHER_INCLUDES += -I$(X11_PATH)/include
OTHER_LDLIBS += -lawt $(LIBM) $(LIBCXX)
ifeq ($(OS_VENDOR),Apple)
@@ -197,7 +197,7 @@ endif # PLATFORM
# set up compile flags..
-ifeq ($(PLATFORM), macosx))
+ifeq ($(PLATFORM), macosx)
CPPFLAGS += -I$(CLASSHDRDIR)
endif
diff --git a/jdk/make/sun/font/t2k/Makefile b/jdk/make/sun/font/t2k/Makefile
index 71903e0f774..0827baf89c9 100644
--- a/jdk/make/sun/font/t2k/Makefile
+++ b/jdk/make/sun/font/t2k/Makefile
@@ -52,7 +52,6 @@ include FILES_c.gmk
FILES_export = \
java/awt/Font.java \
sun/font/FileFont.java \
- sun/font/FontManager.java \
sun/font/GlyphList.java \
sun/font/NativeFont.java \
sun/font/StrikeCache.java \
diff --git a/jdk/make/sun/javazic/tzdata/VERSION b/jdk/make/sun/javazic/tzdata/VERSION
index fbc87a0d579..80cedce6711 100644
--- a/jdk/make/sun/javazic/tzdata/VERSION
+++ b/jdk/make/sun/javazic/tzdata/VERSION
@@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
-tzdata2011l
+tzdata2012c
diff --git a/jdk/make/sun/javazic/tzdata/africa b/jdk/make/sun/javazic/tzdata/africa
index 6fb9d645000..74c886175c2 100644
--- a/jdk/make/sun/javazic/tzdata/africa
+++ b/jdk/make/sun/javazic/tzdata/africa
@@ -790,6 +790,37 @@ Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
# wall clock time (i.e. 11pm UTC), but that's what I would assume. It has
# also been like that in the past.
+# From Alexander Krivenyshev (2012-03-09):
+# According to Infomédiaire web site from Morocco (infomediaire.ma),
+# on March 9, 2012, (in French) Heure légale:
+# Le Maroc adopte officiellement l'heure d'été
+#
+# http://www.infomediaire.ma/news/maroc/heure-l%C3%A9gale-le-maroc-adopte-officiellement-lheure-d%C3%A9t%C3%A9
+#
+# Governing Council adopted draft decree, that Morocco DST starts on
+# the last Sunday of March (March 25, 2012) and ends on
+# last Sunday of September (September 30, 2012)
+# except the month of Ramadan.
+# or (brief)
+#
+# http://www.worldtimezone.com/dst_news/dst_news_morocco06.html
+#
+
+# From Arthur David Olson (2012-03-10):
+# The infomediaire.ma source indicates that the system is to be in
+# effect every year. It gives 03H00 as the "fall back" time of day;
+# it lacks a "spring forward" time of day; assume 2:00 XXX.
+# Wait on specifying the Ramadan exception for details about
+# start date, start time of day, end date, and end time of day XXX.
+
+# From Christophe Tropamer (2012-03-16):
+# Seen Morocco change again:
+#
+# http://www.le2uminutes.com/actualite.php
+#
+# "...à partir du dernier dimance d'avril et non fins mars,
+# comme annoncé précédemment."
+
# RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Morocco 1939 only - Sep 12 0:00 1:00 S
@@ -815,6 +846,9 @@ Rule Morocco 2010 only - May 2 0:00 1:00 S
Rule Morocco 2010 only - Aug 8 0:00 0 -
Rule Morocco 2011 only - Apr 3 0:00 1:00 S
Rule Morocco 2011 only - Jul 31 0 0 -
+Rule Morocco 2012 max - Apr lastSun 2:00 1:00 S
+Rule Morocco 2012 max - Sep lastSun 3:00 0 -
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26
0:00 Morocco WE%sT 1984 Mar 16
diff --git a/jdk/make/sun/javazic/tzdata/antarctica b/jdk/make/sun/javazic/tzdata/antarctica
index 2fa4232a60c..64b71d5c052 100644
--- a/jdk/make/sun/javazic/tzdata/antarctica
+++ b/jdk/make/sun/javazic/tzdata/antarctica
@@ -64,8 +64,19 @@ Rule ChileAQ 1997 only - Mar 30 3:00u 0 -
Rule ChileAQ 1998 only - Mar Sun>=9 3:00u 0 -
Rule ChileAQ 1998 only - Sep 27 4:00u 1:00 S
Rule ChileAQ 1999 only - Apr 4 3:00u 0 -
-Rule ChileAQ 1999 max - Oct Sun>=9 4:00u 1:00 S
-Rule ChileAQ 2000 max - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 1999 2010 - Oct Sun>=9 4:00u 1:00 S
+Rule ChileAQ 2000 2007 - Mar Sun>=9 3:00u 0 -
+# N.B.: the end of March 29 in Chile is March 30 in Universal time,
+# which is used below in specifying the transition.
+Rule ChileAQ 2008 only - Mar 30 3:00u 0 -
+Rule ChileAQ 2009 only - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 2010 only - Apr Sun>=1 3:00u 0 -
+Rule ChileAQ 2011 only - May Sun>=2 3:00u 0 -
+Rule ChileAQ 2011 only - Aug Sun>=16 4:00u 1:00 S
+Rule ChileAQ 2012 only - Apr Sun>=23 3:00u 0 -
+Rule ChileAQ 2012 only - Sep Sun>=2 4:00u 1:00 S
+Rule ChileAQ 2013 max - Mar Sun>=9 3:00u 0 -
+Rule ChileAQ 2013 max - Oct Sun>=9 4:00u 1:00 S
# These rules are stolen from the `australasia' file.
Rule AusAQ 1917 only - Jan 1 0:01 1:00 -
@@ -164,12 +175,16 @@ Zone Antarctica/Casey 0 - zzz 1969
# Western (Aus) Standard Time
11:00 - CAST 2010 Mar 5 2:00
# Casey Time
+ 8:00 - WST 2011 Oct 28 2:00
+ 11:00 - CAST 2012 Feb 21 17:00u
8:00 - WST
Zone Antarctica/Davis 0 - zzz 1957 Jan 13
7:00 - DAVT 1964 Nov # Davis Time
0 - zzz 1969 Feb
7:00 - DAVT 2009 Oct 18 2:00
5:00 - DAVT 2010 Mar 10 20:00u
+ 7:00 - DAVT 2011 Oct 28 2:00
+ 5:00 - DAVT 2012 Feb 21 20:00u
7:00 - DAVT
Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
6:00 - MAWT 2009 Oct 18 2:00
diff --git a/jdk/make/sun/javazic/tzdata/asia b/jdk/make/sun/javazic/tzdata/asia
index 446940c21bf..ccf7945c05e 100644
--- a/jdk/make/sun/javazic/tzdata/asia
+++ b/jdk/make/sun/javazic/tzdata/asia
@@ -21,6 +21,7 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
+#
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
@@ -99,10 +100,6 @@ Rule RussiaAsia 1993 max - Mar lastSun 2:00s 1:00 S
Rule RussiaAsia 1993 1995 - Sep lastSun 2:00s 0 -
Rule RussiaAsia 1996 max - Oct lastSun 2:00s 0 -
-# From Arthur David Olson (2011-06-15):
-# While Russia abandoned DST in 2011, Armenia may choose to
-# follow Russia's "old" rules.
-
# Afghanistan
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kabul 4:36:48 - LMT 1890
@@ -119,6 +116,21 @@ Zone Asia/Kabul 4:36:48 - LMT 1890
# in 1996, though it did use DST in 1995. IATA SSIM (1991/1998) reports that
# Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
# but started switching at 3:00s in 1998.
+
+# From Arthur David Olson (2011-06-15):
+# While Russia abandoned DST in 2011, Armenia may choose to
+# follow Russia's "old" rules.
+
+# From Alexander Krivenyshev (2012-02-10):
+# According to News Armenia, on Feb 9, 2012,
+# http://newsarmenia.ru/society/20120209/42609695.html
+#
+# The Armenia National Assembly adopted final reading of Amendments to the
+# Law "On procedure of calculation time on the territory of the Republic of
+# Armenia" according to which Armenia [is] abolishing Daylight Saving Time.
+# or
+# (brief)
+# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
3:00 - YERT 1957 Mar # Yerevan Time
@@ -126,7 +138,8 @@ Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
3:00 1:00 YERST 1991 Sep 23 # independence
3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
4:00 - AMT 1997
- 4:00 RussiaAsia AM%sT
+ 4:00 RussiaAsia AM%sT 2012 Mar 25 2:00s
+ 4:00 - AMT
# Azerbaijan
# From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23):
@@ -2257,6 +2270,29 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# http://www.maannews.net/eng/ViewDetails.aspx?ID=424808
#
+# From Steffen Thorsen (2012-03-26):
+# Palestinian news sources tell that both Gaza and West Bank will start DST
+# on Friday (Thursday midnight, 2012-03-29 24:00).
+# Some of many sources in Arabic:
+#
+# http://www.samanews.com/index.php?act=Show&id=122638
+#
+#
+#
+# http://safa.ps/details/news/74352/%D8%A8%D8%AF%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D9%82%D9%8A%D8%AA-%D8%A7%D9%84%D8%B5%D9%8A%D9%81%D9%8A-%D8%A8%D8%A7%D9%84%D8%B6%D9%81%D8%A9-%D9%88%D8%BA%D8%B2%D8%A9-%D9%84%D9%8A%D9%84%D8%A9-%D8%A7%D9%84%D8%AC%D9%85%D8%B9%D8%A9.html
+#
+#
+# Our brief summary:
+#
+# http://www.timeanddate.com/news/time/gaza-west-bank-dst-2012.html
+#
+
+# From Arthur David Olson (2012-03-27):
+# The timeanddate article for 2012 says that "the end date has not yet been
+# announced" and that "Last year, both...paused daylight saving time during...
+# Ramadan. It is not yet known [for] 2012."
+# For now, assume both switch back on the last Friday in September. XXX
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule EgyptAsia 1957 only - May 10 0:00 1:00 S
Rule EgyptAsia 1957 1958 - Oct 1 0:00 0 -
@@ -2289,6 +2325,8 @@ Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
2:00 Jordan EE%sT 1999
2:00 Palestine EE%sT 2011 Apr 2 12:01
2:00 1:00 EEST 2011 Aug 1
+ 2:00 - EET 2012 Mar 30
+ 2:00 1:00 EEST 2012 Sep 28
2:00 - EET
Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
@@ -2302,6 +2340,8 @@ Zone Asia/Hebron 2:20:23 - LMT 1900 Oct
2:00 1:00 EEST 2011 Aug 1
2:00 - EET 2011 Aug 30
2:00 1:00 EEST 2011 Sep 30 3:00
+ 2:00 - EET 2012 Mar 30
+ 2:00 1:00 EEST 2012 Sep 28 3:00
2:00 - EET
# Paracel Is
@@ -2593,10 +2633,28 @@ Rule Syria 2007 only - Nov Fri>=1 0:00 0 -
# http://sns.sy/sns/?path=news/read/11421 (Arabic)
#
+# From Steffen Thorsen (2012-03-26):
+# Today, Syria's government announced that they will start DST early on Friday
+# (00:00). This is a bit earlier than the past two years.
+#
+# From Syrian Arab News Agency, in Arabic:
+#
+# http://www.sana.sy/ara/2/2012/03/26/408215.htm
+#
+#
+# Our brief summary:
+#
+# http://www.timeanddate.com/news/time/syria-dst-2012.html
+#
+
+# From Arthur David Olson (2012-03-27):
+# Assume last Friday in March going forward XXX.
+
Rule Syria 2008 only - Apr Fri>=1 0:00 1:00 S
Rule Syria 2008 only - Nov 1 0:00 0 -
Rule Syria 2009 only - Mar lastFri 0:00 1:00 S
-Rule Syria 2010 max - Apr Fri>=1 0:00 1:00 S
+Rule Syria 2010 2011 - Apr Fri>=1 0:00 1:00 S
+Rule Syria 2012 max - Mar lastFri 0:00 1:00 S
Rule Syria 2009 max - Oct lastFri 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/jdk/make/sun/javazic/tzdata/australasia b/jdk/make/sun/javazic/tzdata/australasia
index 722908b4b95..3a63e2dd133 100644
--- a/jdk/make/sun/javazic/tzdata/australasia
+++ b/jdk/make/sun/javazic/tzdata/australasia
@@ -330,6 +330,20 @@ Zone Indian/Cocos 6:27:40 - LMT 1900
# advance at 2am to 3am on October 23, 2011 and one hour back at 3am to
# 2am on February 26 next year.
+# From Ken Rylander (2011-10-24)
+# Another change to the Fiji DST end date. In the TZ database the end date for
+# Fiji DST 2012, is currently Feb 26. This has been changed to Jan 22.
+#
+#
+# http://www.fiji.gov.fj/index.php?option=com_content&view=article&id=5017:amendments-to-daylight-savings&catid=71:press-releases&Itemid=155
+#
+# states:
+#
+# The end of daylight saving scheduled initially for the 26th of February 2012
+# has been brought forward to the 22nd of January 2012.
+# The commencement of daylight saving will remain unchanged and start
+# on the 23rd of October, 2011.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Fiji 1998 1999 - Nov Sun>=1 2:00 1:00 S
Rule Fiji 1999 2000 - Feb lastSun 3:00 0 -
@@ -338,7 +352,7 @@ Rule Fiji 2010 only - Mar lastSun 3:00 0 -
Rule Fiji 2010 only - Oct 24 2:00 1:00 S
Rule Fiji 2011 only - Mar Sun>=1 3:00 0 -
Rule Fiji 2011 only - Oct 23 2:00 1:00 S
-Rule Fiji 2012 only - Feb 26 3:00 0 -
+Rule Fiji 2012 only - Jan 22 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fiji 11:53:40 - LMT 1915 Oct 26 # Suva
12:00 Fiji FJ%sT # Fiji Time
@@ -624,6 +638,11 @@ Zone Pacific/Pago_Pago 12:37:12 - LMT 1879 Jul 5
# Dateline Change skip Friday 30th Dec 2011
# Thursday 29th December 2011 23:59:59 Hours
# Saturday 31st December 2011 00:00:00 Hours
+#
+# Clarification by Tim Parenti (2012-01-03):
+# Although Samoa has used Daylight Saving Time in the 2010-2011 and 2011-2012
+# seasons, there is not yet any indication that this trend will continue on
+# a regular basis. For now, we have explicitly listed the transitions below.
Zone Pacific/Apia 12:33:04 - LMT 1879 Jul 5
-11:26:56 - LMT 1911
-11:30 - SAMT 1950 # Samoa Time
@@ -641,9 +660,28 @@ Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
11:00 - SBT # Solomon Is Time
# Tokelau Is
+#
+# From Gwillim Law (2011-12-29)
+# A correspondent informed me that Tokelau, like Samoa, will be skipping
+# December 31 this year, thereby changing its time zone from UTC-10 to
+# UTC+14. When I tried to verify this statement, I found a confirming
+# article in Time magazine online
+#
+# (http://www.time.com/time/world/article/0,8599,2103243,00.html).
+#
+#
+# From Jonathan Leffler (2011-12-29)
+# Information from the BBC to the same effect:
+#
+# http://www.bbc.co.uk/news/world-asia-16351377
+#
+#
+# Patch supplied by Tim Parenti (2011-12-29)
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Fakaofo -11:24:56 - LMT 1901
- -10:00 - TKT # Tokelau Time
+ -10:00 - TKT 2011 Dec 30 # Tokelau Time
+ 14:00 - TKT
# Tonga
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
diff --git a/jdk/make/sun/javazic/tzdata/europe b/jdk/make/sun/javazic/tzdata/europe
index b5394fb5004..55714aa9a4c 100644
--- a/jdk/make/sun/javazic/tzdata/europe
+++ b/jdk/make/sun/javazic/tzdata/europe
@@ -233,9 +233,15 @@
# the history of summer time legislation in the United Kingdom.
# Since 1998 Joseph S. Myers has been updating
# and extending this list, which can be found in
-#
+# http://student.cusu.cam.ac.uk/~jsm28/british-time/
+#
# History of legal time in Britain
#
+# Rob Crowther (2012-01-04) reports that that URL no longer
+# exists, and the article can now be found at:
+#
+# http://www.polyomino.org.uk/british-time/
+#
# From Joseph S. Myers (1998-01-06):
#
@@ -1173,10 +1179,10 @@ Rule France 1940 only - Feb 25 2:00 1:00 S
# write that they were used in Monaco and in many French locations.
# Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
# Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
-# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Decartes,
+# Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Descartes,
# Loches, Montrichard, Vierzon, Bourges, Moulins, Digoin,
# Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
-# Dole, Morez, St-Claude, and Collognes (Haute-Savioe).
+# Dole, Morez, St-Claude, and Collonges (Haute-Savoie).
Rule France 1941 only - May 5 0:00 2:00 M # Midsummer
# Shanks & Pottenger say this transition occurred at Oct 6 1:00,
# but go with Denis Excoffier (1997-12-12),
@@ -1677,6 +1683,41 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
# But [two people] separately reported via
# Jesper Norgaard that as of 2001-01-24 Tiraspol was like Chisinau.
# The Tiraspol entry has therefore been removed for now.
+#
+# From Alexander Krivenyshev (2011-10-17):
+# Pridnestrovian Moldavian Republic (PMR, also known as
+# "Pridnestrovie") has abolished seasonal clock change (no transition
+# to the Winter Time).
+#
+# News (in Russian):
+#
+# http://www.kyivpost.ua/russia/news/pridnestrove-otkazalos-ot-perehoda-na-zimnee-vremya-30954.html
+#
+#
+#
+# http://www.allmoldova.com/moldova-news/1249064116.html
+#
+#
+# The substance of this change (reinstatement of the Tiraspol entry)
+# is from a patch from Petr Machata (2011-10-17)
+#
+# From Tim Parenti (2011-10-19)
+# In addition, being situated at +4651+2938 would give Tiraspol
+# a pre-1880 LMT offset of 1:58:32.
+#
+# (which agrees with the earlier entry that had been removed)
+#
+# From Alexander Krivenyshev (2011-10-26)
+# NO need to divide Moldova into two timezones at this point.
+# As of today, Transnistria (Pridnestrovie)- Tiraspol reversed its own
+# decision to abolish DST this winter.
+# Following Moldova and neighboring Ukraine- Transnistria (Pridnestrovie)-
+# Tiraspol will go back to winter time on October 30, 2011.
+# News from Moldova (in russian):
+#
+# http://ru.publika.md/link_317061.html
+#
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Chisinau 1:55:20 - LMT 1880
@@ -2673,6 +2714,28 @@ Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
#
# http://www.pravda.com.ua/rus/news/2011/09/20/6600616/
#
+#
+# From Philip Pizzey (2011-10-18):
+# Today my Ukrainian colleagues have informed me that the
+# Ukrainian parliament have decided that they will go to winter
+# time this year after all.
+#
+# From Udo Schwedt (2011-10-18):
+# As far as I understand, the recent change to the Ukranian time zone
+# (Europe/Kiev) to introduce permanent daylight saving time (similar
+# to Russia) was reverted today:
+#
+#
+# http://portal.rada.gov.ua/rada/control/en/publish/article/info_left?art_id=287324&cat_id=105995
+#
+#
+# Also reported by Alexander Bokovoy (2011-10-18) who also noted:
+# The law documents themselves are at
+#
+#
+# http://w1.c1.rada.gov.ua/pls/zweb_n/webproc4_1?id=&pf3511=41484
+#
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Most of Ukraine since 1970 has been like Kiev.
@@ -2687,8 +2750,7 @@ Zone Europe/Kiev 2:02:04 - LMT 1880
3:00 - MSK 1990 Jul 1 2:00
2:00 - EET 1992
2:00 E-Eur EE%sT 1995
- 2:00 EU EE%sT 2011 Mar lastSun 1:00u
- 3:00 - FET # Further-eastern European Time
+ 2:00 EU EE%sT
# Ruthenia used CET 1990/1991.
# "Uzhhorod" is the transliteration of the Ukrainian name, but
# "Uzhgorod" is more common in English.
@@ -2702,8 +2764,7 @@ Zone Europe/Uzhgorod 1:29:12 - LMT 1890 Oct
1:00 - CET 1991 Mar 31 3:00
2:00 - EET 1992
2:00 E-Eur EE%sT 1995
- 2:00 EU EE%sT 2011 Mar lastSun 1:00u
- 3:00 - FET # Further-eastern European Time
+ 2:00 EU EE%sT
# Zaporozh'ye and eastern Lugansk oblasts observed DST 1990/1991.
# "Zaporizhia" is the transliteration of the Ukrainian name, but
# "Zaporozh'ye" is more common in English. Use the common English
@@ -2716,8 +2777,7 @@ Zone Europe/Zaporozhye 2:20:40 - LMT 1880
1:00 C-Eur CE%sT 1943 Oct 25
3:00 Russia MSK/MSD 1991 Mar 31 2:00
2:00 E-Eur EE%sT 1995
- 2:00 EU EE%sT 2011 Mar lastSun 1:00u
- 3:00 - FET # Further-eastern European Time
+ 2:00 EU EE%sT
# Central Crimea used Moscow time 1994/1997.
Zone Europe/Simferopol 2:16:24 - LMT 1880
2:16 - SMT 1924 May 2 # Simferopol Mean T
@@ -2742,8 +2802,7 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
# Assume it happened in March by not changing the clocks.
3:00 Russia MSK/MSD 1997
3:00 - MSK 1997 Mar lastSun 1:00u
- 2:00 EU EE%sT 2011 Mar lastSun 1:00u
- 3:00 - FET # Further-eastern European Time
+ 2:00 EU EE%sT
###############################################################################
diff --git a/jdk/make/sun/javazic/tzdata/leapseconds b/jdk/make/sun/javazic/tzdata/leapseconds
index 368366a1a92..f8902f7486d 100644
--- a/jdk/make/sun/javazic/tzdata/leapseconds
+++ b/jdk/make/sun/javazic/tzdata/leapseconds
@@ -70,40 +70,54 @@ Leap 1997 Jun 30 23:59:60 + S
Leap 1998 Dec 31 23:59:60 + S
Leap 2005 Dec 31 23:59:60 + S
Leap 2008 Dec 31 23:59:60 + S
+Leap 2012 Jun 30 23:59:60 + S
# INTERNATIONAL EARTH ROTATION AND REFERENCE SYSTEMS SERVICE (IERS)
#
# SERVICE INTERNATIONAL DE LA ROTATION TERRESTRE ET DES SYSTEMES DE REFERENCE
#
+#
# SERVICE DE LA ROTATION TERRESTRE
# OBSERVATOIRE DE PARIS
# 61, Av. de l'Observatoire 75014 PARIS (France)
-# Tel. : 33 (0) 1 40 51 22 29
+# Tel. : 33 (0) 1 40 51 22 26
# FAX : 33 (0) 1 40 51 22 91
-# Internet : services.iers@obspm.fr
+# e-mail : (E-Mail Removed)
+# http://hpiers.obspm.fr/eop-pc
#
-# Paris, 2 February 2011
+# Paris, 5 January 2012
#
-# Bulletin C 41
+#
+# Bulletin C 43
#
# To authorities responsible
# for the measurement and
# distribution of time
#
-# INFORMATION ON UTC - TAI
#
-# NO positive leap second will be introduced at the end of June 2011.
-# The difference between Coordinated Universal Time UTC and the
-# International Atomic Time TAI is :
+# UTC TIME STEP
+# on the 1st of July 2012
#
-# from 2009 January 1, 0h UTC, until further notice : UTC-TAI = -34 s
+#
+# A positive leap second will be introduced at the end of June 2012.
+# The sequence of dates of the UTC second markers will be:
+#
+# 2012 June 30, 23h 59m 59s
+# 2012 June 30, 23h 59m 60s
+# 2012 July 1, 0h 0m 0s
+#
+# The difference between UTC and the International Atomic Time TAI is:
+#
+# from 2009 January 1, 0h UTC, to 2012 July 1 0h UTC : UTC-TAI = - 34s
+# from 2012 July 1, 0h UTC, until further notice : UTC-TAI = - 35s
#
# Leap seconds can be introduced in UTC at the end of the months of December
-# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every
-# six months, either to announce a time step in UTC, or to confirm that there
+# or June, depending on the evolution of UT1-TAI. Bulletin C is mailed every
+# six months, either to announce a time step in UTC or to confirm that there
# will be no time step at the next possible date.
#
+#
# Daniel GAMBIS
-# Head
-# Earth Orientation Center of the IERS
+# Head
+# Earth Orientation Center of IERS
# Observatoire de Paris, France
diff --git a/jdk/make/sun/javazic/tzdata/northamerica b/jdk/make/sun/javazic/tzdata/northamerica
index fbefc6d320d..2b94d0588f1 100644
--- a/jdk/make/sun/javazic/tzdata/northamerica
+++ b/jdk/make/sun/javazic/tzdata/northamerica
@@ -1142,9 +1142,26 @@ Zone America/Menominee -5:50:27 - LMT 1885 Sep 18 12:00
# For now, assume all of DST-observing Canada will fall into line with the
# new US DST rules,
+# From Chris Walton (2011-12-01)
+# In the first of Tammy Hardwick's articles
+#
+# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
+#
+# she quotes the Friday November 1/1918 edition of the Creston Review.
+# The quote includes these two statements:
+# 'Sunday the CPR went back to the old system of time...'
+# '... The daylight saving scheme was dropped all over Canada at the same time,'
+# These statements refer to a transition from daylight time to standard time
+# that occurred nationally on Sunday October 27/1918. This transition was
+# also documented in the Saturday October 26/1918 edition of the Toronto Star.
+
+# In light of that evidence, we alter the date from the earlier believed
+# Oct 31, to Oct 27, 1918 (and Sunday is a more likely transition day
+# than Thursday) in all Canadian rulesets.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Canada 1918 only - Apr 14 2:00 1:00 D
-Rule Canada 1918 only - Oct 31 2:00 0 S
+Rule Canada 1918 only - Oct 27 2:00 0 S
Rule Canada 1942 only - Feb 9 2:00 1:00 W # War
Rule Canada 1945 only - Aug 14 23:00u 1:00 P # Peace
Rule Canada 1945 only - Sep 30 2:00 0 S
@@ -1667,7 +1684,7 @@ Zone America/Atikokan -6:06:28 - LMT 1895
Rule Winn 1916 only - Apr 23 0:00 1:00 D
Rule Winn 1916 only - Sep 17 0:00 0 S
Rule Winn 1918 only - Apr 14 2:00 1:00 D
-Rule Winn 1918 only - Oct 31 2:00 0 S
+Rule Winn 1918 only - Oct 27 2:00 0 S
Rule Winn 1937 only - May 16 2:00 1:00 D
Rule Winn 1937 only - Sep 26 2:00 0 S
Rule Winn 1942 only - Feb 9 2:00 1:00 W # War
@@ -1750,7 +1767,7 @@ Zone America/Winnipeg -6:28:36 - LMT 1887 Jul 16
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Regina 1918 only - Apr 14 2:00 1:00 D
-Rule Regina 1918 only - Oct 31 2:00 0 S
+Rule Regina 1918 only - Oct 27 2:00 0 S
Rule Regina 1930 1934 - May Sun>=1 0:00 1:00 D
Rule Regina 1930 1934 - Oct Sun>=1 0:00 0 S
Rule Regina 1937 1941 - Apr Sun>=8 0:00 1:00 D
@@ -1787,7 +1804,7 @@ Zone America/Swift_Current -7:11:20 - LMT 1905 Sep
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Edm 1918 1919 - Apr Sun>=8 2:00 1:00 D
-Rule Edm 1918 only - Oct 31 2:00 0 S
+Rule Edm 1918 only - Oct 27 2:00 0 S
Rule Edm 1919 only - May 27 2:00 0 S
Rule Edm 1920 1923 - Apr lastSun 2:00 1:00 D
Rule Edm 1920 only - Oct lastSun 2:00 0 S
@@ -1817,9 +1834,68 @@ Zone America/Edmonton -7:33:52 - LMT 1906 Sep
# Dawson Creek uses MST. Much of east BC is like Edmonton.
# Matthews and Vincent (1998) write that Creston is like Dawson Creek.
+# It seems though that (re: Creston) is not entirely correct:
+
+# From Chris Walton (2011-12-01):
+# There are two areas within the Canadian province of British Columbia
+# that do not currently observe daylight saving:
+# a) The Creston Valley (includes the town of Creston and surrounding area)
+# b) The eastern half of the Peace River Regional District
+# (includes the cities of Dawson Creek and Fort St. John)
+
+# Earlier this year I stumbled across a detailed article about the time
+# keeping history of Creston; it was written by Tammy Hardwick who is the
+# manager of the Creston & District Museum. The article was written in May 2009.
+#
+# http://www.ilovecreston.com/?p=articles&t=spec&ar=260
+#
+# According to the article, Creston has not changed its clocks since June 1918.
+# i.e. Creston has been stuck on UTC-7 for 93 years.
+# Dawson Creek, on the other hand, changed its clocks as recently as April 1972.
+
+# Unfortunately the exact date for the time change in June 1918 remains
+# unknown and will be difficult to ascertain. I e-mailed Tammy a few months
+# ago to ask if Sunday June 2 was a reasonable guess. She said it was just
+# as plausible as any other date (in June). She also said that after writing the
+# article she had discovered another time change in 1916; this is the subject
+# of another article which she wrote in October 2010.
+#
+# http://www.creston.museum.bc.ca/index.php?module=comments&uop=view_comment&cm+id=56
+#
+
+# Here is a summary of the three clock change events in Creston's history:
+# 1. 1884 or 1885: adoption of Mountain Standard Time (GMT-7)
+# Exact date unknown
+# 2. Oct 1916: switch to Pacific Standard Time (GMT-8)
+# Exact date in October unknown; Sunday October 1 is a reasonable guess.
+# 3. June 1918: switch to Pacific Daylight Time (GMT-7)
+# Exact date in June unknown; Sunday June 2 is a reasonable guess.
+# note#1:
+# On Oct 27/1918 when daylight saving ended in the rest of Canada,
+# Creston did not change its clocks.
+# note#2:
+# During WWII when the Federal Government legislated a mandatory clock change,
+# Creston did not oblige.
+# note#3:
+# There is no guarantee that Creston will remain on Mountain Standard Time
+# (UTC-7) forever.
+# The subject was debated at least once this year by the town Council.
+#
+# http://www.bclocalnews.com/kootenay_rockies/crestonvalleyadvance/news/116760809.html
+#
+
+# During a period WWII, summer time (Daylight saying) was mandatory in Canada.
+# In Creston, that was handled by shifting the area to PST (-8:00) then applying
+# summer time to cause the offset to be -7:00, the same as it had been before
+# the change. It can be argued that the timezone abbreviation during this
+# period should be PDT rather than MST, but that doesn't seem important enough
+# (to anyone) to further complicate the rules.
+
+# The transition dates (and times) are guesses.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Vanc 1918 only - Apr 14 2:00 1:00 D
-Rule Vanc 1918 only - Oct 31 2:00 0 S
+Rule Vanc 1918 only - Oct 27 2:00 0 S
Rule Vanc 1942 only - Feb 9 2:00 1:00 W # War
Rule Vanc 1945 only - Aug 14 23:00u 1:00 P # Peace
Rule Vanc 1945 only - Sep 30 2:00 0 S
@@ -1835,7 +1911,10 @@ Zone America/Dawson_Creek -8:00:56 - LMT 1884
-8:00 Canada P%sT 1947
-8:00 Vanc P%sT 1972 Aug 30 2:00
-7:00 - MST
-
+Zone America/Creston -7:46:04 - LMT 1884
+ -7:00 - MST 1916 Oct 1
+ -8:00 - PST 1918 Jun 2
+ -7:00 - MST
# Northwest Territories, Nunavut, Yukon
@@ -2712,6 +2791,34 @@ Zone America/Costa_Rica -5:36:20 - LMT 1890 # San Jose
#
# http://www.timeanddate.com/news/time/cuba-starts-dst-2011.html
#
+#
+# From Steffen Thorsen (2011-10-30)
+# Cuba will end DST two weeks later this year. Instead of going back
+# tonight, it has been delayed to 2011-11-13 at 01:00.
+#
+# One source (Spanish)
+#
+# http://www.radioangulo.cu/noticias/cuba/17105-cuba-restablecera-el-horario-del-meridiano-de-greenwich.html
+#
+#
+# Our page:
+#
+# http://www.timeanddate.com/news/time/cuba-time-changes-2011.html
+#
+#
+# From Steffen Thorsen (2012-03-01)
+# According to Radio Reloj, Cuba will start DST on Midnight between March
+# 31 and April 1.
+#
+# Radio Reloj has the following info (Spanish):
+#
+# http://www.radioreloj.cu/index.php/noticias-radio-reloj/71-miscelaneas/7529-cuba-aplicara-el-horario-de-verano-desde-el-1-de-abril
+#
+#
+# Our info on it:
+#
+# http://www.timeanddate.com/news/time/cuba-starts-dst-2012.html
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Cuba 1928 only - Jun 10 0:00 1:00 D
@@ -2743,12 +2850,15 @@ Rule Cuba 1997 only - Oct 12 0:00s 0 S
Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D
-Rule Cuba 2006 max - Oct lastSun 0:00s 0 S
+Rule Cuba 2006 2010 - Oct lastSun 0:00s 0 S
Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
Rule Cuba 2008 only - Mar Sun>=15 0:00s 1:00 D
Rule Cuba 2009 2010 - Mar Sun>=8 0:00s 1:00 D
Rule Cuba 2011 only - Mar Sun>=15 0:00s 1:00 D
-Rule Cuba 2012 max - Mar Sun>=8 0:00s 1:00 D
+Rule Cuba 2011 only - Nov 13 0:00s 0 S
+Rule Cuba 2012 only - Apr 1 0:00s 1:00 D
+Rule Cuba 2012 max - Oct lastSun 0:00s 0 S
+Rule Cuba 2013 max - Mar Sun>=8 0:00s 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Havana -5:29:28 - LMT 1890
@@ -2882,6 +2992,29 @@ Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
# From Stephen Colebourne (2007-02-22):
# Some IATA info: Haiti won't be having DST in 2007.
+# From Steffen Thorsen (2012-03-11):
+# According to several news sources, Haiti will observe DST this year,
+# apparently using the same start and end date as USA/Canada.
+# So this means they have already changed their time.
+#
+# (Sources in French):
+#
+# http://www.alterpresse.org/spip.php?article12510
+#
+#
+# http://radiovision2000haiti.net/home/?p=13253
+#
+#
+# Our coverage:
+#
+# http://www.timeanddate.com/news/time/haiti-dst-2012.html
+#
+
+# From Arthur David Olson (2012-03-11):
+# The alterpresse.org source seems to show a US-style leap from 2:00 a.m. to
+# 3:00 a.m. rather than the traditional Haitian jump at midnight.
+# Assume a US-style fall back as well XXX.
+# Do not yet assume that the change carries forward past 2012 XXX.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Haiti 1983 only - May 8 0:00 1:00 D
@@ -2893,6 +3026,8 @@ Rule Haiti 1988 1997 - Apr Sun>=1 1:00s 1:00 D
Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
+Rule Haiti 2012 only - Mar Sun>=8 2:00 1:00 D
+Rule Haiti 2012 only - Nov Sun>=1 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Port-au-Prince -4:49:20 - LMT 1890
-4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
diff --git a/jdk/make/sun/javazic/tzdata/southamerica b/jdk/make/sun/javazic/tzdata/southamerica
index 0f155002da4..dd746f3cbeb 100644
--- a/jdk/make/sun/javazic/tzdata/southamerica
+++ b/jdk/make/sun/javazic/tzdata/southamerica
@@ -840,6 +840,19 @@ Zone America/La_Paz -4:32:36 - LMT 1890
# oficial agency about time in Brazil, and she confirmed that the old rule is
# still in force.
+# From Guilherme Bernardes Rodrigues (2011-10-14)
+# It's official, the President signed a decree that includes Bahia in summer
+# time.
+# [ and in a second message (same day): ]
+# I found the decree.
+#
+# DECRETO No- 7.584, DE 13 DE OUTUBRO DE 2011
+# Link :
+#
+# http://www.in.gov.br/visualiza/index.jsp?data=13/10/2011&jornal=1000&pagina=6&totalArquivos=6
+#
+
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# Decree 20,466 (1931-10-01)
# Decree 21,896 (1932-01-10)
@@ -1076,10 +1089,8 @@ Zone America/Maceio -2:22:52 - LMT 1914
# of America/Salvador.
Zone America/Bahia -2:34:04 - LMT 1914
-3:00 Brazil BR%sT 2003 Sep 24
- -3:00 - BRT
-# as noted above, not yet in operation.
-# -3:00 - BRT 2011 Oct 16
-# -3:00 Brazil BR%sT
+ -3:00 - BRT 2011 Oct 16
+ -3:00 Brazil BR%sT
#
# Goias (GO), Distrito Federal (DF), Minas Gerais (MG),
# Espirito Santo (ES), Rio de Janeiro (RJ), Sao Paulo (SP), Parana (PR),
@@ -1229,6 +1240,28 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# August, not in October as they have since 1968. This is a pilot plan
# which will be reevaluated in 2012.
+# From Mauricio Parada (2012-02-22), translated by Glenn Eychaner (2012-02-23):
+# As stated in the website of the Chilean Energy Ministry
+# http://www.minenergia.cl/ministerio/noticias/generales/gobierno-anuncia-fechas-de-cambio-de.html
+# The Chilean Government has decided to postpone the entrance into winter time
+# (to leave DST) from March 11 2012 to April 28th 2012. The decision has not
+# been yet formalized but it will within the next days.
+# Quote from the website communication:
+#
+# 6. For the year 2012, the dates of entry into winter time will be as follows:
+# a. Saturday April 28, 2012, clocks should go back 60 minutes; that is, at
+# 23:59:59, instead of passing to 0:00, the time should be adjusted to be 23:00
+# of the same day.
+# b. Saturday, September 1, 2012, clocks should go forward 60 minutes; that is,
+# at 23:59:59, instead of passing to 0:00, the time should be adjusted to be
+# 01:00 on September 2.
+#
+# Note that...this is yet another "temporary" change that will be reevaluated
+# AGAIN in 2013.
+
+# NOTE: ChileAQ rules for Antarctic bases are stored separately in the
+# 'antarctica' file.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Chile 1927 1932 - Sep 1 0:00 1:00 S
Rule Chile 1928 1932 - Apr 1 0:00 0 -
@@ -1259,8 +1292,6 @@ Rule Chile 1998 only - Mar Sun>=9 3:00u 0 -
Rule Chile 1998 only - Sep 27 4:00u 1:00 S
Rule Chile 1999 only - Apr 4 3:00u 0 -
Rule Chile 1999 2010 - Oct Sun>=9 4:00u 1:00 S
-Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S
-Rule Chile 2012 max - Oct Sun>=9 4:00u 1:00 S
Rule Chile 2000 2007 - Mar Sun>=9 3:00u 0 -
# N.B.: the end of March 29 in Chile is March 30 in Universal time,
# which is used below in specifying the transition.
@@ -1268,7 +1299,11 @@ Rule Chile 2008 only - Mar 30 3:00u 0 -
Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
Rule Chile 2011 only - May Sun>=2 3:00u 0 -
-Rule Chile 2012 max - Mar Sun>=9 3:00u 0 -
+Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S
+Rule Chile 2012 only - Apr Sun>=23 3:00u 0 -
+Rule Chile 2012 only - Sep Sun>=2 4:00u 1:00 S
+Rule Chile 2013 max - Mar Sun>=9 3:00u 0 -
+Rule Chile 2013 max - Oct Sun>=9 4:00u 1:00 S
# IATA SSIM anomalies: (1992-02) says 1992-03-14;
# (1996-09) says 1998-03-08. Ignore these.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1414,6 +1449,21 @@ Zone Pacific/Galapagos -5:58:24 - LMT 1931 # Puerto Baquerizo Moreno
# will not revert to local mean time, but clocks will remain on Summer
# time (UTC/GMT - 3 hours) throughout the whole of 2011. Any long term
# change to local time following the trial period will be notified.
+#
+# From Andrew Newman (2012-02-24)
+# A letter from Justin McPhee, Chief Executive,
+# Cable & Wireless Falkland Islands (dated 2012-02-22)
+# states...
+# The current Atlantic/Stanley entry under South America expects the
+# clocks to go back to standard Falklands Time (FKT) on the 15th April.
+# The database entry states that in 2011 Stanley was staying on fixed
+# summer time on a trial basis only. FIG need to contact IANA and/or
+# the maintainers of the database to inform them we're adopting
+# the same policy this year and suggest recommendations for future years.
+#
+# For now we will assume permanent summer time for the Falklands
+# until advised differently (to apply for 2012 and beyond, after the 2011
+# experiment was apparently successful.)
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Falk 1937 1938 - Sep lastSun 0:00 1:00 S
Rule Falk 1938 1942 - Mar Sun>=19 0:00 0 -
@@ -1426,14 +1476,14 @@ Rule Falk 1984 only - Sep 16 0:00 1:00 S
Rule Falk 1985 2000 - Sep Sun>=9 0:00 1:00 S
Rule Falk 1986 2000 - Apr Sun>=16 0:00 0 -
Rule Falk 2001 2010 - Apr Sun>=15 2:00 0 -
-Rule Falk 2012 max - Apr Sun>=15 2:00 0 -
-Rule Falk 2001 max - Sep Sun>=1 2:00 1:00 S
+Rule Falk 2001 2010 - Sep Sun>=1 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Atlantic/Stanley -3:51:24 - LMT 1890
-3:51:24 - SMT 1912 Mar 12 # Stanley Mean Time
-4:00 Falk FK%sT 1983 May # Falkland Is Time
-3:00 Falk FK%sT 1985 Sep 15
- -4:00 Falk FK%sT
+ -4:00 Falk FK%sT 2010 Sep 5 02:00
+ -3:00 - FKST
# French Guiana
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
diff --git a/jdk/make/sun/javazic/tzdata/zone.tab b/jdk/make/sun/javazic/tzdata/zone.tab
index 89d3c8ea835..ef380cd19fb 100644
--- a/jdk/make/sun/javazic/tzdata/zone.tab
+++ b/jdk/make/sun/javazic/tzdata/zone.tab
@@ -153,6 +153,7 @@ CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia &
CA +690650-1050310 America/Cambridge_Bay Mountain Time - west Nunavut
CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories
CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories
+CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia
CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
CA +4916-12307 America/Vancouver Pacific Time - west British Columbia
CA +6043-13503 America/Whitehorse Pacific Time - south Yukon
@@ -355,7 +356,7 @@ RS +4450+02030 Europe/Belgrade
RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
RU +5545+03735 Europe/Moscow Moscow+00 - west Russia
RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
-RU +5312+05009 Europe/Samara Moscow - Samara, Udmurtia
+RU +5312+05009 Europe/Samara Moscow+00 - Samara, Udmurtia
RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
diff --git a/jdk/make/sun/tracing/dtrace/Makefile b/jdk/make/sun/tracing/dtrace/Makefile
index bf4d68bd26a..c0d3c97daba 100644
--- a/jdk/make/sun/tracing/dtrace/Makefile
+++ b/jdk/make/sun/tracing/dtrace/Makefile
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,9 @@
#
# Makefile for building dtrace extension
#
+
+LIBRARY_SUPPORTS_FULL_DEBUG_SYMBOLS=1
+
BUILDDIR = ../../..
PACKAGE = sun.tracing.dtrace
LIBRARY = jsdt
diff --git a/jdk/make/sun/xawt/Makefile b/jdk/make/sun/xawt/Makefile
index f8918ead3fa..6ed7370888f 100644
--- a/jdk/make/sun/xawt/Makefile
+++ b/jdk/make/sun/xawt/Makefile
@@ -56,7 +56,7 @@ LDFLAGS += -lpthread
dummy := $(shell $(MKDIR) -p $(LIB_LOCATION))
endif
-ifeq ($(PLATFORM), macosx))
+ifeq ($(PLATFORM), macosx)
LDFLAGS += -pthread
dummy := $(shell $(MKDIR) -p $(LIB_LOCATION))
endif
diff --git a/jdk/make/tools/GenerateCharacter/CharacterData00.java.template b/jdk/make/tools/GenerateCharacter/CharacterData00.java.template
index 8de328869af..c76719978bb 100644
--- a/jdk/make/tools/GenerateCharacter/CharacterData00.java.template
+++ b/jdk/make/tools/GenerateCharacter/CharacterData00.java.template
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -211,6 +211,8 @@ class CharacterData00 extends CharacterData {
case 0x10C3 : mapChar = 0x2D23; break;
case 0x10C4 : mapChar = 0x2D24; break;
case 0x10C5 : mapChar = 0x2D25; break;
+ case 0x10C7 : mapChar = 0x2D27; break;
+ case 0x10CD : mapChar = 0x2D2D; break;
case 0x1E9E : mapChar = 0x00DF; break;
case 0x2C62 : mapChar = 0x026B; break;
case 0x2C63 : mapChar = 0x1D7D; break;
@@ -223,6 +225,7 @@ class CharacterData00 extends CharacterData {
case 0x2C7F : mapChar = 0x0240; break;
case 0xA77D : mapChar = 0x1D79; break;
case 0xA78D : mapChar = 0x0265; break;
+ case 0xA7AA : mapChar = 0x0266; break;
// default mapChar is already set, so no
// need to redo it here.
// default : mapChar = ch;
@@ -282,6 +285,7 @@ class CharacterData00 extends CharacterData {
case 0x0251 : mapChar = 0x2C6D; break;
case 0x0252 : mapChar = 0x2C70; break;
case 0x0265 : mapChar = 0xA78D; break;
+ case 0x0266 : mapChar = 0xA7AA; break;
case 0x026B : mapChar = 0x2C62; break;
case 0x0271 : mapChar = 0x2C6E; break;
case 0x027D : mapChar = 0x2C64; break;
@@ -327,6 +331,8 @@ class CharacterData00 extends CharacterData {
case 0x2D23 : mapChar = 0x10C3; break;
case 0x2D24 : mapChar = 0x10C4; break;
case 0x2D25 : mapChar = 0x10C5; break;
+ case 0x2D27 : mapChar = 0x10C7; break;
+ case 0x2D2D : mapChar = 0x10CD; break;
// ch must have a 1:M case mapping, but we
// can't handle it here. Return ch.
// since mapChar is already set, no need
@@ -425,6 +431,11 @@ class CharacterData00 extends CharacterData {
case 0x2181: retval = 5000; break; // ROMAN NUMERAL FIVE THOUSAND
case 0x2182: retval = 10000; break; // ROMAN NUMERAL TEN THOUSAND
+ case 0x324B: retval = 40; break;
+ case 0x324C: retval = 50; break;
+ case 0x324D: retval = 60; break;
+ case 0x324E: retval = 70; break;
+ case 0x324F: retval = 80; break;
case 0x325C: retval = 32; break;
case 0x325D: retval = 33; break; // CIRCLED NUMBER THIRTY THREE
@@ -527,6 +538,7 @@ class CharacterData00 extends CharacterData {
case 0x0251 : mapChar = 0x2C6D; break;
case 0x0252 : mapChar = 0x2C70; break;
case 0x0265 : mapChar = 0xA78D; break;
+ case 0x0266 : mapChar = 0xA7AA; break;
case 0x026B : mapChar = 0x2C62; break;
case 0x0271 : mapChar = 0x2C6E; break;
case 0x027D : mapChar = 0x2C64; break;
@@ -572,6 +584,8 @@ class CharacterData00 extends CharacterData {
case 0x2D23 : mapChar = 0x10C3; break;
case 0x2D24 : mapChar = 0x10C4; break;
case 0x2D25 : mapChar = 0x10C5; break;
+ case 0x2D27 : mapChar = 0x10C7; break;
+ case 0x2D2D : mapChar = 0x10CD; break;
default : mapChar = Character.ERROR; break;
}
}
diff --git a/jdk/make/tools/UnicodeData/PropList.txt b/jdk/make/tools/UnicodeData/PropList.txt
index eeeb81845e3..f9dcb2ae74a 100644
--- a/jdk/make/tools/UnicodeData/PropList.txt
+++ b/jdk/make/tools/UnicodeData/PropList.txt
@@ -1,8 +1,8 @@
-# PropList-6.0.0.txt
-# Date: 2010-08-19, 00:48:28 GMT [MD]
+# PropList-6.1.0.txt
+# Date: 2011-11-30, 01:49:54 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2010 Unicode, Inc.
+# Copyright (c) 1991-2011 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see http://www.unicode.org/reports/tr44/
@@ -50,6 +50,7 @@
2212 ; Dash # Sm MINUS SIGN
2E17 ; Dash # Pd DOUBLE OBLIQUE HYPHEN
2E1A ; Dash # Pd HYPHEN WITH DIAERESIS
+2E3A..2E3B ; Dash # Pd [2] TWO-EM DASH..THREE-EM DASH
301C ; Dash # Pd WAVE DASH
3030 ; Dash # Pd WAVY DASH
30A0 ; Dash # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN
@@ -58,7 +59,7 @@ FE58 ; Dash # Pd SMALL EM DASH
FE63 ; Dash # Pd SMALL HYPHEN-MINUS
FF0D ; Dash # Pd FULLWIDTH HYPHEN-MINUS
-# Total code points: 25
+# Total code points: 27
# ================================================
@@ -158,6 +159,7 @@ A92F ; Terminal_Punctuation # Po KAYAH LI SIGN SHYA
A9C7..A9C9 ; Terminal_Punctuation # Po [3] JAVANESE PADA PANGKAT..JAVANESE PADA LUNGSI
AA5D..AA5F ; Terminal_Punctuation # Po [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA
AADF ; Terminal_Punctuation # Po TAI VIET SYMBOL KOI KOI
+AAF0..AAF1 ; Terminal_Punctuation # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
ABEB ; Terminal_Punctuation # Po MEETEI MAYEK CHEIKHEI
FE50..FE52 ; Terminal_Punctuation # Po [3] SMALL COMMA..SMALL FULL STOP
FE54..FE57 ; Terminal_Punctuation # Po [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
@@ -175,9 +177,11 @@ FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA
10B3A..10B3F ; Terminal_Punctuation # Po [6] TINY TWO DOTS OVER ONE DOT PUNCTUATION..LARGE ONE RING OVER TWO RINGS PUNCTUATION
11047..1104D ; Terminal_Punctuation # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
110BE..110C1 ; Terminal_Punctuation # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+11141..11143 ; Terminal_Punctuation # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
+111C5..111C6 ; Terminal_Punctuation # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA
12470..12473 ; Terminal_Punctuation # Po [4] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON
-# Total code points: 169
+# Total code points: 176
# ================================================
@@ -320,8 +324,41 @@ FF3E ; Other_Math # Sk FULLWIDTH CIRCUMFLEX ACCENT
1D7AA..1D7C2 ; Other_Math # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
1D7C4..1D7CB ; Other_Math # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
1D7CE..1D7FF ; Other_Math # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
+1EE00..1EE03 ; Other_Math # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; Other_Math # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; Other_Math # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; Other_Math # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; Other_Math # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; Other_Math # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; Other_Math # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; Other_Math # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; Other_Math # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; Other_Math # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; Other_Math # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; Other_Math # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; Other_Math # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; Other_Math # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; Other_Math # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; Other_Math # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; Other_Math # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; Other_Math # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; Other_Math # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; Other_Math # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; Other_Math # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; Other_Math # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; Other_Math # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; Other_Math # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; Other_Math # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
-# Total code points: 1217
+# Total code points: 1358
# ================================================
@@ -365,6 +402,8 @@ FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L
081B..0823 ; Other_Alphabetic # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
0825..0827 ; Other_Alphabetic # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
0829..082C ; Other_Alphabetic # Mn [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN
+08E4..08E9 ; Other_Alphabetic # Mn [6] ARABIC CURLY FATHA..ARABIC CURLY KASRATAN
+08F0..08FE ; Other_Alphabetic # Mn [15] ARABIC OPEN FATHATAN..ARABIC DAMMA WITH DOT
0900..0902 ; Other_Alphabetic # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
0903 ; Other_Alphabetic # Mc DEVANAGARI SIGN VISARGA
093A ; Other_Alphabetic # Mn DEVANAGARI VOWEL SIGN OE
@@ -525,6 +564,7 @@ FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L
1BA2..1BA5 ; Other_Alphabetic # Mn [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
1BA6..1BA7 ; Other_Alphabetic # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
1BA8..1BA9 ; Other_Alphabetic # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
+1BAC..1BAD ; Other_Alphabetic # Mc [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA
1BE7 ; Other_Alphabetic # Mc BATAK VOWEL SIGN E
1BE8..1BE9 ; Other_Alphabetic # Mn [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
1BEA..1BEC ; Other_Alphabetic # Mc [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
@@ -534,9 +574,11 @@ FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L
1C24..1C2B ; Other_Alphabetic # Mc [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
1C2C..1C33 ; Other_Alphabetic # Mn [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
1C34..1C35 ; Other_Alphabetic # Mc [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
-1CF2 ; Other_Alphabetic # Mc VEDIC SIGN ARDHAVISARGA
+1CF2..1CF3 ; Other_Alphabetic # Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA
24B6..24E9 ; Other_Alphabetic # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z
2DE0..2DFF ; Other_Alphabetic # Mn [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
+A674..A67B ; Other_Alphabetic # Mn [8] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC LETTER OMEGA
+A69F ; Other_Alphabetic # Mn COMBINING CYRILLIC LETTER IOTIFIED E
A823..A824 ; Other_Alphabetic # Mc [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
A825..A826 ; Other_Alphabetic # Mn [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
A827 ; Other_Alphabetic # Mc SYLOTI NAGRI VOWEL SIGN OO
@@ -564,6 +606,10 @@ AAB0 ; Other_Alphabetic # Mn TAI VIET MAI KANG
AAB2..AAB4 ; Other_Alphabetic # Mn [3] TAI VIET VOWEL I..TAI VIET VOWEL U
AAB7..AAB8 ; Other_Alphabetic # Mn [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
AABE ; Other_Alphabetic # Mn TAI VIET VOWEL AM
+AAEB ; Other_Alphabetic # Mc MEETEI MAYEK VOWEL SIGN II
+AAEC..AAED ; Other_Alphabetic # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAEE..AAEF ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF5 ; Other_Alphabetic # Mc MEETEI MAYEK VOWEL SIGN VISARGA
ABE3..ABE4 ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
ABE5 ; Other_Alphabetic # Mn MEETEI MAYEK VOWEL SIGN ANAP
ABE6..ABE7 ; Other_Alphabetic # Mc [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
@@ -581,8 +627,23 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
110B0..110B2 ; Other_Alphabetic # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
110B3..110B6 ; Other_Alphabetic # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
110B7..110B8 ; Other_Alphabetic # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
+11100..11102 ; Other_Alphabetic # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11127..1112B ; Other_Alphabetic # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112C ; Other_Alphabetic # Mc CHAKMA VOWEL SIGN E
+1112D..11132 ; Other_Alphabetic # Mn [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK
+11180..11181 ; Other_Alphabetic # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+11182 ; Other_Alphabetic # Mc SHARADA SIGN VISARGA
+111B3..111B5 ; Other_Alphabetic # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111B6..111BE ; Other_Alphabetic # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111BF ; Other_Alphabetic # Mc SHARADA VOWEL SIGN AU
+116AB ; Other_Alphabetic # Mn TAKRI SIGN ANUSVARA
+116AC ; Other_Alphabetic # Mc TAKRI SIGN VISARGA
+116AD ; Other_Alphabetic # Mn TAKRI VOWEL SIGN AA
+116AE..116AF ; Other_Alphabetic # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B0..116B5 ; Other_Alphabetic # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+16F51..16F7E ; Other_Alphabetic # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
-# Total code points: 795
+# Total code points: 922
# ================================================
@@ -591,16 +652,15 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
3400..4DB5 ; Ideographic # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FCB ; Ideographic # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
-F900..FA2D ; Ideographic # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
-FA30..FA6D ; Ideographic # Lo [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+4E00..9FCC ; Ideographic # Lo [20941] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCC
+F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Ideographic # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Ideographic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 75630
+# Total code points: 75633
# ================================================
@@ -645,6 +705,7 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM
07EB..07F3 ; Diacritic # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
07F4..07F5 ; Diacritic # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
0818..0819 ; Diacritic # Mn [2] SAMARITAN MARK OCCLUSION..SAMARITAN MARK DAGESH
+08E4..08FE ; Diacritic # Mn [27] ARABIC CURLY FATHA..ARABIC DAMMA WITH DOT
093C ; Diacritic # Mn DEVANAGARI SIGN NUKTA
094D ; Diacritic # Mn DEVANAGARI SIGN VIRAMA
0951..0954 ; Diacritic # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT
@@ -689,6 +750,7 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM
1B44 ; Diacritic # Mc BALINESE ADEG ADEG
1B6B..1B73 ; Diacritic # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
1BAA ; Diacritic # Mc SUNDANESE SIGN PAMAAEH
+1BAB ; Diacritic # Mn SUNDANESE SIGN VIRAMA
1C36..1C37 ; Diacritic # Mn [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
1C78..1C7D ; Diacritic # Lm [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
1CD0..1CD2 ; Diacritic # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
@@ -697,8 +759,8 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM
1CE1 ; Diacritic # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
1CE2..1CE8 ; Diacritic # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
1CED ; Diacritic # Mn VEDIC SIGN TIRYAK
-1D2C..1D61 ; Diacritic # Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
-1D62..1D6A ; Diacritic # L& [9] LATIN SUBSCRIPT SMALL LETTER I..GREEK SUBSCRIPT SMALL LETTER CHI
+1CF4 ; Diacritic # Mn VEDIC TONE CANDRA ABOVE
+1D2C..1D6A ; Diacritic # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
1DC4..1DCF ; Diacritic # Mn [12] COMBINING MACRON-ACUTE..COMBINING ZIGZAG BELOW
1DFD..1DFF ; Diacritic # Mn [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
1FBD ; Diacritic # Sk GREEK KORONIS
@@ -709,7 +771,8 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM
1FFD..1FFE ; Diacritic # Sk [2] GREEK OXIA..GREEK DASIA
2CEF..2CF1 ; Diacritic # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
2E2F ; Diacritic # Lm VERTICAL TILDE
-302A..302F ; Diacritic # Mn [6] IDEOGRAPHIC LEVEL TONE MARK..HANGUL DOUBLE DOT TONE MARK
+302A..302D ; Diacritic # Mn [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
+302E..302F ; Diacritic # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
3099..309A ; Diacritic # Mn [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
309B..309C ; Diacritic # Sk [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
30FC ; Diacritic # Lm KATAKANA-HIRAGANA PROLONGED SOUND MARK
@@ -720,6 +783,7 @@ A6F0..A6F1 ; Diacritic # Mn [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINI
A717..A71F ; Diacritic # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
A720..A721 ; Diacritic # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
A788 ; Diacritic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT
+A7F8..A7F9 ; Diacritic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A8C4 ; Diacritic # Mn SAURASHTRA SIGN VIRAMA
A8E0..A8F1 ; Diacritic # Mn [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
A92B..A92D ; Diacritic # Mn [3] KAYAH LI TONE PLOPHU..KAYAH LI TONE CALYA PLOPHU
@@ -732,6 +796,7 @@ AABF ; Diacritic # Mn TAI VIET TONE MAI EK
AAC0 ; Diacritic # Lo TAI VIET TONE MAI NUENG
AAC1 ; Diacritic # Mn TAI VIET TONE MAI THO
AAC2 ; Diacritic # Lo TAI VIET TONE MAI SONG
+AAF6 ; Diacritic # Mn MEETEI MAYEK VIRAMA
ABEC ; Diacritic # Mc MEETEI MAYEK LUM IYEK
ABED ; Diacritic # Mn MEETEI MAYEK APUN IYEK
FB1E ; Diacritic # Mn HEBREW POINT JUDEO-SPANISH VARIKA
@@ -742,13 +807,19 @@ FF70 ; Diacritic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND
FF9E..FF9F ; Diacritic # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
FFE3 ; Diacritic # Sk FULLWIDTH MACRON
110B9..110BA ; Diacritic # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
+11133..11134 ; Diacritic # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA
+111C0 ; Diacritic # Mc SHARADA SIGN VIRAMA
+116B6 ; Diacritic # Mc TAKRI SIGN VIRAMA
+116B7 ; Diacritic # Mn TAKRI SIGN NUKTA
+16F8F..16F92 ; Diacritic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16F93..16F9F ; Diacritic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
1D167..1D169 ; Diacritic # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
1D16D..1D172 ; Diacritic # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
1D17B..1D182 ; Diacritic # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
1D185..1D18B ; Diacritic # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
1D1AA..1D1AD ; Diacritic # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
-# Total code points: 639
+# Total code points: 693
# ================================================
@@ -758,6 +829,7 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON
07FA ; Extender # Lm NKO LAJANYALAN
0E46 ; Extender # Lm THAI CHARACTER MAIYAMOK
0EC6 ; Extender # Lm LAO KO LA
+180A ; Extender # Po MONGOLIAN NIRUGU
1843 ; Extender # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN
1AA7 ; Extender # Lm TAI THAM SIGN MAI YAMOK
1C36 ; Extender # Mn LEPCHA SIGN RAN
@@ -771,27 +843,33 @@ A60C ; Extender # Lm VAI SYLLABLE LENGTHENER
A9CF ; Extender # Lm JAVANESE PANGRANGKEP
AA70 ; Extender # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
AADD ; Extender # Lm TAI VIET SYMBOL SAM
+AAF3..AAF4 ; Extender # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
-# Total code points: 28
+# Total code points: 31
# ================================================
+00AA ; Other_Lowercase # Lo FEMININE ORDINAL INDICATOR
+00BA ; Other_Lowercase # Lo MASCULINE ORDINAL INDICATOR
02B0..02B8 ; Other_Lowercase # Lm [9] MODIFIER LETTER SMALL H..MODIFIER LETTER SMALL Y
02C0..02C1 ; Other_Lowercase # Lm [2] MODIFIER LETTER GLOTTAL STOP..MODIFIER LETTER REVERSED GLOTTAL STOP
02E0..02E4 ; Other_Lowercase # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
0345 ; Other_Lowercase # Mn COMBINING GREEK YPOGEGRAMMENI
037A ; Other_Lowercase # Lm GREEK YPOGEGRAMMENI
-1D2C..1D61 ; Other_Lowercase # Lm [54] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL CHI
+1D2C..1D6A ; Other_Lowercase # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
1D78 ; Other_Lowercase # Lm MODIFIER LETTER CYRILLIC EN
1D9B..1DBF ; Other_Lowercase # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
-2090..2094 ; Other_Lowercase # Lm [5] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER SCHWA
+2071 ; Other_Lowercase # Lm SUPERSCRIPT LATIN SMALL LETTER I
+207F ; Other_Lowercase # Lm SUPERSCRIPT LATIN SMALL LETTER N
+2090..209C ; Other_Lowercase # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
2170..217F ; Other_Lowercase # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND
24D0..24E9 ; Other_Lowercase # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
-2C7D ; Other_Lowercase # Lm MODIFIER LETTER CAPITAL V
+2C7C..2C7D ; Other_Lowercase # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
A770 ; Other_Lowercase # Lm MODIFIER LETTER US
+A7F8..A7F9 ; Other_Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
-# Total code points: 159
+# Total code points: 183
# ================================================
@@ -838,11 +916,12 @@ FFFFE..FFFFF ; Noncharacter_Code_Point # Cn [2] ....
3164 ; Other_Default_Ignorable_Code_Point # Lo HANGUL FILLER
FFA0 ; Other_Default_Ignorable_Code_Point # Lo HALFWIDTH HANGUL FILLER
@@ -895,7 +975,7 @@ E0002..E001F ; Other_Default_Ignorable_Code_Point # Cn [30] ..
E0080..E00FF ; Other_Default_Ignorable_Code_Point # Cn [128] ..
E01F0..E0FFF ; Other_Default_Ignorable_Code_Point # Cn [3600] ..
-# Total code points: 3778
+# Total code points: 3780
# ================================================
@@ -923,7 +1003,7 @@ E0020..E007F ; Deprecated # Cf [96] TAG SPACE..CANCEL TAG
03F3 ; Soft_Dotted # L& GREEK LETTER YOT
0456 ; Soft_Dotted # L& CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
0458 ; Soft_Dotted # L& CYRILLIC SMALL LETTER JE
-1D62 ; Soft_Dotted # L& LATIN SUBSCRIPT SMALL LETTER I
+1D62 ; Soft_Dotted # Lm LATIN SUBSCRIPT SMALL LETTER I
1D96 ; Soft_Dotted # L& LATIN SMALL LETTER I WITH RETROFLEX HOOK
1DA4 ; Soft_Dotted # Lm MODIFIER LETTER SMALL I WITH STROKE
1DA8 ; Soft_Dotted # Lm MODIFIER LETTER SMALL J WITH CROSSED-TAIL
@@ -931,7 +1011,7 @@ E0020..E007F ; Deprecated # Cf [96] TAG SPACE..CANCEL TAG
1ECB ; Soft_Dotted # L& LATIN SMALL LETTER I WITH DOT BELOW
2071 ; Soft_Dotted # Lm SUPERSCRIPT LATIN SMALL LETTER I
2148..2149 ; Soft_Dotted # L& [2] DOUBLE-STRUCK ITALIC SMALL I..DOUBLE-STRUCK ITALIC SMALL J
-2C7C ; Soft_Dotted # L& LATIN SUBSCRIPT SMALL LETTER J
+2C7C ; Soft_Dotted # Lm LATIN SUBSCRIPT SMALL LETTER J
1D422..1D423 ; Soft_Dotted # L& [2] MATHEMATICAL BOLD SMALL I..MATHEMATICAL BOLD SMALL J
1D456..1D457 ; Soft_Dotted # L& [2] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL ITALIC SMALL J
1D48A..1D48B ; Soft_Dotted # L& [2] MATHEMATICAL BOLD ITALIC SMALL I..MATHEMATICAL BOLD ITALIC SMALL J
@@ -1014,6 +1094,7 @@ A8CE..A8CF ; STerm # Po [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
A92F ; STerm # Po KAYAH LI SIGN SHYA
A9C8..A9C9 ; STerm # Po [2] JAVANESE PADA LINGSA..JAVANESE PADA LUNGSI
AA5D..AA5F ; STerm # Po [3] CHAM PUNCTUATION DANDA..CHAM PUNCTUATION TRIPLE DANDA
+AAF0..AAF1 ; STerm # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
ABEB ; STerm # Po MEETEI MAYEK CHEIKHEI
FE52 ; STerm # Po SMALL FULL STOP
FE56..FE57 ; STerm # Po [2] SMALL QUESTION MARK..SMALL EXCLAMATION MARK
@@ -1024,8 +1105,10 @@ FF61 ; STerm # Po HALFWIDTH IDEOGRAPHIC FULL STOP
10A56..10A57 ; STerm # Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA
11047..11048 ; STerm # Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA
110BE..110C1 ; STerm # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
+11141..11143 ; STerm # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK
+111C5..111C6 ; STerm # Po [2] SHARADA DANDA..SHARADA DOUBLE DANDA
-# Total code points: 76
+# Total code points: 83
# ================================================
@@ -1072,14 +1155,15 @@ E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION S
007E ; Pattern_Syntax # Sm TILDE
00A1 ; Pattern_Syntax # Po INVERTED EXCLAMATION MARK
00A2..00A5 ; Pattern_Syntax # Sc [4] CENT SIGN..YEN SIGN
-00A6..00A7 ; Pattern_Syntax # So [2] BROKEN BAR..SECTION SIGN
+00A6 ; Pattern_Syntax # So BROKEN BAR
+00A7 ; Pattern_Syntax # Po SECTION SIGN
00A9 ; Pattern_Syntax # So COPYRIGHT SIGN
00AB ; Pattern_Syntax # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
00AC ; Pattern_Syntax # Sm NOT SIGN
00AE ; Pattern_Syntax # So REGISTERED SIGN
00B0 ; Pattern_Syntax # So DEGREE SIGN
00B1 ; Pattern_Syntax # Sm PLUS-MINUS SIGN
-00B6 ; Pattern_Syntax # So PILCROW SIGN
+00B6 ; Pattern_Syntax # Po PILCROW SIGN
00BB ; Pattern_Syntax # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
00BF ; Pattern_Syntax # Po INVERTED QUESTION MARK
00D7 ; Pattern_Syntax # Sm MULTIPLICATION SIGN
@@ -1173,11 +1257,7 @@ E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION S
27C0..27C4 ; Pattern_Syntax # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
27C5 ; Pattern_Syntax # Ps LEFT S-SHAPED BAG DELIMITER
27C6 ; Pattern_Syntax # Pe RIGHT S-SHAPED BAG DELIMITER
-27C7..27CA ; Pattern_Syntax # Sm [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
-27CB ; Pattern_Syntax # Cn
-27CC ; Pattern_Syntax # Sm LONG DIVISION
-27CD ; Pattern_Syntax # Cn
-27CE..27E5 ; Pattern_Syntax # Sm [24] SQUARED LOGICAL AND..WHITE SQUARE WITH RIGHTWARDS TICK
+27C7..27E5 ; Pattern_Syntax # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
27E6 ; Pattern_Syntax # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
27E7 ; Pattern_Syntax # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
27E8 ; Pattern_Syntax # Ps MATHEMATICAL LEFT ANGLE BRACKET
@@ -1260,8 +1340,9 @@ E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION S
2E29 ; Pattern_Syntax # Pe RIGHT DOUBLE PARENTHESIS
2E2A..2E2E ; Pattern_Syntax # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
2E2F ; Pattern_Syntax # Lm VERTICAL TILDE
-2E30..2E31 ; Pattern_Syntax # Po [2] RING POINT..WORD SEPARATOR MIDDLE DOT
-2E32..2E7F ; Pattern_Syntax # Cn [78] ..
+2E30..2E39 ; Pattern_Syntax # Po [10] RING POINT..TOP HALF SECTION SIGN
+2E3A..2E3B ; Pattern_Syntax # Pd [2] TWO-EM DASH..THREE-EM DASH
+2E3C..2E7F ; Pattern_Syntax # Cn [68] ..
3001..3003 ; Pattern_Syntax # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
3008 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET
3009 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET
diff --git a/jdk/make/tools/UnicodeData/Scripts.txt b/jdk/make/tools/UnicodeData/Scripts.txt
index 70a670703ae..2516f889d66 100644
--- a/jdk/make/tools/UnicodeData/Scripts.txt
+++ b/jdk/make/tools/UnicodeData/Scripts.txt
@@ -1,8 +1,8 @@
-# Scripts-6.0.0.txt
-# Date: 2010-08-19, 00:48:47 GMT [MD]
+# Scripts-6.1.0.txt
+# Date: 2011-11-27, 05:10:50 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2010 Unicode, Inc.
+# Copyright (c) 1991-2011 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see http://www.unicode.org/reports/tr44/
@@ -47,7 +47,8 @@
00A0 ; Common # Zs NO-BREAK SPACE
00A1 ; Common # Po INVERTED EXCLAMATION MARK
00A2..00A5 ; Common # Sc [4] CENT SIGN..YEN SIGN
-00A6..00A7 ; Common # So [2] BROKEN BAR..SECTION SIGN
+00A6 ; Common # So BROKEN BAR
+00A7 ; Common # Po SECTION SIGN
00A8 ; Common # Sk DIAERESIS
00A9 ; Common # So COPYRIGHT SIGN
00AB ; Common # Pi LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -60,8 +61,7 @@
00B2..00B3 ; Common # No [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
00B4 ; Common # Sk ACUTE ACCENT
00B5 ; Common # L& MICRO SIGN
-00B6 ; Common # So PILCROW SIGN
-00B7 ; Common # Po MIDDLE DOT
+00B6..00B7 ; Common # Po [2] PILCROW SIGN..MIDDLE DOT
00B8 ; Common # Sk CEDILLA
00B9 ; Common # No SUPERSCRIPT ONE
00BB ; Common # Pf RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
@@ -90,7 +90,6 @@
0660..0669 ; Common # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
06DD ; Common # Cf ARABIC END OF AYAH
0964..0965 ; Common # Po [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
-0970 ; Common # Po DEVANAGARI ABBREVIATION SIGN
0E3F ; Common # Sc THAI CURRENCY SYMBOL BAHT
0FD5..0FD8 ; Common # So [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
10FB ; Common # Po GEORGIAN PARAGRAPH SEPARATOR
@@ -102,7 +101,8 @@
1CE1 ; Common # Mc VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
1CE9..1CEC ; Common # Lo [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
1CEE..1CF1 ; Common # Lo [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
-1CF2 ; Common # Mc VEDIC SIGN ARDHAVISARGA
+1CF2..1CF3 ; Common # Mc [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA
+1CF5..1CF6 ; Common # Lo [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
2000..200A ; Common # Zs [11] EN QUAD..HAIR SPACE
200B ; Common # Cf ZERO WIDTH SPACE
200E..200F ; Common # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK
@@ -247,9 +247,7 @@
27C0..27C4 ; Common # Sm [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
27C5 ; Common # Ps LEFT S-SHAPED BAG DELIMITER
27C6 ; Common # Pe RIGHT S-SHAPED BAG DELIMITER
-27C7..27CA ; Common # Sm [4] OR WITH DOT INSIDE..VERTICAL BAR WITH HORIZONTAL STROKE
-27CC ; Common # Sm LONG DIVISION
-27CE..27E5 ; Common # Sm [24] SQUARED LOGICAL AND..WHITE SQUARE WITH RIGHTWARDS TICK
+27C7..27E5 ; Common # Sm [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
27E6 ; Common # Ps MATHEMATICAL LEFT WHITE SQUARE BRACKET
27E7 ; Common # Pe MATHEMATICAL RIGHT WHITE SQUARE BRACKET
27E8 ; Common # Ps MATHEMATICAL LEFT ANGLE BRACKET
@@ -329,7 +327,8 @@
2E29 ; Common # Pe RIGHT DOUBLE PARENTHESIS
2E2A..2E2E ; Common # Po [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
2E2F ; Common # Lm VERTICAL TILDE
-2E30..2E31 ; Common # Po [2] RING POINT..WORD SEPARATOR MIDDLE DOT
+2E30..2E39 ; Common # Po [10] RING POINT..TOP HALF SECTION SIGN
+2E3A..2E3B ; Common # Pd [2] TWO-EM DASH..THREE-EM DASH
2FF0..2FFB ; Common # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
3000 ; Common # Zs IDEOGRAPHIC SPACE
3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK
@@ -373,7 +372,9 @@
3196..319F ; Common # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
31C0..31E3 ; Common # So [36] CJK STROKE T..CJK STROKE Q
3220..3229 ; Common # No [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
-322A..3250 ; Common # So [39] PARENTHESIZED IDEOGRAPH MOON..PARTNERSHIP SIGN
+322A..3247 ; Common # So [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
+3248..324F ; Common # No [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
+3250 ; Common # So PARTNERSHIP SIGN
3251..325F ; Common # No [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
327F ; Common # So KOREAN STANDARD SYMBOL
3280..3289 ; Common # No [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
@@ -481,8 +482,7 @@ FFE9..FFEC ; Common # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS
FFED..FFEE ; Common # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
FFF9..FFFB ; Common # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER
-10100..10101 ; Common # Po [2] AEGEAN WORD SEPARATOR LINE..AEGEAN WORD SEPARATOR DOT
-10102 ; Common # So AEGEAN CHECK MARK
+10100..10102 ; Common # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
10107..10133 ; Common # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
10137..1013F ; Common # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
10190..1019B ; Common # So [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
@@ -548,7 +548,7 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
1F0D1..1F0DF ; Common # So [15] PLAYING CARD ACE OF CLUBS..PLAYING CARD WHITE JOKER
1F100..1F10A ; Common # No [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
1F110..1F12E ; Common # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ
-1F130..1F169 ; Common # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
+1F130..1F16B ; Common # So [60] SQUARED LATIN CAPITAL LETTER A..RAISED MD SIGN
1F170..1F19A ; Common # So [43] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VS
1F1E6..1F1FF ; Common # So [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
1F201..1F202 ; Common # So [2] SQUARED KATAKANA KOKO..SQUARED KATAKANA SA
@@ -567,33 +567,23 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR
1F442..1F4F7 ; Common # So [182] EAR..CAMERA
1F4F9..1F4FC ; Common # So [4] VIDEO CAMERA..VIDEOCASSETTE
1F500..1F53D ; Common # So [62] TWISTED RIGHTWARDS ARROWS..DOWN-POINTING SMALL RED TRIANGLE
+1F540..1F543 ; Common # So [4] CIRCLED CROSS POMMEE..NOTCHED LEFT SEMICIRCLE WITH THREE DOTS
1F550..1F567 ; Common # So [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY
-1F5FB..1F5FF ; Common # So [5] MOUNT FUJI..MOYAI
-1F601..1F610 ; Common # So [16] GRINNING FACE WITH SMILING EYES..NEUTRAL FACE
-1F612..1F614 ; Common # So [3] UNAMUSED FACE..PENSIVE FACE
-1F616 ; Common # So CONFOUNDED FACE
-1F618 ; Common # So FACE THROWING A KISS
-1F61A ; Common # So KISSING FACE WITH CLOSED EYES
-1F61C..1F61E ; Common # So [3] FACE WITH STUCK-OUT TONGUE AND WINKING EYE..DISAPPOINTED FACE
-1F620..1F625 ; Common # So [6] ANGRY FACE..DISAPPOINTED BUT RELIEVED FACE
-1F628..1F62B ; Common # So [4] FEARFUL FACE..TIRED FACE
-1F62D ; Common # So LOUDLY CRYING FACE
-1F630..1F633 ; Common # So [4] FACE WITH OPEN MOUTH AND COLD SWEAT..FLUSHED FACE
-1F635..1F640 ; Common # So [12] DIZZY FACE..WEARY CAT FACE
+1F5FB..1F640 ; Common # So [70] MOUNT FUJI..WEARY CAT FACE
1F645..1F64F ; Common # So [11] FACE WITH NO GOOD GESTURE..PERSON WITH FOLDED HANDS
1F680..1F6C5 ; Common # So [70] ROCKET..LEFT LUGGAGE
1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
E0001 ; Common # Cf LANGUAGE TAG
E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
-# Total code points: 6379
+# Total code points: 6412
# ================================================
0041..005A ; Latin # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
0061..007A ; Latin # L& [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
-00AA ; Latin # L& FEMININE ORDINAL INDICATOR
-00BA ; Latin # L& MASCULINE ORDINAL INDICATOR
+00AA ; Latin # Lo FEMININE ORDINAL INDICATOR
+00BA ; Latin # Lo MASCULINE ORDINAL INDICATOR
00C0..00D6 ; Latin # L& [23] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER O WITH DIAERESIS
00D8..00F6 ; Latin # L& [31] LATIN CAPITAL LETTER O WITH STROKE..LATIN SMALL LETTER O WITH DIAERESIS
00F8..01BA ; Latin # L& [195] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
@@ -607,7 +597,7 @@ E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
02E0..02E4 ; Latin # Lm [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
1D00..1D25 ; Latin # L& [38] LATIN LETTER SMALL CAPITAL A..LATIN LETTER AIN
1D2C..1D5C ; Latin # Lm [49] MODIFIER LETTER CAPITAL A..MODIFIER LETTER SMALL AIN
-1D62..1D65 ; Latin # L& [4] LATIN SUBSCRIPT SMALL LETTER I..LATIN SUBSCRIPT SMALL LETTER V
+1D62..1D65 ; Latin # Lm [4] LATIN SUBSCRIPT SMALL LETTER I..LATIN SUBSCRIPT SMALL LETTER V
1D6B..1D77 ; Latin # L& [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
1D79..1D9A ; Latin # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
1D9B..1DBE ; Latin # Lm [36] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL EZH
@@ -621,22 +611,23 @@ E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG
2160..2182 ; Latin # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND
2183..2184 ; Latin # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
2185..2188 ; Latin # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
-2C60..2C7C ; Latin # L& [29] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN SUBSCRIPT SMALL LETTER J
-2C7D ; Latin # Lm MODIFIER LETTER CAPITAL V
+2C60..2C7B ; Latin # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
+2C7C..2C7D ; Latin # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
2C7E..2C7F ; Latin # L& [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
A722..A76F ; Latin # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
A770 ; Latin # Lm MODIFIER LETTER US
A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
-A790..A791 ; Latin # L& [2] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER N WITH DESCENDER
-A7A0..A7A9 ; Latin # L& [10] LATIN CAPITAL LETTER G WITH OBLIQUE STROKE..LATIN SMALL LETTER S WITH OBLIQUE STROKE
+A790..A793 ; Latin # L& [4] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER C WITH BAR
+A7A0..A7AA ; Latin # L& [11] LATIN CAPITAL LETTER G WITH OBLIQUE STROKE..LATIN CAPITAL LETTER H WITH HOOK
+A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
A7FA ; Latin # L& LATIN LETTER SMALL CAPITAL TURNED M
A7FB..A7FF ; Latin # Lo [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
-# Total code points: 1267
+# Total code points: 1272
# ================================================
@@ -656,7 +647,7 @@ FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN
03F7..03FF ; Greek # L& [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
1D26..1D2A ; Greek # L& [5] GREEK LETTER SMALL CAPITAL GAMMA..GREEK LETTER SMALL CAPITAL PSI
1D5D..1D61 ; Greek # Lm [5] MODIFIER LETTER SMALL BETA..MODIFIER LETTER SMALL CHI
-1D66..1D6A ; Greek # L& [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI
+1D66..1D6A ; Greek # Lm [5] GREEK SUBSCRIPT SMALL LETTER BETA..GREEK SUBSCRIPT SMALL LETTER CHI
1DBF ; Greek # Lm MODIFIER LETTER SMALL THETA
1F00..1F15 ; Greek # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
1F18..1F1D ; Greek # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
@@ -710,12 +701,13 @@ A66E ; Cyrillic # Lo CYRILLIC LETTER MULTIOCULAR O
A66F ; Cyrillic # Mn COMBINING CYRILLIC VZMET
A670..A672 ; Cyrillic # Me [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
A673 ; Cyrillic # Po SLAVONIC ASTERISK
-A67C..A67D ; Cyrillic # Mn [2] COMBINING CYRILLIC KAVYKA..COMBINING CYRILLIC PAYEROK
+A674..A67D ; Cyrillic # Mn [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
A67E ; Cyrillic # Po CYRILLIC KAVYKA
A67F ; Cyrillic # Lm CYRILLIC PAYEROK
A680..A697 ; Cyrillic # L& [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER SHWE
+A69F ; Cyrillic # Mn COMBINING CYRILLIC LETTER IOTIFIED E
-# Total code points: 408
+# Total code points: 417
# ================================================
@@ -724,9 +716,10 @@ A680..A697 ; Cyrillic # L& [24] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL
055A..055F ; Armenian # Po [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
0561..0587 ; Armenian # L& [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
058A ; Armenian # Pd ARMENIAN HYPHEN
+058F ; Armenian # Sc ARMENIAN DRAM SIGN
FB13..FB17 ; Armenian # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
-# Total code points: 90
+# Total code points: 91
# ================================================
@@ -757,7 +750,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
# ================================================
-0600..0603 ; Arabic # Cf [4] ARABIC NUMBER SIGN..ARABIC SIGN SAFHA
+0600..0604 ; Arabic # Cf [5] ARABIC NUMBER SIGN..ARABIC SIGN SAMVAT
0606..0608 ; Arabic # Sm [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
0609..060A ; Arabic # Po [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
060B ; Arabic # Sc AFGHANI SIGN
@@ -786,6 +779,9 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU
06FD..06FE ; Arabic # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V
0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
+08A0 ; Arabic # Lo ARABIC LETTER BEH WITH SMALL V BELOW
+08A2..08AC ; Arabic # Lo [11] ARABIC LETTER JEEM WITH TWO DOTS ABOVE..ARABIC LETTER ROHINGYA YEH
+08E4..08FE ; Arabic # Mn [27] ARABIC CURLY FATHA..ARABIC DAMMA WITH DOT
FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
@@ -796,8 +792,42 @@ FDFC ; Arabic # Sc RIAL SIGN
FE70..FE74 ; Arabic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
10E60..10E7E ; Arabic # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
+1EE00..1EE03 ; Arabic # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
+1EE05..1EE1F ; Arabic # Lo [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
+1EE21..1EE22 ; Arabic # Lo [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
+1EE24 ; Arabic # Lo ARABIC MATHEMATICAL INITIAL HEH
+1EE27 ; Arabic # Lo ARABIC MATHEMATICAL INITIAL HAH
+1EE29..1EE32 ; Arabic # Lo [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
+1EE34..1EE37 ; Arabic # Lo [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
+1EE39 ; Arabic # Lo ARABIC MATHEMATICAL INITIAL DAD
+1EE3B ; Arabic # Lo ARABIC MATHEMATICAL INITIAL GHAIN
+1EE42 ; Arabic # Lo ARABIC MATHEMATICAL TAILED JEEM
+1EE47 ; Arabic # Lo ARABIC MATHEMATICAL TAILED HAH
+1EE49 ; Arabic # Lo ARABIC MATHEMATICAL TAILED YEH
+1EE4B ; Arabic # Lo ARABIC MATHEMATICAL TAILED LAM
+1EE4D..1EE4F ; Arabic # Lo [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
+1EE51..1EE52 ; Arabic # Lo [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
+1EE54 ; Arabic # Lo ARABIC MATHEMATICAL TAILED SHEEN
+1EE57 ; Arabic # Lo ARABIC MATHEMATICAL TAILED KHAH
+1EE59 ; Arabic # Lo ARABIC MATHEMATICAL TAILED DAD
+1EE5B ; Arabic # Lo ARABIC MATHEMATICAL TAILED GHAIN
+1EE5D ; Arabic # Lo ARABIC MATHEMATICAL TAILED DOTLESS NOON
+1EE5F ; Arabic # Lo ARABIC MATHEMATICAL TAILED DOTLESS QAF
+1EE61..1EE62 ; Arabic # Lo [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
+1EE64 ; Arabic # Lo ARABIC MATHEMATICAL STRETCHED HEH
+1EE67..1EE6A ; Arabic # Lo [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
+1EE6C..1EE72 ; Arabic # Lo [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
+1EE74..1EE77 ; Arabic # Lo [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
+1EE79..1EE7C ; Arabic # Lo [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
+1EE7E ; Arabic # Lo ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
+1EE80..1EE89 ; Arabic # Lo [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
+1EE8B..1EE9B ; Arabic # Lo [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
+1EEA1..1EEA3 ; Arabic # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
+1EEA5..1EEA9 ; Arabic # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
+1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
+1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
-# Total code points: 1051
+# Total code points: 1234
# ================================================
@@ -838,6 +868,7 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA
0958..0961 ; Devanagari # Lo [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
0962..0963 ; Devanagari # Mn [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
0966..096F ; Devanagari # Nd [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
+0970 ; Devanagari # Po DEVANAGARI ABBREVIATION SIGN
0971 ; Devanagari # Lm DEVANAGARI SIGN HIGH SPACING DOT
0972..0977 ; Devanagari # Lo [6] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER UUE
0979..097F ; Devanagari # Lo [7] DEVANAGARI LETTER ZHA..DEVANAGARI LETTER BBA
@@ -846,7 +877,7 @@ A8F2..A8F7 ; Devanagari # Lo [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVAN
A8F8..A8FA ; Devanagari # Po [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
-# Total code points: 150
+# Total code points: 151
# ================================================
@@ -927,9 +958,10 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
0AE0..0AE1 ; Gujarati # Lo [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
0AE2..0AE3 ; Gujarati # Mn [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
0AE6..0AEF ; Gujarati # Nd [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
+0AF0 ; Gujarati # Po GUJARATI ABBREVIATION SIGN
0AF1 ; Gujarati # Sc GUJARATI RUPEE SIGN
-# Total code points: 83
+# Total code points: 84
# ================================================
@@ -1119,16 +1151,18 @@ A8FB ; Devanagari # Lo DEVANAGARI HEADSTROKE
0EC6 ; Lao # Lm LAO KO LA
0EC8..0ECD ; Lao # Mn [6] LAO TONE MAI EK..LAO NIGGAHITA
0ED0..0ED9 ; Lao # Nd [10] LAO DIGIT ZERO..LAO DIGIT NINE
-0EDC..0EDD ; Lao # Lo [2] LAO HO NO..LAO HO MO
+0EDC..0EDF ; Lao # Lo [4] LAO HO NO..LAO LETTER KHMU NYO
-# Total code points: 65
+# Total code points: 67
# ================================================
0F00 ; Tibetan # Lo TIBETAN SYLLABLE OM
0F01..0F03 ; Tibetan # So [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
0F04..0F12 ; Tibetan # Po [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
-0F13..0F17 ; Tibetan # So [5] TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
+0F13 ; Tibetan # So TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
+0F14 ; Tibetan # Po TIBETAN MARK GTER TSHEG
+0F15..0F17 ; Tibetan # So [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
0F18..0F19 ; Tibetan # Mn [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
0F1A..0F1F ; Tibetan # So [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
0F20..0F29 ; Tibetan # Nd [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
@@ -1212,16 +1246,21 @@ AA7B ; Myanmar # Mc MYANMAR SIGN PAO KAREN TONE
# ================================================
10A0..10C5 ; Georgian # L& [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
+10C7 ; Georgian # L& GEORGIAN CAPITAL LETTER YN
+10CD ; Georgian # L& GEORGIAN CAPITAL LETTER AEN
10D0..10FA ; Georgian # Lo [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
10FC ; Georgian # Lm MODIFIER LETTER GEORGIAN NAR
+10FD..10FF ; Georgian # Lo [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
2D00..2D25 ; Georgian # L& [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
+2D27 ; Georgian # L& GEORGIAN SMALL LETTER YN
+2D2D ; Georgian # L& GEORGIAN SMALL LETTER AEN
-# Total code points: 120
+# Total code points: 127
# ================================================
1100..11FF ; Hangul # Lo [256] HANGUL CHOSEONG KIYEOK..HANGUL JONGSEONG SSANGNIEUN
-302E..302F ; Hangul # Mn [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
+302E..302F ; Hangul # Mc [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
3131..318E ; Hangul # Lo [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
3200..321E ; Hangul # So [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
3260..327E ; Hangul # So [31] CIRCLED HANGUL KIYEOK..CIRCLED HANGUL IEUNG U
@@ -1256,8 +1295,7 @@ FFDA..FFDC ; Hangul # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL L
1312..1315 ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
1318..135A ; Ethiopic # Lo [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
135D..135F ; Ethiopic # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
-1360 ; Ethiopic # So ETHIOPIC SECTION MARK
-1361..1368 ; Ethiopic # Po [8] ETHIOPIC WORDSPACE..ETHIOPIC PARAGRAPH SEPARATOR
+1360..1368 ; Ethiopic # Po [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
1369..137C ; Ethiopic # No [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
1380..138F ; Ethiopic # Lo [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
1390..1399 ; Ethiopic # So [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
@@ -1313,7 +1351,7 @@ AB28..AB2E ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
# ================================================
1780..17B3 ; Khmer # Lo [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
-17B4..17B5 ; Khmer # Cf [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
+17B4..17B5 ; Khmer # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
17B6 ; Khmer # Mc KHMER VOWEL SIGN AA
17B7..17BD ; Khmer # Mn [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
17BE..17C5 ; Khmer # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
@@ -1393,16 +1431,15 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK
3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK
3400..4DB5 ; Han # Lo [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
-4E00..9FCB ; Han # Lo [20940] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCB
-F900..FA2D ; Han # Lo [302] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA2D
-FA30..FA6D ; Han # Lo [62] CJK COMPATIBILITY IDEOGRAPH-FA30..CJK COMPATIBILITY IDEOGRAPH-FA6D
+4E00..9FCC ; Han # Lo [20941] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FCC
+F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
20000..2A6D6 ; Han # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
-# Total code points: 75960
+# Total code points: 75963
# ================================================
@@ -1447,6 +1484,7 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE
1CD4..1CE0 ; Inherited # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
1CE2..1CE8 ; Inherited # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
1CED ; Inherited # Mn VEDIC SIGN TIRYAK
+1CF4 ; Inherited # Mn VEDIC TONE CANDRA ABOVE
1DC0..1DE6 ; Inherited # Mn [39] COMBINING DOTTED GRAVE ACCENT..COMBINING LATIN SMALL LETTER Z
1DFC..1DFF ; Inherited # Mn [4] COMBINING DOUBLE INVERTED BREVE BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER
@@ -1466,7 +1504,7 @@ FE20..FE26 ; Inherited # Mn [7] COMBINING LIGATURE LEFT HALF..COMBINING CON
1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
-# Total code points: 523
+# Total code points: 524
# ================================================
@@ -1587,11 +1625,12 @@ E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-2
2CE5..2CEA ; Coptic # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
2CEB..2CEE ; Coptic # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
2CEF..2CF1 ; Coptic # Mn [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
+2CF2..2CF3 ; Coptic # L& [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
2CF9..2CFC ; Coptic # Po [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
2CFD ; Coptic # No COPTIC FRACTION ONE HALF
2CFE..2CFF ; Coptic # Po [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
-# Total code points: 135
+# Total code points: 137
# ================================================
@@ -1614,12 +1653,12 @@ E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-2
# ================================================
-2D30..2D65 ; Tifinagh # Lo [54] TIFINAGH LETTER YA..TIFINAGH LETTER YAZZ
+2D30..2D67 ; Tifinagh # Lo [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
2D6F ; Tifinagh # Lm TIFINAGH MODIFIER LETTER LABIALIZATION MARK
2D70 ; Tifinagh # Po TIFINAGH SEPARATOR MARK
2D7F ; Tifinagh # Mn TIFINAGH CONSONANT JOINER
-# Total code points: 57
+# Total code points: 59
# ================================================
@@ -1729,10 +1768,14 @@ A874..A877 ; Phags_Pa # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOU
1BA6..1BA7 ; Sundanese # Mc [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
1BA8..1BA9 ; Sundanese # Mn [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
1BAA ; Sundanese # Mc SUNDANESE SIGN PAMAAEH
+1BAB ; Sundanese # Mn SUNDANESE SIGN VIRAMA
+1BAC..1BAD ; Sundanese # Mc [2] SUNDANESE CONSONANT SIGN PASANGAN MA..SUNDANESE CONSONANT SIGN PASANGAN WA
1BAE..1BAF ; Sundanese # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
1BB0..1BB9 ; Sundanese # Nd [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
+1BBA..1BBF ; Sundanese # Lo [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M
+1CC0..1CC7 ; Sundanese # Po [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
-# Total code points: 55
+# Total code points: 72
# ================================================
@@ -1940,6 +1983,15 @@ A9DE..A9DF ; Javanese # Po [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA I
# ================================================
+AAE0..AAEA ; Meetei_Mayek # Lo [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
+AAEB ; Meetei_Mayek # Mc MEETEI MAYEK VOWEL SIGN II
+AAEC..AAED ; Meetei_Mayek # Mn [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
+AAEE..AAEF ; Meetei_Mayek # Mc [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
+AAF0..AAF1 ; Meetei_Mayek # Po [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
+AAF2 ; Meetei_Mayek # Lo MEETEI MAYEK ANJI
+AAF3..AAF4 ; Meetei_Mayek # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
+AAF5 ; Meetei_Mayek # Mc MEETEI MAYEK VOWEL SIGN VISARGA
+AAF6 ; Meetei_Mayek # Mn MEETEI MAYEK VIRAMA
ABC0..ABE2 ; Meetei_Mayek # Lo [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
ABE3..ABE4 ; Meetei_Mayek # Mc [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
ABE5 ; Meetei_Mayek # Mn MEETEI MAYEK VOWEL SIGN ANAP
@@ -1951,7 +2003,7 @@ ABEC ; Meetei_Mayek # Mc MEETEI MAYEK LUM IYEK
ABED ; Meetei_Mayek # Mn MEETEI MAYEK APUN IYEK
ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
-# Total code points: 56
+# Total code points: 79
# ================================================
@@ -2040,4 +2092,74 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI
# Total code points: 29
+# ================================================
+
+11100..11102 ; Chakma # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
+11103..11126 ; Chakma # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
+11127..1112B ; Chakma # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
+1112C ; Chakma # Mc CHAKMA VOWEL SIGN E
+1112D..11134 ; Chakma # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
+11136..1113F ; Chakma # Nd [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
+11140..11143 ; Chakma # Po [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
+
+# Total code points: 67
+
+# ================================================
+
+109A0..109B7 ; Meroitic_Cursive # Lo [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA
+109BE..109BF ; Meroitic_Cursive # Lo [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
+
+# Total code points: 26
+
+# ================================================
+
+10980..1099F ; Meroitic_Hieroglyphs # Lo [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2
+
+# Total code points: 32
+
+# ================================================
+
+16F00..16F44 ; Miao # Lo [69] MIAO LETTER PA..MIAO LETTER HHA
+16F50 ; Miao # Lo MIAO LETTER NASALIZATION
+16F51..16F7E ; Miao # Mc [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
+16F8F..16F92 ; Miao # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW
+16F93..16F9F ; Miao # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
+
+# Total code points: 133
+
+# ================================================
+
+11180..11181 ; Sharada # Mn [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
+11182 ; Sharada # Mc SHARADA SIGN VISARGA
+11183..111B2 ; Sharada # Lo [48] SHARADA LETTER A..SHARADA LETTER HA
+111B3..111B5 ; Sharada # Mc [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
+111B6..111BE ; Sharada # Mn [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
+111BF..111C0 ; Sharada # Mc [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
+111C1..111C4 ; Sharada # Lo [4] SHARADA SIGN AVAGRAHA..SHARADA OM
+111C5..111C8 ; Sharada # Po [4] SHARADA DANDA..SHARADA SEPARATOR
+111D0..111D9 ; Sharada # Nd [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
+
+# Total code points: 83
+
+# ================================================
+
+110D0..110E8 ; Sora_Sompeng # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
+110F0..110F9 ; Sora_Sompeng # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
+
+# Total code points: 35
+
+# ================================================
+
+11680..116AA ; Takri # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA
+116AB ; Takri # Mn TAKRI SIGN ANUSVARA
+116AC ; Takri # Mc TAKRI SIGN VISARGA
+116AD ; Takri # Mn TAKRI VOWEL SIGN AA
+116AE..116AF ; Takri # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
+116B0..116B5 ; Takri # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
+116B6 ; Takri # Mc TAKRI SIGN VIRAMA
+116B7 ; Takri # Mn TAKRI SIGN NUKTA
+116C0..116C9 ; Takri # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
+
+# Total code points: 66
+
# EOF
diff --git a/jdk/make/tools/UnicodeData/SpecialCasing.txt b/jdk/make/tools/UnicodeData/SpecialCasing.txt
index 62a0ec9f3a5..d650b6d9dcd 100644
--- a/jdk/make/tools/UnicodeData/SpecialCasing.txt
+++ b/jdk/make/tools/UnicodeData/SpecialCasing.txt
@@ -1,8 +1,8 @@
-# SpecialCasing-6.0.0.txt
-# Date: 2010-05-18, 00:49:39 GMT [MD]
+# SpecialCasing-6.1.0.txt
+# Date: 2011-11-27, 05:10:51 GMT [MD]
#
# Unicode Character Database
-# Copyright (c) 1991-2010 Unicode, Inc.
+# Copyright (c) 1991-2011 Unicode, Inc.
# For terms of use, see http://www.unicode.org/terms_of_use.html
# For documentation, see http://www.unicode.org/reports/tr44/
#
@@ -47,7 +47,9 @@
# * Additional contexts
# * Additional fields
# ================================================================================
-# @missing 0000..10FFFF; ; ;
+
+# @missing: 0000..10FFFF; ; ; ;
+
# ================================================================================
# Unconditional mappings
# ================================================================================
diff --git a/jdk/make/tools/UnicodeData/UnicodeData.txt b/jdk/make/tools/UnicodeData/UnicodeData.txt
index 75d4a462524..9f204050c6b 100644
--- a/jdk/make/tools/UnicodeData/UnicodeData.txt
+++ b/jdk/make/tools/UnicodeData/UnicodeData.txt
@@ -165,10 +165,10 @@
00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
-00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A7;SECTION SIGN;Po;0;ON;;;;;N;;;;;
00A8;DIAERESIS;Sk;0;ON; 0020 0308;;;;N;SPACING DIAERESIS;;;;
00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
-00AA;FEMININE ORDINAL INDICATOR;Ll;0;L; 0061;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Lo;0;L; 0061;;;;N;;;;;
00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;;;;
00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;;
@@ -180,11 +180,11 @@
00B3;SUPERSCRIPT THREE;No;0;EN; 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
00B4;ACUTE ACCENT;Sk;0;ON; 0020 0301;;;;N;SPACING ACUTE;;;;
00B5;MICRO SIGN;Ll;0;L; 03BC;;;;N;;;039C;;039C
-00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B6;PILCROW SIGN;Po;0;ON;;;;;N;PARAGRAPH SIGN;;;;
00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
00B8;CEDILLA;Sk;0;ON; 0020 0327;;;;N;SPACING CEDILLA;;;;
00B9;SUPERSCRIPT ONE;No;0;EN; 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
-00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L; 006F;;;;N;;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Lo;0;L; 006F;;;;N;;;;;
00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;;;;
00BC;VULGAR FRACTION ONE QUARTER;No;0;ON; 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
00BD;VULGAR FRACTION ONE HALF;No;0;ON; 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
@@ -612,7 +612,7 @@
0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D
-0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;A7AA;;A7AA
0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
@@ -1394,6 +1394,7 @@
0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L; 0565 0582;;;;N;;;;;
0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+058F;ARMENIAN DRAM SIGN;Sc;0;ET;;;;;N;;;;;
0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
@@ -1485,6 +1486,7 @@
0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;;
0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;;
0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;;
+0604;ARABIC SIGN SAMVAT;Cf;0;AN;;;;;N;;;;;
0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;;
0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;;
0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;;
@@ -2057,6 +2059,45 @@
085A;MANDAIC VOCALIZATION MARK;Mn;220;NSM;;;;;N;;;;;
085B;MANDAIC GEMINATION MARK;Mn;220;NSM;;;;;N;;;;;
085E;MANDAIC PUNCTUATION;Po;0;R;;;;;N;;;;;
+08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A3;ARABIC LETTER TAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A4;ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A5;ARABIC LETTER QAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+08A6;ARABIC LETTER LAM WITH DOUBLE BAR;Lo;0;AL;;;;;N;;;;;
+08A7;ARABIC LETTER MEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+08A8;ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
+08A9;ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+08AA;ARABIC LETTER REH WITH LOOP;Lo;0;AL;;;;;N;;;;;
+08AB;ARABIC LETTER WAW WITH DOT WITHIN;Lo;0;AL;;;;;N;;;;;
+08AC;ARABIC LETTER ROHINGYA YEH;Lo;0;AL;;;;;N;;;;;
+08E4;ARABIC CURLY FATHA;Mn;230;NSM;;;;;N;;;;;
+08E5;ARABIC CURLY DAMMA;Mn;230;NSM;;;;;N;;;;;
+08E6;ARABIC CURLY KASRA;Mn;220;NSM;;;;;N;;;;;
+08E7;ARABIC CURLY FATHATAN;Mn;230;NSM;;;;;N;;;;;
+08E8;ARABIC CURLY DAMMATAN;Mn;230;NSM;;;;;N;;;;;
+08E9;ARABIC CURLY KASRATAN;Mn;220;NSM;;;;;N;;;;;
+08EA;ARABIC TONE ONE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+08EB;ARABIC TONE TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+08EC;ARABIC TONE LOOP ABOVE;Mn;230;NSM;;;;;N;;;;;
+08ED;ARABIC TONE ONE DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+08EE;ARABIC TONE TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+08EF;ARABIC TONE LOOP BELOW;Mn;220;NSM;;;;;N;;;;;
+08F0;ARABIC OPEN FATHATAN;Mn;27;NSM;;;;;N;;;;;
+08F1;ARABIC OPEN DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+08F2;ARABIC OPEN KASRATAN;Mn;29;NSM;;;;;N;;;;;
+08F3;ARABIC SMALL HIGH WAW;Mn;230;NSM;;;;;N;;;;;
+08F4;ARABIC FATHA WITH RING;Mn;230;NSM;;;;;N;;;;;
+08F5;ARABIC FATHA WITH DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+08F6;ARABIC KASRA WITH DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+08F7;ARABIC LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+08F8;ARABIC RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+08F9;ARABIC LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+08FA;ARABIC RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+08FB;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+08FC;ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;;
+08FD;ARABIC RIGHT ARROWHEAD ABOVE WITH DOT;Mn;230;NSM;;;;;N;;;;;
+08FE;ARABIC DAMMA WITH DOT;Mn;230;NSM;;;;;N;;;;;
0900;DEVANAGARI SIGN INVERTED CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
@@ -2437,6 +2478,7 @@
0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0AF0;GUJARATI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
@@ -3109,6 +3151,8 @@
0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
0EDC;LAO HO NO;Lo;0;L; 0EAB 0E99;;;;N;;;;;
0EDD;LAO HO MO;Lo;0;L; 0EAB 0EA1;;;;N;;;;;
+0EDE;LAO LETTER KHMU GO;Lo;0;L;;;;;N;;;;;
+0EDF;LAO LETTER KHMU NYO;Lo;0;L;;;;;N;;;;;
0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;;;;
0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;;;;
@@ -3129,7 +3173,7 @@
0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;;;;
0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;;;;
0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;;;;
-0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;;;;
+0F14;TIBETAN MARK GTER TSHEG;Po;0;L;;;;;N;TIBETAN COMMA;;;;
0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;;;;
0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;;;;
0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;;;;
@@ -3518,6 +3562,8 @@
10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;2D23;
10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;;;2D24;
10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;;;2D25;
+10C7;GEORGIAN CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;2D27;
+10CD;GEORGIAN CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;2D2D;
10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
@@ -3563,6 +3609,9 @@
10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;;
10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L; 10DC;;;;N;;;;;
+10FD;GEORGIAN LETTER AEN;Lo;0;L;;;;;N;;;;;
+10FE;GEORGIAN LETTER HARD SIGN;Lo;0;L;;;;;N;;;;;
+10FF;GEORGIAN LETTER LABIAL SIGN;Lo;0;L;;;;;N;;;;;
1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;;;;
1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;;;;
@@ -4148,7 +4197,7 @@
135D;ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;;
135E;ETHIOPIC COMBINING VOWEL LENGTH MARK;Mn;230;NSM;;;;;N;;;;;
135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
-1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;;
+1360;ETHIOPIC SECTION MARK;Po;0;L;;;;;N;;;;;
1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
@@ -5171,8 +5220,8 @@
17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
-17B4;KHMER VOWEL INHERENT AQ;Cf;0;L;;;;;N;;;;;
-17B5;KHMER VOWEL INHERENT AA;Cf;0;L;;;;;N;;;;;
+17B4;KHMER VOWEL INHERENT AQ;Mn;0;NSM;;;;;N;;;;;
+17B5;KHMER VOWEL INHERENT AA;Mn;0;NSM;;;;;N;;;;;
17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
@@ -5996,6 +6045,9 @@
1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;;
1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;;
1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;;
+1BAB;SUNDANESE SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1BAC;SUNDANESE CONSONANT SIGN PASANGAN MA;Mc;0;L;;;;;N;;;;;
+1BAD;SUNDANESE CONSONANT SIGN PASANGAN WA;Mc;0;L;;;;;N;;;;;
1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;;
1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;;
1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
@@ -6008,6 +6060,12 @@
1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1BBA;SUNDANESE AVAGRAHA;Lo;0;L;;;;;N;;;;;
+1BBB;SUNDANESE LETTER REU;Lo;0;L;;;;;N;;;;;
+1BBC;SUNDANESE LETTER LEU;Lo;0;L;;;;;N;;;;;
+1BBD;SUNDANESE LETTER BHA;Lo;0;L;;;;;N;;;;;
+1BBE;SUNDANESE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+1BBF;SUNDANESE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
1BC0;BATAK LETTER A;Lo;0;L;;;;;N;;;;;
1BC1;BATAK LETTER SIMALUNGUN A;Lo;0;L;;;;;N;;;;;
1BC2;BATAK LETTER HA;Lo;0;L;;;;;N;;;;;
@@ -6186,6 +6244,14 @@
1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;;
1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;;
1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;;
+1CC0;SUNDANESE PUNCTUATION BINDU SURYA;Po;0;L;;;;;N;;;;;
+1CC1;SUNDANESE PUNCTUATION BINDU PANGLONG;Po;0;L;;;;;N;;;;;
+1CC2;SUNDANESE PUNCTUATION BINDU PURNAMA;Po;0;L;;;;;N;;;;;
+1CC3;SUNDANESE PUNCTUATION BINDU CAKRA;Po;0;L;;;;;N;;;;;
+1CC4;SUNDANESE PUNCTUATION BINDU LEU SATANGA;Po;0;L;;;;;N;;;;;
+1CC5;SUNDANESE PUNCTUATION BINDU KA SATANGA;Po;0;L;;;;;N;;;;;
+1CC6;SUNDANESE PUNCTUATION BINDU DA SATANGA;Po;0;L;;;;;N;;;;;
+1CC7;SUNDANESE PUNCTUATION BINDU BA SATANGA;Po;0;L;;;;;N;;;;;
1CD0;VEDIC TONE KARSHANA;Mn;230;NSM;;;;;N;;;;;
1CD1;VEDIC TONE SHARA;Mn;230;NSM;;;;;N;;;;;
1CD2;VEDIC TONE PRENKHA;Mn;230;NSM;;;;;N;;;;;
@@ -6221,6 +6287,10 @@
1CF0;VEDIC SIGN RTHANG LONG ANUSVARA;Lo;0;L;;;;;N;;;;;
1CF1;VEDIC SIGN ANUSVARA UBHAYATO MUKHA;Lo;0;L;;;;;N;;;;;
1CF2;VEDIC SIGN ARDHAVISARGA;Mc;0;L;;;;;N;;;;;
+1CF3;VEDIC SIGN ROTATED ARDHAVISARGA;Mc;0;L;;;;;N;;;;;
+1CF4;VEDIC TONE CANDRA ABOVE;Mn;230;NSM;;;;;N;;;;;
+1CF5;VEDIC SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+1CF6;VEDIC SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;
1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;
@@ -6319,15 +6389,15 @@
1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L; 03B4;;;;N;;;;;
1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L; 03C6;;;;N;;;;;
1D61;MODIFIER LETTER SMALL CHI;Lm;0;L; 03C7;;;;N;;;;;
-1D62;LATIN SUBSCRIPT SMALL LETTER I;Ll;0;L; 0069;;;;N;;;;;
-1D63;LATIN SUBSCRIPT SMALL LETTER R;Ll;0;L; 0072;;;;N;;;;;
-1D64;LATIN SUBSCRIPT SMALL LETTER U;Ll;0;L; 0075;;;;N;;;;;
-1D65;LATIN SUBSCRIPT SMALL LETTER V;Ll;0;L; 0076;;;;N;;;;;
-1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Ll;0;L; 03B2;;;;N;;;;;
-1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Ll;0;L; 03B3;;;;N;;;;;
-1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Ll;0;L; 03C1;;;;N;;;;;
-1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L; 03C6;;;;N;;;;;
-1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L; 03C7;;;;N;;;;;
+1D62;LATIN SUBSCRIPT SMALL LETTER I;Lm;0;L; 0069;;;;N;;;;;
+1D63;LATIN SUBSCRIPT SMALL LETTER R;Lm;0;L; 0072;;;;N;;;;;
+1D64;LATIN SUBSCRIPT SMALL LETTER U;Lm;0;L; 0075;;;;N;;;;;
+1D65;LATIN SUBSCRIPT SMALL LETTER V;Lm;0;L; 0076;;;;N;;;;;
+1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Lm;0;L; 03B2;;;;N;;;;;
+1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Lm;0;L; 03B3;;;;N;;;;;
+1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Lm;0;L; 03C1;;;;N;;;;;
+1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Lm;0;L; 03C6;;;;N;;;;;
+1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Lm;0;L; 03C7;;;;N;;;;;
1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;
1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
@@ -8827,7 +8897,9 @@
27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;;
27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;;
27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+27CB;MATHEMATICAL RISING DIAGONAL;Sm;0;ON;;;;;Y;;;;;
27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;;
+27CD;MATHEMATICAL FALLING DIAGONAL;Sm;0;ON;;;;;Y;;;;;
27CE;SQUARED LOGICAL AND;Sm;0;ON;;;;;N;;;;;
27CF;SQUARED LOGICAL OR;Sm;0;ON;;;;;N;;;;;
27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;
@@ -9855,7 +9927,7 @@
2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;;
2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;;
2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;;
-2C7C;LATIN SUBSCRIPT SMALL LETTER J;Ll;0;L; 006A;;;;N;;;;;
+2C7C;LATIN SUBSCRIPT SMALL LETTER J;Lm;0;L; 006A;;;;N;;;;;
2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L; 0056;;;;N;;;;;
2C7E;LATIN CAPITAL LETTER S WITH SWASH TAIL;Lu;0;L;;;;;N;;;;023F;
2C7F;LATIN CAPITAL LETTER Z WITH SWASH TAIL;Lu;0;L;;;;;N;;;;0240;
@@ -9973,6 +10045,8 @@
2CEF;COPTIC COMBINING NI ABOVE;Mn;230;NSM;;;;;N;;;;;
2CF0;COPTIC COMBINING SPIRITUS ASPER;Mn;230;NSM;;;;;N;;;;;
2CF1;COPTIC COMBINING SPIRITUS LENIS;Mn;230;NSM;;;;;N;;;;;
+2CF2;COPTIC CAPITAL LETTER BOHAIRIC KHEI;Lu;0;L;;;;;N;;;;2CF3;
+2CF3;COPTIC SMALL LETTER BOHAIRIC KHEI;Ll;0;L;;;;;N;;;2CF2;;2CF2
2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;;
2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
@@ -10018,6 +10092,8 @@
2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;;10C3;;10C3
2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;;10C4;;10C4
2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;;10C5;;10C5
+2D27;GEORGIAN SMALL LETTER YN;Ll;0;L;;;;;N;;;10C7;;10C7
+2D2D;GEORGIAN SMALL LETTER AEN;Ll;0;L;;;;;N;;;10CD;;10CD
2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;;
2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;;
2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;;
@@ -10072,6 +10148,8 @@
2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;;
2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;;;;
2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;;
+2D66;TIFINAGH LETTER YE;Lo;0;L;;;;;N;;;;;
+2D67;TIFINAGH LETTER YO;Lo;0;L;;;;;N;;;;;
2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L; 2D61;;;;N;;;;;
2D70;TIFINAGH SEPARATOR MARK;Po;0;L;;;;;N;;;;;
2D7F;TIFINAGH CONSONANT JOINER;Mn;9;NSM;;;;;N;;;;;
@@ -10236,6 +10314,16 @@
2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;;
2E30;RING POINT;Po;0;ON;;;;;N;;;;;
2E31;WORD SEPARATOR MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+2E32;TURNED COMMA;Po;0;ON;;;;;N;;;;;
+2E33;RAISED DOT;Po;0;ON;;;;;N;;;;;
+2E34;RAISED COMMA;Po;0;ON;;;;;N;;;;;
+2E35;TURNED SEMICOLON;Po;0;ON;;;;;N;;;;;
+2E36;DAGGER WITH LEFT GUARD;Po;0;ON;;;;;N;;;;;
+2E37;DAGGER WITH RIGHT GUARD;Po;0;ON;;;;;N;;;;;
+2E38;TURNED DAGGER;Po;0;ON;;;;;N;;;;;
+2E39;TOP HALF SECTION SIGN;Po;0;ON;;;;;N;;;;;
+2E3A;TWO-EM DASH;Pd;0;ON;;;;;N;;;;;
+2E3B;THREE-EM DASH;Pd;0;ON;;;;;N;;;;;
2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
@@ -10623,8 +10711,8 @@
302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
-302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
-302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mc;224;L;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mc;224;L;;;;;N;;;;;
3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
@@ -11131,14 +11219,14 @@
3245;CIRCLED IDEOGRAPH KINDERGARTEN;So;0;L; 5E7C;;;;N;;;;;
3246;CIRCLED IDEOGRAPH SCHOOL;So;0;L; 6587;;;;N;;;;;
3247;CIRCLED IDEOGRAPH KOTO;So;0;L; 7B8F;;;;N;;;;;
-3248;CIRCLED NUMBER TEN ON BLACK SQUARE;So;0;L;;;;;N;;;;;
-3249;CIRCLED NUMBER TWENTY ON BLACK SQUARE;So;0;L;;;;;N;;;;;
-324A;CIRCLED NUMBER THIRTY ON BLACK SQUARE;So;0;L;;;;;N;;;;;
-324B;CIRCLED NUMBER FORTY ON BLACK SQUARE;So;0;L;;;;;N;;;;;
-324C;CIRCLED NUMBER FIFTY ON BLACK SQUARE;So;0;L;;;;;N;;;;;
-324D;CIRCLED NUMBER SIXTY ON BLACK SQUARE;So;0;L;;;;;N;;;;;
-324E;CIRCLED NUMBER SEVENTY ON BLACK SQUARE;So;0;L;;;;;N;;;;;
-324F;CIRCLED NUMBER EIGHTY ON BLACK SQUARE;So;0;L;;;;;N;;;;;
+3248;CIRCLED NUMBER TEN ON BLACK SQUARE;No;0;L;;;;10;N;;;;;
+3249;CIRCLED NUMBER TWENTY ON BLACK SQUARE;No;0;L;;;;20;N;;;;;
+324A;CIRCLED NUMBER THIRTY ON BLACK SQUARE;No;0;L;;;;30;N;;;;;
+324B;CIRCLED NUMBER FORTY ON BLACK SQUARE;No;0;L;;;;40;N;;;;;
+324C;CIRCLED NUMBER FIFTY ON BLACK SQUARE;No;0;L;;;;50;N;;;;;
+324D;CIRCLED NUMBER SIXTY ON BLACK SQUARE;No;0;L;;;;60;N;;;;;
+324E;CIRCLED NUMBER SEVENTY ON BLACK SQUARE;No;0;L;;;;70;N;;;;;
+324F;CIRCLED NUMBER EIGHTY ON BLACK SQUARE;No;0;L;;;;80;N;;;;;
3250;PARTNERSHIP SIGN;So;0;ON; 0050 0054 0045;;;;N;;;;;
3251;CIRCLED NUMBER TWENTY ONE;No;0;ON; 0032 0031;;;21;N;;;;;
3252;CIRCLED NUMBER TWENTY TWO;No;0;ON; 0032 0032;;;22;N;;;;;
@@ -11637,7 +11725,7 @@
4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
4E00;;Lo;0;L;;;;;N;;;;;
-9FCB;;Lo;0;L;;;;;N;;;;;
+9FCC;;Lo;0;L;;;;;N;;;;;
A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
@@ -13258,6 +13346,14 @@ A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;;
+A674;COMBINING CYRILLIC LETTER UKRAINIAN IE;Mn;230;NSM;;;;;N;;;;;
+A675;COMBINING CYRILLIC LETTER I;Mn;230;NSM;;;;;N;;;;;
+A676;COMBINING CYRILLIC LETTER YI;Mn;230;NSM;;;;;N;;;;;
+A677;COMBINING CYRILLIC LETTER U;Mn;230;NSM;;;;;N;;;;;
+A678;COMBINING CYRILLIC LETTER HARD SIGN;Mn;230;NSM;;;;;N;;;;;
+A679;COMBINING CYRILLIC LETTER YERU;Mn;230;NSM;;;;;N;;;;;
+A67A;COMBINING CYRILLIC LETTER SOFT SIGN;Mn;230;NSM;;;;;N;;;;;
+A67B;COMBINING CYRILLIC LETTER OMEGA;Mn;230;NSM;;;;;N;;;;;
A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;;
A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;;
A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;;
@@ -13286,6 +13382,7 @@ A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695;
A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694
A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697;
A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696
+A69F;COMBINING CYRILLIC LETTER IOTIFIED E;Mn;230;NSM;;;;;N;;;;;
A6A0;BAMUM LETTER A;Lo;0;L;;;;;N;;;;;
A6A1;BAMUM LETTER KA;Lo;0;L;;;;;N;;;;;
A6A2;BAMUM LETTER U;Lo;0;L;;;;;N;;;;;
@@ -13519,6 +13616,8 @@ A78D;LATIN CAPITAL LETTER TURNED H;Lu;0;L;;;;;N;;;;0265;
A78E;LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT;Ll;0;L;;;;;N;;;;;
A790;LATIN CAPITAL LETTER N WITH DESCENDER;Lu;0;L;;;;;N;;;;A791;
A791;LATIN SMALL LETTER N WITH DESCENDER;Ll;0;L;;;;;N;;;A790;;A790
+A792;LATIN CAPITAL LETTER C WITH BAR;Lu;0;L;;;;;N;;;;A793;
+A793;LATIN SMALL LETTER C WITH BAR;Ll;0;L;;;;;N;;;A792;;A792
A7A0;LATIN CAPITAL LETTER G WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A1;
A7A1;LATIN SMALL LETTER G WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A0;;A7A0
A7A2;LATIN CAPITAL LETTER K WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A3;
@@ -13529,6 +13628,9 @@ A7A6;LATIN CAPITAL LETTER R WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A7;
A7A7;LATIN SMALL LETTER R WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A6;;A7A6
A7A8;LATIN CAPITAL LETTER S WITH OBLIQUE STROKE;Lu;0;L;;;;;N;;;;A7A9;
A7A9;LATIN SMALL LETTER S WITH OBLIQUE STROKE;Ll;0;L;;;;;N;;;A7A8;;A7A8
+A7AA;LATIN CAPITAL LETTER H WITH HOOK;Lu;0;L;;;;;N;;;;0266;
+A7F8;MODIFIER LETTER CAPITAL H WITH STROKE;Lm;0;L; 0126;;;;N;;;;;
+A7F9;MODIFIER LETTER SMALL LIGATURE OE;Lm;0;L; 0153;;;;N;;;;;
A7FA;LATIN LETTER SMALL CAPITAL TURNED M;Ll;0;L;;;;;N;;;;;
A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;;
A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;;
@@ -14142,6 +14244,29 @@ AADC;TAI VIET SYMBOL NUENG;Lo;0;L;;;;;N;;;;;
AADD;TAI VIET SYMBOL SAM;Lm;0;L;;;;;N;;;;;
AADE;TAI VIET SYMBOL HO HOI;Po;0;L;;;;;N;;;;;
AADF;TAI VIET SYMBOL KOI KOI;Po;0;L;;;;;N;;;;;
+AAE0;MEETEI MAYEK LETTER E;Lo;0;L;;;;;N;;;;;
+AAE1;MEETEI MAYEK LETTER O;Lo;0;L;;;;;N;;;;;
+AAE2;MEETEI MAYEK LETTER CHA;Lo;0;L;;;;;N;;;;;
+AAE3;MEETEI MAYEK LETTER NYA;Lo;0;L;;;;;N;;;;;
+AAE4;MEETEI MAYEK LETTER TTA;Lo;0;L;;;;;N;;;;;
+AAE5;MEETEI MAYEK LETTER TTHA;Lo;0;L;;;;;N;;;;;
+AAE6;MEETEI MAYEK LETTER DDA;Lo;0;L;;;;;N;;;;;
+AAE7;MEETEI MAYEK LETTER DDHA;Lo;0;L;;;;;N;;;;;
+AAE8;MEETEI MAYEK LETTER NNA;Lo;0;L;;;;;N;;;;;
+AAE9;MEETEI MAYEK LETTER SHA;Lo;0;L;;;;;N;;;;;
+AAEA;MEETEI MAYEK LETTER SSA;Lo;0;L;;;;;N;;;;;
+AAEB;MEETEI MAYEK VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+AAEC;MEETEI MAYEK VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+AAED;MEETEI MAYEK VOWEL SIGN AAI;Mn;0;NSM;;;;;N;;;;;
+AAEE;MEETEI MAYEK VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+AAEF;MEETEI MAYEK VOWEL SIGN AAU;Mc;0;L;;;;;N;;;;;
+AAF0;MEETEI MAYEK CHEIKHAN;Po;0;L;;;;;N;;;;;
+AAF1;MEETEI MAYEK AHANG KHUDAM;Po;0;L;;;;;N;;;;;
+AAF2;MEETEI MAYEK ANJI;Lo;0;L;;;;;N;;;;;
+AAF3;MEETEI MAYEK SYLLABLE REPETITION MARK;Lm;0;L;;;;;N;;;;;
+AAF4;MEETEI MAYEK WORD REPETITION MARK;Lm;0;L;;;;;N;;;;;
+AAF5;MEETEI MAYEK VOWEL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+AAF6;MEETEI MAYEK VIRAMA;Mn;9;NSM;;;;;N;;;;;
AB01;ETHIOPIC SYLLABLE TTHU;Lo;0;L;;;;;N;;;;;
AB02;ETHIOPIC SYLLABLE TTHI;Lo;0;L;;;;;N;;;;;
AB03;ETHIOPIC SYLLABLE TTHAA;Lo;0;L;;;;;N;;;;;
@@ -14614,6 +14739,8 @@ FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FA2E;CJK COMPATIBILITY IDEOGRAPH-FA2E;Lo;0;L;90DE;;;;N;;;;;
+FA2F;CJK COMPATIBILITY IDEOGRAPH-FA2F;Lo;0;L;96B7;;;;N;;;;;
FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;;
FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;;
FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;;
@@ -16126,7 +16253,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;;
10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;;
10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;;
-10102;AEGEAN CHECK MARK;So;0;L;;;;;N;;;;;
+10102;AEGEAN CHECK MARK;Po;0;L;;;;;N;;;;;
10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;;
10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;;
10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;;
@@ -16845,6 +16972,64 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;;
10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;;
1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;;
+10980;MEROITIC HIEROGLYPHIC LETTER A;Lo;0;R;;;;;N;;;;;
+10981;MEROITIC HIEROGLYPHIC LETTER E;Lo;0;R;;;;;N;;;;;
+10982;MEROITIC HIEROGLYPHIC LETTER I;Lo;0;R;;;;;N;;;;;
+10983;MEROITIC HIEROGLYPHIC LETTER O;Lo;0;R;;;;;N;;;;;
+10984;MEROITIC HIEROGLYPHIC LETTER YA;Lo;0;R;;;;;N;;;;;
+10985;MEROITIC HIEROGLYPHIC LETTER WA;Lo;0;R;;;;;N;;;;;
+10986;MEROITIC HIEROGLYPHIC LETTER BA;Lo;0;R;;;;;N;;;;;
+10987;MEROITIC HIEROGLYPHIC LETTER BA-2;Lo;0;R;;;;;N;;;;;
+10988;MEROITIC HIEROGLYPHIC LETTER PA;Lo;0;R;;;;;N;;;;;
+10989;MEROITIC HIEROGLYPHIC LETTER MA;Lo;0;R;;;;;N;;;;;
+1098A;MEROITIC HIEROGLYPHIC LETTER NA;Lo;0;R;;;;;N;;;;;
+1098B;MEROITIC HIEROGLYPHIC LETTER NA-2;Lo;0;R;;;;;N;;;;;
+1098C;MEROITIC HIEROGLYPHIC LETTER NE;Lo;0;R;;;;;N;;;;;
+1098D;MEROITIC HIEROGLYPHIC LETTER NE-2;Lo;0;R;;;;;N;;;;;
+1098E;MEROITIC HIEROGLYPHIC LETTER RA;Lo;0;R;;;;;N;;;;;
+1098F;MEROITIC HIEROGLYPHIC LETTER RA-2;Lo;0;R;;;;;N;;;;;
+10990;MEROITIC HIEROGLYPHIC LETTER LA;Lo;0;R;;;;;N;;;;;
+10991;MEROITIC HIEROGLYPHIC LETTER KHA;Lo;0;R;;;;;N;;;;;
+10992;MEROITIC HIEROGLYPHIC LETTER HHA;Lo;0;R;;;;;N;;;;;
+10993;MEROITIC HIEROGLYPHIC LETTER SA;Lo;0;R;;;;;N;;;;;
+10994;MEROITIC HIEROGLYPHIC LETTER SA-2;Lo;0;R;;;;;N;;;;;
+10995;MEROITIC HIEROGLYPHIC LETTER SE;Lo;0;R;;;;;N;;;;;
+10996;MEROITIC HIEROGLYPHIC LETTER KA;Lo;0;R;;;;;N;;;;;
+10997;MEROITIC HIEROGLYPHIC LETTER QA;Lo;0;R;;;;;N;;;;;
+10998;MEROITIC HIEROGLYPHIC LETTER TA;Lo;0;R;;;;;N;;;;;
+10999;MEROITIC HIEROGLYPHIC LETTER TA-2;Lo;0;R;;;;;N;;;;;
+1099A;MEROITIC HIEROGLYPHIC LETTER TE;Lo;0;R;;;;;N;;;;;
+1099B;MEROITIC HIEROGLYPHIC LETTER TE-2;Lo;0;R;;;;;N;;;;;
+1099C;MEROITIC HIEROGLYPHIC LETTER TO;Lo;0;R;;;;;N;;;;;
+1099D;MEROITIC HIEROGLYPHIC LETTER DA;Lo;0;R;;;;;N;;;;;
+1099E;MEROITIC HIEROGLYPHIC SYMBOL VIDJ;Lo;0;R;;;;;N;;;;;
+1099F;MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2;Lo;0;R;;;;;N;;;;;
+109A0;MEROITIC CURSIVE LETTER A;Lo;0;R;;;;;N;;;;;
+109A1;MEROITIC CURSIVE LETTER E;Lo;0;R;;;;;N;;;;;
+109A2;MEROITIC CURSIVE LETTER I;Lo;0;R;;;;;N;;;;;
+109A3;MEROITIC CURSIVE LETTER O;Lo;0;R;;;;;N;;;;;
+109A4;MEROITIC CURSIVE LETTER YA;Lo;0;R;;;;;N;;;;;
+109A5;MEROITIC CURSIVE LETTER WA;Lo;0;R;;;;;N;;;;;
+109A6;MEROITIC CURSIVE LETTER BA;Lo;0;R;;;;;N;;;;;
+109A7;MEROITIC CURSIVE LETTER PA;Lo;0;R;;;;;N;;;;;
+109A8;MEROITIC CURSIVE LETTER MA;Lo;0;R;;;;;N;;;;;
+109A9;MEROITIC CURSIVE LETTER NA;Lo;0;R;;;;;N;;;;;
+109AA;MEROITIC CURSIVE LETTER NE;Lo;0;R;;;;;N;;;;;
+109AB;MEROITIC CURSIVE LETTER RA;Lo;0;R;;;;;N;;;;;
+109AC;MEROITIC CURSIVE LETTER LA;Lo;0;R;;;;;N;;;;;
+109AD;MEROITIC CURSIVE LETTER KHA;Lo;0;R;;;;;N;;;;;
+109AE;MEROITIC CURSIVE LETTER HHA;Lo;0;R;;;;;N;;;;;
+109AF;MEROITIC CURSIVE LETTER SA;Lo;0;R;;;;;N;;;;;
+109B0;MEROITIC CURSIVE LETTER ARCHAIC SA;Lo;0;R;;;;;N;;;;;
+109B1;MEROITIC CURSIVE LETTER SE;Lo;0;R;;;;;N;;;;;
+109B2;MEROITIC CURSIVE LETTER KA;Lo;0;R;;;;;N;;;;;
+109B3;MEROITIC CURSIVE LETTER QA;Lo;0;R;;;;;N;;;;;
+109B4;MEROITIC CURSIVE LETTER TA;Lo;0;R;;;;;N;;;;;
+109B5;MEROITIC CURSIVE LETTER TE;Lo;0;R;;;;;N;;;;;
+109B6;MEROITIC CURSIVE LETTER TO;Lo;0;R;;;;;N;;;;;
+109B7;MEROITIC CURSIVE LETTER DA;Lo;0;R;;;;;N;;;;;
+109BE;MEROITIC CURSIVE LOGOGRAM RMT;Lo;0;R;;;;;N;;;;;
+109BF;MEROITIC CURSIVE LOGOGRAM IMN;Lo;0;R;;;;;N;;;;;
10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;
10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
@@ -17338,6 +17523,257 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;;
110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;;
110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;;
+110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;;
+110D2;SORA SOMPENG LETTER BAH;Lo;0;L;;;;;N;;;;;
+110D3;SORA SOMPENG LETTER CAH;Lo;0;L;;;;;N;;;;;
+110D4;SORA SOMPENG LETTER DAH;Lo;0;L;;;;;N;;;;;
+110D5;SORA SOMPENG LETTER GAH;Lo;0;L;;;;;N;;;;;
+110D6;SORA SOMPENG LETTER MAH;Lo;0;L;;;;;N;;;;;
+110D7;SORA SOMPENG LETTER NGAH;Lo;0;L;;;;;N;;;;;
+110D8;SORA SOMPENG LETTER LAH;Lo;0;L;;;;;N;;;;;
+110D9;SORA SOMPENG LETTER NAH;Lo;0;L;;;;;N;;;;;
+110DA;SORA SOMPENG LETTER VAH;Lo;0;L;;;;;N;;;;;
+110DB;SORA SOMPENG LETTER PAH;Lo;0;L;;;;;N;;;;;
+110DC;SORA SOMPENG LETTER YAH;Lo;0;L;;;;;N;;;;;
+110DD;SORA SOMPENG LETTER RAH;Lo;0;L;;;;;N;;;;;
+110DE;SORA SOMPENG LETTER HAH;Lo;0;L;;;;;N;;;;;
+110DF;SORA SOMPENG LETTER KAH;Lo;0;L;;;;;N;;;;;
+110E0;SORA SOMPENG LETTER JAH;Lo;0;L;;;;;N;;;;;
+110E1;SORA SOMPENG LETTER NYAH;Lo;0;L;;;;;N;;;;;
+110E2;SORA SOMPENG LETTER AH;Lo;0;L;;;;;N;;;;;
+110E3;SORA SOMPENG LETTER EEH;Lo;0;L;;;;;N;;;;;
+110E4;SORA SOMPENG LETTER IH;Lo;0;L;;;;;N;;;;;
+110E5;SORA SOMPENG LETTER UH;Lo;0;L;;;;;N;;;;;
+110E6;SORA SOMPENG LETTER OH;Lo;0;L;;;;;N;;;;;
+110E7;SORA SOMPENG LETTER EH;Lo;0;L;;;;;N;;;;;
+110E8;SORA SOMPENG LETTER MAE;Lo;0;L;;;;;N;;;;;
+110F0;SORA SOMPENG DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+110F1;SORA SOMPENG DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+110F2;SORA SOMPENG DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+110F3;SORA SOMPENG DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+110F4;SORA SOMPENG DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+110F5;SORA SOMPENG DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+110F6;SORA SOMPENG DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+110F7;SORA SOMPENG DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+110F8;SORA SOMPENG DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+110F9;SORA SOMPENG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11100;CHAKMA SIGN CANDRABINDU;Mn;230;NSM;;;;;N;;;;;
+11101;CHAKMA SIGN ANUSVARA;Mn;230;NSM;;;;;N;;;;;
+11102;CHAKMA SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
+11103;CHAKMA LETTER AA;Lo;0;L;;;;;N;;;;;
+11104;CHAKMA LETTER I;Lo;0;L;;;;;N;;;;;
+11105;CHAKMA LETTER U;Lo;0;L;;;;;N;;;;;
+11106;CHAKMA LETTER E;Lo;0;L;;;;;N;;;;;
+11107;CHAKMA LETTER KAA;Lo;0;L;;;;;N;;;;;
+11108;CHAKMA LETTER KHAA;Lo;0;L;;;;;N;;;;;
+11109;CHAKMA LETTER GAA;Lo;0;L;;;;;N;;;;;
+1110A;CHAKMA LETTER GHAA;Lo;0;L;;;;;N;;;;;
+1110B;CHAKMA LETTER NGAA;Lo;0;L;;;;;N;;;;;
+1110C;CHAKMA LETTER CAA;Lo;0;L;;;;;N;;;;;
+1110D;CHAKMA LETTER CHAA;Lo;0;L;;;;;N;;;;;
+1110E;CHAKMA LETTER JAA;Lo;0;L;;;;;N;;;;;
+1110F;CHAKMA LETTER JHAA;Lo;0;L;;;;;N;;;;;
+11110;CHAKMA LETTER NYAA;Lo;0;L;;;;;N;;;;;
+11111;CHAKMA LETTER TTAA;Lo;0;L;;;;;N;;;;;
+11112;CHAKMA LETTER TTHAA;Lo;0;L;;;;;N;;;;;
+11113;CHAKMA LETTER DDAA;Lo;0;L;;;;;N;;;;;
+11114;CHAKMA LETTER DDHAA;Lo;0;L;;;;;N;;;;;
+11115;CHAKMA LETTER NNAA;Lo;0;L;;;;;N;;;;;
+11116;CHAKMA LETTER TAA;Lo;0;L;;;;;N;;;;;
+11117;CHAKMA LETTER THAA;Lo;0;L;;;;;N;;;;;
+11118;CHAKMA LETTER DAA;Lo;0;L;;;;;N;;;;;
+11119;CHAKMA LETTER DHAA;Lo;0;L;;;;;N;;;;;
+1111A;CHAKMA LETTER NAA;Lo;0;L;;;;;N;;;;;
+1111B;CHAKMA LETTER PAA;Lo;0;L;;;;;N;;;;;
+1111C;CHAKMA LETTER PHAA;Lo;0;L;;;;;N;;;;;
+1111D;CHAKMA LETTER BAA;Lo;0;L;;;;;N;;;;;
+1111E;CHAKMA LETTER BHAA;Lo;0;L;;;;;N;;;;;
+1111F;CHAKMA LETTER MAA;Lo;0;L;;;;;N;;;;;
+11120;CHAKMA LETTER YYAA;Lo;0;L;;;;;N;;;;;
+11121;CHAKMA LETTER YAA;Lo;0;L;;;;;N;;;;;
+11122;CHAKMA LETTER RAA;Lo;0;L;;;;;N;;;;;
+11123;CHAKMA LETTER LAA;Lo;0;L;;;;;N;;;;;
+11124;CHAKMA LETTER WAA;Lo;0;L;;;;;N;;;;;
+11125;CHAKMA LETTER SAA;Lo;0;L;;;;;N;;;;;
+11126;CHAKMA LETTER HAA;Lo;0;L;;;;;N;;;;;
+11127;CHAKMA VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;
+11128;CHAKMA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+11129;CHAKMA VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+1112A;CHAKMA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1112B;CHAKMA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1112C;CHAKMA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1112D;CHAKMA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1112E;CHAKMA VOWEL SIGN O;Mn;0;NSM;11131 11127;;;;N;;;;;
+1112F;CHAKMA VOWEL SIGN AU;Mn;0;NSM;11132 11127;;;;N;;;;;
+11130;CHAKMA VOWEL SIGN OI;Mn;0;NSM;;;;;N;;;;;
+11131;CHAKMA O MARK;Mn;0;NSM;;;;;N;;;;;
+11132;CHAKMA AU MARK;Mn;0;NSM;;;;;N;;;;;
+11133;CHAKMA VIRAMA;Mn;9;NSM;;;;;N;;;;;
+11134;CHAKMA MAAYYAA;Mn;9;NSM;;;;;N;;;;;
+11136;CHAKMA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+11137;CHAKMA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+11138;CHAKMA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+11139;CHAKMA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1113A;CHAKMA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1113B;CHAKMA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1113C;CHAKMA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1113D;CHAKMA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1113E;CHAKMA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1113F;CHAKMA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11140;CHAKMA SECTION MARK;Po;0;L;;;;;N;;;;;
+11141;CHAKMA DANDA;Po;0;L;;;;;N;;;;;
+11142;CHAKMA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+11143;CHAKMA QUESTION MARK;Po;0;L;;;;;N;;;;;
+11180;SHARADA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+11181;SHARADA SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+11182;SHARADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+11183;SHARADA LETTER A;Lo;0;L;;;;;N;;;;;
+11184;SHARADA LETTER AA;Lo;0;L;;;;;N;;;;;
+11185;SHARADA LETTER I;Lo;0;L;;;;;N;;;;;
+11186;SHARADA LETTER II;Lo;0;L;;;;;N;;;;;
+11187;SHARADA LETTER U;Lo;0;L;;;;;N;;;;;
+11188;SHARADA LETTER UU;Lo;0;L;;;;;N;;;;;
+11189;SHARADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1118A;SHARADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1118B;SHARADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1118C;SHARADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1118D;SHARADA LETTER E;Lo;0;L;;;;;N;;;;;
+1118E;SHARADA LETTER AI;Lo;0;L;;;;;N;;;;;
+1118F;SHARADA LETTER O;Lo;0;L;;;;;N;;;;;
+11190;SHARADA LETTER AU;Lo;0;L;;;;;N;;;;;
+11191;SHARADA LETTER KA;Lo;0;L;;;;;N;;;;;
+11192;SHARADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+11193;SHARADA LETTER GA;Lo;0;L;;;;;N;;;;;
+11194;SHARADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+11195;SHARADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+11196;SHARADA LETTER CA;Lo;0;L;;;;;N;;;;;
+11197;SHARADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+11198;SHARADA LETTER JA;Lo;0;L;;;;;N;;;;;
+11199;SHARADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+1119A;SHARADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+1119B;SHARADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+1119C;SHARADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+1119D;SHARADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+1119E;SHARADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+1119F;SHARADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+111A0;SHARADA LETTER TA;Lo;0;L;;;;;N;;;;;
+111A1;SHARADA LETTER THA;Lo;0;L;;;;;N;;;;;
+111A2;SHARADA LETTER DA;Lo;0;L;;;;;N;;;;;
+111A3;SHARADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+111A4;SHARADA LETTER NA;Lo;0;L;;;;;N;;;;;
+111A5;SHARADA LETTER PA;Lo;0;L;;;;;N;;;;;
+111A6;SHARADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+111A7;SHARADA LETTER BA;Lo;0;L;;;;;N;;;;;
+111A8;SHARADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+111A9;SHARADA LETTER MA;Lo;0;L;;;;;N;;;;;
+111AA;SHARADA LETTER YA;Lo;0;L;;;;;N;;;;;
+111AB;SHARADA LETTER RA;Lo;0;L;;;;;N;;;;;
+111AC;SHARADA LETTER LA;Lo;0;L;;;;;N;;;;;
+111AD;SHARADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+111AE;SHARADA LETTER VA;Lo;0;L;;;;;N;;;;;
+111AF;SHARADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+111B0;SHARADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+111B1;SHARADA LETTER SA;Lo;0;L;;;;;N;;;;;
+111B2;SHARADA LETTER HA;Lo;0;L;;;;;N;;;;;
+111B3;SHARADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+111B4;SHARADA VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+111B5;SHARADA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+111B6;SHARADA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+111B7;SHARADA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+111B8;SHARADA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+111B9;SHARADA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+111BA;SHARADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+111BB;SHARADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+111BC;SHARADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+111BD;SHARADA VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+111BE;SHARADA VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+111BF;SHARADA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+111C0;SHARADA SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
+111C1;SHARADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+111C2;SHARADA SIGN JIHVAMULIYA;Lo;0;L;;;;;N;;;;;
+111C3;SHARADA SIGN UPADHMANIYA;Lo;0;L;;;;;N;;;;;
+111C4;SHARADA OM;Lo;0;L;;;;;N;;;;;
+111C5;SHARADA DANDA;Po;0;L;;;;;N;;;;;
+111C6;SHARADA DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+111C7;SHARADA ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+111C8;SHARADA SEPARATOR;Po;0;L;;;;;N;;;;;
+111D0;SHARADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+111D1;SHARADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+111D2;SHARADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+111D3;SHARADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+111D4;SHARADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+111D5;SHARADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+111D6;SHARADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+111D7;SHARADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+111D8;SHARADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+111D9;SHARADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+11680;TAKRI LETTER A;Lo;0;L;;;;;N;;;;;
+11681;TAKRI LETTER AA;Lo;0;L;;;;;N;;;;;
+11682;TAKRI LETTER I;Lo;0;L;;;;;N;;;;;
+11683;TAKRI LETTER II;Lo;0;L;;;;;N;;;;;
+11684;TAKRI LETTER U;Lo;0;L;;;;;N;;;;;
+11685;TAKRI LETTER UU;Lo;0;L;;;;;N;;;;;
+11686;TAKRI LETTER E;Lo;0;L;;;;;N;;;;;
+11687;TAKRI LETTER AI;Lo;0;L;;;;;N;;;;;
+11688;TAKRI LETTER O;Lo;0;L;;;;;N;;;;;
+11689;TAKRI LETTER AU;Lo;0;L;;;;;N;;;;;
+1168A;TAKRI LETTER KA;Lo;0;L;;;;;N;;;;;
+1168B;TAKRI LETTER KHA;Lo;0;L;;;;;N;;;;;
+1168C;TAKRI LETTER GA;Lo;0;L;;;;;N;;;;;
+1168D;TAKRI LETTER GHA;Lo;0;L;;;;;N;;;;;
+1168E;TAKRI LETTER NGA;Lo;0;L;;;;;N;;;;;
+1168F;TAKRI LETTER CA;Lo;0;L;;;;;N;;;;;
+11690;TAKRI LETTER CHA;Lo;0;L;;;;;N;;;;;
+11691;TAKRI LETTER JA;Lo;0;L;;;;;N;;;;;
+11692;TAKRI LETTER JHA;Lo;0;L;;;;;N;;;;;
+11693;TAKRI LETTER NYA;Lo;0;L;;;;;N;;;;;
+11694;TAKRI LETTER TTA;Lo;0;L;;;;;N;;;;;
+11695;TAKRI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+11696;TAKRI LETTER DDA;Lo;0;L;;;;;N;;;;;
+11697;TAKRI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+11698;TAKRI LETTER NNA;Lo;0;L;;;;;N;;;;;
+11699;TAKRI LETTER TA;Lo;0;L;;;;;N;;;;;
+1169A;TAKRI LETTER THA;Lo;0;L;;;;;N;;;;;
+1169B;TAKRI LETTER DA;Lo;0;L;;;;;N;;;;;
+1169C;TAKRI LETTER DHA;Lo;0;L;;;;;N;;;;;
+1169D;TAKRI LETTER NA;Lo;0;L;;;;;N;;;;;
+1169E;TAKRI LETTER PA;Lo;0;L;;;;;N;;;;;
+1169F;TAKRI LETTER PHA;Lo;0;L;;;;;N;;;;;
+116A0;TAKRI LETTER BA;Lo;0;L;;;;;N;;;;;
+116A1;TAKRI LETTER BHA;Lo;0;L;;;;;N;;;;;
+116A2;TAKRI LETTER MA;Lo;0;L;;;;;N;;;;;
+116A3;TAKRI LETTER YA;Lo;0;L;;;;;N;;;;;
+116A4;TAKRI LETTER RA;Lo;0;L;;;;;N;;;;;
+116A5;TAKRI LETTER LA;Lo;0;L;;;;;N;;;;;
+116A6;TAKRI LETTER VA;Lo;0;L;;;;;N;;;;;
+116A7;TAKRI LETTER SHA;Lo;0;L;;;;;N;;;;;
+116A8;TAKRI LETTER SA;Lo;0;L;;;;;N;;;;;
+116A9;TAKRI LETTER HA;Lo;0;L;;;;;N;;;;;
+116AA;TAKRI LETTER RRA;Lo;0;L;;;;;N;;;;;
+116AB;TAKRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+116AC;TAKRI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+116AD;TAKRI VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+116AE;TAKRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+116AF;TAKRI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+116B0;TAKRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+116B1;TAKRI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+116B2;TAKRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+116B3;TAKRI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+116B4;TAKRI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+116B5;TAKRI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;;
+116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+116C3;TAKRI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+116C4;TAKRI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+116C5;TAKRI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+116C6;TAKRI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+116C7;TAKRI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+116C8;TAKRI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+116C9;TAKRI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;
12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;
12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;
@@ -19960,6 +20396,139 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
16A36;BAMUM LETTER PHASE-F KPA;Lo;0;L;;;;;N;;;;;
16A37;BAMUM LETTER PHASE-F SAMBA;Lo;0;L;;;;;N;;;;;
16A38;BAMUM LETTER PHASE-F VUEQ;Lo;0;L;;;;;N;;;;;
+16F00;MIAO LETTER PA;Lo;0;L;;;;;N;;;;;
+16F01;MIAO LETTER BA;Lo;0;L;;;;;N;;;;;
+16F02;MIAO LETTER YI PA;Lo;0;L;;;;;N;;;;;
+16F03;MIAO LETTER PLA;Lo;0;L;;;;;N;;;;;
+16F04;MIAO LETTER MA;Lo;0;L;;;;;N;;;;;
+16F05;MIAO LETTER MHA;Lo;0;L;;;;;N;;;;;
+16F06;MIAO LETTER ARCHAIC MA;Lo;0;L;;;;;N;;;;;
+16F07;MIAO LETTER FA;Lo;0;L;;;;;N;;;;;
+16F08;MIAO LETTER VA;Lo;0;L;;;;;N;;;;;
+16F09;MIAO LETTER VFA;Lo;0;L;;;;;N;;;;;
+16F0A;MIAO LETTER TA;Lo;0;L;;;;;N;;;;;
+16F0B;MIAO LETTER DA;Lo;0;L;;;;;N;;;;;
+16F0C;MIAO LETTER YI TTA;Lo;0;L;;;;;N;;;;;
+16F0D;MIAO LETTER YI TA;Lo;0;L;;;;;N;;;;;
+16F0E;MIAO LETTER TTA;Lo;0;L;;;;;N;;;;;
+16F0F;MIAO LETTER DDA;Lo;0;L;;;;;N;;;;;
+16F10;MIAO LETTER NA;Lo;0;L;;;;;N;;;;;
+16F11;MIAO LETTER NHA;Lo;0;L;;;;;N;;;;;
+16F12;MIAO LETTER YI NNA;Lo;0;L;;;;;N;;;;;
+16F13;MIAO LETTER ARCHAIC NA;Lo;0;L;;;;;N;;;;;
+16F14;MIAO LETTER NNA;Lo;0;L;;;;;N;;;;;
+16F15;MIAO LETTER NNHA;Lo;0;L;;;;;N;;;;;
+16F16;MIAO LETTER LA;Lo;0;L;;;;;N;;;;;
+16F17;MIAO LETTER LYA;Lo;0;L;;;;;N;;;;;
+16F18;MIAO LETTER LHA;Lo;0;L;;;;;N;;;;;
+16F19;MIAO LETTER LHYA;Lo;0;L;;;;;N;;;;;
+16F1A;MIAO LETTER TLHA;Lo;0;L;;;;;N;;;;;
+16F1B;MIAO LETTER DLHA;Lo;0;L;;;;;N;;;;;
+16F1C;MIAO LETTER TLHYA;Lo;0;L;;;;;N;;;;;
+16F1D;MIAO LETTER DLHYA;Lo;0;L;;;;;N;;;;;
+16F1E;MIAO LETTER KA;Lo;0;L;;;;;N;;;;;
+16F1F;MIAO LETTER GA;Lo;0;L;;;;;N;;;;;
+16F20;MIAO LETTER YI KA;Lo;0;L;;;;;N;;;;;
+16F21;MIAO LETTER QA;Lo;0;L;;;;;N;;;;;
+16F22;MIAO LETTER QGA;Lo;0;L;;;;;N;;;;;
+16F23;MIAO LETTER NGA;Lo;0;L;;;;;N;;;;;
+16F24;MIAO LETTER NGHA;Lo;0;L;;;;;N;;;;;
+16F25;MIAO LETTER ARCHAIC NGA;Lo;0;L;;;;;N;;;;;
+16F26;MIAO LETTER HA;Lo;0;L;;;;;N;;;;;
+16F27;MIAO LETTER XA;Lo;0;L;;;;;N;;;;;
+16F28;MIAO LETTER GHA;Lo;0;L;;;;;N;;;;;
+16F29;MIAO LETTER GHHA;Lo;0;L;;;;;N;;;;;
+16F2A;MIAO LETTER TSSA;Lo;0;L;;;;;N;;;;;
+16F2B;MIAO LETTER DZZA;Lo;0;L;;;;;N;;;;;
+16F2C;MIAO LETTER NYA;Lo;0;L;;;;;N;;;;;
+16F2D;MIAO LETTER NYHA;Lo;0;L;;;;;N;;;;;
+16F2E;MIAO LETTER TSHA;Lo;0;L;;;;;N;;;;;
+16F2F;MIAO LETTER DZHA;Lo;0;L;;;;;N;;;;;
+16F30;MIAO LETTER YI TSHA;Lo;0;L;;;;;N;;;;;
+16F31;MIAO LETTER YI DZHA;Lo;0;L;;;;;N;;;;;
+16F32;MIAO LETTER REFORMED TSHA;Lo;0;L;;;;;N;;;;;
+16F33;MIAO LETTER SHA;Lo;0;L;;;;;N;;;;;
+16F34;MIAO LETTER SSA;Lo;0;L;;;;;N;;;;;
+16F35;MIAO LETTER ZHA;Lo;0;L;;;;;N;;;;;
+16F36;MIAO LETTER ZSHA;Lo;0;L;;;;;N;;;;;
+16F37;MIAO LETTER TSA;Lo;0;L;;;;;N;;;;;
+16F38;MIAO LETTER DZA;Lo;0;L;;;;;N;;;;;
+16F39;MIAO LETTER YI TSA;Lo;0;L;;;;;N;;;;;
+16F3A;MIAO LETTER SA;Lo;0;L;;;;;N;;;;;
+16F3B;MIAO LETTER ZA;Lo;0;L;;;;;N;;;;;
+16F3C;MIAO LETTER ZSA;Lo;0;L;;;;;N;;;;;
+16F3D;MIAO LETTER ZZA;Lo;0;L;;;;;N;;;;;
+16F3E;MIAO LETTER ZZSA;Lo;0;L;;;;;N;;;;;
+16F3F;MIAO LETTER ARCHAIC ZZA;Lo;0;L;;;;;N;;;;;
+16F40;MIAO LETTER ZZYA;Lo;0;L;;;;;N;;;;;
+16F41;MIAO LETTER ZZSYA;Lo;0;L;;;;;N;;;;;
+16F42;MIAO LETTER WA;Lo;0;L;;;;;N;;;;;
+16F43;MIAO LETTER AH;Lo;0;L;;;;;N;;;;;
+16F44;MIAO LETTER HHA;Lo;0;L;;;;;N;;;;;
+16F50;MIAO LETTER NASALIZATION;Lo;0;L;;;;;N;;;;;
+16F51;MIAO SIGN ASPIRATION;Mc;0;L;;;;;N;;;;;
+16F52;MIAO SIGN REFORMED VOICING;Mc;0;L;;;;;N;;;;;
+16F53;MIAO SIGN REFORMED ASPIRATION;Mc;0;L;;;;;N;;;;;
+16F54;MIAO VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+16F55;MIAO VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+16F56;MIAO VOWEL SIGN AHH;Mc;0;L;;;;;N;;;;;
+16F57;MIAO VOWEL SIGN AN;Mc;0;L;;;;;N;;;;;
+16F58;MIAO VOWEL SIGN ANG;Mc;0;L;;;;;N;;;;;
+16F59;MIAO VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+16F5A;MIAO VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+16F5B;MIAO VOWEL SIGN WO;Mc;0;L;;;;;N;;;;;
+16F5C;MIAO VOWEL SIGN W;Mc;0;L;;;;;N;;;;;
+16F5D;MIAO VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+16F5E;MIAO VOWEL SIGN EN;Mc;0;L;;;;;N;;;;;
+16F5F;MIAO VOWEL SIGN ENG;Mc;0;L;;;;;N;;;;;
+16F60;MIAO VOWEL SIGN OEY;Mc;0;L;;;;;N;;;;;
+16F61;MIAO VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+16F62;MIAO VOWEL SIGN IA;Mc;0;L;;;;;N;;;;;
+16F63;MIAO VOWEL SIGN IAN;Mc;0;L;;;;;N;;;;;
+16F64;MIAO VOWEL SIGN IANG;Mc;0;L;;;;;N;;;;;
+16F65;MIAO VOWEL SIGN IO;Mc;0;L;;;;;N;;;;;
+16F66;MIAO VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+16F67;MIAO VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+16F68;MIAO VOWEL SIGN IU;Mc;0;L;;;;;N;;;;;
+16F69;MIAO VOWEL SIGN ING;Mc;0;L;;;;;N;;;;;
+16F6A;MIAO VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+16F6B;MIAO VOWEL SIGN UA;Mc;0;L;;;;;N;;;;;
+16F6C;MIAO VOWEL SIGN UAN;Mc;0;L;;;;;N;;;;;
+16F6D;MIAO VOWEL SIGN UANG;Mc;0;L;;;;;N;;;;;
+16F6E;MIAO VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+16F6F;MIAO VOWEL SIGN UEI;Mc;0;L;;;;;N;;;;;
+16F70;MIAO VOWEL SIGN UNG;Mc;0;L;;;;;N;;;;;
+16F71;MIAO VOWEL SIGN Y;Mc;0;L;;;;;N;;;;;
+16F72;MIAO VOWEL SIGN YI;Mc;0;L;;;;;N;;;;;
+16F73;MIAO VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+16F74;MIAO VOWEL SIGN AEE;Mc;0;L;;;;;N;;;;;
+16F75;MIAO VOWEL SIGN ERR;Mc;0;L;;;;;N;;;;;
+16F76;MIAO VOWEL SIGN ROUNDED ERR;Mc;0;L;;;;;N;;;;;
+16F77;MIAO VOWEL SIGN ER;Mc;0;L;;;;;N;;;;;
+16F78;MIAO VOWEL SIGN ROUNDED ER;Mc;0;L;;;;;N;;;;;
+16F79;MIAO VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+16F7A;MIAO VOWEL SIGN EI;Mc;0;L;;;;;N;;;;;
+16F7B;MIAO VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+16F7C;MIAO VOWEL SIGN OU;Mc;0;L;;;;;N;;;;;
+16F7D;MIAO VOWEL SIGN N;Mc;0;L;;;;;N;;;;;
+16F7E;MIAO VOWEL SIGN NG;Mc;0;L;;;;;N;;;;;
+16F8F;MIAO TONE RIGHT;Mn;0;NSM;;;;;N;;;;;
+16F90;MIAO TONE TOP RIGHT;Mn;0;NSM;;;;;N;;;;;
+16F91;MIAO TONE ABOVE;Mn;0;NSM;;;;;N;;;;;
+16F92;MIAO TONE BELOW;Mn;0;NSM;;;;;N;;;;;
+16F93;MIAO LETTER TONE-2;Lm;0;L;;;;;N;;;;;
+16F94;MIAO LETTER TONE-3;Lm;0;L;;;;;N;;;;;
+16F95;MIAO LETTER TONE-4;Lm;0;L;;;;;N;;;;;
+16F96;MIAO LETTER TONE-5;Lm;0;L;;;;;N;;;;;
+16F97;MIAO LETTER TONE-6;Lm;0;L;;;;;N;;;;;
+16F98;MIAO LETTER TONE-7;Lm;0;L;;;;;N;;;;;
+16F99;MIAO LETTER TONE-8;Lm;0;L;;;;;N;;;;;
+16F9A;MIAO LETTER REFORMED TONE-1;Lm;0;L;;;;;N;;;;;
+16F9B;MIAO LETTER REFORMED TONE-2;Lm;0;L;;;;;N;;;;;
+16F9C;MIAO LETTER REFORMED TONE-4;Lm;0;L;;;;;N;;;;;
+16F9D;MIAO LETTER REFORMED TONE-5;Lm;0;L;;;;;N;;;;;
+16F9E;MIAO LETTER REFORMED TONE-6;Lm;0;L;;;;;N;;;;;
+16F9F;MIAO LETTER REFORMED TONE-8;Lm;0;L;;;;;N;;;;;
1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;;
1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;;
1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
@@ -21599,6 +22168,149 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;;
1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;;
1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;;
+1EE00;ARABIC MATHEMATICAL ALEF;Lo;0;AL; 0627;;;;N;;;;;
+1EE01;ARABIC MATHEMATICAL BEH;Lo;0;AL; 0628;;;;N;;;;;
+1EE02;ARABIC MATHEMATICAL JEEM;Lo;0;AL; 062C;;;;N;;;;;
+1EE03;ARABIC MATHEMATICAL DAL;Lo;0;AL; 062F;;;;N;;;;;
+1EE05;ARABIC MATHEMATICAL WAW;Lo;0;AL; 0648;;;;N;;;;;
+1EE06;ARABIC MATHEMATICAL ZAIN;Lo;0;AL; 0632;;;;N;;;;;
+1EE07;ARABIC MATHEMATICAL HAH;Lo;0;AL; 062D;;;;N;;;;;
+1EE08;ARABIC MATHEMATICAL TAH;Lo;0;AL; 0637;;;;N;;;;;
+1EE09;ARABIC MATHEMATICAL YEH;Lo;0;AL; 064A;;;;N;;;;;
+1EE0A;ARABIC MATHEMATICAL KAF;Lo;0;AL; 0643;;;;N;;;;;
+1EE0B;ARABIC MATHEMATICAL LAM;Lo;0;AL; 0644;;;;N;;;;;
+1EE0C;ARABIC MATHEMATICAL MEEM;Lo;0;AL; 0645;;;;N;;;;;
+1EE0D;ARABIC MATHEMATICAL NOON;Lo;0;AL; 0646;;;;N;;;;;
+1EE0E;ARABIC MATHEMATICAL SEEN;Lo;0;AL; 0633;;;;N;;;;;
+1EE0F;ARABIC MATHEMATICAL AIN;Lo;0;AL; 0639;;;;N;;;;;
+1EE10;ARABIC MATHEMATICAL FEH;Lo;0;AL; 0641;;;;N;;;;;
+1EE11;ARABIC MATHEMATICAL SAD;Lo;0;AL; 0635;;;;N;;;;;
+1EE12;ARABIC MATHEMATICAL QAF;Lo;0;AL; 0642;;;;N;;;;;
+1EE13;ARABIC MATHEMATICAL REH;Lo;0;AL; 0631;;;;N;;;;;
+1EE14;ARABIC MATHEMATICAL SHEEN;Lo;0;AL; 0634;;;;N;;;;;
+1EE15;ARABIC MATHEMATICAL TEH;Lo;0;AL; 062A;;;;N;;;;;
+1EE16;ARABIC MATHEMATICAL THEH;Lo;0;AL; 062B;;;;N;;;;;
+1EE17;ARABIC MATHEMATICAL KHAH;Lo;0;AL; 062E;;;;N;;;;;
+1EE18;ARABIC MATHEMATICAL THAL;Lo;0;AL; 0630;;;;N;;;;;
+1EE19;ARABIC MATHEMATICAL DAD;Lo;0;AL; 0636;;;;N;;;;;
+1EE1A;ARABIC MATHEMATICAL ZAH;Lo;0;AL; 0638;;;;N;;;;;
+1EE1B;ARABIC MATHEMATICAL GHAIN;Lo;0;AL; 063A;;;;N;;;;;
+1EE1C;ARABIC MATHEMATICAL DOTLESS BEH;Lo;0;AL; 066E;;;;N;;;;;
+1EE1D;ARABIC MATHEMATICAL DOTLESS NOON;Lo;0;AL; 06BA;;;;N;;;;;
+1EE1E;ARABIC MATHEMATICAL DOTLESS FEH;Lo;0;AL; 06A1;;;;N;;;;;
+1EE1F;ARABIC MATHEMATICAL DOTLESS QAF;Lo;0;AL; 066F;;;;N;;;;;
+1EE21;ARABIC MATHEMATICAL INITIAL BEH;Lo;0;AL; 0628;;;;N;;;;;
+1EE22;ARABIC MATHEMATICAL INITIAL JEEM;Lo;0;AL; 062C;;;;N;;;;;
+1EE24;ARABIC MATHEMATICAL INITIAL HEH;Lo;0;AL; 0647;;;;N;;;;;
+1EE27;ARABIC MATHEMATICAL INITIAL HAH;Lo;0;AL; 062D;;;;N;;;;;
+1EE29;ARABIC MATHEMATICAL INITIAL YEH;Lo;0;AL; 064A;;;;N;;;;;
+1EE2A;ARABIC MATHEMATICAL INITIAL KAF;Lo;0;AL; 0643;;;;N;;;;;
+1EE2B;ARABIC MATHEMATICAL INITIAL LAM;Lo;0;AL; 0644;;;;N;;;;;
+1EE2C;ARABIC MATHEMATICAL INITIAL MEEM;Lo;0;AL; 0645;;;;N;;;;;
+1EE2D;ARABIC MATHEMATICAL INITIAL NOON;Lo;0;AL; 0646;;;;N;;;;;
+1EE2E;ARABIC MATHEMATICAL INITIAL SEEN;Lo;0;AL; 0633;;;;N;;;;;
+1EE2F;ARABIC MATHEMATICAL INITIAL AIN;Lo;0;AL; 0639;;;;N;;;;;
+1EE30;ARABIC MATHEMATICAL INITIAL FEH;Lo;0;AL; 0641;;;;N;;;;;
+1EE31;ARABIC MATHEMATICAL INITIAL SAD;Lo;0;AL; 0635;;;;N;;;;;
+1EE32;ARABIC MATHEMATICAL INITIAL QAF;Lo;0;AL; 0642;;;;N;;;;;
+1EE34;ARABIC MATHEMATICAL INITIAL SHEEN;Lo;0;AL; 0634;;;;N;;;;;
+1EE35;ARABIC MATHEMATICAL INITIAL TEH;Lo;0;AL; 062A;;;;N;;;;;
+1EE36;ARABIC MATHEMATICAL INITIAL THEH;Lo;0;AL; 062B;;;;N;;;;;
+1EE37;ARABIC MATHEMATICAL INITIAL KHAH;Lo;0;AL; 062E;;;;N;;;;;
+1EE39;ARABIC MATHEMATICAL INITIAL DAD;Lo;0;AL; 0636;;;;N;;;;;
+1EE3B;ARABIC MATHEMATICAL INITIAL GHAIN;Lo;0;AL; 063A;;;;N;;;;;
+1EE42;ARABIC MATHEMATICAL TAILED JEEM;Lo;0;AL; 062C;;;;N;;;;;
+1EE47;ARABIC MATHEMATICAL TAILED HAH;Lo;0;AL; 062D;;;;N;;;;;
+1EE49;ARABIC MATHEMATICAL TAILED YEH;Lo;0;AL; 064A;;;;N;;;;;
+1EE4B;ARABIC MATHEMATICAL TAILED LAM;Lo;0;AL; 0644;;;;N;;;;;
+1EE4D;ARABIC MATHEMATICAL TAILED NOON;Lo;0;AL; 0646;;;;N;;;;;
+1EE4E;ARABIC MATHEMATICAL TAILED SEEN;Lo;0;AL; 0633;;;;N;;;;;
+1EE4F;ARABIC MATHEMATICAL TAILED AIN;Lo;0;AL; 0639;;;;N;;;;;
+1EE51;ARABIC MATHEMATICAL TAILED SAD;Lo;0;AL; 0635;;;;N;;;;;
+1EE52;ARABIC MATHEMATICAL TAILED QAF;Lo;0;AL; 0642;;;;N;;;;;
+1EE54;ARABIC MATHEMATICAL TAILED SHEEN;Lo;0;AL; 0634;;;;N;;;;;
+1EE57;ARABIC MATHEMATICAL TAILED KHAH;Lo;0;AL; 062E;;;;N;;;;;
+1EE59;ARABIC MATHEMATICAL TAILED DAD;Lo;0;AL; 0636;;;;N;;;;;
+1EE5B;ARABIC MATHEMATICAL TAILED GHAIN;Lo;0;AL; 063A;;;;N;;;;;
+1EE5D;ARABIC MATHEMATICAL TAILED DOTLESS NOON;Lo;0;AL; 06BA;;;;N;;;;;
+1EE5F;ARABIC MATHEMATICAL TAILED DOTLESS QAF;Lo;0;AL; 066F;;;;N;;;;;
+1EE61;ARABIC MATHEMATICAL STRETCHED BEH;Lo;0;AL; 0628;;;;N;;;;;
+1EE62;ARABIC MATHEMATICAL STRETCHED JEEM;Lo;0;AL; 062C;;;;N;;;;;
+1EE64;ARABIC MATHEMATICAL STRETCHED HEH;Lo;0;AL; 0647;;;;N;;;;;
+1EE67;ARABIC MATHEMATICAL STRETCHED HAH;Lo;0;AL; 062D;;;;N;;;;;
+1EE68;ARABIC MATHEMATICAL STRETCHED TAH;Lo;0;AL; 0637;;;;N;;;;;
+1EE69;ARABIC MATHEMATICAL STRETCHED YEH;Lo;0;AL; 064A;;;;N;;;;;
+1EE6A;ARABIC MATHEMATICAL STRETCHED KAF;Lo;0;AL; 0643;;;;N;;;;;
+1EE6C;ARABIC MATHEMATICAL STRETCHED MEEM;Lo;0;AL; 0645;;;;N;;;;;
+1EE6D;ARABIC MATHEMATICAL STRETCHED NOON;Lo;0;AL; 0646;;;;N;;;;;
+1EE6E;ARABIC MATHEMATICAL STRETCHED SEEN;Lo;0;AL; 0633;;;;N;;;;;
+1EE6F;ARABIC MATHEMATICAL STRETCHED AIN;Lo;0;AL; 0639;;;;N;;;;;
+1EE70;ARABIC MATHEMATICAL STRETCHED FEH;Lo;0;AL; 0641;;;;N;;;;;
+1EE71;ARABIC MATHEMATICAL STRETCHED SAD;Lo;0;AL; 0635;;;;N;;;;;
+1EE72;ARABIC MATHEMATICAL STRETCHED QAF;Lo;0;AL; 0642;;;;N;;;;;
+1EE74;ARABIC MATHEMATICAL STRETCHED SHEEN;Lo;0;AL; 0634;;;;N;;;;;
+1EE75;ARABIC MATHEMATICAL STRETCHED TEH;Lo;0;AL; 062A;;;;N;;;;;
+1EE76;ARABIC MATHEMATICAL STRETCHED THEH;Lo;0;AL; 062B;;;;N;;;;;
+1EE77;ARABIC MATHEMATICAL STRETCHED KHAH;Lo;0;AL; 062E;;;;N;;;;;
+1EE79;ARABIC MATHEMATICAL STRETCHED DAD;Lo;0;AL; 0636;;;;N;;;;;
+1EE7A;ARABIC MATHEMATICAL STRETCHED ZAH;Lo;0;AL; 0638;;;;N;;;;;
+1EE7B;ARABIC MATHEMATICAL STRETCHED GHAIN;Lo;0;AL; 063A;;;;N;;;;;
+1EE7C;ARABIC MATHEMATICAL STRETCHED DOTLESS BEH;Lo;0;AL; 066E;;;;N;;;;;
+1EE7E;ARABIC MATHEMATICAL STRETCHED DOTLESS FEH;Lo;0;AL; 06A1;;;;N;;;;;
+1EE80;ARABIC MATHEMATICAL LOOPED ALEF;Lo;0;AL; 0627;;;;N;;;;;
+1EE81;ARABIC MATHEMATICAL LOOPED BEH;Lo;0;AL; 0628;;;;N;;;;;
+1EE82;ARABIC MATHEMATICAL LOOPED JEEM;Lo;0;AL; 062C;;;;N;;;;;
+1EE83;ARABIC MATHEMATICAL LOOPED DAL;Lo;0;AL; 062F;;;;N;;;;;
+1EE84;ARABIC MATHEMATICAL LOOPED HEH;Lo;0;AL; 0647;;;;N;;;;;
+1EE85;ARABIC MATHEMATICAL LOOPED WAW;Lo;0;AL; 0648;;;;N;;;;;
+1EE86;ARABIC MATHEMATICAL LOOPED ZAIN;Lo;0;AL; 0632;;;;N;;;;;
+1EE87;ARABIC MATHEMATICAL LOOPED HAH;Lo;0;AL; 062D;;;;N;;;;;
+1EE88;ARABIC MATHEMATICAL LOOPED TAH;Lo;0;AL; 0637;;;;N;;;;;
+1EE89;ARABIC MATHEMATICAL LOOPED YEH;Lo;0;AL; 064A;;;;N;;;;;
+1EE8B;ARABIC MATHEMATICAL LOOPED LAM;Lo;0;AL; 0644;;;;N;;;;;
+1EE8C;ARABIC MATHEMATICAL LOOPED MEEM;Lo;0;AL; 0645;;;;N;;;;;
+1EE8D;ARABIC MATHEMATICAL LOOPED NOON;Lo;0;AL; 0646;;;;N;;;;;
+1EE8E;ARABIC MATHEMATICAL LOOPED SEEN;Lo;0;AL; 0633;;;;N;;;;;
+1EE8F;ARABIC MATHEMATICAL LOOPED AIN;Lo;0;AL; 0639;;;;N;;;;;
+1EE90;ARABIC MATHEMATICAL LOOPED FEH;Lo;0;AL; 0641;;;;N;;;;;
+1EE91;ARABIC MATHEMATICAL LOOPED SAD;Lo;0;AL; 0635;;;;N;;;;;
+1EE92;ARABIC MATHEMATICAL LOOPED QAF;Lo;0;AL; 0642;;;;N;;;;;
+1EE93;ARABIC MATHEMATICAL LOOPED REH;Lo;0;AL; 0631;;;;N;;;;;
+1EE94;ARABIC MATHEMATICAL LOOPED SHEEN;Lo;0;AL; 0634;;;;N;;;;;
+1EE95;ARABIC MATHEMATICAL LOOPED TEH;Lo;0;AL; 062A;;;;N;;;;;
+1EE96;ARABIC MATHEMATICAL LOOPED THEH;Lo;0;AL; 062B;;;;N;;;;;
+1EE97;ARABIC MATHEMATICAL LOOPED KHAH;Lo;0;AL; 062E;;;;N;;;;;
+1EE98;ARABIC MATHEMATICAL LOOPED THAL;Lo;0;AL; 0630;;;;N;;;;;
+1EE99;ARABIC MATHEMATICAL LOOPED DAD;Lo;0;AL; 0636;;;;N;;;;;
+1EE9A;ARABIC MATHEMATICAL LOOPED ZAH;Lo;0;AL; 0638;;;;N;;;;;
+1EE9B;ARABIC MATHEMATICAL LOOPED GHAIN;Lo;0;AL; 063A;;;;N;;;;;
+1EEA1;ARABIC MATHEMATICAL DOUBLE-STRUCK BEH;Lo;0;AL; 0628;;;;N;;;;;
+1EEA2;ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM;Lo;0;AL; 062C;;;;N;;;;;
+1EEA3;ARABIC MATHEMATICAL DOUBLE-STRUCK DAL;Lo;0;AL; 062F;;;;N;;;;;
+1EEA5;ARABIC MATHEMATICAL DOUBLE-STRUCK WAW;Lo;0;AL; 0648;;;;N;;;;;
+1EEA6;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN;Lo;0;AL; 0632;;;;N;;;;;
+1EEA7;ARABIC MATHEMATICAL DOUBLE-STRUCK HAH;Lo;0;AL; 062D;;;;N;;;;;
+1EEA8;ARABIC MATHEMATICAL DOUBLE-STRUCK TAH;Lo;0;AL; 0637;;;;N;;;;;
+1EEA9;ARABIC MATHEMATICAL DOUBLE-STRUCK YEH;Lo;0;AL; 064A;;;;N;;;;;
+1EEAB;ARABIC MATHEMATICAL DOUBLE-STRUCK LAM;Lo;0;AL; 0644;;;;N;;;;;
+1EEAC;ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM;Lo;0;AL; 0645;;;;N;;;;;
+1EEAD;ARABIC MATHEMATICAL DOUBLE-STRUCK NOON;Lo;0;AL; 0646;;;;N;;;;;
+1EEAE;ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN;Lo;0;AL; 0633;;;;N;;;;;
+1EEAF;ARABIC MATHEMATICAL DOUBLE-STRUCK AIN;Lo;0;AL; 0639;;;;N;;;;;
+1EEB0;ARABIC MATHEMATICAL DOUBLE-STRUCK FEH;Lo;0;AL; 0641;;;;N;;;;;
+1EEB1;ARABIC MATHEMATICAL DOUBLE-STRUCK SAD;Lo;0;AL; 0635;;;;N;;;;;
+1EEB2;ARABIC MATHEMATICAL DOUBLE-STRUCK QAF;Lo;0;AL; 0642;;;;N;;;;;
+1EEB3;ARABIC MATHEMATICAL DOUBLE-STRUCK REH;Lo;0;AL; 0631;;;;N;;;;;
+1EEB4;ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN;Lo;0;AL; 0634;;;;N;;;;;
+1EEB5;ARABIC MATHEMATICAL DOUBLE-STRUCK TEH;Lo;0;AL; 062A;;;;N;;;;;
+1EEB6;ARABIC MATHEMATICAL DOUBLE-STRUCK THEH;Lo;0;AL; 062B;;;;N;;;;;
+1EEB7;ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH;Lo;0;AL; 062E;;;;N;;;;;
+1EEB8;ARABIC MATHEMATICAL DOUBLE-STRUCK THAL;Lo;0;AL; 0630;;;;N;;;;;
+1EEB9;ARABIC MATHEMATICAL DOUBLE-STRUCK DAD;Lo;0;AL; 0636;;;;N;;;;;
+1EEBA;ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH;Lo;0;AL; 0638;;;;N;;;;;
+1EEBB;ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN;Lo;0;AL; 063A;;;;N;;;;;
+1EEF0;ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL;Sm;0;ON;;;;;N;;;;;
+1EEF1;ARABIC MATHEMATICAL OPERATOR HAH WITH DAL;Sm;0;ON;;;;;N;;;;;
1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;;
1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;;
1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;;
@@ -21902,6 +22614,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F167;NEGATIVE CIRCLED LATIN CAPITAL LETTER X;So;0;L;;;;;N;;;;;
1F168;NEGATIVE CIRCLED LATIN CAPITAL LETTER Y;So;0;L;;;;;N;;;;;
1F169;NEGATIVE CIRCLED LATIN CAPITAL LETTER Z;So;0;L;;;;;N;;;;;
+1F16A;RAISED MC SIGN;So;0;ON; 004D 0043;;;;N;;;;;
+1F16B;RAISED MD SIGN;So;0;ON; 004D 0044;;;;N;;;;;
1F170;NEGATIVE SQUARED LATIN CAPITAL LETTER A;So;0;L;;;;;N;;;;;
1F171;NEGATIVE SQUARED LATIN CAPITAL LETTER B;So;0;L;;;;;N;;;;;
1F172;NEGATIVE SQUARED LATIN CAPITAL LETTER C;So;0;L;;;;;N;;;;;
@@ -22354,7 +23068,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F489;SYRINGE;So;0;ON;;;;;N;;;;;
1F48A;PILL;So;0;ON;;;;;N;;;;;
1F48B;KISS MARK;So;0;ON;;;;;N;;;;;
-1F48C;LOVE LETTER;So;0;L;;;;;N;;;;;
+1F48C;LOVE LETTER;So;0;ON;;;;;N;;;;;
1F48D;RING;So;0;ON;;;;;N;;;;;
1F48E;GEM STONE;So;0;ON;;;;;N;;;;;
1F48F;KISS;So;0;ON;;;;;N;;;;;
@@ -22502,7 +23216,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F521;INPUT SYMBOL FOR LATIN SMALL LETTERS;So;0;ON;;;;;N;;;;;
1F522;INPUT SYMBOL FOR NUMBERS;So;0;ON;;;;;N;;;;;
1F523;INPUT SYMBOL FOR SYMBOLS;So;0;ON;;;;;N;;;;;
-1F524;INPUT SYMBOL FOR LATIN LETTERS;So;0;L;;;;;N;;;;;
+1F524;INPUT SYMBOL FOR LATIN LETTERS;So;0;ON;;;;;N;;;;;
1F525;FIRE;So;0;ON;;;;;N;;;;;
1F526;ELECTRIC TORCH;So;0;ON;;;;;N;;;;;
1F527;WRENCH;So;0;ON;;;;;N;;;;;
@@ -22528,6 +23242,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F53B;DOWN-POINTING RED TRIANGLE;So;0;ON;;;;;N;;;;;
1F53C;UP-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;;
1F53D;DOWN-POINTING SMALL RED TRIANGLE;So;0;ON;;;;;N;;;;;
+1F540;CIRCLED CROSS POMMEE;So;0;ON;;;;;N;;;;;
+1F541;CROSS POMMEE WITH HALF-CIRCLE BELOW;So;0;ON;;;;;N;;;;;
+1F542;CROSS POMMEE;So;0;ON;;;;;N;;;;;
+1F543;NOTCHED LEFT SEMICIRCLE WITH THREE DOTS;So;0;ON;;;;;N;;;;;
1F550;CLOCK FACE ONE OCLOCK;So;0;ON;;;;;N;;;;;
1F551;CLOCK FACE TWO OCLOCK;So;0;ON;;;;;N;;;;;
1F552;CLOCK FACE THREE OCLOCK;So;0;ON;;;;;N;;;;;
@@ -22557,6 +23275,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F5FD;STATUE OF LIBERTY;So;0;ON;;;;;N;;;;;
1F5FE;SILHOUETTE OF JAPAN;So;0;ON;;;;;N;;;;;
1F5FF;MOYAI;So;0;ON;;;;;N;;;;;
+1F600;GRINNING FACE;So;0;ON;;;;;N;;;;;
1F601;GRINNING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;
1F602;FACE WITH TEARS OF JOY;So;0;ON;;;;;N;;;;;
1F603;SMILING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
@@ -22573,30 +23292,42 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
1F60E;SMILING FACE WITH SUNGLASSES;So;0;ON;;;;;N;;;;;
1F60F;SMIRKING FACE;So;0;ON;;;;;N;;;;;
1F610;NEUTRAL FACE;So;0;ON;;;;;N;;;;;
+1F611;EXPRESSIONLESS FACE;So;0;ON;;;;;N;;;;;
1F612;UNAMUSED FACE;So;0;ON;;;;;N;;;;;
1F613;FACE WITH COLD SWEAT;So;0;ON;;;;;N;;;;;
1F614;PENSIVE FACE;So;0;ON;;;;;N;;;;;
+1F615;CONFUSED FACE;So;0;ON;;;;;N;;;;;
1F616;CONFOUNDED FACE;So;0;ON;;;;;N;;;;;
+1F617;KISSING FACE;So;0;ON;;;;;N;;;;;
1F618;FACE THROWING A KISS;So;0;ON;;;;;N;;;;;
+1F619;KISSING FACE WITH SMILING EYES;So;0;ON;;;;;N;;;;;
1F61A;KISSING FACE WITH CLOSED EYES;So;0;ON;;;;;N;;;;;
+1F61B;FACE WITH STUCK-OUT TONGUE;So;0;ON;;;;;N;;;;;
1F61C;FACE WITH STUCK-OUT TONGUE AND WINKING EYE;So;0;ON;;;;;N;;;;;
1F61D;FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES;So;0;ON;;;;;N;;;;;
1F61E;DISAPPOINTED FACE;So;0;ON;;;;;N;;;;;
+1F61F;WORRIED FACE;So;0;ON;;;;;N;;;;;
1F620;ANGRY FACE;So;0;ON;;;;;N;;;;;
1F621;POUTING FACE;So;0;ON;;;;;N;;;;;
1F622;CRYING FACE;So;0;ON;;;;;N;;;;;
1F623;PERSEVERING FACE;So;0;ON;;;;;N;;;;;
1F624;FACE WITH LOOK OF TRIUMPH;So;0;ON;;;;;N;;;;;
1F625;DISAPPOINTED BUT RELIEVED FACE;So;0;ON;;;;;N;;;;;
+1F626;FROWNING FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
+1F627;ANGUISHED FACE;So;0;ON;;;;;N;;;;;
1F628;FEARFUL FACE;So;0;ON;;;;;N;;;;;
1F629;WEARY FACE;So;0;ON;;;;;N;;;;;
1F62A;SLEEPY FACE;So;0;ON;;;;;N;;;;;
1F62B;TIRED FACE;So;0;ON;;;;;N;;;;;
+1F62C;GRIMACING FACE;So;0;ON;;;;;N;;;;;
1F62D;LOUDLY CRYING FACE;So;0;ON;;;;;N;;;;;
+1F62E;FACE WITH OPEN MOUTH;So;0;ON;;;;;N;;;;;
+1F62F;HUSHED FACE;So;0;ON;;;;;N;;;;;
1F630;FACE WITH OPEN MOUTH AND COLD SWEAT;So;0;ON;;;;;N;;;;;
1F631;FACE SCREAMING IN FEAR;So;0;ON;;;;;N;;;;;
1F632;ASTONISHED FACE;So;0;ON;;;;;N;;;;;
1F633;FLUSHED FACE;So;0;ON;;;;;N;;;;;
+1F634;SLEEPING FACE;So;0;ON;;;;;N;;;;;
1F635;DIZZY FACE;So;0;ON;;;;;N;;;;;
1F636;FACE WITHOUT MOUTH;So;0;ON;;;;;N;;;;;
1F637;FACE WITH MEDICAL MASK;So;0;ON;;;;;N;;;;;
diff --git a/jdk/make/tools/UnicodeData/VERSION b/jdk/make/tools/UnicodeData/VERSION
index 09b254e90c6..dfda3e0b4f0 100644
--- a/jdk/make/tools/UnicodeData/VERSION
+++ b/jdk/make/tools/UnicodeData/VERSION
@@ -1 +1 @@
-6.0.0
+6.1.0
diff --git a/jdk/make/tools/src/build/tools/compileproperties/CompileProperties.java b/jdk/make/tools/src/build/tools/compileproperties/CompileProperties.java
index cf9f4510263..e7320de7660 100644
--- a/jdk/make/tools/src/build/tools/compileproperties/CompileProperties.java
+++ b/jdk/make/tools/src/build/tools/compileproperties/CompileProperties.java
@@ -90,6 +90,7 @@ public class CompileProperties {
private static String outfiles[] ;
private static String supers[] ;
private static int compileCount = 0;
+ private static boolean quiet = false;
private static boolean parseOptions(String args[]) {
boolean ok = true;
@@ -114,21 +115,21 @@ public class CompileProperties {
outfiles[compileCount] = args[++i];
supers[compileCount] = args[++i];
compileCount++;
- } else if ( "-optionsfile".equals(args[i]) && i+1 < args.length ) {
- String filename = args[++i];
+ } else if ( args[i].charAt(0) == '@') {
+ String filename = args[i].substring(1);
FileInputStream finput = null;
byte contents[] = null;
try {
finput = new FileInputStream(filename);
int byteCount = finput.available();
if ( byteCount <= 0 ) {
- error("The -optionsfile file is empty", null);
+ error("The @file is empty", null);
ok = false;
} else {
contents = new byte[byteCount];
int bytesRead = finput.read(contents);
if ( byteCount != bytesRead ) {
- error("Cannot read all of -optionsfile file", null);
+ error("Cannot read all of @file", null);
ok = false;
}
}
@@ -144,7 +145,7 @@ public class CompileProperties {
error("cannot close " + filename, e);
}
}
- if ( ok = true && contents != null ) {
+ if ( ok && contents != null ) {
String tokens[] = (new String(contents)).split("\\s+");
if ( tokens.length > 0 ) {
ok = parseOptions(tokens);
@@ -163,6 +164,13 @@ public class CompileProperties {
public static void main(String[] args) {
boolean ok = true;
+ if (args.length >= 1 && args[0].equals("-quiet"))
+ {
+ quiet = true;
+ String[] newargs = new String[args.length-1];
+ System.arraycopy(args, 1, newargs, 0, newargs.length);
+ args = newargs;
+ }
/* Original usage */
if (args.length == 2 && args[0].charAt(0) != '-' ) {
ok = createFile(args[0], args[1], "ListResourceBundle");
@@ -197,18 +205,20 @@ public class CompileProperties {
System.err.println("usage:");
System.err.println(" java -jar compileproperties.jar path_to_properties_file path_to_java_output_file [super_class]");
System.err.println(" -OR-");
- System.err.println(" java -jar compileproperties.jar {-compile path_to_properties_file path_to_java_output_file super_class} -or- -optionsfile filename");
+ System.err.println(" java -jar compileproperties.jar {-compile path_to_properties_file path_to_java_output_file super_class} -or- @filename");
System.err.println("");
System.err.println("Example:");
System.err.println(" java -jar compileproperties.jar -compile test.properties test.java ListResourceBundle");
- System.err.println(" java -jar compileproperties.jar -optionsfile option_file");
+ System.err.println(" java -jar compileproperties.jar @option_file");
System.err.println("option_file contains: -compile test.properties test.java ListResourceBundle");
}
private static boolean createFile(String propertiesPath, String outputPath,
String superClass) {
boolean ok = true;
- System.out.println("parsing: " + propertiesPath);
+ if (!quiet) {
+ System.out.println("parsing: " + propertiesPath);
+ }
Properties p = new Properties();
try {
p.load(new FileInputStream(propertiesPath));
@@ -221,7 +231,9 @@ public class CompileProperties {
}
if ( ok ) {
String packageName = inferPackageName(propertiesPath, outputPath);
- System.out.println("inferred package name: " + packageName);
+ if (!quiet) {
+ System.out.println("inferred package name: " + packageName);
+ }
List sortedKeys = new ArrayList<>();
for ( Object key : p.keySet() ) {
sortedKeys.add((String)key);
@@ -276,7 +288,9 @@ public class CompileProperties {
error("IO error close " + outputPath, e);
}
}
- System.out.println("wrote: " + outputPath);
+ if (!quiet) {
+ System.out.println("wrote: " + outputPath);
+ }
}
return ok;
}
diff --git a/jdk/make/tools/src/build/tools/generatecharacter/CharacterScript.java b/jdk/make/tools/src/build/tools/generatecharacter/CharacterScript.java
index a0a789a97ec..db429ce5e5f 100644
--- a/jdk/make/tools/src/build/tools/generatecharacter/CharacterScript.java
+++ b/jdk/make/tools/src/build/tools/generatecharacter/CharacterScript.java
@@ -1,3 +1,5 @@
+package build.tools.generatecharacter;
+
import java.util.regex.*;
import java.util.*;
import java.io.*;
diff --git a/jdk/make/tools/src/build/tools/stripproperties/StripProperties.java b/jdk/make/tools/src/build/tools/stripproperties/StripProperties.java
index 57563e2f929..7a5f35e6e4d 100644
--- a/jdk/make/tools/src/build/tools/stripproperties/StripProperties.java
+++ b/jdk/make/tools/src/build/tools/stripproperties/StripProperties.java
@@ -36,6 +36,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.Iterator;
import java.util.List;
import java.util.Properties;
@@ -53,82 +54,89 @@ public class StripProperties {
}
}
- private static List parseOptions(String args[]) {
- List files = new ArrayList();
+ private static List infiles = new ArrayList();
+ private static List