
SPECIAL NOTE FOR UNIX USERS
===========================

  If  you are installing  this release  of FreeType  on a  system that
  already uses release  2.0.5 (or even an older  version), you have to
  perform a few special steps to ensure that everything goes well.


  I. Enable the TrueType bytecode hinter if you need it
  -----------------------------------------------------

    See the instructions in the file "TRUETYPE" of this directory.
   
    Note that FreeType supports TrueType fonts without the bytecode
    interpreter through its auto-hinter, which now generate relatively good
    results with most fonts.


  II. Determine the correct installation path
  --------------------------------------------

    By  default,  the  source  package  will install  the  library  in
    "/usr/local".   However, many Unix  distributions now  install the
    library in  "/usr", since FreeType  is becoming a  critical system
    component.

    If FreeType is already installed on your system, type

      freetype-config --prefix

    on the command line.  This  should return the installation path to
    use below  (e.g. "/usr"  or "/usr/local").  Otherwise,  simply use
    "/usr" (or what you think is adequate for your installation).



  III. 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).

    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.



  IV. Build and install the library
  ---------------------------------

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

      ./configure --prefix=<yourprefix>
      make
      make install           (as root)

    where "<yourprefix>"  must be replaced  by the prefix  returned by
    the "freetype-config" command.

    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 --prefix=<yourprefix>
       gmake
       gmake install            (as root)

    If  this  still  doesn't   work,  read  the  detailed  compilation
    procedure available in the file "docs/BUILD" for troubleshooting.


  V. Take care of XFree86 version 4
  ---------------------------------

    Certain recent Linux distributions will install _several_ versions
    of FreeType on your system.   For example, on a fresh Mandrake 8.1
    system, you can find the following files:

      /usr/lib/libfreetype.so             which links to
      /usr/lib/libfreetype.6.1.0.so

    and

      /usr/X11R6/lib/libfreetype.so       which links to
      /usr/X11R6/lib/libfreetype.6.0.so

    Note that these  files correspond to two distinct  versions of the
    library!   It seems  that  this  surprising issue  is  due to  the
    install  scripts  of recent  XFree86  servers  (from 4.1.0)  which
    irremediably install  their own (dated) version of  the library in
    "/usr/X11R6/lib".

    In certain _rare_  cases you may experience minor  problems if you
    install this release  of the library in "/usr"  only, namely, that
    certain  applications will  not  benefit from  the  bug fixes  and
    rendering improvements you'd expect.

    There are two good ways to deal with this situation:

      - Install  the library  _twice_, in  "/usr" and  in "/usr/X11R6"
        (you  have to do  that each  time you  install a  new FreeType
        release though).

      - Change the link in /usr/X11R6/lib/libfreetype.so to point to

          /usr/lib/libfreetype.so,

        and get rid of

          /usr/X11R6/lib/libfreetype.6.0.so

    The FreeType Team  is not responsible for this  problem, so please
    contact  either  the  XFree86   development  team  or  your  Linux
    distributor to help clear this issue in case the information given
    here doesn't help.
