Locate-jre

From Cyber-Physical Systems Laboratory
Jump to navigationJump to search
#!/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

if [ -f /usr/bin/regtool ]; then
  # 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"`
else
  # 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. But a nasty rpm may have removed them, so we
    # recreate our default path...
    PATH=`bash --login -c 'echo $PATH'`
    j=`which javac 2>/dev/null`
    if [ $? != 0 ]; then
      exit 1
    fi
  fi
  jbin=`dirname "$j"`
  jhome=`dirname "$jbin"`
fi

# These are correct for Sun's Window java and IBM's Linux java
if [ "$jni" = "yes" ]; then
  dir="$jhome/jre/bin"
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