235 lines
5.3 KiB
Bash
235 lines
5.3 KiB
Bash
#!/bin/sh
|
|
# shellcheck disable=SC2103
|
|
# This script builds a stand-alone binary for the command line version of
|
|
# ttfautohint, downloading any necessary libraries.
|
|
#
|
|
# Version 2017-Nov-24.
|
|
|
|
# The MIT License (MIT)
|
|
|
|
# Copyright (c) 2018 Werner Lemberg
|
|
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
# this software and associated documentation files (the "Software"), to deal in
|
|
# the Software without restriction, including without limitation the rights to
|
|
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
# the Software, and to permit persons to whom the Software is furnished to do so,
|
|
# subject to the following conditions:
|
|
|
|
# The above copyright notice and this permission notice shall be included in all
|
|
# copies or substantial portions of the Software.
|
|
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
|
#
|
|
# User configuration.
|
|
#
|
|
|
|
# The build directory.
|
|
BUILD="$HOME/ttfautohint-build"
|
|
|
|
# The library versions.
|
|
FREETYPE_VERSION="2.8"
|
|
HARFBUZZ_VERSION="1.5.0"
|
|
TTFAUTOHINT_VERSION="1.7"
|
|
|
|
# Necessary patches (lists of at most 10 URLs each separated by whitespace,
|
|
# to be applied in order).
|
|
FREETYPE_PATCHES="\
|
|
http://git.savannah.gnu.org/cgit/freetype/freetype2.git/patch/?id=c9a9cf59 \
|
|
http://git.savannah.gnu.org/cgit/freetype/freetype2.git/patch/?id=c8829e4b \
|
|
"
|
|
HARFBUZZ_PATCHES=""
|
|
TTFAUTOHINT_PATCHES=""
|
|
|
|
|
|
#
|
|
# Nothing to configure below this comment.
|
|
#
|
|
|
|
FREETYPE="freetype-$FREETYPE_VERSION"
|
|
HARFBUZZ="harfbuzz-$HARFBUZZ_VERSION"
|
|
TTFAUTOHINT="ttfautohint-$TTFAUTOHINT_VERSION"
|
|
|
|
if test -d "$BUILD" -o -f "$BUILD"; then
|
|
echo "Build directory \`$BUILD' must not exist."
|
|
exit 1
|
|
fi
|
|
|
|
INST="$BUILD/local"
|
|
|
|
mkdir "$BUILD"
|
|
mkdir "$INST"
|
|
|
|
cd "$BUILD" || exit 1
|
|
|
|
|
|
echo "#####"
|
|
echo "Download all necessary archives and patches."
|
|
echo "#####"
|
|
|
|
curl -L -O "http://download.savannah.gnu.org/releases/freetype/$FREETYPE.tar.gz"
|
|
curl -O "https://www.freedesktop.org/software/harfbuzz/release/$HARFBUZZ.tar.bz2"
|
|
curl -L -O "http://download.savannah.gnu.org/releases/freetype/$TTFAUTOHINT.tar.gz"
|
|
|
|
count=0
|
|
for i in $FREETYPE_PATCHES
|
|
do
|
|
curl -o ft-patch-$count.diff "$i"
|
|
count=$(($count + 1))
|
|
done
|
|
|
|
count=0
|
|
for i in $HARFBUZZ_PATCHES
|
|
do
|
|
curl -o hb-patch-$count.diff "$i"
|
|
count=$(($count + 1))
|
|
done
|
|
|
|
count=0
|
|
for i in $TTFAUTOHINT_PATCHES
|
|
do
|
|
curl -o ta-patch-$count.diff "$i"
|
|
count=$(($count + 1))
|
|
done
|
|
|
|
|
|
# Our environment variables.
|
|
TA_CPPFLAGS="-I$INST/include"
|
|
TA_CFLAGS="-g -O2"
|
|
TA_CXXFLAGS="-g -O2"
|
|
TA_LDFLAGS="-L$INST/lib -L$INST/lib64"
|
|
|
|
|
|
echo "#####"
|
|
echo "Extract archives."
|
|
echo "#####"
|
|
|
|
tar -xzvf "$FREETYPE.tar.gz"
|
|
tar -xjvf "$HARFBUZZ.tar.bz2"
|
|
tar -xzvf "$TTFAUTOHINT.tar.gz"
|
|
|
|
|
|
echo "#####"
|
|
echo "Apply patches."
|
|
echo "#####"
|
|
|
|
cd "$FREETYPE" || exit 1
|
|
for i in ../ft-patch-*.diff
|
|
do
|
|
test -f "$i" || continue
|
|
patch -p1 -N -r - < "$i"
|
|
done
|
|
cd ..
|
|
|
|
cd "$HARFBUZZ" || exit 1
|
|
for i in ../hb-patch-*.diff
|
|
do
|
|
test -f "$i" || continue
|
|
patch -p1 -N -r - < "$i"
|
|
done
|
|
cd ..
|
|
|
|
cd "$TTFAUTOHINT" || exit 1
|
|
for i in ../ta-patch-*.diff
|
|
do
|
|
test -f "$i" || continue
|
|
patch -p1 -N -r - < "$i"
|
|
done
|
|
cd ..
|
|
|
|
|
|
echo "#####"
|
|
echo "$FREETYPE"
|
|
echo "#####"
|
|
|
|
cd "$FREETYPE" || exit 1
|
|
|
|
# The space in `PKG_CONFIG' ensures that the created `freetype-config' file
|
|
# doesn't find a working pkg-config, falling back to the stored strings
|
|
# (which is what we want).
|
|
./configure \
|
|
--without-bzip2 \
|
|
--without-png \
|
|
--without-zlib \
|
|
--without-harfbuzz \
|
|
--prefix="$INST" \
|
|
--enable-static \
|
|
--disable-shared \
|
|
PKG_CONFIG=" " \
|
|
CFLAGS="$TA_CPPFLAGS $TA_CFLAGS" \
|
|
CXXFLAGS="$TA_CPPFLAGS $TA_CXXFLAGS" \
|
|
LDFLAGS="$TA_LDFLAGS"
|
|
make
|
|
make install
|
|
cd ..
|
|
|
|
|
|
echo "#####"
|
|
echo "$HARFBUZZ"
|
|
echo "#####"
|
|
|
|
cd "$HARFBUZZ" || exit 1
|
|
|
|
# Value `true' for `PKG_CONFIG' ensures that XXX_CFLAGS and XXX_LIBS
|
|
# get actually used.
|
|
./configure \
|
|
--disable-dependency-tracking \
|
|
--disable-gtk-doc-html \
|
|
--with-glib=no \
|
|
--with-cairo=no \
|
|
--with-fontconfig=no \
|
|
--with-icu=no \
|
|
--prefix="$INST" \
|
|
--enable-static \
|
|
--disable-shared \
|
|
CFLAGS="$TA_CPPFLAGS $TA_CFLAGS" \
|
|
CXXFLAGS="$TA_CPPFLAGS $TA_CXXFLAGS" \
|
|
LDFLAGS="$TA_LDFLAGS" \
|
|
PKG_CONFIG=true \
|
|
FREETYPE_CFLAGS="$TA_CPPFLAGS/freetype2" \
|
|
FREETYPE_LIBS="$TA_LDFLAGS -lfreetype"
|
|
make
|
|
make install
|
|
cd ..
|
|
|
|
|
|
echo "#####"
|
|
echo "$TTFAUTOHINT"
|
|
echo "#####"
|
|
|
|
cd "$TTFAUTOHINT" || exit 1
|
|
|
|
# Value `true' for `PKG_CONFIG' ensures that XXX_CFLAGS and XXX_LIBS
|
|
# get actually used.
|
|
./configure \
|
|
--disable-dependency-tracking \
|
|
--without-qt \
|
|
--without-doc \
|
|
--prefix="$INST" \
|
|
--enable-static \
|
|
--disable-shared \
|
|
--with-freetype-config="$INST/bin/freetype-config" \
|
|
CFLAGS="$TA_CPPFLAGS $TA_CFLAGS" \
|
|
CXXFLAGS="$TA_CPPFLAGS $TA_CXXFLAGS" \
|
|
LDFLAGS="$TA_LDFLAGS" \
|
|
PKG_CONFIG=true \
|
|
HARFBUZZ_CFLAGS="$TA_CPPFLAGS/harfbuzz" \
|
|
HARFBUZZ_LIBS="$TA_LDFLAGS -lharfbuzz"
|
|
make LDFLAGS="$TA_LDFLAGS -all-static"
|
|
make install-strip
|
|
cd ..
|
|
|
|
|
|
echo "#####"
|
|
echo "binary: $INST/bin/ttfautohint"
|
|
echo "#####"
|
|
|
|
# eof
|