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