This document contains instructions on how to build the FreeType library
on Unix systems.  This also works for emulations like  Cygwin or MSys on
Win32:


  1. Ensure that you are using GNU Make
  -------------------------------------

    The FreeType  build system _exclusively_  works with GNU  Make.  You
    will not be able to  compile the library with the instructions below
    using any other alternative (including BSD Make).

    [Well, this is not  really correct.  Recently, a perl implementation
    of make called `makepp' has appeared which can also build FreeType 2
    successfully  on Unix platforms.   See http://makepp.sourceforge.net
    for more details.]

    Trying to compile the library  with a different Make tool will print
    a message like:

      Sorry, GNU make is required to build FreeType2.

    and the build process will be aborted.  If this happens, install GNU
    Make on  your system,  and use the  GNUMAKE environment  variable to
    name it.


  2. Build and install the library
  --------------------------------

    The  following should  work on  all  Unix systems  where the  `make'
    command invokes GNU Make:

      ./configure [options]
      make
      make install           (as root)

    The default  installation path is  "/usr/local".  It can  be changed
    with the `--prefix=<path>' option.  Example:

      ./configure --prefix=/usr

    When using a  different command to invoke GNU  Make, use the GNUMAKE
    variable.  For  example, if  `gmake' is the  command to use  on your
    system, do something like:

       GNUMAKE=gmake ./configure [options]
       gmake
       gmake install            (as root)

    If  this  still  doesn't   work,  something's rotten on your system
    (e.g. you are using a very old version of GNU Make).

    It  is  possible  to  compile  FreeType in  a  different  directory.
    Assuming the  FreeType source  files in directory  `/src/freetype' a
    compilation in directory `foo' works as follows:

      cd foo
      /src/freetype/configure [options]
      make
      make install


--- end of INSTALL.UNX --
