You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

201 lines
7.3 KiB

#!/bin/sh
##
## java-toolkit.sh -- Java toolkit frontend
## Copyright (c) 2007 Ralf S. Engelschall <rse@engelschall.com>
##
# make sure variables are exported
export JAVA_PLATFORM
export JAVA_HOME
# determine requested platform and location
determine_variables () {
if [ ".$JAVA_PLATFORM" = . ] && [ ".$JAVA_HOME" = . ]; then
# use default platform
entry=`grep '^\+ ' @l_prefix@/etc/java/toolkits`
if [ ".$entry" != . ]; then
JAVA_PLATFORM=`echo ".$entry" | awk '{ print $2; }'`
JAVA_HOME=`echo ".$entry" | awk '{ print $3; }'`
fi
elif [ ".$JAVA_PLATFORM" = . ] && [ ".$JAVA_HOME" != . ]; then
# use user supplied platform
if [ -f "$JAVA_HOME/lib/tools.jar" ] && [ -f "$JAVA_HOME/bin/javac" ]; then
JAVA_PLATFORM="sun-jdk"
elif [ -f "$JAVA_HOME/lib/rt.jar" ] && [ -f "$JAVA_HOME/bin/java" ]; then
JAVA_PLATFORM="sun-jre"
elif [ ".`(grep 'GCJ' $JAVA_HOME/README) 2>/dev/null`" != . ]; then
JAVA_PLATFORM="gnu-gcj"
else
JAVA_PLATFORM="unknown-unknown"
fi
version=`($JAVA_HOME/bin/java -version 2>&1; echo "") 2>/dev/null | \
grep "^java version" | sed -e '1q' | \
sed -e 's;^;X;' -e 's;^X.*"\([0-9][0-9.]*\)".*$;\1;' -e 's;^X.*;0.0.0;'`
JAVA_PLATFORM="$JAVA_PLATFORM-$version"
elif [ ".$JAVA_PLATFORM" != . ] && [ ".$JAVA_HOME" = . ]; then
# use installed platform
entry=`grep "^[-+] $JAVA_PLATFORM" @l_prefix@/etc/java/toolkits | sed -e '1q'`
if [ ".$entry" != . ]; then
JAVA_PLATFORM=`echo ".$entry" | awk '{ print $2; }'`
JAVA_HOME=`echo ".$entry" | awk '{ print $3; }'`
fi
elif [ ".$JAVA_PLATFORM" != . ] && [ ".$JAVA_HOME" != . ]; then
# use user supplied platform (but optionally extend with version)
case "$JAVA_PLATFORM" in
*-*-[0-9]* )
;;
* )
version=`($JAVA_HOME/bin/java -version 2>&1; echo "") 2>/dev/null | \
grep "^java version" | sed -e '1q' | \
sed -e 's;^;X;' -e 's;^X.*"\([0-9][0-9.]*\)".*$;\1;' -e 's;^X.*;0.0.0;'`
JAVA_PLATFORM="$JAVA_PLATFORM-$version"
;;
esac
fi
}
# management functionality
do_manage () {
if [ $# -eq 0 ]; then
echo "USAGE: $0 [-e|--env] [-l|--list] [--register=<platform>:<home>] [--unregister=<platform>] [--activate=<platform>] [--deactivate=<platform>]"
exit 0
fi
case "$1" in
-e | --env )
determine_variables
echo "JAVA_PLATFORM=\"$JAVA_PLATFORM\"; export JAVA_PLATFORM"
echo "JAVA_HOME=\"$JAVA_HOME\"; export JAVA_HOME"
;;
-l | --list )
sort <@l_prefix@/etc/java/toolkits |\
awk '{ printf("%s %-15s %s\n", $1, $2, $3); }'
;;
--register=* )
eval `echo "$1" | sed -e 's%^--register=\(.*\):\(.*\)$%_platform="\1"; _home="\2"%'`
( egrep -v "^[-+] $_platform" @l_prefix@/etc/java/toolkits
echo "- $_platform $_home"
) >@l_prefix@/etc/java/toolkits.new
if [ ".`(cat @l_prefix@/etc/java/toolkits.new) 2>/dev/null`" != . ]; then
cp @l_prefix@/etc/java/toolkits.new @l_prefix@/etc/java/toolkits
rm -f @l_prefix@/etc/java/toolkits.new
fi
;;
--unregister=* )
eval `echo "$1" | sed -e 's%^--unregister=\(.*\)$%_platform="\1"%'`
( egrep -v "^[-+] $_platform" @l_prefix@/etc/java/toolkits
) >@l_prefix@/etc/java/toolkits.new
if [ -f @l_prefix@/etc/java/toolkits.new ]; then
cp @l_prefix@/etc/java/toolkits.new @l_prefix@/etc/java/toolkits
rm -f @l_prefix@/etc/java/toolkits.new
fi
;;
--activate=* )
eval `echo "$1" | sed -e 's%^--activate=\(.*\)$%_platform="\1"%'`
sed -e "s%^[-+] \(.*\)%- \1%" \
-e "s%^[-+] \($_platform \)%+ \1%" \
<@l_prefix@/etc/java/toolkits \
>@l_prefix@/etc/java/toolkits.new
if [ ".`(cat @l_prefix@/etc/java/toolkits.new) 2>/dev/null`" != . ]; then
cp @l_prefix@/etc/java/toolkits.new @l_prefix@/etc/java/toolkits
rm -f @l_prefix@/etc/java/toolkits.new
fi
;;
--deactivate=* )
eval `echo "$1" | sed -e 's%^--deactivate=\(.*\)$%_platform="\1"%'`
sed -e "s%^[-+] \($_platform \)%- \1%" \
<@l_prefix@/etc/java/toolkits \
>@l_prefix@/etc/java/toolkits.new
if [ ".`(cat @l_prefix@/etc/java/toolkits.new) 2>/dev/null`" != . ]; then
cp @l_prefix@/etc/java/toolkits.new @l_prefix@/etc/java/toolkits
rm -f @l_prefix@/etc/java/toolkits.new
fi
;;
esac
}
# execution functionality
do_execute () {
# allow explicit platform selection on the command-line
case "$1:$2" in
-V*:* )
JAVA_PLATFORM=`echo "X$1" | sed -e 's;^X-V;;'`
shift
;;
-V:* )
JAVA_PLATFORM="$2"
shift; shift
;;
--platform=*:* )
JAVA_PLATFORM=`echo "X$1" | sed -e 's;^X--platform=;;'`
shift
;;
--platform:* )
JAVA_PLATFORM="$2"
shift; shift
;;
esac
# determine requested platform and location
determine_variables
# sanity check platform and location
if [ ".$JAVA_PLATFORM" = . ]; then
if [ ".`(cat @l_prefix@/etc/java/toolkits) 2>/dev/null`" = . ]; then
echo "$0:ERROR: still no backend toolkits registered" 1>&2
else
echo "$0:ERROR: unable to determine JAVA_PLATFORM" 1>&2
fi
exit 1
fi
if [ ".$JAVA_HOME" = . ]; then
if [ ".`(cat @l_prefix@/etc/java/toolkits) 2>/dev/null`" = . ]; then
echo "$0:ERROR: still no backend toolkits registered" 1>&2
else
echo "$0:ERROR: unable to determine JAVA_HOME" 1>&2
fi
exit 1
fi
case "$JAVA_PLATFORM" in
*-*-[0-9]* )
;;
* )
echo "$0:ERROR: invalid JAVA_PLATFORM: \"$JAVA_PLATFORM\"" 1>&2
exit 1
;;
esac
if [ ! -d $JAVA_HOME ]; then
echo "$0:ERROR: invalid JAVA_HOME: \"$JAVA_HOME\"" 1>&2
exit 1
fi
# determine Java class path
if [ ".$CLASSPATH" = . ]; then
CLASSPATH="@l_prefix@/lib/java"
else
CLASSPATH="$CLASSPATH:@l_prefix@/lib/java"
fi
for jar in @l_prefix@/lib/*/*.jar @l_prefix@/lib/*.jar; do
CLASSPATH="$CLASSPATH:$jar"
done
export CLASSPATH
# pass-through execution to requested tool of particular platform
if [ -x $JAVA_HOME/bin/$tool ]; then
exec $JAVA_HOME/bin/$tool ${1+"$@"}
echo "$0:ERROR: tool \"$JAVA_HOME/bin/$tool\" failed to execute" 1>&2
exit 1
else
echo "$0:ERROR: tool \"$tool\" not provided by platform \"$JAVA_PLATFORM\" under \"$JAVA_HOME\"" 1>&2
exit 1
fi
}
# determine requested tool
tool=`echo "$0" | sed -e 's;^.*/\([^/]*\);\1;'`
# dispatch according to requested tool
case "$tool" in
java-toolkit ) do_manage "$@" ;;
* ) do_execute "$@" ;;
esac