#!/bin/sh
#
# This file needs to be customized to run on different machines or environments
# Note that if a file with this name exists in a directory named ${HOME}/ganymedeConfig,
# then that one will be be used. Otherwise, this one, in the "tools" project/directory
# will be used. This allows us to have a correct version for build.eclipse production
# builds checked into cvs, but allow individual users, on different machines, to
# customize based on their sytems.

# Reminder: make sure there are no trailing spaces on any of the value lines.

# BUILD HOME -- the top most directory where the work is being done. 
export GANYMEDE_BUILD_HOME=/shared/ganymede

# ANT
export ANT_HOME=/shared/common/apache-ant-1.7.0

# JAVA
export JAVA_HOME=/shared/common/ibm-java2-ppc-50
#      not sure the following are really needed?
export JAVA_BINDIR=${JAVA_HOME}/bin
export JAVA_ROOT=${JAVA_HOME}
export JDK_HOME=${JAVA_HOME}
export JRE_HOME=${JAVA_HOME}/jre

# Eclipse
#      where eclipse is installed
export ECLIPSE_HOME=/shared/orbit/apps/eclipse-RC3
#      the launcher may change version numbers, depending on the version of eclipse being used
export ECLIPSE_LAUNCHER=org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar

# Staging directory (used by both ant, and sh shells, so ganymatic.properties refers
# to this value, by default, for the ant property.
export GANYMEDE_STAGING=/home/data/httpd/download.eclipse.org/releases/ganymede/staging

# REMEMBER: use care in "deleting" this directory, since it also contains 'staging'
export GANYMEDE_RELEASE=/home/data/httpd/download.eclipse.org/releases/ganymede

# on production machine, it is cheap get all afresh
# on remote machine, may want to set to false to avoid long downloads
export CLEAN_CACHE=true

export GANYMATIC_WEBSITE_URL=http://build.eclipse.org/ganymede

# Leave unset if running on same machine as CVS, else give CVS info such as 
# export G_CVS_INFO=":pserver:anonymous@dev.eclipse.org:"
#export G_CVS_INFO=
# ssh and cvs write info required to tag maps, and must use a real id with ssh write access to cvs
export CVS_RSH=ssh 
export G_CVS_WRITE_INFO=":ext:david_williams@dev.eclipse.org:"

# export G_CVS_INFO=":pserver:anonymous@dev.eclipse.org:"

# this is branch where ganymede.tools are fetched. Almost always HEAD, 
# unless testing something in a temporary branch. 
export G_CVS_BRANCH=HEAD

# this is branch where ganymede.sitecontributions are fetched. Almost always HEAD. 
export G_CVS_SITE_CONTRIBUTIONS_TAG=HEAD

# email will be sent only if this variable is set to true
# which should be true for production machine, false for local test builds
export ENABLE_EMAIL=true

# site contributions and build.tools will be tagged with each successful build
# which should be true for production machine, false for local test builds
export TAG_PROJECTS=true

# this is used for tasks (e.g. signing, or similar) where we need to execute 
# a script from a valid committer ID, while running as orbitBuild.
# it should be blank or omitted in local builds
#export REMOTE_SSH_COMMAND="ssh david_williams@build.eclipse.org "
export REMOTE_SSH_COMMAND=
