The makefile is for ppc-morphos-gcc-2.95.3-bin.tgz (gcc 2.95.3 hosted
on 68k-Amiga producing MorphOS-PPC-binaries from
http://www.morphos.de). To use it, type "make assign", then "make",
it produces a link library libft2_ppc.a.


The smakefile is a makefile for Amiga SAS/C 6.58 (no longer available,
latest sold version was 6.50, updates  can be found in Aminet).  It is
based on the version found  in the sourcecode of ttf.library 0.83b for
FreeType   1.3.1    from   Richard   Griffith   (ragriffi@sprynet.com,
http://ragriffi.home.sprynet.com).

You will  also need  the latest include  files and amiga.lib  from the
Amiga Developer  CD V2.1  (or newer, I  hope...) for AmigaOS  3.5, the
generated code should work under AmigaOS 2.04 (V37) and up.

To use it, call "smake  assign" and then "smake" from the builds/amiga
directory.  The results are:

- A link  library "ft2_680x0.lib" (where  x depends on the  setting of
  the  CPU entry  in  the smakefile)  containing  all FreeType2  parts
  except of  the init code,  debugging code, and the  system interface
  code.

- ftsystem.o, an object module  containing the standard version of the
  system interface  code which  uses fopen() fclose()  fread() fseek()
  ftell() malloc() realloc() and free() from lib:sc.lib (not pure).

- ftsystempure.o, an object module  containing the pure version of the
  system  interface  code  which  uses Open()  Close()  Read()  Seek()
  ExamineFH() AsmAllocPooled() AsmFreePooled()  etc.  This version can
  be used in both normal  programs and in Amiga run-time shared system
  librarys (can be  linked with lib:libinit.o, no copying  of DATA and
  BSS  hunks for  each OpenLibrary()  necessary).  Source  code  is in
  src/base/ftsystem.c.

- ftdebug.o, an  object module containing the standard  version of the
  debugging  code   which  uses  vprintf()  and   exit()  (not  pure).
  Debugging can be  turned on in FT:include/freetype/config/ftoption.h
  and with FT_SetTraceLevel().

- ftdebugpure.o, an  object module containing the pure  version of the
  debugging  code  which uses  KVPrintf()  from  lib:debug.lib and  no
  exit().  For  debugging of  Amiga run-time shared  system libraries.
  Source code is in src/base/ftdebug.c.

- NO ftinit.o.   Since linking  with a link  library should  result in
  linking  only  the  needed   object  modules  in  it,  but  standard
  ftsystem.o would  force ALL FreeType2  modules to be linked  to your
  program,  I decided  to use  a different  scheme: You  must #include
  FT:src/base/ftinit.c  in your  sourcecode and  specify  with #define
  statements       which       modules       you      need.        See
  include/freetype/config/ftmodule.h.


To use in your own programs:

- Insert   the   #define  and   #include   statements   from  top   of
  include/freetype/config/ftmodule.h in your source code and uncomment
  the #define statements for the FreeType2 modules you need.

- You  can  use  either  PARAMETERS=REGISTER or  PARAMETERS=STACK  for
  calling  the FreeType2  functions, since  the link  library  and the
  object files are compiled with PARAMETERS=BOTH.

- "smake assign" (assign "FT:" to the FreeType2 main directory).

- Compile your program.

- Link with either ftsystem.o  or ftsystempure.o, if debugging enabled
  with either ftdebug.o or (ftdebugpure.o and lib:debug.lib), and with
  ft2_680x0.lib as link library.


To adopt to other compilers:

- The standard ANSI  C maximum length of 31  significant characters in
  identifiers is not enough for FreeType2.  Check if your compiler has
  a minimum length of 40  significant characters or can be switched to
  it.   "idlen=40"   is  the   option  for  SAS/C.    Setting  #define
  HAVE_LIMIT_ON_IDENTS in an include file may also work (not tested).

- Make  sure that the  include directory  in builds/amiga  is searched
  before the  normal FreeType2 include  directory, so you are  able to
  replace problematic include files with your own version (same may be
  useful for the src directory).

- An example  of how to replace/workaround a  problematic include file
  is  include/config/ftconfig.h;  it  changes  a  #define  that  would
  prevent SAS/C  from generating  XDEF's where it  should do  that and
  then includes the standard FreeType2 include file.
