OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / sdk / eclipse / scripts / build_server.sh
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
19 set -e  # Fail this script as soon as a command fails -- fail early, fail fast
20
21 DEST_DIR=""
22 BUILD_NUMBER=""
23 CREATE_ZIP="1"
24 INTERNAL_BUILD=""
25
26 function 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
42 function die() {
43   echo "Error:" $*
44   echo "Aborting"
45   exit 1
46 }
47
48 function 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" ] || die "This must run from a Linux 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
62 function build_libs() {
63   MAKE_OPT="-j8"
64   echo "*** Building: make $MAKE_OPT dx ping ddms androidprefs groovy-all-1.7.0 layoutlib layoutlib_api layoutlib_utils ninepatch sdklib sdkuilib"
65   make $MAKE_OPT dx ping ddms androidprefs groovy-all-1.7.0 layoutlib layoutlib_api layoutlib_utils ninepatch sdklib sdkuilib
66 }
67
68 function build_plugin {
69   sdk/eclipse/scripts/create_all_symlinks.sh
70
71   # Qualifier is "v" followed by date/time in YYYYMMDDHHSS format and the optional
72   # build number.
73   DATE=`date +v%Y%m%d%H%M`
74   QUALIFIER="$DATE"
75   [ -n "$BUILD_NUMBER" ] && QUALIFIER="${QUALIFIER}-${BUILD_NUMBER}"
76
77   # Compute the final directory name and remove any leftovers from previous
78   # runs if any.
79   BUILD_PREFIX="android-eclipse"  
80   if [ "$INTERNAL_BUILD" ]; then
81     # append 'eng' signifier to end of archive name to denote internal build
82     BUILD_PREFIX="${BUILD_PREFIX}-eng"
83   fi  
84
85   # exclude date from build-zip name so it can be auto-calculated by continuous
86   # test process unless there's no build number, in which case the date is
87   # still used (useful for testing)
88   ZIP_NAME="${BUILD_PREFIX}-${BUILD_NUMBER:-$DATE}.zip"
89   [ -d "$DEST_DIR/$BUILD_PREFIX" ] || rm -rfv "$DEST_DIR/$BUILD_PREFIX"
90
91   # Perform the Eclipse build and move the result in $DEST_DIR/android-build
92   sdk/eclipse/scripts/build_plugins.sh $QUALIFIER $INTERNAL_BUILD -d "$DEST_DIR" -a "$BUILD_PREFIX"
93
94   # Cleanup
95   [ -d "$QUALIFIER" ] && rm -rfv "$QUALIFIER"
96
97   if [ "$CREATE_ZIP" ]; then
98     # The result is a full update-site under $DEST_DIR/BUILD_PREFIX
99     # Zip it and remove the directory.
100     echo "**** Package in $DEST_DIR"
101     [ -d "$DEST_DIR/$BUILD_PREFIX" ] || \
102       die "Build failed to produce $DEST_DIR/$BUILD_PREFIX"
103     cd "$DEST_DIR"
104     [ -f "$ZIP_NAME" ] && rm -rfv "$ZIP_NAME"
105     cd "$BUILD_PREFIX"
106     zip -9r "../$ZIP_NAME" *
107     cd .. # back to $DEST_DIR
108     rm -rfv "$BUILD_PREFIX"  # removes the directory, not the zip
109     echo "ZIP of Update site available at $DEST_DIR/${ZIP_NAME}"
110   else
111     echo "Update site available in $DEST_DIR/$BUILD_PREFIX"
112   fi
113 }
114
115 get_params "$@"
116 check_params
117 build_libs
118 build_plugin