#!/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_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}

# properties say what to consider eclipse home
ECLIPSE_HOME_44=${ECLIPSE_INSTALL}/eclipse44

ECLIPSE_HOME=${ECLIPSE_HOME_44}

ECLIPSE_HOME_TEST=${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=--production --buildModel ${BUILD_MODEL_DIR}/simrel.b3aggr --buildRoot ${AGGREGATOR_RESULTS} --eclipseLogLevel INFO --logLevel INFO --emailFrom david_williams@eclipse.org --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
#-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
CGITURL=http://git.eclipse.org/c/simrel

rewriteRepositoryURLValue=file://${REPO_ROOT}
