#!/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 RELENGINCUBATOR=webtools.maps/releng.incubator
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 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 "        ${bootclasspath}"
echo
echo "    JAVA_5_HOME: ${JAVA_5_HOME}"
echo "        ${bootclasspath_15}"
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

