#!/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}/ganymedeConig,
# 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=/home/shared/ganymede

# ANT
export ANT_HOME=/home/shared/webtools/apps/apache-ant-1.7.0

# JAVA
export JAVA_HOME=/home/shared/webtools/apps/ibm-java2-i386-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=/home/shared/webtools/apps/eclipse-34M7
#      the launcher may change version numbers, depending on the version of eclipse being used
export ECLIPSE_LAUNCHER=org.eclipse.equinox.launcher_1.0.100.v20080501.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=${env.GANYMEDE_BUILD_HOME}/staging

#leave blank if on the same machine as cvs and direct file IO will be used
export G_CVS_INFO=":pserver:anonymous@dev.eclipse.org:"

# Almost always 'HOME' unless doing test work on a test branch
export G_CVS_BRANCH=david_williams_tempBranch

