Fix OTS warning about `maxp.maxSizeOfInstructions`.
[ttfautohint.git] / INSTALL.git
blob148d55ae2f5f4eb12b7e596fb811381794931851
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:
8   autoconf (2.65)
9   automake (1.13)
10   bison (2.6.5)
11   flex (2.5.37)
12   git (1.5.5)
13   libtool (2.2.2)
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:
19   help2man (1.40.1)
20   pandoc (2.8)
21   inkscape (0.48.2)
22   X11 (in particular the `xwininfo' program)
23   ImageMagick (6.7.4)
24   xelatex (TeX Live 2018)
26 The version numbers in parentheses are known to work.  Newer versions should
27 work also.
29 The main font for the PDF file is `Linux Libertine O'; in addition, we use
30 various sans-serif TrueType fonts from the `Noto' family that are not part
31 of TeX Live.  To access them it is recommended to use SVN to clone parts of
32 the huge `noto-fonts' git repository and adjust the `TTFONTS' environment
33 variable accordingly to make xelatex find the fonts in the proper
34 directories.
36 [Yes, we access a github repository with SVN to quickly download just a part
37  of it!]
39   svn checkout \
40     https://github.com/googlei18n/noto-fonts/trunk/unhinted/ttf \
41     noto-fonts
43 Here is an example how to set `TTFONTS'.
45   TTFONTS="/your/path/to/noto-fonts/unhinted/ttf//;"
47 Note the double slash ending the path elements; this makes TeX and its tools
48 search all subdirectories.  Also note the trailing `;' character to ensure
49 that the directories are prepended to the built-in value of `TTFONTS'
50 (instead of replacing it).
52 For correct conversion of the SVG images to PDF, the `Linux Libertine O'
53 font family must be provided by the OS to inkscape.
55 Say
57   ./bootstrap
59 to clone the `gnulib' repository (which gets installed as a git submodule),
60 to build the `configure' script, and to set up necessary auxiliary files.
61 Then you can proceed with the instructions given in the `INSTALL' file.
64 compilation within the MinGW environment (on Windows)
65 -----------------------------------------------------
67 [https://osdn.net/projects/mingw/]
69   - 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   - 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
82     shell.
84   - Only a very special functionality of HarfBuzz is needed; you might thus
85     reduce dependencies by adding the following options to its `configure'
86     script:
88       --with-glib=no
89       --with-gobject=no
90       --with-cairo=no
91       --with-icu=no
93   - 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   - 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       https://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       https://wiki.qt.io/Building_a_static_Qt_for_Windows_using_MinGW
115     using a PowerShell script.  However, you still need the small MinGW
116     patch.
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   - Now configure and compile ttfautohint (within an MSYS shell) using
126       configure \
127         CXX='g++ -static-libgcc' \
128         --with-qt=<DIR> \
129         --with-doc=no \
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 -------------------------------------------
140 [https://mxe.cc]
142 The following describes installation with Qt version 5.15.2 (as used by mxe
143 in July 2021).
145   - Check out the mxe git repository.
147   - Apply the following two patches to get smaller ttfautohint binaries.
149 diff --git a/src/harfbuzz.mk b/src/harfbuzz.mk
150 index 6b299da..bb56456 100644
151 --- a/src/harfbuzz.mk
152 +++ b/src/harfbuzz.mk
153 @@ -20,6 +20,10 @@ endef
154  define $(PKG)_BUILD
155      cd '$(1)' && ./configure \
156          $(MXE_CONFIGURE_OPTS) \
157 +        --with-glib=no \
158 +        --with-gobject=no \
159 +        --with-cairo=no \
160 +        --with-icu=no \
161          LIBS='-lstdc++'
162      $(MAKE) -C '$(1)' -j '$(JOBS)' install
163  endef
164 diff --git a/src/qt.mk b/src/qt.mk
165 index a8268ac4..17e8ead7 100644
166 --- a/src/qt.mk
167 +++ b/src/qt.mk
168 @@ -41,13 +41,16 @@ define $(PKG)_BUILD
169          -device-option PKG_CONFIG='$(TARGET)-pkg-config' \
170          -force-pkg-config \
171          -release \
172 -        -exceptions \
173 +        -no-exceptions \
174 +        -no-qt3support \
175          -static \
176          -prefix '$(PREFIX)/$(TARGET)/qt' \
177          -prefix-install \
178          -script \
179 +        -no-scripttools \
180 +        -no-stl \
181          -no-iconv \
182 -        -opengl desktop \
183 +        -no-opengl \
184          -no-webkit \
185          -no-glib \
186          -no-gstreamer \
187 @@ -61,12 +64,7 @@ define $(PKG)_BUILD
188          -nomake demos \
189          -nomake docs \
190          -nomake examples \
191 -        -xmlpatterns \
192 -        -qt-sql-sqlite \
193 -        -qt-sql-odbc \
194 -        -qt-sql-psql \
195 -        -no-sql-mysql \
196 -        -qt-sql-tds -D Q_USE_SYBASE \
197 +        -no-sql-sqlite \
198          -system-zlib \
199          -system-libpng \
200          -system-libjpeg \
202   - Copy the file `mxe/qtlocation-2.patch' into the mxe directory `src'.
204   - mxe's default target is `i686-w64-mingw32.static', which builds a 32bit
205     static executable.  We want exactly that for the distributed binaries.
207     [For private builds, however, this can be changed by setting the
208      `MXE_TARGETS' variable in the `settings.mk' file.  A template for this
209      file gets automatically generated after calling make the first time, so
210      you should call make, abort the build process after a few seconds,
211      adjust `settings.mk' to your needs, then continue with the instructions
212      below.  More details can be found on mxe's homepage.]
214   - Now build the necessary mxe infrastructure with
216       make qt5
218     This downloads packages with a total size of approx. 720MBytes.
219     Compilation easily takes some hours on a slower computer; all together
220     it finally occupies slightly more than 3GBytes on the harddisk.
222   - You are now ready to build ttfautohint from the git repository with
224       export PATH=/your/path/to/mxe/usr/bin:$PATH
226       mkdir out
228       ./bootstrap
229       ./configure \
230         --host=i686-w64-mingw32.static \
231         --with-qt=/your/path/to/mxe/usr/i686-w64-mingw32.static/qt5/bin \
232         --disable-shared \
233         --without-doc \
234         --prefix=`pwd`/out
235       make
236       make install-strip
238     Binaries can be found in `out/bin'.