#!/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-142}
export JAVA_5_HOME=${JAVA_5_HOME:-/shared/webtools/apps/ibm-java2-i386-50}
export JAVA_6_HOME=${JAVA_6_HOME:-/shared/webtools/apps/ibm-java-i386-60}


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:-ccc@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}

# Note: a real committer id is required to tag map files. 
# This is hard to do automatically, running under wtpBuild user id. 
# if anonymous is used, no tagging of map files will be attempted.
# export BUILD_CVS_WRITE_PROTOCOL=${BUILD_CVS_WRITE_PROTOCOL:-ext}
# export BUILD_CVS_WRITE_USER=${BUILD_CVS_WRITE_USER:-realCommitterID}
export BUILD_CVS_WRITE_PROTOCOL=${BUILD_CVS_WRITE_PROTOCOL:-pserver}
export BUILD_CVS_WRITE_USER=${BUILD_CVS_WRITE_USER:-anonymous}

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}

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"}
