# FreeType 2 src/base Jamfile
#
# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007 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.

SubDir  FT2_TOP $(FT2_SRC_DIR) base ;


{
  local  _sources ;

  if $(FT2_MULTI)
  {
    _sources = ftutil ftdbgmem ftstream ftcalc fttrigon ftgloadr ftoutln
               ftobjs ftnames  ftrfork  ;
  }
  else
  {
    _sources = ftbase ;
  }

  Library  $(FT2_LIB) : $(_sources).c ;
}

# Add the optional/replaceable files.
#
{
  local  _sources =  system  init    glyph  mm      bdf
                     bbox    debug   xf86   type1   pfr
                     stroke  winfnt  otval  bitmap  synth
                     gxval   lcdfil  gasp   patent
                     ;

  Library  $(FT2_LIB) : ft$(_sources).c ;
}

# Add Macintosh-specific file to the library when necessary.
#
if $(MAC)
{
  Library  $(FT2_LIB) : ftmac.c ;
}

# end of src/base Jamfile
