1How to customize the compilation of the library 2=============================================== 3 4 FreeType is highly customizable to fit various needs, and this 5 document describes how it is possible to select options and 6 components at compilation time. 7 8 9I. Configuration macros 10 11 The file `include/freetype/config/ftoption.h' contains a list of 12 commented configuration macros that can be toggled by developers to 13 indicate which features should be active while building the library. 14 15 These options range from debug level to availability of certain 16 features, like native TrueType hinting through a bytecode 17 interpreter. 18 19 We invite you to read this file for more information. You can 20 change the file's content to suit your needs, or override it with 21 one of the techniques described below. 22 23 24II. Modules list 25 26 If you use GNU make please edit the top-level file `modules.cfg'. 27 It contains a list of available FreeType modules and extensions to 28 be compiled. Change it to suit your own preferences. Be aware that 29 certain modules depend on others, as described in the file. GNU 30 make uses `modules.cfg' to generate `ftmodule.h' (in the object 31 directory). 32 33 If you build FreeType in a directory separate from the source files, 34 put your customized `modules.cfg' in that directory; that way you 35 can keep the source files `clean'. 36 37 If you don't use GNU make you have to manually edit the file 38 `include/freetype/config/ftmodule.h' (which is *not* used with if 39 compiled with GNU make) to add or remove the drivers and components 40 you want to compile into the library. See `INSTALL.ANY' for more 41 information. 42 43 44III. System interface 45 46 FreeType's default interface to the system (i.e., the parts that 47 deal with memory management and i/o streams) is located in 48 `src/base/ftsystem.c'. 49 50 The current implementation uses standard C library calls to manage 51 memory and to read font files. It is however possible to write 52 custom implementations to suit specific systems. 53 54 To tell the GNU Make-based build system to use a custom system 55 interface, you have to define the environment variable FTSYS_SRC to 56 point to the relevant implementation: 57 58 on Unix: 59 60 ./configure <your options> 61 export FTSYS_SRC=foo/my_ftsystem.c 62 make 63 make install 64 65 on Windows: 66 67 make setup <compiler> 68 set FTSYS_SRC=foo/my_ftsystem.c 69 make 70 71 72IV. Overriding default configuration and module headers 73 74 It is possible to override the default configuration and module 75 headers without changing the original files. There are three ways 76 to do that: 77 78 79 1. With GNU make 80 81 [This is actually a combination of method 2 and 3.] 82 83 Just put your custom `ftoption.h' file into the objects directory 84 (normally `<topdir>/objs' if you build in the source tree, or the 85 directory where you invoke configure if you build in a separate 86 directory), which GNU make prefers over the standard location. No 87 action is needed for `ftmodule.h' because it is generated 88 automatically in the objects directory. 89 90 2. Using the C include path 91 92 Use the C include path to ensure that your own versions of the 93 files are used at compile time when the lines 94 95 #include FT_CONFIG_OPTIONS_H 96 #include FT_CONFIG_MODULES_H 97 98 are compiled. Their default values being 99 <freetype/config/ftoption.h> and <freetype/config/ftmodule.h>, you 100 can do something like: 101 102 custom/ 103 config/ 104 ftoption.h => custom options header 105 ftmodule.h => custom modules list 106 107 include/ => normal FreeType 2 include 108 ... 109 110 then change the C include path to always give the path to `custom' 111 before the FreeType 2 `include'. 112 113 114 3. Redefining FT_CONFIG_OPTIONS_H and FT_CONFIG_MODULES_H 115 116 Another way to do the same thing is to redefine the macros used to 117 name the configuration headers. To do so, you need a custom 118 `ft2build.h' whose content can be as simple as: 119 120 #ifndef FT2_BUILD_MY_PLATFORM_H_ 121 #define FT2_BUILD_MY_PLATFORM_H_ 122 123 #define FT_CONFIG_OPTIONS_H <custom/my-ftoption.h> 124 #define FT_CONFIG_MODULES_H <custom/my-ftmodule.h> 125 126 #include <freetype/config/ftheader.h> 127 128 #endif /* FT2_BUILD_MY_PLATFORM_H_ */ 129 130 Place those files in a separate directory, e.g., 131 132 custom/ 133 ft2build.h => custom version described above 134 my-ftoption.h => custom options header 135 my-ftmodule.h => custom modules list header 136 137 and change the C include path to ensure that `custom' is always 138 placed before the FT2 `include' during compilation. 139 140---------------------------------------------------------------------- 141 142Copyright (C) 2003-2020 by 143David Turner, Robert Wilhelm, and Werner Lemberg. 144 145This file is part of the FreeType project, and may only be used, 146modified, and distributed under the terms of the FreeType project 147license, LICENSE.TXT. By continuing to use, modify, or distribute 148this file you indicate that you have read the license and understand 149and accept it fully. 150 151 152--- end of CUSTOMIZE --- 153