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

   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!
