#!/usr/bin/env bash

# common variables used in build.xml script

# These values, and this file, is specific
# a non-production machine
#

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

BUILD_TOOLS=org.eclipse.helios.tools
BUILD_TOOLS_DIR=${BUILD_HOME}/${BUILD_TOOLS}

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

# Java should be configured per machine,
# so this variable point to valid installs
JAVA_5_HOME=/shared/webtools/apps/ibm-java2-sdk-5.0-12.1-linux-i386
JAVA_6_HOME=/shared/webtools/apps/ibm-java-sdk-6.0-8.1-linux-i386

# typically the remaining variables not have to be
# changed on a local, non-production machine,
# as they just compute variables based on others

# we use Java 5 by default
JAVA_HOME=${JAVA_5_HOME}
JAVA_EXEC_DIR=${JAVA_HOME}/jre/bin
JAVA_CMD=${JAVA_EXEC_DIR}/java


# platform installs.
ECLIPSE_INSTALL=${BUILD_HOME}/prereqs

# client script needs to say which to consider their eclipse home
#ECLIPSE_HOME_35=${ECLIPSE_INSTALL}/eclipse35
ECLIPSE_HOME_36=${ECLIPSE_INSTALL}/eclipse36
#ECLIPSE_HOME_37=${ECLIPSE_INSTALL}/eclipse37
ECLIPSE_HOME=${ECLIPSE_HOME_36}

#TODO
stagingDirectory=/home/data/httpd/download.eclipse.org/releases/maintenance
releaseDirectory=/home/data/httpd/download.eclipse.org/releases/helios

ECLIPSE_EXE=${ECLIPSE_HOME}/eclipse/eclipse

# Holds the results of the build
BUILD_RESULTS=${BUILD_HOME}/buildresults
AGGREGATOR_RESULTS=${BUILD_HOME}/aggregation
HYBRID_RESULTS=${BUILD_HOME}/hybrid

# These values are specific to non-production builds
#
#
#
#
#
#

#LOG_URL=https://${hostForURL}/hudson/view/Repository%20Aggregation/job/${env.JOB_NAME}/${env.BUILD_NUMBER}/console

AGGREGATOR_APP_ARGS="--buildModel "${BUILD_MODEL_DIR}"/helios.b3aggr --buildRoot ${AGGREGATOR_RESULTS} --mirrorReferences --referenceExcludePattern .*/site.xml --packedStrategy UNPACK_AS_SIBLING --eclipseLogLevel INFO --logLevel DEBUG --action CLEAN_BUILD --trustedContributions Eclipse,Equinox  --emailFromName HeliosAggregator  --logURL ${LOG_URL} --subjectPrefix HeliosAggregation"
HYBRID_APP_ARGS="--buildModel "${BUILD_MODEL_DIR}"/helios.b3aggr --buildRoot ${HYBRID_RESULTS} --mirrorReferences --referenceExcludePattern .*/site.xml --packedStrategy UNPACK_AS_SIBLING --mavenResult --logLevel DEBUG --eclipseLogLevel INFO --action CLEAN_BUILD --emailFromName HeliosAggregator --logURL ${LOG_URL} --subjectPrefix HeliosAggregation"

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

# add this to production aggregtor app args only
# --production


# -Declipse.p2.mirrors=false
BUILDER_VM_ARGS="-vmargs -Xmx384m -Dorg.eclipse.update.jarprocessor.pack200=${JAVA_5_HOME}/jre/bin"

# each machine needs valid path here
FULL_FILENAME_35=/home/data/httpd/download.eclipse.org/eclipse/downloads/drops/R-3.5.2-201002111343/eclipse-SDK-3.5.2-linux-gtk.tar.gz
FULL_FILENAME_36=/home/data/httpd/download.eclipse.org/eclipse/downloads/drops/R-3.6-201006080911/eclipse-SDK-3.6-linux-gtk.tar.gz
FULL_FILENAME_361=/home/data/httpd/download.eclipse.org/eclipse/downloads/drops/R-3.6.1-201009090800/eclipse-SDK-3.6.1-linux-gtk.tar.gz
FULL_FILENAME_37M3=/home/data/httpd/download.eclipse.org/eclipse/downloads/drops/S-3.7M3-201010281441/eclipse-SDK-3.7M3-linux-gtk.tar.gz
FULL_FILENAME_37M2=/home/data/httpd/download.eclipse.org/eclipse/downloads/drops/S-3.7M2a-201009211024/eclipse-SDK-3.7M2a-linux-gtk.tar.gz
FULL_FILENAME_37M1=/home/data/httpd/download.eclipse.org/eclipse/downloads/drops/S-3.7M1-201008051700/eclipse-SDK-3.7M1-linux-gtk.tar.gz
FULL_FILENAME=${FULL_FILENAME_361}

