mirror of
https://github.com/macports/mpbb.git
synced 2026-03-31 14:38:29 -07:00
git-svn-id: https://svn.macports.org/repository/macports/contrib/mpab@138758 d073be05-634f-4543-b044-5fe20cf6d1d6
139 lines
4.9 KiB
Bash
Executable File
139 lines
4.9 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# This is run in the chroot, so don't run yourself...
|
|
#
|
|
# Copyright (c) 2006,2008 Bryan L Blackburn. All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in
|
|
# the documentation and/or other materials provided with the
|
|
# distribution.
|
|
# 3. Neither the name Bryan L Blackburn, nor the names of any contributors
|
|
# may be used to endorse or promote products derived from this software
|
|
# without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
|
|
# AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
|
|
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
|
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
|
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
|
# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
|
|
if [[ -z "$PREFIX" ]]; then
|
|
PREFIX=/opt/local
|
|
fi
|
|
TCLSH=${PREFIX}/bin/port-tclsh
|
|
if [[ ! -x ${PREFIX}/bin/port-tclsh ]]; then
|
|
TCLSH=/usr/bin/tclsh
|
|
fi
|
|
|
|
function uninstallPorts()
|
|
{
|
|
installedPorts=`${PREFIX}/bin/port echo active | /usr/bin/awk '{print $1}'`
|
|
for uninstallPort in $installedPorts; do
|
|
echo "Deactivating $uninstallPort"
|
|
portOutput=`${PREFIX}/bin/port -dvf deactivate $uninstallPort 2>&1`
|
|
if [[ $? != 0 ]]; then
|
|
echo $portOutput
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
|
|
function cleanBuildStuff()
|
|
{
|
|
rm -rf ${PREFIX}/var/macports/build/*
|
|
uninstallPorts
|
|
if [[ $? != 0 ]]; then
|
|
echo "Uninstall failed, aborting"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
cleanBuildStuff
|
|
PORTRESULTSDIR="/var/tmp/portresults"
|
|
PROGRESSLOG="/var/tmp/progress.log"
|
|
FAILCACHE="/var/tmp/failcache"
|
|
rm -rf ${PORTRESULTSDIR}
|
|
/bin/mkdir -p ${PORTRESULTSDIR}/success ${PORTRESULTSDIR}/fail
|
|
|
|
useFailCache=""
|
|
if [[ -f /var/tmp/portlist && `head -n1 /var/tmp/portlist` != "all" ]]; then
|
|
portList=`< /var/tmp/portlist $TCLSH /var/tmp/genportlist.tcl -`
|
|
else
|
|
portList=`$TCLSH /var/tmp/genportlist.tcl`
|
|
useFailCache=1
|
|
fi
|
|
/bin/rm -f /var/tmp/portlist
|
|
|
|
portCount=`echo ${portList} | /usr/bin/wc -w`
|
|
portCount=$(($portCount)) # Get rid of wc's spacing
|
|
|
|
shopt -s extglob
|
|
|
|
currentCount=1
|
|
for portName in ${portList}; do
|
|
trap "echo \"Canceled, cleaning up...\"; cleanBuildStuff" EXIT
|
|
|
|
echo "Building ${portName} (${currentCount} of ${portCount})...\c" | tee -a ${PROGRESSLOG}
|
|
# If there's a package, don't build again
|
|
if [[ -f `$TCLSH /var/tmp/archivepath.tcl $portName` ]]; then
|
|
echo "package found, not building again" | tee -a ${PROGRESSLOG} | tee ${PORTRESULTSDIR}/success/${portName}.log
|
|
else
|
|
skipPort=""
|
|
portFile=`${PREFIX}/bin/port file ${portName}`
|
|
if [[ -n "$useFailCache" && ! "$portFile" -nt "${FAILCACHE}/${portName}" ]]; then
|
|
echo "skipping, portfile not modified since last failure" | tee -a ${PROGRESSLOG} | tee ${PORTRESULTSDIR}/fail/${portName}.log
|
|
skipPort=1
|
|
else
|
|
for oneDep in `$TCLSH /var/tmp/dep_ports.tcl $portName`; do
|
|
if [[ -f ${PORTRESULTSDIR}/fail/${oneDep}.log ]]; then
|
|
skipPort=1
|
|
echo "skipping, $oneDep previously failed and is needed" | tee -a ${PROGRESSLOG}
|
|
echo "${portName} not built due to failed dependency $oneDep" > ${PORTRESULTSDIR}/fail/${portName}.log
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
if [[ -z "$skipPort" ]]; then
|
|
${PREFIX}/bin/port -dv install $portName | tee ${PORTRESULTSDIR}/${portName}.log 2>&1
|
|
if [[ ${PIPESTATUS[0]} == 0 ]]; then
|
|
/bin/mv ${PORTRESULTSDIR}/${portName}.log ${PORTRESULTSDIR}/success
|
|
echo "success" | tee -a ${PROGRESSLOG}
|
|
rm -f ${FAILCACHE}/${portName}
|
|
else
|
|
/bin/mv ${PORTRESULTSDIR}/${portName}.log ${PORTRESULTSDIR}/fail
|
|
echo "failure" | tee -a ${PROGRESSLOG}
|
|
${PREFIX}/bin/port clean --work $portName rdepof:${portName}
|
|
touch -r ${portFile} ${FAILCACHE}/${portName}
|
|
fi
|
|
uninstallPorts
|
|
if [[ $? != 0 ]]; then
|
|
echo "Uninstall failed, aborting"
|
|
exit 2
|
|
fi
|
|
fi
|
|
fi
|
|
currentCount=$((${currentCount}+1))
|
|
done
|
|
|
|
trap "" EXIT
|
|
|
|
cleanBuildStuff
|
|
|
|
exit 0
|
|
|