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