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