/usr/bin/tos-locate-jre is in tinyos-tools 1.4.2-3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | #!/bin/sh
# This script attempts to locate the jre directory of the current
# Java installation, even when java is not in the path
# It works with the following rpm files:
# Sun's Java Software Development Kit (Linux/Windows)
# Sun's Java Runtime Environment (Linux)
# IBM's Java Software Development Kit (linux)
# We require an option to specify which directory is desired:
# --java: directory with java executable
# --javac: directory with javac executable
# --jni: directory where JNI code is placed
if [ "$1" = "--jni" ]; then
jni=yes
elif [ "$1" = "--java" ]; then
java=yes
elif [ "$1" = "--javac" ]; then
javac=yes
else
echo "Usage: tos-locate-jre --java|--javac|--jni" >&2
exit 2
fi
rpmlocate () {
javarpm=$1
javapath=`rpm -ql $1 2>/dev/null | grep "bin/$2$"`
}
pathlocate () {
javapath=`which $1 2>/dev/null`
while [ -n "$javapath" -a -h "$javapath" ]; do
javapath=`readlink -q $javapath`
done
test -n "$javapath"
}
case `uname` in
CYGWIN*)
# Hopefully this will always work on cygwin with Sun's Java
if [ "$javac" != "yes" ]; then #first try the public jre
jversion=`regtool -q get '\\HKLM\\SOFTWARE\\JavaSoft\\Java Runtime Environment\\CurrentVersion'`
jhome=`regtool -q get '\\HKLM\SOFTWARE\\JavaSoft\\Java Runtime Environment\\'$jversion'\\JavaHome'`
fi
if [ "$jhome" = "" ]; then
jversion=`regtool -q get '\\HKLM\\SOFTWARE\\JavaSoft\\Java Development Kit\\CurrentVersion'`
if [ $? != 0 ]; then
exit 1
fi
jhome=`regtool -q get '\\HKLM\SOFTWARE\\JavaSoft\\Java Development Kit\\'$jversion'\\JavaHome'`
fi
if [ $? != 0 ]; then
exit 1
fi
jhome=`cygpath -u "$jhome"`
;;
Darwin)
## This should work bu the symlinks are broken. Apple bug, I suppose :)
#jhome=/System/Library/Frameworks/JavaVM.framework/Versions/Current
## The real location is under /Developer/SDKs/MacOSX*.sdk/
## but now how do we determin the version correctly ?
## I have 10.6.6 but we need to drop the last digit
## `uname -r` returns 10.6.0 for some reason, and
## it appears that `basename `uname -r` .0` works
## it's not very certain if it will later.
pn=`sw_vers -productName | sed 's/ //g'`
pv=`sw_vers -productVersion | awk -F. '{ print $1 "." $2 }'`
## Since we only want to modify this one script for now, stick the
## extra subdir at the end, beceuase that's what the reset of scripts
## presume. This is a work-around and should be eliminated eventually.
xcode_jdk=/Developer/SDKs/${pn}${pv}.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers
jhome=/Library/Java/Home
;;
Linux)
# Check gentoo java configuration
javapath=`java-config -c 2>/dev/null`
# We check the path first, on the assumption that that's the preferred
# version.
if [ -z "$javapath" ]; then
pathlocate javac || { test -z "$javac" && pathlocate java; }
fi
if [ -z "$javapath" ]; then
# We try a bunch of standard names, before resorting to rpm -qa
rpmlocate IBMJava2-SDK javac || \
rpmlocate IBMJava2-142-ia32-SDK javac || \
rpmlocate j2sdk javac || \
rpmlocate jdk javac || \
{ test -z "$javac" && rpmlocate j2re java; } || \
{ test -z "$javac" && rpmlocate jre java; }
if [ -z "$javapath" ]; then
# lastly, check for a weirdly named IBMJava2
name=`rpm -qa | grep IBMJava2 | head -1`
if [ -n "$name" ]; then
rpmlocate $name javac
fi
fi
fi
if [ -z "$javapath" ]; then
exit 1
fi
jbin=`dirname "$javapath"`
jhome=`dirname "$jbin"`
;;
FreeBSD)
# We check the path first, on the assumption that that's the preferred
# version.
pathlocate javac || { test -z "$javac" && pathlocate java; }
if [ -n "$javapath" ]; then
jbin=`dirname "$javapath"`
else
if [ -f /usr/local/jdk1.4*/bin/java ]; then
jbin=/usr/local/jdk1.4*/bin
else
exit 1
fi
fi
jhome=`dirname $jbin`
;;
esac
# These are correct for Sun and IBM's x86 Java versions
if [ "$jni" = "yes" ]; then
jnilocate () {
dir="$1"
test -d "$1"
}
# Look for a likely JNI directory
# Windows, and IBM Java: in jre/bin
# Sun Java on Linux: in jre/lib/i386
if [ `uname` = "Darwin" ]; then
jnilocate "/Library/Java/Extensions"
elif "$jhome/bin/java" -version 2>&1 | grep -q IBM || cygpath -w / >/dev/null 2>/dev/null; then
jnilocate "$jhome/jre/bin" || jnilocate "$jhome/bin"
else
arch=`uname -m`
jnilocate "$jhome/jre/lib/$arch" || \
jnilocate "$jhome/jre/lib/i386" || \
jnilocate "$jhome/jre/lib/amd64" || \
jnilocate "$jhome/lib/$arch" || \
jnilocate "$jhome/lib/i386" || \
jnilocate "$jhome/lib/amd64"
fi
elif [ "$javac" = "yes" ]; then
if [ `uname` = "Darwin" ]; then
dir="$xcode_jdk"
else
dir="$jhome/bin"
fi
elif [ "$java" = "yes" ]; then
dir="$jhome/bin"
fi
# Check that what we found actually exists
if [ -d "$dir" ]; then
echo $dir
else
exit 1
fi
|