#!/usr/bin/env bash

# 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 this "standard" eclipse production one.
# That is assuming users don't have "." on their path, which
# they shouldn't. Many systems assumes ${HOME}/bin is on the
# users path.

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

# the top directory of build-related directories
export BUILD_HOME=/shared/webtools

# the following does not commonly vary, but must be specified "early"
# so is specified in this file
export RELENG_CONTROL=${BUILD_HOME}/releng.control

# this variable must batch the screen number that Xvfb is using
export DISPLAY=127.0.0.1:1.0

# these should be full, abosolute path to the respective home directories
# on this particular build machine
export ANT_HOME=/shared/webtools/apps/apache-ant-1.7.0
export JAVA_4_HOME=/shared/webtools/apps/IBMJava2-SDK-1.4.2-10.0.ppc
export JAVA_5_HOME=/shared/webtools/apps/ibm-java2-sdk-5.0-6.0-linux-ppc
export JAVA_6_HOME=/shared/webtools/apps/ibm-java-ppc-606

#export CCDIR=/shared/webtools/apps/cruisecontrol-bin-2.8.1
export CCDIR=/shared/webtools/apps/cruisecontrol-bin-2.8.3-dev-c-eclipse.build-webtools

export BASEOS=linux
export BASEWS=gtk
export BASEARCH=ppc

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

# note: buildmaster email address should be "real" address
# that is subscribed to the mailing list, if you want to send
# mail to mailing lists.
export BUILD_BUILDMASTER_EMAIL=david.williams@eclipse.org
export BUILD_BUILDMASTER_RETURN_NAME=wtpBuilder
# use following for CC 2.7.1
#export BUILD_RESULT_URL=http://build.eclipse.org:7777/dashboard/build/detail
# use following for CC 2.7.2, 2.7.3
export BUILD_RESULT_URL=http://build.eclipse.org:7777/dashboard/tab/build/detail

export BUILD_ALWAYS_TO_ADDRESS=david_williams@us.ibm.com

export BUILD_SUBJECT_PREFIX=WTPBUILD:

# note: this file, notifyMapper.properties is not normally in cvs,
# to avoid "publishing" email addresses; but is maintained directly on
# the build server.
export EMAIL_PROPERTIES=${BUILD_HOME}/notification/notifyMapper.properties

# 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, 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=false

export DOWNLOAD_ROOT=/home/data/httpd/download.eclipse.org

# Here this variable, SKIP_JAR_SIGNING, should be false for
# production builds. But, the variable is set elsewhere to true,
# such as in cc_config, for the R2 builds.
# There is another variable, 'sign' in each components build.properties
# to allow components to be the final say to allow signing.
# This variable, SKIP_JAR_SIGNING, should always be true for
# "local" builds.
export SKIP_JAR_SIGNING=false

# this is used especially during signing, where we need to execute
# the signing script from a signer ID, while running as wtpBuild.
# should be blank or omitted in local builds
export REMOTE_SSH_COMMAND="ssh david_williams@build.eclipse.org "

export DASHBOARDHOST=206.191.52.34

# comment out WTP_XULRUNNER if no special version is required
# rarely needed. machine specific
export WTP_XULRUNNER=/shared/common/mozilla-xulrunner181-1.8.1.4-30.ppc
echo "WTP_XULRUNNER: " $WTP_XULRUNNER

export DASHBOARD_CONFIG=${RELENG_CONTROL}/dashboard-config.xml