#!/usr/bin/env bash

# common variables used in scripts

# It is required to specify a top level directory, that will contain all else involved with build, control and output
BUILD_HOME=/shared/indigo

# Java should be configured per machine,
# so this variable point to valid installs
# we "share" with orbits versions
JAVA_5_HOME=/shared/orbit/apps/ibm-java2-i386-50
JAVA_6_HOME=/shared/orbit/apps/ibm-java-i386-60

REPO_ROOT=/home/data/httpd/download.eclipse.org

# each machine needs valid path to an appropriate, local Eclipse SDK, for fresh re-installs (see "full_filename" below)
FULL_FILENAME_370=/home/data/httpd/download.eclipse.org/eclipse/downloads/drops/R-3.7-201106131736/eclipse-SDK-3.7-linux-gtk.tar.gz
FULL_FILENAME_362=/home/data/httpd/download.eclipse.org/eclipse/downloads/drops/R-3.6.2-201102101200/eclipse-SDK-3.6.2-linux-gtk.tar.gz

# note the "https" may have to be "http" on local, non production machines
hostForURL=https://hudson.eclipse.org
LOG_URL="${hostForURL}/hudson/view/Repository%20Aggregation/job/${JOB_NAME}/${BUILD_NUMBER}/console"




# ##################################
# typically the remaining variables not have to be
# changed on a local, non-production machine,
# as they just compute variables based on above, 
# or provide relatively machine-independent values.

BUILD_TOOLS=org.eclipse.indigo.tools
BUILD_TOOLS_DIR=${BUILD_HOME}/${BUILD_TOOLS}

BUILD_MODEL=org.eclipse.indigo.build
BUILD_MODEL_DIR=${BUILD_HOME}/${BUILD_MODEL}

RELENG_TOOLS=org.eclipse.indigo.tools

RELENG_TESTS=org.eclipse.indigo.tests
BUILD_TESTS_DIR=${BUILD_HOME}/${RELENG_TESTS}


# we use Java 6 by default. https://bugs.eclipse.org/bugs/show_bug.cgi?id=340267
JAVA_HOME=${JAVA_6_HOME}
JAVA_EXEC_DIR=${JAVA_HOME}/jre/bin
JAVA_CMD=${JAVA_EXEC_DIR}/java

# platform installs.
ECLIPSE_INSTALL=${BUILD_HOME}/prereqs

# properties say what to consider eclipse home
ECLIPSE_HOME_36=${ECLIPSE_INSTALL}/eclipse36
ECLIPSE_HOME_36_TEST=${ECLIPSE_INSTALL}/eclipse36Test
ECLIPSE_HOME_37=${ECLIPSE_INSTALL}/eclipse37
ECLIPSE_HOME_37_TEST=${ECLIPSE_INSTALL}/eclipse37Test

ECLIPSE_HOME=${ECLIPSE_HOME_36}

#ECLIPSE_HOME_TEST=${ECLIPSE_HOME_36_TEST}
ECLIPSE_HOME_TEST=${BUILD_HOME}/testInstance

stagingDirectory=${REPO_ROOT}/releases/maintenance
releaseDirectory=${REPO_ROOT}/releases/indigo
testRepoDirectory=${stagingDirectory}

ECLIPSE_EXE=${ECLIPSE_HOME}/eclipse/eclipse

# Holds the results of the build
BUILD_RESULTS=${BUILD_HOME}/buildresults
AGGREGATOR_RESULTS=${BUILD_HOME}/aggregation
TEST_RESULTS=${BUILD_HOME}/simrel

# remember, for ant, properties must be "read in" at beginning of ant build file to get variables expanded
# also, remember, shell scripts need quotes, but ant can not have them
AGGREGATOR_APP_BASE="--buildModel ${BUILD_MODEL_DIR}/indigo.b3aggr --buildRoot ${AGGREGATOR_RESULTS} --mirrorReferences --referenceExcludePattern .*/site.xml --packedStrategy UNPACK_AS_SIBLING --eclipseLogLevel INFO --logLevel DEBUG --trustedContributions Eclipse,Equinox  --emailFromName IndigoAggregator --logURL ${LOG_URL} --subjectPrefix IndigoAggregation"

# clean build
AGGREGATOR_APP_ARGS="${AGGREGATOR_APP_BASE}  --action CLEAN_BUILD"

AGGREGATOR_APP_ARGS_BUILDONLY="${AGGREGATOR_APP_BASE}  --action BUILD"

AGGREGATOR_APP_ARGS_VERIFYONLY="${AGGREGATOR_APP_BASE} --action VERIFY"

# only one or the other
# --mavenResult
# --trustedContributions Eclipse,Equinox

# NOTE: quotes needed in bash scripts ... NOT in ant properties! 
# -Declipse.p2.mirrors=false
BUILDER_VM_ARGS="-vmargs -Xmx384m -Dorg.eclipse.update.jarprocessor.pack200=${JAVA_6_HOME}/jre/bin"

# We use this redirection, so scripts only need to use "full_filename", but exact version controlled by properties
FULL_FILENAME=${FULL_FILENAME_362}

# typically CVS_INFO is ":pserver:anonymous@dev.eclipse.org:" but some advantage on production machine to use "local"
# CVS_INFO=:local: