Hi all,
Ok, I guess it was time for a new version of the script. Main changes :
* correct the typo spotted by Henri
* build working classpaths out of dirs and jars with spaces in
the name (original method didn't work, new method should have
but didn't, newser new method was tested a bit and works at
least on my setup)
* automatically detect java functions and use them :
* set_jvm originates in tomcat3, was cleaned up by me and
later Guillaume, has been used by jpackage ever since. It
will try to find a jvm in a list of know locations if
JAVA_HOME is not defined
* set_javacmd is a new one. the AIX hack shows we need to
test for not-standard jvm layouts. I've not added it to
the jpackage java-functions yet, but it could look like
the following :
set_javacmd() {
[ -x "$JAVACMD" ] && return
# Add all sorts of jvm layouts here
[ -x "$JAVA_HOME/jre/sh/java" ] &&
JAVACMD="$JAVA_HOME/jre/sh/java"
[ ! -x "$JAVACMD" -a -x "$JAVA_HOME/bin/java" ] &&
JAVACMD="$JAVA_HOME/bin/java"
[ ! -x "$JAVACMD" ] && JAVACMD="java"
}
The fact tomcat knew how to look for a jvm but not about the aix
hack, and ant about the aix hack but not how to search for jvm
strongly hints these functions must exist and be externalized
(i.e not project specific). The new version of the script will
look for a common functions files when we know it exists (i.e.
in rpm mode) and else fall back on a (maybe obsolete) copy that
could be shipped with antI didn't change back the $() back since it's required by posix and the few test we did with csh-like scripts show some versions won't even accept ``. csh support should be done via scripts written in c-shell syntax by c-shell users IMHO. Comments ? -- Nicolas Mailhot
--- ant.1 Tue Apr 30 10:22:50 2002
+++ ant.2 Tue Apr 30 11:23:05 2002
@@ -16,12 +16,15 @@
Darwin*) darwin=true ;;
esac
-[ -z "$ANT_HOME" -a "$rpmmode" = "true" ] && ANT_HOME="/usr"
+if [ "$rpmmode" = "true" ] ; then
+ [ -z "$ANT_HOME" ] && ANT_HOME="/usr"
+ [ -z "$JAVA_FUNCTIONS" ] && $JAVA_FUNCTIONS="/usr/bin/java-functions"
+fi
if [ -z "$ANT_HOME" ] ; then
# try to find ANT
[ -d "/opt/ant" ] && ANT_HOME="/opt/ant"
- [ -d "$HOME}/opt/ant" ] && ANT_HOME="$HOME/opt/ant"
+ [ -d "$HOME/opt/ant" ] && ANT_HOME="$HOME/opt/ant"
## resolve links - $0 may be a link to ant's home
PRG=$0
@@ -55,57 +58,55 @@
[ -n "$CLASSPATH" ] && CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
fi
-# IF your JDK uses strange locations for the executables
-# (like IBM's JDK on AIX) you should set
-# JAVACMD in ant's confiburation files
-if [ -z "$JAVACMD" ] ; then
- [ -n "$JAVA_HOME" ] && JAVACMD="$JAVA_HOME/bin/java" || JAVACMD=java
-fi
+[ -z "$JAVA_FUNCTIONS" ] && $JAVA_FUNCTIONS="$ANT_HOME/lib/java-functions"
+
+if [ -r "$JAVA_FUNCTIONS" ] ; then
+ . "$JAVA_FUNCTIONS"
+ set_jvm
+ set_javacmd
+else
+ echo "No java functions found in $JAVA_FUNCTIONS, operating in dumb mode"
+ [ -z "$JAVA_HOME" ] && $JAVA_HOME="/usr/lib/java"
+ [ -z "$JAVACMD" ] && $JAVACMD="$JAVA_HOME/bin/java"
+fi
if [ ! -x "$JAVACMD" ] ; then
- echo "Error: JAVA_HOME is not defined correctly."
- echo " We cannot execute $JAVACMD"
+ echo "Error: we cannot execute $JAVACMD"
+ echo "Please set the JAVACMD environment variable to a correct value"
exit 1
fi
-unset LOCALCLASSPATH ;
-
-if [ -n "$JAVA_HOME" ] ; then
- [ -f "$JAVA_HOME/lib/tools.jar" ] &&
LOCALCLASSPATH="$JAVA_HOME/lib/tools.jar"
- [ -f "$JAVA_HOME/lib/classes.zip" ] &&
LOCALCLASSPATH="$JAVA_HOME/lib/classes.zip"
-else
- echo "Warning: JAVA_HOME environment variable is not set."
- echo " If build fails because sun.* classes could not be found"
- echo " you will need to set the JAVA_HOME environment variable"
- echo " to the installation directory of java."
+if [ ! -d "$JAVA_HOME" ] ; then
+ echo "Warning: $JAVA_HOME is not a directory"
+ echo "Please set the JAVA_HOME environment variable to a correct value"
fi
+
+unset LOCALCLASSPATH
+
+[ -f "$JAVA_HOME/lib/tools.jar" ] && LOCALCLASSPATH="$JAVA_HOME/lib/tools.jar"
+[ -f "$JAVA_HOME/lib/classes.zip" ] &&
LOCALCLASSPATH="$JAVA_HOME/lib/classes.zip"
if [ "$darwin" = "true" -a "$usejikes" = "true" ] ; then
OSXHACK="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Classes"
- JARS=$(find "$OSXHACK" -name *.jar 2>/dev/null)
- for jar in $JARS ; do
- [ -z "$JIKESPATH" ] && JIKESPATH="$jar" ||\
- JIKESPATH="$JIKESPATH":"$jar"
- done
+ JIKESJARS=$(find "$OSXHACK" -name *.jar -printf %p: 2>/dev/null)
+ [ -z "$JIKESPATH" ] && JIKESPATH="$JIKESJARS" ||
JIKESPATH="$JIKESPATH:$JIKESJARS"
fi
if [ "$rpmmode" = "true" ] ; then
JAVALIBDIR="/usr/share/java"
JARS="ant ant-optional jaxp_parser xml_apis"
- for jar in $JARS ; do
- [ -z "$LOCALCLASSPATH" ] &&
LOCALCLASSPATH="$JAVALIBDIR/$jar.jar" ||\
-
LOCALCLASSPATH="$LOCALCLASSPATH":"$JAVALIBDIR/$jar.jar"
- done
+ unset COREJARS
+ for jar in $JARS ; do COREJARS="$COREJARS$JAVALIBDIR/$jar.jar:" ; done
else
- JARS=$(find "$ANT_HOME/lib" -name *.jar 2>/dev/null)
- for jar in $JARS ; do
- [ -z "$LOCALCLASSPATH" ] && LOCALCLASSPATH="$jar" ||\
- LOCALCLASSPATH="$jar":"$LOCALCLASSPATH"
- done
+ COREJARS=$(find "$ANT_HOME/lib" -name *.jar -printf %p: 2>/dev/null)
fi
+[ -z "$LOCALCLASSPATH" ] && LOCALCLASSPATH="$COREJARS" ||\
+ LOCALCLASSPATH="$LOCALCLASSPATH:$COREJARS"
+
+# We just constructed a :-ended LOCALCLASSPATH
if [ -n "$CLASSPATH" ] ; then
- LOCALCLASSPATH="$LOCALCLASSPATH":"$CLASSPATH"
+ LOCALCLASSPATH="$LOCALCLASSPATH$CLASSPATH"
fi
# supply JIKESPATH to Ant as jikes.class.path
#! /bin/sh
# Copyright (c) 2001-2002 The Apache Software Foundation. All rights
# reserved.
# load system-wide ant configuration
[ -r "/etc/ant.conf" ] && . "/etc/ant.conf"
# load user ant configuration
[ -r "$HOME/.antrc" ] && . "$HOME/.antrc"
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
case "$(uname)" in
CYGWIN*) cygwin=true ;;
Darwin*) darwin=true ;;
esac
if [ "$rpmmode" = "true" ] ; then
[ -z "$ANT_HOME" ] && ANT_HOME="/usr"
[ -z "$JAVA_FUNCTIONS" ] && $JAVA_FUNCTIONS="/usr/bin/java-functions"
fi
if [ -z "$ANT_HOME" ] ; then
# try to find ANT
[ -d "/opt/ant" ] && ANT_HOME="/opt/ant"
[ -d "$HOME/opt/ant" ] && ANT_HOME="$HOME/opt/ant"
## resolve links - $0 may be a link to ant's home
PRG=$0
progname=$(basename $0)
saveddir="$(pwd)"
# need this for relative symlinks
cd "$(dirname $PRG)"
while [ -h "$PRG" ] ; do
ls=$(ls -ld "$PRG")
link=$(expr "$ls" : '.*-> \(.*\)$')
if expr "$link" : '.*/.*' > /dev/null; then
PRG="$link"
else
PRG="$(dirname $PRG)/$link"
fi
done
ANT_HOME="$(dirname '$PRG')/.."
# make it fully qualified
ANT_HOME=$(cd "$ANT_HOME" && pwd)
cd "$saveddir"
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if [ "$cygwin" = "true" ] ; then
[ -n "$ANT_HOME" ] && ANT_HOME=$(cygpath --unix "$ANT_HOME")
[ -n "$JAVA_HOME" ] && JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
[ -n "$CLASSPATH" ] && CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
fi
[ -z "$JAVA_FUNCTIONS" ] && $JAVA_FUNCTIONS="$ANT_HOME/lib/java-functions"
if [ -r "$JAVA_FUNCTIONS" ] ; then
. "$JAVA_FUNCTIONS"
set_jvm
set_javacmd
else
echo "No java functions found in $JAVA_FUNCTIONS, operating in dumb mode"
[ -z "$JAVA_HOME" ] && $JAVA_HOME="/usr/lib/java"
[ -z "$JAVACMD" ] && $JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: we cannot execute $JAVACMD"
echo "Please set the JAVACMD environment variable to a correct value"
exit 1
fi
if [ ! -d "$JAVA_HOME" ] ; then
echo "Warning: $JAVA_HOME is not a directory"
echo "Please set the JAVA_HOME environment variable to a correct value"
fi
unset LOCALCLASSPATH
[ -f "$JAVA_HOME/lib/tools.jar" ] && LOCALCLASSPATH="$JAVA_HOME/lib/tools.jar"
[ -f "$JAVA_HOME/lib/classes.zip" ] && LOCALCLASSPATH="$JAVA_HOME/lib/classes.zip"
if [ "$darwin" = "true" -a "$usejikes" = "true" ] ; then
OSXHACK="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Classes"
JIKESJARS=$(find "$OSXHACK" -name *.jar -printf %p: 2>/dev/null)
[ -z "$JIKESPATH" ] && JIKESPATH="$JIKESJARS" || JIKESPATH="$JIKESPATH:$JIKESJARS"
fi
if [ "$rpmmode" = "true" ] ; then
JAVALIBDIR="/usr/share/java"
JARS="ant ant-optional jaxp_parser xml_apis"
unset COREJARS
for jar in $JARS ; do COREJARS="$COREJARS$JAVALIBDIR/$jar.jar:" ; done
else
COREJARS=$(find "$ANT_HOME/lib" -name *.jar -printf %p: 2>/dev/null)
fi
[ -z "$LOCALCLASSPATH" ] && LOCALCLASSPATH="$COREJARS" ||\
LOCALCLASSPATH="$LOCALCLASSPATH:$COREJARS"
# We just constructed a :-ended LOCALCLASSPATH
if [ -n "$CLASSPATH" ] ; then
LOCALCLASSPATH="$LOCALCLASSPATH$CLASSPATH"
fi
# supply JIKESPATH to Ant as jikes.class.path
if [ -n "$JIKESPATH" ] ; then
[ "$cygwin" = "true" ] && JIKESPATH=$(cygpath --path --windows "$JIKESPATH")
ANT_OPTS="$ANT_OPTS -Djikes.class.path=$JIKESPATH"
fi
# Allow Jikes support (off by default)
[ "$usejikes" = "true" ] && ANT_OPTS="$ANT_OPTS -Dbuild.compiler=jikes"
# For Cygwin, switch paths to Windows format before running java
if [ "$cygwin" = "true" ]; then
ANT_HOME=$(cygpath --path --windows "$ANT_HOME")
JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
LOCALCLASSPATH=$(cygpath --path --windows "$LOCALCLASSPATH")
fi
"$JAVACMD" -classpath "$LOCALCLASSPATH" -Dant.home="$ANT_HOME" $ANT_OPTS org.apache.tools.ant.Main $ANT_ARGS "$@"
signature.asc
Description: PGP signature
