chiark / gitweb /
jpctb: Fix syntax
[jarrg-owen.git] / jpctb
diff --git a/jpctb b/jpctb
index 4446b2d..f6c60e1 100755 (executable)
--- a/jpctb
+++ b/jpctb
@@ -24,7 +24,7 @@
 
 
 usage () { cat <<END
-usage: .../jpctb /path/to/dir/with/PCTB*.jar /path/to/yohoho/yohoho [...]
+usage: .../jpctb /path/to/yohoho/yohoho [...]
 END
 }
 
@@ -33,9 +33,32 @@ fail () {
        exit 127
 }
 
-if [ $# -lt 2 ]; then usage; fail 'bad usage'; exit 127; fi
+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: $*"
+}
+
+while [ $# -ge 1 ]; do
+       case "$1" in
+       -)              shift; break;;
+       --jpctb)
+                       shift
+                       srcjardir="$1"
+                       shift || badusage "--jpctb needs a value"
+                       ;;
+       -*)             badusage "unknown option \`$1'"
+                       ;;
+       *)
+                       break
+       esac
+done
+
+if [ $# -lt 1 ]; then usage; badusage "need path to yohoho"; exit 127; fi
 
-srcjardir="$1"; shift
 yohoho="$1"; shift
 
 #---------- find ourselves ----------
@@ -48,34 +71,71 @@ case "$jpctbdir" in
 *)     jpctbdir="$PWD/$jpctbdir" ;;
 esac
 
+if [ x"$srcjardir" = x ]; then
+       srcjardir="$jpctbdir"
+fi
+
 #---------- find YPP client and the Java installation it uses ----------
 
 yppdir="${yohoho%/*}"
 
-if [ -x "$yppdir/java/bin/java" ]; then
-       javadir="$yppdir/java"
-elif [ x"$JAVA_HOME" != x ] && [ -x "$JAVA_HOME/bin/java" ]; then
-       javadir="$JAVA_HOME"
+# 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
-       fail "could not find java runtime system"
+       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 "$yppjava" ]; then
+       nojre "bad java ypp"
+fi
+
+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
 
 case "$javadir" in
-/*)    ;;
-*)     javadir="$PWD/$javadir" ;;
+|/|/usr)       nojre "javadir is $javadir (and even found $javadir/jre!)" ;;
+/*)            ;;
+*)             javadir="$PWD/$javadir" ;;
 esac
 
 jtmp="$jpctbdir/tmp"
 linkfarm="$jtmp/linkfarm"
 extdir="$jtmp/ext"
 
+export JPCTB_JRE="$javadir/jre"
+
 #---------- confirm for the user which paths we're using ----------
 
 cat <<END
-jpctb:
-   jpctb tree:  "$jpctbdir"
-   yohoho:       "$yohoho"
    java:         "$javadir"
+   JRE:          "$JPCTB_JRE"
    PCTB jars:    "$srcjardir"
    jpctb tmpdir: "$jtmp"
 END
@@ -90,7 +150,7 @@ rm -rf -- "$jtmp"
 mkdir -- "$jtmp" "$extdir" "$linkfarm"
 cp "$srcjardir"/PCTB*.jar "$extdir"
 
-lndir -silent "$javadir" "$linkfarm"
+cp -Rs "$javadir"/. "$linkfarm"/.
 
 #---------- edit the linkfarm to have our jvm wrapper ----------
 
@@ -98,7 +158,6 @@ wrapper="$linkfarm"/jre/bin/java
 rm -- "$wrapper"
 
 export JPCTB_EXTDIR="$extdir"
-export JPCTB_JRE="$javadir/jre"
 
 cat <<'END' >"$wrapper"
 #!/bin/bash