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

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




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=david_williams@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=david_williams@us.ibm.com
export FAILED_ADDRESS=wtp-releng@eclipse.org

# 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

# if true, locally existing maps will be used as is, instead of being 
# checked out afresh. Set to false for production builds, so maps are 
# always fresh.
export USE_LOCAL_MAPS=false

# 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, someday. 
export CVS_QUIET=true
export 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=david_williams
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

