Files
freetype/howto/windows.txt
2023-08-27 18:03:45 +02:00

345 lines
12 KiB
Plaintext

The FreeType Windows Compilation HowTo
Contents
Introduction
I. Building the library
1. Quick Compilation
2. Manual compilation
3. Notes
II. Building other parts of the package
1. Test programs
2. Other contributions
III. Special issues of 16-bit Windows
Introduction
============
This file describes the compilation of the FreeType package on a
Windows system. It comes with Makefiles for the following
compilers:
- gcc/CygWin32 and gcc/MinGW32 with GNU make (32 bit)
- cl with nmake (16-bit and 32-bit Microsoft C and Visual C++)
- bcc with make (16-bit and 32-bit Borland C++ and also Borland
C++ builder)
Throughout this file, we use `winXX' if it applies indifferently to
both 16-bit and 32-bit versions. You should replace it with win16
resp. win32, as applicable.
NOTE:
You are advised to jump to section II.1 if you want to run the
FreeType test/demo programs as quick as possible.
I. Building the library
=======================
1. Quick Compilation
--------------------
The easiest way to compile the library on Windows is to go to the
directory `freetype/lib'. Then type, depending on your compiler:
gcc: make -f arch/win32/Makefile.gcc
cl: nmake /f arch\win16\Makefile.MS (for C/C++ 7)
cl: nmake /f arch\win16\Makefile.VC (for VC++ 16bit)
cl: nmake /f arch\win32\Makefile.CL (for VC++ 32bit)
bcc: make -farch/win16/Makefile.BC
bcc32: make -farch/win32/Makefile.BC
This should build the `libttf.a' or `libttf.lib' library files.
Of course, this assumes that your compiler is regularly installed.
You can also use the following targets:
clean - Cleans all intermediate object files created during
compilation. Keeps all library and executables in
place.
distclean - Cleans everything, leaving the directories as they
were before the compilation.
debug - Makes a development version of the library. Only
useful for FreeType developers and hackers.
Note that you can also select to use the `debugging' flags for
your compiler (instead of the `optimizing' ones), by defining
the `DEBUG' symbol, like in
nmake /f arch\win32\Makefile.CL DEBUG=1
make -farch/winXX/Makefile.BC /DDEBUG
etc.
Doing so will automatically select the debug target instead of
the normal mode.
For 16-bit compilers, you can also try to define the `BIGFONTS'
symbol, enabling the use of the `huge pointers' needed to handle
some big fonts. More on this at the end of this file.
Another way to compile the library is to use the IDE provided with
the following compilers: Borland C++ 5.0, Visual C++ 4.0, and
Visual C++ 5.0. The project/workspace files can be found in the
`freetype/lib/arch/win32' directory:
freetype.ide for Borland C++ 4.0 and 5.0 (and perhaps 4.5)
freetype.dsp project and workspace files for
freetype.dsw Visual C++ 5.0
freetype.mdp project and makefile files for
freetype.mak Visual C++ 4.0
They generate a static library, which contain the core engine as a
single object file, as well as all standard extensions.
Notes:
- You may need to update the include paths in the Borland C++
workspace settings. The current one looks in the directory
"c:\Program Files\Borland\BC 5.0\Include" for include files.
- Take care that some compilers may overwrite these files when
generating the library (e.g. Borland C++ creates its own
`freetype.mdp' file, which isn't a Visual C++ project during
compilation).
This is only important if you try to compile the lib with
several compilers.
We gladly accept project files for other compilers.
2. Manual compilation
---------------------
Here are explained the steps that are required to compile the
FreeType _library_ (and only this one) by hand.
Unlike previous versions, FreeType 1.1 and above can be compiled
in two modes, called `debug mode' and `single object mode'.
Debug mode is simply the normal way of compiling C programs, i.e.,
each `*.c' file is compiled into an individual `*.obj' object
file, and all of them are linked together into an archive (i.e.,
`*.lib' library).
Single object mode is slightly different: All C files are included
in a single source during compilation, resulting in a single final
object file for the core library. This has the advantage of
letting optimizing compilers do more global work, as well as
getting rid of all external which are used solely for the purpose
of components interfacing.
In both modes, you need to include the following paths to your
makefile/command line:
the location of all `tt*.[hc]' files
the location of system-specific files
For example, if you are compiling from the `freetype/lib'
directory, you can type for debug mode something like
gcc -c -I. -Iarch/win32 tt*.c
to compile all required files into object ones. Then assemble
them in a library with `ar', `lib', or `tlib'.
In single object mode, you only need to compile the file named
`freetype.c' which is located in `freetype/lib/arch/winXX'. From
the same directory as before, one would type
gcc -c -I. -Iarch/win32 arch/win32/freetype.c
You can also compile the extensions located in
`freetype/lib/extend' separately from the base engine. You will
need to include the same paths as before, though; be sure to add
the path to the `extend' directory, like in
gcc -c -I. -Iarch/win32 -Iextend extend/*.c
3. Building a DLL
-----------------
The easiest way to build the library as a DLL is also to use the
Makefiles we provide! Go to the directory `freetype/lib', then
type, depending on your compiler:
gcc: (not yet supported)
cl: nmake /f arch\win16\Makefile.VC DLL=1 dll (16bit)
cl: nmake /f arch\win32\Makefile.CL DLL=1 dll (32bit)
bcc: make -farch/win16/Makefile.BC -DDLL dll
bcc32: make -farch/win32/Makefile.BC -DDLL dll
This should build `ft13_XX.dll' (`13' for version 1.3, `XX' is
either 16 or 32), and the `libttf.lib' library file.
You can also use the following target:
install - Install the DLL `ft13_XX.dll' to your system directory
(`C:\WINDOWS' by default). You can override the
directory by specifying the name of the directory:
make -farch/winXX/Makefile.BC /DINSTALL_DIR=C:\TESTDLL install
nmake /f arch\win32\Makefile.CL INSTALL_DIR=D:\WINNT install
Note that you can also select to use the `debugging' flags for
your compiler (instead of the `optimizing' ones), by defining
the `DEBUG' symbol, like in
nmake /f arch\win16\Makefile.VC DEBUG=1 DLL=1 dll
make -farch/winXX/Makefile.BC /DDEBUG /DDLL dll
etc.
Another way to build to DLL with Visual C++ is to use a special
Makefile that does exactly that, without relying on any settings.
With VC++ 6.0, just type while in the `freetype/lib/arch/win32'
directory:
nmake /f makefile.vc
on the command line.
For other versions, modify the $(TOOLS32) variable to point to the
directory where the build tools are. No need to set any
environment variables.
4. Notes
--------
`char' is always `signed char' in the sources!
`ttconfig.h' relies heavily on a file called `ft_conf.h' that
contains information related to the target platform, located in
the `freetype/lib/arch/winXX/' directory. Depending on your
compiler, you may need to slightly edit it.
We use gcc as our reference compiler for warnings. This means
that we use the `-ansi -pedantic -Wall' flags and try to get rid
of warnings in this situation. If you are compiling with another
compiler, you may encounter warnings, not errors. Note that the
Borland compilers seem to produce lots of irrelevant warnings
(like `potential loss of precision').
II. Building other parts of the package
=======================================
1. Test programs
----------------
All test programs are located in `freetype/test'. Most of them
use a tiny graphics sub-system which is simply used to display
bitmaps and pixmaps on a variety of platforms. The Windows
version is a very basic one that only displays a small graphic
windows in addition to the console where the flow of messages
still goes.
To compile them, you must be in the `freetype/test' directory and
invoke the makefile in arch/winXX. For example:
nmake -f arch\os2\Makefile.VC
NOTE 1:
This will automatically invoke the library makefile for you!
NOTE 2:
For now, the graphical test programs only run on the following
platforms: Unix, OS/2, Dos, Amiga, and Windows.
The library, being pure ANSI-C, can be used on any system to
generate bitmaps and pixmaps.
2. Other contributions
----------------------
You may find some other contributions to the FreeType project in
the `freetype/contrib' directory. Each of these programs should
have its own Makefiles and documentations. Also check their
licenses, as the programs are not necessarily distributed under
the FreeType one.
Most of these contributions are targeted to Unix. You are invited
to port them to Windows, and then contribute your improvements.
III. Special issues of 16-bit Windows
=====================================
As usual, 16-bit Windows have some limitations.
First, and mainly, only the large model is usable. The small and
medium models are not usable, because the library uses more than
64kByte of data; and the compact model is unusable as well, since
the code of the library itself is slightly less than 64kByte, thus
leaving very small place for the real work. The net effect of
that limitation is that performances are not very impressive, to
say the least (32-bit DOS extenders perform usually three-time
faster).
Even with the large model, the rasterizer is still limited in
size, particularly with pixmaps (that is, with anti-aliasing gray
levels).
The test programs rely on a tiny graphical driver that mimics the
ones available on other platforms. It has some peculiarities.
First, as the test programs need a `console', the programs should
linked with some emulation of that concept. We used successfully
Borland EasyWin and Microsoft QuickWin for this purpose. Then,
the graphics window that displays the bitmaps incur the usual
64kByte limit: The size of the window is quite tiny, particularly
when displaying `gray-level' bitmaps (the size is then 320x200,
but contrary to full-screen MS-DOS the pixels are not magnified).
Ultimately, no efforts have been done to accomodate the colors of
the screen: As a result, displaying gray bitmaps in 256-color mode
uses only 4 levels of gray (instead of 5 rendered by the library).
Another annoying limitation exists with some East Asian fonts that
have 16,383 glyphs or more, since an internal table then
overflows. We tried to overcome this using so-called `huge
pointers', but then good support for these in the run-time library
is needed. To enable huge pointers, try defining the `BIGFONTS'
symbol with the makefile, like
nmake /f arch\win16\makefile.VC BIGFONTS=1
make -farch/win16/makefile.BC /DBIGFONTS
etc.
The makefiles for both Microsoft and Borland compilers depend on a
special file, arch/winXX/depend.win, which is built by a Unix
script named `makedep'. You may consider editing it if you
heavily modify the source files; or better yet, re-run the script,
using any clone of the Bourne shell and gcc, the GNU compiler,
with
arch/winXX/makedep
in both the `lib' and the `test' directories.
Good luck!
--- end of windows.txt ---