1b335bb0453b866ff735c772666ec1af4a8563183Ying Wang#!/bin/bash
2b335bb0453b866ff735c772666ec1af4a8563183Ying Wang#
3b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# Copyright (C) 2007 The Android Open Source Project
4b335bb0453b866ff735c772666ec1af4a8563183Ying Wang#
5b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# Licensed under the Apache License, Version 2.0 (the "License");
6b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# you may not use this file except in compliance with the License.
7b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# You may obtain a copy of the License at
8b335bb0453b866ff735c772666ec1af4a8563183Ying Wang#
9b335bb0453b866ff735c772666ec1af4a8563183Ying Wang#     http://www.apache.org/licenses/LICENSE-2.0
10b335bb0453b866ff735c772666ec1af4a8563183Ying Wang#
11b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# Unless required by applicable law or agreed to in writing, software
12b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# distributed under the License is distributed on an "AS IS" BASIS,
13b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# See the License for the specific language governing permissions and
15b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# limitations under the License.
16b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
17b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# Set up prog to be the path of this script, including following symlinks,
18b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# and set up progdir to be the fully-qualified pathname of its directory.
19b335bb0453b866ff735c772666ec1af4a8563183Ying Wangprog="$0"
20b335bb0453b866ff735c772666ec1af4a8563183Ying Wangwhile [ -h "${prog}" ]; do
21b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    newProg=`/bin/ls -ld "${prog}"`
22b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
23b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    if expr "x${newProg}" : 'x/' >/dev/null; then
24b335bb0453b866ff735c772666ec1af4a8563183Ying Wang        prog="${newProg}"
25b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    else
26b335bb0453b866ff735c772666ec1af4a8563183Ying Wang        progdir=`dirname "${prog}"`
27b335bb0453b866ff735c772666ec1af4a8563183Ying Wang        prog="${progdir}/${newProg}"
28b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    fi
29b335bb0453b866ff735c772666ec1af4a8563183Ying Wangdone
30b335bb0453b866ff735c772666ec1af4a8563183Ying Wangoldwd=`pwd`
31b335bb0453b866ff735c772666ec1af4a8563183Ying Wangprogdir=`dirname "${prog}"`
32b335bb0453b866ff735c772666ec1af4a8563183Ying Wangcd "${progdir}"
33b335bb0453b866ff735c772666ec1af4a8563183Ying Wangprogdir=`pwd`
34b335bb0453b866ff735c772666ec1af4a8563183Ying Wangprog="${progdir}"/`basename "${prog}"`
35b335bb0453b866ff735c772666ec1af4a8563183Ying Wangcd "${oldwd}"
36b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
37b335bb0453b866ff735c772666ec1af4a8563183Ying Wangjarfile=dx.jar
38b335bb0453b866ff735c772666ec1af4a8563183Ying Wanglibdir="$progdir"
39b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
40b335bb0453b866ff735c772666ec1af4a8563183Ying Wangif [ ! -r "$libdir/$jarfile" ]; then
41b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    # set dx.jar location for the SDK case
42b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    libdir=`dirname "$progdir"`/platform-tools/lib
43b335bb0453b866ff735c772666ec1af4a8563183Ying Wangfi
44b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
45b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
46b335bb0453b866ff735c772666ec1af4a8563183Ying Wangif [ ! -r "$libdir/$jarfile" ]; then
47b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    # set dx.jar location for the Android tree case
48b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    libdir=`dirname "$progdir"`/framework
49b335bb0453b866ff735c772666ec1af4a8563183Ying Wangfi
50b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
51b335bb0453b866ff735c772666ec1af4a8563183Ying Wangif [ ! -r "$libdir/$jarfile" ]; then
52b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    echo `basename "$prog"`": can't find $jarfile"
53b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    exit 1
54b335bb0453b866ff735c772666ec1af4a8563183Ying Wangfi
55b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
56b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# By default, give dx a max heap size of 1 gig. This can be overridden
57b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# by using a "-J" option (see below).
58b335bb0453b866ff735c772666ec1af4a8563183Ying WangdefaultMx="-Xmx1024M"
59b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
60b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# The following will extract any initial parameters of the form
61b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# "-J<stuff>" from the command line and pass them to the Java
62b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# invocation (instead of to dx). This makes it possible for you to add
63b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# a command-line parameter such as "-JXmx256M" in your scripts, for
64b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# example. "java" (with no args) and "java -X" give a summary of
65b335bb0453b866ff735c772666ec1af4a8563183Ying Wang# available options.
66b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
67b335bb0453b866ff735c772666ec1af4a8563183Ying WangjavaOpts=""
68b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
69b335bb0453b866ff735c772666ec1af4a8563183Ying Wangwhile expr "x$1" : 'x-J' >/dev/null; do
70b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    opt=`expr "x$1" : 'x-J\(.*\)'`
71b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    javaOpts="${javaOpts} -${opt}"
72b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    if expr "x${opt}" : "xXmx[0-9]" >/dev/null; then
73b335bb0453b866ff735c772666ec1af4a8563183Ying Wang        defaultMx="no"
74b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    fi
75b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    shift
76b335bb0453b866ff735c772666ec1af4a8563183Ying Wangdone
77b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
78b335bb0453b866ff735c772666ec1af4a8563183Ying Wangif [ "${defaultMx}" != "no" ]; then
79b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    javaOpts="${javaOpts} ${defaultMx}"
80b335bb0453b866ff735c772666ec1af4a8563183Ying Wangfi
81b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
82b335bb0453b866ff735c772666ec1af4a8563183Ying Wangif [ "$OSTYPE" = "cygwin" ]; then
83b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    # For Cygwin, convert the jarfile path into native Windows style.
84b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    jarpath=`cygpath -w "$libdir/$jarfile"`
85b335bb0453b866ff735c772666ec1af4a8563183Ying Wangelse
86b335bb0453b866ff735c772666ec1af4a8563183Ying Wang    jarpath="$libdir/$jarfile"
87b335bb0453b866ff735c772666ec1af4a8563183Ying Wangfi
88b335bb0453b866ff735c772666ec1af4a8563183Ying Wang
89b335bb0453b866ff735c772666ec1af4a8563183Ying Wangexec java $javaOpts -jar "$jarpath" "$@"
90