- lunch: lunch <product_name>-<build_variant>
- tapas: tapas [<App1> <App2> ...] [arm|x86|mips|armv5|arm64|x86_64|mips64] [eng|userdebug|user]
- croot: Changes directory to the top of the tree.
-- cout: Changes directory to out.
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory, but not their dependencies.
- mmm: Builds all of the modules in the supplied directories, but not their dependencies.
To limit the modules being built use the syntax: mmm dir/:target1,target2.
- mma: Builds all of the modules in the current directory, and their dependencies.
- mmma: Builds all of the modules in the supplied directories, and their dependencies.
-- mmp: Builds all of the modules in the current directory and pushes them to the device.
-- mmmp: Builds all of the modules in the supplied directories and pushes them to the device.
-- mms: Short circuit builder. Quickly re-build the kernel, rootfs, boot and system images
- without deep dependencies. Requires the full build to have run before.
- provision: Flash device with all required partitions. Options will be passed on to fastboot.
- cgrep: Greps on all local C/C++ files.
- ggrep: Greps on all local Gradle files.
- sepgrep: Greps on all local sepolicy files.
- sgrep: Greps on all local source files.
- godir: Go to the directory containing a file.
-- cmremote: Add git remote for CM Gerrit Review
-- cmgerrit: A Git wrapper that fetches/pushes patch from/to CM Gerrit Review
-- aospremote: Add git remote for matching AOSP repository
-- cafremote: Add git remote for matching CodeAurora repository.
-- cmrebase: Rebase a Gerrit change and push it again
-- mka: Builds using SCHED_BATCH on all processors
-- mkap: Builds the module(s) using mka and pushes them to the device.
-- cmka: Cleans and builds using mka.
-- repolastsync: Prints date and time of last repo sync.
-- reposync: Parallel repo sync using ionice and SCHED_BATCH
-- repopick: Utility to fetch changes from Gerrit.
-- installboot: Installs a boot.img to the connected device.
-- installrecovery: Installs a recovery.img to the connected device.
-- repodiff: Diff 2 different branches or tags within the same repo
+
+EOF
+
+ __print_cm_functions_help
+
+cat <<EOF
Environment options:
- SANITIZE_HOST: Set to 'true' to use ASAN for all host modules. Note that
Look at the source to view more functions. The complete list is:
EOF
T=$(gettop)
- for i in `cat $T/build/envsetup.sh | sed -n "/^[[:blank:]]*function /s/function \([a-z_]*\).*/\1/p" | sort | uniq`; do
+ for i in `cat $T/build/envsetup.sh $T/vendor/cm/build/envsetup.sh | sed -n "/^[[:blank:]]*function /s/function \([a-z_]*\).*/\1/p" | sort | uniq`; do
echo "$i"
done | column
}
{
T=$(gettop)
# Grep out the variable names from the script.
- cached_vars=`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`
- cached_abs_vars=`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_abs_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`
+ cached_vars=`cat $T/build/envsetup.sh $T/vendor/cm/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`
+ cached_abs_vars=`cat $T/build/envsetup.sh $T/vendor/cm/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_abs_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`
# Call the build system to dump the "<val>=<value>" pairs as a shell script.
- build_dicts_script=`\cd $T; CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \
+ build_dicts_script=`\cd $T; export CALLED_FROM_SETUP=true; export BUILD_SYSTEM=build/core; \
command make --no-print-directory -f build/core/config.mk \
dump-many-vars \
DUMP_MANY_VARS="$cached_vars" \
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
return
fi
- (\cd $T; CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \
+ (\cd $T; export CALLED_FROM_SETUP=true; export BUILD_SYSTEM=build/core; \
command make --no-print-directory -f build/core/config.mk dumpvar-abs-$1)
}
echo "Couldn't locate the top of the tree. Try setting TOP." >&2
return
fi
- (\cd $T; CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \
+ (\cd $T; export CALLED_FROM_SETUP=true; export BUILD_SYSTEM=build/core; \
command make --no-print-directory -f build/core/config.mk dumpvar-$1)
}
local uname=$(uname)
echo
echo "You're building on" $uname
- if [ "$(uname)" = "Darwin" ] ; then
- echo " (ohai, koush!)"
- fi
echo
if [ "z${CM_DEVICES_ONLY}" != "z" ]; then
echo "Breakfast menu... pick a combo:"
echo
}
-function brunch()
-{
- breakfast $*
- if [ $? -eq 0 ]; then
- mka bacon
- else
- echo "No such item in brunch menu. Try 'breakfast'"
- return 1
- fi
- return $?
-}
-
-function breakfast()
-{
- target=$1
- local variant=$2
- CM_DEVICES_ONLY="true"
- unset LUNCH_MENU_CHOICES
- add_lunch_combo full-eng
- for f in `/bin/ls vendor/cm/vendorsetup.sh 2> /dev/null`
- do
- echo "including $f"
- . $f
- done
- unset f
-
- if [ $# -eq 0 ]; then
- # No arguments, so let's have the full menu
- lunch
- else
- echo "z$target" | grep -q "-"
- if [ $? -eq 0 ]; then
- # A buildtype was specified, assume a full device name
- lunch $target
- else
- # This is probably just the CM model name
- if [ -z "$variant" ]; then
- variant="userdebug"
- fi
- lunch cm_$target-$variant
- fi
- fi
- return $?
-}
-
-alias bib=breakfast
-
function lunch()
{
local answer
fi
local product=$(echo -n $selection | sed -e "s/-.*$//")
- TARGET_PRODUCT=$product \
- TARGET_BUILD_VARIANT=$variant \
- build_build_var_cache
+ check_product $product
if [ $? -ne 0 ]
then
# if we can't find a product, try to grab it off the CM github
T=$(gettop)
pushd $T > /dev/null
- build/tools/roomservice.py $product
+ vendor/cm/build/tools/roomservice.py $product
popd > /dev/null
check_product $product
else
- build/tools/roomservice.py $product true
+ vendor/cm/build/tools/roomservice.py $product true
fi
+ TARGET_PRODUCT=$product \
+ TARGET_BUILD_VARIANT=$variant \
+ build_build_var_cache
+
if [ $? -ne 0 ]
then
echo
destroy_build_var_cache
}
-function eat()
-{
- if [ "$OUT" ] ; then
- MODVERSION=$(get_build_var CM_VERSION)
- ZIPFILE=cm-$MODVERSION.zip
- ZIPPATH=$OUT/$ZIPFILE
- if [ ! -f $ZIPPATH ] ; then
- echo "Nothing to eat"
- return 1
- fi
- adb start-server # Prevent unexpected starting server message from adb get-state in the next line
- if [ $(adb get-state) != device -a $(adb shell test -e /sbin/recovery 2> /dev/null; echo $?) != 0 ] ; then
- echo "No device is online. Waiting for one..."
- echo "Please connect USB and/or enable USB debugging"
- until [ $(adb get-state) = device -o $(adb shell test -e /sbin/recovery 2> /dev/null; echo $?) = 0 ];do
- sleep 1
- done
- echo "Device Found.."
- fi
- if (adb shell getprop ro.cm.device | grep -q "$CM_BUILD");
- then
- # if adbd isn't root we can't write to /cache/recovery/
- adb root
- sleep 1
- adb wait-for-device
- cat << EOF > /tmp/command
---sideload_auto_reboot
-EOF
- if adb push /tmp/command /cache/recovery/ ; then
- echo "Rebooting into recovery for sideload installation"
- adb reboot recovery
- adb wait-for-sideload
- adb sideload $ZIPPATH
- fi
- rm /tmp/command
- else
- echo "Nothing to eat"
- return 1
- fi
- return $?
- else
- echo "The connected device does not appear to be $CM_BUILD, run away!"
- fi
-}
-
-function omnom
-{
- brunch $*
- eat
-}
-
function gettop
{
local TOPFILE=build/core/envsetup.mk
local M=$(findmakefile)
local MODULES=
local GET_INSTALL_PATH=
- local ARGS=
# Remove the path to top as the makefilepath needs to be relative
local M=`echo $M|sed 's:'$T'/::'`
if [ ! "$T" ]; then
done
if [ -n "$GET_INSTALL_PATH" ]; then
MODULES=
- ARGS=GET-INSTALL-PATH
+ # set all args to 'GET-INSTALL-PATH'
+ set -- GET-INSTALL-PATH
else
MODULES=all_modules
- ARGS=$@
fi
- ONE_SHOT_MAKEFILE=$M $DRV make -C $T -f build/core/main.mk $MODULES $ARGS
+ ONE_SHOT_MAKEFILE=$M $DRV make -C $T -f build/core/main.mk $MODULES "$@"
fi
fi
}
local ARGS=
local DIR TO_CHOP
local GET_INSTALL_PATH=
- local DASH_ARGS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^-.*$/')
- local DIRS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^[^-].*$/')
+
+ if [ "$(__detect_shell)" = "zsh" ]; then
+ set -lA DASH_ARGS $(echo "$@" | awk -v RS=" " -v ORS=" " '/^-.*$/')
+ set -lA DIRS $(echo "$@" | awk -v RS=" " -v ORS=" " '/^[^-].*$/')
+ else
+ local DASH_ARGS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^-.*$/')
+ local DIRS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^[^-].*$/')
+ fi
+
for DIR in $DIRS ; do
MODULES=`echo $DIR | sed -n -e 's/.*:\(.*$\)/\1/p' | sed 's/,/ /'`
if [ "$MODULES" = "" ]; then
local T=$(gettop)
local DRV=$(getdriver $T)
if [ "$T" ]; then
- local DASH_ARGS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^-.*$/')
- local DIRS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^[^-].*$/')
+ if [ "$(__detect_shell)" = "zsh" ]; then
+ set -lA DASH_ARGS $(echo "$@" | awk -v RS=" " -v ORS=" " '/^-.*$/')
+ set -lA DIRS $(echo "$@" | awk -v RS=" " -v ORS=" " '/^[^-].*$/')
+ else
+ local DASH_ARGS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^-.*$/')
+ local DIRS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^[^-].*$/')
+ fi
local MY_PWD=`PWD= /bin/pwd`
if [ "$MY_PWD" = "$T" ]; then
MY_PWD=
fi
}
-function cout()
-{
- if [ "$OUT" ]; then
- cd $OUT
- else
- echo "Couldn't locate out directory. Try setting OUT."
- fi
-}
-
function cproj()
{
TOPFILE=build/core/envsetup.mk
fi
}
-function dddclient()
-{
- local OUT_ROOT=$(get_abs_build_var PRODUCT_OUT)
- local OUT_SYMBOLS=$(get_abs_build_var TARGET_OUT_UNSTRIPPED)
- local OUT_SO_SYMBOLS=$(get_abs_build_var TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED)
- local OUT_VENDOR_SO_SYMBOLS=$(get_abs_build_var TARGET_OUT_VENDOR_SHARED_LIBRARIES_UNSTRIPPED)
- local OUT_EXE_SYMBOLS=$(get_symbols_directory)
- local PREBUILTS=$(get_abs_build_var ANDROID_PREBUILTS)
- local ARCH=$(get_build_var TARGET_ARCH)
- local GDB
- case "$ARCH" in
- arm) GDB=arm-linux-androideabi-gdb;;
- arm64) GDB=arm-linux-androideabi-gdb; GDB64=aarch64-linux-android-gdb;;
- mips|mips64) GDB=mips64el-linux-android-gdb;;
- x86) GDB=x86_64-linux-android-gdb;;
- x86_64) GDB=x86_64-linux-android-gdb;;
- *) echo "Unknown arch $ARCH"; return 1;;
- esac
-
- if [ "$OUT_ROOT" -a "$PREBUILTS" ]; then
- local EXE="$1"
- if [ "$EXE" ] ; then
- EXE=$1
- if [[ $EXE =~ ^[^/].* ]] ; then
- EXE="system/bin/"$EXE
- fi
- else
- EXE="app_process"
- fi
-
- local PORT="$2"
- if [ "$PORT" ] ; then
- PORT=$2
- else
- PORT=":5039"
- fi
-
- local PID="$3"
- if [ "$PID" ] ; then
- if [[ ! "$PID" =~ ^[0-9]+$ ]] ; then
- PID=`pid $3`
- if [[ ! "$PID" =~ ^[0-9]+$ ]] ; then
- # that likely didn't work because of returning multiple processes
- # try again, filtering by root processes (don't contain colon)
- PID=`adb shell ps | \grep $3 | \grep -v ":" | awk '{print $2}'`
- if [[ ! "$PID" =~ ^[0-9]+$ ]]
- then
- echo "Couldn't resolve '$3' to single PID"
- return 1
- else
- echo ""
- echo "WARNING: multiple processes matching '$3' observed, using root process"
- echo ""
- fi
- fi
- fi
- adb forward "tcp$PORT" "tcp$PORT"
- local USE64BIT="$(is64bit $PID)"
- adb shell gdbserver$USE64BIT $PORT --attach $PID &
- sleep 2
- else
- echo ""
- echo "If you haven't done so already, do this first on the device:"
- echo " gdbserver $PORT /system/bin/$EXE"
- echo " or"
- echo " gdbserver $PORT --attach <PID>"
- echo ""
- fi
-
- OUT_SO_SYMBOLS=$OUT_SO_SYMBOLS$USE64BIT
- OUT_VENDOR_SO_SYMBOLS=$OUT_VENDOR_SO_SYMBOLS$USE64BIT
-
- echo >|"$OUT_ROOT/gdbclient.cmds" "set solib-absolute-prefix $OUT_SYMBOLS"
- echo >>"$OUT_ROOT/gdbclient.cmds" "set solib-search-path $OUT_SO_SYMBOLS:$OUT_SO_SYMBOLS/hw:$OUT_SO_SYMBOLS/ssl/engines:$OUT_SO_SYMBOLS/drm:$OUT_SO_SYMBOLS/egl:$OUT_SO_SYMBOLS/soundfx:$OUT_VENDOR_SO_SYMBOLS:$OUT_VENDOR_SO_SYMBOLS/hw:$OUT_VENDOR_SO_SYMBOLS/egl"
- echo >>"$OUT_ROOT/gdbclient.cmds" "source $ANDROID_BUILD_TOP/development/scripts/gdb/dalvik.gdb"
- echo >>"$OUT_ROOT/gdbclient.cmds" "target remote $PORT"
- # Enable special debugging for ART processes.
- if [[ $EXE =~ (^|/)(app_process|dalvikvm)(|32|64)$ ]]; then
- echo >> "$OUT_ROOT/gdbclient.cmds" "art-on"
- fi
- echo >>"$OUT_ROOT/gdbclient.cmds" ""
-
- local WHICH_GDB=
- # 64-bit exe found
- if [ "$USE64BIT" != "" ] ; then
- WHICH_GDB=$ANDROID_TOOLCHAIN/$GDB64
- # 32-bit exe / 32-bit platform
- elif [ "$(get_build_var TARGET_2ND_ARCH)" = "" ]; then
- WHICH_GDB=$ANDROID_TOOLCHAIN/$GDB
- # 32-bit exe / 64-bit platform
- else
- WHICH_GDB=$ANDROID_TOOLCHAIN_2ND_ARCH/$GDB
- fi
-
- ddd --debugger $WHICH_GDB -x "$OUT_ROOT/gdbclient.cmds" "$OUT_EXE_SYMBOLS/$EXE"
- else
- echo "Unable to determine build system output dir."
- fi
-}
-
case `uname -s` in
Darwin)
function sgrep()
\cd $T/$pathname
}
-function cmremote()
-{
- git remote rm cmremote 2> /dev/null
- GERRIT_REMOTE=$(git config --get remote.github.projectname)
- if [ -z "$GERRIT_REMOTE" ]
- then
- echo Unable to set up the git remote, are you under a git repo?
- return 0
- fi
- CMUSER=$(git config --get review.review.cyanogenmod.org.username)
- if [ -z "$CMUSER" ]
- then
- git remote add cmremote ssh://review.cyanogenmod.org:29418/$GERRIT_REMOTE
- else
- git remote add cmremote ssh://$CMUSER@review.cyanogenmod.org:29418/$GERRIT_REMOTE
- fi
- echo You can now push to "cmremote".
-}
-
-function aospremote()
-{
- git remote rm aosp 2> /dev/null
- if [ ! -d .git ]
- then
- echo .git directory not found. Please run this from the root directory of the Android repository you wish to set up.
- fi
- PROJECT=`pwd -P | sed s#$ANDROID_BUILD_TOP/##g`
- if (echo $PROJECT | grep -qv "^device")
- then
- PFX="platform/"
- fi
- git remote add aosp https://android.googlesource.com/$PFX$PROJECT
- echo "Remote 'aosp' created"
-}
-
-function cafremote()
-{
- git remote rm caf 2> /dev/null
- if [ ! -d .git ]
- then
- echo .git directory not found. Please run this from the root directory of the Android repository you wish to set up.
- fi
- PROJECT=`pwd -P | sed s#$ANDROID_BUILD_TOP/##g`
- if (echo $PROJECT | grep -qv "^device")
- then
- PFX="platform/"
- fi
- git remote add caf git://codeaurora.org/$PFX$PROJECT
- echo "Remote 'caf' created"
-}
-
-function installboot()
-{
- if [ ! -e "$OUT/recovery/root/etc/recovery.fstab" ];
- then
- echo "No recovery.fstab found. Build recovery first."
- return 1
- fi
- if [ ! -e "$OUT/boot.img" ];
- then
- echo "No boot.img found. Run make bootimage first."
- return 1
- fi
- PARTITION=`grep "^\/boot" $OUT/recovery/root/etc/recovery.fstab | awk {'print $3'}`
- if [ -z "$PARTITION" ];
- then
- # Try for RECOVERY_FSTAB_VERSION = 2
- PARTITION=`grep "[[:space:]]\/boot[[:space:]]" $OUT/recovery/root/etc/recovery.fstab | awk {'print $1'}`
- PARTITION_TYPE=`grep "[[:space:]]\/boot[[:space:]]" $OUT/recovery/root/etc/recovery.fstab | awk {'print $3'}`
- if [ -z "$PARTITION" ];
- then
- echo "Unable to determine boot partition."
- return 1
- fi
- fi
- adb start-server
- adb wait-for-online
- adb root
- sleep 1
- adb wait-for-online shell mount /system 2>&1 > /dev/null
- adb wait-for-online remount
- if (adb shell getprop ro.cm.device | grep -q "$CM_BUILD");
- then
- adb push $OUT/boot.img /cache/
- for i in $OUT/system/lib/modules/*;
- do
- adb push $i /system/lib/modules/
- done
- adb shell dd if=/cache/boot.img of=$PARTITION
- adb shell chmod 644 /system/lib/modules/*
- echo "Installation complete."
- else
- echo "The connected device does not appear to be $CM_BUILD, run away!"
- fi
-}
-
-function installrecovery()
-{
- if [ ! -e "$OUT/recovery/root/etc/recovery.fstab" ];
- then
- echo "No recovery.fstab found. Build recovery first."
- return 1
- fi
- if [ ! -e "$OUT/recovery.img" ];
- then
- echo "No recovery.img found. Run make recoveryimage first."
- return 1
- fi
- PARTITION=`grep "^\/recovery" $OUT/recovery/root/etc/recovery.fstab | awk {'print $3'}`
- if [ -z "$PARTITION" ];
- then
- # Try for RECOVERY_FSTAB_VERSION = 2
- PARTITION=`grep "[[:space:]]\/recovery[[:space:]]" $OUT/recovery/root/etc/recovery.fstab | awk {'print $1'}`
- PARTITION_TYPE=`grep "[[:space:]]\/recovery[[:space:]]" $OUT/recovery/root/etc/recovery.fstab | awk {'print $3'}`
- if [ -z "$PARTITION" ];
- then
- echo "Unable to determine recovery partition."
- return 1
- fi
- fi
- adb start-server
- adb wait-for-online
- adb root
- sleep 1
- adb wait-for-online shell mount /system 2>&1 >> /dev/null
- adb wait-for-online remount
- if (adb shell getprop ro.cm.device | grep -q "$CM_BUILD");
- then
- adb push $OUT/recovery.img /cache/
- adb shell dd if=/cache/recovery.img of=$PARTITION
- echo "Installation complete."
- else
- echo "The connected device does not appear to be $CM_BUILD, run away!"
- fi
-}
-
-function makerecipe() {
- if [ -z "$1" ]
- then
- echo "No branch name provided."
- return 1
- fi
- cd android
- sed -i s/'default revision=.*'/'default revision="refs\/heads\/'$1'"'/ default.xml
- git commit -a -m "$1"
- cd ..
-
- repo forall -c '
-
- if [ "$REPO_REMOTE" == "github" ]
- then
- pwd
- cmremote
- git push cmremote HEAD:refs/heads/'$1'
- fi
- '
-}
-
-function cmgerrit() {
- if [ $# -eq 0 ]; then
- $FUNCNAME help
- return 1
- fi
- local user=`git config --get review.review.cyanogenmod.org.username`
- local review=`git config --get remote.github.review`
- local project=`git config --get remote.github.projectname`
- local command=$1
- shift
- case $command in
- help)
- if [ $# -eq 0 ]; then
- cat <<EOF
-Usage:
- $FUNCNAME COMMAND [OPTIONS] [CHANGE-ID[/PATCH-SET]][{@|^|~|:}ARG] [-- ARGS]
-
-Commands:
- fetch Just fetch the change as FETCH_HEAD
- help Show this help, or for a specific command
- pull Pull a change into current branch
- push Push HEAD or a local branch to Gerrit for a specific branch
-
-Any other Git commands that support refname would work as:
- git fetch URL CHANGE && git COMMAND OPTIONS FETCH_HEAD{@|^|~|:}ARG -- ARGS
-
-See '$FUNCNAME help COMMAND' for more information on a specific command.
-
-Example:
- $FUNCNAME checkout -b topic 1234/5
-works as:
- git fetch http://DOMAIN/p/PROJECT refs/changes/34/1234/5 \\
- && git checkout -b topic FETCH_HEAD
-will checkout a new branch 'topic' base on patch-set 5 of change 1234.
-Patch-set 1 will be fetched if omitted.
-EOF
- return
- fi
- case $1 in
- __cmg_*) echo "For internal use only." ;;
- changes|for)
- if [ "$FUNCNAME" = "cmgerrit" ]; then
- echo "'$FUNCNAME $1' is deprecated."
- fi
- ;;
- help) $FUNCNAME help ;;
- fetch|pull) cat <<EOF
-usage: $FUNCNAME $1 [OPTIONS] CHANGE-ID[/PATCH-SET]
-
-works as:
- git $1 OPTIONS http://DOMAIN/p/PROJECT \\
- refs/changes/HASH/CHANGE-ID/{PATCH-SET|1}
-
-Example:
- $FUNCNAME $1 1234
-will $1 patch-set 1 of change 1234
-EOF
- ;;
- push) cat <<EOF
-usage: $FUNCNAME push [OPTIONS] [LOCAL_BRANCH:]REMOTE_BRANCH
-
-works as:
- git push OPTIONS ssh://USER@DOMAIN:29418/PROJECT \\
- {LOCAL_BRANCH|HEAD}:refs/for/REMOTE_BRANCH
-
-Example:
- $FUNCNAME push fix6789:gingerbread
-will push local branch 'fix6789' to Gerrit for branch 'gingerbread'.
-HEAD will be pushed from local if omitted.
-EOF
- ;;
- *)
- $FUNCNAME __cmg_err_not_supported $1 && return
- cat <<EOF
-usage: $FUNCNAME $1 [OPTIONS] CHANGE-ID[/PATCH-SET][{@|^|~|:}ARG] [-- ARGS]
-
-works as:
- git fetch http://DOMAIN/p/PROJECT \\
- refs/changes/HASH/CHANGE-ID/{PATCH-SET|1} \\
- && git $1 OPTIONS FETCH_HEAD{@|^|~|:}ARG -- ARGS
-EOF
- ;;
- esac
- ;;
- __cmg_get_ref)
- $FUNCNAME __cmg_err_no_arg $command $# && return 1
- local change_id patchset_id hash
- case $1 in
- */*)
- change_id=${1%%/*}
- patchset_id=${1#*/}
- ;;
- *)
- change_id=$1
- patchset_id=1
- ;;
- esac
- hash=$(($change_id % 100))
- case $hash in
- [0-9]) hash="0$hash" ;;
- esac
- echo "refs/changes/$hash/$change_id/$patchset_id"
- ;;
- fetch|pull)
- $FUNCNAME __cmg_err_no_arg $command $# help && return 1
- $FUNCNAME __cmg_err_not_repo && return 1
- local change=$1
- shift
- git $command $@ http://$review/p/$project \
- $($FUNCNAME __cmg_get_ref $change) || return 1
- ;;
- push)
- $FUNCNAME __cmg_err_no_arg $command $# help && return 1
- $FUNCNAME __cmg_err_not_repo && return 1
- if [ -z "$user" ]; then
- echo >&2 "Gerrit username not found."
- return 1
- fi
- local local_branch remote_branch
- case $1 in
- *:*)
- local_branch=${1%:*}
- remote_branch=${1##*:}
- ;;
- *)
- local_branch=HEAD
- remote_branch=$1
- ;;
- esac
- shift
- git push $@ ssh://$user@$review:29418/$project \
- $local_branch:refs/for/$remote_branch || return 1
- ;;
- changes|for)
- if [ "$FUNCNAME" = "cmgerrit" ]; then
- echo >&2 "'$FUNCNAME $command' is deprecated."
- fi
- ;;
- __cmg_err_no_arg)
- if [ $# -lt 2 ]; then
- echo >&2 "'$FUNCNAME $command' missing argument."
- elif [ $2 -eq 0 ]; then
- if [ -n "$3" ]; then
- $FUNCNAME help $1
- else
- echo >&2 "'$FUNCNAME $1' missing argument."
- fi
- else
- return 1
- fi
- ;;
- __cmg_err_not_repo)
- if [ -z "$review" -o -z "$project" ]; then
- echo >&2 "Not currently in any reviewable repository."
- else
- return 1
- fi
- ;;
- __cmg_err_not_supported)
- $FUNCNAME __cmg_err_no_arg $command $# && return
- case $1 in
- #TODO: filter more git commands that don't use refname
- init|add|rm|mv|status|clone|remote|bisect|config|stash)
- echo >&2 "'$FUNCNAME $1' is not supported."
- ;;
- *) return 1 ;;
- esac
- ;;
- #TODO: other special cases?
- *)
- $FUNCNAME __cmg_err_not_supported $command && return 1
- $FUNCNAME __cmg_err_no_arg $command $# help && return 1
- $FUNCNAME __cmg_err_not_repo && return 1
- local args="$@"
- local change pre_args refs_arg post_args
- case "$args" in
- *--\ *)
- pre_args=${args%%-- *}
- post_args="-- ${args#*-- }"
- ;;
- *) pre_args="$args" ;;
- esac
- args=($pre_args)
- pre_args=
- if [ ${#args[@]} -gt 0 ]; then
- change=${args[${#args[@]}-1]}
- fi
- if [ ${#args[@]} -gt 1 ]; then
- pre_args=${args[0]}
- for ((i=1; i<${#args[@]}-1; i++)); do
- pre_args="$pre_args ${args[$i]}"
- done
- fi
- while ((1)); do
- case $change in
- ""|--)
- $FUNCNAME help $command
- return 1
- ;;
- *@*)
- if [ -z "$refs_arg" ]; then
- refs_arg="@${change#*@}"
- change=${change%%@*}
- fi
- ;;
- *~*)
- if [ -z "$refs_arg" ]; then
- refs_arg="~${change#*~}"
- change=${change%%~*}
- fi
- ;;
- *^*)
- if [ -z "$refs_arg" ]; then
- refs_arg="^${change#*^}"
- change=${change%%^*}
- fi
- ;;
- *:*)
- if [ -z "$refs_arg" ]; then
- refs_arg=":${change#*:}"
- change=${change%%:*}
- fi
- ;;
- *) break ;;
- esac
- done
- $FUNCNAME fetch $change \
- && git $command $pre_args FETCH_HEAD$refs_arg $post_args \
- || return 1
- ;;
- esac
-}
-
-function cmrebase() {
- local repo=$1
- local refs=$2
- local pwd="$(pwd)"
- local dir="$(gettop)/$repo"
-
- if [ -z $repo ] || [ -z $refs ]; then
- echo "CyanogenMod Gerrit Rebase Usage: "
- echo " cmrebase <path to project> <patch IDs on Gerrit>"
- echo " The patch IDs appear on the Gerrit commands that are offered."
- echo " They consist on a series of numbers and slashes, after the text"
- echo " refs/changes. For example, the ID in the following command is 26/8126/2"
- echo ""
- echo " git[...]ges_apps_Camera refs/changes/26/8126/2 && git cherry-pick FETCH_HEAD"
- echo ""
- return
- fi
-
- if [ ! -d $dir ]; then
- echo "Directory $dir doesn't exist in tree."
- return
- fi
- cd $dir
- repo=$(cat .git/config | grep git://github.com | awk '{ print $NF }' | sed s#git://github.com/##g)
- echo "Starting branch..."
- repo start tmprebase .
- echo "Bringing it up to date..."
- repo sync .
- echo "Fetching change..."
- git fetch "http://review.cyanogenmod.org/p/$repo" "refs/changes/$refs" && git cherry-pick FETCH_HEAD
- if [ "$?" != "0" ]; then
- echo "Error cherry-picking. Not uploading!"
- return
- fi
- echo "Uploading..."
- repo upload .
- echo "Cleaning up..."
- repo abandon tmprebase .
- cd $pwd
-}
-
-function mka() {
- local T=$(gettop)
- if [ "$T" ]; then
- case `uname -s` in
- Darwin)
- make -C $T -j `sysctl hw.ncpu|cut -d" " -f2` "$@"
- ;;
- *)
- mk_timer schedtool -B -n 1 -e ionice -n 1 make -C $T -j$(cat /proc/cpuinfo | grep "^processor" | wc -l) "$@"
- ;;
- esac
-
- else
- echo "Couldn't locate the top of the tree. Try setting TOP."
- fi
-}
-
-function cmka() {
- if [ ! -z "$1" ]; then
- for i in "$@"; do
- case $i in
- bacon|otapackage|systemimage)
- mka installclean
- mka $i
- ;;
- *)
- mka clean-$i
- mka $i
- ;;
- esac
- done
- else
- mka clean
- mka
- fi
-}
-
-function mms() {
- local T=$(gettop)
- if [ -z "$T" ]
- then
- echo "Couldn't locate the top of the tree. Try setting TOP."
- return 1
- fi
-
- case `uname -s` in
- Darwin)
- local NUM_CPUS=$(sysctl hw.ncpu|cut -d" " -f2)
- ONE_SHOT_MAKEFILE="__none__" \
- make -C $T -j $NUM_CPUS "$@"
- ;;
- *)
- local NUM_CPUS=$(cat /proc/cpuinfo | grep "^processor" | wc -l)
- ONE_SHOT_MAKEFILE="__none__" \
- mk_timer schedtool -B -n 1 -e ionice -n 1 \
- make -C $T -j $NUM_CPUS "$@"
- ;;
- esac
-}
-
-
-function repolastsync() {
- RLSPATH="$ANDROID_BUILD_TOP/.repo/.repo_fetchtimes.json"
- RLSLOCAL=$(date -d "$(stat -c %z $RLSPATH)" +"%e %b %Y, %T %Z")
- RLSUTC=$(date -d "$(stat -c %z $RLSPATH)" -u +"%e %b %Y, %T %Z")
- echo "Last repo sync: $RLSLOCAL / $RLSUTC"
-}
-
-function reposync() {
- case `uname -s` in
- Darwin)
- repo sync -j 4 "$@"
- ;;
- *)
- schedtool -B -n 1 -e ionice -n 1 `which repo` sync -j 4 "$@"
- ;;
- esac
-}
-
-function repodiff() {
- if [ -z "$*" ]; then
- echo "Usage: repodiff <ref-from> [[ref-to] [--numstat]]"
- return
- fi
- diffopts=$* repo forall -c \
- 'echo "$REPO_PATH ($REPO_REMOTE)"; git diff ${diffopts} 2>/dev/null ;'
-}
-
-# Return success if adb is up and not in recovery
-function _adb_connected {
- {
- if [[ "$(adb get-state)" == device &&
- "$(adb shell test -e /sbin/recovery; echo $?)" == 0 ]]
- then
- return 0
- fi
- } 2>/dev/null
-
- return 1
-};
-
-# Credit for color strip sed: http://goo.gl/BoIcm
-function dopush()
-{
- local func=$1
- shift
-
- adb start-server # Prevent unexpected starting server message from adb get-state in the next line
- if ! _adb_connected; then
- echo "No device is online. Waiting for one..."
- echo "Please connect USB and/or enable USB debugging"
- until _adb_connected; do
- sleep 1
- done
- echo "Device Found."
- fi
-
- if (adb shell getprop ro.cm.device | grep -q "$CM_BUILD") || [ "$FORCE_PUSH" == "true" ];
- then
- # retrieve IP and PORT info if we're using a TCP connection
- TCPIPPORT=$(adb devices | egrep '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+[^0-9]+' \
- | head -1 | awk '{print $1}')
- adb root &> /dev/null
- sleep 0.3
- if [ -n "$TCPIPPORT" ]
- then
- # adb root just killed our connection
- # so reconnect...
- adb connect "$TCPIPPORT"
- fi
- adb wait-for-device &> /dev/null
- sleep 0.3
- adb remount &> /dev/null
-
- mkdir -p $OUT
- ($func $*|tee $OUT/.log;return ${PIPESTATUS[0]})
- ret=$?;
- if [ $ret -ne 0 ]; then
- rm -f $OUT/.log;return $ret
- fi
-
- # Install: <file>
- if [ `uname` = "Linux" ]; then
- LOC="$(cat $OUT/.log | sed -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g' | grep '^Install: ' | cut -d ':' -f 2)"
- else
- LOC="$(cat $OUT/.log | sed -E "s/"$'\E'"\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]//g" | grep '^Install: ' | cut -d ':' -f 2)"
- fi
-
- # Copy: <file>
- if [ `uname` = "Linux" ]; then
- LOC="$LOC $(cat $OUT/.log | sed -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g' | grep '^Copy: ' | cut -d ':' -f 2)"
- else
- LOC="$LOC $(cat $OUT/.log | sed -E "s/"$'\E'"\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]//g" | grep '^Copy: ' | cut -d ':' -f 2)"
- fi
-
- # If any files are going to /data, push an octal file permissions reader to device
- if [ -n "$(echo $LOC | egrep '(^|\s)/data')" ]; then
- CHKPERM="/data/local/tmp/chkfileperm.sh"
-(
-cat <<'EOF'
-#!/system/xbin/sh
-FILE=$@
-if [ -e $FILE ]; then
- ls -l $FILE | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}' | cut -d ' ' -f1
-fi
-EOF
-) > $OUT/.chkfileperm.sh
- echo "Pushing file permissions checker to device"
- adb push $OUT/.chkfileperm.sh $CHKPERM
- adb shell chmod 755 $CHKPERM
- rm -f $OUT/.chkfileperm.sh
- fi
-
- stop_n_start=false
- for FILE in $(echo $LOC | tr " " "\n"); do
- # Make sure file is in $OUT/system or $OUT/data
- case $FILE in
- $OUT/system/*|$OUT/data/*)
- # Get target file name (i.e. /system/bin/adb)
- TARGET=$(echo $FILE | sed "s#$OUT##")
- ;;
- *) continue ;;
- esac
-
- case $TARGET in
- /data/*)
- # fs_config only sets permissions and se labels for files pushed to /system
- if [ -n "$CHKPERM" ]; then
- OLDPERM=$(adb shell $CHKPERM $TARGET)
- OLDPERM=$(echo $OLDPERM | tr -d '\r' | tr -d '\n')
- OLDOWN=$(adb shell ls -al $TARGET | awk '{print $2}')
- OLDGRP=$(adb shell ls -al $TARGET | awk '{print $3}')
- fi
- echo "Pushing: $TARGET"
- adb push $FILE $TARGET
- if [ -n "$OLDPERM" ]; then
- echo "Setting file permissions: $OLDPERM, $OLDOWN":"$OLDGRP"
- adb shell chown "$OLDOWN":"$OLDGRP" $TARGET
- adb shell chmod "$OLDPERM" $TARGET
- else
- echo "$TARGET did not exist previously, you should set file permissions manually"
- fi
- adb shell restorecon "$TARGET"
- ;;
- /system/priv-app/SystemUI/SystemUI.apk|/system/framework/*)
- # Only need to stop services once
- if ! $stop_n_start; then
- adb shell stop
- stop_n_start=true
- fi
- echo "Pushing: $TARGET"
- adb push $FILE $TARGET
- ;;
- *)
- echo "Pushing: $TARGET"
- adb push $FILE $TARGET
- ;;
- esac
- done
- if [ -n "$CHKPERM" ]; then
- adb shell rm $CHKPERM
- fi
- if $stop_n_start; then
- adb shell start
- fi
- rm -f $OUT/.log
- return 0
- else
- echo "The connected device does not appear to be $CM_BUILD, run away!"
- fi
-}
-
-alias mmp='dopush mm'
-alias mmmp='dopush mmm'
-alias mkap='dopush mka'
-alias cmkap='dopush cmka'
-
-function repopick() {
- T=$(gettop)
- $T/build/tools/repopick.py $@
-}
-
-function fixup_common_out_dir() {
- common_out_dir=$(get_build_var OUT_DIR)/target/common
- target_device=$(get_build_var TARGET_DEVICE)
- if [ ! -z $CM_FIXUP_COMMON_OUT ]; then
- if [ -d ${common_out_dir} ] && [ ! -L ${common_out_dir} ]; then
- mv ${common_out_dir} ${common_out_dir}-${target_device}
- ln -s ${common_out_dir}-${target_device} ${common_out_dir}
- else
- [ -L ${common_out_dir} ] && rm ${common_out_dir}
- mkdir -p ${common_out_dir}-${target_device}
- ln -s ${common_out_dir}-${target_device} ${common_out_dir}
- fi
- else
- [ -L ${common_out_dir} ] && rm ${common_out_dir}
- mkdir -p ${common_out_dir}
- fi
-}
-
# Force JAVA_HOME to point to java 1.7/1.8 if it isn't already set.
function set_java_home() {
# Clear the existing JAVA_HOME value if we set it ourselves, so that
mk_timer $(get_make_command) "$@"
}
-if [ "x$SHELL" != "x/bin/bash" ]; then
+function __detect_shell() {
case `ps -o command -p $$` in
*bash*)
+ echo bash
;;
*zsh*)
+ echo zsh
;;
*)
- echo "WARNING: Only bash and zsh are supported, use of other shell may lead to erroneous results"
+ echo unknown
+ return 1
;;
esac
+ return
+}
+
+
+if ! __detect_shell > /dev/null; then
+ echo "WARNING: Only bash and zsh are supported, use of other shell may lead to erroneous results"
fi
# Execute the contents of any vendorsetup.sh files we can find.
}
export ANDROID_BUILD_TOP=$(gettop)
+
+. vendor/cm/build/envsetup.sh