#!/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
JAVA_5_HOME=/shared/webtools/apps/ibm-java2-sdk-5.0-12.1-linux-i386
JAVA_6_HOME=/shared/webtools/apps/ibm-java-sdk-6.0-8.1-linux-i386

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_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}

ECLIPSE_HOME_TEST=${BUILD_HOME}/testInstance/eclipse

# 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/eclipse

stagingDirectory=${REPO_ROOT}/releases/staging
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=--production --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

# add this to production aggregtor app args only
# --production

# NOTE: quotes needed in bash scripts ... NOT in ant properties! 
# -Declipse.p2.mirrors=false
# note that -Dhttp.noProxyHosts is probably not needed, but see bug 347103 
# https://bugs.eclipse.org/bugs/show_bug.cgi?id=347103
BUILDER_VM_ARGS=-vmargs -Xmx384m -Declipse.p2.mirrors=false -Dorg.eclipse.update.jarprocessor.pack200=${JAVA_6_HOME}/jre/bin -Dhttp.noProxyHosts="localhost|download.eclipse.org"


# 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:
