#!/bin/sh # $FreeBSD: ports/Tools/portbuild/scripts/buildenv,v 1.36 2010/12/16 07:38:18 linimon Exp $ # # Set up the build variables which are used by a given build. Some # of the code here is common to both clients and server; some is # particular to each. # get the major branch number. only used on server side. get_branch_base() { strippedbranch=${1%%[-\.]*} branchbase=`echo $strippedbranch | grep ${SRC_BRANCHES_PATTERN}` echo ${branchbase} } # only used on server side validate_env() { arch=$1 branch=$2 valid_arch=0 for i in ${SUPPORTED_ARCHS}; do if [ ${i} = ${arch} ]; then valid_arch=1 break fi done if [ $valid_arch = 0 ]; then echo "Invalid arch: ${arch}" return 1 fi branchbase=$(get_branch_base ${branch}) if [ -z "${branchbase}" ]; then echo "Invalid branch: ${branch}" return 1 fi return 0 } # only used on server side resolve() { pbd=$1 arch=$2 branch=$3 buildid=$4 # Resolve a possibly symlinked buildid (e.g. "latest") to the # underlying physical directory pbab=${pbd}/${arch}/${branch} builddir=${pbab}/builds/${buildid}/ if [ ! -d ${builddir} ]; then return 1 else builddir=$(realpath ${builddir}) fi buildid=${builddir%/} buildid=${buildid##*/} echo ${buildid} } # derive the source tree metadata and export it. common to both client and server. export_src_metadata() { src_base=$1 if [ -f ${src_base}/sys/sys/param.h ]; then export OSVERSION=$(awk '/^#define __FreeBSD_version/ {print $3}' < ${src_base}/sys/sys/param.h) else echo "export_src_metadata: couldn't find ${src_base}/sys/sys/param.h!" fi if [ -f ${src_base}/sys/conf/newvers.sh ]; then export OSREL=$(awk 'BEGIN {FS="\""}; /^REVISION/ {print $2}' < ${src_base}/sys/conf/newvers.sh) export BRANCH=$(awk 'BEGIN {FS="\""}; /^BRANCH/ {print $2}' < ${src_base}/sys/conf/newvers.sh) else echo "export_src_metadata: couldn't find ${src_base}/sys/conf/newvers.sh!" fi } # # establish commonly-used environment variables (server-side) # buildenv () { pbd=$1 arch=$2 branch=$3 builddir=$4 # set up things for INDEX/duds builds # first, don't pick up host OPTIONS export PORT_DBDIR=/nonexistent # Have to use realpath because 'make index' doesn't deal with # symlinks in PORTSDIR - kk 020311 if [ -d ${builddir}/ports/ ]; then export PORTSDIR=$(realpath ${builddir}/ports) else export PORTSDIR=/nonexistent fi if [ -d ${builddir}/src/ ]; then export SRC_BASE=$(realpath ${builddir}/src) else export SRC_BASE=/nonexistent fi export_src_metadata ${SRC_BASE} # for archs that support COMPAT_IA32, set some flags for INDEX. # Client kernels should be built appropriately. for i in ${ARCHS_SUPPORTING_COMPAT_IA32}; do if [ ${i} = ${arch} ]; then export HAVE_COMPAT_IA32_KERN="yes" export HAVE_COMPAT_IA32_LIBS="yes" break fi done buildenv.common ${arch} # override things destined for bsd.port.mk export DISTDIR=${builddir}/distfiles export PACKAGES=${builddir}/packages branchbase=$(get_branch_base ${branch}) if [ -z "${branchbase}" ]; then echo "buildenv: invalid branch ${branch}" exit 1 else export INDEXFILE=INDEX-${branchbase} fi # set make.conf. Consumed by both 'make index' and 'makeworld'. # First, must explicitly _unset_ pointyhat's native one. export __MAKE_CONF=/dev/null # allow for per-build make.conf if [ -f ${builddir}/make.conf.server ]; then export __MAKE_CONF=${builddir}/make.conf.server else # allow for per-arch make.conf if [ -f ${builddir}/make.conf ]; then export __MAKE_CONF=${pbd}/${arch}/make.conf fi fi # allow for per-build src.conf if [ -f ${builddir}/src.conf.server ]; then export SRCCONF=${builddir}/src.conf.server else export SRCCONF=/dev/null fi } # # establish commonly-used environment variables (client-side) # buildenv.client() { arch=$1 src_base=$2 # derive OSREL, OSVERSION, and BRANCH export_src_metadata ${src_base} # manually override results of uname(1) export UNAME_m=${arch} export UNAME_n=localhost export UNAME_p=${arch} export UNAME_r=${OSREL}-${BRANCH} export UNAME_s=FreeBSD export UNAME_v="FreeBSD ${OSREL}-${BRANCH} #0: $(date) nobody@localhost:/usr/src/sys/magic/kernel/path" } # # establish commonly-used environment variables (common to clients and server) # buildenv.common() { arch=$1 export ARCH=${arch} export MACHINE_ARCH=${arch} export BATCH=1 export PACKAGE_BUILDING=1 for i in ${ARCHS_REQUIRING_LINPROCFS}; do if [ ${i} = ${arch} ]; then export LINUX_OSRELEASE=${DEFAULT_LINUX_OSRELEASE} break fi done if [ ! -z "${OVERRIDE_LINUX_NONBASE_PORTS}" ]; then export OVERRIDE_LINUX_NONBASE_PORTS fi }