18f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen#!/bin/bash
28f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
38f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chensvnfetch() {
48f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    REV="${3:-HEAD}"
58f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo "Fetching from ${1} to ${2} at revision ${REV}"
68f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cd $SRC_DIR
78f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if ! [ -f "${2}/.svn/entries" ]; then
88f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	mkdir "${2}"
98f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	cd "${2}"
108f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	svn co --non-interactive --trust-server-cert "${1}" -r "${REV}" "."
118f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    else
128f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	cd "${2}"
138f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	svn cleanup
148f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	svn up -r "${REV}"
158f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
168f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
178f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
188f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chengitfetch() {
198f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo "Fetching ${2} branch/commit from ${1} to ${3} via git"
208f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cd $SRC_DIR
218f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if ! [ -f "${3}/.git/config" ]; then
228f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	git clone "${1}" "${3}"
238f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	cd "${3}"
248f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	git checkout "${2}"
258f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    else
268f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	cd "${3}"
278f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	git fetch
288f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	git checkout "${2}"
298f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
308f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
318f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ $? -ne 0 ]; then
328f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	exit
338f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
348f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
358f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
368f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenhgfetch() {
378f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen(
388f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  echo "Fetching ${2} branch from ${1} to ${3} via mercurial"
398f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  cd src
408f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  if [ -e "${2}/.hg" ] ; then
418f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen      cd ${2}
428f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen      hg pull
438f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  else
448f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen      hg clone "${1}" "${2}"
458f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  fi
468f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  hg up -r ${3}
478f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen)
488f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ $? -ne 0 ]; then
498f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	exit
508f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
518f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
528f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
538f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
548f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chentestsmackgit() {
558f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cd $SRC_DIR
568f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ -f .used-smack-git-repo ] && [ $(cat .used-smack-git-repo) != $SMACK_REPO ] ; then
578f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    echo "Used smack repository has changed!"
588f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    echo "Old: $(cat .used-smack-git-repo) New: ${SMACK_REPO}."
598f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    echo "Deleting old local copy"
608f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    rm -rf smack
618f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
628f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo "${SMACK_REPO}" > .used-smack-git-repo
638f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
648f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
658f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenfetchall() {
668f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo "## Step 15: fetching sources"
678f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if $SMACK_LOCAL ; then
688f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	# always clean the local copy first
698f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	rm -rf ${SRC_DIR}/smack
708f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	mkdir ${SRC_DIR}/smack
718f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	cd $SMACK_REPO
728f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	git archive $SMACK_BRANCH | tar -x -C ${SRC_DIR}/smack
738f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	if [ $? -ne 0 ]; then
748f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    exit
758f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	fi
768f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    else
778f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	execute gitfetch "$SMACK_REPO" "$SMACK_BRANCH" "smack"
788f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
798f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
808f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if ! $UPDATE_REMOTE ; then
818f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "Won't update or fetch third party resources"
828f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	wait
838f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	return
848f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
858f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
868f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    execute svnfetch "http://svn.apache.org/repos/asf/qpid/trunk/qpid/java/management/common/src/main/" "qpid"
878f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    execute svnfetch "http://svn.apache.org/repos/asf/harmony/enhanced/java/trunk/classlib/modules/auth/src/main/java/common/" "harmony" 
888f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    execute svnfetch "https://dnsjava.svn.sourceforge.net/svnroot/dnsjava/trunk" "dnsjava"
898f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    execute gitfetch "git://kenai.com/jbosh~origin" "master" "jbosh"
908f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    # jldap doesn't compile with the latest version (missing deps?), therefore it's a fixed version for now
918f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    #  execute gitfetch "git://git.openldap.org/openldap-jldap.git" "master" "novell-openldap-jldap"
928f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    wait
938f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
948f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
958f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChencreateVersionTag() {
968f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    # Skip this step is no version tag is given
978f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    [[ -z $VERSION_TAG ]] && return
988f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
998f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    local v
1008f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cat <<EOF  > $TAG_FILE
1018f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen#!/bin/bash
1028f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1038f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen# This file contains the version information of the components that
1048f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen# were used to build this aSmack version
1058f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1068f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chendeclare -g -A COMPONENT_VERSIONS
1078f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChenEOF
1088f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1098f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    for d in $(ls $SRC_DIR) ; do
1108f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	cd $SRC_DIR
1118f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1128f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	# Don't record the components version for static-src
1138f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	for static in $(ls ${ASMACK_BASE}/static-src) ; do
1148f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    # Don't record the version if it's from the static sources
1158f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    [ $d == $static ] && continue
1168f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	done
1178f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1188f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	if [[ -d $d/.git ]] ; then
1198f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    v=$(cd $d && git rev-parse HEAD)
1208f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    key=$d
1218f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    COMPONENT_VERSIONS["$d"]=$v
1228f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	elif [[ -d $d/.svn ]] ; then
1238f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    v=$(cd $d && svn info |grep Revision |cut -f 2 -d ' ')
1248f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    key=$d
1258f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    COMPONENT_VERSIONS["$d"]=$v
1268f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	fi
1278f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    done
1288f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1298f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if $SMACK_LOCAL ; then
1308f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	cd $SMACK_REPO
1318f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	v=$(git rev-parse HEAD)
1328f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	COMPONENT_VERSIONS[smack]=$v
1338f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
1348f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1358f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cd ${ASMACK_BASE}
1368f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    v=$(git rev-parse HEAD)
1378f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    COMPONENT_VERSIONS[asmack]=$v
1388f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1398f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    for i in "${!COMPONENT_VERSIONS[@]}" ; do
1408f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "COMPONENT_VERSIONS[$i]=${COMPONENT_VERSIONS[$i]}" >> $TAG_FILE
1418f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    done
1428f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
1438f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1448f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chencopyfolder() {
1458f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  cd ${ASMACK_BASE}
1468f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  (
1478f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cd "${1}"
1488f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    tar -cSsp --exclude-vcs "${3}"
1498f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  ) | (
1508f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cd "${2}"
1518f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    tar -xSsp
1528f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  )
1538f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  wait
1548f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
1558f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1568f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chencreatebuildsrc() {
1578f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  echo "## Step 20: creating build/src"
1588f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  cd "${ASMACK_BASE}"
1598f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  rm -rf build/src
1608f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  mkdir -p build/src/trunk
1618f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1628f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  execute copyfolder "src/smack/source/" "build/src/trunk" "."
1638f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  execute copyfolder "src/qpid/java" "build/src/trunk" "org/apache/qpid/management/common/sasl"
1648f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  execute copyfolder "src/novell-openldap-jldap" "build/src/trunk" "."
1658f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  execute copyfolder "src/dnsjava"  "build/src/trunk" "org"
1668f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  execute copyfolder "src/harmony" "build/src/trunk" "."
1678f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  execute copyfolder "src/jbosh/src/main/java" "build/src/trunk" "."
1688f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  if $BUILD_JINGLE ; then
1698f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    execute copyfolder "src/smack/jingle/extension/source/" "build/src/trunk" "."
1708f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  fi
1718f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  wait
1728f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  # custom overwrites some files from smack, so this has to be done as last
1738f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  copyfolder "src/custom" "build/src/trunk" "."
1748f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
1758f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1768f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenpatchsrc() {
1778f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo "## Step 25: patch build/src"
1788f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cd ${ASMACK_BASE}/build/src/trunk/
1798f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    for PATCH in `(cd "../../../${1}" ; find -maxdepth 1 -type f)|sort` ; do
1808f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo $PATCH
1818f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	if [[ $PATCH == *.sh ]]; then
1828f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    "../../../${1}/$PATCH" || exit 1
1838f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	elif [[ $PATCH == *.patch ]]; then
1848f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    patch -p0 < "../../../${1}/$PATCH" || exit 1
1858f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	fi
1868f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    done
1878f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
1888f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1898f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenbuild() {
1908f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  echo "## Step 30: compile"
1918f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  buildandroid
1928f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  if [ $? -ne 0 ]; then
1938f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen      exit 1
1948f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  fi
1958f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
1968f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
1978f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenbuildandroid() {
1988f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    local sdklocation
1998f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    local version
2008f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    local sdks
2018f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    local minSdkVer=8
2028f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
2038f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cd $ASMACK_BASE
2048f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
2058f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ ! -f local.properties ] ; then
2068f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "Could not find local.properties file"
2078f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "See local.properties.example"
2088f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	exit 1
2098f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
2108f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
2118f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    sdklocation=$(grep sdk-location local.properties| cut -d= -f2)
2128f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ -z "$sdklocation" ] ; then
2138f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "Android SDK not found. Don't build android version"
2148f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	exit 1
2158f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
2168f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    for f in ${sdklocation/\$\{user.home\}/$HOME}/platforms/* ; do
2178f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	version=`basename $f`
2188f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	if [[ "$version" != android-* ]] ; then
2198f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    echo "$sdklocation contains no Android SDKs"
2208f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    exit 1
2218f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	fi
2228f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	if [[ ${version#android-} -ge $minSdkVer ]] ; then
2238f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    if [ -n $BUILD_ANDROID_VERSIONS ] ; then
2248f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		for build_version in $BUILD_ANDROID_VERSIONS ; do
2258f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		    [ ${version#android-} != $build_version ] && continue 2
2268f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		done
2278f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    fi
2288f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    echo "Building for ${version}"
2298f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    sdks="${sdks} ${version}\n"
2308f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	fi
2318f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
2328f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    done
2338f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
2348f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ -z "${sdks}" ] ; then
2358f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "No SDKs of a suitable minimal API (${minSdkVer}) version found"
2368f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	exit 1
2378f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
2388f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
2398f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    local asmack_suffix
2408f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [[ -n ${VERSION_TAG} ]] && [[ -n ${1} ]] ; then
2418f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	asmack_suffix="${1}-${VERSION_TAG}"
2428f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    elif [[ -n ${VERSION_TAG} ]] ; then
2438f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	asmack_suffix="-${VERSION_TAG}"
2448f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    else
2458f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	asmack_suffix="${1}"
2468f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
2478f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if ! echo -e ${sdks} \
2488f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	| xargs -I{} -n 1 $XARGS_ARGS ant \
2498f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		-Dandroid.version={} \
2508f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		-Djar.suffix="${asmack_suffix}" \
2518f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		compile-android ; then
2528f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	exit 1
2538f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
2548f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
2558f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
2568f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenbuildcustom() {
2578f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  for dir in `find patch -maxdepth 1 -mindepth 1 -type d`; do
2588f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    buildsrc
2598f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    patchsrc "patch"
2608f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if $BUILD_JINGLE ; then
2618f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen      patchsrc "jingle"
2628f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen      JINGLE_ARGS="-Djingle=lib/jstun.jar"
2638f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
2648f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    patchsrc "${dir}"
2658f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    local custom
2668f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    custom=$(echo ${dir} | sed 's:patch/:-:')
2678f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    ant -Djar.suffix="${custom}" $JINGLE_ARGS
2688f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    buildandroid "${custom}"
2698f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  done
2708f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
2718f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
2728f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenparseopts() {
2738f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    while getopts a:b:r:t:cdhjpux OPTION "$@"; do
2748f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	case $OPTION in
2758f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    a)
2768f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		BUILD_ANDROID_VERSIONS="${OPTARG}"
2778f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
2788f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    r)
2798f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		SMACK_REPO="${OPTARG}"
2808f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
2818f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    b)
2828f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		SMACK_BRANCH="${OPTARG}"
2838f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
2848f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    d)
2858f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		set -x
2868f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		XARGS_ARGS="-t"
2878f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
2888f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    j)
2898f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		BUILD_JINGLE=true
2908f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
2918f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    u)
2928f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		UPDATE_REMOTE=false
2938f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
2948f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    c)
2958f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		BUILD_CUSTOM=true
2968f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
2978f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    p)
2988f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		PARALLEL_BUILD=true
2998f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
3008f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    t)
3018f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		VERSION_TAG="${OPTARG}"
3028f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
3038f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    x)
3048f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		PUBLISH_RELEASE=true
3058f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
3068f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    h)
3078f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "$0 -d -c -u -j -r <repo> -b <branch>"
3088f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "-d: Enable debug"
3098f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "-j: Build jingle code"
3108f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "-c: Apply custom patchs from patch directory"
3118f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "-u: DON'T update remote third party resources"
3128f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "-r <repo>: Git repository (can be local or remote) for underlying smack repository"
3138f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "-b <branch>: Git branch used to build aSmack from underlying smack repository"
3148f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "-p use parallel build where possible"
3158f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "-t <version>: Create a new version tag. You should build aSmack before calling this"
3168f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "-x: Publish the release"
3178f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		echo "-a <SDK Version(s)>: Build only for the given Android SDK versions"
3188f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		exit
3198f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen		;;
3208f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	esac
3218f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    done
3228f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
3238f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3248f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChenprepareRelease() {
3258f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [[ -z ${VERSION_TAG} ]]; then
3268f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "Version tag is not set. Not going to prepare a release"
3278f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	return
3288f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
3298f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3308f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ -d $RELEASE_DIR ] ; then
3318f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	rm -rf $RELEASE_DIR
3328f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
3338f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    mkdir -p $RELEASE_DIR
3348f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3358f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    mv ${ASMACK_BASE}/build/*.{jar,zip} ${RELEASE_DIR}/
3368f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cp $TAG_FILE ${RELEASE_DIR}/
3378f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cp ${ASMACK_BASE}/CHANGELOG ${RELEASE_DIR}
3388f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3398f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ -n $GPG_KEY ] ; then
3408f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	find $RELEASE_DIR -maxdepth 1 -and \( -name '*.jar' -or -name '*.zip' \) -print0 \
3418f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    | xargs -n 1 -0 $XARGS_ARGS gpg --local-user $GPG_KEY --detach-sign
3428f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
3438f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3448f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    find $RELEASE_DIR -maxdepth 1 -and \( -name '*.jar' -or -name '*.zip' \) -print0 \
3458f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	| xargs -I{} -n 1 -0 $XARGS_ARGS sh -c 'md5sum {} > {}.md5'
3468f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3478f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    local release_readme
3488f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    release_readme=${RELEASE_DIR}/README
3498f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3508f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    sed \
3518f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	-e "s/\$VERSION_TAG/${VERSION_TAG}/" \
3528f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	-e "s/\$BUILD_DATE/${BUILD_DATE}/" \
3538f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	README.asmack > $release_readme
3548f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3558f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    # Pretty print the component versions at the end of README
3568f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    # Note that there is an exclamation mark at the beginning of the
3578f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    # associative array to access the keys
3588f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    for i in "${!COMPONENT_VERSIONS[@]}" ; do
3598f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	local tabs
3608f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	if [[ ${#i} -le 6 ]] ; then
3618f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    tabs="\t\t"
3628f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	else
3638f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    tabs="\t"
3648f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	fi
3658f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo -e "${i}:${tabs}${COMPONENT_VERSIONS[$i]}" >> $release_readme
3668f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    done
3678f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
3688f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3698f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChenpublishRelease() {
3708f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [[ -z ${VERSION_TAG} ]]; then
3718f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "Version tag is not set. Not going to prepare a release"
3728f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	return
3738f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
3748f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3758f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [[ -z ${PUBLISH_RELEASE} ]]; then
3768f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "User doesn't want to publish this release"
3778f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	return
3788f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
3798f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3808f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [[ -z $PUBLISH_HOST || -z $PUBLISH_DIR ]]; then
3818f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "WARNING: Not going to publish this release as either $PUBLISH_HOST or $PUBLISH_DIR is not set"
3828f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	return
3838f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
3848f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3858f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cd ${ASMACK_RELEASES}
3868f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cat <<EOF | sftp $PUBLISH_HOST
3878f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenrm ${PUBLISH_DIR}/${VERSION_TAG}/*
3888f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenmkdir ${PUBLISH_DIR}/${VERSION_TAG}
3898f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenput -r $VERSION_TAG $PUBLISH_DIR
3908f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChenEOF
3918f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
3928f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
3938f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenislocalrepo() {
3948f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    local R="^(git|ssh)"
3958f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [[ $1 =~ $R ]]; then
3968f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	return 1
3978f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    else
3988f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	return 0
3998f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
4008f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
4018f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4028f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Cheninitialize() {
4038f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo "## Step 00: initialize"
4048f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if ! [ -d build/src/trunk ]; then
4058f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	mkdir -p build/src/trunk
4068f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
4078f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ ! -d src/ ]; then
4088f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	mkdir src
4098f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
4108f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    find build \( -name '*.jar' -or -name '*.zip' \) -print0 | xargs -0 rm -f
4118f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    rm -rf src/custom
4128f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
4138f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4148f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chencleanup() {
4158f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo "## Deleting all temporary files"
4168f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    rm -rf build
4178f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    rm -rf src
4188f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
4198f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4208f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chencopystaticsrc() {
4218f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    cp -ur static-src/* src/
4228f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
4238f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4248f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChencmdExists() {
4258f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    command -v $1 &> /dev/null
4268f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    return $?
4278f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
4288f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4298f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChenprettyPrintSeconds() {
4308f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    local ttime
4318f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if (( $1 > 59 )); then
4328f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	ttime=$(printf "%dm %ds\n" $(($1/60%60)) $(($1%60)) )
4338f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    else
4348f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	ttime=$(printf "%ds\n" $(($1)) )
4358f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
4368f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo "Execution took $ttime"
4378f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
4388f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4398f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenexecute() {
4408f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ -n "$BACKGROUND" ]; then
4418f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	"$@" &
4428f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    else
4438f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	"$@"
4448f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
4458f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
4468f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4478f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chensetdefaults() {
4488f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    # Default configuration, can be changed with script arguments
4498f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    SMACK_REPO=git://github.com/Flowdalic/smack.git
4508f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    SMACK_BRANCH=master
4518f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    SMACK_LOCAL=false
4528f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    UPDATE_REMOTE=true
4538f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    BUILD_CUSTOM=false
4548f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    BUILD_JINGLE=false
4558f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    JINGLE_ARGS=""
4568f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    PARALLEL_BUILD=false
4578f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    VERSION_TAG=""
4588f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    PUBLISH_RELEASE=""
4598f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    PUBLISH_HOST=""
4608f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    PUBLISH_DIR=""
4618f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    BUILD_ANDROID_VERSIONS=""
4628f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4638f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    # Often used variables
4648f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    ASMACK_BASE=$(pwd)
4658f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    ASMACK_RELEASES=${ASMACK_BASE}/releases
4668f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    SRC_DIR=${ASMACK_BASE}/src
4678f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    VERSION_TAG_DIR=${ASMACK_BASE}/version-tags
4688f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    STARTTIME=$(date -u "+%s")
4698f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    BUILD_DATE=$(date)
4708f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    # Declare an associative array that is in global scope ('-g')
4718f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    declare -g -A COMPONENT_VERSIONS
4728f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
4738f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4748f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenparseconfig() {
4758f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ -f ${ASMACK_BASE}/config ]; then
4768f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	source ${ASMACK_BASE}/config
4778f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
4788f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
4798f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4808f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chensetconfig() {
4818f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [ ${PARALLEL_BUILD} == "true" ]; then
4828f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	XARGS_ARGS="${XARGS_ARGS} -P4"
4838f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	BACKGROUND="true"
4848f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    else
4858f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	XARGS_ARGS=""
4868f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	BACKGROUND=""
4878f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
4888f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4898f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if islocalrepo $SMACK_REPO; then
4908f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	SMACK_LOCAL=true
4918f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	SMACK_REPO=`readlink -f $SMACK_REPO`
4928f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
4938f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
4948f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [[ -n ${VERSION_TAG} ]]; then
4958f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	if ! grep ${VERSION_TAG} CHANGELOG; then
4968f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    echo "Could not find the tag in the CHANGELOG file. Please write a short summary of changes"
4978f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    exit 1
4988f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	fi
4998f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	if ! git diff --exit-code; then
5008f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    echo "Unstaged changes found, please stages your changes"
5018f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    exit 1
5028f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	fi
5038f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	if ! git diff --cached --exit-code; then
5048f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    echo "Staged, but uncommited changes found, please commit"
5058f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	    exit 1
5068f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	fi
5078f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	RELEASE_DIR=${ASMACK_RELEASES}/${VERSION_TAG}
5088f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	TAG_FILE=${VERSION_TAG_DIR}/${VERSION_TAG}.tag
5098f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
5108f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
5118f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
5128f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenprintconfig() {
5138f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo "Smack git repository $SMACK_REPO with branch $SMACK_BRANCH"
5148f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo -e "SMACK_LOCAL:$SMACK_LOCAL\tUPDATE_REMOTE:$UPDATE_REMOTE\tBUILD_CUSTOM:$BUILD_CUSTOM\tBUILD_JINGLE:$BUILD_JINGLE"
5158f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    echo -e "PARALLEL_BUILD:$PARALLEL_BUILD\tBASE:$ASMACK_BASE"
5168f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
5178f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
5188f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChencheckPrerequisites() {
5198f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if [[ $BASH_VERSION < 4 ]] ; then
5208f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "aSmack's build.bash needs at least bash version 4"
5218f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	exit 1
5228f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
5238f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
5248f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    if ! tar --version |grep GNU &> /dev/null ; then
5258f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	echo "aSmack's build.bash needs GNU tar"
5268f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen	exit 1
5278f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    fi
5288f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen}
5298f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
5308f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen# Main
5318f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
5328f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chensetdefaults
5338f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenparseopts $@
5348f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChencheckPrerequisites
5358f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenparseconfig
5368f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chensetconfig
5378f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenprintconfig
5388f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Cheninitialize
5398f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chencopystaticsrc
5408f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chentestsmackgit
5418f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenfetchall
5428f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChencreateVersionTag
5438f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chencreatebuildsrc
5448f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenpatchsrc "patch"
545d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
546d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen##
547d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen## BEGIN Modification for android platform build system
548d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen##
549d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenecho done with android modifications
550d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenexit
551d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen##
552d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen## END Modification for android platform build system
553d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen##
554d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
5558f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenif $BUILD_JINGLE ; then
5568f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  patchsrc "jingle"
5578f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  JINGLE_ARGS="-Djingle=lib/jstun.jar"
5588f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenfi
5598f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenbuild
5608f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
5618f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenif $BUILD_CUSTOM ; then
5628f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen    buildcustom
5638f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenfi
5648f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
5658f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenif cmdExists advzip ; then
5668f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  echo "advzip found, compressing files"
5678f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  find build \( -name '*.jar' -or -name '*.zip' \) -print0 | xargs -n 1 -0 $XARGS_ARGS advzip -z4
5688f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenelse
5698f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  echo "Could not find the advzip command."
5708f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  echo "advzip will further reduce the size of the generated jar and zip files,"
5718f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen  echo "consider installing advzip"
5728f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenfi
5738f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
5748f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChenprepareRelease
5758f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChenpublishRelease
5768f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chen
5778f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChenSTOPTIME=$(date -u "+%s")
5788f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChenRUNTIME=$(( $STOPTIME - $STARTTIME ))
5798f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi ChenprettyPrintSeconds $RUNTIME
5808f4ce9ea0de51fee918bffe19c434612d6bbb2d7Shuyi Chenprintconfig
581