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

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


I. Standard procedure
---------------------

  * 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 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 (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

    Notes:

      `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'


  You are done.   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).


--- end of INSTALL.ANY ---
