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 ant

I 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 "$@"

Attachment: signature.asc
Description: PGP signature

Reply via email to