Merge
This commit is contained in:
commit
edcabd139a
@ -327,3 +327,4 @@ b8afcf91331d78626a583ec1b63164468d6f4181 jdk9-b81
|
||||
42b56d1f418523ecb61a49d7493302c80c8009cc jdk9-b82
|
||||
ce5c14d97d95084504c32b9320cb33cce4235588 jdk9-b83
|
||||
1c8134475511ffe6726677e1418a89a7a45e92d6 jdk9-b84
|
||||
1f345217c9bab05f192d00cf1665b3286c49ccdb jdk9-b85
|
||||
|
@ -288,7 +288,7 @@ AC_DEFUN([BASIC_SETUP_TOOL],
|
||||
# Publish this variable in the help.
|
||||
AC_ARG_VAR($1, [Override default value for $1])
|
||||
|
||||
if test "x[$]$1" = x; then
|
||||
if [[ -z "${$1+x}" ]]; then
|
||||
# The variable is not set by user, try to locate tool using the code snippet
|
||||
$2
|
||||
else
|
||||
@ -312,25 +312,32 @@ AC_DEFUN([BASIC_SETUP_TOOL],
|
||||
# for unknown variables in the end.
|
||||
CONFIGURE_OVERRIDDEN_VARIABLES="$try_remove_var"
|
||||
|
||||
# Check if the provided tool contains a complete path.
|
||||
tool_specified="[$]$1"
|
||||
tool_basename="${tool_specified##*/}"
|
||||
if test "x$tool_basename" = "x$tool_specified"; then
|
||||
# A command without a complete path is provided, search $PATH.
|
||||
AC_MSG_NOTICE([Will search for user supplied tool $1=$tool_basename])
|
||||
AC_PATH_PROG($1, $tool_basename)
|
||||
if test "x[$]$1" = x; then
|
||||
AC_MSG_ERROR([User supplied tool $tool_basename could not be found])
|
||||
fi
|
||||
else
|
||||
# Otherwise we believe it is a complete path. Use it as it is.
|
||||
AC_MSG_NOTICE([Will use user supplied tool $1=$tool_specified])
|
||||
# Check if we try to supply an empty value
|
||||
if test "x[$]$1" = x; then
|
||||
AC_MSG_NOTICE([Setting user supplied tool $1= (no value)])
|
||||
AC_MSG_CHECKING([for $1])
|
||||
if test ! -x "$tool_specified"; then
|
||||
AC_MSG_RESULT([not found])
|
||||
AC_MSG_ERROR([User supplied tool $1=$tool_specified does not exist or is not executable])
|
||||
AC_MSG_RESULT([disabled])
|
||||
else
|
||||
# Check if the provided tool contains a complete path.
|
||||
tool_specified="[$]$1"
|
||||
tool_basename="${tool_specified##*/}"
|
||||
if test "x$tool_basename" = "x$tool_specified"; then
|
||||
# A command without a complete path is provided, search $PATH.
|
||||
AC_MSG_NOTICE([Will search for user supplied tool $1=$tool_basename])
|
||||
AC_PATH_PROG($1, $tool_basename)
|
||||
if test "x[$]$1" = x; then
|
||||
AC_MSG_ERROR([User supplied tool $tool_basename could not be found])
|
||||
fi
|
||||
else
|
||||
# Otherwise we believe it is a complete path. Use it as it is.
|
||||
AC_MSG_NOTICE([Will use user supplied tool $1=$tool_specified])
|
||||
AC_MSG_CHECKING([for $1])
|
||||
if test ! -x "$tool_specified"; then
|
||||
AC_MSG_RESULT([not found])
|
||||
AC_MSG_ERROR([User supplied tool $1=$tool_specified does not exist or is not executable])
|
||||
fi
|
||||
AC_MSG_RESULT([$tool_specified])
|
||||
fi
|
||||
AC_MSG_RESULT([$tool_specified])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@ -376,9 +383,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
|
||||
[
|
||||
# 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.
|
||||
# used by configure.
|
||||
|
||||
# First are all the simple required tools.
|
||||
BASIC_REQUIRE_PROGS(BASENAME, basename)
|
||||
@ -437,6 +442,7 @@ AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS],
|
||||
BASIC_PATH_PROGS(READLINK, [greadlink readlink])
|
||||
BASIC_PATH_PROGS(DF, df)
|
||||
BASIC_PATH_PROGS(CPIO, [cpio bsdcpio])
|
||||
BASIC_PATH_PROGS(NICE, nice)
|
||||
])
|
||||
|
||||
# Setup basic configuration paths, and platform-specific stuff related to PATHs.
|
||||
|
@ -108,12 +108,6 @@ AC_DEFUN([BOOTJDK_CHECK_ARGUMENTS],
|
||||
fi
|
||||
])
|
||||
|
||||
# Test: Is bootjdk available from builddeps?
|
||||
AC_DEFUN([BOOTJDK_CHECK_BUILDDEPS],
|
||||
[
|
||||
BDEPS_CHECK_MODULE(BOOT_JDK, bootjdk, xxx, [BOOT_JDK_FOUND=maybe], [BOOT_JDK_FOUND=no])
|
||||
])
|
||||
|
||||
# Test: Is $JAVA_HOME set?
|
||||
AC_DEFUN([BOOTJDK_CHECK_JAVA_HOME],
|
||||
[
|
||||
@ -276,9 +270,6 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK],
|
||||
AC_MSG_ERROR([The path given by --with-boot-jdk does not contain a valid Boot JDK])
|
||||
fi
|
||||
|
||||
# Test: Is bootjdk available from builddeps?
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_BUILDDEPS])
|
||||
|
||||
# Test: On MacOS X, can we find a boot jdk using /usr/libexec/java_home?
|
||||
BOOTJDK_DO_CHECK([BOOTJDK_CHECK_MACOSX_JAVA_LOCATOR])
|
||||
|
||||
|
@ -1,66 +0,0 @@
|
||||
#
|
||||
# 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_target=${OPENJDK_TARGET_AUTOCONF_NAME}
|
||||
REWRITE_i686_pc_linux_gnu=i686-unknown-linux-gnu
|
||||
REWRITE_i386_pc_solaris2_10=i686-sun-solaris2_10
|
||||
|
||||
# The needed cups builddeps are platform 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 partly platform dependent.
|
||||
# It is stored inside the sys-root.
|
||||
builddep_freetype2=sdk/sdk-${rewritten_build}-20110921.tar.gz
|
||||
builddep_freetype2_CFLAGS=-I${depdir}/${rewritten_target}/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
|
@ -1,43 +0,0 @@
|
||||
#
|
||||
# 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=
|
@ -1,247 +0,0 @@
|
||||
#
|
||||
# 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_ONCE([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_MSG_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_MSG_ERROR([Could not find any builddeps.conf at all!])
|
||||
fi
|
||||
fi
|
||||
# Create build and target names that use _ instead of "-" and ".".
|
||||
# This is necessary to use them in variable names.
|
||||
build_var=`echo ${OPENJDK_BUILD_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'`
|
||||
target_var=`echo ${OPENJDK_TARGET_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'`
|
||||
# Extract rewrite information for build and target
|
||||
eval rewritten_build=\${REWRITE_${build_var}}
|
||||
if test "x$rewritten_build" = x; then
|
||||
rewritten_build=${OPENJDK_BUILD_AUTOCONF_NAME}
|
||||
echo Build stays the same $rewritten_build
|
||||
else
|
||||
echo Rewriting build for builddeps into $rewritten_build
|
||||
fi
|
||||
eval rewritten_target=\${REWRITE_${target_var}}
|
||||
if test "x$rewritten_target" = x; then
|
||||
rewritten_target=${OPENJDK_TARGET_AUTOCONF_NAME}
|
||||
echo Target stays the same $rewritten_target
|
||||
else
|
||||
echo Rewriting target for builddeps into $rewritten_target
|
||||
fi
|
||||
rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'`
|
||||
rewritten_target_var=`echo ${rewritten_target} | 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_MSG_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 target and build machine specific resource!
|
||||
eval resource=\${builddep_$2_BUILD_${rewritten_build_var}_TARGET_${rewritten_target_var}}
|
||||
if test "x$resource" = x; then
|
||||
# Ok, lets instead look for a target specific resource
|
||||
eval resource=\${builddep_$2_TARGET_${rewritten_target_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_MSG_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_MSG_ERROR([Could not create directory $installdir])
|
||||
fi
|
||||
tmpfile=`mktemp $installdir/$1.XXXXXXXXX`
|
||||
touch $tmpfile
|
||||
if test ! -f $tmpfile; then
|
||||
AC_MSG_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_MSG_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_MSG_ERROR([Cannot handle build depency archive with extension $extension])
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if test -f $installdir/$filename.unpacked; then
|
||||
$5=$installdir
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN_ONCE([BDEPS_CONFIGURE_BUILDDEPS],
|
||||
[
|
||||
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])])
|
||||
|
||||
AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir],
|
||||
[store downloaded build dependencies here @<:@/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])])
|
||||
])
|
@ -39,7 +39,6 @@ m4_include([build-aux/pkg.m4])
|
||||
# Include these first...
|
||||
m4_include([basics.m4])
|
||||
m4_include([basics_windows.m4])
|
||||
m4_include([builddeps.m4])
|
||||
# ... then the rest
|
||||
m4_include([boot-jdk.m4])
|
||||
m4_include([build-performance.m4])
|
||||
@ -121,12 +120,6 @@ PKG_PROG_PKG_CONFIG
|
||||
# After basic tools have been setup, we can check build os specific details.
|
||||
PLATFORM_SETUP_OPENJDK_BUILD_OS_VERSION
|
||||
|
||||
# Setup builddeps, for automatic downloading of tools we need.
|
||||
# This is needed before we can call BDEPS_CHECK_MODULE, which is done in
|
||||
# boot-jdk setup, but we need to have basic tools setup first.
|
||||
BDEPS_CONFIGURE_BUILDDEPS
|
||||
BDEPS_SCAN_FOR_BUILDDEPS
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# Determine OpenJDK variants, options and version numbers.
|
||||
@ -211,14 +204,8 @@ JDKOPT_SETUP_CODE_COVERAGE
|
||||
# After we have toolchain, we can compile fixpath. It's needed by the lib checks.
|
||||
BASIC_COMPILE_FIXPATH
|
||||
|
||||
LIB_SETUP_INIT
|
||||
LIB_SETUP_X11
|
||||
LIB_SETUP_CUPS
|
||||
LIB_SETUP_FREETYPE
|
||||
LIB_SETUP_ALSA
|
||||
LIB_SETUP_MISC_LIBS
|
||||
LIB_SETUP_STATIC_LINK_LIBSTDCPP
|
||||
LIB_SETUP_ON_WINDOWS
|
||||
LIB_DETERMINE_DEPENDENCIES
|
||||
LIB_SETUP_LIBRARIES
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2011, 2015, 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,7 +31,7 @@ AC_DEFUN_ONCE([HELP_SETUP_DEPENDENCY_HELP],
|
||||
AC_DEFUN([HELP_MSG_MISSING_DEPENDENCY],
|
||||
[
|
||||
# Print a helpful message on how to acquire the necessary build dependency.
|
||||
# $1 is the help tag: freetype, cups, pulse, alsa etc
|
||||
# $1 is the help tag: freetype, cups, alsa etc
|
||||
MISSING_DEPENDENCY=$1
|
||||
|
||||
if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then
|
||||
@ -109,8 +109,8 @@ apt_help() {
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libcups2-dev" ;;
|
||||
freetype)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libfreetype6-dev" ;;
|
||||
pulse)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libpulse-dev" ;;
|
||||
ffi)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libffi-dev" ;;
|
||||
x11)
|
||||
PKGHANDLER_COMMAND="sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev" ;;
|
||||
ccache)
|
||||
@ -130,8 +130,6 @@ yum_help() {
|
||||
PKGHANDLER_COMMAND="sudo yum install cups-devel" ;;
|
||||
freetype)
|
||||
PKGHANDLER_COMMAND="sudo yum install freetype-devel" ;;
|
||||
pulse)
|
||||
PKGHANDLER_COMMAND="sudo yum install pulseaudio-libs-devel" ;;
|
||||
x11)
|
||||
PKGHANDLER_COMMAND="sudo yum install libXtst-devel libXt-devel libXrender-devel libXi-devel" ;;
|
||||
ccache)
|
||||
|
90
common/autoconf/lib-alsa.m4
Normal file
90
common/autoconf/lib-alsa.m4
Normal file
@ -0,0 +1,90 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, 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.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Setup alsa (Advanced Linux Sound Architecture)
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_ALSA],
|
||||
[
|
||||
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$NEEDS_LIB_ALSA" = xfalse; 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_MSG_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 -lasound"
|
||||
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} -lasound"
|
||||
ALSA_FOUND=yes
|
||||
fi
|
||||
# Do not try pkg-config if we have a sysroot set.
|
||||
if test "x$SYSROOT" = x; then
|
||||
if test "x$ALSA_FOUND" = xno; then
|
||||
PKG_CHECK_MODULES(ALSA, alsa, [ALSA_FOUND=yes], [ALSA_FOUND=no])
|
||||
fi
|
||||
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_MSG_MISSING_DEPENDENCY([alsa])
|
||||
AC_MSG_ERROR([Could not find alsa! $HELP_MSG])
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(ALSA_CFLAGS)
|
||||
AC_SUBST(ALSA_LIBS)
|
||||
])
|
226
common/autoconf/lib-bundled.m4
Normal file
226
common/autoconf/lib-bundled.m4
Normal file
@ -0,0 +1,226 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, 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.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Setup bundled libraries.
|
||||
#
|
||||
# For libjpeg, giflib, libpng, lcms2 and zlib, the source is present in the
|
||||
# OpenJDK repository. Default is to use these libraries as bundled, but they
|
||||
# might be replaced by en external version by the user.
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_BUNDLED_LIBS],
|
||||
[
|
||||
LIB_SETUP_LIBJPEG
|
||||
LIB_SETUP_GIFLIB
|
||||
LIB_SETUP_LIBPNG
|
||||
LIB_SETUP_ZLIB
|
||||
LIB_SETUP_LCMS
|
||||
])
|
||||
|
||||
################################################################################
|
||||
# Setup libjpeg
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_LIBJPEG],
|
||||
[
|
||||
AC_ARG_WITH(libjpeg, [AS_HELP_STRING([--with-libjpeg],
|
||||
[use libjpeg from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])])
|
||||
|
||||
AC_MSG_CHECKING([for which libjpeg to use])
|
||||
# default is bundled
|
||||
DEFAULT_LIBJPEG=bundled
|
||||
# if user didn't specify, use DEFAULT_LIBJPEG
|
||||
if test "x${with_libjpeg}" = "x"; then
|
||||
with_libjpeg=${DEFAULT_LIBJPEG}
|
||||
fi
|
||||
AC_MSG_RESULT(${with_libjpeg})
|
||||
|
||||
if test "x${with_libjpeg}" = "xbundled"; then
|
||||
USE_EXTERNAL_LIBJPEG=false
|
||||
elif test "x${with_libjpeg}" = "xsystem"; then
|
||||
AC_CHECK_HEADER(jpeglib.h, [],
|
||||
[ AC_MSG_ERROR([--with-libjpeg=system specified, but jpeglib.h not found!])])
|
||||
AC_CHECK_LIB(jpeg, jpeg_CreateDecompress, [],
|
||||
[ AC_MSG_ERROR([--with-libjpeg=system specified, but no libjpeg found])])
|
||||
|
||||
USE_EXTERNAL_LIBJPEG=true
|
||||
else
|
||||
AC_MSG_ERROR([Invalid use of --with-libjpeg: ${with_libjpeg}, use 'system' or 'bundled'])
|
||||
fi
|
||||
|
||||
AC_SUBST(USE_EXTERNAL_LIBJPEG)
|
||||
])
|
||||
|
||||
################################################################################
|
||||
# Setup giflib
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_GIFLIB],
|
||||
[
|
||||
AC_ARG_WITH(giflib, [AS_HELP_STRING([--with-giflib],
|
||||
[use giflib from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])])
|
||||
|
||||
AC_MSG_CHECKING([for which giflib to use])
|
||||
# default is bundled
|
||||
DEFAULT_GIFLIB=bundled
|
||||
# if user didn't specify, use DEFAULT_GIFLIB
|
||||
if test "x${with_giflib}" = "x"; then
|
||||
with_giflib=${DEFAULT_GIFLIB}
|
||||
fi
|
||||
AC_MSG_RESULT(${with_giflib})
|
||||
|
||||
if test "x${with_giflib}" = "xbundled"; then
|
||||
USE_EXTERNAL_LIBGIF=false
|
||||
elif test "x${with_giflib}" = "xsystem"; then
|
||||
AC_CHECK_HEADER(gif_lib.h, [],
|
||||
[ AC_MSG_ERROR([--with-giflib=system specified, but gif_lib.h not found!])])
|
||||
AC_CHECK_LIB(gif, DGifGetCode, [],
|
||||
[ AC_MSG_ERROR([--with-giflib=system specified, but no giflib found!])])
|
||||
|
||||
USE_EXTERNAL_LIBGIF=true
|
||||
else
|
||||
AC_MSG_ERROR([Invalid value of --with-giflib: ${with_giflib}, use 'system' or 'bundled'])
|
||||
fi
|
||||
|
||||
AC_SUBST(USE_EXTERNAL_LIBGIF)
|
||||
])
|
||||
|
||||
################################################################################
|
||||
# Setup libpng
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_LIBPNG],
|
||||
[
|
||||
AC_ARG_WITH(libpng, [AS_HELP_STRING([--with-libpng],
|
||||
[use libpng from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])])
|
||||
|
||||
AC_MSG_CHECKING([for which libpng to use])
|
||||
|
||||
# default is bundled
|
||||
DEFAULT_LIBPNG=bundled
|
||||
# if user didn't specify, use DEFAULT_LIBPNG
|
||||
if test "x${with_libpng}" = "x"; then
|
||||
with_libpng=${DEFAULT_LIBPNG}
|
||||
fi
|
||||
|
||||
if test "x${with_libpng}" = "xbundled"; then
|
||||
USE_EXTERNAL_LIBPNG=false
|
||||
AC_MSG_RESULT([bundled])
|
||||
elif test "x${with_libpng}" = "xsystem"; then
|
||||
PKG_CHECK_MODULES(PNG, libpng,
|
||||
[ LIBPNG_FOUND=yes ],
|
||||
[ LIBPNG_FOUND=no ])
|
||||
if test "x${LIBPNG_FOUND}" = "xyes"; then
|
||||
USE_EXTERNAL_LIBPNG=true
|
||||
AC_MSG_RESULT([system])
|
||||
else
|
||||
AC_MSG_RESULT([system not found])
|
||||
AC_MSG_ERROR([--with-libpng=system specified, but no libpng found!])
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR([Invalid value of --with-libpng: ${with_libpng}, use 'system' or 'bundled'])
|
||||
fi
|
||||
|
||||
AC_SUBST(USE_EXTERNAL_LIBPNG)
|
||||
])
|
||||
|
||||
################################################################################
|
||||
# Setup zlib
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_ZLIB],
|
||||
[
|
||||
AC_ARG_WITH(zlib, [AS_HELP_STRING([--with-zlib],
|
||||
[use zlib from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])])
|
||||
|
||||
AC_CHECK_LIB(z, compress,
|
||||
[ ZLIB_FOUND=yes ],
|
||||
[ ZLIB_FOUND=no ])
|
||||
|
||||
AC_MSG_CHECKING([for which zlib to use])
|
||||
|
||||
DEFAULT_ZLIB=bundled
|
||||
if test "x$OPENJDK_TARGET_OS" = xmacosx; then
|
||||
# On macosx default is system...on others default is bundled
|
||||
DEFAULT_ZLIB=system
|
||||
fi
|
||||
|
||||
if test "x${ZLIB_FOUND}" != "xyes"; then
|
||||
# If we don't find any system...set default to bundled
|
||||
DEFAULT_ZLIB=bundled
|
||||
fi
|
||||
|
||||
# If user didn't specify, use DEFAULT_ZLIB
|
||||
if test "x${with_zlib}" = "x"; then
|
||||
with_zlib=${DEFAULT_ZLIB}
|
||||
fi
|
||||
|
||||
if test "x${with_zlib}" = "xbundled"; then
|
||||
USE_EXTERNAL_LIBZ=false
|
||||
AC_MSG_RESULT([bundled])
|
||||
elif test "x${with_zlib}" = "xsystem"; then
|
||||
if test "x${ZLIB_FOUND}" = "xyes"; then
|
||||
USE_EXTERNAL_LIBZ=true
|
||||
AC_MSG_RESULT([system])
|
||||
else
|
||||
AC_MSG_RESULT([system not found])
|
||||
AC_MSG_ERROR([--with-zlib=system specified, but no zlib found!])
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR([Invalid value for --with-zlib: ${with_zlib}, use 'system' or 'bundled'])
|
||||
fi
|
||||
|
||||
AC_SUBST(USE_EXTERNAL_LIBZ)
|
||||
])
|
||||
|
||||
################################################################################
|
||||
# Setup lcms (Little CMS)
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_LCMS],
|
||||
[
|
||||
AC_ARG_WITH(lcms, [AS_HELP_STRING([--with-lcms],
|
||||
[use lcms2 from build system or OpenJDK source (system, bundled) @<:@bundled@:>@])])
|
||||
|
||||
AC_MSG_CHECKING([for which lcms to use])
|
||||
|
||||
DEFAULT_LCMS=bundled
|
||||
# If user didn't specify, use DEFAULT_LCMS
|
||||
if test "x${with_lcms}" = "x"; then
|
||||
with_lcms=${DEFAULT_LCMS}
|
||||
fi
|
||||
|
||||
if test "x${with_lcms}" = "xbundled"; then
|
||||
USE_EXTERNAL_LCMS=false
|
||||
AC_MSG_RESULT([bundled])
|
||||
elif test "x${with_lcms}" = "xsystem"; then
|
||||
AC_MSG_RESULT([system])
|
||||
PKG_CHECK_MODULES([LCMS], [lcms2], [LCMS_FOUND=yes], [LCMS_FOUND=no])
|
||||
if test "x${LCMS_FOUND}" = "xyes"; then
|
||||
USE_EXTERNAL_LCMS=true
|
||||
else
|
||||
AC_MSG_ERROR([--with-lcms=system specified, but no lcms found!])
|
||||
fi
|
||||
else
|
||||
AC_MSG_ERROR([Invalid value for --with-lcms: ${with_lcms}, use 'system' or 'bundled'])
|
||||
fi
|
||||
|
||||
AC_SUBST(USE_EXTERNAL_LCMS)
|
||||
])
|
87
common/autoconf/lib-cups.m4
Normal file
87
common/autoconf/lib-cups.m4
Normal file
@ -0,0 +1,87 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, 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.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Setup cups (Common Unix Printing System)
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_CUPS],
|
||||
[
|
||||
AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups],
|
||||
[specify prefix directory for the cups package
|
||||
(expecting the headers under PATH/include)])])
|
||||
AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include],
|
||||
[specify directory for the cups include files])])
|
||||
|
||||
if test "x$NEEDS_LIB_CUPS" = xfalse; then
|
||||
if test "x${with_cups}" != x || test "x${with_cups_include}" != x; then
|
||||
AC_MSG_WARN([cups not used, so --with-cups is ignored])
|
||||
fi
|
||||
CUPS_CFLAGS=
|
||||
else
|
||||
CUPS_FOUND=no
|
||||
|
||||
if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno; then
|
||||
AC_MSG_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_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$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=
|
||||
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])
|
||||
if test -s $SYSROOT/opt/sfw/cups/include/cups/cups.h; then
|
||||
# An SFW package seems to be installed!
|
||||
CUPS_FOUND=yes
|
||||
CUPS_CFLAGS="-I$SYSROOT/opt/sfw/cups/include"
|
||||
elif test -s $SYSROOT/opt/csw/include/cups/cups.h; then
|
||||
# A CSW package seems to be installed!
|
||||
CUPS_FOUND=yes
|
||||
CUPS_CFLAGS="-I$SYSROOT/opt/csw/include"
|
||||
fi
|
||||
AC_MSG_RESULT([$CUPS_FOUND])
|
||||
fi
|
||||
if test "x$CUPS_FOUND" = xno; then
|
||||
HELP_MSG_MISSING_DEPENDENCY([cups])
|
||||
AC_MSG_ERROR([Could not find cups! $HELP_MSG ])
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(CUPS_CFLAGS)
|
||||
])
|
114
common/autoconf/lib-ffi.m4
Normal file
114
common/autoconf/lib-ffi.m4
Normal file
@ -0,0 +1,114 @@
|
||||
#
|
||||
# Copyright (c) 2015, 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.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Setup libffi (Foreign Function Interface)
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_LIBFFI],
|
||||
[
|
||||
AC_ARG_WITH(libffi, [AS_HELP_STRING([--with-libffi],
|
||||
[specify prefix directory for the libffi package
|
||||
(expecting the libraries under PATH/lib and the headers under PATH/include)])])
|
||||
AC_ARG_WITH(libffi-include, [AS_HELP_STRING([--with-libffi-include],
|
||||
[specify directory for the libffi include files])])
|
||||
AC_ARG_WITH(libffi-lib, [AS_HELP_STRING([--with-libffi-lib],
|
||||
[specify directory for the libffi library])])
|
||||
|
||||
if test "x$NEEDS_LIB_FFI" = xfalse; then
|
||||
if test "x${with_libffi}" != x || test "x${with_libffi_include}" != x || test "x${with_libffi_lib}" != x; then
|
||||
AC_MSG_WARN([libffi not used, so --with-libffi is ignored])
|
||||
fi
|
||||
LIBFFI_CFLAGS=
|
||||
LIBFFI_LIBS=
|
||||
else
|
||||
LIBFFI_FOUND=no
|
||||
|
||||
if test "x${with_libffi}" = xno || test "x${with_libffi_include}" = xno || test "x${with_libffi_lib}" = xno; then
|
||||
AC_MSG_ERROR([It is not possible to disable the use of libffi. Remove the --without-libffi option.])
|
||||
fi
|
||||
|
||||
if test "x${with_libffi}" != x; then
|
||||
LIBFFI_LIBS="-L${with_libffi}/lib -lffi"
|
||||
LIBFFI_CFLAGS="-I${with_libffi}/include"
|
||||
LIBFFI_FOUND=yes
|
||||
fi
|
||||
if test "x${with_libffi_include}" != x; then
|
||||
LIBFFI_CFLAGS="-I${with_libffi_include}"
|
||||
LIBFFI_FOUND=yes
|
||||
fi
|
||||
if test "x${with_libffi_lib}" != x; then
|
||||
LIBFFI_LIBS="-L${with_libffi_lib} -lffi"
|
||||
LIBFFI_FOUND=yes
|
||||
fi
|
||||
# Do not try pkg-config if we have a sysroot set.
|
||||
if test "x$SYSROOT" = x; then
|
||||
if test "x$LIBFFI_FOUND" = xno; then
|
||||
# Figure out LIBFFI_CFLAGS and LIBFFI_LIBS
|
||||
PKG_CHECK_MODULES([LIBFFI], [libffi], [LIBFFI_FOUND=yes], [LIBFFI_FOUND=no])
|
||||
fi
|
||||
fi
|
||||
if test "x$LIBFFI_FOUND" = xno; then
|
||||
AC_CHECK_HEADERS([ffi.h],
|
||||
[
|
||||
LIBFFI_FOUND=yes
|
||||
LIBFFI_CFLAGS=
|
||||
LIBFFI_LIBS=-lffi
|
||||
],
|
||||
[LIBFFI_FOUND=no]
|
||||
)
|
||||
fi
|
||||
if test "x$LIBFFI_FOUND" = xno; then
|
||||
HELP_MSG_MISSING_DEPENDENCY([ffi])
|
||||
AC_MSG_ERROR([Could not find libffi! $HELP_MSG])
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING([if libffi works])
|
||||
AC_LANG_PUSH(C)
|
||||
OLD_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $LIBFFI_CFLAGS"
|
||||
OLD_LIBS="$LIBS"
|
||||
LIBS="$LIBS $LIBFFI_LIBS"
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <ffi.h>],
|
||||
[
|
||||
ffi_call(NULL, NULL, NULL, NULL);
|
||||
return 0;
|
||||
])],
|
||||
[LIBFFI_WORKS=yes],
|
||||
[LIBFFI_WORKS=no]
|
||||
)
|
||||
CFLAGS="$OLD_CFLAGS"
|
||||
LIBS="$OLD_LIBS"
|
||||
AC_LANG_POP(C)
|
||||
AC_MSG_RESULT([$LIBFFI_WORKS])
|
||||
|
||||
if test "x$LIBFFI_WORKS" = xno; then
|
||||
HELP_MSG_MISSING_DEPENDENCY([ffi])
|
||||
AC_MSG_ERROR([Found libffi but could not link and compile with it. $HELP_MSG])
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(LIBFFI_CFLAGS)
|
||||
AC_SUBST(LIBFFI_LIBS)
|
||||
])
|
420
common/autoconf/lib-freetype.m4
Normal file
420
common/autoconf/lib-freetype.m4
Normal file
@ -0,0 +1,420 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, 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.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Build the freetype lib from source
|
||||
################################################################################
|
||||
AC_DEFUN([LIB_BUILD_FREETYPE],
|
||||
[
|
||||
FREETYPE_SRC_PATH="$1"
|
||||
BUILD_FREETYPE=yes
|
||||
|
||||
# Check if the freetype sources are acessible..
|
||||
if ! test -d $FREETYPE_SRC_PATH; then
|
||||
AC_MSG_WARN([--with-freetype-src specified, but can not find path "$FREETYPE_SRC_PATH" - ignoring --with-freetype-src])
|
||||
BUILD_FREETYPE=no
|
||||
fi
|
||||
# ..and contain a vc2010 project file
|
||||
vcxproj_path="$FREETYPE_SRC_PATH/builds/windows/vc2010/freetype.vcxproj"
|
||||
if test "x$BUILD_FREETYPE" = xyes && ! test -s $vcxproj_path; then
|
||||
AC_MSG_WARN([Can not find project file $vcxproj_path (you may try a newer freetype version) - ignoring --with-freetype-src])
|
||||
BUILD_FREETYPE=no
|
||||
fi
|
||||
# Now check if configure found a version of 'msbuild.exe'
|
||||
if test "x$BUILD_FREETYPE" = xyes && test "x$MSBUILD" == x ; then
|
||||
AC_MSG_WARN([Can not find an msbuild.exe executable (you may try to install .NET 4.0) - ignoring --with-freetype-src])
|
||||
BUILD_FREETYPE=no
|
||||
fi
|
||||
|
||||
# Ready to go..
|
||||
if test "x$BUILD_FREETYPE" = xyes; then
|
||||
# msbuild requires trailing slashes for output directories
|
||||
freetype_lib_path="$FREETYPE_SRC_PATH/lib$OPENJDK_TARGET_CPU_BITS/"
|
||||
freetype_lib_path_unix="$freetype_lib_path"
|
||||
freetype_obj_path="$FREETYPE_SRC_PATH/obj$OPENJDK_TARGET_CPU_BITS/"
|
||||
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(vcxproj_path)
|
||||
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(freetype_lib_path)
|
||||
BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(freetype_obj_path)
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
freetype_platform=x64
|
||||
else
|
||||
freetype_platform=win32
|
||||
fi
|
||||
|
||||
# The original freetype project file is for VS 2010 (i.e. 'v100'),
|
||||
# so we have to adapt the toolset if building with any other toolsed (i.e. SDK).
|
||||
# Currently 'PLATFORM_TOOLSET' is set in 'TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT'/
|
||||
# 'TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT' in toolchain_windows.m4
|
||||
AC_MSG_NOTICE([Trying to compile freetype sources with PlatformToolset=$PLATFORM_TOOLSET to $freetype_lib_path_unix ...])
|
||||
|
||||
# First we try to build the freetype.dll
|
||||
$ECHO -e "@echo off\n"\
|
||||
"$MSBUILD $vcxproj_path "\
|
||||
"/p:PlatformToolset=$PLATFORM_TOOLSET "\
|
||||
"/p:Configuration=\"Release Multithreaded\" "\
|
||||
"/p:Platform=$freetype_platform "\
|
||||
"/p:ConfigurationType=DynamicLibrary "\
|
||||
"/p:TargetName=freetype "\
|
||||
"/p:OutDir=\"$freetype_lib_path\" "\
|
||||
"/p:IntDir=\"$freetype_obj_path\" > freetype.log" > freetype.bat
|
||||
cmd /c freetype.bat
|
||||
|
||||
if test -s "$freetype_lib_path_unix/freetype.dll"; then
|
||||
# If that succeeds we also build freetype.lib
|
||||
$ECHO -e "@echo off\n"\
|
||||
"$MSBUILD $vcxproj_path "\
|
||||
"/p:PlatformToolset=$PLATFORM_TOOLSET "\
|
||||
"/p:Configuration=\"Release Multithreaded\" "\
|
||||
"/p:Platform=$freetype_platform "\
|
||||
"/p:ConfigurationType=StaticLibrary "\
|
||||
"/p:TargetName=freetype "\
|
||||
"/p:OutDir=\"$freetype_lib_path\" "\
|
||||
"/p:IntDir=\"$freetype_obj_path\" >> freetype.log" > freetype.bat
|
||||
cmd /c freetype.bat
|
||||
|
||||
if test -s "$freetype_lib_path_unix/freetype.lib"; then
|
||||
# Once we build both, lib and dll, set freetype lib and include path appropriately
|
||||
POTENTIAL_FREETYPE_INCLUDE_PATH="$FREETYPE_SRC_PATH/include"
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$freetype_lib_path_unix"
|
||||
AC_MSG_NOTICE([Compiling freetype sources succeeded! (see freetype.log for build results)])
|
||||
else
|
||||
BUILD_FREETYPE=no
|
||||
fi
|
||||
else
|
||||
BUILD_FREETYPE=no
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
################################################################################
|
||||
# Check if a potential freeype library match is correct and usable
|
||||
################################################################################
|
||||
AC_DEFUN([LIB_CHECK_POTENTIAL_FREETYPE],
|
||||
[
|
||||
POTENTIAL_FREETYPE_INCLUDE_PATH="$1"
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$2"
|
||||
METHOD="$3"
|
||||
|
||||
# Let's start with an optimistic view of the world :-)
|
||||
FOUND_FREETYPE=yes
|
||||
|
||||
# First look for the canonical freetype main include file ft2build.h.
|
||||
if ! test -s "$POTENTIAL_FREETYPE_INCLUDE_PATH/ft2build.h"; then
|
||||
# Oh no! Let's try in the freetype2 directory. This is needed at least at Mac OS X Yosemite.
|
||||
POTENTIAL_FREETYPE_INCLUDE_PATH="$POTENTIAL_FREETYPE_INCLUDE_PATH/freetype2"
|
||||
if ! test -s "$POTENTIAL_FREETYPE_INCLUDE_PATH/ft2build.h"; then
|
||||
# Fail.
|
||||
FOUND_FREETYPE=no
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$FOUND_FREETYPE" = xyes; then
|
||||
# Include file found, let's continue the sanity check.
|
||||
AC_MSG_NOTICE([Found freetype include files at $POTENTIAL_FREETYPE_INCLUDE_PATH using $METHOD])
|
||||
|
||||
# Reset to default value
|
||||
FREETYPE_BASE_NAME=freetype
|
||||
FREETYPE_LIB_NAME="${LIBRARY_PREFIX}${FREETYPE_BASE_NAME}${SHARED_LIBRARY_SUFFIX}"
|
||||
if ! test -s "$POTENTIAL_FREETYPE_LIB_PATH/$FREETYPE_LIB_NAME"; then
|
||||
if test "x$OPENJDK_TARGET_OS" = xmacosx \
|
||||
&& test -s "$POTENTIAL_FREETYPE_LIB_PATH/${LIBRARY_PREFIX}freetype.6${SHARED_LIBRARY_SUFFIX}"; then
|
||||
# On Mac OS X Yosemite, the symlink from libfreetype.dylib to libfreetype.6.dylib disappeared. Check
|
||||
# for the .6 version explicitly.
|
||||
FREETYPE_BASE_NAME=freetype.6
|
||||
FREETYPE_LIB_NAME="${LIBRARY_PREFIX}${FREETYPE_BASE_NAME}${SHARED_LIBRARY_SUFFIX}"
|
||||
AC_MSG_NOTICE([Compensating for missing symlink by using version 6 explicitly])
|
||||
else
|
||||
AC_MSG_NOTICE([Could not find $POTENTIAL_FREETYPE_LIB_PATH/$FREETYPE_LIB_NAME. Ignoring location.])
|
||||
FOUND_FREETYPE=no
|
||||
fi
|
||||
else
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
# On Windows, we will need both .lib and .dll file.
|
||||
if ! test -s "$POTENTIAL_FREETYPE_LIB_PATH/${FREETYPE_BASE_NAME}.lib"; then
|
||||
AC_MSG_NOTICE([Could not find $POTENTIAL_FREETYPE_LIB_PATH/${FREETYPE_BASE_NAME}.lib. Ignoring location.])
|
||||
FOUND_FREETYPE=no
|
||||
fi
|
||||
elif test "x$OPENJDK_TARGET_OS" = xsolaris \
|
||||
&& test -s "$POTENTIAL_FREETYPE_LIB_PATH$OPENJDK_TARGET_CPU_ISADIR/$FREETYPE_LIB_NAME"; then
|
||||
# Found lib in isa dir, use that instead.
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$POTENTIAL_FREETYPE_LIB_PATH$OPENJDK_TARGET_CPU_ISADIR"
|
||||
AC_MSG_NOTICE([Rewriting to use $POTENTIAL_FREETYPE_LIB_PATH instead])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$FOUND_FREETYPE" = xyes; then
|
||||
BASIC_FIXUP_PATH(POTENTIAL_FREETYPE_INCLUDE_PATH)
|
||||
BASIC_FIXUP_PATH(POTENTIAL_FREETYPE_LIB_PATH)
|
||||
|
||||
FREETYPE_INCLUDE_PATH="$POTENTIAL_FREETYPE_INCLUDE_PATH"
|
||||
AC_MSG_CHECKING([for freetype includes])
|
||||
AC_MSG_RESULT([$FREETYPE_INCLUDE_PATH])
|
||||
FREETYPE_LIB_PATH="$POTENTIAL_FREETYPE_LIB_PATH"
|
||||
AC_MSG_CHECKING([for freetype libraries])
|
||||
AC_MSG_RESULT([$FREETYPE_LIB_PATH])
|
||||
fi
|
||||
])
|
||||
|
||||
################################################################################
|
||||
# Setup freetype (The FreeType2 font rendering library)
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_FREETYPE],
|
||||
[
|
||||
AC_ARG_WITH(freetype, [AS_HELP_STRING([--with-freetype],
|
||||
[specify prefix directory for the freetype package
|
||||
(expecting the libraries under PATH/lib and the headers under PATH/include)])])
|
||||
AC_ARG_WITH(freetype-include, [AS_HELP_STRING([--with-freetype-include],
|
||||
[specify directory for the freetype include files])])
|
||||
AC_ARG_WITH(freetype-lib, [AS_HELP_STRING([--with-freetype-lib],
|
||||
[specify directory for the freetype library])])
|
||||
AC_ARG_WITH(freetype-src, [AS_HELP_STRING([--with-freetype-src],
|
||||
[specify directory with freetype sources to automatically build the library (experimental, Windows-only)])])
|
||||
AC_ARG_ENABLE(freetype-bundling, [AS_HELP_STRING([--disable-freetype-bundling],
|
||||
[disable bundling of the freetype library with the build result @<:@enabled on Windows or when using --with-freetype, disabled otherwise@:>@])])
|
||||
|
||||
# Need to specify explicitly since it needs to be overridden on some versions of macosx
|
||||
FREETYPE_BASE_NAME=freetype
|
||||
FREETYPE_CFLAGS=
|
||||
FREETYPE_LIBS=
|
||||
FREETYPE_BUNDLE_LIB_PATH=
|
||||
|
||||
if test "x$NEEDS_LIB_FREETYPE" = xfalse; then
|
||||
if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x || test "x$with_freetype_src" != x; then
|
||||
AC_MSG_WARN([freetype not used, so --with-freetype is ignored])
|
||||
fi
|
||||
if test "x$enable_freetype_bundling" != x; then
|
||||
AC_MSG_WARN([freetype not used, so --enable-freetype-bundling is ignored])
|
||||
fi
|
||||
else
|
||||
# freetype is needed to build; go get it!
|
||||
|
||||
BUNDLE_FREETYPE="$enable_freetype_bundling"
|
||||
|
||||
if test "x$with_freetype_src" != x; then
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
# Try to build freetype if --with-freetype-src was given on Windows
|
||||
LIB_BUILD_FREETYPE([$with_freetype_src])
|
||||
if test "x$BUILD_FREETYPE" = xyes; then
|
||||
# Okay, we built it. Check that it works.
|
||||
LIB_CHECK_POTENTIAL_FREETYPE($POTENTIAL_FREETYPE_INCLUDE_PATH, $POTENTIAL_FREETYPE_LIB_PATH, [--with-freetype-src])
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
AC_MSG_ERROR([Can not use the built freetype at location given by --with-freetype-src])
|
||||
fi
|
||||
else
|
||||
AC_MSG_NOTICE([User specified --with-freetype-src but building freetype failed. (see freetype.log for build results)])
|
||||
AC_MSG_ERROR([Consider building freetype manually and using --with-freetype instead.])
|
||||
fi
|
||||
else
|
||||
AC_MSG_WARN([--with-freetype-src is currently only supported on Windows - ignoring])
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$with_freetype" != x || test "x$with_freetype_include" != x || test "x$with_freetype_lib" != x; then
|
||||
# User has specified settings
|
||||
|
||||
if test "x$BUNDLE_FREETYPE" = x; then
|
||||
# If not specified, default is to bundle freetype
|
||||
BUNDLE_FREETYPE=yes
|
||||
fi
|
||||
|
||||
if test "x$with_freetype" != x; then
|
||||
POTENTIAL_FREETYPE_INCLUDE_PATH="$with_freetype/include"
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$with_freetype/lib"
|
||||
fi
|
||||
|
||||
# Allow --with-freetype-lib and --with-freetype-include to override
|
||||
if test "x$with_freetype_include" != x; then
|
||||
POTENTIAL_FREETYPE_INCLUDE_PATH="$with_freetype_include"
|
||||
fi
|
||||
if test "x$with_freetype_lib" != x; then
|
||||
POTENTIAL_FREETYPE_LIB_PATH="$with_freetype_lib"
|
||||
fi
|
||||
|
||||
if test "x$POTENTIAL_FREETYPE_INCLUDE_PATH" != x && test "x$POTENTIAL_FREETYPE_LIB_PATH" != x; then
|
||||
# Okay, we got it. Check that it works.
|
||||
LIB_CHECK_POTENTIAL_FREETYPE($POTENTIAL_FREETYPE_INCLUDE_PATH, $POTENTIAL_FREETYPE_LIB_PATH, [--with-freetype])
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
AC_MSG_ERROR([Can not find or use freetype at location given by --with-freetype])
|
||||
fi
|
||||
else
|
||||
# User specified only one of lib or include. This is an error.
|
||||
if test "x$POTENTIAL_FREETYPE_INCLUDE_PATH" = x ; then
|
||||
AC_MSG_NOTICE([User specified --with-freetype-lib but not --with-freetype-include])
|
||||
AC_MSG_ERROR([Need both freetype lib and include paths. Consider using --with-freetype instead.])
|
||||
else
|
||||
AC_MSG_NOTICE([User specified --with-freetype-include but not --with-freetype-lib])
|
||||
AC_MSG_ERROR([Need both freetype lib and include paths. Consider using --with-freetype instead.])
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# User did not specify settings, but we need freetype. Try to locate it.
|
||||
|
||||
if test "x$BUNDLE_FREETYPE" = x; then
|
||||
# If not specified, default is to bundle freetype only on windows
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
BUNDLE_FREETYPE=yes
|
||||
else
|
||||
BUNDLE_FREETYPE=no
|
||||
fi
|
||||
fi
|
||||
|
||||
# If we have a sysroot, assume that's where we are supposed to look and skip pkg-config.
|
||||
if test "x$SYSROOT" = x; then
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
# Check modules using pkg-config, but only if we have it (ugly output results otherwise)
|
||||
if test "x$PKG_CONFIG" != x; then
|
||||
PKG_CHECK_MODULES(FREETYPE, freetype2, [FOUND_FREETYPE=yes], [FOUND_FREETYPE=no])
|
||||
if test "x$FOUND_FREETYPE" = xyes; then
|
||||
# On solaris, pkg_check adds -lz to freetype libs, which isn't necessary for us.
|
||||
FREETYPE_LIBS=`$ECHO $FREETYPE_LIBS | $SED 's/-lz//g'`
|
||||
# 64-bit libs for Solaris x86 are installed in the amd64 subdirectory, change lib to lib/amd64
|
||||
if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64; then
|
||||
FREETYPE_LIBS=`$ECHO $FREETYPE_LIBS | $SED 's?/lib?/lib/amd64?g'`
|
||||
fi
|
||||
# PKG_CHECK_MODULES will set FREETYPE_CFLAGS and _LIBS, but we don't get a lib path for bundling.
|
||||
if test "x$BUNDLE_FREETYPE" = xyes; then
|
||||
AC_MSG_NOTICE([Found freetype using pkg-config, but ignoring since we can not bundle that])
|
||||
FOUND_FREETYPE=no
|
||||
else
|
||||
AC_MSG_CHECKING([for freetype])
|
||||
AC_MSG_RESULT([yes (using pkg-config)])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
# Check in well-known locations
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
FREETYPE_BASE_DIR="$PROGRAMFILES/GnuWin32"
|
||||
BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(FREETYPE_BASE_DIR)
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
FREETYPE_BASE_DIR="$ProgramW6432/GnuWin32"
|
||||
BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(FREETYPE_BASE_DIR)
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
|
||||
fi
|
||||
else
|
||||
FREETYPE_BASE_DIR="$SYSROOT/usr"
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
FREETYPE_BASE_DIR="$SYSROOT/usr/X11"
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
|
||||
fi
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
FREETYPE_BASE_DIR="$SYSROOT/usr/sfw"
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib], [well-known location])
|
||||
fi
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
FREETYPE_BASE_DIR="$SYSROOT/usr"
|
||||
if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib/x86_64-linux-gnu], [well-known location])
|
||||
else
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib/i386-linux-gnu], [well-known location])
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
LIB_CHECK_POTENTIAL_FREETYPE([$FREETYPE_BASE_DIR/include], [$FREETYPE_BASE_DIR/lib32], [well-known location])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi # end check in well-known locations
|
||||
|
||||
if test "x$FOUND_FREETYPE" != xyes; then
|
||||
HELP_MSG_MISSING_DEPENDENCY([freetype])
|
||||
AC_MSG_ERROR([Could not find freetype! $HELP_MSG ])
|
||||
fi
|
||||
fi # end user specified settings
|
||||
|
||||
# Set FREETYPE_CFLAGS, _LIBS and _LIB_PATH from include and lib dir.
|
||||
if test "x$FREETYPE_CFLAGS" = x; then
|
||||
BASIC_FIXUP_PATH(FREETYPE_INCLUDE_PATH)
|
||||
if test -d $FREETYPE_INCLUDE_PATH/freetype2/freetype; then
|
||||
FREETYPE_CFLAGS="-I$FREETYPE_INCLUDE_PATH/freetype2 -I$FREETYPE_INCLUDE_PATH"
|
||||
else
|
||||
FREETYPE_CFLAGS="-I$FREETYPE_INCLUDE_PATH"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "x$FREETYPE_LIBS" = x; then
|
||||
BASIC_FIXUP_PATH(FREETYPE_LIB_PATH)
|
||||
if test "x$OPENJDK_TARGET_OS" = xwindows; then
|
||||
FREETYPE_LIBS="$FREETYPE_LIB_PATH/$FREETYPE_BASE_NAME.lib"
|
||||
else
|
||||
FREETYPE_LIBS="-L$FREETYPE_LIB_PATH -l$FREETYPE_BASE_NAME"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Try to compile it
|
||||
AC_MSG_CHECKING([if we can compile and link with freetype])
|
||||
AC_LANG_PUSH(C++)
|
||||
PREV_CXXCFLAGS="$CXXFLAGS"
|
||||
PREV_LIBS="$LIBS"
|
||||
PREV_CXX="$CXX"
|
||||
CXXFLAGS="$CXXFLAGS $FREETYPE_CFLAGS"
|
||||
LIBS="$LIBS $FREETYPE_LIBS"
|
||||
CXX="$FIXPATH $CXX"
|
||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[
|
||||
#include<ft2build.h>
|
||||
#include FT_FREETYPE_H
|
||||
int main () {
|
||||
FT_Init_FreeType(NULL);
|
||||
return 0;
|
||||
}
|
||||
]])],
|
||||
[
|
||||
AC_MSG_RESULT([yes])
|
||||
],
|
||||
[
|
||||
AC_MSG_RESULT([no])
|
||||
AC_MSG_NOTICE([Could not compile and link with freetype. This might be a 32/64-bit mismatch.])
|
||||
AC_MSG_NOTICE([Using FREETYPE_CFLAGS=$FREETYPE_CFLAGS and FREETYPE_LIBS=$FREETYPE_LIBS])
|
||||
|
||||
HELP_MSG_MISSING_DEPENDENCY([freetype])
|
||||
|
||||
AC_MSG_ERROR([Can not continue without freetype. $HELP_MSG])
|
||||
]
|
||||
)
|
||||
CXXCFLAGS="$PREV_CXXFLAGS"
|
||||
LIBS="$PREV_LIBS"
|
||||
CXX="$PREV_CXX"
|
||||
AC_LANG_POP(C++)
|
||||
|
||||
AC_MSG_CHECKING([if we should bundle freetype])
|
||||
if test "x$BUNDLE_FREETYPE" = xyes; then
|
||||
FREETYPE_BUNDLE_LIB_PATH="$FREETYPE_LIB_PATH"
|
||||
fi
|
||||
AC_MSG_RESULT([$BUNDLE_FREETYPE])
|
||||
|
||||
fi # end freetype needed
|
||||
|
||||
AC_SUBST(FREETYPE_BUNDLE_LIB_PATH)
|
||||
AC_SUBST(FREETYPE_CFLAGS)
|
||||
AC_SUBST(FREETYPE_LIBS)
|
||||
])
|
120
common/autoconf/lib-std.m4
Normal file
120
common/autoconf/lib-std.m4
Normal file
@ -0,0 +1,120 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, 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.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Setup the standard C/C++ runtime libraries.
|
||||
#
|
||||
# Most importantly, determine if stdc++ should be linked statically or
|
||||
# dynamically.
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_STD_LIBS],
|
||||
[
|
||||
# statically link libstdc++ before C++ ABI is stablized on Linux unless
|
||||
# dynamic build is configured on command line.
|
||||
AC_ARG_WITH([stdc++lib], [AS_HELP_STRING([--with-stdc++lib=<static>,<dynamic>,<default>],
|
||||
[force linking of the C++ runtime on Linux to either static or dynamic, default is static with dynamic as fallback])],
|
||||
[
|
||||
if test "x$with_stdc__lib" != xdynamic && test "x$with_stdc__lib" != xstatic \
|
||||
&& test "x$with_stdc__lib" != xdefault; then
|
||||
AC_MSG_ERROR([Bad parameter value --with-stdc++lib=$with_stdc__lib!])
|
||||
fi
|
||||
],
|
||||
[with_stdc__lib=default]
|
||||
)
|
||||
|
||||
if test "x$OPENJDK_TARGET_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_LINK_IFELSE([AC_LANG_PROGRAM([], [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_LINK_IFELSE([AC_LANG_PROGRAM([], [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_libstdcxx" = xno && test "x$has_dynamic_libstdcxx" = xno; then
|
||||
AC_MSG_ERROR([Cannot link to stdc++, neither dynamically nor statically!])
|
||||
fi
|
||||
|
||||
if test "x$with_stdc__lib" = xstatic && test "x$has_static_libstdcxx" = xno; then
|
||||
AC_MSG_ERROR([Static linking of libstdc++ was not possible!])
|
||||
fi
|
||||
|
||||
if test "x$with_stdc__lib" = xdynamic && test "x$has_dynamic_libstdcxx" = xno; then
|
||||
AC_MSG_ERROR([Dynamic linking of libstdc++ was not possible!])
|
||||
fi
|
||||
|
||||
# If dynamic was requested, it's available since it would fail above otherwise.
|
||||
# If dynamic wasn't requested, go with static unless it isn't available.
|
||||
AC_MSG_CHECKING([how to link with libstdc++])
|
||||
if test "x$with_stdc__lib" = xdynamic || test "x$has_static_libstdcxx" = xno || test "x$JVM_VARIANT_ZEROSHARK" = xtrue; then
|
||||
LIBCXX="$LIBCXX -lstdc++"
|
||||
LDCXX="$CXX"
|
||||
STATIC_CXX_SETTING="STATIC_CXX=false"
|
||||
AC_MSG_RESULT([dynamic])
|
||||
else
|
||||
LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS"
|
||||
LDCXX="$CC"
|
||||
STATIC_CXX_SETTING="STATIC_CXX=true"
|
||||
AC_MSG_RESULT([static])
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(STATIC_CXX_SETTING)
|
||||
|
||||
# libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so)
|
||||
if test "x$TOOLCHAIN_TYPE" = xsolstudio && test "x$LIBCXX" = x; then
|
||||
LIBCXX="${SYSROOT}/usr/lib${OPENJDK_TARGET_CPU_ISADIR}/libCrun.so.1"
|
||||
fi
|
||||
|
||||
# TODO better (platform agnostic) test
|
||||
if test "x$OPENJDK_TARGET_OS" = xmacosx && test "x$LIBCXX" = x && test "x$TOOLCHAIN_TYPE" = xgcc; then
|
||||
LIBCXX="-lstdc++"
|
||||
fi
|
||||
AC_SUBST(LIBCXX)
|
||||
|
||||
# Setup Windows runtime dlls
|
||||
if test "x$OPENJDK_TARGET_OS" = "xwindows"; then
|
||||
TOOLCHAIN_SETUP_VS_RUNTIME_DLLS
|
||||
fi
|
||||
])
|
121
common/autoconf/lib-x11.m4
Normal file
121
common/autoconf/lib-x11.m4
Normal file
@ -0,0 +1,121 @@
|
||||
#
|
||||
# Copyright (c) 2011, 2015, 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.
|
||||
#
|
||||
|
||||
################################################################################
|
||||
# Setup X11 Windows system
|
||||
################################################################################
|
||||
AC_DEFUN_ONCE([LIB_SETUP_X11],
|
||||
[
|
||||
if test "x$NEEDS_LIB_X11" = xfalse; then
|
||||
if test "x${with_x}" != x; then
|
||||
AC_MSG_WARN([X11 is not used, so --with-x is ignored])
|
||||
fi
|
||||
X_CFLAGS=
|
||||
X_LIBS=
|
||||
else
|
||||
# Check if the user has specified sysroot, but not --x-includes or --x-libraries.
|
||||
# Make a simple check for the libraries at the sysroot, and setup --x-includes and
|
||||
# --x-libraries for the sysroot, if that seems to be correct.
|
||||
if test "x$OPENJDK_TARGET_OS" = "xlinux"; then
|
||||
if test "x$SYSROOT" != "x"; then
|
||||
if test "x$x_includes" = xNONE; then
|
||||
if test -f "$SYSROOT/usr/X11R6/include/X11/Xlib.h"; then
|
||||
x_includes="$SYSROOT/usr/X11R6/include"
|
||||
elif test -f "$SYSROOT/usr/include/X11/Xlib.h"; then
|
||||
x_includes="$SYSROOT/usr/include"
|
||||
fi
|
||||
fi
|
||||
if test "x$x_libraries" = xNONE; then
|
||||
if test -f "$SYSROOT/usr/X11R6/lib/libX11.so"; then
|
||||
x_libraries="$SYSROOT/usr/X11R6/lib"
|
||||
elif test -f "$SYSROOT/usr/lib64/libX11.so" && test "x$OPENJDK_TARGET_CPU_BITS" = x64; then
|
||||
x_libraries="$SYSROOT/usr/lib64"
|
||||
elif test -f "$SYSROOT/usr/lib/libX11.so"; then
|
||||
x_libraries="$SYSROOT/usr/lib"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Now let autoconf do it's magic
|
||||
AC_PATH_X
|
||||
AC_PATH_XTRA
|
||||
|
||||
# AC_PATH_XTRA creates X_LIBS and sometimes adds -R flags. When cross compiling
|
||||
# this doesn't make sense so we remove it.
|
||||
if test "x$COMPILE_TYPE" = xcross; then
|
||||
X_LIBS=`$ECHO $X_LIBS | $SED 's/-R \{0,1\}[[^ ]]*//g'`
|
||||
fi
|
||||
|
||||
if test "x$no_x" = xyes; then
|
||||
HELP_MSG_MISSING_DEPENDENCY([x11])
|
||||
AC_MSG_ERROR([Could not find X11 libraries. $HELP_MSG])
|
||||
fi
|
||||
|
||||
if test "x$OPENJDK_TARGET_OS" = xsolaris; then
|
||||
OPENWIN_HOME="/usr/openwin"
|
||||
X_CFLAGS="-I$SYSROOT$OPENWIN_HOME/include -I$SYSROOT$OPENWIN_HOME/include/X11/extensions"
|
||||
X_LIBS="-L$SYSROOT$OPENWIN_HOME/sfw/lib$OPENJDK_TARGET_CPU_ISADIR \
|
||||
-L$SYSROOT$OPENWIN_HOME/lib$OPENJDK_TARGET_CPU_ISADIR \
|
||||
-R$OPENWIN_HOME/sfw/lib$OPENJDK_TARGET_CPU_ISADIR \
|
||||
-R$OPENWIN_HOME/lib$OPENJDK_TARGET_CPU_ISADIR"
|
||||
fi
|
||||
|
||||
AC_LANG_PUSH(C)
|
||||
OLD_CFLAGS="$CFLAGS"
|
||||
CFLAGS="$CFLAGS $SYSROOT_CFLAGS $X_CFLAGS"
|
||||
|
||||
# Need to include Xlib.h and Xutil.h to avoid "present but cannot be compiled" warnings on Solaris 10
|
||||
AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h X11/Intrinsic.h],
|
||||
[X11_HEADERS_OK=yes],
|
||||
[X11_HEADERS_OK=no; break],
|
||||
[
|
||||
# include <X11/Xlib.h>
|
||||
# include <X11/Xutil.h>
|
||||
]
|
||||
)
|
||||
|
||||
if test "x$X11_HEADERS_OK" = xno; then
|
||||
HELP_MSG_MISSING_DEPENDENCY([x11])
|
||||
AC_MSG_ERROR([Could not find all X11 headers (shape.h Xrender.h XTest.h Intrinsic.h). $HELP_MSG])
|
||||
fi
|
||||
|
||||
# If XLinearGradient isn't available in Xrender.h, signal that it needs to be
|
||||
# defined in libawt_xawt.
|
||||
AC_MSG_CHECKING([if XlinearGradient is defined in Xrender.h])
|
||||
AC_COMPILE_IFELSE(
|
||||
[AC_LANG_PROGRAM([[#include <X11/extensions/Xrender.h>]],
|
||||
[[XLinearGradient x;]])],
|
||||
[AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_RESULT([no])
|
||||
X_CFLAGS="$X_CFLAGS -DSOLARIS10_NO_XRENDER_STRUCTS"])
|
||||
|
||||
CFLAGS="$OLD_CFLAGS"
|
||||
AC_LANG_POP(C)
|
||||
fi # NEEDS_LIB_X11
|
||||
|
||||
AC_SUBST(X_CFLAGS)
|
||||
AC_SUBST(X_LIBS)
|
||||
])
|
File diff suppressed because it is too large
Load Diff
@ -96,7 +96,7 @@ REQUIRED_OS_NAME:=@REQUIRED_OS_NAME@
|
||||
REQUIRED_OS_VERSION:=@REQUIRED_OS_VERSION@
|
||||
|
||||
@SET_OPENJDK@
|
||||
LIBM:=-lm
|
||||
LIBM:=@LIBM@
|
||||
LIBDL:=@LIBDL@
|
||||
|
||||
# colon or semicolon
|
||||
@ -499,6 +499,7 @@ LN:=@LN@
|
||||
MKDIR:=@MKDIR@
|
||||
MV:=@MV@
|
||||
NAWK:=@NAWK@
|
||||
NICE:=@NICE@
|
||||
PATCH:=@PATCH@
|
||||
PRINTF:=@PRINTF@
|
||||
PWD:=@THEPWDCMD@
|
||||
|
@ -327,3 +327,4 @@ d8126bc88fa5cd1ae4e44d86a4b1280ca1c9e2aa jdk9-b76
|
||||
c20d8ebddaa6fb09cc81d3edf3d1d05f4232700a jdk9-b82
|
||||
ca8a1719588424f6e04e943790c7fcb7cb0b8c8f jdk9-b83
|
||||
df70bb200356fec686681f0295c50cc3ed43c3b3 jdk9-b84
|
||||
3ec06af1368924469f7ce60a00324bac55eaeecc jdk9-b85
|
||||
|
@ -487,3 +487,4 @@ e9e63d93bbfe2c6c23447e2c1f5cc71c98671cba jdk9-b79
|
||||
1c453a12be3036d482abef1dd470f8aff536b6b9 jdk9-b82
|
||||
3ed0df2c553a80e0e26b91a6ce08806ea17a066a jdk9-b83
|
||||
184c4328444974edd6b3b490b9d0177ace7e331c jdk9-b84
|
||||
03845376ea9dbf9690b6a9cfb4ed63f8cc0541c0 jdk9-b85
|
||||
|
@ -23,8 +23,8 @@
|
||||
|
||||
import sun.hotspot.WhiteBox;
|
||||
import sun.misc.Unsafe;
|
||||
import sun.misc.IOUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
@ -109,7 +109,13 @@ public class TestAnonymousClassUnloading {
|
||||
// (1) Load an anonymous version of this class using the corresponding Unsafe method
|
||||
URL classUrl = TestAnonymousClassUnloading.class.getResource("TestAnonymousClassUnloading.class");
|
||||
URLConnection connection = classUrl.openConnection();
|
||||
byte[] classBytes = IOUtils.readFully(connection.getInputStream(), connection.getContentLength(), true);
|
||||
|
||||
int length = connection.getContentLength();
|
||||
byte[] classBytes = connection.getInputStream().readAllBytes();
|
||||
if (length != -1 && classBytes.length != length) {
|
||||
throw new IOException("Expected:" + length + ", actual: " + classBytes.length);
|
||||
}
|
||||
|
||||
Class<?> anonymousClass = UNSAFE.defineAnonymousClass(TestAnonymousClassUnloading.class, classBytes, null);
|
||||
|
||||
// (2) Make sure all paths of doWork are profiled and compiled
|
||||
|
@ -72,8 +72,10 @@ public class VictimClassLoader extends ClassLoader {
|
||||
}
|
||||
|
||||
static byte[] readFully(java.io.InputStream in, int len) throws java.io.IOException {
|
||||
// Warning here:
|
||||
return sun.misc.IOUtils.readFully(in, len, true);
|
||||
byte[] b = in.readAllBytes();
|
||||
if (len != -1 && b.length != len)
|
||||
throw new java.io.IOException("Expected:" + len + ", actual:" + b.length);
|
||||
return b;
|
||||
}
|
||||
|
||||
public void finalize() {
|
||||
|
@ -327,3 +327,4 @@ f464f9b2fb1178f6a957e5730b4b5252c6149ed9 jdk9-b80
|
||||
53fe3c103b6fdf48e2b2676c0c4818ef5a10fa21 jdk9-b82
|
||||
497bc2654e11684b11de46744227883d7e760f35 jdk9-b83
|
||||
91795d86744f3074d1e59b1e75d9c851c098688f jdk9-b84
|
||||
1d9850c1b35c74e8b5c17970ed5d46dc0fc33f06 jdk9-b85
|
||||
|
@ -330,3 +330,4 @@ e9940bf1c8ddaa6f1f5f1813846b080f0ccaf50b jdk9-b80
|
||||
52d9ad2536ba6c6f1cc5561c0a0ee2b4847fd62c jdk9-b82
|
||||
d7ee8157f4feced67924e421225c6f844079a03d jdk9-b83
|
||||
51729143f8fe038f52cf55720c4c1f89267f5948 jdk9-b84
|
||||
67b626ec730d2601d95ef036d06be34b37fa9ce6 jdk9-b85
|
||||
|
@ -327,3 +327,4 @@ fdc13a2d32867ca3c57b7fa2620c6b59c83168cb jdk9-b81
|
||||
b10b64263b563e21f055c881444f625ec618b826 jdk9-b82
|
||||
d11f25ce3c545823f53bb978d454a4d2901abac3 jdk9-b83
|
||||
757ef7f6d0042934edea3e0bf616fad2c1a22789 jdk9-b84
|
||||
fe40b31c0e526d357cf5b62044fea006e43b53a5 jdk9-b85
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1994, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1994, 2015, 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,42 +26,58 @@
|
||||
package java.lang;
|
||||
|
||||
/**
|
||||
* Thrown to indicate that an array has been accessed with an
|
||||
* illegal index. The index is either negative or greater than or
|
||||
* equal to the size of the array.
|
||||
* Thrown to indicate that an array has been accessed with an illegal index. The
|
||||
* index is either negative or greater than or equal to the size of the array.
|
||||
*
|
||||
* @author unascribed
|
||||
* @since 1.0
|
||||
* @since 1.0
|
||||
*/
|
||||
public
|
||||
class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException {
|
||||
public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException {
|
||||
private static final long serialVersionUID = -5116101128118950844L;
|
||||
|
||||
/**
|
||||
* Constructs an <code>ArrayIndexOutOfBoundsException</code> with no
|
||||
* detail message.
|
||||
* Constructs an {@code ArrayIndexOutOfBoundsException} with no detail
|
||||
* message.
|
||||
*/
|
||||
public ArrayIndexOutOfBoundsException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new <code>ArrayIndexOutOfBoundsException</code>
|
||||
* class with an argument indicating the illegal index.
|
||||
* Constructs an {@code ArrayIndexOutOfBoundsException} class with the
|
||||
* specified detail message.
|
||||
*
|
||||
* @param index the illegal index.
|
||||
* @param s the detail message.
|
||||
*/
|
||||
public ArrayIndexOutOfBoundsException(String s) {
|
||||
super(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new {@code ArrayIndexOutOfBoundsException} class with an
|
||||
* argument indicating the illegal index.
|
||||
*
|
||||
* <p>The index is included in this exception's detail message. The
|
||||
* exact presentation format of the detail message is unspecified.
|
||||
*
|
||||
* @param index the illegal index.
|
||||
*/
|
||||
public ArrayIndexOutOfBoundsException(int index) {
|
||||
super("Array index out of range: " + index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs an <code>ArrayIndexOutOfBoundsException</code> class
|
||||
* with the specified detail message.
|
||||
* Constructs a new {@code ArrayIndexOutOfBoundsException} class with
|
||||
* arguments indicating two out of bound values.
|
||||
*
|
||||
* @param s the detail message.
|
||||
* <p>The out of bound values are included in this exception's detail
|
||||
* message. The exact presentation format of the detail message is
|
||||
* unspecified.
|
||||
*
|
||||
* @param a the first out of bound value.
|
||||
* @param b the second out of bound value.
|
||||
* @since 9
|
||||
*/
|
||||
public ArrayIndexOutOfBoundsException(String s) {
|
||||
super(s);
|
||||
public ArrayIndexOutOfBoundsException(int a, int b) {
|
||||
super("Array indexed access out of bounds: " + a + ", " + b);
|
||||
}
|
||||
}
|
||||
|
@ -182,7 +182,7 @@ class FdLibm {
|
||||
}
|
||||
|
||||
int k = 0;
|
||||
if (a > 0x1.0p500) { // a > 2**500
|
||||
if (a > 0x1.00000_ffff_ffffp500) { // a > ~2**500
|
||||
// scale a and b by 2**-600
|
||||
ha -= 0x25800000;
|
||||
hb -= 0x25800000;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1995, 2015, 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,28 +31,57 @@ package java.lang;
|
||||
* <p>
|
||||
* Applications can subclass this class to indicate similar exceptions.
|
||||
*
|
||||
* @author Frank Yellin
|
||||
* @since 1.0
|
||||
* @author Frank Yellin
|
||||
* @since 1.0
|
||||
*/
|
||||
public
|
||||
class IndexOutOfBoundsException extends RuntimeException {
|
||||
public class IndexOutOfBoundsException extends RuntimeException {
|
||||
private static final long serialVersionUID = 234122996006267687L;
|
||||
|
||||
/**
|
||||
* Constructs an <code>IndexOutOfBoundsException</code> with no
|
||||
* detail message.
|
||||
* Constructs an {@code IndexOutOfBoundsException} with no detail message.
|
||||
*/
|
||||
public IndexOutOfBoundsException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs an <code>IndexOutOfBoundsException</code> with the
|
||||
* specified detail message.
|
||||
* Constructs an {@code IndexOutOfBoundsException} with the specified detail
|
||||
* message.
|
||||
*
|
||||
* @param s the detail message.
|
||||
* @param s the detail message
|
||||
*/
|
||||
public IndexOutOfBoundsException(String s) {
|
||||
super(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new {@code IndexOutOfBoundsException} class with an
|
||||
* argument indicating the illegal index.
|
||||
*
|
||||
* <p>The index is included in this exception's detail message. The
|
||||
* exact presentation format of the detail message is unspecified.
|
||||
*
|
||||
* @param index the illegal index.
|
||||
* @since 9
|
||||
*/
|
||||
public IndexOutOfBoundsException(int index) {
|
||||
super("Index out of range: " + index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs an {@code IndexOutOfBoundsException} with arguments indicating
|
||||
* two out of bound values.
|
||||
*
|
||||
* <p>The out of bound values are included in this exception's detail
|
||||
* message. The exact presentation format of the detail message is
|
||||
* unspecified.
|
||||
*
|
||||
* @param a the first out of bound value
|
||||
* @param b the second out of bound value
|
||||
* @since 9
|
||||
*/
|
||||
public IndexOutOfBoundsException(int a, int b) {
|
||||
super("Indexed access out of bounds: " + a + ", " + b);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1994, 2015, 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,44 +26,61 @@
|
||||
package java.lang;
|
||||
|
||||
/**
|
||||
* Thrown by {@code String} methods to indicate that an index
|
||||
* is either negative or greater than the size of the string. For
|
||||
* some methods such as the charAt method, this exception also is
|
||||
* thrown when the index is equal to the size of the string.
|
||||
* Thrown by {@code String} methods to indicate that an index is either negative
|
||||
* or greater than the size of the string. For some methods such as the
|
||||
* {@link String#charAt charAt} method, this exception also is thrown when the
|
||||
* index is equal to the size of the string.
|
||||
*
|
||||
* @author unascribed
|
||||
* @see java.lang.String#charAt(int)
|
||||
* @since 1.0
|
||||
* @see java.lang.String#charAt(int)
|
||||
* @since 1.0
|
||||
*/
|
||||
public
|
||||
class StringIndexOutOfBoundsException extends IndexOutOfBoundsException {
|
||||
public class StringIndexOutOfBoundsException extends IndexOutOfBoundsException {
|
||||
private static final long serialVersionUID = -6762910422159637258L;
|
||||
|
||||
/**
|
||||
* Constructs a {@code StringIndexOutOfBoundsException} with no
|
||||
* detail message.
|
||||
* Constructs a {@code StringIndexOutOfBoundsException} with no detail
|
||||
* message.
|
||||
*/
|
||||
public StringIndexOutOfBoundsException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a {@code StringIndexOutOfBoundsException} with
|
||||
* the specified detail message.
|
||||
* Constructs a {@code StringIndexOutOfBoundsException} with the specified
|
||||
* detail message.
|
||||
*
|
||||
* @param s the detail message.
|
||||
* @param s the detail message.
|
||||
*/
|
||||
public StringIndexOutOfBoundsException(String s) {
|
||||
super(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new {@code StringIndexOutOfBoundsException}
|
||||
* class with an argument indicating the illegal index.
|
||||
* Constructs a new {@code StringIndexOutOfBoundsException} class with an
|
||||
* argument indicating the illegal index.
|
||||
*
|
||||
* @param index the illegal index.
|
||||
* <p>The index is included in this exception's detail message. The
|
||||
* exact presentation format of the detail message is unspecified.
|
||||
*
|
||||
* @param index the illegal index.
|
||||
*/
|
||||
public StringIndexOutOfBoundsException(int index) {
|
||||
super("String index out of range: " + index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a new {@code StringIndexOutOfBoundsException} class with
|
||||
* arguments indicating two out of bound values.
|
||||
*
|
||||
* <p>The out of bound values are included in this exception's detail
|
||||
* message. The exact presentation format of the detail message is
|
||||
* unspecified.
|
||||
*
|
||||
* @param a the first out of bound value.
|
||||
* @param b the second out of bound value.
|
||||
* @since 9
|
||||
*/
|
||||
public StringIndexOutOfBoundsException(int a, int b) {
|
||||
super("String indexed access out of bounds: " + a + ", " + b);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, 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,8 +79,10 @@ public abstract class AuthProvider extends Provider {
|
||||
* this provider to obtain authentication information
|
||||
* from the caller, which may be {@code null}
|
||||
*
|
||||
* @exception LoginException if the login operation fails
|
||||
* @exception SecurityException if the caller does not pass a
|
||||
* @throws IllegalStateException if the provider requires configuration
|
||||
* and {@link configure} has not been called
|
||||
* @throws LoginException if the login operation fails
|
||||
* @throws SecurityException if the caller does not pass a
|
||||
* security check for
|
||||
* {@code SecurityPermission("authProvider.name")},
|
||||
* where {@code name} is the value returned by
|
||||
@ -92,8 +94,10 @@ public abstract class AuthProvider extends Provider {
|
||||
/**
|
||||
* Log out from this provider.
|
||||
*
|
||||
* @exception LoginException if the logout operation fails
|
||||
* @exception SecurityException if the caller does not pass a
|
||||
* @throws IllegalStateException if the provider requires configuration
|
||||
* and {@link configure} has not been called
|
||||
* @throws LoginException if the logout operation fails
|
||||
* @throws SecurityException if the caller does not pass a
|
||||
* security check for
|
||||
* {@code SecurityPermission("authProvider.name")},
|
||||
* where {@code name} is the value returned by
|
||||
@ -118,7 +122,9 @@ public abstract class AuthProvider extends Provider {
|
||||
* @param handler a {@code CallbackHandler} for obtaining
|
||||
* authentication information, which may be {@code null}
|
||||
*
|
||||
* @exception SecurityException if the caller does not pass a
|
||||
* @throws IllegalStateException if the provider requires configuration
|
||||
* and {@link configure} has not been called
|
||||
* @throws SecurityException if the caller does not pass a
|
||||
* security check for
|
||||
* {@code SecurityPermission("authProvider.name")},
|
||||
* where {@code name} is the value returned by
|
||||
|
@ -187,12 +187,29 @@ public abstract class Provider extends Properties {
|
||||
* is invalid.
|
||||
* @return a provider configured with the supplied configuration argument.
|
||||
*
|
||||
* @since 1.9
|
||||
* @since 9
|
||||
*/
|
||||
public Provider configure(String configArg) {
|
||||
throw new UnsupportedOperationException("configure is not supported");
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this provider instance has been configured.
|
||||
*
|
||||
* @implSpec
|
||||
* The default implementation returns true.
|
||||
* Subclasses should override this method if the provider instance requires
|
||||
* an explicit {@code configure} call after being constructed.
|
||||
*
|
||||
* @return true if no further configuration is needed, false otherwise.
|
||||
*
|
||||
* @since 9
|
||||
*/
|
||||
public boolean isConfigured() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the name of this provider.
|
||||
*
|
||||
|
@ -53,6 +53,17 @@ import java.util.StringTokenizer;
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>authProvider.{provider name}</td>
|
||||
* <td>Allow the named provider to be an AuthProvider for login and
|
||||
* logout operations. </td>
|
||||
* <td>This allows the named provider to perform login and logout
|
||||
* operations. The named provider must extend {@code AuthProvider}
|
||||
* and care must be taken to grant to a trusted provider since
|
||||
* login operations involve sensitive authentication information
|
||||
* such as PINs and passwords. </td>
|
||||
* </tr>
|
||||
*
|
||||
* <tr>
|
||||
* <td>createAccessControlContext</td>
|
||||
* <td>Creation of an AccessControlContext</td>
|
||||
* <td>This allows someone to instantiate an AccessControlContext
|
||||
|
@ -371,8 +371,8 @@ public final class Currency implements Serializable {
|
||||
* instance is needed
|
||||
* @return the <code>Currency</code> instance for the country of the given
|
||||
* locale, or {@code null}
|
||||
* @exception NullPointerException if <code>locale</code> or its country
|
||||
* code is {@code null}
|
||||
* @exception NullPointerException if <code>locale</code>
|
||||
* is {@code null}
|
||||
* @exception IllegalArgumentException if the country of the given {@code locale}
|
||||
* is not a supported ISO 3166 country code.
|
||||
*/
|
||||
|
@ -25,13 +25,29 @@
|
||||
|
||||
package java.util;
|
||||
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* This class consists of {@code static} utility methods for operating
|
||||
* on objects. These utilities include {@code null}-safe or {@code
|
||||
* null}-tolerant methods for computing the hash code of an object,
|
||||
* returning a string for an object, and comparing two objects.
|
||||
* on objects, or checking certain conditions before operation. These utilities
|
||||
* include {@code null}-safe or {@code null}-tolerant methods for computing the
|
||||
* hash code of an object, returning a string for an object, comparing two
|
||||
* objects, and checking if indexes or sub-range values are out of bounds.
|
||||
*
|
||||
* @apiNote
|
||||
* Static methods such as {@link Objects#checkIndex},
|
||||
* {@link Objects#checkFromToIndex}, and {@link Objects#checkFromIndexSize} are
|
||||
* provided for the convenience of checking if values corresponding to indexes
|
||||
* and sub-ranges are out of bounds.
|
||||
* Variations of these static methods support customization of the runtime
|
||||
* exception, and corresponding exception detail message, that is thrown when
|
||||
* values are out of bounds. Such methods accept a functional interface
|
||||
* argument, instances of {@code BiFunction}, that maps out of bound values to a
|
||||
* runtime exception. Care should be taken when using such methods in
|
||||
* combination with an argument that is a lambda expression, method reference or
|
||||
* class that capture values. In such cases the cost of capture, related to
|
||||
* functional interface allocation, may exceed the cost of checking bounds.
|
||||
*
|
||||
* @since 1.7
|
||||
*/
|
||||
@ -290,4 +306,230 @@ public final class Objects {
|
||||
throw new NullPointerException(messageSupplier.get());
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps out of bounds values to a runtime exception.
|
||||
*
|
||||
* @param a the first out of bound value
|
||||
* @param b the second out of bound value
|
||||
* @param oobe the exception mapping function that when applied with out of
|
||||
* bounds arguments returns a runtime exception. If {@code null}
|
||||
* then, it's as if an exception mapping function was supplied that
|
||||
* returns {@link IndexOutOfBoundsException} for any given arguments.
|
||||
* @return the runtime exception
|
||||
*/
|
||||
private static RuntimeException outOfBounds(
|
||||
int a, int b, BiFunction<Integer, Integer, ? extends RuntimeException> oobe) {
|
||||
return oobe == null
|
||||
? new IndexOutOfBoundsException(a, b)
|
||||
: oobe.apply(a, b);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the {@code index} is within the bounds of the range from
|
||||
* {@code 0} (inclusive) to {@code length} (exclusive).
|
||||
*
|
||||
* <p>The {@code index} is defined to be out of bounds if any of the
|
||||
* following inequalities is true:
|
||||
* <ul>
|
||||
* <li>{@code index < 0}</li>
|
||||
* <li>{@code index >= length}</li>
|
||||
* <li>{@code length < 0}, which is implied from the former inequalities</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param index the index
|
||||
* @param length the upper-bound (exclusive) of the range
|
||||
* @return {@code index} if it is within bounds of the range
|
||||
* @throws IndexOutOfBoundsException if the {@code index} is out of bounds
|
||||
* @since 9
|
||||
*/
|
||||
public static
|
||||
int checkIndex(int index, int length) throws IndexOutOfBoundsException {
|
||||
return checkIndex(index, length, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the {@code index} is within the bounds of the range from
|
||||
* {@code 0} (inclusive) to {@code length} (exclusive).
|
||||
*
|
||||
* <p>The {@code index} is defined to be out of bounds if any of the
|
||||
* following inequalities is true:
|
||||
* <ul>
|
||||
* <li>{@code index < 0}</li>
|
||||
* <li>{@code index >= length}</li>
|
||||
* <li>{@code length < 0}, which is implied from the former inequalities</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>If the {@code index} is out of bounds, then a runtime exception is
|
||||
* thrown that is the result of applying the arguments {@code index} and
|
||||
* {@code length} to the given exception mapping function.
|
||||
*
|
||||
* @param <T> the type of runtime exception to throw if the arguments are
|
||||
* out of bounds
|
||||
* @param index the index
|
||||
* @param length the upper-bound (exclusive) of the range
|
||||
* @param oobe the exception mapping function that when applied with out
|
||||
* of bounds arguments returns a runtime exception. If {@code null}
|
||||
* then, it's as if an exception mapping function was supplied that
|
||||
* returns {@link IndexOutOfBoundsException} for any given arguments.
|
||||
* @return {@code index} if it is within bounds of the range
|
||||
* @throws T if the {@code index} is out of bounds, then a runtime exception
|
||||
* is thrown that is the result of applying the out of bounds
|
||||
* arguments to the exception mapping function.
|
||||
* @throws IndexOutOfBoundsException if the {@code index} is out of bounds
|
||||
* and the exception mapping function is {@code null}
|
||||
* @since 9
|
||||
*/
|
||||
/*
|
||||
@HotSpotIntrinsicCandidate
|
||||
This method will be made intrinsic in C2 to guide HotSpot to perform
|
||||
unsigned comparisons of the index and length when it is known the length is
|
||||
a non-negative value (such as that of an array length or from the upper
|
||||
bound of a loop)
|
||||
*/
|
||||
public static <T extends RuntimeException>
|
||||
int checkIndex(int index, int length,
|
||||
BiFunction<Integer, Integer, T> oobe) throws T, IndexOutOfBoundsException {
|
||||
if (index < 0 || index >= length)
|
||||
throw outOfBounds(index, length, oobe);
|
||||
return index;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the sub-range from {@code fromIndex} (inclusive) to
|
||||
* {@code toIndex} (exclusive) is within the bounds of range from {@code 0}
|
||||
* (inclusive) to {@code length} (exclusive).
|
||||
*
|
||||
* <p>The sub-range is defined to be out of bounds if any of the following
|
||||
* inequalities is true:
|
||||
* <ul>
|
||||
* <li>{@code fromIndex < 0}</li>
|
||||
* <li>{@code fromIndex > toIndex}</li>
|
||||
* <li>{@code toIndex > length}</li>
|
||||
* <li>{@code length < 0}, which is implied from the former inequalities</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param fromIndex the lower-bound (inclusive) of the sub-range
|
||||
* @param toIndex the upper-bound (exclusive) of the sub-range
|
||||
* @param length the upper-bound (exclusive) the range
|
||||
* @return {@code fromIndex} if the sub-range within bounds of the range
|
||||
* @throws IndexOutOfBoundsException if the sub-range is out of bounds
|
||||
* @since 9
|
||||
*/
|
||||
public static
|
||||
int checkFromToIndex(int fromIndex, int toIndex, int length) throws IndexOutOfBoundsException {
|
||||
return checkFromToIndex(fromIndex, toIndex, length, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the sub-range from {@code fromIndex} (inclusive) to
|
||||
* {@code toIndex} (exclusive) is within the bounds of range from {@code 0}
|
||||
* (inclusive) to {@code length} (exclusive).
|
||||
*
|
||||
* <p>The sub-range is defined to be out of bounds if any of the following
|
||||
* inequalities is true:
|
||||
* <ul>
|
||||
* <li>{@code fromIndex < 0}</li>
|
||||
* <li>{@code fromIndex > toIndex}</li>
|
||||
* <li>{@code toIndex > length}</li>
|
||||
* <li>{@code length < 0}, which is implied from the former inequalities</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>If the sub-range is out of bounds, then a runtime exception is thrown
|
||||
* that is the result of applying the arguments {@code fromIndex} and
|
||||
* {@code toIndex} to the given exception mapping function.
|
||||
*
|
||||
* @param <T> the type of runtime exception to throw if the arguments are
|
||||
* out of bounds
|
||||
* @param fromIndex the lower-bound (inclusive) of the sub-range
|
||||
* @param toIndex the upper-bound (exclusive) of the sub-range
|
||||
* @param length the upper-bound (exclusive) the range
|
||||
* @param oobe the exception mapping function that when applied with out
|
||||
* of bounds arguments returns a runtime exception. If {@code null}
|
||||
* then, it's as if an exception mapping function was supplied that
|
||||
* returns {@link IndexOutOfBoundsException} for any given arguments.
|
||||
* @return {@code fromIndex} if the sub-range within bounds of the range
|
||||
* @throws T if the sub-range is out of bounds, then a runtime exception is
|
||||
* thrown that is the result of applying the out of bounds arguments
|
||||
* to the exception mapping function.
|
||||
* @throws IndexOutOfBoundsException if the sub-range is out of bounds and
|
||||
* the exception mapping function is {@code null}
|
||||
* @since 9
|
||||
*/
|
||||
public static <T extends RuntimeException>
|
||||
int checkFromToIndex(int fromIndex, int toIndex, int length,
|
||||
BiFunction<Integer, Integer, T> oobe) throws T, IndexOutOfBoundsException {
|
||||
if (fromIndex < 0 || fromIndex > toIndex || toIndex > length)
|
||||
throw outOfBounds(fromIndex, toIndex, oobe);
|
||||
return fromIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the sub-range from {@code fromIndex} (inclusive) to
|
||||
* {@code fromIndex + size} (exclusive) is within the bounds of range from
|
||||
* {@code 0} (inclusive) to {@code length} (exclusive).
|
||||
*
|
||||
* <p>The sub-range is defined to be out of bounds if any of the following
|
||||
* inequalities is true:
|
||||
* <ul>
|
||||
* <li>{@code fromIndex < 0}</li>
|
||||
* <li>{@code size < 0}</li>
|
||||
* <li>{@code fromIndex + size > length}, taking into account integer overflow</li>
|
||||
* <li>{@code length < 0}, which is implied from the former inequalities</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param fromIndex the lower-bound (inclusive) of the sub-interval
|
||||
* @param size the size of the sub-range
|
||||
* @param length the upper-bound (exclusive) of the range
|
||||
* @return {@code fromIndex} if the sub-range within bounds of the range
|
||||
* @throws IndexOutOfBoundsException if the sub-range is out of bounds
|
||||
* @since 9
|
||||
*/
|
||||
public static
|
||||
int checkFromIndexSize(int fromIndex, int size, int length) throws IndexOutOfBoundsException {
|
||||
return checkFromIndexSize(fromIndex, size, length, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the sub-range from {@code fromIndex} (inclusive) to
|
||||
* {@code fromIndex + size} (exclusive) is within the bounds of range from
|
||||
* {@code 0} (inclusive) to {@code length} (exclusive).
|
||||
*
|
||||
* <p>The sub-range is defined to be out of bounds if any of the following
|
||||
* inequalities is true:
|
||||
* <ul>
|
||||
* <li>{@code fromIndex < 0}</li>
|
||||
* <li>{@code size < 0}</li>
|
||||
* <li>{@code fromIndex + size > length}, taking into account integer overflow</li>
|
||||
* <li>{@code length < 0}, which is implied from the former inequalities</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>If the sub-range is out of bounds then, a runtime exception is thrown
|
||||
* that is the result of applying the arguments {@code fromIndex} and
|
||||
* {@code size} to the given exception mapping function.
|
||||
*
|
||||
* @param <T> the type of runtime exception to throw if the arguments are
|
||||
* out of bounds
|
||||
* @param fromIndex the lower-bound (inclusive) of the sub-interval
|
||||
* @param size the size of the sub-range
|
||||
* @param length the upper-bound (exclusive) of the range
|
||||
* @param oobe the exception mapping function that when applied with out
|
||||
* of bounds arguments returns a runtime exception. If {@code null}
|
||||
* then, it's as if an exception mapping function was supplied that
|
||||
* returns {@link IndexOutOfBoundsException} for any given arguments.
|
||||
* @return {@code fromIndex} if the sub-range within bounds of the range
|
||||
* @throws T if the sub-range is out of bounds, then a runtime exception is
|
||||
* thrown that is the result of applying the out of bounds arguments
|
||||
* to the exception mapping function.
|
||||
* @throws IndexOutOfBoundsException if the sub-range is out of bounds and
|
||||
* the exception mapping function is {@code null}
|
||||
* @since 9
|
||||
*/
|
||||
public static <T extends RuntimeException>
|
||||
int checkFromIndexSize(int fromIndex, int size, int length,
|
||||
BiFunction<Integer, Integer, T> oobe) throws T, IndexOutOfBoundsException {
|
||||
if ((length | fromIndex | size) < 0 || size > length - fromIndex)
|
||||
throw outOfBounds(fromIndex, size, oobe);
|
||||
return fromIndex;
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,6 @@ import java.security.cert.Certificate;
|
||||
import java.security.AccessController;
|
||||
import java.security.CodeSource;
|
||||
import jdk.internal.misc.SharedSecrets;
|
||||
import sun.misc.IOUtils;
|
||||
import sun.security.action.GetPropertyAction;
|
||||
import sun.security.util.ManifestEntryVerifier;
|
||||
import sun.security.util.SignatureFileVerifier;
|
||||
@ -438,7 +437,12 @@ class JarFile extends ZipFile {
|
||||
*/
|
||||
private byte[] getBytes(ZipEntry ze) throws IOException {
|
||||
try (InputStream is = super.getInputStream(ze)) {
|
||||
return IOUtils.readFully(is, (int)ze.getSize(), true);
|
||||
int len = (int)ze.getSize();
|
||||
byte[] b = is.readAllBytes();
|
||||
if (len != -1 && b.length != len)
|
||||
throw new EOFException("Expected:" + len + ", read:" + b.length);
|
||||
|
||||
return b;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,10 +25,10 @@
|
||||
|
||||
package sun.invoke.anon;
|
||||
|
||||
import java.io.EOFException;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import sun.misc.IOUtils;
|
||||
|
||||
/**
|
||||
* Anonymous class loader. Will load any valid classfile, producing
|
||||
@ -225,6 +225,10 @@ public class AnonymousClassLoader {
|
||||
if (contentLength < 0)
|
||||
throw new IOException("invalid content length "+contentLength);
|
||||
|
||||
return IOUtils.readFully(connection.getInputStream(), contentLength, true);
|
||||
byte[] b = connection.getInputStream().readAllBytes();
|
||||
if (b.length != contentLength)
|
||||
throw new EOFException("Expected:" + contentLength + ", read:" + b.length);
|
||||
|
||||
return b;
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
package sun.reflect.misc;
|
||||
|
||||
import java.io.EOFException;
|
||||
import java.security.AllPermission;
|
||||
import java.security.AccessController;
|
||||
import java.security.PermissionCollection;
|
||||
@ -43,7 +44,6 @@ import java.lang.reflect.Modifier;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import sun.misc.IOUtils;
|
||||
|
||||
|
||||
class Trampoline {
|
||||
@ -368,15 +368,12 @@ public final class MethodUtil extends SecureClassLoader {
|
||||
}
|
||||
}
|
||||
int len = uc.getContentLength();
|
||||
InputStream in = new BufferedInputStream(uc.getInputStream());
|
||||
|
||||
byte[] b;
|
||||
try {
|
||||
b = IOUtils.readFully(in, len, true);
|
||||
} finally {
|
||||
in.close();
|
||||
try (InputStream in = new BufferedInputStream(uc.getInputStream())) {
|
||||
byte[] b = in.readAllBytes();
|
||||
if (len != -1 && b.length != len)
|
||||
throw new EOFException("Expected:" + len + ", read:" + b.length);
|
||||
return b;
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
|
||||
|
@ -33,7 +33,6 @@ import java.security.cert.CertificateFactory;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.util.*;
|
||||
|
||||
import sun.misc.IOUtils;
|
||||
import sun.security.pkcs.EncryptedPrivateKeyInfo;
|
||||
import sun.security.util.PolicyUtil;
|
||||
|
||||
|
@ -32,9 +32,9 @@ import java.security.cert.CertificateFactory;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.util.*;
|
||||
|
||||
import sun.misc.IOUtils;
|
||||
import sun.security.pkcs.EncryptedPrivateKeyInfo;
|
||||
import sun.security.pkcs12.PKCS12KeyStore;
|
||||
import sun.security.util.IOUtils;
|
||||
import sun.security.util.KeyStoreDelegator;
|
||||
|
||||
/**
|
||||
|
@ -27,13 +27,13 @@ package sun.security.timestamp;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.EOFException;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.util.*;
|
||||
|
||||
import sun.misc.IOUtils;
|
||||
import sun.security.util.Debug;
|
||||
|
||||
/**
|
||||
@ -147,8 +147,11 @@ public class HttpTimestamper implements Timestamper {
|
||||
}
|
||||
verifyMimeType(connection.getContentType());
|
||||
|
||||
int contentLength = connection.getContentLength();
|
||||
replyBuffer = IOUtils.readFully(input, contentLength, false);
|
||||
int clen = connection.getContentLength();
|
||||
replyBuffer = input.readAllBytes();
|
||||
if (clen != -1 && replyBuffer.length != clen)
|
||||
throw new EOFException("Expected:" + clen +
|
||||
", read:" + replyBuffer.length);
|
||||
|
||||
if (debug != null) {
|
||||
debug.println("received timestamp response (length=" +
|
||||
|
@ -28,7 +28,6 @@ package sun.security.util;
|
||||
import java.io.*;
|
||||
import java.math.BigInteger;
|
||||
import java.util.Date;
|
||||
import sun.misc.IOUtils;
|
||||
|
||||
/**
|
||||
* Represents a single DER-encoded value. DER encoding rules are a subset
|
||||
|
@ -27,7 +27,7 @@
|
||||
* IOUtils: A collection of IO-related public static methods.
|
||||
*/
|
||||
|
||||
package sun.misc;
|
||||
package sun.security.util;
|
||||
|
||||
import java.io.EOFException;
|
||||
import java.io.IOException;
|
@ -33,6 +33,7 @@ import java.net.URLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.io.EOFException;
|
||||
import java.io.File;
|
||||
import java.io.FilePermission;
|
||||
import java.io.IOException;
|
||||
@ -51,7 +52,6 @@ import java.security.Permission;
|
||||
import java.security.PermissionCollection;
|
||||
import sun.awt.AppContext;
|
||||
import sun.awt.SunToolkit;
|
||||
import sun.misc.IOUtils;
|
||||
import sun.misc.ManagedLocalsThread;
|
||||
import sun.net.www.ParseUtil;
|
||||
import sun.security.util.SecurityConstants;
|
||||
@ -334,7 +334,9 @@ public class AppletClassLoader extends URLClassLoader {
|
||||
|
||||
byte[] b;
|
||||
try {
|
||||
b = IOUtils.readFully(in, len, true);
|
||||
b = in.readAllBytes();
|
||||
if (len != -1 && b.length != len)
|
||||
throw new EOFException("Expected:" + len + ", read:" + b.length);
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
|
@ -45,7 +45,6 @@ import javax.naming.ldap.Control;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.Arrays;
|
||||
import sun.misc.IOUtils;
|
||||
import javax.net.SocketFactory;
|
||||
|
||||
/**
|
||||
@ -862,7 +861,7 @@ public final class Connection implements Runnable {
|
||||
}
|
||||
|
||||
// read in seqlen bytes
|
||||
byte[] left = IOUtils.readFully(in, seqlen, false);
|
||||
byte[] left = readFully(in, seqlen);
|
||||
inbuf = Arrays.copyOf(inbuf, offset + left.length);
|
||||
System.arraycopy(left, 0, inbuf, offset, left.length);
|
||||
offset += left.length;
|
||||
@ -957,6 +956,31 @@ System.err.println("bytesread: " + bytesread);
|
||||
}
|
||||
}
|
||||
|
||||
private static byte[] readFully(InputStream is, int length)
|
||||
throws IOException
|
||||
{
|
||||
byte[] buf = new byte[Math.min(length, 8192)];
|
||||
int nread = 0;
|
||||
while (nread < length) {
|
||||
int bytesToRead;
|
||||
if (nread >= buf.length) { // need to allocate a larger buffer
|
||||
bytesToRead = Math.min(length - nread, buf.length + 8192);
|
||||
if (buf.length < nread + bytesToRead) {
|
||||
buf = Arrays.copyOf(buf, nread + bytesToRead);
|
||||
}
|
||||
} else {
|
||||
bytesToRead = buf.length - nread;
|
||||
}
|
||||
int count = is.read(buf, nread, bytesToRead);
|
||||
if (count < 0) {
|
||||
if (buf.length != nread)
|
||||
buf = Arrays.copyOf(buf, nread);
|
||||
break;
|
||||
}
|
||||
nread += count;
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
// This code must be uncommented to run the LdapAbandonTest.
|
||||
/*public void sendSearchReqs(String dn, int numReqs) {
|
||||
|
@ -31,10 +31,9 @@
|
||||
|
||||
package sun.security.krb5.internal;
|
||||
|
||||
import sun.misc.IOUtils;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.*;
|
||||
import sun.security.util.IOUtils;
|
||||
|
||||
public abstract class NetClient implements AutoCloseable {
|
||||
public static NetClient getInstance(String protocol, String hostname, int port,
|
||||
|
@ -36,10 +36,10 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import sun.misc.IOUtils;
|
||||
import sun.security.krb5.*;
|
||||
import sun.security.krb5.internal.*;
|
||||
import sun.security.krb5.internal.util.KrbDataInputStream;
|
||||
import sun.security.util.IOUtils;
|
||||
|
||||
/**
|
||||
* This class extends KrbDataInputStream. It is used for parsing FCC-format
|
||||
|
@ -106,9 +106,9 @@ public final class SunPKCS11 extends AuthProvider {
|
||||
public Provider configure(String configArg) throws InvalidParameterException {
|
||||
final String newConfigName = checkNull(configArg);
|
||||
try {
|
||||
return AccessController.doPrivileged(new PrivilegedExceptionAction<Provider>() {
|
||||
return AccessController.doPrivileged(new PrivilegedExceptionAction<>() {
|
||||
@Override
|
||||
public Provider run() throws Exception {
|
||||
public SunPKCS11 run() throws Exception {
|
||||
return new SunPKCS11(new Config(newConfigName));
|
||||
}
|
||||
});
|
||||
@ -119,6 +119,11 @@ public final class SunPKCS11 extends AuthProvider {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isConfigured() {
|
||||
return (config != null);
|
||||
}
|
||||
|
||||
private static <T> T checkNull(T obj) {
|
||||
if (obj == null) {
|
||||
throw new NullPointerException();
|
||||
@ -1142,8 +1147,10 @@ public final class SunPKCS11 extends AuthProvider {
|
||||
* @param handler the <code>CallbackHandler</code> used by
|
||||
* this provider to communicate with the caller
|
||||
*
|
||||
* @exception LoginException if the login operation fails
|
||||
* @exception SecurityException if the does not pass a security check for
|
||||
* @throws IllegalStateException if the provider requires configuration
|
||||
* and Provider.configure has not been called
|
||||
* @throws LoginException if the login operation fails
|
||||
* @throws SecurityException if the does not pass a security check for
|
||||
* <code>SecurityPermission("authProvider.<i>name</i>")</code>,
|
||||
* where <i>name</i> is the value returned by
|
||||
* this provider's <code>getName</code> method
|
||||
@ -1151,8 +1158,11 @@ public final class SunPKCS11 extends AuthProvider {
|
||||
public void login(Subject subject, CallbackHandler handler)
|
||||
throws LoginException {
|
||||
|
||||
// security check
|
||||
if (!isConfigured()) {
|
||||
throw new IllegalStateException("Configuration is required");
|
||||
}
|
||||
|
||||
// security check
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
if (debug != null) {
|
||||
@ -1271,16 +1281,21 @@ public final class SunPKCS11 extends AuthProvider {
|
||||
/**
|
||||
* Log out from this provider
|
||||
*
|
||||
* @exception LoginException if the logout operation fails
|
||||
* @exception SecurityException if the does not pass a security check for
|
||||
* @throws IllegalStateException if the provider requires configuration
|
||||
* and Provider.configure has not been called
|
||||
* @throws LoginException if the logout operation fails
|
||||
* @throws SecurityException if the does not pass a security check for
|
||||
* <code>SecurityPermission("authProvider.<i>name</i>")</code>,
|
||||
* where <i>name</i> is the value returned by
|
||||
* this provider's <code>getName</code> method
|
||||
*/
|
||||
public void logout() throws LoginException {
|
||||
|
||||
// security check
|
||||
if (!isConfigured()) {
|
||||
throw new IllegalStateException("Configuration is required");
|
||||
}
|
||||
|
||||
// security check
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
sm.checkPermission
|
||||
@ -1353,7 +1368,9 @@ public final class SunPKCS11 extends AuthProvider {
|
||||
* @param handler a <code>CallbackHandler</code> for obtaining
|
||||
* authentication information, which may be <code>null</code>
|
||||
*
|
||||
* @exception SecurityException if the caller does not pass a
|
||||
* @throws IllegalStateException if the provider requires configuration
|
||||
* and Provider.configure has not been called
|
||||
* @throws SecurityException if the caller does not pass a
|
||||
* security check for
|
||||
* <code>SecurityPermission("authProvider.<i>name</i>")</code>,
|
||||
* where <i>name</i> is the value returned by
|
||||
@ -1361,8 +1378,11 @@ public final class SunPKCS11 extends AuthProvider {
|
||||
*/
|
||||
public void setCallbackHandler(CallbackHandler handler) {
|
||||
|
||||
// security check
|
||||
if (!isConfigured()) {
|
||||
throw new IllegalStateException("Configuration is required");
|
||||
}
|
||||
|
||||
// security check
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
sm.checkPermission
|
||||
|
192
jdk/test/java/lang/StrictMath/FdlibmTranslit.java
Normal file
192
jdk/test/java/lang/StrictMath/FdlibmTranslit.java
Normal file
@ -0,0 +1,192 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2015, 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* A transliteration of the "Freely Distributable Math Library"
|
||||
* algorithms from C into Java. That is, this port of the algorithms
|
||||
* is as close to the C originals as possible while still being
|
||||
* readable legal Java.
|
||||
*/
|
||||
public class FdlibmTranslit {
|
||||
private FdlibmTranslit() {
|
||||
throw new UnsupportedOperationException("No FdLibmTranslit instances for you.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the low-order 32 bits of the double argument as an int.
|
||||
*/
|
||||
private static int __LO(double x) {
|
||||
long transducer = Double.doubleToRawLongBits(x);
|
||||
return (int)transducer;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a double with its low-order bits of the second argument
|
||||
* and the high-order bits of the first argument..
|
||||
*/
|
||||
private static double __LO(double x, int low) {
|
||||
long transX = Double.doubleToRawLongBits(x);
|
||||
return Double.longBitsToDouble((transX & 0xFFFF_FFFF_0000_0000L)|low );
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the high-order 32 bits of the double argument as an int.
|
||||
*/
|
||||
private static int __HI(double x) {
|
||||
long transducer = Double.doubleToRawLongBits(x);
|
||||
return (int)(transducer >> 32);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a double with its high-order bits of the second argument
|
||||
* and the low-order bits of the first argument..
|
||||
*/
|
||||
private static double __HI(double x, int high) {
|
||||
long transX = Double.doubleToRawLongBits(x);
|
||||
return Double.longBitsToDouble((transX & 0x0000_0000_FFFF_FFFFL)|( ((long)high)) << 32 );
|
||||
}
|
||||
|
||||
public static double hypot(double x, double y) {
|
||||
return Hypot.compute(x, y);
|
||||
}
|
||||
|
||||
/**
|
||||
* hypot(x,y)
|
||||
*
|
||||
* Method :
|
||||
* If (assume round-to-nearest) z = x*x + y*y
|
||||
* has error less than sqrt(2)/2 ulp, than
|
||||
* sqrt(z) has error less than 1 ulp (exercise).
|
||||
*
|
||||
* So, compute sqrt(x*x + y*y) with some care as
|
||||
* follows to get the error below 1 ulp:
|
||||
*
|
||||
* Assume x > y > 0;
|
||||
* (if possible, set rounding to round-to-nearest)
|
||||
* 1. if x > 2y use
|
||||
* x1*x1 + (y*y + (x2*(x + x1))) for x*x + y*y
|
||||
* where x1 = x with lower 32 bits cleared, x2 = x - x1; else
|
||||
* 2. if x <= 2y use
|
||||
* t1*y1 + ((x-y) * (x-y) + (t1*y2 + t2*y))
|
||||
* where t1 = 2x with lower 32 bits cleared, t2 = 2x - t1,
|
||||
* y1= y with lower 32 bits chopped, y2 = y - y1.
|
||||
*
|
||||
* NOTE: scaling may be necessary if some argument is too
|
||||
* large or too tiny
|
||||
*
|
||||
* Special cases:
|
||||
* hypot(x,y) is INF if x or y is +INF or -INF; else
|
||||
* hypot(x,y) is NAN if x or y is NAN.
|
||||
*
|
||||
* Accuracy:
|
||||
* hypot(x,y) returns sqrt(x^2 + y^2) with error less
|
||||
* than 1 ulps (units in the last place)
|
||||
*/
|
||||
static class Hypot {
|
||||
public static double compute(double x, double y) {
|
||||
double a = x;
|
||||
double b = y;
|
||||
double t1, t2, y1, y2, w;
|
||||
int j, k, ha, hb;
|
||||
|
||||
ha = __HI(x) & 0x7fffffff; // high word of x
|
||||
hb = __HI(y) & 0x7fffffff; // high word of y
|
||||
if(hb > ha) {
|
||||
a = y;
|
||||
b = x;
|
||||
j = ha;
|
||||
ha = hb;
|
||||
hb = j;
|
||||
} else {
|
||||
a = x;
|
||||
b = y;
|
||||
}
|
||||
a = __HI(a, ha); // a <- |a|
|
||||
b = __HI(b, hb); // b <- |b|
|
||||
if ((ha - hb) > 0x3c00000) {
|
||||
return a + b; // x / y > 2**60
|
||||
}
|
||||
k=0;
|
||||
if (ha > 0x5f300000) { // a>2**500
|
||||
if (ha >= 0x7ff00000) { // Inf or NaN
|
||||
w = a + b; // for sNaN
|
||||
if (((ha & 0xfffff) | __LO(a)) == 0)
|
||||
w = a;
|
||||
if (((hb ^ 0x7ff00000) | __LO(b)) == 0)
|
||||
w = b;
|
||||
return w;
|
||||
}
|
||||
// scale a and b by 2**-600
|
||||
ha -= 0x25800000;
|
||||
hb -= 0x25800000;
|
||||
k += 600;
|
||||
a = __HI(a, ha);
|
||||
b = __HI(b, hb);
|
||||
}
|
||||
if (hb < 0x20b00000) { // b < 2**-500
|
||||
if (hb <= 0x000fffff) { // subnormal b or 0 */
|
||||
if ((hb | (__LO(b))) == 0)
|
||||
return a;
|
||||
t1 = 0;
|
||||
t1 = __HI(t1, 0x7fd00000); // t1=2^1022
|
||||
b *= t1;
|
||||
a *= t1;
|
||||
k -= 1022;
|
||||
} else { // scale a and b by 2^600
|
||||
ha += 0x25800000; // a *= 2^600
|
||||
hb += 0x25800000; // b *= 2^600
|
||||
k -= 600;
|
||||
a = __HI(a, ha);
|
||||
b = __HI(b, hb);
|
||||
}
|
||||
}
|
||||
// medium size a and b
|
||||
w = a - b;
|
||||
if (w > b) {
|
||||
t1 = 0;
|
||||
t1 = __HI(t1, ha);
|
||||
t2 = a - t1;
|
||||
w = Math.sqrt(t1*t1 - (b*(-b) - t2 * (a + t1)));
|
||||
} else {
|
||||
a = a + a;
|
||||
y1 = 0;
|
||||
y1 = __HI(y1, hb);
|
||||
y2 = b - y1;
|
||||
t1 = 0;
|
||||
t1 = __HI(t1, ha + 0x00100000);
|
||||
t2 = a - t1;
|
||||
w = Math.sqrt(t1*y1 - (w*(-w) - (t1*y2 + t2*b)));
|
||||
}
|
||||
if (k != 0) {
|
||||
t1 = 1.0;
|
||||
int t1_hi = __HI(t1);
|
||||
t1_hi += (k << 20);
|
||||
t1 = __HI(t1, t1_hi);
|
||||
return t1 * w;
|
||||
} else
|
||||
return w;
|
||||
}
|
||||
}
|
||||
}
|
@ -24,10 +24,19 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 4851638
|
||||
* @key randomness
|
||||
* @summary Tests for StrictMath.hypot
|
||||
* @library /lib/testlibrary/
|
||||
* @build jdk.testlibrary.*
|
||||
* @build Tests
|
||||
* @build FdlibmTranslit
|
||||
* @build HypotTests
|
||||
* @run main HypotTests
|
||||
* @author Joseph D. Darcy
|
||||
*/
|
||||
|
||||
import jdk.testlibrary.RandomFactory;
|
||||
|
||||
/**
|
||||
* The tests in ../Math/HypotTests.java test properties that should
|
||||
* hold for any hypot implementation, including the FDLIBM-based one
|
||||
@ -42,6 +51,19 @@
|
||||
public class HypotTests {
|
||||
private HypotTests(){}
|
||||
|
||||
public static void main(String... args) {
|
||||
int failures = 0;
|
||||
|
||||
failures += testHypot();
|
||||
failures += testAgainstTranslit();
|
||||
|
||||
if (failures > 0) {
|
||||
System.err.println("Testing hypot incurred "
|
||||
+ failures + " failures.");
|
||||
throw new RuntimeException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The hypot implementation is commutative, {@code hypot(a, b) ==
|
||||
* hypot(b, a)}, and independent of sign, {@code hypot(a, b) ==
|
||||
@ -663,6 +685,12 @@ public class HypotTests {
|
||||
{0x1.0p-450, 0x1.fffffffffffffp-499, 0x1.0p-450},
|
||||
{0x1.0000000000001p-450, 0x1.fffffffffffffp-499, 0x1.0000000000001p-450},
|
||||
|
||||
{0x1.00000_ffff_0000p500, 0x1.fffffffffffffp499, 0x1.6a09f1b837ccfp500},
|
||||
{0x1.00000_0000_0001p500, 0x1.fffffffffffffp499, 0x1.6a09e667f3bcdp500},
|
||||
{0x1.00000_ffff_ffffp500, 0x1.fffffffffffffp499, 0x1.6a09f1b8431d3p500},
|
||||
{0x1.00001_0000_0000p500, 0x1.fffffffffffffp499, 0x1.6a09f1b8431d5p500},
|
||||
|
||||
|
||||
// 0x1.0p-1022 is MIN_NORMAL
|
||||
{0x1.0000000000001p-1022, 0x1.0000000000001p-1022, 0x1.6a09e667f3bcep-1022},
|
||||
{0x1.0000000000001p-1022, 0x1.0p-1022, 0x1.6a09e667f3bcdp-1022},
|
||||
@ -686,15 +714,30 @@ public class HypotTests {
|
||||
return failures;
|
||||
}
|
||||
|
||||
public static void main(String... args) {
|
||||
// Initialize shared random number generator
|
||||
private static java.util.Random random = RandomFactory.getRandom();
|
||||
|
||||
/**
|
||||
* Test StrictMath.hypot against transliteration port of hypot.
|
||||
*/
|
||||
private static int testAgainstTranslit() {
|
||||
int failures = 0;
|
||||
double x = Tests.createRandomDouble(random);
|
||||
double y = Tests.createRandomDouble(random);
|
||||
|
||||
failures += testHypot();
|
||||
// Make the increment twice the ulp value in case the random
|
||||
// value is near an exponent threshold.
|
||||
double increment_x = 2.0 * Math.ulp(x);
|
||||
double increment_y = 2.0 * Math.ulp(y);
|
||||
|
||||
if (failures > 0) {
|
||||
System.err.println("Testing hypot incurred "
|
||||
+ failures + " failures.");
|
||||
throw new RuntimeException();
|
||||
// Don't worry about x or y overflowing to infinity if their
|
||||
// exponent is MAX_EXPONENT.
|
||||
for (int i = 0; i < 200; i++, x += increment_x) {
|
||||
for (int j = 0; j < 200; j++, y += increment_y) {
|
||||
failures += testHypotCase(x, y, FdlibmTranslit.hypot(x, y));
|
||||
}
|
||||
}
|
||||
|
||||
return failures;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2015, 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
|
||||
@ -60,6 +60,16 @@ public class Tests {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a double over the normalized range of floating-point values.
|
||||
* @return a double over the normalized range of floating-point values
|
||||
*/
|
||||
static double createRandomDouble(java.util.Random random) {
|
||||
final int EXPONENT_RANGE = Double.MAX_EXPONENT - Double.MIN_EXPONENT + 1;
|
||||
|
||||
|
||||
int targetExponent = Double.MIN_EXPONENT + random.nextInt(EXPONENT_RANGE + 1);
|
||||
double tmp = random.nextDouble(); // Double in the range of [0.0, 1.0)
|
||||
int tmpExponent = Math.getExponent(tmp);
|
||||
return Math.scalb(tmp, targetExponent - tmpExponent);
|
||||
}
|
||||
}
|
||||
|
@ -107,11 +107,11 @@ public class AddToReadOnlyPermissionCollection {
|
||||
|
||||
static void tryFilePC() throws Exception {
|
||||
try {
|
||||
FilePermission p0 = new FilePermission("/home/foobar","read");
|
||||
FilePermission p0 = new FilePermission("/tmp/foobar","read");
|
||||
PermissionCollection pc = p0.newPermissionCollection();
|
||||
pc.setReadOnly(); // this should lock out future adds
|
||||
//
|
||||
FilePermission p1 = new FilePermission("/home/quux","read");
|
||||
FilePermission p1 = new FilePermission("/tmp/quux","read");
|
||||
pc.add(p1);
|
||||
throw new
|
||||
Exception("Failed...FilePermission added to readonly FilePermissionCollection.");
|
||||
|
@ -166,9 +166,9 @@ public class Concurrent {
|
||||
new AllPermission(), new AllPermission()};
|
||||
|
||||
private static final Permission[] filep = new Permission[]{
|
||||
new FilePermission("/home/foobar", "read"),
|
||||
new FilePermission("/home/foo", "write"),
|
||||
new FilePermission("/home/foobar", "read,write"),
|
||||
new FilePermission("/tmp/foobar", "read"),
|
||||
new FilePermission("/tmp/foo", "write"),
|
||||
new FilePermission("/tmp/foobar", "read,write"),
|
||||
};
|
||||
|
||||
private static final Permission[] sockp = new Permission[]{
|
||||
|
@ -50,9 +50,9 @@ public class PermissionCollectionStreamTest extends OpTestCase {
|
||||
{
|
||||
"FilePermission",
|
||||
new Permission[]{
|
||||
new FilePermission("/home/foobar", "read"),
|
||||
new FilePermission("/home/foo", "write"),
|
||||
new FilePermission("/home/foobar", "read,write"),
|
||||
new FilePermission("/tmp/foobar", "read"),
|
||||
new FilePermission("/tmp/foo", "write"),
|
||||
new FilePermission("/tmp/foobar", "read,write"),
|
||||
}
|
||||
},
|
||||
};
|
||||
|
219
jdk/test/java/util/Objects/CheckIndex.java
Normal file
219
jdk/test/java/util/Objects/CheckIndex.java
Normal file
@ -0,0 +1,219 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @summary IndexOutOfBoundsException check index tests
|
||||
* @run testng CheckIndex
|
||||
* @bug 8135248
|
||||
*/
|
||||
|
||||
import org.testng.annotations.DataProvider;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.IntSupplier;
|
||||
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
public class CheckIndex {
|
||||
|
||||
static class AssertingOutOfBoundsException extends RuntimeException {
|
||||
}
|
||||
|
||||
static BiFunction<Integer, Integer, AssertingOutOfBoundsException> assertingOutOfBounds(
|
||||
int expFromIndex, int expToIndexOrSizeOrLength) {
|
||||
return (fromIndex, toIndexOrSizeorLength) -> {
|
||||
assertEquals(fromIndex, Integer.valueOf(expFromIndex));
|
||||
assertEquals(toIndexOrSizeorLength, Integer.valueOf(expToIndexOrSizeOrLength));
|
||||
return new AssertingOutOfBoundsException();
|
||||
};
|
||||
}
|
||||
|
||||
static final int[] VALUES = {0, 1, Integer.MAX_VALUE - 1, Integer.MAX_VALUE, -1, Integer.MIN_VALUE + 1, Integer.MIN_VALUE};
|
||||
|
||||
@DataProvider
|
||||
static Object[][] checkIndexProvider() {
|
||||
List<Object[]> l = new ArrayList<>();
|
||||
for (int index : VALUES) {
|
||||
for (int length : VALUES) {
|
||||
boolean withinBounds = index >= 0 &&
|
||||
length >= 0 &&
|
||||
index < length;
|
||||
l.add(new Object[]{index, length, withinBounds});
|
||||
}
|
||||
}
|
||||
return l.toArray(new Object[0][0]);
|
||||
}
|
||||
|
||||
interface X {
|
||||
int apply(int a, int b, int c);
|
||||
}
|
||||
|
||||
@Test(dataProvider = "checkIndexProvider")
|
||||
public void testCheckIndex(int index, int length, boolean withinBounds) {
|
||||
BiConsumer<Class<? extends RuntimeException>, IntSupplier> check = (ec, s) -> {
|
||||
try {
|
||||
int rIndex = s.getAsInt();
|
||||
if (!withinBounds)
|
||||
fail(String.format(
|
||||
"Index %d is out of bounds of [0, %d), but was reported to be within bounds", index, length));
|
||||
assertEquals(rIndex, index);
|
||||
}
|
||||
catch (RuntimeException e) {
|
||||
assertTrue(ec.isInstance(e));
|
||||
if (withinBounds)
|
||||
fail(String.format(
|
||||
"Index %d is within bounds of [0, %d), but was reported to be out of bounds", index, length));
|
||||
}
|
||||
};
|
||||
|
||||
check.accept(AssertingOutOfBoundsException.class,
|
||||
() -> Objects.checkIndex(index, length, assertingOutOfBounds(index, length)));
|
||||
check.accept(IndexOutOfBoundsException.class,
|
||||
() -> Objects.checkIndex(index, length, null));
|
||||
check.accept(IndexOutOfBoundsException.class,
|
||||
() -> Objects.checkIndex(index, length));
|
||||
}
|
||||
|
||||
|
||||
@DataProvider
|
||||
static Object[][] checkFromToIndexProvider() {
|
||||
List<Object[]> l = new ArrayList<>();
|
||||
for (int fromIndex : VALUES) {
|
||||
for (int toIndex : VALUES) {
|
||||
for (int length : VALUES) {
|
||||
boolean withinBounds = fromIndex >= 0 &&
|
||||
toIndex >= 0 &&
|
||||
length >= 0 &&
|
||||
fromIndex <= toIndex &&
|
||||
toIndex <= length;
|
||||
l.add(new Object[]{fromIndex, toIndex, length, withinBounds});
|
||||
}
|
||||
}
|
||||
}
|
||||
return l.toArray(new Object[0][0]);
|
||||
}
|
||||
|
||||
@Test(dataProvider = "checkFromToIndexProvider")
|
||||
public void testCheckFromToIndex(int fromIndex, int toIndex, int length, boolean withinBounds) {
|
||||
BiConsumer<Class<? extends RuntimeException>, IntSupplier> check = (ec, s) -> {
|
||||
try {
|
||||
int rIndex = s.getAsInt();
|
||||
if (!withinBounds)
|
||||
fail(String.format(
|
||||
"Range [%d, %d) is out of bounds of [0, %d), but was reported to be withing bounds", fromIndex, toIndex, length));
|
||||
assertEquals(rIndex, fromIndex);
|
||||
}
|
||||
catch (RuntimeException e) {
|
||||
assertTrue(ec.isInstance(e));
|
||||
if (withinBounds)
|
||||
fail(String.format(
|
||||
"Range [%d, %d) is within bounds of [0, %d), but was reported to be out of bounds", fromIndex, toIndex, length));
|
||||
}
|
||||
};
|
||||
|
||||
check.accept(AssertingOutOfBoundsException.class,
|
||||
() -> Objects.checkFromToIndex(fromIndex, toIndex, length, assertingOutOfBounds(fromIndex, toIndex)));
|
||||
check.accept(IndexOutOfBoundsException.class,
|
||||
() -> Objects.checkFromToIndex(fromIndex, toIndex, length, null));
|
||||
check.accept(IndexOutOfBoundsException.class,
|
||||
() -> Objects.checkFromToIndex(fromIndex, toIndex, length));
|
||||
}
|
||||
|
||||
|
||||
@DataProvider
|
||||
static Object[][] checkFromIndexSizeProvider() {
|
||||
List<Object[]> l = new ArrayList<>();
|
||||
for (int fromIndex : VALUES) {
|
||||
for (int size : VALUES) {
|
||||
for (int length : VALUES) {
|
||||
// Explicitly convert to long
|
||||
long lFromIndex = fromIndex;
|
||||
long lSize = size;
|
||||
long lLength = length;
|
||||
// Avoid overflow
|
||||
long lToIndex = lFromIndex + lSize;
|
||||
|
||||
boolean withinBounds = lFromIndex >= 0L &&
|
||||
lSize >= 0L &&
|
||||
lLength >= 0L &&
|
||||
lFromIndex <= lToIndex &&
|
||||
lToIndex <= lLength;
|
||||
l.add(new Object[]{fromIndex, size, length, withinBounds});
|
||||
}
|
||||
}
|
||||
}
|
||||
return l.toArray(new Object[0][0]);
|
||||
}
|
||||
|
||||
@Test(dataProvider = "checkFromIndexSizeProvider")
|
||||
public void testCheckFromIndexSize(int fromIndex, int size, int length, boolean withinBounds) {
|
||||
BiConsumer<Class<? extends RuntimeException>, IntSupplier> check = (ec, s) -> {
|
||||
try {
|
||||
int rIndex = s.getAsInt();
|
||||
if (!withinBounds)
|
||||
fail(String.format(
|
||||
"Range [%d, %d + %d) is out of bounds of [0, %d), but was reported to be withing bounds", fromIndex, fromIndex, size, length));
|
||||
assertEquals(rIndex, fromIndex);
|
||||
}
|
||||
catch (RuntimeException e) {
|
||||
assertTrue(ec.isInstance(e));
|
||||
if (withinBounds)
|
||||
fail(String.format(
|
||||
"Range [%d, %d + %d) is within bounds of [0, %d), but was reported to be out of bounds", fromIndex, fromIndex, size, length));
|
||||
}
|
||||
};
|
||||
|
||||
check.accept(AssertingOutOfBoundsException.class,
|
||||
() -> Objects.checkFromIndexSize(fromIndex, size, length, assertingOutOfBounds(fromIndex, size)));
|
||||
check.accept(IndexOutOfBoundsException.class,
|
||||
() -> Objects.checkFromIndexSize(fromIndex, size, length, null));
|
||||
check.accept(IndexOutOfBoundsException.class,
|
||||
() -> Objects.checkFromIndexSize(fromIndex, size, length));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkIndexOutOfBoundsExceptionConstructors() {
|
||||
BiConsumer<Class<? extends RuntimeException>, IntSupplier> check = (ec, s) -> {
|
||||
try {
|
||||
s.getAsInt();
|
||||
fail("Runtime exception expected");
|
||||
}
|
||||
catch (RuntimeException e) {
|
||||
assertTrue(ec.isInstance(e));
|
||||
}
|
||||
};
|
||||
|
||||
check.accept(IndexOutOfBoundsException.class,
|
||||
() -> Objects.checkIndex(1, 0, IndexOutOfBoundsException::new));
|
||||
check.accept(StringIndexOutOfBoundsException.class,
|
||||
() -> Objects.checkIndex(1, 0, StringIndexOutOfBoundsException::new));
|
||||
check.accept(ArrayIndexOutOfBoundsException.class,
|
||||
() -> Objects.checkIndex(1, 0, ArrayIndexOutOfBoundsException::new));
|
||||
}
|
||||
}
|
78
jdk/test/sun/security/pkcs11/Provider/LoginISE.java
Normal file
78
jdk/test/sun/security/pkcs11/Provider/LoginISE.java
Normal file
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 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.
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
import java.security.*;
|
||||
import javax.security.auth.callback.*;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 8130648
|
||||
* @summary make sure IllegalStateException is thrown for uninitialized
|
||||
* SunPKCS11 provider instance
|
||||
*/
|
||||
public class LoginISE {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
Provider p = Security.getProvider("SunPKCS11");
|
||||
if (p == null) {
|
||||
System.out.println("No un-initialized PKCS11 provider available; skip");
|
||||
return;
|
||||
}
|
||||
if (!(p instanceof AuthProvider)) {
|
||||
throw new RuntimeException("Error: expect AuthProvider!");
|
||||
}
|
||||
AuthProvider ap = (AuthProvider) p;
|
||||
if (ap.isConfigured()) {
|
||||
throw new RuntimeException("Fail: isConfigured() should return false");
|
||||
}
|
||||
try {
|
||||
ap.login(null, null);
|
||||
throw new RuntimeException("Fail: expected ISE not thrown!");
|
||||
} catch (IllegalStateException ise) {
|
||||
System.out.println("Expected ISE thrown for login call");
|
||||
}
|
||||
try {
|
||||
ap.logout();
|
||||
throw new RuntimeException("Fail: expected ISE not thrown!");
|
||||
} catch (IllegalStateException ise) {
|
||||
System.out.println("Expected ISE thrown for logout call");
|
||||
}
|
||||
try {
|
||||
ap.setCallbackHandler(new PasswordCallbackHandler());
|
||||
throw new RuntimeException("Fail: expected ISE not thrown!");
|
||||
} catch (IllegalStateException ise) {
|
||||
System.out.println("Expected ISE thrown for logout call");
|
||||
}
|
||||
|
||||
System.out.println("Test Passed");
|
||||
}
|
||||
|
||||
public static class PasswordCallbackHandler implements CallbackHandler {
|
||||
public void handle(Callback[] callbacks)
|
||||
throws IOException, UnsupportedCallbackException {
|
||||
}
|
||||
}
|
||||
}
|
@ -39,7 +39,7 @@ public class CombinedPerms {
|
||||
|
||||
String host = "localhost";
|
||||
|
||||
URL u = new URL("file:/home/duke");
|
||||
URL u = new URL("file:/tmp/duke");
|
||||
CodeSource cs =
|
||||
new CodeSource(u, (java.security.cert.Certificate[]) null);
|
||||
Permissions p = new Permissions();
|
||||
|
@ -1,3 +1,3 @@
|
||||
grant codebase "file:/home/duke" {
|
||||
grant codebase "file:/tmp/duke" {
|
||||
permission java.net.SocketPermission "localhost", "accept";
|
||||
};
|
||||
|
@ -40,7 +40,6 @@ import java.util.Calendar;
|
||||
import java.util.jar.JarEntry;
|
||||
import java.util.jar.JarFile;
|
||||
|
||||
import sun.misc.IOUtils;
|
||||
import sun.security.pkcs.ContentInfo;
|
||||
import sun.security.pkcs.PKCS7;
|
||||
import sun.security.pkcs.PKCS9Attribute;
|
||||
@ -343,7 +342,7 @@ public class TimestampCheck {
|
||||
try (JarFile jf = new JarFile(file)) {
|
||||
JarEntry je = jf.getJarEntry("META-INF/OLD.RSA");
|
||||
try (InputStream is = jf.getInputStream(je)) {
|
||||
byte[] content = IOUtils.readFully(is, -1, true);
|
||||
byte[] content = is.readAllBytes();
|
||||
PKCS7 p7 = new PKCS7(content);
|
||||
SignerInfo[] si = p7.getSignerInfos();
|
||||
if (si == null || si.length == 0) {
|
||||
|
@ -25,13 +25,11 @@
|
||||
* @test
|
||||
* @bug 6864911
|
||||
* @summary ASN.1/DER input stream parser needs more work
|
||||
* @modules java.base/sun.misc
|
||||
* java.base/sun.security.util
|
||||
* @modules java.base/sun.security.util
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import sun.security.util.*;
|
||||
import sun.misc.IOUtils;
|
||||
|
||||
public class BadValue {
|
||||
|
||||
|
@ -287,7 +287,7 @@ else # HAS_SPEC=true
|
||||
$(call StartGlobalTimer)
|
||||
$(call PrepareSmartJavac)
|
||||
( cd $(TOPDIR) && \
|
||||
$(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) $(OUTPUT_SYNC_FLAG) \
|
||||
$(BUILD_LOG_WRAPPER) $(NICE) $(MAKE) $(MAKE_ARGS) $(OUTPUT_SYNC_FLAG) \
|
||||
-j $(JOBS) -f make/Main.gmk $(USER_MAKE_VARS) \
|
||||
$(PARALLEL_TARGETS) $(COMPARE_BUILD_MAKE) || \
|
||||
( exitcode=$$? && $(BUILD_LOG_WRAPPER) \
|
||||
|
@ -318,3 +318,4 @@ ab231613d7206431ba31917a02e7cedd70e88e70 jdk9-b76
|
||||
8bab0a9d8a638affdd680c5ec783373f71c19267 jdk9-b82
|
||||
21b86b980a5f0d27f1f758a3e4818d3331387172 jdk9-b83
|
||||
214b97ba911f4d768c0214098739e32ab54c8503 jdk9-b84
|
||||
285628dac94332d95979de365630c93ab8fa9962 jdk9-b85
|
||||
|
@ -103,27 +103,14 @@ import jdk.internal.dynalink.support.Lookup;
|
||||
* handle is always at the start of the chain.
|
||||
*/
|
||||
public class ChainedCallSite extends AbstractRelinkableCallSite {
|
||||
private static final MethodHandle PRUNE_CATCHES =
|
||||
MethodHandles.insertArguments(
|
||||
Lookup.findOwnSpecial(
|
||||
MethodHandles.lookup(),
|
||||
"prune",
|
||||
MethodHandle.class,
|
||||
MethodHandle.class,
|
||||
boolean.class),
|
||||
2,
|
||||
true);
|
||||
|
||||
private static final MethodHandle PRUNE_SWITCHPOINTS =
|
||||
MethodHandles.insertArguments(
|
||||
Lookup.findOwnSpecial(
|
||||
MethodHandles.lookup(),
|
||||
"prune",
|
||||
MethodHandle.class,
|
||||
MethodHandle.class,
|
||||
boolean.class),
|
||||
2,
|
||||
false);
|
||||
private static final MethodHandle PRUNE_CATCHES;
|
||||
private static final MethodHandle PRUNE_SWITCHPOINTS;
|
||||
static {
|
||||
final MethodHandle PRUNE = Lookup.findOwnSpecial(MethodHandles.lookup(), "prune", MethodHandle.class,
|
||||
MethodHandle.class, boolean.class);
|
||||
PRUNE_CATCHES = MethodHandles.insertArguments(PRUNE, 2, true);
|
||||
PRUNE_SWITCHPOINTS = MethodHandles.insertArguments(PRUNE, 2, false);
|
||||
}
|
||||
|
||||
private final AtomicReference<LinkedList<GuardedInvocation>> invocations = new AtomicReference<>();
|
||||
|
||||
@ -181,8 +168,8 @@ public class ChainedCallSite extends AbstractRelinkableCallSite {
|
||||
|
||||
// prune-and-invoke is used as the fallback for invalidated switchpoints. If a switchpoint gets invalidated, we
|
||||
// rebuild the chain and get rid of all invalidated switchpoints instead of letting them linger.
|
||||
final MethodHandle pruneAndInvokeSwitchPoints = makePruneAndInvokeMethod(relink, getPruneSwitchpoints());
|
||||
final MethodHandle pruneAndInvokeCatches = makePruneAndInvokeMethod(relink, getPruneCatches());
|
||||
final MethodHandle pruneAndInvokeSwitchPoints = makePruneAndInvokeMethod(relink, PRUNE_SWITCHPOINTS);
|
||||
final MethodHandle pruneAndInvokeCatches = makePruneAndInvokeMethod(relink, PRUNE_CATCHES);
|
||||
|
||||
// Fold the new chain
|
||||
MethodHandle target = relink;
|
||||
@ -199,22 +186,6 @@ public class ChainedCallSite extends AbstractRelinkableCallSite {
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the switchpoint pruning function for a chained call site
|
||||
* @return function that removes invalidated switchpoints tied to callsite guard chain and relinks
|
||||
*/
|
||||
protected MethodHandle getPruneSwitchpoints() {
|
||||
return PRUNE_SWITCHPOINTS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the catch pruning function for a chained call site
|
||||
* @return function that removes all catches tied to callsite guard chain and relinks
|
||||
*/
|
||||
protected MethodHandle getPruneCatches() {
|
||||
return PRUNE_CATCHES;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a method that rebuilds our call chain, pruning it of any invalidated switchpoints, and then invokes that
|
||||
* chain.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2010, 2015, 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,18 +52,18 @@ import jdk.nashorn.internal.runtime.arrays.ArrayLikeIterator;
|
||||
import jdk.nashorn.internal.scripts.JO;
|
||||
|
||||
/**
|
||||
* This class is the implementation of the Nashorn-specific global object named {@code JSAdapter}. It can be
|
||||
* thought of as the {@link java.lang.reflect.Proxy} equivalent for JavaScript. NativeJSAdapter calls specially named
|
||||
* This class is the implementation of the Nashorn-specific global object named {@code JSAdapter}. It can be thought of
|
||||
* as the {@link java.lang.reflect.Proxy} equivalent for JavaScript. A {@code NativeJSAdapter} calls specially named
|
||||
* JavaScript methods on an adaptee object when property access/update/call/new/delete is attempted on it. Example:
|
||||
*<pre>
|
||||
* var y = {
|
||||
* __get__ : function (name) { ... }
|
||||
* __has__ : function (name) { ... }
|
||||
* __put__ : function (name, value) {...}
|
||||
* __call__ : function (name, arg1, arg2) {...}
|
||||
* __new__ : function (arg1, arg2) {...}
|
||||
* __delete__ : function (name) { ... }
|
||||
* __getIds__ : function () { ... }
|
||||
* __get__ : function (name) { ... }
|
||||
* __has__ : function (name) { ... }
|
||||
* __put__ : function (name, value) {...}
|
||||
* __call__ : function (name, arg1, arg2) {...}
|
||||
* __new__ : function (arg1, arg2) {...}
|
||||
* __delete__ : function (name) { ... }
|
||||
* __getKeys__ : function () { ... }
|
||||
* };
|
||||
*
|
||||
* var x = new JSAdapter(y);
|
||||
@ -74,17 +74,21 @@ import jdk.nashorn.internal.scripts.JO;
|
||||
* i in x; // calls y.__has__
|
||||
* x.p = 10; // calls y.__put__
|
||||
* delete x.p; // calls y.__delete__
|
||||
* for (i in x) { print(i); } // calls y.__getIds__
|
||||
* for (i in x) { print(i); } // calls y.__getKeys__
|
||||
* </pre>
|
||||
* <p>
|
||||
* JavaScript caller of adapter object is isolated from the fact that the property access/mutation/deletion are really
|
||||
* calls to JavaScript methods on adaptee.
|
||||
* The {@code __getKeys__} and {@code __getIds__} properties are mapped to the same operation. Concrete
|
||||
* {@code JSAdapter} implementations are expected to use only one of these. As {@code __getIds__} exists for
|
||||
* compatibility reasons only, use of {@code __getKeys__} is recommended.
|
||||
* </p>
|
||||
* <p>
|
||||
* JSAdapter constructor can optionally receive an "overrides" object. Properties of overrides object is copied to
|
||||
* JSAdapter instance. When user accessed property is one of these, then adaptee's methods like {@code __get__},
|
||||
* {@code __put__} etc. are not called for those. This can be used to make certain "preferred" properties that can be
|
||||
* accessed in the usual/faster way avoiding proxy mechanism. Example:
|
||||
* The JavaScript caller of an adapter object is oblivious of the property access/mutation/deletion's being adapted.
|
||||
* </p>
|
||||
* <p>
|
||||
* The {@code JSAdapter} constructor can optionally receive an "overrides" object. The properties of overrides object
|
||||
* are copied to the {@code JSAdapter} instance. In case user-accessed properties are among these, the adaptee's methods
|
||||
* like {@code __get__}, {@code __put__} etc. are not called for them. This can be used to make certain "preferred"
|
||||
* properties that can be accessed in the usual/faster way avoiding the proxy mechanism. Example:
|
||||
* </p>
|
||||
* <pre>
|
||||
* var x = new JSAdapter({ foo: 444, bar: 6546 }) {
|
||||
@ -95,13 +99,13 @@ import jdk.nashorn.internal.scripts.JO;
|
||||
* x.bar = 'hello'; // "bar" directly set without __put__ call
|
||||
* x.prop // calls __get__("prop") as 'prop' is not overridden
|
||||
* </pre>
|
||||
* It is possible to pass a specific prototype for JSAdapter instance by passing three arguments to JSAdapter
|
||||
* constructor. So exact signature of JSAdapter constructor is as follows:
|
||||
* It is possible to pass a specific prototype for the {@code JSAdapter} instance by passing three arguments to the
|
||||
* {@code JSAdapter} constructor. The exact signature of the {@code JSAdapter} constructor is as follows:
|
||||
* <pre>
|
||||
* JSAdapter([proto], [overrides], adaptee);
|
||||
* </pre>
|
||||
* Both proto and overrides are optional - but adaptee is not. When proto is not passed {@code JSAdapter.prototype} is
|
||||
* used.
|
||||
* Both the {@code proto} and {@code overrides} arguments are optional - but {@code adaptee} is not. When {@code proto}
|
||||
* is not passed, {@code JSAdapter.prototype} is used.
|
||||
*/
|
||||
@ScriptClass("JSAdapter")
|
||||
public final class NativeJSAdapter extends ScriptObject {
|
||||
@ -113,7 +117,7 @@ public final class NativeJSAdapter extends ScriptObject {
|
||||
public static final String __call__ = "__call__";
|
||||
/** object new operation */
|
||||
public static final String __new__ = "__new__";
|
||||
/** object getIds operation */
|
||||
/** object getIds operation (provided for compatibility reasons; use of getKeys is preferred) */
|
||||
public static final String __getIds__ = "__getIds__";
|
||||
/** object getKeys operation */
|
||||
public static final String __getKeys__ = "__getKeys__";
|
||||
@ -142,7 +146,7 @@ public final class NativeJSAdapter extends ScriptObject {
|
||||
private final ScriptObject adaptee;
|
||||
private final boolean overrides;
|
||||
|
||||
private static final MethodHandle IS_JSADAPTOR = findOwnMH("isJSAdaptor", boolean.class, Object.class, Object.class, MethodHandle.class, Object.class, ScriptFunction.class);
|
||||
private static final MethodHandle IS_JSADAPTER = findOwnMH("isJSAdapter", boolean.class, Object.class, Object.class, MethodHandle.class, Object.class, ScriptFunction.class);
|
||||
|
||||
// initialized by nasgen
|
||||
private static PropertyMap $nasgenmap$;
|
||||
@ -626,7 +630,7 @@ public final class NativeJSAdapter extends ScriptObject {
|
||||
// to name. Probably not a big deal, but if we can ever make it leaner, it'd be nice.
|
||||
return new GuardedInvocation(MH.dropArguments(MH.constant(Object.class,
|
||||
func.createBound(this, new Object[] { name })), 0, Object.class),
|
||||
testJSAdaptor(adaptee, null, null, null),
|
||||
testJSAdapter(adaptee, null, null, null),
|
||||
adaptee.getProtoSwitchPoints(__call__, find.getOwner()), null);
|
||||
}
|
||||
}
|
||||
@ -697,7 +701,7 @@ public final class NativeJSAdapter extends ScriptObject {
|
||||
if (methodHandle != null) {
|
||||
return new GuardedInvocation(
|
||||
methodHandle,
|
||||
testJSAdaptor(adaptee, findData.getGetter(Object.class, INVALID_PROGRAM_POINT, null), findData.getOwner(), func),
|
||||
testJSAdapter(adaptee, findData.getGetter(Object.class, INVALID_PROGRAM_POINT, null), findData.getOwner(), func),
|
||||
adaptee.getProtoSwitchPoints(hook, findData.getOwner()), null);
|
||||
}
|
||||
}
|
||||
@ -710,16 +714,16 @@ public final class NativeJSAdapter extends ScriptObject {
|
||||
final MethodHandle methodHandle = hook.equals(__put__) ?
|
||||
MH.asType(Lookup.EMPTY_SETTER, type) :
|
||||
Lookup.emptyGetter(type.returnType());
|
||||
return new GuardedInvocation(methodHandle, testJSAdaptor(adaptee, null, null, null), adaptee.getProtoSwitchPoints(hook, null), null);
|
||||
return new GuardedInvocation(methodHandle, testJSAdapter(adaptee, null, null, null), adaptee.getProtoSwitchPoints(hook, null), null);
|
||||
}
|
||||
}
|
||||
|
||||
private static MethodHandle testJSAdaptor(final Object adaptee, final MethodHandle getter, final Object where, final ScriptFunction func) {
|
||||
return MH.insertArguments(IS_JSADAPTOR, 1, adaptee, getter, where, func);
|
||||
private static MethodHandle testJSAdapter(final Object adaptee, final MethodHandle getter, final Object where, final ScriptFunction func) {
|
||||
return MH.insertArguments(IS_JSADAPTER, 1, adaptee, getter, where, func);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static boolean isJSAdaptor(final Object self, final Object adaptee, final MethodHandle getter, final Object where, final ScriptFunction func) {
|
||||
private static boolean isJSAdapter(final Object self, final Object adaptee, final MethodHandle getter, final Object where, final ScriptFunction func) {
|
||||
final boolean res = self instanceof NativeJSAdapter && ((NativeJSAdapter)self).getAdaptee() == adaptee;
|
||||
if (res && getter != null) {
|
||||
try {
|
||||
|
@ -64,9 +64,6 @@ public class LinkerCallSite extends ChainedCallSite {
|
||||
private static final String PROFILEFILE = Options.getStringProperty("nashorn.profilefile", "NashornProfile.txt");
|
||||
|
||||
private static final MethodHandle INCREASE_MISS_COUNTER = MH.findStatic(MethodHandles.lookup(), LinkerCallSite.class, "increaseMissCount", MH.type(Object.class, String.class, Object.class));
|
||||
private static final MethodHandle ON_CATCH_INVALIDATION = MH.findStatic(MethodHandles.lookup(), LinkerCallSite.class, "onCatchInvalidation", MH.type(ChainedCallSite.class, LinkerCallSite.class));
|
||||
|
||||
private int catchInvalidations;
|
||||
|
||||
LinkerCallSite(final NashornCallSiteDescriptor descriptor) {
|
||||
super(descriptor);
|
||||
@ -75,34 +72,6 @@ public class LinkerCallSite extends ChainedCallSite {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected MethodHandle getPruneCatches() {
|
||||
return MH.filterArguments(super.getPruneCatches(), 0, ON_CATCH_INVALIDATION);
|
||||
}
|
||||
|
||||
/**
|
||||
* Action to perform when a catch guard around a callsite triggers. Increases
|
||||
* catch invalidation counter
|
||||
* @param callSite callsite
|
||||
* @return the callsite, so this can be used as argument filter
|
||||
*/
|
||||
@SuppressWarnings("unused")
|
||||
private static ChainedCallSite onCatchInvalidation(final LinkerCallSite callSite) {
|
||||
++callSite.catchInvalidations;
|
||||
return callSite;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of catch invalidations that have happened at this call site so far
|
||||
* @param callSiteToken call site token, unique to the callsite.
|
||||
* @return number of catch invalidations, i.e. thrown exceptions caught by the linker
|
||||
*/
|
||||
public static int getCatchInvalidationCount(final Object callSiteToken) {
|
||||
if (callSiteToken instanceof LinkerCallSite) {
|
||||
return ((LinkerCallSite)callSiteToken).catchInvalidations;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
* Construct a new linker call site.
|
||||
* @param name Name of method.
|
||||
|
41
nashorn/test/script/basic/jsadapter-ids.js
Normal file
41
nashorn/test/script/basic/jsadapter-ids.js
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2015, 2015, 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Verify that JSAdapter __getIds__ works as expected.
|
||||
*
|
||||
* @test
|
||||
* @run
|
||||
*/
|
||||
|
||||
var obj = new JSAdapter() {
|
||||
__getIds__: function() {
|
||||
print("__getIds__ called");
|
||||
return [ "foo", "bar" ];
|
||||
}
|
||||
};
|
||||
|
||||
// calls __getIds__
|
||||
for (i in obj) {
|
||||
print(i);
|
||||
}
|
3
nashorn/test/script/basic/jsadapter-ids.js.EXPECTED
Normal file
3
nashorn/test/script/basic/jsadapter-ids.js.EXPECTED
Normal file
@ -0,0 +1,3 @@
|
||||
__getIds__ called
|
||||
foo
|
||||
bar
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2010, 2015, 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
|
||||
@ -45,8 +45,8 @@ var obj = new JSAdapter() {
|
||||
print("new with " + arg1 + ", " + arg2);
|
||||
},
|
||||
|
||||
__getIds__: function() {
|
||||
print("__getIds__ called");
|
||||
__getKeys__: function() {
|
||||
print("__getKeys__ called");
|
||||
return [ "foo", "bar" ];
|
||||
},
|
||||
|
||||
@ -78,22 +78,28 @@ obj.func("hello", "world");
|
||||
// calls __new__
|
||||
new obj("hey!", "it works!");
|
||||
|
||||
// calls __getKeys__
|
||||
for (i in obj) {
|
||||
print(i);
|
||||
}
|
||||
|
||||
// calls __getValues__
|
||||
for each (i in obj) {
|
||||
print(i);
|
||||
}
|
||||
|
||||
// calls __has__
|
||||
var x = "foo" in obj;
|
||||
print(x);
|
||||
|
||||
// calls __has__
|
||||
var y = "js" in obj;
|
||||
print(y);
|
||||
|
||||
// calls __delete__
|
||||
print(delete obj.prop);
|
||||
|
||||
// call __get__ and __set__
|
||||
print(obj["js"]);
|
||||
obj["js"] = "javascript";
|
||||
print(obj["javascript"]);
|
||||
|
@ -3,7 +3,7 @@ foo
|
||||
setter called for 'foo' with 33
|
||||
method 'func' called with hello, world
|
||||
new with hey!, it works!
|
||||
__getIds__ called
|
||||
__getKeys__ called
|
||||
foo
|
||||
bar
|
||||
__getValues__ called
|
||||
|
Loading…
Reference in New Issue
Block a user