Instructions below are for building standalone OTS utilities, if you want to
use OTS as a library then the recommended way is to copy the source code and
integrate it into your existing build system. Our build system does not build
a shared library intentionally.

General build instructions:

  1. If you are building from cloned Git repository, you will need to update
     the git sub modules, as well as run autoreconf. A convenience script is
     provided:

     $ ./autogen.sh

  2. Build OTS

     $ ./configure
     $ make

  3. Run the tests (if you wish)

     $ make check

Building on Windows:

   1. A POSIX-compatible environment is required to build OTS, MSYS2 is
      recommended. Follow the installation instructions on
	  https://msys2.github.io/.

   2. Install the required packages:

      $ pacman -S autoconf automake pkg-config gcc make zlib-devel

   3. Follow the general build instructions above.

Developer build instructions:

  1. If you would like to see the source code lines related to reported 
     errors, then replace configure call above with:

     $ ./configure --enable-debug

     For example,

     $ ./ots-sanitize ~/fonts/ofl/merriweathersans/MerriweatherSans-Bold.ttf
     ERROR at src/layout.cc:100 (ParseScriptTable)
     ERROR: Layout: DFLT table doesn't satisfy the spec. for script tag DFLT
     ERROR at src/layout.cc:1247 (ParseScriptListTable)
     ERROR: Layout: Failed to parse script table 0
     ERROR at src/gsub.cc:642 (ots_gsub_parse)
     ERROR: GSUB: Failed to parse script list table
     ERROR at src/ots.cc:669 (ProcessGeneric)
     Failed to sanitize file!
