С выходом новой версии патчей от bohoomil у меня уходит достаточно много сил на сборку пакета. В процессе нужно вспомнить все варварские приёмы с помощью которых я заталкиваю freetype в пакет. Решил я это дело автоматизировать, не столько для автоматизации, а в качестве памятки. Перед запуском нужно удовлетворить зависимости:
apt-get build-dep freetype
apt-get install devscripts
Функция buildi386 нужна только для сборки multiarch пакетов. Например для wine на amd64 нужен libfreetype6:i386. Чтобы увидеть эффект нужно поместить файл infinality-settings.sh туда, где он будет запускаться при запуске иксов. Например в /etc/profile.d/
#!/bin/bash
GITURL='https://codeload.github.com/bohoomil/fontconfig-ultimate/zip/pkgbuild'
FREETYPEURL='http://download.savannah.gnu.org/releases/freetype'
BOHOOMILDIR='fontconfig-ultimate-pkgbuild/01_freetype2-iu'
# apt-get build-dep freetype
# apt-get install devscripts
revision=''
die()
{
echo
echo "FAIL: $@"
exit 1
}
downloadsrc()
{
for i in freetype freetype-doc ft2demos
do
wget "$FREETYPEURL/$i-$revision.tar.gz" ||
die "wget $FREETYPEURL/$i-$revision.tar.gz"
done
}
prepare()
{
rm -rf freetype
mkdir freetype
cd freetype || exit 1
wget --output-document=bohoomil.zip "$GITURL" || die "wget $GITURL"
unzip bohoomil.zip || die 'unzip bohoomil.zip'
revision=`grep -m1 '^pkgver\=' "$BOHOOMILDIR/PKGBUILD"`
[[ $revision =~ ^pkgver=(.+)$ ]]
revision=${BASH_REMATCH[1]}
if [ -z "$revision" ]
then
die "can't get freetype revision from $BOHOOMILDIR/PKGBUILD"
fi
echo "Found freetype revision: $revision"
apt-get source freetype || die "apt-get source freetype"
rm *
cd freetype-* || die "can't cd to freetype-X/debian"
rm *
debrev="$revision"
if [[ ! $revision =~ ^.+\-.+$ ]]
then
debrev="$revision-0.1"
fi
debchange --newversion "$debrev" 'bohoomil patches added' ||
die "debchange failed"
cd ..
cd "freetype-$revision" || die "can't cd to freetype-$revision"
downloadsrc
# build error fix
echo 'usr/share/man' >> debian/libfreetype6-dev.install
# replace debian patches in freetype
rm debian/patches-freetype/*
cp "../$BOHOOMILDIR/"*.patch debian/patches-freetype/
ls debian/patches-freetype/*.patch | xargs -n 1 basename |
sed 's|$| \-p1|' > debian/patches-freetype/series
# remove patches from freetype2-demos
rm debian/patches-ft2demos/*
echo '01-empty.patch' > debian/patches-ft2demos/series
touch debian/patches-ft2demos/01-empty.patch
}
build()
{
export CFLAGS="-Wno-error"
echo "y" | debuild -uc -us
# now build fails, update symbols file, and run again
cp debian/libfreetype6/DEBIAN/symbols debian/libfreetype6.symbols
echo "y" | debuild -uc -us -nc
}
buildi386()
{
export CFLAGS="-Wno-error -m32"
export LDFLAGS="-Wl,-melf_i386"
export DEB_BUILD_ARCH="i386"
export DEB_HOST_MULTIARCH="i386-linux-gnu"
echo "y" | debuild -uc -us -ai386
cd ..
echo "### fix debs i386 ###"
# fix depends libc6-i386 to libc6
for i in *_i386.*deb
do
dpkg -x "$i" "/tmp/$i"
dpkg -e "$i" "/tmp/$i/DEBIAN"
sed '/Depends\: / s|\-i386||g' -i "/tmp/$i/DEBIAN/control"
dpkg -b "/tmp/$i/" "$i"
rm -r "/tmp/$i"
done
}
if (( $EUID < 1000 ))
then
echo 'Moron!?'
exit 1
fi
prepare
build
# uncomment if you want to build i386 packages on amd64 arch.
#buildi386