#! /bin/sh | |
# XXX - this needs to run under fakeroot... | |
exec 3>&1 1>&2 | |
real_dpkg_checkbuilddeps () { | |
SBOX_REDIRECT_IGNORE=/usr/bin/perl /usr/bin/perl /usr/bin/dpkg-checkbuilddeps "$@" | |
} | |
finish () { | |
if ! real_dpkg_checkbuilddeps; then | |
echo "This package does not use any devkits." | |
echo "Please install all build dependencies as real packages." | |
echo >&3 FAIL | |
fi | |
exit 0 | |
} | |
# The stamp file can not be in the source tree because then it would | |
# end up in the source package, which is not what we want. We put it | |
# into /var/tmp so that it gets deleted when a new rootstrap is | |
# extracted. | |
STAMP=/var/tmp/SANITIZED.$(head debian/changelog | md5sum | cut -d' ' -f1) | |
if [ -e $STAMP ]; then | |
exit 0; | |
fi | |
# Only do permanent changes if this is BIFH | |
echo "$USER" | grep -q 'bifh[0-9]' || finish | |
# prevent bash from killing the system | |
rm -f /var/lib/bash/provide-sh | |
# clean ~/.texmf-var to avoid trouble with stale things hiding there. | |
rm -rf ~/.texmf-var/ | |
pfx="dpkg-checkbuilddeps: Unmet build dependencies:" | |
deps=`real_dpkg_checkbuilddeps 2>&1 | grep "^$pfx" | \ | |
sed -e "s/$pfx//" -e s'/([^)]*)//g' -e 's/|//'` | |
deps="$deps build-essential automake autoconf libtool ed gawk diff dpkg-dev" | |
for d in $deps; do | |
echo apt-get "$@" install $d | |
apt-get -o DPkg::Options::=--force-confold -q --force-yes --yes install $d | |
done | |
apt-get -o DPkg::Options::=--force-confold -q --force-yes --yes dist-upgrade | |
# Make sure we get a fresh fakeroot installation | |
# We can't seem to control the value of LD_PRELOAD well enough, so we | |
# just copy the good version of libfakeroot over the bad one that | |
# Scratchbox uses. This will result in a good version of libfakeroot | |
# talking to a bad version of faked, but that seems to work well | |
# enough. The protocol between the two is really simple and unlikely | |
# to change even when new syscalls are wrapped. And this is a | |
# desperate hack anyway, so it's OK if there is blood all over the | |
# floor from time to time. | |
# | |
# After we have overwritten libfakeroot, it no longer works with any | |
# host binaries, such as the ones in /scratchbox/compilers/bin or | |
# /scratchbox/tools/bin. Thus, we must avoid running those when | |
# fakerooted. | |
# | |
# We use "cp -l" here to avoid overwriting a library that is in use. | |
# | |
if [ "$(fakeroot -v)" = "fakeroot version 1.4.2" ]; then | |
apt-get -q --force-yes --yes --reinstall install fakeroot | |
cp -fl /usr/lib/libfakeroot/libfakeroot-sysv.so /usr/lib/libfakeroot-sysv/libfakeroot.so.0 | |
cp -fl /usr/lib/libfakeroot/libfakeroot-tcp.so /usr/lib/libfakeroot-tcp/libfakeroot.so.0 | |
else | |
echo "We have $(fakeroot -v), hurray!" | |
fi | |
touch $STAMP | |
finish |