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

# Note that throughout this file, the syntax of ${var:-default} is used so that 
# if a user has overridden the value, then the value will not be "re assigned" to the 
# default value ... but, if the variable has not been set yet, the default value will be 
# used. The default value should always be correct for the production machine, 
# "local" builds will need to override most of them, but not necessarily all. 

# 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=${BUILD_HOME:-/shared/webtools}

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

# this variable must batch the screen number that Xvfb is using
export DISPLAYNUMBER=${DISPLAYNUMBER:-9}
export DISPLAY=${DISPLAY:-127.0.0.1:$DISPLAYNUMBER.0}

# these should be full, abosolute path to the respective home directories
# on this particular build machine
export ANT_HOME=${ANT_HOME:-/shared/webtools/apps/apache-ant-1.8.2}
export JAVA_4_HOME=${JAVA_4_HOME:-/shared/webtools/apps/IBMJava2-SDK-1.4.2-13.5}
export JAVA_5_HOME=${JAVA_5_HOME:-/shared/webtools/apps/ibm-java2-sdk-5.0-12.1-linux-i386}
export JAVA_6_HOME=${JAVA_6_HOME:-/shared/webtools/apps/ibm-java-sdk-6.0-8.1-linux-i386}


export CCDIR=${CCDIR:-/shared/webtools/apps/cruisecontrol-bin-2.8.4}

export BASEOS=${BASEOS:-linux}
export BASEWS=${BASEWS:-gtk}
export BASEARCH=${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=${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=${BUILD_BUILDMASTER_EMAIL:-david.williams@eclipse.org}
export BUILD_BUILDMASTER_RETURN_NAME=${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=${BUILD_RESULT_URL:-http://build.eclipse.org:7777/dashboard/tab/build/detail}

export BUILD_ALWAYS_TO_ADDRESS=${BUILD_ALWAYS_TO_ADDRESS:-david_williams@us.ibm.com}

export BUILD_SUBJECT_PREFIX=${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=${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=${USE_LOGGER:-true}

#contols ANT's quietness level
# true logs error and warnings only
export USE_QUIET=${USE_QUIET:-true}

# controls ANT's debug level
# setting to true will result in TONS of ouput
export USE_DEBUG=${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=${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=${CVS_RSH:-ssh}
export BUILD_CVS_READ_PROTOCOL=${BUILD_CVS_READ_PROTOCOL:-pserver}
export BUILD_CVS_READ_USER=${BUILD_CVS_READ_USER:-anonymous}
export BUILD_CVS_WRITE_PROTOCOL=${BUILD_CVS_WRITE_PROTOCOL:-ext}
export BUILD_CVS_WRITE_USER=${BUILD_CVS_WRITE_USER:-david_williams}
export BUILD_CVS_SERVER=${BUILD_CVS_SERVER:-dev.eclipse.org}

export BUILD_CVS_ROOT=${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=${SKIPUSERS:-false}

export DOWNLOAD_ROOT=${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=${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=${REMOTE_SSH_COMMAND:-"ssh david_williams@build.eclipse.org "}

export DASHBOARDHOST=${DASHBOARDHOST:-206.191.52.34}

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

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


# global VM options
# see following for general information about setting env variables that effect IBM's JVM
# http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.50/diag/appendixes/env_var/env_jvm.html

# see https://bugs.eclipse.org/bugs/show_bug.cgi?id=324983
# -Declipse.p2.mirrors=false

# see https://bugs.eclipse.org/bugs/show_bug.cgi?id=323876
# -Dcom.ibm.tools.attach.enable=no

export IBM_JAVA_OPTIONS=${IBM_JAVA_OPTIONS:-"-Dcom.ibm.tools.attach.enable=no -Declipse.p2.mirrors=false"}

export ECLIPSE_HOME=${ECLIPSE_HOME:-"/shared/webtools/apps/eclipse361/eclipse"}
export ECLIPSE_EXE=${ECLIPSE_EXE:-"${ECLIPSE_HOME}/eclipse"}
