1#!/bin/sh
2# Some of HarfBuzz's headers are created at build time using the Ragel
3# State Machine Compiler.  To reduce complex dependencies, I pre-built
4# these files:
5#     hb-buffer-deserialize-json.hh
6#     hb-buffer-deserialize-text.hh
7#     hb-ot-shape-complex-indic-machine.hh
8#     hb-ot-shape-complex-myanmar-machine.hh
9#     hb-ot-shape-complex-use-machine.hh
10# from these sources:
11#     ../externals/harfbuzz/src/hb-buffer-deserialize-json.rl
12#     ../externals/harfbuzz/src/hb-buffer-deserialize-text.rl
13#     ../externals/harfbuzz/src/hb-ot-shape-complex-indic-machine.rl
14#     ../externals/harfbuzz/src/hb-ot-shape-complex-myanmar-machine.rl
15#     ../externals/harfbuzz/src/hb-ot-shape-complex-use-machine.rl
16#
17# The files in this directory are created by installing the
18# prerequiste packages, checking out a new version of HarfBuzz, doing
19# `./autogen.sh && ./configure && make`, then copying the
20# autogenerated .h and .hh files to this directory.
21#
22# These files are now checked into the git repository and the HarfBuzz
23# maintainers keep them up to date by using the build rules in the HarfBuzz
24# build. As a result this step is no longer necessary, but if we need to
25# regenerate these files ourselves, this is how to do it.
26
27set -e
28set -x
29for package in automake  libtool pkg-config ragel gtk-doc-tools; do
30    if ! ( dpkg-query -W -f'${Status}' "$package" 2>/dev/null | \
31        grep -q "ok installed" ); then
32        sudo apt-get install "$package"
33    fi
34done
35cd "$(dirname "$0")/../externals/harfbuzz"
36./autogen.sh
37./configure
38make -j4
39cp src/hb-version.h ../../harfbuzz/
40for RAGEL_FILE in src/*.rl; do
41    BUILT_HEADER="src/$(basename "$RAGEL_FILE" '.rl').hh"
42    if [ -f "$BUILT_HEADER" ]; then
43        cp -v "$BUILT_HEADER" ../../harfbuzz/
44    fi
45done
46git clean -fxd
47