The Android Open Source Project | 52d4c30 | 2009-03-03 19:29:09 -0800 | [diff] [blame^] | 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 jarutils androidprefs layoutlib_api ninepatch sdklib sdkuilib" |
| 65 | make $MAKE_OPT dx ping ddms jarutils androidprefs layoutlib_api layoutlib_utils ninepatch sdklib sdkuilib |
| 66 | } |
| 67 | |
| 68 | function build_plugin { |
| 69 | development/tools/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 | development/tools/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 |