blob: 0f0d541fd44f88b701f11debec86a05888fda6ed [file] [log] [blame]
Daniel Malea094881f2011-12-14 17:39:16 -05001#!/bin/bash -e
2
3# Copyright 2012, The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17# Creates and builds projects from a RenderScript testcase and a set of Java templates
18
19HELP=no
20VERBOSE=no
21MINSDK=1
22TARGET=1
23NAME=""
24OUT_DIR=
25ACTIVITY=""
26PACKAGE=""
27SDK=""
28TESTCASE_PATH=""
29DRIVER=""
30
31check_param ()
32{
33 if [ -z "$2" ]; then
34 echo "ERROR: Missing parameter after option '$1'"
35 exit 1
36 fi
37}
38
39check_required_param()
40{
41 if [ -z "$1" ]; then
42 echo "ERROR: Missing required parameter $2"
43 exit 1
44 fi
45}
46
47run ()
48{
49 if [ "$VERBOSE" = "yes" ] ; then
50 echo "## COMMAND: $@"
51 fi
52 $@ 2>&1
53}
54
55process_template()
56{
57 src=$1
58 dest=$2
59 sed -e "s/%ACTIVITY%/$3/g" -e "s/%PACKAGE%/$4/g" -e "s/%TESTCASE%/$5/g" -e "s/%MINSDK%/$6/g" < $src > $dest;
60 echo "processed $src ==> $dest"
61}
62
63while [ -n "$1" ]; do
64 opt="$1"
65 case "$opt" in
66 --help|-h|-\?)
67 HELP=yes
68 ;;
69 --verbose|-v)
70 VERBOSE=yes
71 ;;
72 --sdk)
73 check_param $1 $2
74 SDK="$2"
75 ;;
76 --name)
77 check_param $1 $2
78 NAME="$2"
79 ;;
80 --out)
81 check_param $1 $2
82 OUT_DIR="$2"
83 ;;
84 --activity)
85 check_param $1 $2
86 ACTIVITY="$2"
87 ;;
88 --package)
89 check_param $1 $2
90 PACKAGE="$2"
91 ;;
92 --minsdk)
93 check_param $1 $2
94 MINSDK="$2"
95 ;;
96 --target)
97 check_param $1 $2
98 TARGET="$2"
99 ;;
100 --testcase)
101 check_param $1 $2
102 TESTCASE_PATH="$2"
103 ;;
104 --driver)
105 check_param $1 $2
106 DRIVER="${2%/}"
107 ;;
108 -*) # unknown options
109 echo "ERROR: Unknown option '$opt', use --help for list of valid ones."
110 exit 1
111 ;;
112 *) # Simply record parameter
113 if [ -z "$PARAMETERS" ] ; then
114 PARAMETERS="$opt"
115 else
116 PARAMETERS="$PARAMETERS $opt"
117 fi
118 ;;
119 esac
120 shift
121done
122
123if [ "$HELP" = "yes" ] ; then
124 echo "Usage: $PROGNAME [options]"
125 echo ""
126 echo "Build a test project from a RS testcase and a java driver template."
127 echo ""
128 echo "Required Parameters:"
129 echo " --sdk Location of Android SDK installation"
130 echo " --out <path> Location of your project directory"
131 echo " --testcase <name> The .rs testcase file with which to build the project"
132 echo " --driver <name> The java template directory with which to build the project"
133 echo ""
134 echo "Optional Parameters (reasonable defaults are used if not specified)"
135 echo " --activity <name> Name for your default Activity class"
136 echo " --package <name> Package namespace for your project"
137 echo " --target <name> Android build target. Execute 'android list targets' to list available targets and their ID's."
138 echo " --minsdk <name> minSdkVersion attribute to embed in AndroidManifest.xml of test project."
139 echo " --help|-h|-? Print this help"
140 echo " --verbose|-v Enable verbose mode"
141 echo ""
142 exit 0
143fi
144
145# Verify required parameters are non-empty
146check_required_param "$SDK" "--sdk"
147check_required_param "$OUT_DIR" "--out"
148check_required_param "$TESTCASE_PATH" "--testcase"
149check_required_param "$DRIVER" "--driver"
150
151# Compute name of testcase
152TESTCASE=`basename $TESTCASE_PATH .rs`
153
154# Compute activity, appname, and java package, if not specified via parameters
155if [ -z "$ACTIVITY" ]; then
156 ACTIVITY="$TESTCASE";
157fi
158
159if [ -z "$NAME" ]; then
160 NAME="$ACTIVITY"
161fi
162
163if [ -z "$PACKAGE" ]; then
164 PACKAGE=com.android.test.rsdebug.$TESTCASE
165fi
166
167# Create the project
168run $SDK/tools/android create project --target $TARGET --name $NAME --path $OUT_DIR --activity $ACTIVITY --package $PACKAGE
169
170if [ $? != 0 ] ; then
171 echo "ERROR: Could not create Android project."
172 echo " Check parameters and try again."
173 exit 1
174fi
175
176# Compute name of destination source directory
177DEST_SRC_DIR=$OUT_DIR/src/`echo $PACKAGE | sed 's/\./\//g'`
178
179if [ ! -d "$DRIVER" ]; then
180 # If driver directory does not exist, try to fix it up by searching the
181 # testcase directory as well
182 DRIVER=`dirname $TESTCASE_PATH`/"$DRIVER"
183 if [ ! -d $DRIVER ]; then
184 echo "unable to find driver in $DRIVER, please check --driver"
185 exit 1;
186 fi
187fi
188
189echo "Copying driver template from $DRIVER -> $DEST_SRC_DIR"
190if [ ! -d "$DEST_SRC_DIR" ]; then
191 echo "Error, destination directory does not exist: $DEST_SRC_DIR";
192 exit 1;
193fi
194echo "Performing template substitutions:"
195echo " %ACTIVITY% ==> $ACTIVITY"
196echo " %PACKAGE% ==> $PACKAGE"
197echo " %TESTCASE% ==> $TESTCASE"
198echo " %MINSDK% ==> $MINSDK"
199SUBST_PARAMS="$ACTIVITY $PACKAGE $TESTCASE $MINSDK"
200
201# If it exists, use contents of driver-common directory to seed
202# the testcase project
203DRIVER_COMMON="`dirname $TESTCASE_PATH`/driver-common"
204if [ -d $DRIVER_COMMON ]; then
205 echo "Found common driver directory: $DRIVER_COMMON"
206 ls $DRIVER_COMMON/SRC/*.java.template | while read src; do
207 SRC_BASENAME=`basename $src .java.template`;
208 dest=$DEST_SRC_DIR/`echo $SRC_BASENAME | sed "s/ACTIVITY/$ACTIVITY/g"`.java
209 process_template $src $dest $SUBST_PARAMS
210 done;
211
212 # Copy AndroidManifest.xml
213 COMMON_MANIFEST="$DRIVER_COMMON/AndroidManifest.xml"
214 if [ -e $COMMON_MANIFEST ]; then
215 process_template $COMMON_MANIFEST $OUT_DIR/AndroidManifest.xml $SUBST_PARAMS
216 fi
217fi
218
219# Copy Java source to project directory.
220ls $DRIVER/*.java.template | while read src; do
221 SRC_BASENAME=`basename $src .java.template`
222 dest=$DEST_SRC_DIR/`echo $SRC_BASENAME | sed "s/ACTIVITY/$ACTIVITY/g"`.java
223 process_template $src $dest $SUBST_PARAMS
224done;
225
226# Copy AndroidManifest.xml override, if it exists
227OVERRIDE_MANIFEST="$DRIVER/AndroidManifest.xml"
228if [ -e $OVERRIDE_MANIFEST ]; then
229 process_template $OVERRIDE_MANIFEST $OUT_DIR/AndroidManifest.xml $SUBST_PARAMS
230fi
231
232# Copy RS testcase to project directory.
233TESTCASE_DEST=$DEST_SRC_DIR/`basename $TESTCASE_PATH`
234process_template $TESTCASE_PATH $TESTCASE_DEST $SUBST_PARAMS
235
236# Buid signed and aligned apk
237cd $OUT_DIR
238run ant clean debug install
239
240if [ $? != 0 ] ; then
241 echo "ERROR: Apk build and install failed"
242 exit 1
243fi
244
245exit 0