#!/usr/bin/env bash

# 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 RELENGXQUERY=webtools.maps/releng.incubator.xquery

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

