ref: d59c7ce1b970bfe38b3df161e9dd711b75392709
dir: /docs/CUSTOMIZE/
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 `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 If you use GNU make please edit the top-level file `modules.cfg'. It contains a list of available FreeType modules and extensions to be compiled. Change it to suit your own preferences. Be aware that certain modules depend on others, as described in the file. GNU make uses `modules.cfg' to generate `ftmodule.h' (in the object directory). If you build FreeType in a directory separate from the source files, put your customized `modules.cfg' in that directory; that way you can keep the source files `clean'. If you don't use GNU make you have to manually edit the file `include/freetype/config/ftmodule.h' (which is *not* used with if compiled with GNU make) to add or remove the drivers and components you want to compile into the library. See `INSTALL.ANY' for more information. 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 three ways to do that: 1. With GNU make [This is actually a combination of method 2 and 3.] Just put your custom `ftoption.h' file into the objects directory (normally `<topdir>/objs' if you build in the source tree, or the directory where you invoke configure if you build in a separate directory), which GNU make prefers over the standard location. No action is needed for `ftmodule.h' because it is generated automatically in the objects directory. 2. 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/ config/ ftoption.h => custom options header ftmodule.h => custom modules list include/ => normal FreeType 2 include ... then change the C include path to always give the path to `custom' before the FreeType 2 `include'. 3. Redefining 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_MY_PLATFORM_H_ #define FT2_BUILD_MY_PLATFORM_H_ #define FT_CONFIG_OPTIONS_H <custom/my-ftoption.h> #define FT_CONFIG_MODULES_H <custom/my-ftmodule.h> #include <freetype/config/ftheader.h> #endif /* FT2_BUILD_MY_PLATFORM_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. ---------------------------------------------------------------------- Copyright (C) 2003-2022 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, modified, and distributed under the terms of the FreeType project license, LICENSE.TXT. By continuing to use, modify, or distribute this file you indicate that you have read the license and understand and accept it fully. --- end of CUSTOMIZE ---