• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2# Entry point to build the Eclipse plugins for the build server.
3#
4# Input parameters:
5# $1: *Mandatory* destination directory. Must already exist. Cannot contain spaces.
6# $2: Optional build number. If present, will be appended to the date qualifier.
7#     The build number cannot contain spaces *nor* periods (dashes are ok.)
8# -z: Optional, prevents the final zip and leaves the udate-site directory intact.
9# -i: Optional, if present, the Google internal update site will be built. Otherwise,
10#     the external site will be built
11# Workflow:
12# - make dx, ddms, ping
13# - create symlinks (for eclipse code reorg, for ddms, ping)
14# - call the actual builder script from Brett
15# - zip resulting stuff and move to $DEST
16# Note: currently wrap around existing shell script, reuse most of it,
17# eventually both might merge as needed.
18
19set -e  # Fail this script as soon as a command fails -- fail early, fail fast
20
21DEST_DIR=""
22BUILD_NUMBER=""
23CREATE_ZIP="1"
24INTERNAL_BUILD=""
25
26function get_params() {
27  # parse input parameters
28  while [ $# -gt 0 ]; do
29    if [ "$1" == "-z" ]; then
30      CREATE_ZIP=""
31    elif [ "$1" == "-i" ]; then
32      INTERNAL_BUILD="-i"
33    elif [ "$1" != "" ] && [ -z "$DEST_DIR" ]; then
34      DEST_DIR="$1"
35    elif [ "$1" != "" ] && [ -z "$BUILD_NUMBER" ]; then
36      BUILD_NUMBER="$1"
37    fi
38    shift
39  done
40}
41
42function die() {
43  echo "Error:" $*
44  echo "Aborting"
45  exit 1
46}
47
48function check_params() {
49  # This needs to run from the top android directory
50  # Automatically CD to the top android directory, whatever its name
51  D=`dirname "$0"`
52  cd "$D/../../../" && echo "Switched to directory $PWD"
53
54  # The current Eclipse build has some Linux dependency in its config files
55  [ `uname` == "Linux" -o `uname` == "Darwin" ] || die "This must run from a Linux or Mac OSX box."
56
57  # Check dest dir exists
58  [ -n "$DEST_DIR" ] || die "Usage: $0 <destination-directory> [build-number]"
59  [ -d "$DEST_DIR" ] || die "Destination directory $DEST_DIR must exist."
60}
61
62function build_libs() {
63  J="8"
64  [[ $(uname) == "Darwin" ]] && J=$(sysctl hw.ncpu | cut -d : -f 2 | tr -d ' ')
65  [[ $(uname) == "Linux"  ]] && J=$(( $(cat /proc/cpuinfo | grep processor | wc -l) + 2 ))
66  MAKE_OPT="-j$J"
67  LIBS="dx ping ddms androidprefs layoutlib layoutlib_api ide_common ninepatch sdklib sdkuilib traceview assetstudio"
68  echo "*** Building: make $MAKE_OPT $LIBS"
69  make $MAKE_OPT $LIBS
70}
71
72function build_plugin {
73  sdk/eclipse/scripts/create_all_symlinks.sh
74
75  # Qualifier is "v" followed by date/time in YYYYMMDDHHSS format and the optional
76  # build number.
77  DATE=`date +v%Y%m%d%H%M`
78  QUALIFIER="$DATE"
79  [ -n "$BUILD_NUMBER" ] && QUALIFIER="${QUALIFIER}-${BUILD_NUMBER}"
80
81  # Compute the final directory name and remove any leftovers from previous
82  # runs if any.
83  BUILD_PREFIX="android-eclipse"
84  if [ "$INTERNAL_BUILD" ]; then
85    # append 'eng' signifier to end of archive name to denote internal build
86    BUILD_PREFIX="${BUILD_PREFIX}-eng"
87  fi
88
89  # exclude date from build-zip name so it can be auto-calculated by continuous
90  # test process unless there's no build number, in which case the date is
91  # still used (useful for testing)
92  ZIP_NAME="${BUILD_PREFIX}-${BUILD_NUMBER:-$DATE}.zip"
93  [ -d "$DEST_DIR/$BUILD_PREFIX" ] || rm -rfv "$DEST_DIR/$BUILD_PREFIX"
94
95  # Perform the Eclipse build and move the result in $DEST_DIR/android-build
96  sdk/eclipse/scripts/build_plugins.sh $QUALIFIER $INTERNAL_BUILD -d "$DEST_DIR" -a "$BUILD_PREFIX"
97
98  # Cleanup
99  [ -d "$QUALIFIER" ] && rm -rfv "$QUALIFIER"
100
101  if [ "$CREATE_ZIP" ]; then
102    # The result is a full update-site under $DEST_DIR/BUILD_PREFIX
103    # Zip it and remove the directory.
104    echo "**** Package in $DEST_DIR"
105    [ -d "$DEST_DIR/$BUILD_PREFIX" ] || \
106      die "Build failed to produce $DEST_DIR/$BUILD_PREFIX"
107    cd "$DEST_DIR"
108    [ -f "$ZIP_NAME" ] && rm -rfv "$ZIP_NAME"
109    cd "$BUILD_PREFIX"
110    zip -9r "../$ZIP_NAME" *
111    cd .. # back to $DEST_DIR
112    rm -rfv "$BUILD_PREFIX"  # removes the directory, not the zip
113    echo "ZIP of Update site available at $DEST_DIR/${ZIP_NAME}"
114  else
115    echo "Update site available in $DEST_DIR/$BUILD_PREFIX"
116  fi
117}
118
119get_params "$@"
120check_params
121build_libs
122build_plugin
123