In order to build the library, read the `BUILD' document in the `docs'
directory.  This is only a quick starter:

I. From the command line:

  You need to have GNU Make installed on your system to compile the
  library from the command line.  This will _not_ work with other
  make tools (including BSD make)!
  
  - Go to the `freetype2' directory.

  - On Unix (any C compiler should work):

      - make setup (don't worry, this will invoke a configure script)
      - make
      - make install

    Alternatively, you can pass parameters to the configure script
    within the CFG variable, as in:

      - make setup CFG="--prefix=/usr"
      - make
      - make install

  - On Windows:

    We provide a version of GNU Make for Win32 on the FreeType site.
    See http://www.freetype.org/download.html for details.

    If you are using gcc:

      - make setup
      - make

    If you are using Visual C++:
    
      - make setup visualc
      - make
       
    If you are using Win32-lCC:
    
      - make setup lcc
      - make
       
    If you are using the Borland C++ Builder compiler:
    
      - make setup bcc32
      - make


II. In your own environment (IDE):

  You need to add the directories "freetype2/include" and "freetype2/src"
  to your include path when compiling the library.
  
  Compile each library component through the following files:
  
    -- 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/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/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

    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'

       etc.


--- end of INSTALL --
