#!/usr/bin/env bash

# common variables used in scripts

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

# It is required to specify a top level directory, that will contain all else involved with build, control and output
BUILD_HOME=${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
JAVA_8_HOME=/shared/common/jdk1.8.0_x64-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=/home/data/httpd/archive.eclipse.org/eclipse/downloads/drops4/R-4.4.2-201502041700/eclipse-SDK-4.4.2-linux-gtk-x86_64.tar.gz
# in theory, could have a different version of eclipse be used for "tests" vs. "building".
# but, not for now.
FULL_TEST_FILENAME=${FULL_FILENAME}

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

LOG_URL=${hostForURL}/simrel/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_REPO=org.eclipse.simrel.tests
RELENG_TESTS_BUNDLE_DIR=org.eclipse.simrel.tests-bundle
RELENG_TESTS_PATH=bundles/${RELENG_TESTS_BUNDLE_DIR}
RELENG_TESTS_BUNDLE_ID=org.eclipse.simrel.tests
RELENG_TESTS_DIR=org.eclipse.simrel.tests

BUILD_TESTS_DIR=${BUILD_HOME}/${RELENG_TESTS_DIR}

# we use Java 6 by default. https://bugs.eclipse.org/bugs/show_bug.cgi?id=340267
# Now Java 8. https://bugs.eclipse.org/bugs/show_bug.cgi?id=463010
JAVA_HOME=${JAVA_8_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_44=${ECLIPSE_INSTALL}/eclipse44

ECLIPSE_HOME=${ECLIPSE_HOME_44}

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=${BUILD_HOME}/aggregation/final

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}

# 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.
# Note: put agentlocation outside of ${BUILD_ROOT} so we can better study/control effects of caching.
# --agentLocation ${BUILD_HOME}/p2cache
# Using an outside "agentLocation" *might* have been the cause of many "unpack" errors?
# Turned out, the problem was 'tmp' not defined before use. Try again?
# add this to production aggregtor app args only
# --production
AGGREGATOR_APP_BASE=--buildModel ${BUILD_MODEL_DIR}/simrel.b3aggr --buildRoot ${AGGREGATOR_RESULTS}  --eclipseLogLevel INFO --logLevel INFO --emailFromName ${release}Aggregator --logURL ${LOG_URL} --subjectPrefix ${release}Aggregation

AGGREGATOR_APP_ARGS_CLEAN_BUILD=${AGGREGATOR_APP_BASE}  --action CLEAN_BUILD

AGGREGATOR_APP_ARGS_BUILDONLY=${AGGREGATOR_APP_BASE}  --action BUILD

AGGREGATOR_APP_ARGS_VALIDATEONLY=${AGGREGATOR_APP_BASE} --action VALIDATE

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

# 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
# -Declipse.p2.mirrors=false
BUILDER_VM_ARGS=-Xmx1024m -Djava.io.tmpdir=${BUILD_HOME}/tmp  
#-Dorg.eclipse.update.jarprocessor.pack200=${JAVA_6_HOME}/jre/bin -Declipse.p2.mirrors=false
#-Dhttp.noProxyHosts="localhost|download.eclipse.org"

# default for BRANCH_BUILD is master, so for maintenance, build branch
# needs to be specified on command line, such as -DBRANCH_BUILD=Luna_maintenance
# These "origin" values, are highly dependendent on how defined
# on Hudson ... it assigns them "in order" that they are defined.
BRANCH_BUILD=master
TMPDIR_BUILD=sbbuild
BUILD_ORIGIN=origin
BRANCH_TOOLS=master
TMPDIR_TOOLS=sbtools
TOOLS_ORIGIN=origin1
BRANCH_TESTS=master
TESTS_ORIGIN=origin2
TMPDIR_TESTS=sbtests
CGITURL=http://git.eclipse.org/c/simrel
