#!/usr/bin/env bash

# default definitions for this branch

# this buildeclipse.shsource file is to ease local builds to override some variables. 
# It should not be used for production builds.
source buildeclipse.shsource 2>/dev/null
export BUILD_HOME=${BUILD_HOME:-/shared/eclipse/builds}

export BRANCH=${BRANCH:-master}
export STREAM=${STREAM:-4.4.0}
export BUILD_TYPE=${BUILD_TYPE:-N}

eclipseStreamMajor=${STREAM:0:1}

export BUILD_ROOT=${BUILD_ROOT:-${BUILD_HOME}/${eclipseStreamMajor}${BUILD_TYPE}}

# Any invocation of Java, Ant, Maven, etc., should use this as default TMP direcotory, 
# instead of the default /tmp by using 
# -Djava.io.tmpdir=${TMP_DIR}
export TMP_DIR=${TMP_DIR:-${BUILD_ROOT}/tmp}
# Just in case it doesn't exist yet (it must exist first, or Java will fail)
mkdir -p ${TMP_DIR}

# these could be machine specific
export JAVA_HOME=${JAVA_HOME:-/shared/common/jdk1.7.0-latest}
# required for when ant is used. Unclear how maven's "antrun" finds its version of Ant, 
# built in? Or system path? 
# But, without the ANT_OPTS, we do get messages about "to get repeatable builds, to ignore sysclasspath"
export ANT_HOME=${ANT_HOME:-/shared/common/apache-ant-1.9.2}
export ANT_OPTS=${ANT_OPTS:-"-Dbuild.sysclasspath=ignore -Dincludeantruntime=false"}
#
# remember, MaxPermSize is specific to "Oracle VMs". It has to be removed (or over ridden) 
# for other VMs or the VM might fail to start due to unrecognized -XX option. 
export MAVEN_OPTS=${MAVEN_OPTS:--Xmx2560m -XX:MaxPermSize=256M -Djava.io.tmpdir=${TMP_DIR} -Dtycho.localArtifacts=ignore -Declipse.p2.mirrors=false}
export MAVEN_PATH=${MAVEN_PATH:-/shared/common/apache-maven-3.1.0/bin}

export PATH=$JAVA_HOME/bin:$MAVEN_PATH:$ANT_HOME/bin:$PATH

# if not defined "externally", we use default for eclipse.org
if [[ -z "${REPO_AND_ACCESS}" ]]
then
    # unless we are on 'build' machine
    if [[ "build" == "$(hostname)" ]]
    then
        export REPO_AND_ACCESS=file:///gitroot
    else
        export REPO_AND_ACCESS=git://git.eclipse.org/gitroot
    fi
fi

AGGREGATOR_REPO=${REPO_AND_ACCESS}/platform/eclipse.platform.releng.aggregator.git

# Only used to start antrunner for tests. May not need here?
BASEBUILDER_TAG=R38M6PlusRC3G

B_GIT_EMAIL=e4Build@eclipse.org
B_GIT_NAME="E4 Build"
COMMITTER_ID=e4Build

# MVN_DEBUG=true means verbose; gives comparator info
export MVN_DEBUG=${MVN_DEBUG:-true}
export MVN_QUIET=${MVN_QUIET:-false}

# Need bree-libs for production builds
MAVEN_BREE=-Pbree-libs


# local, non build.eclipse.org builds (or, test builds) may need to override, and turn off signing.
# otherwwise, we always sign if I or M builds, but not N builds
# 
if [[ $BUILD_TYPE =~ [IMXY] ]]
then
    SIGNING=${SIGNING:-true}
else
    SIGNING=${SIGNING:-false}
fi
