# FreeType 2 top Jamfile (c) 2001 David Turner
#

# 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 ;
}

FT2_INCLUDE = [ FT2_SubDir include ] ;
FT2_SRC     = [ FT2_SubDir src ] ;

FT2_LIB     = $(LIBPREFIX)freetype ;

if $(DEBUG_HINTER)
{
  CCFLAGS += -DDEBUG_HINTER ;
}


# We need "freetype2/include" in the current include path in order to
# compile any part of FreeType 2.
#
SubDirHdr  += $(FT2_INCLUDE) ;

# Uncomment the following line if you want to build individual source files
# for each FreeType 2 module.
#
# 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 src ;


# tests files (hinter debugging)
#
if $(DEBUG_HINTER)
{
  SubInclude FT2_TOP tests ;
}

# end of top Jamfile
