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