# FreeType 2 top Jamfile.

#

# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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.





# The HDRMACRO is already defined in FTJam and is used to add

# the content of certain macros to the list of included header

# files.

#

# We can compile FreeType 2 with classic Jam however thanks to

# the following code

#

if ! $(JAM_TOOLSET)

{

  rule HDRMACRO

  {

    # nothing

  }

}





# We need to invoke a SubDir rule if the FT2 source directory top is not the

# current directory.  This allows us to build FreeType 2 as part of a larger

# project easily.

#

if $(FT2_TOP) != $(DOT)

{

  SubDir  FT2_TOP ;

}





# The following macros define the include directory, the source directory,

# and the final library name (without library extensions).  They can be

# replaced by other definitions when the library is compiled as part of

# a larger project.

#



# Name of FreeType include directory during compilation.

# This is relative to FT2_TOP.

#

FT2_INCLUDE_DIR ?= include ;



# Name of FreeType source directory during compilation.

# This is relative to FT2_TOP.

#

FT2_SRC_DIR ?= src ;



# Name of final library, without extension.

#

FT2_LIB ?= $(LIBPREFIX)freetype ;





# Define FT2_BUILD_INCLUDE to point to your build-specific directory.

# This is prepended to FT2_INCLUDE_DIR.  It can be used to specify

# the location of a custom <ft2build.h> which will point to custom

# versions of `ftmodule.h' and `ftoption.h', for example.

#

FT2_BUILD_INCLUDE ?= ;



# The list of modules to compile on any given build of the library.

# By default, this will contain _all_ modules defined in FT2_SRC_DIR.

#

# IMPORTANT: You'll need to change the content of `ftmodule.h' as well

#            if you modify this list or provide your own.

#

FT2_COMPONENTS ?= autofit    # auto-fitter

                  base       # base component (public APIs)

                  bdf        # BDF font driver

                  cache      # cache sub-system

                  cff        # CFF/CEF font driver

                  cid        # PostScript CID-keyed font driver

                  gzip       # support for gzip-compressed files

                  lzw        # support for LZW-compressed files

                  pcf        # PCF font driver

                  pfr        # PFR/TrueDoc font driver

                  psaux      # common PostScript routines module

                  pshinter   # PostScript hinter module

                  psnames    # PostScript names handling

                  raster     # monochrome rasterizer

                  smooth     # anti-aliased rasterizer

                  sfnt       # SFNT-based format support routines

                  truetype   # TrueType font driver

                  type1      # PostScript Type 1 font driver

                  type42     # PostScript Type 42 (embedded TrueType) driver

                  winfonts   # Windows FON/FNT font driver

                  ;





# Don't touch.

#

FT2_INCLUDE  = $(FT2_BUILD_INCLUDE)

               [ FT2_SubDir $(FT2_INCLUDE_DIR) ] ;



FT2_SRC      = [ FT2_SubDir $(FT2_SRC_DIR) ] ;



# Location of API Reference Documentation

#

if $(DOC_DIR)

{

  DOC_DIR = $(DOCDIR:T) ;

}

else

{

  DOC_DIR = docs/reference ;

}





# Only used by FreeType developers.

#

if $(DEBUG_HINTER)

{

  CCFLAGS += -DDEBUG_HINTER ;

}





# We need `freetype2/include' in the current include path in order to

# compile any part of FreeType 2.

#: updating documentation for upcoming release



HDRS += $(FT2_INCLUDE) ;





# We need to #define FT2_BUILD_LIBRARY so that our sources find the

# internal headers

#

DEFINES += FT2_BUILD_LIBRARY ;



# Uncomment the following line if you want to build individual source files

# for each FreeType 2 module.  This is only useful during development, and

# is better defined as an environment variable anyway!

#

# FT2_MULTI = true ;





# The file <freetype/config/ftheader.h> is used to define macros that are

# later used in #include statements.  It needs to be parsed in order to

# record these definitions.

#

HDRMACRO  [ FT2_SubDir  include freetype config ftheader.h ] ;

HDRMACRO  [ FT2_SubDir  include freetype internal internal.h ] ;





# Now include the Jamfile in `freetype2/src', used to drive the compilation

# of each FreeType 2 component and/or module.

#

SubInclude  FT2_TOP $(FT2_SRC_DIR) ;



# Handle the generation of the `ftexport.sym' file which contain the list

# of exported symbols.  This can be used on Unix by libtool.

#

SubInclude FT2_TOP $(FT2_SRC_DIR) tools ;



rule GenExportSymbols

{

  local  apinames = apinames$(SUFEXE) ;

  local  headers  = [ Glob $(2) : *.h ] ;



  LOCATE on $(1) = $(ALL_LOCATE_TARGET) ;



  APINAMES on $(1) = apinames$(SUFEXE) ;



  Depends            $(1) : $(apinames) $(headers) ;

  GenExportSymbols1  $(1) : $(headers) ;

  Clean              clean : $(1) ;

}



actions GenExportSymbols1 bind APINAMES

{

  $(APINAMES) $(2) > $(1)

}



GenExportSymbols  ftexport.sym : include/freetype include/freetype/cache ;



# Test files (hinter debugging).  Only used by FreeType developers.

#

if $(DEBUG_HINTER)

{

  SubInclude FT2_TOP tests ;

}



rule RefDoc

{

  Depends  $1 : all ;

  NotFile  $1 ;

  Always   $1 ;

}



actions RefDoc

{

  python $(FT2_SRC)/tools/docmaker/docmaker.py --prefix=ft2 --title=FreeType-2.4.2 --output=$(DOC_DIR) $(FT2_INCLUDE)/freetype/*.h $(FT2_INCLUDE)/freetype/config/*.h

}



RefDoc  refdoc ;





# end of top Jamfile

