1#!/bin/bash 2 3# build script for eclipse adt build on the Linux and Mac platforms 4# 5# Usage: sdk/eclipse/scripts/build_plugins <build_version> 6# 7# It expects environment variable ECLIPSE_HOME to be defined to point to _your_ 8# version of Eclipse RCP (must have the WTP & GEF plugins available too.) 9# 10# If ECLIPSE_HOME is not provided, this script will _download_ a reference version 11# of Eclipse RCP and install it in a specific location. 12# 13# Other properties, ant scripts that drive the build are defined in ./buildConfig 14# Currently, this script will create an update site at ${user.home}/www/no_crawl/android-build 15# or at the directory specified using "-d" 16 17# Known Issues: 18# - Build does not properly clean up after itself (build server always executes from 19# a clean state.) 20# - Script will fail if current absolute path has spaces in it. 21# - Only linux and OSX are supported for now 22# - Do NOT manually invoke this script. Instead use the build_server.sh wrapper 23# which does some extra preliminary steps (it builds a few libs needed here.) 24 25 26set -e # abort this script early if any command fails 27 28# 29# -- Utility methods -- 30# 31 32function printUsage() { 33 echo "Usage: $0 <build_qualifier> [-i] [-d <destination-directory>] [-a <archivePrefix>] " 34 echo "<build_qualifier>: build qualifier string" 35 echo "-i = build internal site. Otherwise, external site will be built" 36 echo "-d = destination directory. Default is $USER/www/no_crawl/. Cannot contain spaces." 37 echo "-a = archive prefix. Cannot contain spaces." 38} 39 40function die() { 41 echo $@ 42 exit 1 43} 44 45function dieWithUsage() { 46 echo $@ 47 echo 48 printUsage 49 exit 1 50} 51 52 53# 54# -- Setup our custom version of Eclipse -- 55# 56 57# The dependency on the linux platform comes from a series of environment 58# variables that the eclipse ant runner expects. These are defined in the 59# build.properties file. We can easily support other platforms but would need 60# to override those values in this script. 61HOST=`uname` 62if [ "$HOST" == "Linux" ]; then 63 BASEOS=linux 64 BASEWS=gtk 65 BASEARCH=x86 66elif [ "$HOST" == "Darwin" ]; then 67 BASEOS=macosx 68 BASEWS=cocoa 69 BASEARCH=x86 70else 71 die "ERROR: This script is currently only supported on Linux and MacOSX." 72fi 73 74 75# Make sure this runs from the sdk/eclipse plugin. 76D=`dirname "$0"` 77cd "$D/.." 78[ `basename "$PWD"` == "eclipse" ] || dieWithUsage "Please run this script from the sdk/eclipse directory" 79 80# check for number of parameters 81[ $# -lt 1 ] && dieWithUsage "ERROR: Not enough parameters" 82 83# check if ECLIPSE_HOME set (ECLIPSE_HOME is were the "eclipse" binary and the 84# "plugins" sub-directory are located) 85if [ -z "$ECLIPSE_HOME" ]; then 86 BASE_DIR=/buildbot/eclipse-android 87 88 echo "ECLIPSE_HOME not set, using $BASE_DIR as default" 89 90 if [ ! -d "$BASE_DIR" ]; then 91 mkdir -p "$BASE_DIR" || die "Please create a directory $BASE_DIR where Eclipse will be installed, i.e. execute 'mkdir -p $BASE_DIR && chown $USER $BASE_DIR'." 92 fi 93 94 # download the version if not available 95 VERSION="3.6.2" 96 BASE_DIR="$BASE_DIR/$VERSION" 97 scripts/setup_eclipse.sh -p "$BASE_DIR" 98 99 ECLIPSE_HOME="$BASE_DIR/eclipse" # path to installed directory 100 PID_FILE="$BASE_DIR/eclipse.pid" 101 [ -f "$PID_FILE" ] && ECLIPSE_PID=`cat "$PID_FILE"` 102fi 103 104echo "PWD=`pwd`" 105echo "ECLIPSE_HOME=$ECLIPSE_HOME" 106 107# 108# -- Site parameters and Build version -- 109# 110 111BUILD_VERSION="$1" ; shift 112 113# parse for build internal site flag. If set, pass in internalSite property to ant scripts 114if [ "-i" == "$1" ]; then 115 shift 116 echo "Setting for internal site build" 117 SITE_PARAM="-DinternalSite=1 -DupdateSiteSource=$PWD/sites/internal" 118else 119 SITE_PARAM="-DupdateSiteSource=$PWD/sites/external" 120fi 121 122if [ "-d" == $1 ]; then 123 shift 124 echo "Setting destination directory to $1" 125 SITE_PARAM="$SITE_PARAM -DupdateSiteRoot=$1" 126 shift 127fi 128 129if [ "-a" == "$1" ]; then 130 shift 131 echo "Setting archivePrefix to $1" 132 SITE_PARAM="$SITE_PARAM -DarchivePrefix=$1" 133 shift 134fi 135 136 137# 138# -- Configuration directory -- 139# 140 141# The "configuration directory" will hold the workspace for this build. 142# If it contains old data the build may fail so we need to clean it first 143# and create it if it doesn't exist. 144CONFIG_DIR="../../out/eclipse-configuration-$BUILD_VERSION" 145[ -d "$CONFIG_DIR" ] && rm -rfv "$CONFIG_DIR" 146mkdir -p "$CONFIG_DIR" 147 148# The "buildConfig" directory contains our customized ant rules 149BUILDCONFIG="$PWD/buildConfig" 150 151 152# 153# -- Find Eclipse Launcher -- 154# 155 156# Get the Eclipse launcher and build script to use 157function findFirst() { 158 for i in "$@"; do 159 if [ -f "$i" ]; then 160 echo "$i" 161 return 162 fi 163 done 164} 165 166LAUNCHER=`findFirst "$ECLIPSE_HOME"/plugins/org.eclipse.equinox.launcher_*.jar` 167BUILDFILE=`findFirst "$ECLIPSE_HOME"/plugins/org.eclipse.pde.build_*/scripts/build.xml` 168 169# make sure we found valid files 170if [ ! -f "$LAUNCHER" ]; then 171 echo "Installation Error: Eclipse plugin org.eclipse.equinox.launcher...jar not detected. " \ 172 "Found '$LAUNCHER'. Aborting." 173 exit 1 174fi 175if [ ! -f "$BUILDFILE" ]; then 176 echo "Installation Error: Eclipse build file org.eclipse.pde.build_.../scripts/build.xml " \ 177 "not detected. Found '$BUILDFILE'. Aborting." 178 exit 1 179fi 180 181# 182# Ensure that the src dir exists since it's empty 183# 184mkdir -p $PWD/plugins/com.android.ide.eclipse.adt.overlay/src 185 186# 187# -- Print configuration used and actually execute the build -- 188# 189 190echo "Eclipse configuration found:" 191echo " Eclipse Home: $ECLIPSE_HOME" 192echo " Launcher: $LAUNCHER" 193echo " Build File: $BUILDFILE" 194echo " Build Config: $BUILDCONFIG" 195echo " Config Dir: $CONFIG_DIR" 196echo " Java: " $(which java) 197java -version 198 199# clean input directories to make sure there's nothing left from previous run 200 201rm -fv *.properties *.xml 202find . -name "@*" | xargs rm -rfv 203 204# Now execute the ant runner 205 206set +e # don't stop on errors anymore, we want to catch them here 207set -x 208 209java \ 210 -jar $LAUNCHER \ 211 -data "$CONFIG_DIR" \ 212 -configuration "$CONFIG_DIR" \ 213 -application org.eclipse.ant.core.antRunner \ 214 -buildfile $BUILDFILE \ 215 -Dbuilder=$BUILDCONFIG \ 216 -DbuildDirectory=$PWD \ 217 -DforceContextQualifier=$BUILD_VERSION \ 218 -DECLIPSE_HOME=$ECLIPSE_HOME \ 219 -Dbaseos=$BASEOS \ 220 -Dbasews=$BASEWS \ 221 -Dbasearch=$BASEARCH \ 222 $SITE_PARAM 223RESULT=$? 224set +x 225 226if [ "0" != "$RESULT" ]; then 227 echo "JAVA died with error code $RESULT" 228 echo "Dump of build config logs:" 229 for i in "$CONFIG_DIR"/*.log; do 230 if [ -f "$i" ]; then 231 echo "----------------------" 232 echo "--- $i" 233 echo "----------------------" 234 cat "$i" 235 echo 236 fi 237 done 238fi 239 240# 241# -- Cleanup 242# 243 244if [ -n "$ECLIPSE_PID" ] && [ -f "$PID_FILE" ]; then 245 rm -fv "$PID_FILE" 246 kill -9 "$ECLIPSE_PID" 247fi 248 249# Remove build files left by Eclipse all behind 250rm -fv *.properties *.xml 251find . -name "@*" | xargs rm -rfv 252 253 254# we're done! 255