|  | #!/bin/bash | 
|  |  | 
|  | # build script for eclipse adt build on the Linux and Mac platforms | 
|  | # | 
|  | # Usage: sdk/eclipse/scripts/build_plugins <build_version> | 
|  | # | 
|  | # It expects environment variable ECLIPSE_HOME to be defined to point to _your_ | 
|  | # version of Eclipse RCP (must have the WTP & GEF plugins available too.) | 
|  | # | 
|  | # If ECLIPSE_HOME is not provided, this script will _download_ a reference version | 
|  | # of Eclipse RCP and install it in a specific location. | 
|  | # | 
|  | # Other properties, ant scripts that drive the build are defined in ./buildConfig | 
|  | # Currently, this script will create an update site at ${user.home}/www/no_crawl/android-build | 
|  | # or at the directory specified using "-d" | 
|  |  | 
|  | # Known Issues: | 
|  | # - Build does not properly clean up after itself (build server always executes from | 
|  | #   a clean state.) | 
|  | # - Script will fail if current absolute path has spaces in it. | 
|  | # - Only linux and OSX are supported for now | 
|  | # - Do NOT manually invoke this script. Instead use the build_server.sh wrapper | 
|  | #   which does some extra preliminary steps (it builds a few libs needed here.) | 
|  |  | 
|  |  | 
|  | set -e # abort this script early if any command fails | 
|  |  | 
|  | # | 
|  | # -- Utility methods -- | 
|  | # | 
|  |  | 
|  | function printUsage() { | 
|  | echo "Usage: $0 <build_qualifier> [-i] [-d <destination-directory>] [-a <archivePrefix>] " | 
|  | echo "<build_qualifier>: build qualifier string" | 
|  | echo "-i = build internal site. Otherwise, external site will be built" | 
|  | echo "-d = destination directory. Default is $USER/www/no_crawl/. Cannot contain spaces." | 
|  | echo "-a = archive prefix. Cannot contain spaces." | 
|  | } | 
|  |  | 
|  | function die() { | 
|  | echo $@ | 
|  | exit 1 | 
|  | } | 
|  |  | 
|  | function dieWithUsage() { | 
|  | echo $@ | 
|  | echo | 
|  | printUsage | 
|  | exit 1 | 
|  | } | 
|  |  | 
|  |  | 
|  | # | 
|  | # -- Setup our custom version of Eclipse -- | 
|  | # | 
|  |  | 
|  | # The dependency on the linux platform comes from a series of environment | 
|  | # variables that the eclipse ant runner expects. These are defined in the | 
|  | # build.properties file. We can easily support other platforms but would need | 
|  | # to override those values in this script. | 
|  | HOST=`uname` | 
|  | if [ "$HOST" == "Linux" ]; then | 
|  | BASEOS=linux | 
|  | BASEWS=gtk | 
|  | BASEARCH=x86 | 
|  | elif [ "$HOST" == "Darwin" ]; then | 
|  | BASEOS=macosx | 
|  | BASEWS=cocoa | 
|  | BASEARCH=x86 | 
|  | else | 
|  | die "ERROR: This script is currently only supported on Linux and MacOSX." | 
|  | fi | 
|  |  | 
|  |  | 
|  | # Make sure this runs from the sdk/eclipse plugin. | 
|  | D=`dirname "$0"` | 
|  | cd "$D/.." | 
|  | [ `basename "$PWD"` == "eclipse" ] || dieWithUsage "Please run this script from the sdk/eclipse directory" | 
|  |  | 
|  | # check for number of parameters | 
|  | [ $# -lt 1 ] && dieWithUsage "ERROR: Not enough parameters" | 
|  |  | 
|  | # check if ECLIPSE_HOME set (ECLIPSE_HOME is were the "eclipse" binary and the | 
|  | # "plugins" sub-directory are located) | 
|  | if [ -z "$ECLIPSE_HOME" ]; then | 
|  | BASE_DIR=/buildbot/eclipse-android | 
|  |  | 
|  | echo "ECLIPSE_HOME not set, using $BASE_DIR as default" | 
|  |  | 
|  | if [ ! -d "$BASE_DIR" ]; then | 
|  | 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'." | 
|  | fi | 
|  |  | 
|  | # download the version if not available | 
|  | VERSION="3.6.2" | 
|  | BASE_DIR="$BASE_DIR/$VERSION" | 
|  | scripts/setup_eclipse.sh -p "$BASE_DIR" | 
|  |  | 
|  | ECLIPSE_HOME="$BASE_DIR/eclipse"      # path to installed directory | 
|  | PID_FILE="$BASE_DIR/eclipse.pid" | 
|  | [ -f "$PID_FILE" ] && ECLIPSE_PID=`cat "$PID_FILE"` | 
|  | fi | 
|  |  | 
|  | echo "PWD=`pwd`" | 
|  | echo "ECLIPSE_HOME=$ECLIPSE_HOME" | 
|  |  | 
|  | # | 
|  | # -- Site parameters and Build version -- | 
|  | # | 
|  |  | 
|  | BUILD_VERSION="$1" ; shift | 
|  |  | 
|  | # parse for build internal site flag. If set, pass in internalSite property to ant scripts | 
|  | if [ "-i" == "$1" ]; then | 
|  | shift | 
|  | echo "Setting for internal site build" | 
|  | SITE_PARAM="-DinternalSite=1 -DupdateSiteSource=$PWD/sites/internal" | 
|  | else | 
|  | SITE_PARAM="-DupdateSiteSource=$PWD/sites/external" | 
|  | fi | 
|  |  | 
|  | if [ "-d" == $1 ]; then | 
|  | shift | 
|  | echo "Setting destination directory to $1" | 
|  | SITE_PARAM="$SITE_PARAM -DupdateSiteRoot=$1" | 
|  | shift | 
|  | fi | 
|  |  | 
|  | if [ "-a" == "$1" ]; then | 
|  | shift | 
|  | echo "Setting archivePrefix to $1" | 
|  | SITE_PARAM="$SITE_PARAM -DarchivePrefix=$1" | 
|  | shift | 
|  | fi | 
|  |  | 
|  |  | 
|  | # | 
|  | # -- Configuration directory -- | 
|  | # | 
|  |  | 
|  | # The "configuration directory" will hold the workspace for this build. | 
|  | # If it contains old data the build may fail so we need to clean it first | 
|  | # and create it if it doesn't exist. | 
|  | CONFIG_DIR="../../out/eclipse-configuration-$BUILD_VERSION" | 
|  | [ -d "$CONFIG_DIR" ] && rm -rfv "$CONFIG_DIR" | 
|  | mkdir -p "$CONFIG_DIR" | 
|  |  | 
|  | # The "buildConfig" directory contains our customized ant rules | 
|  | BUILDCONFIG="$PWD/buildConfig" | 
|  |  | 
|  |  | 
|  | # | 
|  | # -- Find Eclipse Launcher -- | 
|  | # | 
|  |  | 
|  | # Get the Eclipse launcher and build script to use | 
|  | function findFirst() { | 
|  | for i in "$@"; do | 
|  | if [ -f "$i" ]; then | 
|  | echo "$i" | 
|  | return | 
|  | fi | 
|  | done | 
|  | } | 
|  |  | 
|  | LAUNCHER=`findFirst "$ECLIPSE_HOME"/plugins/org.eclipse.equinox.launcher_*.jar` | 
|  | BUILDFILE=`findFirst "$ECLIPSE_HOME"/plugins/org.eclipse.pde.build_*/scripts/build.xml` | 
|  |  | 
|  | # make sure we found valid files | 
|  | if [ ! -f "$LAUNCHER" ]; then | 
|  | echo "Installation Error: Eclipse plugin org.eclipse.equinox.launcher...jar not detected. " \ | 
|  | "Found '$LAUNCHER'. Aborting." | 
|  | exit 1 | 
|  | fi | 
|  | if [ ! -f "$BUILDFILE" ]; then | 
|  | echo "Installation Error: Eclipse build file org.eclipse.pde.build_.../scripts/build.xml " \ | 
|  | "not detected. Found '$BUILDFILE'. Aborting." | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | # | 
|  | # Ensure that the src dir exists since it's empty | 
|  | # | 
|  | mkdir -p $PWD/plugins/com.android.ide.eclipse.adt.overlay/src | 
|  |  | 
|  | # | 
|  | # -- Print configuration used and actually execute the build -- | 
|  | # | 
|  |  | 
|  | echo "Eclipse configuration found:" | 
|  | echo "  Eclipse Home: $ECLIPSE_HOME" | 
|  | echo "  Launcher:     $LAUNCHER" | 
|  | echo "  Build File:   $BUILDFILE" | 
|  | echo "  Build Config: $BUILDCONFIG" | 
|  | echo "  Config Dir:   $CONFIG_DIR" | 
|  | echo "  Java:         " $(which java) | 
|  | java -version | 
|  |  | 
|  | # clean input directories to make sure there's nothing left from previous run | 
|  |  | 
|  | rm -fv *.properties *.xml | 
|  | find . -name "@*" | xargs rm -rfv | 
|  |  | 
|  | # Now execute the ant runner | 
|  |  | 
|  | set +e  # don't stop on errors anymore, we want to catch them here | 
|  | set -x | 
|  |  | 
|  | java \ | 
|  | -jar $LAUNCHER \ | 
|  | -data "$CONFIG_DIR" \ | 
|  | -configuration "$CONFIG_DIR" \ | 
|  | -application org.eclipse.ant.core.antRunner \ | 
|  | -buildfile $BUILDFILE \ | 
|  | -Dbuilder=$BUILDCONFIG \ | 
|  | -DbuildDirectory=$PWD \ | 
|  | -DforceContextQualifier=$BUILD_VERSION \ | 
|  | -DECLIPSE_HOME=$ECLIPSE_HOME \ | 
|  | -Dbaseos=$BASEOS \ | 
|  | -Dbasews=$BASEWS \ | 
|  | -Dbasearch=$BASEARCH \ | 
|  | $SITE_PARAM | 
|  | RESULT=$? | 
|  | set +x | 
|  |  | 
|  | if [ "0" != "$RESULT" ]; then | 
|  | echo "JAVA died with error code $RESULT" | 
|  | echo "Dump of build config logs:" | 
|  | for i in "$CONFIG_DIR"/*.log; do | 
|  | if [ -f "$i" ]; then | 
|  | echo "----------------------" | 
|  | echo "--- $i" | 
|  | echo "----------------------" | 
|  | cat "$i" | 
|  | echo | 
|  | fi | 
|  | done | 
|  | fi | 
|  |  | 
|  | # | 
|  | # -- Cleanup | 
|  | # | 
|  |  | 
|  | if [ -n "$ECLIPSE_PID" ] && [ -f "$PID_FILE" ]; then | 
|  | rm -fv "$PID_FILE" | 
|  | kill -9 "$ECLIPSE_PID" | 
|  | fi | 
|  |  | 
|  | # Remove build files left by Eclipse all behind | 
|  | rm -fv *.properties *.xml | 
|  | find . -name "@*" | xargs rm -rfv | 
|  |  | 
|  |  | 
|  | # we're done! |