freetype2/builds/amiga
Werner Lemberg 92aa527a1c * builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.


Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'.  If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing.  The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'.  But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error.  The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.

* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.

* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.

* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.

* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.

* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.


Other formatting.
2005-05-23 21:33:02 +00:00
..
include/freetype/config Update of the Amiga port. 2005-03-25 22:18:01 +00:00
src/base * builds/amiga/src/base/ftsystem.c (ft_amiga_stream_io): Fix buffer 2005-03-26 22:57:57 +00:00
README Update of the Amiga port. 2005-03-25 22:18:01 +00:00
makefile Update of the Amiga port. 2005-03-26 10:18:38 +00:00
makefile.os4 * builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk 2005-05-23 21:33:02 +00:00
smakefile Update of the Amiga port. 2005-03-26 10:18:38 +00:00

README

The   makefile.os4  is  for  the  AmigaOS4  SDK.  To  use   it,   type
"make -f makefile.os4", it produces a link library libft2_ppc.a.

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  web   site  (http://www.amiga.com/3.9/download/NDK3.9.lha)  for
AmigaOS 3.9; the generated code should work under AmigaOS 2.04 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. Because  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, because 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 adapt 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.