mirror of
https://git.freebsd.org/ports.git
synced 2025-06-24 06:00:30 -04:00
234 lines
6 KiB
Bash
Executable file
234 lines
6 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# usage: $0 DIRNAME PHASE
|
|
# PHASE is 1 (checksum) or 2 (package)
|
|
|
|
cleanup() {
|
|
status=$1
|
|
|
|
if [ -e ${dir}/.keep ]; then
|
|
cd ${dir}
|
|
objdir=$(make -V WRKDIR)
|
|
tar cfjC /tmp/work.tbz ${objdir}/.. work
|
|
fi
|
|
|
|
cat /tmp/make.log${status}
|
|
echo 1 > /tmp/status
|
|
echo "================================================================"
|
|
echo -n "build ended at "
|
|
date
|
|
|
|
exit 0
|
|
}
|
|
|
|
add_pkg() {
|
|
pkgs=$*
|
|
|
|
echo add_pkg $pkgs
|
|
cd /tmp/depends
|
|
export PKG_PATH=/tmp/depends
|
|
if [ ! -z "${pkgs}" ]; then
|
|
echo "adding dependencies"
|
|
for i in $pkgs; do
|
|
echo "pkg_add $i"
|
|
base=$(basename $i .tgz)
|
|
base=$(basename $base .tbz)
|
|
if pkg_info -q -e $base; then
|
|
echo "skipping $base, already added"
|
|
else
|
|
if ! pkg_add $i; then
|
|
echo "error in dependency $i, exiting"
|
|
echo "1" > /tmp/status
|
|
exit 1
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
}
|
|
|
|
del_pkg() {
|
|
pkgs=$*
|
|
|
|
cd /tmp/depends
|
|
export PKG_PATH=/tmp/depends
|
|
if [ ! -z "${pkgs}" ]; then
|
|
unset delpkg
|
|
for i in $pkgs; do
|
|
base=$(basename $i .tgz)
|
|
base=$(basename $base .tbz)
|
|
if ! pkg_info -q -e $base; then
|
|
echo "skipping $base, already deleted"
|
|
else
|
|
delpkg="${base} ${delpkg}"
|
|
fi
|
|
done
|
|
echo "Deleting $delpkg"
|
|
if ! (echo ${delpkg} | xargs pkg_delete -f); then
|
|
echo "error in pkg_delete, exiting"
|
|
echo "1" > /tmp/status
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
dir=$1
|
|
phase=$2
|
|
|
|
ED=$3
|
|
PD=$4
|
|
FD=$5
|
|
BD=$6
|
|
RD=$7
|
|
|
|
if [ $phase = 1 ]; then
|
|
|
|
cd $dir || exit 1
|
|
echo "maintained by: $(make maintainer)"
|
|
echo "port directory: ${dir}"
|
|
echo "build started at $(date)"
|
|
|
|
echo "FETCH_DEPENDS=${FD}"
|
|
echo "PATCH_DEPENDS=${PD}"
|
|
echo "EXTRACT_DEPENDS=${ED}"
|
|
echo "BUILD_DEPENDS=${BD}"
|
|
echo "RUN_DEPENDS=${RD}"
|
|
|
|
add_pkg $FD
|
|
|
|
#Allow ports to notice they're being run on bento
|
|
export PACKAGE_BUILDING=1
|
|
|
|
cd $dir || exit 1
|
|
pkgname=$(make package-name)
|
|
echo "================================================================"
|
|
echo "====================<phase 1: make checksum>===================="
|
|
|
|
if /pnohang $TIMEOUT /tmp/make.log1 ${pkgname} make checksum; then
|
|
cat /tmp/make.log1
|
|
echo "0" > /tmp/status
|
|
else
|
|
cleanup 1
|
|
fi
|
|
|
|
else
|
|
|
|
cd $dir || exit 1
|
|
pkgname=$(make package-name)
|
|
|
|
echo "================================================================"
|
|
echo "====================<phase 2: make extract>===================="
|
|
add_pkg ${ED}
|
|
cd $dir
|
|
/pnohang $TIMEOUT /tmp/make.log2 ${pkgname} make extract || cleanup 2
|
|
cat /tmp/make.log2
|
|
del_pkg ${ED}
|
|
|
|
echo "================================================================"
|
|
echo "====================<phase 3: make patch>===================="
|
|
add_pkg ${PD}
|
|
cd $dir
|
|
/pnohang $TIMEOUT /tmp/make.log3 ${pkgname} make patch || cleanup 3
|
|
cat /tmp/make.log3
|
|
del_pkg ${PD}
|
|
|
|
echo "================================================================"
|
|
echo "====================<phase 4: make build>===================="
|
|
add_pkg ${BD}
|
|
|
|
xvfb=0
|
|
if which -s Xvfb; then
|
|
xvfb=1
|
|
pid=$(echo $$ % 32768 | bc)
|
|
X11BASE=$(which Xvfb | sed -e 's./bin/Xvfb..')
|
|
Xvfb :${pid} -fp ${X11BASE}/lib/X11/fonts/misc &
|
|
DISPLAY=:${pid}
|
|
export DISPLAY
|
|
fi
|
|
|
|
cd $dir
|
|
/pnohang $TIMEOUT /tmp/make.log4 ${pkgname} make build || cleanup 4
|
|
cat /tmp/make.log4
|
|
|
|
echo "================================================================"
|
|
echo "====================<phase 5: make package>===================="
|
|
add_pkg ${RD}
|
|
cat > /tmp/mtree.exclude <<EOF
|
|
./root/*
|
|
./var/*
|
|
./tmp/*
|
|
./etc/make.conf.bak
|
|
./etc/make.conf
|
|
./work/*
|
|
./compat/linux/proc
|
|
EOF
|
|
mtree -X /tmp/mtree.exclude -xcn -k uid,gid,mode -p / > /tmp/mtree
|
|
cd $dir
|
|
if /pnohang $TIMEOUT /tmp/make.log5 ${pkgname} make package; then
|
|
cat /tmp/make.log5
|
|
echo "0" > /tmp/status
|
|
prefix=$(make -V PREFIX)
|
|
del_pkg ${pkgname}
|
|
|
|
mtree -X /tmp/mtree.exclude -x -f /tmp/mtree -p / | egrep -v '^(usr/local/var|usr/local/www/|usr/X11R6/lib/X11/xserver/SecurityPolicy|usr/local/share/nls/POSIX|usr/local/share/nls/en_US.US-ASCII|etc/services|compat |usr/X11R6 |etc/manpath.config|etc/.*.bak|usr/local/info/dir|usr/X11R6/lib/X11/fonts/.*/fonts\.|usr/X11R6/(include|share)/pixmaps|usr/local/lib/xemacs|usr/(X11R6|local)/man/..( |/man. )|usr/X11R6/lib/X11/fonts/TrueType )' > /tmp/list3
|
|
|
|
if [ -s /tmp/list3 ]; then
|
|
cd /
|
|
grep ' extra$' /tmp/list3 | awk '{print $1}' | xargs -J % find % -ls > /tmp/list4
|
|
grep ' missing$' /tmp/list3 > /tmp/list5
|
|
grep -vE ' (extra|missing)$' /tmp/list3 > /tmp/list6
|
|
if [ "x${PLISTCHECK}" != "x" ]; then
|
|
if grep -qE 'usr/(local|X11R6)/(bin/|include/|man/|sbin/|share/|share/|lib/|libdata/|libexec/)' /tmp/list4; then
|
|
echo "1" > /tmp/status
|
|
fi
|
|
if [ -s /tmp/list5 ]; then
|
|
echo "1" > /tmp/status
|
|
fi
|
|
fi
|
|
echo "================================================================"
|
|
fi
|
|
|
|
# BUILD_DEPENDS need to be present at install-time, e.g. gmake
|
|
# Concatenate and remove duplicates
|
|
BRD=$(echo $BD $RD | tr ' ' '\n' | sort -u | tr '\n' ' ')
|
|
del_pkg ${BRD}
|
|
cd /var/db/pkg
|
|
if [ $(echo $(echo * | wc -c)) != 2 ]; then
|
|
echo "leftover packages:" *
|
|
del_pkg *
|
|
fi
|
|
|
|
echo
|
|
echo "=== Checking filesystem state"
|
|
|
|
if [ -s /tmp/list4 ]; then
|
|
echo "list of extra files and directories in / (not present before this port was installed but present after it was deinstalled)"
|
|
cat /tmp/list4
|
|
fi
|
|
if [ -s /tmp/list5 ]; then
|
|
echo "list of files present before this port was installed but missing after it was deinstalled)"
|
|
cat /tmp/list5
|
|
fi
|
|
if [ -s /tmp/list6 ]; then
|
|
echo "list of filesystem changes from before and after port installation and deinstallation"
|
|
cat /tmp/list6
|
|
if [ "x${PLISTCHECK}" != "x" ]; then
|
|
echo "1" > /tmp/status
|
|
fi
|
|
fi
|
|
else
|
|
cleanup 5
|
|
fi
|
|
|
|
if [ ${xvfb} = 1 ]; then
|
|
kill $(jobid %1)
|
|
fi
|
|
|
|
if [ -e ${dir}/.keep ]; then
|
|
cd ${dir}
|
|
objdir=$(make -V WRKDIR)
|
|
tar cfjC /tmp/work.tbz ${objdir}/.. work
|
|
fi
|
|
|
|
fi
|
|
|
|
exit 0
|