#!/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 JAVA_7_HOME=${JAVA_7_HOME:-/shared/webtools/apps/ibm-java-i386-70}


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