It seems the script was missing some spaces between some curly
braces and a method call...
I've attached the slightly changed version. Hope this helps...
(I'm running Slakware 3.3 with almost every version of Java installed
somewhere on my machine!)
Ben
--
Ben Greear ([EMAIL PROTECTED]) http://www.primenet.com/~greear
Author of ScryMUD: mud.primenet.com 4444
http://www.primenet.com/~greear/ScryMUD/scry.html
#!/bin/sh
######################################################################
# NOTE: this file is NOT a part of the standard Sun JDK distribution!
# It is part of the Linux JDK, for use in dealing with the wide
# variety of shared library versions that various people have.
######################################################################
# Check the library versions of the executable to see if they are suitably
# advanced. If so, don't add a reference to the linuxlibs subdirectory
# into LD_LIBRARY_PATH's value
# grab the first number of a dotted version number and return it
firstField() {
expr "$1" : "\([0-9][0-9]*\).*"
}
# return everythng after the first number of a dotted version number
# (excluding the dot following the first number).
restFields() {
expr "$1" : "[0-9][0-9]*\.\(.*\)"
}
# returns 0 if the first version number (a dotted version number) is
# greater than or equal to the second version number.
isGreaterOrEqual() {
ver1="$1"
ver2="$2"
# echo "v1 [$ver1] v2 [$ver2]"
# first, a quick test for equality, then some "did one or the
# other run out early" tests.
if [ "$ver1" = "$ver2" ] ; then
return 0
elif [ -z "$ver1" ] ; then
# ver1 ran out first, so it's less
return 1
elif [ -z "$ver2" ] ; then
# v1 has fields, so it's greater
return 0
fi
# at this point, the two version still have at least term remaining,
# so compare those terms.
v1Term="`firstField $ver1`"
v2Term="`firstField $ver2`"
if [ "$v1Term" -gt "$v2Term" ] ; then
# v1 definitely is greater
return 0
elif [ "$v1Term" -lt "$v2Term" ] ; then
# v1 definitely is less
return 1
fi
# if we're here, the first terms are equal, so we need to
# check the next ones.
isGreaterOrEqual "`restFields $ver1`" "`restFields $ver2`"
return
}
# given the output of ldd as argument 1, this function emits the
# actual version number of the actual library, following symlinks
getVers() {
libline="$1"
lib=`echo $libline | awk '{ print $3 } '`
lib=`ls -l $lib | awk '{print $NF}'`
echo "$lib" | sed 's/^.*\.so\.//'
}
# returns the current version of the library given by parameter
# 1
getLibVers() {
libName="$1"
lddOut="$2"
libsVers=`egrep "$libName" "$lddOut"`
getVers "$libsVers"
}
# given the a library name to look for (1), and the name of a file
# containing the output of ldd on the target executable (java), this
# return the name of the library, including the major version
getLibName() {
egrep $1 $2 | awk '{ print $1 }'
}
# returns 0 if the supplied libraries are needed, 1 if they
# are not
checkLibc5Version () {
lddOut="$1"
libcVers=`getLibVers libc $lddOut`
libdlVers=`getLibVers libdl $lddOut`
# 5.4.33 & 1.9.6 seem to do it too
if isGreaterOrEqual "$libdlVers" 1.9.6 ||
{ isGreaterOrEqual "$libcVers" 1.5.44 &&
isGreaterOrEqual "$libdlVers" 1.9.9 }
then
# supplied libraries are not needed
return 1
else
# supplied libraries ARE needed
return 0
fi
}
# returns 0 if the supplied libraries are needed, 1 if they
# are not
checkGlibcVersion () {
lddOut="$1"
libcVers=`getLibVers libc $lddOut`
libdlVers=`getLibVers libdl $lddOut`
# NOTE: almost all of the mail that I (sbb) got about the
# behavior on glibc systems indicates that things just "run out of the
# box", so for right now I'm opting to leave the our supplied libraries
# in place.
return 1
}
# computes the standard environment variables which describe where this
# shell script was found (and, by implication, where both java and the
# target libraries can be found). Sets global variables ARCH, THREADS_TYPE,
# and JAVA_HOME (if not set).
computeDirVars() {
prog=`type -p $0` >/dev/null 2>&1
# If prog is a symlink, trace it to the real home directory
while [ -L "$prog" ]
do
newprog=`expr "\`/bin/ls -l "$prog"\`" : ".*$prog -> \(.*\)"`
expr "$newprog" : / >/dev/null || newprog="`dirname $prog`/$newprog"
prog="$newprog"
done
CV_HOME=`dirname $prog`/..
progname=`basename $0`
ARCH=`arch`
# The default THREADS_TYPE is "green_threads". To change the default change
# the setting of the DEFAULT_THREADS_FLAG variable. The only valid values
# of that variable are 'green' and 'native'.
#
# This introduces a dependency of this wrapper on the policy used to do builds.
# e.g. the usage of the name "green_threads" here is dependent on the build
# scripts which use the same name. Since this is somewhat analogous to the
# wrapper already depending on the build scripts putting the executable in
# a specific place (JAVA_HOME/bin/${ARCH}), the new dependency does not
# seem all that bad.
DEFAULT_THREADS_FLAG=green
if [ "${THREADS_FLAG:-${DEFAULT_THREADS_FLAG}}" = native ]
then
THREADS_TYPE=native_threads
else
THREADS_TYPE=green_threads
fi
export THREADS_TYPE
#echo "Using executables built for $THREADS_TYPE"
if [ -z "$JAVA_HOME" ] ; then
export JAVA_HOME
JAVA_HOME=$CV_HOME
fi
}
# Returns 0 if the supplied libraries are needed, nonzero (1) if
# they should be ignored.
checkX86Versions() {
binPath="${JAVA_HOME}/bin/${ARCH}/${THREADS_TYPE}"
execFile=${1:-java}
execName="$binPath/$execFile"
lddOut=/tmp/ldd.out.$$
ldd $execName > $lddOut
libcMainVer=`getLibName libc $lddOut`
case $libcMainVer in
libc*.5)
checkFun=checkLibc5Version
;;
libc*.6)
checkFun=checkGlibcVersion
;;
esac
$checkFun $lddOut
result=$?
rm -f $lddOut
return $result
}
#####################################################################
#
# The "main" part
#
# exits with zero exit code if the supplied libraries are needed,
# nonzero (1) if they are not. This result is only examined in the
# case where there are no command line flags
main () {
# disable this code in the rare cases where it's doing more harm than
# good.
if [ "$JDK_NO_VERS_CHECK" ]
then
exit 0
fi
computeDirVars
case "$ARCH" in
i[3-6]86)
checkX86Versions $*
return # returns whatever the checkX86Versions returned
;;
*) # all other OS versions (at the moment)
return 1 # don't use the supplied libraries
;;
esac
}
main $*