880 lines
33 KiB
Plaintext
880 lines
33 KiB
Plaintext
|
|
The FreeType compilation guide
|
|
|
|
|
|
Table of contents
|
|
-----------------
|
|
|
|
I. Introduction
|
|
|
|
II. Compiling and installing the C library
|
|
|
|
1. Choosing a configuration file
|
|
2. Compiling the library
|
|
3. System-specific builds
|
|
4. Compiling the extensions
|
|
5. Using a Makefile
|
|
6. Building a dynamic library (`DLL' or `so')
|
|
7. Internationalization and the `ftxerr18' extension
|
|
8. TrueType patents
|
|
|
|
|
|
III. Compiling the test programs
|
|
|
|
1. Compiling the graphics sub-system
|
|
2. Internationalization on Unix
|
|
3. Compiling the test programs
|
|
4. The `fdebug' program
|
|
|
|
|
|
IV. Compiling the Pascal source
|
|
|
|
1. Compiling the library
|
|
2. Compiling the test programs
|
|
3. Porting the library to a different Pascal compiler
|
|
|
|
--------------------------------------------------------------------
|
|
|
|
|
|
|
|
I. Introduction
|
|
===============
|
|
|
|
This file gives detailed information on how to compile and install
|
|
this release of FreeType on your system.
|
|
|
|
|
|
********************************************************************
|
|
* *
|
|
* FOR A QUICK INSTALLATION GUIDE, WE STRONGLY RECOMMEND TO READ *
|
|
* THE SYSTEM-SPECIFIC DOCUMENTS LOCATED IN THE `howto' DIRECTORY *
|
|
* INSTEAD OF THIS GENERIC DOCUMENTATION. *
|
|
* *
|
|
********************************************************************
|
|
|
|
|
|
This package, known as the FreeType 1.3.1 Public Release, contains
|
|
several things which are best described by the directories
|
|
containing them:
|
|
|
|
- `lib'
|
|
|
|
Contains the 1.3.1 release of the FreeType library. It is written
|
|
in portable ANSI C and should compile fine with any type of
|
|
ANSI C compiler.
|
|
|
|
Note however that some system-specific files are provided in the
|
|
`lib/arch' directory, in order to provide enhanced performance.
|
|
|
|
If you need to include FreeType in a graphics library or an
|
|
embedded system, you will most probably only need to use its
|
|
contents and discard the rest.
|
|
|
|
- `test'
|
|
|
|
Contains test and demo programs used during development. Note
|
|
that some of these programs might not compile on all platforms,
|
|
as they need to display graphics.
|
|
|
|
- `pascal'
|
|
|
|
Contains the Pascal version of FreeType's source code. Note
|
|
that the library has been successfully compiled with Turbo
|
|
Pascal 6, Borland Pascal 7, Virtual Pascal, Free Pascal,
|
|
Delphi 1, 2 and 3.
|
|
|
|
The pascal source tree contains its own test programs which
|
|
should *only* run with either Borland or Virtual Pascal
|
|
compilers.
|
|
|
|
- `po'
|
|
|
|
On Unix, all of FreeType test programs support
|
|
internationalization through the use of the `gettext' library.
|
|
This directory contains `po' files, which are used to translate
|
|
the original english text into language-specific one.
|
|
|
|
Note also that this release contains an extension, called
|
|
`ftxerr18' used to return internationalized strings from the
|
|
usual FreeType error codes. The `po' files also contain
|
|
translations for this extension.
|
|
|
|
If you don't plan to use `ftxerr18' or internationalization,
|
|
simply ignore it. Note also that even if `gettext' isn't
|
|
available on your system, the test programs will be compiled
|
|
correctly (using the `--disable-nls' configure switch).
|
|
|
|
- `contrib'
|
|
|
|
Contains a set of contributed tools and utilities related to
|
|
TrueType or FreeType. Here you can find real situations how to
|
|
use the library.
|
|
|
|
|
|
This file explains how to compile the library, and the test
|
|
programs on various platforms.
|
|
|
|
|
|
|
|
II. Compiling the C library
|
|
===========================
|
|
|
|
|
|
********************************************************************
|
|
* *
|
|
* NOTE THAT WE STRONGLY RECOMMEND TO READ THE SYSTEM-SPECIFIC *
|
|
* DOCUMENTS LOCATED IN THE `howto' DIRECTORY FOR A *
|
|
* `QUICK'N'EASY' COMPILATION & INSTALLATION GUIDE ON YOUR *
|
|
* PLATFORM. THE FOLLOWING IS A VERY DETAILED EXPLANATION ON HOW *
|
|
* TO COMPILE THE LIBRARY. *
|
|
* *
|
|
********************************************************************
|
|
|
|
|
|
The following concepts are important to build the library.
|
|
|
|
|
|
1. Choosing a configuration file
|
|
--------------------------------
|
|
|
|
The source code for the C library is located in the `lib'
|
|
directory.
|
|
|
|
It uses a file named `ft_conf.h', which contains the definitions
|
|
of many configuration macros to toggle various engine features,
|
|
as well as tell system-specific information (e.g., the size of
|
|
the `int' type in bytes, etc).
|
|
|
|
There are several configuration files provided with this
|
|
release. They are located in the `lib/arch/<system>' directory,
|
|
where <system> stands for a given architecture or environment.
|
|
|
|
For example, the file `lib/arch/ansi/ft_conf.h' can be used to
|
|
build the library with any ANSI-compliant compiler and runtime
|
|
library.
|
|
|
|
This release also provides configuration files for the following
|
|
systems: MS-DOS, OS/2, Unix, VMS, Win 16, Amiga OS, and Win 32.
|
|
|
|
Make sure, when compiling each source file of the FreeType
|
|
library, to include the path to your configuration file in your
|
|
include directories.
|
|
|
|
|
|
2. Compiling the library
|
|
------------------------
|
|
|
|
The library can be quickly compiled by invoking a Makefile, as
|
|
described in the system-specific documents in the `howto'
|
|
directory.
|
|
|
|
We will now describe how to compile the library by hand.
|
|
|
|
Traditionally, building a library like FreeType needs the
|
|
following steps:
|
|
|
|
- Compile each individual `.c' file into the corresponding
|
|
object file, whose extension might be `.o' or `.obj',
|
|
depending on the platform.
|
|
|
|
- Group all object files into a library (e.g. `libfreetype.a' or
|
|
`freetype.lib'), which is later used at link time to build the
|
|
executables using it.
|
|
|
|
For example, to build a static FreeType library on an ANSI
|
|
system, with gcc, one should type
|
|
|
|
cd lib # go to `lib' directory
|
|
gcc -c -Iarch/ansi tt*.c # compile base engine sources
|
|
ar -r libfreetype.a tt*.o # create library from objects
|
|
|
|
Note that we included the path to the configuration file in the
|
|
include list during compilation, by using the `-I' switch on the
|
|
`arch/ansi' directory. This is required to use the
|
|
configuration file named `lib/arch/ansi/ft_conf.h'.
|
|
|
|
However, we recommend you to build the base FreeType engine as a
|
|
SINGLE OBJECT FILE, i.e., a single `freetype.o' or
|
|
`freetype.obj' file containing all the code for the base engine.
|
|
It works by including all the `.c' files in a single one, and
|
|
has a few advantages over a `traditional build':
|
|
|
|
- Because all the code is `part' of a single source file, many
|
|
internal functions need not be declared as `extern' anymore.
|
|
|
|
This means that when compiling the engine as a dynamic
|
|
library, only FreeType external functions will (correctly) be
|
|
exported as entry points.
|
|
|
|
This also typically allows the compiler to perform more
|
|
aggressive optimizations on the source code, and results in
|
|
somewhat faster and/or smaller overall code size depending on
|
|
your compiler and environment.
|
|
|
|
- Compilation speed is greatly improved, as the pre-processor
|
|
and compiler need to be called only once, instead of a dozen
|
|
times.
|
|
|
|
- During development, this allows to detect very easily
|
|
unresolved dependencies regarding the base engine's internal
|
|
symbols.
|
|
|
|
To compile the engine as a single object file, simply go to the
|
|
`lib' directory and compile the file
|
|
`lib/arch/<system>/freetype.c'.
|
|
|
|
For example, to compile the ANSI build with gcc in SINGLE OBJECT
|
|
MODE, use
|
|
|
|
cd lib
|
|
gcc -c -Iarch/ansi -I. arch/ansi/freetype.c
|
|
|
|
This will create a single file called `freetype.o' containing
|
|
the object code for the base TrueType engine.
|
|
|
|
Note that we did include the paths to the configuration file
|
|
(i.e. `arch/ansi') AND to the current directory (i.e. `.',
|
|
where the included source files are located).
|
|
|
|
`freetype.o' only contains the base engine. Extensions to the
|
|
engine are located in the `lib/extend' directory and must be
|
|
compiled separately as described later.
|
|
|
|
|
|
3. System-specific builds
|
|
-------------------------
|
|
|
|
The files `ttfile.c', `ttmemory.c', and `ttmutex.c' are used to
|
|
provide an implementation of i/o access, memory management, and
|
|
thread synchronization for the rest of the library.
|
|
|
|
These source files, located in the `lib' directory, use the ANSI
|
|
C library for i/o and memory, and simply ignore threads (as the
|
|
standard doesn't know threads at all).
|
|
|
|
However, this release provides, for each supported platform,
|
|
system-specific versions of these files, located in the
|
|
`lib/arch/<system>' hierarchy. Here are a few examples:
|
|
|
|
lib/arch/os2/os2file.c:
|
|
|
|
A replacement for `ttfile' which directly uses OS/2 system
|
|
calls for i/o access. This results in slightly better
|
|
performance, but much reduced resource requirements.
|
|
|
|
lib/arch/unix/ttmmap.c:
|
|
|
|
A replacement for `ttfile' which uses memory-mapped files
|
|
instead of buffered-based reads on Unix. This increases
|
|
*dramatically* the engine's performance when reading font
|
|
files and loading glyphs.
|
|
|
|
These files are directly included by the platform specific
|
|
versions of `freetype.c' which are located in
|
|
`lib/arch/<system>'. This means that, by default, the
|
|
single-object build of FreeType always chooses the best
|
|
implementation available for a supported system.
|
|
|
|
Note that it is also possible to redefine `ttmemory' or
|
|
`ttmutex' with a similar scheme. This is used, for example, by
|
|
the OS/2 font driver based on FreeType (called FreeType/2),
|
|
which uses some special system calls to allocate memory
|
|
shareable among distinct processes.
|
|
|
|
By providing your own version of `ttfile', `ttmemory', and
|
|
`ttmutex', you are able to tailor the FreeType engine for
|
|
optimal performance and resource usage on your system.
|
|
|
|
|
|
4. Compiling the extensions
|
|
---------------------------
|
|
|
|
The base TrueType engine is located in the `lib' directory.
|
|
This release also provides many specific extensions in
|
|
`lib/extend'.
|
|
|
|
An extension is a simple way to extend FreeType's capabilities.
|
|
It is used to perform any of the following:
|
|
|
|
- Access some TrueType tables that are not loaded and returned
|
|
by the base engine, like
|
|
|
|
* the kerning table(s)
|
|
* the `gasp' table
|
|
* the glyph Postscript names
|
|
* some OpenType layout tables (GDEF, GSUB; GPOS is not
|
|
finished yet)
|
|
|
|
- Perform some advanced operations on the TrueType data for very
|
|
specific uses, like
|
|
|
|
* enumerate the contents of a given charmap
|
|
* access a font file's embedded bitmaps (called sbits)
|
|
* return an array containing the dimensions of each glyph in
|
|
the font
|
|
|
|
The idea is to keep the base engine small (under 50kByte), while
|
|
providing optional enhancements for specific uses.
|
|
|
|
Writing an extension is rather easy. And adding a new extension
|
|
to the engine doesn't need any modifications to the base
|
|
engine's source code.
|
|
|
|
To compile the extensions, simply go to the `lib' directory,
|
|
then compile each file in `lib/extend'. Here is an example with
|
|
gcc:
|
|
|
|
cd lib ; go to `lib'
|
|
gcc -c -Iarch/ansi -I. extend/ftx*.c ; compile all extensions
|
|
|
|
|
|
You can later add each extension object file to the FreeType
|
|
library file. For example, here is how to create the static
|
|
library on Unix:
|
|
|
|
cd lib
|
|
-- compile the engine, then the extensions
|
|
ar libfreetype.a *.o ; create static library
|
|
|
|
|
|
5. Using a Makefile
|
|
-------------------
|
|
|
|
This release also provides Makefiles for many systems and
|
|
compilers in the `lib/arch/<system>' hierarchy. For more
|
|
information, please read the documentation in the `howto'
|
|
directory, which contains system-specific instructions on how to
|
|
use them.
|
|
|
|
Generally, you should go the `lib' directory, then invoke your
|
|
system-specific Makefile from there. Here is an example:
|
|
|
|
cd lib
|
|
make -farch\msdos\Makefile.TC
|
|
|
|
to compile the library under DOS with the Turbo C compiler and
|
|
make tool. Or:
|
|
|
|
cd lib
|
|
wmake -f arch\msdos\Makefile.wat
|
|
|
|
to compile it under DOS with the Watcom compiler and wmake tool.
|
|
|
|
The ANSI target does not come with a Makefile, as there is no
|
|
standard make tool available on all platforms. You will have to
|
|
compile the library by hand as described in section I.3.
|
|
|
|
We welcome new Makefile submissions for platforms not currently
|
|
listed in the `lib/arch' hierarchy.
|
|
|
|
Finally, note that most of the makefiles will build the library
|
|
in single object mode; for a `traditional compile', try the
|
|
`debug' target (i.e., say `make debug').
|
|
|
|
|
|
6. Building a dynamic library (`DLL' or `so')
|
|
---------------------------------------------
|
|
|
|
It is possible to build the engine as a dynamic library. The
|
|
method to do so can vary greatly depending on the platform.
|
|
|
|
a. Building a shared object on Unix
|
|
|
|
NOTE THAT THIS RELEASE USES `libtool' TO AUTOMATICALLY CREATE
|
|
A SHARED OBJECT FOR FREETYPE ON UNIX SYSTEMS THAT SUPPORT
|
|
DYNAMIC LIBRARIES. WE STRONGLY RECOMMEND YOU TO READ THE
|
|
`howto/unix.txt' FILE TO KNOW HOW TO USE THE `configure'
|
|
SCRIPT. THIS SUB-SECTION DESCRIBES HOW TO COMPILE THE SHARED
|
|
OBJECT BY HAND.
|
|
|
|
In order to build a shared object like `libfreetype.so' on
|
|
Unix, one has to compile each object file as
|
|
position-independent code (a.k.a. PIC).
|
|
|
|
We also strongly recommend to build the base engine as a
|
|
single object, as this prevents internal `extern' functions to
|
|
be exported as entry points (and creating a smaller overall
|
|
.so file).
|
|
|
|
For example, this with gcc, one can use the `-fPIC' flag when
|
|
compiling the object files. Here is an example:
|
|
|
|
cd lib ; go to `lib'
|
|
gcc -c -fPIC -Iarch/ansi -I. \
|
|
arch/ansi/freetype.c ; compile engine
|
|
gcc -c -fPIC -Iarch/ansi -I. extend/ftx*.c ; & extensions
|
|
|
|
You can now invoke your linker to create the shared object
|
|
from the various object files. See your system's
|
|
documentation for details, or read the Unix-specific howto to
|
|
know how to do it `easily' through the use of `libtool'.
|
|
|
|
b. Building a DLL on Windows or OS/2
|
|
|
|
The dynamic linkers of Windows and OS/2 differ greatly from
|
|
Unix ones.
|
|
|
|
- The first difference is that the object files that make up
|
|
the DLL do not need to be compiled as position-independent
|
|
code.
|
|
|
|
- The second difference is that the DLL's entry points must
|
|
generally be declared as so in the source file, and/or maybe
|
|
listed in a `definition' file used at link time when
|
|
creating the DLL.
|
|
|
|
Each FreeType API function is declared with the help of a
|
|
special macro named EXPORT_DEF. For example, here is the
|
|
declaration of the function `FT_Init_FreeType', as written in
|
|
`freetype.h':
|
|
|
|
EXPORT_DEF
|
|
TT_Error TT_Init_FreeType( TT_Engine* engine );
|
|
|
|
If the configuration file `ft_conf.h' doesn't define
|
|
EXPORT_DEF, it is automatically set to `extern' by default.
|
|
|
|
In order to build FreeType as a DLL, one might need to define
|
|
EXPORT_DEF in its `ft_conf.h' to a keyword tagging the
|
|
function as a DLL entry point. This keyword varies with
|
|
compilers and platforms; examples are `__system',
|
|
`__dllentry', etc.
|
|
|
|
Please refer to your compiler's user guide for instructions.
|
|
|
|
You can also `grep' for EXPORT_DEF in the `freetype.h' source
|
|
file to obtain the list of exported functions of the FreeType
|
|
API, which could then be used to write a `def' file for the
|
|
DLL. We provide a sample .def file (built with an Unix script)
|
|
for Windows.
|
|
|
|
Note also that the definition (i.e. its implementation) of
|
|
each exported function is preceded with the EXPORT_FUNC macro,
|
|
as in
|
|
|
|
EXPORT_FUNC
|
|
TT_Error TT_Init_FreeType( TT_Engine* engine )
|
|
{
|
|
TT_Error error;
|
|
...
|
|
}
|
|
|
|
(to be found in `ttapi.c').
|
|
|
|
By default, EXPORT_FUNC converts to an empty string, but it
|
|
can also be redefined if you need to.
|
|
|
|
Note that the EXPORT_DEF/EXPORT_FUNC mechanism does not work
|
|
for 16-bit Windows (in this environment, the special keyword
|
|
for declaring entry points, (the `__export' keyword), must be
|
|
after the type name). We suggest you to use the makefiles we
|
|
provide for both Microsoft and Borland compilers.
|
|
|
|
|
|
7. Internationalization and the `ftxerr18' extension
|
|
----------------------------------------------------
|
|
|
|
The engine extension named `ftxerr18' is used to convert a
|
|
FreeType error code into a human-readable string of text.
|
|
|
|
However, it is able to support internationalization on Unix
|
|
systems through the use of the `gettext' library. This means
|
|
that the error messages will be localized to your system's
|
|
language, provided it is available in this release. The
|
|
currently available languages are
|
|
|
|
- English (by default)
|
|
- Czech
|
|
- German
|
|
- Spanish
|
|
- French
|
|
- Dutch
|
|
|
|
One can add a new language by adding a `.po' file in the `po'
|
|
directory. Please read the file `docs/i18n.txt' for more
|
|
details on how to use `gettext'.
|
|
|
|
In order to enable localization of the `ftxerr18' extension, one
|
|
has to set the macro HAVE_LIBINTL_H at compile time. By
|
|
default, the extension will build with support for the English
|
|
language.
|
|
|
|
Unix-specific: -------------------------------------------------
|
|
|
|
Note that the Unix `configure' script that comes with this
|
|
release is able to automatically detect whether your system
|
|
has `gettext' installed and set HAVE_LIBINTL_H in the
|
|
`ft_conf_h' file accordingly.
|
|
|
|
To disable internationalization, run `configure' with the
|
|
option `--disable-nls' (NLS stands for `National Language
|
|
Support'). Then rebuild the library.
|
|
|
|
----------------------------------------------------------------
|
|
|
|
Note that we do not support internationalization on non-Unix
|
|
platforms, as the `gettext' library isn't available everywhere,
|
|
or does not work in a consistent way in different environments.
|
|
|
|
|
|
8. TrueType patents
|
|
-------------------
|
|
|
|
We have recently discovered that Apple owns several patents that
|
|
relate to the rendering of TrueType fonts. This could mean that
|
|
the free use and distribution of the FreeType library could be
|
|
illegal in the US, Japan, and possibly other countries.
|
|
|
|
For more information, please see the FreeType Patents page at:
|
|
|
|
http://www.freetype.org/patents.htm
|
|
|
|
This section will now explain how to build a `patent-free'
|
|
engine, at the cost of rendering quality. This is done simply
|
|
by de-activating the compilation of the TrueType bytecode
|
|
interpreter (which is the only part of FreeType that might
|
|
violate an Apple patent). This has two effects:
|
|
|
|
- saving about 18kByte of code in the engine
|
|
- ignoring completely the grid-fitting of vector outlines, which
|
|
results in extremely low quality at small pixel sizes.
|
|
|
|
Such an engine can be used by font converters and/or graphics
|
|
libraries to display glyphs at high pixel sizes.
|
|
|
|
In order to do so, simply look for the following line in your
|
|
configuration file `ft_conf.h':
|
|
|
|
#undef FT_CONFIG_OPTION_NO_INTERPRETER
|
|
|
|
Then change the `#undef' into a `#define':
|
|
|
|
#define FT_CONFIG_OPTION_NO_INTERPRETER
|
|
|
|
Now rebuild the engine with this new configuration file.
|
|
|
|
|
|
|
|
III. Compiling the test programs
|
|
================================
|
|
|
|
This section explains how to compile the FreeType test programs
|
|
located in the `test' directory. Note that you should have
|
|
successfully compiled the library, as described in section I
|
|
before proceeding.
|
|
|
|
WE STRONGLY RECOMMEND TO READ THE SYSTEM-SPECIFIC DOCUMENTS IN THE
|
|
`howto' DIRECTORY FOR A `QUICK'N'EASY' GUIDE ON HOW TO COMPILE AND
|
|
RUN THE TEST PROGRAMS.
|
|
|
|
|
|
1. Compile the graphics sub-system and utility sources
|
|
------------------------------------------------------
|
|
|
|
Some of the test programs need to display a graphics window to
|
|
show their results. In order to do so, they use a tiny graphics
|
|
system which was specifically written for FreeType (Note: The
|
|
code isn't really clean there -- you have been warned).
|
|
|
|
Also, some simple C sources in the `test' directory are utility
|
|
functions used by nearly all test programs, and they should also
|
|
be compiled before them. These are the following files:
|
|
|
|
gmain.h: the sub-system interface
|
|
gmain.c: the sub-system device-independent implementation
|
|
gevents.h: the definition of the events used by the test
|
|
program
|
|
gdriver.h: the system-specific device interface
|
|
blitter.c: a set of simple bitmap blitting functions
|
|
common.c: common routines used by all test programs
|
|
display.c: some routines dealing with text display
|
|
|
|
as well as a system-specific `graphics driver' located in the
|
|
`test/arch/<system>' hierarchy. For example:
|
|
|
|
test/arch/msdos/gfs_dos.c: used to display graphics in a
|
|
full-screen Dos session
|
|
test/arch/os2/gpm_os2.c: used to display graphics in an OS/2
|
|
Presentation Manager window
|
|
test/arch/unix/gwin_x11.c: used to display graphics in an X11
|
|
window.
|
|
|
|
You must compile the graphics sub-system and utilities before
|
|
compiling the test programs. This can be done simply with gcc
|
|
as:
|
|
|
|
cd test
|
|
gcc -c -I../lib gmain.c blitter.c common.c display.c
|
|
gcc -c -I../lib -I. arch/<system>/yourdriver.c -o ./gdriver.o
|
|
|
|
Note that a given test program may require some specific include
|
|
paths (like `/usr/X11/include' with X11 for example).
|
|
|
|
The resulting object files can be grouped in a library if you
|
|
want to.
|
|
|
|
|
|
2. Internationalization on Unix
|
|
-------------------------------
|
|
|
|
On Unix and Unix-like systems, the test programs are able to
|
|
support internationalization through the use of the `gettext'
|
|
library and the `ftxerr18' engine extension (see section I.7).
|
|
|
|
To enable it, one has to compile each test program with the
|
|
macro HAVE_LIBINTL_H set. This is the same macro used to enable
|
|
it in `ftxerr18'.
|
|
|
|
Note that the Unix `configure' script that comes with this
|
|
release is able to automatically detect whether `gettext' is
|
|
available on your system and set the macro accordingly when
|
|
compiling the test programs.
|
|
|
|
You can disable internationalisation with the `--disable-nls'
|
|
option when invoking the `configure' script.
|
|
|
|
|
|
3. Compile the test programs
|
|
----------------------------
|
|
|
|
All test programs begin with the `ft' prefix in the `test'
|
|
directory, as in `ftzoom', `ftdump', `ftmetric'", etc. are test
|
|
programs.
|
|
|
|
The easiest way to compile the test programs is compiling each
|
|
source file to an object file, including the path to the
|
|
FreeType engine source and its extensions. You need to use the
|
|
following include paths:
|
|
|
|
- the path to the engine's public header file, i.e. `freetype.h'
|
|
which normally is `lib'
|
|
|
|
- the path to the engine's extensions header files, located
|
|
normally in `lib/extend'
|
|
|
|
- the path to the configuration file `ft_conf.h'. This is only
|
|
required to support internationalisation, as the test programs
|
|
read `ft_conf.h' only to see whether HAVE_LIBINTL_H is
|
|
defined.
|
|
|
|
When compiling your own programs to FreeType, you shouldn't
|
|
normally need this file and path.
|
|
|
|
Here is an example, compiling a test program with the ANSI
|
|
build:
|
|
|
|
cd test
|
|
gcc -c -I../lib -I../lib/extend -I../lib/arch/ansi \
|
|
<program name>.c
|
|
|
|
Then, link this object file to the FreeType library, utilities
|
|
and graphics sub-system to build an executable.
|
|
|
|
You can then invoke each program directly.
|
|
|
|
|
|
4. The `fdebug' test program
|
|
----------------------------
|
|
|
|
All test programs begin with the `ft' prefix (in the `test'
|
|
directory) as in `ftzoom', `ftdump', `ftmetric', etc.
|
|
|
|
However, one test program named `fdebug' is used exclusively by
|
|
FreeType developers. It is a very simple TrueType bytecode
|
|
debugger, and was written to inspect the execution of the
|
|
TrueType interpreter.
|
|
|
|
Note that we rather use the Pascal debugger for real work on the
|
|
interpreter, as it provides a much easier windowed interface
|
|
through the use of the Turbo Vision library. The C debugger is
|
|
mainly used to check that both Pascal and C sources produce the
|
|
same output.
|
|
|
|
You will need gcc to compile the debugger. It uses a special
|
|
build of the FreeType engine to work. Follow these steps to
|
|
compile it:
|
|
|
|
1. Compile the library for the `debugger' system, i.e.
|
|
|
|
cd freetype/lib
|
|
make -f arch/debugger/Makefile
|
|
|
|
this will create a file named `libttf.a' in the directory
|
|
`freetype/lib/arch/debugger' which will NOT interfere with
|
|
your normal build (which is located in `freetype/lib').
|
|
|
|
2. Compile the debugger:
|
|
|
|
cd freetype/test
|
|
make -f arch/debugger/Makefile
|
|
|
|
This will create an executable called `fdebug.exe' or
|
|
`fdebug', which is linked with the version of the library
|
|
found in `freetype/lib/arch/debugger' as described above.
|
|
|
|
[For old Unix variants like 4.2BSD please uncomment the flag
|
|
HAVE_POSIX_TERMIOS in the makefile.]
|
|
|
|
You can invoke the debugger in two ways:
|
|
|
|
a. To debug a given glyph program in a given font, type
|
|
|
|
fdebug glyph_number pointsize fontfile[.ttf]
|
|
|
|
b. To debug a given font's CVT program, type
|
|
|
|
fdebug --cvt pointsize fontfile[.ttf]
|
|
|
|
Type `?' while running fdebug for a list of key bindings.
|
|
|
|
|
|
IV. Compiling the Pascal source
|
|
===============================
|
|
|
|
This section deals with the compilation of the Pascal version of
|
|
the FreeType engine, whose source code is located in the `pascal'
|
|
directory.
|
|
|
|
Note that the Pascal version is more limited than the C one, as it
|
|
lacks the following `features':
|
|
|
|
- Extensions are neither supported nor provided in Pascal.
|
|
|
|
- The interpreter is more pedantic than the C one and will
|
|
probably not work with many broken glyphs.
|
|
|
|
- It doesn't compile on old Turbo Pascal (TP 6.0 is a minimum), as
|
|
it uses inline assembly code.
|
|
|
|
Other than that, the Pascal version supports charmaps and the name
|
|
table correctly since the 1.3 release.
|
|
|
|
********************************************************************
|
|
* *
|
|
* AN IMPORTANT NOTE REGARDING TURBO AND BORLAND PASCAL USERS *
|
|
* ========================================================== *
|
|
* *
|
|
* Programs compiled with TP6 and BP7 might not be able to run on *
|
|
* fast machines! *
|
|
* *
|
|
* Usually, the program aborts immediately with a message like *
|
|
* *
|
|
* Runtime error 200: Divide by zero at xxxx:xxxx *
|
|
* *
|
|
* The bug is located in the runtime's initialization routine *
|
|
* used to compute the machine's speed. It does so by dividing a *
|
|
* value taken through the BIOS timer by a small constant. *
|
|
* *
|
|
* On fast machines, the result exceeds 16 bits, which causes a *
|
|
* CPU exception/interrupt. The latter is caught by the *
|
|
* runtime's exception handlers which aborts the execution and *
|
|
* prints the above message. *
|
|
* *
|
|
* We don't know anything that can be done to fix this bug, as it *
|
|
* would need a recompilation of a version of the Borland runtime *
|
|
* initialization code. *
|
|
* *
|
|
********************************************************************
|
|
|
|
Due to lack of time, the library could not be fully tested under
|
|
TP6 or BP7.
|
|
|
|
|
|
1. Compiling the library
|
|
------------------------
|
|
|
|
The library itself is located in `pascal/lib'. You can compile
|
|
it very simply by invoking your Pascal compiler on the file
|
|
`freetype.pas'.
|
|
|
|
As always with Pascal, dependencies are resolved automatically.
|
|
|
|
|
|
2. Compiling the test programs
|
|
------------------------------
|
|
|
|
The test programs are located in `pascal/test'. You will mainly
|
|
find there the following:
|
|
|
|
lint - A TrueType glyph loading checker. This test program
|
|
will simply load each glyph in a font file and check
|
|
for errors in its hinting programs. It is useful to
|
|
find broken glyphs in fonts.
|
|
|
|
view - A simple TrueType glyph viewer. Shows all the glyphs
|
|
within a given font file on a graphics screen. Only
|
|
works under DOS (with Borland Pascal) and OS/2 (with
|
|
Virtual Pascal).
|
|
|
|
timer - A simple benchmark program for the scan-line
|
|
converter. Similar to the C `fttimer' test program.
|
|
|
|
debugger - A TrueType bytecode debugger. This one must be
|
|
compiled with the Turbo Vision library. It uses a
|
|
rather advanced windowed interface to display the
|
|
glyph program and their execution. It can also
|
|
display the current glyph in a graphics window. A
|
|
bit rough but extremely useful to the development
|
|
of FreeType.
|
|
|
|
dump - A TrueType metrics checker. This test program simply
|
|
checks that the hinted width of each glyph corresponds
|
|
to the one found in the TrueType `hdmx' table when
|
|
present. This program is now obsolete and should be
|
|
ignored.
|
|
|
|
As always, simply invoke the root source file to make an
|
|
executable automatically -- don't forget to include the path to
|
|
the FreeType unit as described in section III.1.
|
|
|
|
|
|
3. Porting the library to a different Pascal compiler
|
|
-----------------------------------------------------
|
|
|
|
The Pascal sources use inline assembly to implement the 64-bit
|
|
computation routines needed by the TrueType engine. This
|
|
release comes with various versions of the `ttcalc' inline
|
|
assembly.
|
|
|
|
These files are (within `pascal/lib'):
|
|
|
|
ttcalc1.inc: for Turbo and Borland Pascal & Delphi 1 (16-bit)
|
|
ttcalc2.inc: for Virtual Pascal (32-bit)
|
|
ttcalc3.inc: for Delphi 2 & 3 (untested on Delphi 4 & 5)
|
|
ttcalc4.inc: for Free Pascal on a i386 (32-bit)
|
|
|
|
Note that in order to port the Pascal source to a new compiler,
|
|
one has to:
|
|
|
|
a. Write a specific version of `ttcalc?.inc' for the compiler's
|
|
inline assembly.
|
|
|
|
Be sure to respect the compiler's assembler syntax, as well
|
|
as its parameter-passing function interface, i.e., which
|
|
registers and/or stack slots are used to pass arguments at
|
|
function call.
|
|
|
|
b. Add some lines to detect your compiler in `ttconfig.inc'.
|
|
|
|
This file contains some tests to define macros used to
|
|
determine which compiler is used. These macros are used
|
|
later in `ttcalc.pas' in order to select the correct inline
|
|
assembly file to use.
|
|
|
|
See the source files for more details.
|
|
|
|
c. Add an include to the new `ttcalc?.inc' in `ttcalc.pas'.
|
|
|
|
Make this according to the compiler detected in
|
|
`ttconfig.inc'.
|
|
|
|
See the source files for more details.
|
|
|
|
d. Submit your changes to the FreeType Developers list.
|
|
|
|
In order to see them added to the next release of the Pascal
|
|
engine.
|
|
|
|
|
|
--- end of INSTALL ---
|