#!/bin/sh BUILDDIR=${BUILDDIR:-/usr/build} LOCALBASE=${LOCALBASE:-/usr/local} PORTSDIR=${PORTSDIR:-/usr/ports} PORT_DBDIR=${PKG_DBDIR:-$BUILDDIR/db_ports} PKG_DBDIR=${PKG_DBDIR:-$BUILDDIR/db_pkg} PACKAGES=${PACKAGES:-$BUILDDIR/packages} MAKE="env LOCALBASE=$LOCALBASE PORTSDIR=$PORTSDIR PORT_DBDIR=$PORT_DBDIR PKG_DBDIR=$PKG_DBDIR PACKAGES=$PACKAGES make" set -e mkdir -p $BUILDDIR $LOCALBASE $PKG_DBDIR $PACKAGES port2name() { echo $1 | sed 's|[/.-]|_|g' } port2pkg() { local pkg_name= local port= port=$1; shift eval pkg_name=PKG$(port2name $port) eval pkg=\$$pkg_name if [ -z "$pkg" ] then pkg=$($MAKE -C $port -V PKGNAME) eval $pkg_name=$pkg fi } depends() { local depend= local depends_name= local _deps= local name= local port= port=$1 eval depends_name=DEPEND$(port2name $port) eval deps=\"\$$depends_name\" if [ -z "$deps" ] then echo "Getting dependancies for $port" > /dev/stderr depend_list="$($MAKE -C $port -V BUILD_DEPENDS -V LIB_DEPENDS -V RUN_DEPENDS)" for depend in $depend_list do name=$(echo $depend | cut -f 2 -d ':') depends $name _deps="$_deps $deps $name" done deps=$(for depend in $_deps do echo $depend done | sort -u) depends_name=$depends_name eval $depends_name=\"$deps \" fi } build() { local _deps= local dep= local port= port=$1 depends $port _deps="$deps" for dep in $_deps do port2pkg $dep if [ ! -d $BUILDDIR/$pkg ] then if ! build $dep then echo "Port $port failed due to dependancy $dep" return 255 fi fi done echo "Building port $port..." for pkg in $_deps do port2pkg $pkg mount -t unionfs -r -o noatime $BUILDDIR/$pkg $LOCALBASE done port2pkg $port mkdir -p $BUILDDIR/$pkg mount -t unionfs -o noatime $BUILDDIR/$pkg $LOCALBASE set +e trap "true" INT TERM EXIT $MAKE -C $port clean build install package -DNO_DEPENDS -DBATCH status=$? trap - INT TERM EXIT set -e umount $LOCALBASE for pkg in $(echo $_deps | sort -r) do #port2pkg $pkg umount $LOCALBASE done if [ $status -ne 0 ] then echo "Port $port failed to build" rm -rf $BUILDDIR/$pkg || (chflags -R 0 $BUILDDIR/$pkg; rm -rf $BUILDDIR/$pkg) else $MAKE -C $port clean fi return $status } build /usr/ports/x11/xorg