#!/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 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 Linux issue?
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';

# continuous, routine builds should use, at least niceness 10
# on Thursdays, for rebuilds, etc., should use 5, or none, to make 
# sure we finish in timely manner
export JOB_NOT_NICE=0
export JOB_NICE=5
export JOB_NICER=10

export BUILD_INITIALIZED="true"



