123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- #!/bin/bash -e
- # Copyright 2012, The Android Open Source Project
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- # Creates and builds projects from a RenderScript testcase and a set of Java templates
- HELP=no
- VERBOSE=no
- MINSDK=1
- TARGET=1
- NAME=""
- OUT_DIR=
- ACTIVITY=""
- PACKAGE=""
- SDK=""
- TESTCASE_PATH=""
- DRIVER=""
- check_param ()
- {
- if [ -z "$2" ]; then
- echo "ERROR: Missing parameter after option '$1'"
- exit 1
- fi
- }
- check_required_param()
- {
- if [ -z "$1" ]; then
- echo "ERROR: Missing required parameter $2"
- exit 1
- fi
- }
- run ()
- {
- if [ "$VERBOSE" = "yes" ] ; then
- echo "## COMMAND: $@"
- fi
- $@ 2>&1
- }
- process_template()
- {
- src=$1
- dest=$2
- sed -e "s/%ACTIVITY%/$3/g" -e "s/%PACKAGE%/$4/g" -e "s/%TESTCASE%/$5/g" -e "s/%MINSDK%/$6/g" < $src > $dest;
- echo "processed $src ==> $dest"
- }
- while [ -n "$1" ]; do
- opt="$1"
- case "$opt" in
- --help|-h|-\?)
- HELP=yes
- ;;
- --verbose|-v)
- VERBOSE=yes
- ;;
- --sdk)
- check_param $1 $2
- SDK="$2"
- ;;
- --name)
- check_param $1 $2
- NAME="$2"
- ;;
- --out)
- check_param $1 $2
- OUT_DIR="$2"
- ;;
- --activity)
- check_param $1 $2
- ACTIVITY="$2"
- ;;
- --package)
- check_param $1 $2
- PACKAGE="$2"
- ;;
- --minsdk)
- check_param $1 $2
- MINSDK="$2"
- ;;
- --target)
- check_param $1 $2
- TARGET="$2"
- ;;
- --testcase)
- check_param $1 $2
- TESTCASE_PATH="$2"
- ;;
- --driver)
- check_param $1 $2
- DRIVER="${2%/}"
- ;;
- -*) # unknown options
- echo "ERROR: Unknown option '$opt', use --help for list of valid ones."
- exit 1
- ;;
- *) # Simply record parameter
- if [ -z "$PARAMETERS" ] ; then
- PARAMETERS="$opt"
- else
- PARAMETERS="$PARAMETERS $opt"
- fi
- ;;
- esac
- shift
- done
- if [ "$HELP" = "yes" ] ; then
- echo "Usage: $PROGNAME [options]"
- echo ""
- echo "Build a test project from a RS testcase and a java driver template."
- echo ""
- echo "Required Parameters:"
- echo " --sdk Location of Android SDK installation"
- echo " --out <path> Location of your project directory"
- echo " --testcase <name> The .rs testcase file with which to build the project"
- echo " --driver <name> The java template directory with which to build the project"
- echo ""
- echo "Optional Parameters (reasonable defaults are used if not specified)"
- echo " --activity <name> Name for your default Activity class"
- echo " --package <name> Package namespace for your project"
- echo " --target <name> Android build target. Execute 'android list targets' to list available targets and their ID's."
- echo " --minsdk <name> minSdkVersion attribute to embed in AndroidManifest.xml of test project."
- echo " --help|-h|-? Print this help"
- echo " --verbose|-v Enable verbose mode"
- echo ""
- exit 0
- fi
- # Verify required parameters are non-empty
- check_required_param "$SDK" "--sdk"
- check_required_param "$OUT_DIR" "--out"
- check_required_param "$TESTCASE_PATH" "--testcase"
- check_required_param "$DRIVER" "--driver"
- # Compute name of testcase
- TESTCASE=`basename $TESTCASE_PATH .rs`
- # Compute activity, appname, and java package, if not specified via parameters
- if [ -z "$ACTIVITY" ]; then
- ACTIVITY="$TESTCASE";
- fi
- if [ -z "$NAME" ]; then
- NAME="$ACTIVITY"
- fi
- if [ -z "$PACKAGE" ]; then
- PACKAGE=com.android.test.rsdebug.$TESTCASE
- fi
- # Create the project
- run $SDK/tools/android create project --target $TARGET --name $NAME --path $OUT_DIR --activity $ACTIVITY --package $PACKAGE
- if [ $? != 0 ] ; then
- echo "ERROR: Could not create Android project."
- echo " Check parameters and try again."
- exit 1
- fi
- # Compute name of destination source directory
- DEST_SRC_DIR=$OUT_DIR/src/`echo $PACKAGE | sed 's/\./\//g'`
- if [ ! -d "$DRIVER" ]; then
- # If driver directory does not exist, try to fix it up by searching the
- # testcase directory as well
- DRIVER=`dirname $TESTCASE_PATH`/"$DRIVER"
- if [ ! -d $DRIVER ]; then
- echo "unable to find driver in $DRIVER, please check --driver"
- exit 1;
- fi
- fi
- echo "Copying driver template from $DRIVER -> $DEST_SRC_DIR"
- if [ ! -d "$DEST_SRC_DIR" ]; then
- echo "Error, destination directory does not exist: $DEST_SRC_DIR";
- exit 1;
- fi
- echo "Performing template substitutions:"
- echo " %ACTIVITY% ==> $ACTIVITY"
- echo " %PACKAGE% ==> $PACKAGE"
- echo " %TESTCASE% ==> $TESTCASE"
- echo " %MINSDK% ==> $MINSDK"
- SUBST_PARAMS="$ACTIVITY $PACKAGE $TESTCASE $MINSDK"
- # If it exists, use contents of driver-common directory to seed
- # the testcase project
- DRIVER_COMMON="`dirname $TESTCASE_PATH`/driver-common"
- if [ -d $DRIVER_COMMON ]; then
- echo "Found common driver directory: $DRIVER_COMMON"
- ls $DRIVER_COMMON/SRC/*.java.template | while read src; do
- SRC_BASENAME=`basename $src .java.template`;
- dest=$DEST_SRC_DIR/`echo $SRC_BASENAME | sed "s/ACTIVITY/$ACTIVITY/g"`.java
- process_template $src $dest $SUBST_PARAMS
- done;
- # Copy AndroidManifest.xml
- COMMON_MANIFEST="$DRIVER_COMMON/AndroidManifest.xml"
- if [ -e $COMMON_MANIFEST ]; then
- process_template $COMMON_MANIFEST $OUT_DIR/AndroidManifest.xml $SUBST_PARAMS
- fi
- fi
- # Copy Java source to project directory.
- ls $DRIVER/*.java.template | while read src; do
- SRC_BASENAME=`basename $src .java.template`
- dest=$DEST_SRC_DIR/`echo $SRC_BASENAME | sed "s/ACTIVITY/$ACTIVITY/g"`.java
- process_template $src $dest $SUBST_PARAMS
- done;
- # Copy AndroidManifest.xml override, if it exists
- OVERRIDE_MANIFEST="$DRIVER/AndroidManifest.xml"
- if [ -e $OVERRIDE_MANIFEST ]; then
- process_template $OVERRIDE_MANIFEST $OUT_DIR/AndroidManifest.xml $SUBST_PARAMS
- fi
- # Copy RS testcase to project directory.
- TESTCASE_DEST=$DEST_SRC_DIR/`basename $TESTCASE_PATH`
- process_template $TESTCASE_PATH $TESTCASE_DEST $SUBST_PARAMS
- # Buid signed and aligned apk
- cd $OUT_DIR
- run ant clean debug install
- if [ $? != 0 ] ; then
- echo "ERROR: Apk build and install failed"
- exit 1
- fi
- exit 0
|