1#! /bin/sh
2
3# Licensed to the Apache Software Foundation (ASF) under one or more
4# contributor license agreements.  See the NOTICE file distributed with
5# this work for additional information regarding copyright ownership.
6# The ASF licenses this file to You under the Apache License, Version 2.0
7# (the "License"); you may not use this file except in compliance with
8# the License.  You may obtain a copy of the License at
9#
10#     http://www.apache.org/licenses/LICENSE-2.0
11#
12# Unless required by applicable law or agreed to in writing, software
13# distributed under the License is distributed on an "AS IS" BASIS,
14# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17
18# Extract launch and ant arguments, (see details below).
19ant_exec_args=
20no_config=false
21use_jikes_default=false
22ant_exec_debug=false
23show_help=false
24for arg in "$@" ; do
25  if [ "$arg" = "--noconfig" ] ; then
26    no_config=true
27  elif [ "$arg" = "--usejikes" ] ; then
28    use_jikes_default=true
29  elif [ "$arg" = "--execdebug" ] ; then
30    ant_exec_debug=true
31  elif [ my"$arg" = my"--h"  -o my"$arg" = my"--help"  ] ; then
32    show_help=true
33    ant_exec_args="$ant_exec_args -h"
34  else
35    if [  my"$arg" = my"-h"  -o  my"$arg" = my"-help" ] ; then
36      show_help=true
37    fi
38    ant_exec_args="$ant_exec_args \"$arg\""
39  fi
40done
41
42# Source/default ant configuration
43if $no_config ; then
44  rpm_mode=false
45  usejikes=$use_jikes_default
46else
47  # load system-wide ant configuration (ONLY if ANT_HOME has NOT been set)
48  if [ -z "$ANT_HOME" -o "$ANT_HOME" = "/usr/share/ant" ]; then
49      if [ -f "/etc/ant.conf" ] ; then
50          . /etc/ant.conf
51      fi
52  fi
53
54  # load user ant configuration
55  if [ -f "$HOME/.ant/ant.conf" ] ; then
56    . $HOME/.ant/ant.conf
57  fi
58  if [ -f "$HOME/.antrc" ] ; then
59    . "$HOME/.antrc"
60  fi
61
62  # provide default configuration values
63  if [ -z "$rpm_mode" ] ; then
64    rpm_mode=false
65  fi
66  if [ -z "$usejikes" ] ; then
67    usejikes=$use_jikes_default
68  fi
69fi
70
71# Setup Java environment in rpm mode
72if $rpm_mode ; then
73  if [ -f /usr/share/java-utils/java-functions ] ; then
74    . /usr/share/java-utils/java-functions
75    set_jvm
76    set_javacmd
77  fi
78fi
79
80# OS specific support.  $var _must_ be set to either true or false.
81cygwin=false;
82darwin=false;
83case "`uname`" in
84  CYGWIN*) cygwin=true ;;
85  Darwin*) darwin=true
86           if [ -z "$JAVA_HOME" ] ; then
87             JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
88           fi
89           ;;
90esac
91
92if [ -z "$ANT_HOME" -o ! -d "$ANT_HOME" ] ; then
93  ## resolve links - $0 may be a link to ant's home
94  PRG="$0"
95  progname=`basename "$0"`
96
97  # need this for relative symlinks
98  while [ -h "$PRG" ] ; do
99    ls=`ls -ld "$PRG"`
100    link=`expr "$ls" : '.*-> \(.*\)$'`
101    if expr "$link" : '/.*' > /dev/null; then
102    PRG="$link"
103    else
104    PRG=`dirname "$PRG"`"/$link"
105    fi
106  done
107
108  ANT_HOME=`dirname "$PRG"`/..
109
110  # make it fully qualified
111  ANT_HOME=`cd "$ANT_HOME" > /dev/null && pwd`
112fi
113
114# For Cygwin, ensure paths are in UNIX format before anything is touched
115if $cygwin ; then
116  [ -n "$ANT_HOME" ] &&
117    ANT_HOME=`cygpath --unix "$ANT_HOME"`
118  [ -n "$JAVA_HOME" ] &&
119    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
120fi
121
122# set ANT_LIB location
123ANT_LIB="${ANT_HOME}/lib"
124
125if [ -z "$JAVACMD" ] ; then
126  if [ -n "$JAVA_HOME"  ] ; then
127    # IBM's JDK on AIX uses strange locations for the executables
128    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
129      JAVACMD="$JAVA_HOME/jre/sh/java"
130    elif [ -x "$JAVA_HOME/jre/bin/java" ] ; then
131      JAVACMD="$JAVA_HOME/jre/bin/java"
132    else
133      JAVACMD="$JAVA_HOME/bin/java"
134    fi
135  else
136    JAVACMD=`which java 2> /dev/null `
137    if [ -z "$JAVACMD" ] ; then
138        JAVACMD=java
139    fi
140  fi
141fi
142
143if [ ! -x "$JAVACMD" ] ; then
144  echo "Error: JAVA_HOME is not defined correctly."
145  echo "  We cannot execute $JAVACMD"
146  exit 1
147fi
148
149# Build local classpath using just the launcher in non-rpm mode or
150# use the Jpackage helper in rpm mode with basic and default jars
151# specified in the ant.conf configuration. Because the launcher is
152# used, libraries linked in ANT_HOME/lib will also be included, but this
153# is discouraged as it is not java-version safe. A user should
154# request optional jars and their dependencies via the OPT_JAR_LIST
155# variable
156if $rpm_mode && [ -x /usr/bin/build-classpath ] ; then
157  LOCALCLASSPATH="$(/usr/bin/build-classpath ant ant-launcher jaxp_parser_impl xml-commons-apis)"
158
159  # If no optional jars have been specified then build the default list
160  if [ -z "$OPT_JAR_LIST" ] ; then
161    for file in /etc/ant.d/*; do
162      if [ -f "$file" ]; then
163        case "$file" in
164        *~) ;;
165        *#*) ;;
166        *.rpmsave) ;;
167        *.rpmnew) ;;
168        *)
169          for dep in `cat "$file"`; do
170            case "$OPT_JAR_LIST" in
171            *"$dep"*) ;;
172            *) OPT_JAR_LIST="$OPT_JAR_LIST${OPT_JAR_LIST:+ }$dep"
173            esac
174          done
175        esac
176      fi
177    done
178  fi
179
180  # If the user requested to try to add some other jars to the classpath
181  if [ -n "$OPT_JAR_LIST" ] ; then
182    _OPTCLASSPATH="$(/usr/bin/build-classpath $OPT_JAR_LIST 2> /dev/null)"
183    if [ -n "$_OPTCLASSPATH" ] ; then 
184      LOCALCLASSPATH="$LOCALCLASSPATH:$_OPTCLASSPATH"
185    fi
186  fi
187
188  # Explicitly add javac path to classpath, assume JAVA_HOME set
189  # properly in rpm mode
190  if [ -f "$JAVA_HOME/lib/tools.jar" ] ; then
191    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/tools.jar"
192  fi
193  if [ -f "$JAVA_HOME/lib/classes.zip" ] ; then
194    LOCALCLASSPATH="$LOCALCLASSPATH:$JAVA_HOME/lib/classes.zip"
195  fi
196
197  # if CLASSPATH_OVERRIDE env var is set, LOCALCLASSPATH will be
198  # user CLASSPATH first and ant-found jars after.
199  # In that case, the user CLASSPATH will override ant-found jars
200  #
201  # if CLASSPATH_OVERRIDE is not set, we'll have the normal behaviour
202  # with ant-found jars first and user CLASSPATH after
203  if [ -n "$CLASSPATH" ] ; then
204    # merge local and specified classpath 
205    if [ -z "$LOCALCLASSPATH" ] ; then 
206      LOCALCLASSPATH="$CLASSPATH"
207    elif [ -n "$CLASSPATH_OVERRIDE" ] ; then
208      LOCALCLASSPATH="$CLASSPATH:$LOCALCLASSPATH"
209    else
210      LOCALCLASSPATH="$LOCALCLASSPATH:$CLASSPATH"
211    fi
212
213    # remove class path from launcher -cp option
214    CLASSPATH=""
215  fi
216else
217  # not using rpm_mode; use launcher to determine classpaths
218  if [ -z "$LOCALCLASSPATH" ] ; then
219      LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar
220  else
221      LOCALCLASSPATH=$ANT_LIB/ant-launcher.jar:$LOCALCLASSPATH
222  fi
223fi
224
225if [ -n "$JAVA_HOME" ] ; then
226  # OSX hack to make Ant work with jikes
227  if $darwin ; then
228    OSXHACK="${JAVA_HOME}/../Classes"
229    if [ -d "${OSXHACK}" ] ; then
230      for i in "${OSXHACK}"/*.jar
231      do
232        JIKESPATH="$JIKESPATH:$i"
233      done
234    fi
235  fi
236fi
237
238# Allow Jikes support (off by default)
239if $usejikes; then
240  ANT_OPTS="$ANT_OPTS -Dbuild.compiler=jikes"
241fi
242
243# For Cygwin, switch paths to appropriate format before running java
244# For PATHs convert to unix format first, then to windows format to ensure
245# both formats are supported. Probably this will fail on directories with ;
246# in the name in the path. Let's assume that paths containing ; are more
247# rare than windows style paths on cygwin.
248if $cygwin; then
249  if [ "$OS" = "Windows_NT" ] && cygpath -m .>/dev/null 2>/dev/null ; then
250    format=mixed
251  else
252    format=windows
253  fi
254  ANT_HOME=`cygpath --$format "$ANT_HOME"`
255  ANT_LIB=`cygpath --$format "$ANT_LIB"`
256  JAVA_HOME=`cygpath --$format "$JAVA_HOME"`
257  LCP_TEMP=`cygpath --path --unix "$LOCALCLASSPATH"`
258  LOCALCLASSPATH=`cygpath --path --$format "$LCP_TEMP"`
259  if [ -n "$CLASSPATH" ] ; then
260    CP_TEMP=`cygpath --path --unix "$CLASSPATH"`
261    CLASSPATH=`cygpath --path --$format "$CP_TEMP"`
262  fi
263  CYGHOME=`cygpath --$format "$HOME"`
264fi
265
266# Show script help if requested
267if $show_help ; then
268  echo $0 '[script options] [options] [target [target2 [target3] ..]]'
269  echo 'Script Options:'
270  echo '  --help, --h            print this message and ant help'
271  echo '  --noconfig             suppress sourcing of /etc/ant.conf,'
272  echo '                         $HOME/.ant/ant.conf, and $HOME/.antrc'
273  echo '                         configuration files'
274  echo '  --usejikes             enable use of jikes by default, unless'
275  echo '                         set explicitly in configuration files'
276  echo '  --execdebug            print ant exec line generated by this'
277  echo '                         launch script'
278  echo '  '
279fi
280# add a second backslash to variables terminated by a backslash under cygwin
281if $cygwin; then
282  case "$ANT_HOME" in
283    *\\ )
284    ANT_HOME="$ANT_HOME\\"
285    ;;
286  esac
287  case "$CYGHOME" in
288    *\\ )
289    CYGHOME="$CYGHOME\\"
290    ;;
291  esac
292  case "$JIKESPATH" in
293    *\\ )
294    JIKESPATH="$JIKESPATH\\"
295    ;;
296  esac
297  case "$LOCALCLASSPATH" in
298    *\\ )
299    LOCALCLASSPATH="$LOCALCLASSPATH\\"
300    ;;
301  esac
302  case "$CLASSPATH" in
303    *\\ )
304    CLASSPATH="$CLASSPATH\\"
305    ;;
306  esac
307fi
308# Execute ant using eval/exec to preserve spaces in paths,
309# java options, and ant args
310ant_sys_opts=
311if [ -n "$CYGHOME" ]; then
312  if [ -n "$JIKESPATH" ]; then
313    ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\" -Dcygwin.user.home=\"$CYGHOME\""
314  else
315    ant_sys_opts="-Dcygwin.user.home=\"$CYGHOME\""
316  fi
317else
318  if [ -n "$JIKESPATH" ]; then
319    ant_sys_opts="-Djikes.class.path=\"$JIKESPATH\""
320  fi
321fi
322ant_exec_command="exec \"$JAVACMD\" $ANT_OPTS -classpath \"$LOCALCLASSPATH\" -Dant.home=\"$ANT_HOME\" -Dant.library.dir=\"$ANT_LIB\" $ant_sys_opts org.apache.tools.ant.launch.Launcher $ANT_ARGS -cp \"$CLASSPATH\" $ant_exec_args"
323if $ant_exec_debug ; then
324    echo $ant_exec_command
325fi
326eval $ant_exec_command
327