Daniel Malea | 094881f | 2011-12-14 17:39:16 -0500 | [diff] [blame] | 1 | #!/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 | |
| 19 | HELP=no |
| 20 | VERBOSE=no |
| 21 | MINSDK=1 |
| 22 | TARGET=1 |
| 23 | NAME="" |
| 24 | OUT_DIR= |
| 25 | ACTIVITY="" |
| 26 | PACKAGE="" |
| 27 | SDK="" |
| 28 | TESTCASE_PATH="" |
| 29 | DRIVER="" |
| 30 | |
| 31 | check_param () |
| 32 | { |
| 33 | if [ -z "$2" ]; then |
| 34 | echo "ERROR: Missing parameter after option '$1'" |
| 35 | exit 1 |
| 36 | fi |
| 37 | } |
| 38 | |
| 39 | check_required_param() |
| 40 | { |
| 41 | if [ -z "$1" ]; then |
| 42 | echo "ERROR: Missing required parameter $2" |
| 43 | exit 1 |
| 44 | fi |
| 45 | } |
| 46 | |
| 47 | run () |
| 48 | { |
| 49 | if [ "$VERBOSE" = "yes" ] ; then |
| 50 | echo "## COMMAND: $@" |
| 51 | fi |
| 52 | $@ 2>&1 |
| 53 | } |
| 54 | |
| 55 | process_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 | |
| 63 | while [ -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 |
| 121 | done |
| 122 | |
| 123 | if [ "$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 |
| 143 | fi |
| 144 | |
| 145 | # Verify required parameters are non-empty |
| 146 | check_required_param "$SDK" "--sdk" |
| 147 | check_required_param "$OUT_DIR" "--out" |
| 148 | check_required_param "$TESTCASE_PATH" "--testcase" |
| 149 | check_required_param "$DRIVER" "--driver" |
| 150 | |
| 151 | # Compute name of testcase |
| 152 | TESTCASE=`basename $TESTCASE_PATH .rs` |
| 153 | |
| 154 | # Compute activity, appname, and java package, if not specified via parameters |
| 155 | if [ -z "$ACTIVITY" ]; then |
| 156 | ACTIVITY="$TESTCASE"; |
| 157 | fi |
| 158 | |
| 159 | if [ -z "$NAME" ]; then |
| 160 | NAME="$ACTIVITY" |
| 161 | fi |
| 162 | |
| 163 | if [ -z "$PACKAGE" ]; then |
| 164 | PACKAGE=com.android.test.rsdebug.$TESTCASE |
| 165 | fi |
| 166 | |
| 167 | # Create the project |
| 168 | run $SDK/tools/android create project --target $TARGET --name $NAME --path $OUT_DIR --activity $ACTIVITY --package $PACKAGE |
| 169 | |
| 170 | if [ $? != 0 ] ; then |
| 171 | echo "ERROR: Could not create Android project." |
| 172 | echo " Check parameters and try again." |
| 173 | exit 1 |
| 174 | fi |
| 175 | |
| 176 | # Compute name of destination source directory |
| 177 | DEST_SRC_DIR=$OUT_DIR/src/`echo $PACKAGE | sed 's/\./\//g'` |
| 178 | |
| 179 | if [ ! -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 |
| 187 | fi |
| 188 | |
| 189 | echo "Copying driver template from $DRIVER -> $DEST_SRC_DIR" |
| 190 | if [ ! -d "$DEST_SRC_DIR" ]; then |
| 191 | echo "Error, destination directory does not exist: $DEST_SRC_DIR"; |
| 192 | exit 1; |
| 193 | fi |
| 194 | echo "Performing template substitutions:" |
| 195 | echo " %ACTIVITY% ==> $ACTIVITY" |
| 196 | echo " %PACKAGE% ==> $PACKAGE" |
| 197 | echo " %TESTCASE% ==> $TESTCASE" |
| 198 | echo " %MINSDK% ==> $MINSDK" |
| 199 | SUBST_PARAMS="$ACTIVITY $PACKAGE $TESTCASE $MINSDK" |
| 200 | |
| 201 | # If it exists, use contents of driver-common directory to seed |
| 202 | # the testcase project |
| 203 | DRIVER_COMMON="`dirname $TESTCASE_PATH`/driver-common" |
| 204 | if [ -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 |
| 217 | fi |
| 218 | |
| 219 | # Copy Java source to project directory. |
| 220 | ls $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 |
| 224 | done; |
| 225 | |
| 226 | # Copy AndroidManifest.xml override, if it exists |
| 227 | OVERRIDE_MANIFEST="$DRIVER/AndroidManifest.xml" |
| 228 | if [ -e $OVERRIDE_MANIFEST ]; then |
| 229 | process_template $OVERRIDE_MANIFEST $OUT_DIR/AndroidManifest.xml $SUBST_PARAMS |
| 230 | fi |
| 231 | |
| 232 | # Copy RS testcase to project directory. |
| 233 | TESTCASE_DEST=$DEST_SRC_DIR/`basename $TESTCASE_PATH` |
| 234 | process_template $TESTCASE_PATH $TESTCASE_DEST $SUBST_PARAMS |
| 235 | |
| 236 | # Buid signed and aligned apk |
| 237 | cd $OUT_DIR |
| 238 | run ant clean debug install |
| 239 | |
| 240 | if [ $? != 0 ] ; then |
| 241 | echo "ERROR: Apk build and install failed" |
| 242 | exit 1 |
| 243 | fi |
| 244 | |
| 245 | exit 0 |