#!/usr/bin/env bash

# common variables used in scripts

# ${release} is expected to be passed in from command line, such as 
# -Drelease=juno

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

# Java should be configured per machine,
# so this variable point to valid installs.

JAVA_6_HOME=/shared/common/jdk1.6.0-latest
JAVA_7_HOME=/shared/common/jdk1.7.0-latest

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_422=/home/data/httpd/download.eclipse.org/eclipse/downloads/drops4/R-4.2.2-201302041200/eclipse-platform-4.2.2-linux-gtk-x86_64.tar.gz
FULL_FILENAME_430=/home/data/httpd/archive.eclipse.org/eclipse/downloads/drops4/S-4.3M5a-201302041400/eclipse-platform-4.3M5a-linux-gtk-x86_64.tar.gz

# note the "https" may have to be "http" on local, non production machines
#hostForURL=https://hudson.eclipse.org
hostForURL=http://localhost

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.simrel.tools
BUILD_TOOLS_DIR=${BUILD_HOME}/${BUILD_TOOLS}

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

RELENG_TESTS=org.eclipse.simrel.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_42=${ECLIPSE_INSTALL}/eclipse42

ECLIPSE_HOME=${ECLIPSE_HOME_42}

ECLIPSE_HOME_TEST=${BUILD_HOME}/testInstance
ECLIPSE_TEST_EXE=${ECLIPSE_HOME_TEST}/eclipse/eclipse

# note, stagingsegment must be set before this file is "read" by ant
# and then ant will set stagingDirectory correctly
stagingDirectory=${REPO_ROOT}/releases/${stagingsegment}
releaseDirectory=${REPO_ROOT}/releases/${release}
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}

# 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}/simrel.b3aggr --buildRoot ${AGGREGATOR_RESULTS}  --packedStrategy UNPACK_AS_SIBLING --eclipseLogLevel INFO --logLevel DEBUG --emailFromName ${release}Aggregator --logURL ${LOG_URL} --subjectPrefix ${release}Aggregation

# clean build
#we will clean the aggregation directory ourselves, as work around for bug 354321
#AGGREGATOR_APP_ARGS=${AGGREGATOR_APP_BASE}  --action CLEAN_BUILD
AGGREGATOR_APP_ARGS=${AGGREGATOR_APP_BASE}  --action 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 -Xmx1024m -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_430}

# default for BRANCH_BUILD is master, so for maintenance, build branch 
# needs to be specified on command line, such as -DBRANCH_BUILD=Juno_maintenance  
BRANCH_BUILD=master
TMPDIR_BUILD=sbbuild
BRANCH_TOOLS=master
TMPDIR_TOOLS=sbtools
BRANCH_TESTS=master
TMPDIR_TESTS=sbtests
#CGITURL=http://davidw.com/git
CGITURL=http://git.eclipse.org/c/simrel

# should be '/aggregate' if using "trusted repos" ... else, empty
#AGGR=/aggregate
AGGR=