#!/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/${env.JOB_NAME}/${env.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=${env.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}

# by default, the "jobs" area is under HUDSON_HOME. On eclipse.org build machine, 
# it has been convigured to be "shared". So we use hudson_home by default, if not set, but 
# on production machine, set it to /shared
# jobsHome=/shared

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