Hash :
59939244
        
        Author :
  
        
        Date :
2006-01-31T20:17:42
        
      
Implement new, simplified module selection.  With GNU make it is now
sufficient to modify a single file, `modules.cfg', to control the
inclusion of modules and base extension files.
This change also fixes the creation of ftmodule.h; it now depends on
`modules.cfg' and thus is rebuilt only if necessary.
Finally, a version of `ftoption.h' in OBJ_DIR is preferred over the
default location.
* modules.cfg: New file.
* builds/freetype.mk: Don't include `modules.mk'.
Include all `rules.mk' files as specified in `modules.cfg'.
(FTOPTION_FLAG, FTOPTION_H): New variables.
(FT_CFLAGS): Add macro definition for FT_CONFIG_MODULES_H.
Add FTOPTION_FLAG.
($(FT_INIT_OBJ)): Don't use FT_MODULE_LIST.
(CONFIG_H): Add FTMODULE_H and FTOPTION_H.
(INCLUDES): Add DEVEL_DIR.
(INCLUDE_FLAGS, FTSYS_SRC, FTSYS_OBJ, FTDEBUG_SRC, FTDEBUG_OBJ,
OBJ_M, OBJ_S): Use `:=', not `='.
(remove_ftmodule_h): New phony target to delete `ftmodule.h'.
(distclean): Add remove_ftmodule_h.
* builds/modules.mk: (MODULE_LIST): Removed.
(make_module_list, clean_module_list): Replace targets
with...
(FTMODULE_H_INIT, FTMODULE_H_CREATE, FTMODULE_H_DONE): New
variables.  Reason for the change is that it is not possible to have
a phony prerequisite which is run only if the target file must be
rebuilt (phony prerequisites act like subroutines and are *always*
executed).  We only want to rebuild `ftmodule.h' if `module.cfg' is
changed.
Update all callers.
($FTMODULE_H)): Rule to create `ftmodule.h', depending on
`modules.cfg'.
* builds/toplevel.mk: Rewrite and simplify module handling.
(MODULES_CFG, FTMODULE_H): New variables.
Include MODULES_CFG.
(MODULES): New variable to include all `module.mk' and `rules.mk'
files.  We no longer use make's `wildcard' function for this.
* Makefile (USE_MODULES): Remove.  Update all users.
(OBJ_DIR): Define it here.
* src/*/module.mk: Change
    make_module_list: foo
    foo: ...
to
    FTMODULE_H_COMMANDS += FOO
    define FOO
    ...
    endef
in all files.  `FTMODULE_H_COMMANDS' is used in `FTMODULE_H_CREATE'.
* src/base/rules.mk (BASE_EXT_SRC): Use BASE_EXTENSIONS.
* builds/unix/detect.mk (setup): Always execute `configure' script.
(have_mk): Rename to...
(have_Makefile): This.
Don't use `strip' function.
* builds/unix/unix.mk: Include `install.mk' only if BUILD_PROJECT is
defined.
(have_mk): Don't use `strip' function.
Test for unix-def.mk in OBJ_DIR, not BUILD_DIR (and invert the test
accordingly).
* builds/unix/install.mk (install, uninstall): Handle `ftmodule.h'.
* builds/os2/os2-dev.mk, builds/unix/unix-dev.mk,
builds/win32/w32-bccd.mk, builds/win32/w32-dev.mk: Don't define
BUILD_DIR but DEVEL_DIR for development header files.
* builds/ansi/ansi-def.mk (TOP_DIR, OBJ_DIR),
builds/beos/beos-def.mk (TOP_DIR, OBJ_DIR), builds/unix/unix-def.in
(TOP_DIR, OBJ_DIR): Removed.  Defined elsewhere.
* builds/dos/dos-def.mk (OBJ_DIR), builds/os2/os2-def.mk (OBJ_DIR),
builds/win32/win32-def.mk (OBJ_DIR): Removed.  Defined elsewhere.
* builds/unix/unixddef.mk: Don't define BUILD_DIR but DEVEL_DIR for
development header files.
Don't define PLATFORM.
* configure: Copy `modules.cfg' to builddir if builddir != srcdir.
Update snippet taken from autoconf's m4sh.m4 to current CVS version.
Be more verbose.
* include/freetype/config/ftmodule.h: Add comments -- this file is
no longer used if FreeType is built with GNU make.
* docs/CHANGES, docs/CUSTOMIZE, docs/INSTALL, docs/INSTALL.ANY,
docs/INSTALL.GNU, docs/INSTALL.UNX: Document new build mechanism.
Other minor updates.
* modules.txt: Removed.  Contents included in `modules.cfg'.
* include/freetype/internal/ftmemory.h (FT_QAlloc_Debug,
FT_Free_Debug) [FT_STRICT_ALIASING]: Fix typos.
* src/base/ftdbgmem.c (FT_Alloc_Debug, FT_Realloc_Debug,
FT_QAlloc_Debug, FT_QRealloc_Debug, FT_Free_Debug)
[FT_STRICT_ALIASING]: Implement.
      
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
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 found  in `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 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'),  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/
        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'.
  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 2003, 2005, 2006 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 ---