chiark / gitweb /
jpctb: New algorithm for finding java stuff
authorIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 22 Aug 2010 18:37:01 +0000 (19:37 +0100)
committerIan Jackson <ian@liberator.relativity.greenend.org.uk>
Sun, 22 Aug 2010 18:37:01 +0000 (19:37 +0100)
jpctb

diff --git a/jpctb b/jpctb
index c5bf4aa..5157a05 100755 (executable)
--- a/jpctb
+++ b/jpctb
@@ -32,6 +32,12 @@ fail () {
        echo >&2 "jpctb: $*"
        exit 127
 }
+
+nojre () {
+       fail "couldn't find the right jre: $*
+ perhaps you should make ypp's java symlink (normally yohoho/java)
+ point to your jre, eg to /usr/lib/jvm/java-6-sun"
+
 badusage () {
        fail "bad usage: $*"
 }
@@ -73,58 +79,51 @@ fi
 
 yppdir="${yohoho%/*}"
 
+# this replicates the java-searching logic from yohoho/yohoho:
+if [ -x "$yohoho/java/bin/java" ]; then
+       yppjava="$yohoho/java/bin/java"
+elif [ -x "$JAVA_HOME/bin/java" ]; then
+       yppjava="$JAVA_HOME/bin/java"
+else
+       set +e
+       yppjava=`type -p java 2>&1`
+       set -e
+fi
+
 cat <<END
 jpctb:
    jpctb tree:  "$jpctbdir"
    yohoho:       "$yohoho"
+   ypp uses:     "$yppjava"
 END
 
-if [ -x "$yppdir/java/bin/java" ]; then
-       if [ -d "$yppdir/java/jre" ]; then
-               echo "   yohoho/java/bin and yohoho/java/jre exist, good"
-               javadir="$yppdir/java"
-       else
-               absjava=`readlink -f "$yppdir/java/bin/java"`
-               cat <<END
-   yohoho/java/bin exists but yohoho/java/jre does not
-   abs. java:    "$absjava"
-END
-               case "$absjava" in
-               */jre/bin/java)
-                       echo "   found jre directory, good"
-                       javadir="${absjava%/jre/bin/java}"
-                       ;;
-               *)
-                       echo "   java binary not in jre dir as expected, hmm."
-                       ;;
-               esac
-       fi
+if ! [ -x "$yppjava" ]; then
+       nojre "bad java ypp"
 fi
 
-if [ "x$javadir" = x ] && [ x"$JAVA_HOME" != x ] && \
-   [ -x "$JAVA_HOME/bin/java" ]; then
-cat <<END
-   yohoho/java/bin/java nonexistent or unsuitable, trying JAVA_HOME"
-   JAVA_HOME:    "$JAVA_HOME"
-END
-       if [ -d "$JAVA_HOME/jre" ]; then
-               javadir="$JAVA_HOME"
-       else
-               echo "   JAVA_HOME has no jre subdirectory, hmm."
+javadir="${yppjava#/bin/java}"
+if [ -x "$javadir/jre/bin/java" ]; then
+       echo "   java/ points to the jre, good"
+else
+       echo "   java/ has just the executable bin/java, trying readlink"
+       absjava=`readlink -f "$yppjava"`
+       echo "   abs. java:    \"$absjava\""
+       case "$absjava" in
+       */jre/bin/java)
+               echo "   found jre directory, good"
+               javadir="${absjava%/jre/bin/java}"
+               ;;
+       *)
+               nojre "java binary not in jre dir"
+               ;;
+       esac
        fi
 fi
 
-if [ "x$javadir" = x ]; then
-       fail "could not find java runtime system
- please check that $yppdir/java points to your Java installation"
-fi
-
 case "$javadir" in
-/usr)  fail "javadir is still /usr (and even found /usr/jre!)
- please make $yppdir/java point somewhere more sensible and/or
- reinstall YPP not telling it your java is in /usr.  sorry." ;;
-/*)    ;;
-*)     javadir="$PWD/$javadir" ;;
+|/|/usr)       nojre "javadir is $javadir (and even found $javadir/jre!)" ;;
+/*)            ;;
+*)             javadir="$PWD/$javadir" ;;
 esac
 
 jtmp="$jpctbdir/tmp"