#!/bin/sh # This script attempts to locate the jre directory of the current # Java installation, even when java is not in the path # We only support it for Sun's Java on Windows and IBM's Java on 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: locate-jre --java|--javac|--jni" >&2 exit 2 fi case `uname` in CYGWIN*) # Hopefully this will always work on cygwin with Sun's Java 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'` if [ $? != 0 ]; then exit 1 fi jhome=`cygpath -u "$jhome"` ;; Linux) # On Linux, we first try to find it from the rpm j=`rpm -ql IBMJava2-SDK | grep -m 1 'bin/javac$'` if [ $? != 0 ]; then # Next we try the path. This won't work within rpms, as they reset # the path (and we can't just execute the profile as that tends to # execute locate-jre ...). Life is hard... j=`which javac 2>/dev/null` if [ $? != 0 ]; then exit 1 fi fi jbin=`dirname "$j"` jhome=`dirname "$jbin"` ;; FreeBSD) if [ -f /usr/local/jdk1.4*/bin/java ]; then jbin=/usr/local/jdk1.4*/bin else exit 1 fi jhome=`dirname $jbin` ;; esac # These are correct for Sun's Window java and IBM's Linux java if [ "$jni" = "yes" ]; then case `uname` in FreeBSD) UNAMEM=`uname -m` dir="$jhome/jre/lib/$UNAMEM" ;; *) dir="$jhome/jre/bin" ;; esac elif [ "$javac" = "yes" ]; then dir="$jhome/bin" elif [ "$java" = "yes" ]; then dir="$jhome/jre/bin" fi # Check that what we found actually exists if [ -d "$dir" ]; then echo $dir else exit 1 fi