#!/bin/sh

# intentionally named "shsource" to denote this is intended to
# be included in other sh files, with "source" command, not
# executed on its own.

########################################################

export PROJECT_HOME=${BUILD_HOME}/releng.control

export ANT_WORKING=${BUILD_HOME}/logs
export BASE_BUILDERS=${BUILD_HOME}/basebuilders
export PROJECT_BUILDERS=${BUILD_HOME}/projectBuilders
# 	Set this to the relative path for the
# 	directory that keeps the downloaded drivers
#   and pre-reqs
export LOCAL_PREREQS_CACHE=${BUILD_HOME}/prereqsCache
# must match cacheRoot in CC's web.xml
export CACHE_ROOT=${BUILD_HOME}/logcache
# must correspond to what's specified in CC's web.xml file, and config
export LOG_DIR=${BUILD_HOME}/logs
export PROJECT_TESTS=${BUILD_HOME}/tests
export PROJECT_PROJECTS=${BUILD_HOME}/projects
# renamed from 'artifacts' to 'committers' to match downloads website.
export PROJECT_ARTIFACTS=${BUILD_HOME}/committers

export RECOMMENDED_TMP_DIR=${BUILD_HOME}/tmp

# in a fresh install, we need to make sure some basic directories exist
mkdir -p ${ANT_WORKING}
mkdir -p ${BASE_BUILDERS}
mkdir -p ${PROJECT_BUILDERS}
mkdir -p ${LOCAL_PREREQS_CACHE}
mkdir -p ${CACHE_ROOT}
mkdir -p ${LOG_DIR}
mkdir -p ${PROJECT_TESTS}
mkdir -p ${PROJECT_PROJECTS}
mkdir -p ${PROJECT_ARTIFACTS}
mkdir -p ${RECOMMENDED_TMP_DIR}


export RELENG_BUILDER=webtools.releng/releng.wtpbuilder

export RELENG=webtools.maps/releng
export RELENGJSF=webtools.maps/releng.jsf
export RELENGDALI=webtools.maps/releng.dali
export RELENGINCUBATORVEX=webtools.maps/releng.incubator.vex
export RELENGCOMMON=webtools.maps/releng.common
export RELENGEJBTOOLS=webtools.maps/releng.ejbtools
export RELENGJEETOOLS=webtools.maps/releng.jeetools
export RELENGSERVERTOOLS=webtools.maps/releng.servertools
export RELENGSOURCEEDITING=webtools.maps/releng.sourceediting
export RELENGWEBSERVICES=webtools.maps/releng.webservices
export RELENGXMLSEC=webtools.maps/releng.incubator.xmlsecurity
export RELENGJAXWS=webtools.maps/releng.incubator.jaxws
export RELENGPAVE=webtools.maps/releng.incubator.pave
export RELENGJSDT=webtools.maps/releng.jsdt

export RELENGDATATOOLS=webtools.maps/releng.datatools

# top most directory not used .. it's hard to, since projects
# use different branches.
#export RELENGMAPS=webtools.maps


# for now, always use Java 5 as native "home", but
# scripts and paths may still use java 1.4
export JAVA_HOME=${JAVA_5_HOME}

export PATH=${ANT_HOME}/bin:${JAVA_HOME}/bin:${PATH}

# project name is resolved dynamically, as CC runs
export LOG_DIR=${BUILD_HOME}/logs

# need for some PPC or Linux issues
export JAVA_HIGH_ZIPFDS=500

# for  builds on local machines, SKIPUSERS should be 'true' to avoid
# notifying users about those builds on your local machine
# but if not defined thus far, set to false for production build machine.
if [ -z ${SKIPUSERS} ]
then
	export SKIPUSERS=false;
fi

# We want everything in our processes to use UTC, even when we can't
# change the time or timezone on the build machine.
export TZ='UTC-0';

export BUILD_INITIALIZED="true"

if [ -z $MINIMIZE_SCRIPT_OUTPUT ]
then
echo
echo "    Project Home: ${PROJECT_HOME}"
echo "    Build Home: ${BUILD_HOME}"
echo "    DISPLAY: ${DISPLAY}"
echo
echo "    JAVA_4_HOME: ${JAVA_4_HOME}"
echo
echo "    JAVA_5_HOME: ${JAVA_5_HOME}"
echo
echo "    JAVA_6_HOME: ${JAVA_6_HOME}"
echo
echo "    ANT_HOME: ${ANT_HOME}"
echo
echo "    PATH: ${PATH}"
echo
echo "    BASEOS: ${BASEOS}"
echo "    BASEWS: ${BASEWS}"
echo "    BASEARCH: ${BASEARCH}"
echo
echo "    LOCAL_BUILD_PROPERTIES_DIR: ${LOCAL_BUILD_PROPERTIES_DIR}"
echo
echo "    remember to check that X virtual frame buffer is running for headless JUnit testing";
ps -ef | grep Xvfb
echo
fi

