3 # This is jarrg, a wrapper script for plumbing the Jarrg
4 # client into a JVM on Linux.
6 # This program is Free Software. Copyright (C) 2009 Ian Jackson.
8 # Permission is hereby granted, free of charge, to any person obtaining a copy
9 # of this software and associated documentation files (the "Software"), to deal
10 # in the Software without restriction, including without limitation the rights
11 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 # copies of the Software, and to permit persons to whom the Software is fur-
13 # nished to do so, subject to the following conditions:
15 # The above copyright notice and this permission notice shall be included in
16 # all copies or substantial portions of the Software.
18 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
20 # NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 # XFREE86 PROJECT BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
22 # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON-
23 # NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 usage: .../jarrg /path/to/yohoho/yohoho [...]
37 fail "couldn't find the right jre: $*
38 perhaps you should make ypp's java symlink (normally yohoho/java)
39 point to your jre, eg to /usr/lib/jvm/java-6-sun"
48 setup_only_simulate=''
50 while [ $# -ge 1 ]; do
56 shift || badusage "--jarrg needs a value"
64 setup_only_simulate=echo
67 -*) badusage "unknown option \`$1'"
74 if [ $# -lt 1 ]; then usage; badusage "need path to yohoho"; exit 127; fi
78 #---------- find ourselves ----------
81 jarrgdir="${jarrgdir%/*}"
85 *) jarrgdir="$PWD/$jarrgdir" ;;
88 if [ x"$srcjardir" = x ]; then
92 #---------- find YPP client and the Java installation it uses ----------
96 # this replicates the java-searching logic from yohoho/yohoho:
97 if [ -x "$yppdir/java/bin/java" ]; then
98 yppjava="$yppdir/java/bin/java"
99 elif [ -x "$JAVA_HOME/bin/java" ]; then
100 yppjava="$JAVA_HOME/bin/java"
103 yppjava=`type -p java 2>&1`
109 jarrg tree: "$jarrgdir"
115 if ! [ -x "$yppjava" ]; then
119 javadir="${yppjava%/bin/java}"
120 if [ -x "$javadir/jre/bin/java" ]; then
121 echo " java/ points to the jre, good"
124 echo " java/ has just the executable bin/java, trying readlink"
125 absjava=`readlink -f "$yppjava"`
126 echo " abs. java: \"$absjava\""
129 javadir="${absjava%/bin/java}"
130 jreleaf="${javadir##*/}"
131 javadir="${javadir%/*}"
132 echo " jre leaf dir: \"$jreleaf\""
134 jre) echo " found jre directory, good";;
135 java-*) echo " found java directory, good";;
136 jre1.*) echo " found versioned jre directory $jreleaf, ok";;
137 *) nojre "java binary not in jre dir ($jreleaf)";;
141 nojre "real java binary not in ../bin/java dir";;
146 ''|/|/usr) nojre "javadir is $javadir (and even found $javadir/jre!)" ;;
148 *) javadir="$PWD/$javadir" ;;
152 linkfarm="$jtmp/linkfarm"
155 export JARRG_JRE="$javadir/$jreleaf"
156 realjava="$JARRG_JRE/bin/java"
158 #---------- confirm for the user which paths we're using ----------
161 java dir.: "$javadir"
163 primary java: "$realjava"
164 jarrg jars: "$srcjardir"
165 jarrg tmpdir: "$jtmp"
168 #---------- run the control panel ----------
170 if $check_only; then echo "Check successful."; exit 0; fi
173 $setup_only_simulate "$realjava" \
174 -Dnet.chiark.yarrg.controlpanel.exitstatus=12 \
176 -jar "$srcjardir/Jarrg-ControlPanel.jar"
180 if $setup_only; then rc=12; fi
183 0) echo "launcher dialogue closed, quitting"; exit 0 ;;
185 *) echo >&2 "control panel failed with exit status $rc"; exit "$rc" ;;
189 #---------- create the temporary are and link farm ----------
192 mkdir -- "$jtmp" "$extdir" "$linkfarm"
193 cp "$srcjardir"/Jarrg*.jar "$extdir"
195 cp -Rs "$javadir"/. "$linkfarm"/.
197 #---------- edit the linkfarm to have our jvm wrapper ----------
199 wrapper="$linkfarm"/$jreleaf/bin/java
202 export JARRG_EXTDIR="$extdir"
204 cat <<'END' >"$wrapper"
209 lh=`date +'%Y/%m/%d %H:%M:%S jarrg'`
210 printf >&2 "%s: %s |\f\n" "$lh" "$*"
215 #echo >&2 "$djava-wrap
220 yppclass=com.threerings.yohoho.client.YoApp
221 atclass=net.chiark.yarrg.MarketUploader
222 # for testing atclass=net.chiark.yarrg.MarketUploader,Monkey
226 lastarg="${args[$(( $nargs - 1 ))]}"
228 fail () { echo >&2 "jarrg-java: $*"; exit 127; }
230 if [ x"$lastarg" = x"$yppclass" ]; then
232 [ x"$JARRG_EXTDIR" != x ] || fail 'JARRG_EXTDIR not set'
234 set -e$JARRG_JWRAP_X -- \
235 -Djavax.accessibility.assistive_technologies=$atclass \
236 -Djava.ext.dirs="$JARRG_EXTDIR:$JARRG_JRE/lib/ext" \
241 real="$JARRG_JRE/bin/java"
242 log "running $real $*"
243 exec "$real" $JARRG_JAVA_OPTS "$@"
246 chmod +x -- "$wrapper"
248 #---------- now run it ----------
250 exec $setup_only_simulate "$yohoho" -Djava.home="$linkfarm/$jreleaf"