Instructions on how to build FreeType with your own build tool:

  see the file "CUSTOMIZE" to learn how to customize FreeType to
  specific environments.

  follow these simple steps:

I. Normal way:
--------------

  * DISABLE PRE-COMPILED HEADERS ! This is very important for Visual
    C++, because FreeType uses lines like:
    
       #include FT_FREETYPE_H
    
    which are not correctly supported by this compiler, while being
    ISO C compliant !!

  * You need to add  the directories "freetype2/include" to your include
    path when compiling the library.

  * FreeType  2 is  made  of several  components;  each one  of them  is
    located   in  a  subdirectory   of  "freetype2/src".   For  example,
    'freetype2/src/truetype/' contains the TrueType font driver.

  * DO NOT COMPILE ALL C FILES!  Rather, compile the following ones:

      -- base components (required)

        src/base/ftsystem.c
        src/base/ftinit.c
        src/base/ftdebug.c
        src/base/ftbase.c
        src/base/ftglyph.c
        src/base/ftbbox.c
        src/base/ftmm.c
        src/base/ftpfr.c        -- optional, see <freetype/ftpfr.h>
        src/base/ftbdf.c        -- optional, see <freetype/ftbdf.h>
        src/base/ftwinfnt.c     -- optional, see <freetype/ftwinfnt.h>

        src/base/ftmac.c        -- only on the Macintosh

     -- other components are optional

        src/autohint/autohint.c -- auto hinting module
        src/cache/ftcache.c     -- cache sub-system (in beta)
        src/sfnt/sfnt.c         -- SFNT files support
                                   (TrueType & OpenType)
        src/cff/cff.c           -- CFF/OpenType font driver
        src/pfr/pfr.c           -- PFR/TrueDoc font driver
        src/bdf/bdf.c           -- BDF font driver
        src/pcf/pcf.c           -- PCF font driver
        src/psnames/psnames.c   -- Postscript glyph names support
        src/psaux/psaux.c       -- Postscript Type 1 parsing
        src/truetype/truetype.c -- TrueType font driver
        src/type1/type1.c       -- Type 1 font driver
        src/cid/type1cid.c      -- Type 1 CID-keyed font driver
        src/winfonts/winfonts.c -- Windows FONT / FNT font driver
        src/raster1/raster1.c   -- monochrome rasterizer
        src/smooth/smooth.c     -- anti-aliasing rasterizer

    Note:

      `truetype.c' needs `sfnt.c' and `psnames.c'
      `type1.c'    needs `psaux.c' and `psnames.c'
      `type1cid.c' needs `psaux.c' and `psnames.c'
      `cff.c'      needs `sfnt.c', `psaux.c', and `psnames.c'

  that should be it ! in case of problems, see the archives of
  the FreeType development mailing list.


II. Support for flat-directory compilation
------------------------------------------

  It is  possible to  put all  FreeType 2 source  files into  a single
  directory, with the *exception* of the `include' hierarchy.

    1. Copy all files in current directory:

        cp freetype2/src/base/*.[hc] .
        cp freetype2/src/raster1/*.[hc] .
        cp freetype2/src/smooth/*.[hc] .
        etc.

    2. Compile sources:

        cc -c -Ifreetype2/include ftsystem.c
        cc -c -Ifreetype2/include ftinit.c
        cc -c -Ifreetype2/include ftdebug.c
        cc -c -Ifreetype2/include ftbase.c
        etc.

   You don't need to define the FT_FLAT_COMPILATION macro (as this was
   required in previous releases of FreeType 2).

