How to customize the compilation of the library:
================================================

  FreeType  is  highly  customizable  to  fit various  needs,  and  this
  document describes how it is possible to select options and components
  at compilation time.


I. Configuration macros

  The file found in "include/freetype/config/ftoption.h" contains a list
  of commented configuration macros that can be toggled by developers to
  indicate which features should be active while building the library.
  
  These  options  range from  debug  level  to  availability of  certain
  features, like native TrueType hinting through a bytecode interpreter.
  
  We invite you to read this  file for more information.  You can change
  the file's content to suit your  needs, or override it with one of the
  techniques described below.

  
II. Modules list

  The file found in "include/freetype/config/ftmodule.h" contains a list
  of  names  corresponding  to  the  modules  and  font  drivers  to  be
  statically compiled in the FreeType library during the build.

  You can change it to suit your own preferences.  Be aware that certain
  modules depend  on others, as  described by the file  "modules.txt" in
  this directory.

  You can modify  the file's content to suit your  needs, or override it
  at compile time with one of the methods described below.


III. System interface

  FreeType's default interface to the  system (i.e., the parts that deal
  with   memory   management   and    i/o   streams)   is   located   in
  "src/base/ftsystem.c".
  
  The  current implementation uses  standard C  library calls  to manage
  memory and to read font files.  It is however possible to write custom
  implementations to suit specific systems.

  To  tell  the GNU  Make-based  build system  to  use  a custom  system
  interface, you  have to define  the environment variable  FTSYS_SRC to
  point to the relevant implementation:
  
    on Unix:

      ./configure <your options>
      export FTSYS_SRC=foo/my_ftsystem.c
      make
      make install
   
    on Windows:

      make setup <compiler>
      set FTSYS_SRC=foo/my_ftsystem.c
      make
     
     
IV. Overriding default configuration and module headers

  It  is  possible to  override  the  default  configuration and  module
  headers without changing the original files.  There are two ways to do
  that:


  1. Using the C include path
  
    Use the C include path to ensure that your own versions of the files
    are used at compile time when the lines
    
       #include FT_CONFIG_OPTIONS_H
       #include FT_CONFIG_MODULES_H

    are       compiled.       Their      default       values      being
    <freetype/config/ftoption.h>  and  <freetype/config/ftmodule.h>, you
    can do something like:

       custom/
         freetype/
           config/
             ftoption.h    => custom options header
             ftmodule.h    => custom modules list
             
       include/            => normal FreeType 2 include
         freetype/
           ...

    then change the  C include path to always give  the path to "custom"
    before the FreeType 2 "include".


  2. Re-defining FT_CONFIG_OPTIONS_H and FT_CONFIG_MODULES_H
  
    Another way to  do the same thing is to redefine  the macros used to
    name  the  configuration headers.   To  do  so,  you need  a  custom
    "ft2build.h" whose content can be as simple as:
   
      #ifndef __FT2_BUILD_GENERIC_H__
      #define __FT2_BUILD_GENERIC_H__

      #define  FT_CONFIG_OPTIONS_H   <custom/my-ftoption.h>
      #define  FT_CONFIG_MACROS_H    <custom/my-ftmodule.h>

      #include <freetype/config/ftheader.h>

      #endif /* __FT2_BUILD_GENERIC_H__ */
   
    Place those files in a separate directory, e.g.:
   
      custom/
        ft2build.h           => custom version described above
        my-ftoption.h        => custom options header
        my-ftmodule.h        => custom modules list header

    and  change the C  include path  to ensure  that "custom"  is always
    placed before the FT2 "include" during compilation.


--- end of CUSTOMIZE ---
