CUSTOMIZE   [plain text]


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

 FreeType is highly customizable to fit various needs, and this document
 details 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 to activate in their build of 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 / 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 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'll need to define the environment variable FTSYS_SRC to point to
  the relevant implementation, like in:
  
      on Unix:
        ./configure <youroptions>
        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 over-ride 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 re-define the macros used
   to name the configuration headers. To do so, you'll 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 them in:
   
       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.