#!/bin/sh

# This particular file is not used in production builds, 
# though there is a similar one (with same name) in main 
# directory that is. 

# If "local" users have this file on their path, 
# that is, in "someDirectory" on the users local path, 
# then the bash "include source" function will find that version
# first, instead of the "standard" eclipse production one.

# this file is intentionally named "shsource" to denote this is intended to 
# be included in other sh files, with "source" command, not 
# executed on its own. 

export BUILD_HOME=/home/shared/webtools

export DISPLAY=127.0.0.11:0

echo "remember to check X virtual frame buffer is running for headless JUnit testing";
ps -ef | grep Xvfb

# these are the required pre-req software needed, that is, directory names, 
# installed under the apps directroy, that is ${BUILD_HOME}/apps 
export JAVA_4_DIR="j2sdk1.4.2_15"
export JAVA_5_DIR="jdk1.5.0_09"
export ANT_DIR="apache-ant-1.7.0"
export CC_DIR_NAME="cruisecontrol-bin-2.7.1-RC3"

export BASEOS=linux
export BASEWS=gtk
export BASEARCH=x86


export LOCAL_BUILD_PROPERTIES_DIR=${BUILD_HOME}/localBuildProperties

# technically should not be needed for "local builds" ... but ... just in case. 
export STANDARD_PROPERTIES_DIR=${BUILD_HOME}/releng.control/standardMachineProperties

export BUILD_BUILDMASTER_EMAIL=davidw@davidw.raleigh.ibm.com
export BUILD_RETURN_NAME=davidwAtWork
export BUILD_RESULT_URL=http://davidw.raleigh.ibm.com:7777/cruisecontrol/buildresults
export BUILD_ALWAYS_TO_ADDRESS=david_williams@us.ibm.com

# for  builds on local machines, SKIPUSERS should be 'true' to avoid 
# notifying users about those builds on your local machine
export SKIPUSERS=true

# normally, cvs logging output can be "really quiet", but if problems, then it can be turned back on 
# to get more potentially diagnostic information
export CVS_QUIET=true
export CVS_REALLY_QUIET=false

# controls quietness of logging to console
# false means more output to console, true uses ant's logger
export USE_LOGGER=false

# contols ANT's quietness level
# true logs error and warnings only 
export USE_QUIET=false

# controls ANT's debug level
# setting to true will result in TONS of ouput
export USE_DEBUG=false

