#!/usr/bin/env bash

# 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. 

# Some things _have_ to go in this file, instead of being an ant property, 
# since they may be used outside the contect of ant (or, before ant get's started). 
# as one example, anything used directly in the cc_config.xml file has to be 
# provided as environment variable, since it can not import ant property files 
# like most ant project files can.

export BUILD_HOME=/home/shared/webtools

# the following does not really vary, but must be specified "early" 
export RELENG_CONTROL=${BUILD_HOME}/releng.control

export DISPLAY=127.0.0.1:11.0

# these should be full, abosolute path to the respective home directories
# on this particular build machine
export ANT_HOME=/home/shared/webtools/apps/apache-ant-1.7.0

export JAVA_4_HOME=/home/shared/webtools/apps/IBMJava2-142
export JAVA_5_HOME=/home/shared/webtools/apps/ibm-java2-i386-50
export JAVA_6_HOME=/home/shared/webtools/apps/ibm-java-i386-60
export JAVA_7_HOME=/home/shared/webtools/apps/ibm-java-i386-70


#export JAVA_4_HOME=/home/shared/webtools/apps/j2sdk1.4.2_15
#export JAVA_5_HOME=/home/shared/webtools/apps/jdk1.5.0_12

export CCDIR=/home/shared/webtools/apps/cruisecontrol-bin-2.7.2




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

# no local build properties, for production builds
# for local builds, this should be set to a real directory, 
# so meaningful properties can be set for that local machine.
# See the 'localBuildExample' directory for a starting example
export LOCAL_BUILD_PROPERTIES_DIR=${BUILD_HOME}/localBuildProperties

# note: buildmaster email address should be "real" address 
# that is subscribed to the mailing list, if you want to send 
# mail to mailing list. 
export BUILD_BUILDMASTER_EMAIL=ccc@us.ibm.com

export BUILD_BUILDMASTER_RETURN_NAME=davidwAtWork
export BUILD_RESULT_URL=http://davidw.raleigh.ibm.com:7777/dashboard/build/detail
export BUILD_ALWAYS_TO_ADDRESS=ccc@us.ibm.com
export FAILED_ADDRESS=ccc@us.ibm.com
export BUILD_SUBJECT_PREFIX=dw-build:

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

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

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

# should be true for production, false for local. 
# it can be set to true for local builds, but then the 
# properties in upload.properties need to be set to valid values.
export BUILD_UPLOAD=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
# TODO: if both of these are 'true' and error is generated by cvs ...
# saying you can't set both to true.
# we could put in some logic to prevent that, but ... CVS_QUIET is not that 
# useful as almost the same thing as default. See 
# https://bugs.eclipse.org/bugs/show_bug.cgi?id=256379
# So, I am eliminating cvs_quiet
# export CVS_QUIET=${CVS_QUIET:-true}
export CVS_REALLY_QUIET=${CVS_REALLY_QUIET:-true}
#   these cvs values need to have write access if 
#   tag.maps is true, as on production machine. 
#   This is the ID used to both read, and 
#   to tag releng map files.
#
#   Note: 
#   'ext' protocol typically requires 
#   environment variable CVS_RSH to be set to ssh
#   So, we just always do it. Can't imagine it'd hurt
#   if protocol was pserver, but could be removed in that 
#   case, if desired. 
export CVS_RSH=ssh 
export BUILD_CVS_READ_PROTOCOL=pserver
export BUILD_CVS_READ_USER=anonymous
export BUILD_CVS_WRITE_PROTOCOL=ext
export BUILD_CVS_WRITE_USER=<realcommitterID>
export BUILD_CVS_SERVER=dev.eclipse.org
export BUILD_CVS_ROOT=/cvsroot/webtools

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

export DOWNLOAD_ROOT=/var/www/html/buildhome/

