• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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