#!/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_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_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!
#
# 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=MarsRC1-branch
TESTS_ORIGIN=origin2
TMPDIR_TESTS=sbtests
CGITURL=http://git.eclipse.org/c/simrel
