
There are  several ways  to build the  FreeType library,  depending on
your system and the level of  customization you need.  Here is a short
overview of the documentation available:


I. Normal installation and upgrades
===================================

  1. Native TrueType Hinting

    Native TrueType hinting is  disabled by default[1].  If you really
    need it, read the file `TRUETYPE' for information.


  2. Unix Systems (as well as Cygwin or MSys on Windows)

    Please read  *both* `UPGRADE.UNX' and `INSTALL.UNX'  to install or
    upgrade FreeType  2 on  a Unix system.   Note that you  *need* GNU
    Make for automatic compilation,  since other make tools won't work
    (this includes BSD Make).


  3. On VMS with the `mms' build tool
  
    See `INSTALL.VMS' for installation instructions on this platform.


  4. Other systems using GNU Make
  
    On non-Unix platforms,  it is possible to build  the library using
    GNU Make  utility.  Note that  *NO OTHER MAKE TOOL  WILL WORK*[2]!
    This  methods supports  several  compilers on  Windows, OS/2,  and
    BeOS, including MinGW, Visual C++, Borland C++, and more.

    Instructions are provided in the file `INSTALL.GNU'.


  5. With an IDE Project File (e.g., for Visual Studio or CodeWarrior)
  
    We provide a  small number of `project files'  for various IDEs to
    automatically build  the library as  well.  Note that  these files
    are  not supported  and only  sporadically maintained  by FreeType
    developers, so don't expect them to work in each release.
    
    To find them, have a  look at the content of the `builds/<system>'
    directory, where <system> stands for your OS or environment.


  6. From you own IDE, or own Makefiles
  
    If  you  want  to  create   your  own  project  file,  follow  the
    instructions   given  in  the   `INSTALL.ANY'  document   of  this
    directory.


II. Custom builds of the library
================================

  Customizing the compilation  of FreeType is easy, and  allows you to
  select only the components of  the font engine that you really need.
  For more details read the file `CUSTOMIZE'.


----------------------------------------------------------------------

[1] More details on:  http://www.freetype.org/patents.html

[2] make++, a make tool written in Perl, has sufficient support of GNU
    make extensions to build FreeType.  See

      http://makepp.sourceforge.net

    for more information; you need version 1.19 or newer, and you must
    pass option `--norc-substitution'.

----------------------------------------------------------------------

Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006 by
David Turner, Robert Wilhelm, and Werner Lemberg.

This  file is  part of  the FreeType  project, and  may only  be used,
modified,  and distributed  under the  terms of  the  FreeType project
license,  LICENSE.TXT.  By  continuing to  use, modify,  or distribute
this file you  indicate that you have read  the license and understand
and accept it fully.


--- end of INSTALL ---
