2 building and installing ttfautohint from git
3 ============================================
5 Building ttfautohint from the git repository needs some tools that are not
6 required when building from a release:
14 perl (this is a prerequisite of automake also)
16 If you configure to build the documentation files also (which are normally
17 distributed with the release package), the following is necessary:
22 X11 (in particular the `xwininfo' program)
24 xelatex (TeXLive 2016)
26 The version numbers in parentheses are known to work. Newer versions should
29 The main font for the PDF file is Libertine; in addition, we use various
30 sans-serif TrueType fonts from the Noto family which are not part of
31 TeXLive. To access them it is recommended to use SVN to clone the following
32 two (huge) git repositories and adjust the `TTFONTS' environment variable
33 accordingly to make xelatex find the fonts in the proper directories.
35 [Yes, we access github's git repositories with SVN to quickly download just
36 a part of the repository!]
39 https://github.com/googlei18n/noto-fonts-alpha/trunk/from-pipeline/unhinted/ttf/sans \
42 https://github.com/googlei18n/noto-fonts/trunk/unhinted \
45 Here is an example how to set `TTFONTS'.
47 TTFONTS="/home/wl/noto-fonts-alpha//:/home/wl/noto-fonts/:"
49 Note the double slash ending the first path; this makes TeX and its tools
50 search all subdirectories. Also note the trailing `:' character, which
51 ensures that the directories are prepended to the built-in value of
52 `TTFONTS' (instead of replacing it).
58 to clone the `gnulib' repository (which gets installed as a git submodule),
59 to build the `configure' script, and to set up necessary auxiliary files.
60 Then you can proceed with the instructions given in the `INSTALL' file with
61 the exception that parellel builds with `make -j' are not supported yet.
64 compilation within the MinGW environment (on Windows)
65 -----------------------------------------------------
69 o Since MSYS, the shell of MinGW, uses LF as line endings, `git checkout'
70 should not convert files to CRLF. Before checking out the FreeType and
71 ttfautohint repositories, you should issue the command
73 git config --global core.autocrlf input
75 to avoid any line ending conversion.
77 o At the time of this writing (February 2014), the current MinGW bundle
78 (in particular mingwrt-4.0.3; the gcc version is 4.8.1) contains a
79 number of bugs that need work-arounds. For this reason, you should use
80 FreeType version 2.5.3 (or the git repository) and HarfBuzz version
81 0.9.27 or newer. The configuration scripts work just fine in an MSYS
84 o Only a very special functionality of HarfBuzz is needed; you might thus
85 reduce dependencies by adding the following options to its `configure'
93 o You need bison 2.5 or newer. MinGW doesn't offer this, but you can
94 download a MinGW port of version 3.0.2 from
96 https://sourceforge.net/projects/ezwinports/files/
98 o To compile a stand-alone version of ttfautohintGUI we must compile a
99 static version of Qt 4 first. I've successfully followed these
100 instructions with version 4.8.5
102 http://www.formortals.com/build-qt-static-small-microsoft-intel-gcc-compiler/
104 together with the following minor patch to MinGW
106 https://sourceforge.net/p/mingw/mingw-org-wsl/ci/928ddb53a9623fc38de3997a3acce4a8730f4dc6/
108 Note that these build instructions should be executed in a normal
109 cmd.exe shell, *not* MSYS.
111 An alternative is given at
113 http://qt-project.org/wiki/How-to-build-a-static-Qt-for-Windows-MinGW
115 using a PowerShell script. However, you still need the small MinGW
118 It's not necessary to invoke `make install' for Qt. For ttfautohint's
119 `--with-qt' configure script argument in the next build step, use the
120 `bin' subdirectory of the just built Qt library, for example
122 --with-qt=/path/to/qt-4.8.5/bin
124 o Now configure and compile ttfautohint (within an MSYS shell) using
127 CXX='g++ -static-libgcc' \
130 ac_cv_func__set_invalid_parameter_handler=no
131 make LDFLAGS=-all-static
133 (The `ac_cv_func...' argument is another work-around for a MinGW bug,
134 the `CXX' line is a fix for libtool).
137 compilation with mxe (on Unix, for Windows)
138 -------------------------------------------
142 o Check out the mxe git repository.
144 o Apply the following two patches to get smaller ttfautohint binaries.
146 diff --git a/src/harfbuzz.mk b/src/harfbuzz.mk
147 index 6b299da..bb56456 100644
148 --- a/src/harfbuzz.mk
149 +++ b/src/harfbuzz.mk
150 @@ -20,6 +20,10 @@ endef
152 cd '$(1)' && ./configure \
153 $(MXE_CONFIGURE_OPTS) \
155 + --with-gobject=no \
159 $(MAKE) -C '$(1)' -j '$(JOBS)' install
161 diff --git a/src/qt.mk b/src/qt.mk
162 index 889394e..aaf59f7 100644
165 @@ -32,13 +32,16 @@ define $(PKG)_BUILD
166 -device-option PKG_CONFIG='$(TARGET)-pkg-config' \
173 -prefix '$(PREFIX)/$(TARGET)/qt' \
184 @@ -51,11 +54,7 @@ define $(PKG)_BUILD
192 - -qt-sql-tds -D Q_USE_SYBASE \
198 o Put the following patch into a file called `qt-2.patch' and add it to
199 mxe's `src' directory. This also helps reduce the size of the `qt'
202 --- a/mkspecs/win32-g++/qmake.conf
203 +++ b/mkspecs/win32-g++/qmake.conf
205 QMAKE_CFLAGS_DEPS = -M
206 QMAKE_CFLAGS_WARN_ON = -Wall -Wextra
207 QMAKE_CFLAGS_WARN_OFF = -w
208 -QMAKE_CFLAGS_RELEASE = -O2
209 +QMAKE_CFLAGS_RELEASE = -Os -momit-leaf-frame-pointer
210 QMAKE_CFLAGS_DEBUG = -g
211 QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
213 o At the time of this writing (January 2016), mxe's default target is
214 `i686-w64-mingw32.static', which builds a 32bit static executable. We
215 want exactly that for the distributed binaries.
217 [For private builds, however, this can be changed by setting the
218 `MXE_TARGETS' variable in the `settings.mk' file. A template for this
219 file gets automatically generated after calling make the first time, so
220 you should call make, abort the build process after a few seconds,
221 adjust `settings.mk' to your needs, then continue with the instructions
222 below. More details can be found on mxe's homepage.]
224 o Now build the necessary mxe infrastructure with
226 make check-requirements
230 These calls download packages with a total size of approx. 550MBytes.
231 Compilation easily takes some hours on a slower computer; all together
232 it finally occupies slightly more than 2GBytes on the harddisk.
234 o You are now ready to build ttfautohint from the git repository with
236 export PATH=/your/path/to/git/mxe/usr/bin:$PATH
242 --host=i686-w64-mingw32.static \
243 --with-qt=/your/path/to/git/mxe/usr/i686-w64-mingw32.static/qt/bin \
250 Binaries can be found in `out/bin'.