#!/usr/bin/env bash

# common variables used in utility scripts
# (note: at this point, not all are necessarily used)

# the top level directory, that should "contain" all else involved with build, control and output
export BUILD_HOME=/shared/helios
# a common variation for someone doing a local build on their own machine
#export BUILD_HOME=${HOME}


RELENG_TOOLS=org.eclipse.helios.tools
RELENG_TESTS=org.eclipse.helios.tests

# platform install. One level above what will contain the 'eclipse' directory.
export ECLIPSE_INSTALL=${BUILD_HOME}/prereqs
export ECLIPSE_HOME=${ECLIPSE_INSTALL}/eclipse
export ECLIPSE_INSTALL_TEST=${BUILD_HOME}/tests
export ECLIPSE_HOME_TEST=${ECLIPSE_INSTALL_TEST}/eclipse

# common location to store pre-reqs to avoid re-downloading Platforms, etc.
export PREREQS_CACHE=${BUILD_HOME}/prereqsCache


export ANT_HOME=/shared/common/apache-ant-1.7.1

export JAVA_5_HOME=/shared/common/ibm-java2-ppc-50
export JAVA_6_HOME=/shared/common/ibm-java-ppc-60

export JAVA_HOME=${JAVA_5_HOME}

export JAVA_EXEC_DIR=${JAVA_HOME}/jre/bin/

stagingDirectory=/home/data/httpd/download.eclipse.org/releases/staging
releaseDirectory=/home/data/httpd/download.eclipse.org/releases/helios

# Holds a list of dated directories, each with a build result
BUILD_RESULTS=${BUILD_HOME}/aggregation

#Note: this directory on build.eclipse.org has an alias so that
#it is accessible as a pseudo update site via this URL: 
#http://build.eclipse.org/helios/staging/

#It can not really be used as an update site
#as an update site, since the mirror URLs in the 
#artifacts.jar and content.jar are set to the 
#eventual /releases/helios. 
#It can be used, however, to make sure categories are 
#showing up correctly. 
