freebsd-ports/Tools/portbuild/scripts/buildscript
Kris Kennaway 6ebc6a8ffb * Set the PACKAGE_BUILDING variable in the build environment so ports can
detect they are being built on bento
* Update the list of "extra files" to filter to reduce some false positives
2004-03-08 01:23:20 +00:00

148 lines
4.1 KiB
Bash
Executable file

#!/bin/sh
# usage: $0 DIRNAME PHASE
# PHASE is 1 (checksum) or 2 (package)
dir=$1
phase=$2
if [ $phase = 1 ]; then
cd $dir || exit 1
echo "maintained by: $(make maintainer)"
echo "build started at $(date)"
cd /tmp/depends
export PKG_PATH=/tmp/depends
if [ "$(echo $(/bin/ls | wc -c))" != 0 ]; then
echo "adding dependencies"
for i in *.t[bg]z; 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
mtree -xcn -k uid,gid,mode -p / > /tmp/mtree
#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
cat /tmp/make.log1
echo "1" > /tmp/status
echo "================================================================"
echo -n "build ended at "
date
fi
else
echo "====================<phase 2: make package>====================="
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 || exit 1
pkgname=$(make package-name)
if /pnohang $TIMEOUT /tmp/make.log2 ${pkgname} make package; then
cat /tmp/make.log2
echo "0" > /tmp/status
prefix=$(make -V PREFIX)
echo "================================================================"
echo "checking installed files"
find ${prefix} \( \( -perm -4000 -o -perm -2000 -a \! -type d \) -o \( -perm -0002 -o -perm -0020 \) \) -a \! -type l -ls | sort > /tmp/list1
echo "pkg_delete ${pkgname}"
pkg_delete ${pkgname}
find ${prefix} \( \( -perm -4000 -o -perm -2000 -a \! -type d \) -o \( -perm -0002 -o -perm -0020 \) \) -a \! -type l -ls | sort > /tmp/list2
if ! diff -qb /tmp/list1 /tmp/list2 2>/dev/null; then
echo "================================================================"
echo "found set[ug]id or world-writable files and directories"
diff -b /tmp/list2 /tmp/list1 | grep '^>'
fi
mtree -x -f /tmp/mtree -p / | egrep -v '^(var/|tmp/|etc/shells.bak$|etc/services|compat$|etc/manpath.config|usr/local/share/nls/POSIX|usr/local/share/nls/en_US.US-ASCII)' > /tmp/list3
cd /var/db/pkg
if [ $(echo $(echo * | wc -c)) != 2 ]; then
echo "================================================================"
echo "deleting dependencies"
prevlist=""
count=1
while [ $(echo $(echo * | wc -c)) != 2 -a $(echo $(echo * | wc -c)) != $(echo $(echo $prevlist | wc -c)) ]; do
echo "== phase $count =="
prevlist="$(echo *)"
for i in *; do
echo "pkg_delete $i"
pkg_delete $i
done
count=$(($count + 1))
done
# if [ $(echo $(echo * | wc -c)) != 2 ]; then
# echo "leftover packages:" *
# for i in *; do
# echo "pkg_delete -f $i"
# pkg_delete -f $i
# done
# fi
fi
if [ -s /tmp/list3 ]; then
echo "================================================================"
echo "list of extra files and directories in /"
cat /tmp/list3
# echo "list of all files and directories in ${prefix}"
# cd ${prefix}
# find . -exec echo -n 'path: ' \; -exec ls -1d \{} \; | sort
# echo "ls -alR ${prefix}"
# ls -alR ${prefix}
if [ "x${PLISTCHECK}" != "x" ]; then
echo "1" > /tmp/status
fi
fi
else
cat /tmp/make.log2
echo "1" > /tmp/status
fi
if [ ${xvfb} = 1 ]; then
kill $(jobid %1)
fi
if [ -e ${dir}/.keep ]; then
cd ${dir}
objdir=$(make -V WRKDIR)
tar cvfjC /tmp/work.tbz ${objdir}/.. work
fi
echo "================================================================"
echo -n "build ended at "
date
fi
exit 0