This folder contains | |
* Makefile skeletons for Apple MPW (Macintosh's Programmer's Workshop) | |
* Python script to generate MPW makefile from skeleton | |
* Metrowerks CodeWarrior 9.0 project file in XML format | |
------------------------------------------------------------ | |
1. What is this | |
--------------- | |
Files in this directory are designed to build FreeType | |
running on classic MacOS. To build FreeType running on | |
Mac OS X, build as the system is UNIX. | |
However, Mac OS X is most useful to manipulate files in | |
vanilla FreeType to fit classic MacOS. | |
The information about MacOS specific API is written in | |
appendix of this document. | |
2. Requirement | |
-------------- | |
You can use MPW: a free-charged developer environment | |
by Apple, or CodeWarrior: a commercial developer | |
environment by Metrowerks. GCC for MPW and Symantec | |
"Think C" are not tested at present. | |
2-1. Apple MPW | |
-------------- | |
Following C compilers are tested: | |
m68k target: Apple SC 8.9.0d3e1 | |
ppc target: Apple MrC 5.0.0d3c1 | |
The final MPW-GM (official release on 1999/Dec) is too | |
old and cannot compile FreeType, because bundled C | |
compilers cannot search header files in sub directories. | |
Updating by the final MPW-PR (pre-release on 2001/Feb) | |
is required. | |
Required files are downloadable from: | |
http://developer.apple.com/tools/mpw-tools/index.html | |
Also you can find documents how to update by MPW-PR. | |
Python is required to restore MPW makefiles from the | |
skeletons. Python bundled to Mac OS X is enough. For | |
classic MacOS, MacPython is available: | |
http://homepages.cwi.nl/~jack/macpython/ | |
MPW requires all files are typed by resource fork. | |
ResEdit bundled to MPW is enough. In Mac OS X, | |
/Developer/Tools/SetFile of DevTool is useful to | |
manipulate from commandline. | |
2-2. Metrowerks CodeWarrior | |
--------------------------- | |
XML project file is generated and tested by | |
CodeWarrior 9.0. Older versions are not tested | |
at all. At present, static library for ppc target | |
is available in the project file. | |
3. How to build | |
--------------- | |
3-1. Apple MPW | |
-------------- | |
Detailed building procedure by Apple MPW is | |
described in following. | |
3-1-1. Generate MPW makefiles from the skeletons | |
------------------------------------------------ | |
Here are 4 skeletons for following targets are | |
included. | |
- FreeType.m68k_far.make.txt | |
Ancient 32bit binary executable format for | |
m68k MacOS: System 6, with 32bit addressing | |
mode (far-pointer-model) So-called "Toolbox" | |
API is used. | |
- FreeType.m68k_cfm.make.txt | |
CFM binary executable format for m68k MacOS: | |
System 7. So-called "Toolbox" API is used. | |
- FreeType.ppc_classic.make.txt | |
CFM binary executable format for ppc MacOS: | |
System 7, MacOS 8, MacOS 9. So-called "Toolbox" | |
API is used. | |
- FreeType.ppc_carbon.make.txt | |
CFM binary executable format for ppc MacOS: | |
MacOS 9. Carbon API is used. | |
At present, static library is only supported, | |
although targets except of m68k_far are capable | |
to use shared library. | |
MPW makefile syntax uses 8bit characters. To keep | |
from violating them during version control, here | |
we store skeletons in pure ASCII format. You must | |
generate MPW makefile by Python script ascii2mpw.py. | |
In Mac OS X terminal, you can convert as: | |
python builds/mac/ascii2mpw.py \ | |
< builds/mac/FreeType.m68k_far.make.txt \ | |
> FreeType.m68k_far.make | |
The skeletons are designed to use in the top | |
directory where there are builds, include, src etc. | |
You must name the generated MPW makefile by removing | |
".txt" from source skeleton name. | |
3-1-2. Add resource forks to related files | |
------------------------------------------ | |
MPW's Make and C compilers cannot recognize files | |
without resource fork. You have to add resource | |
fork to the files that MPW uses. In Mac OS X | |
terminal of the system, you can do as: | |
find . -name '*.[ch]' -exec \ | |
/Developer/Tools/SetFile -a l -c "MPS " -t TEXT \{\} \; | |
find . -name '*.make' -exec \ | |
/Developer/Tools/SetFile -a l -c "MPS " -t TEXT \{\} \; | |
3-1-3. Open MPW shell and build | |
------------------------------- | |
Open MPW shell and go to the top directory that | |
FreeType sources are extracted (MPW makefile must | |
be located in there), from "Set Directory" in | |
"Directory" menu. | |
Choose "Build" from "Build" menu, and type the | |
name of project by removing ".make" from MPW | |
makefile, as: FreeType.m68k_far | |
If building is successfully finished, you can find | |
built library in objs/ directory. | |
3-2. Metrowerks CodeWarrior | |
--------------------------- | |
Detailed building procedure by Metrowerks | |
CodeWarrior (CW) 9.0 is described in following. | |
3-2-1. Import XML project file | |
------------------------------ | |
CW XML project file is not ready for double- | |
click. Start CodeWarrior IDE, and choose | |
"Import project" in "File" menu. Choose XML | |
project file: builds/mac/ftlib.prj.xml. | |
In next, you will be asked where to save CW | |
native project file: you must choose | |
"builds/mac/ftlib.prj". The project file is | |
designed with relative path from there. After | |
CW native project file is generated, it is | |
automatically loaded, small project window | |
titled "ftlib.prj" is displayed. | |
3-2-2. Building | |
--------------- | |
Choose "Make" from "Project" menu. If building | |
is successfully finished, you can find built | |
library at objs/FreeTypeLib. | |
4. TODO | |
------- | |
4-1. All modules should be included | |
----------------------------------- | |
At present, MPW makefiles and CW project file are | |
just updated versions of these by Leonard. Some | |
modules are added after the last maintenance, they | |
are not included. | |
4-2. Working test with ftdemos | |
------------------------------ | |
At present, MPW makefiles and CW project file can | |
build FreeType for classic MacOS. But their working | |
behaviours are not tested at all. Building ftdemos | |
for classic MacOS and working test is required. | |
4-3. Porting Jam onto MPW | |
------------------------- | |
FreeType uses Jam (and FT-Jam) for unified cross- | |
platform building tool. At present, Jam is not ported | |
to MPW. To update classic MacOS support easily, | |
building by Jam is expected on MPW. | |
APPENDIX I | |
---------- | |
A-1. Framework dependencies | |
--------------------------- | |
src/base/ftmac.c adds two Mac-specific features to | |
FreeType. These features are based on MacOS libraries. | |
* accessing resource-fork font | |
The fonts for classic MacOS store their graphical data | |
in resource forks which cannot be accessed via ANSI C | |
functions. FreeType2 provides functions to handle such | |
resource fork fonts, they are based on File Manager | |
framework of MacOS. In addition, HFS and HFS+ file | |
system driver of Linux is supported. Following | |
functions are for this purpose. | |
FT_New_Face_From_Resource() | |
FT_New_Face_From_FSSpec() | |
FT_New_Face_From_FSRef() | |
* resolving font name to font file | |
The font menu of MacOS application prefers font name | |
written in FOND resource than sfnt resource. FreeType2 | |
provides functions to find font file by name in MacOS | |
application, they are based on QuickDraw Font Manager | |
and Apple Type Service framework of MacOS. | |
FT_GetFile_From_Mac_Name() | |
FT_GetFile_From_Mac_ATS_Name() | |
Working functions for each MacOS are summarized as | |
following. | |
upto MacOS 6: | |
not tested (you have to obtain MPW 2.x) | |
MacOS 7.x, 8.x, 9.x (without CarbonLib): | |
FT_GetFile_From_Mac_Name() | |
FT_New_Face_From_Resource() | |
FT_New_Face_From_FSSpec() | |
MacOS 9.x (with CarbonLib): | |
FT_GetFile_From_Mac_Name() | |
FT_New_Face_From_Resource() | |
FT_New_Face_From_FSSpec() | |
FT_New_Face_From_FSRef() | |
Mac OS X upto 10.4.x: | |
FT_GetFile_From_Mac_Name() deprecated | |
FT_New_Face_From_FSSpec() deprecated | |
FT_GetFile_From_Mac_ATS_Name() deprecated? | |
FT_New_Face_From_FSRef() | |
A-2. Deprecated Functions | |
------------------------- | |
A-2-1. FileManager | |
------------------ | |
For convenience to write MacOS application, ftmac.c | |
provides functions to specify a file by FSSpec and FSRef, | |
because the file identification pathname had ever been | |
unrecommended method in MacOS programming. | |
Toward to MacOS X 10.4 & 5, Carbon functions using FSSpec | |
datatype is noticed as deprecated, and recommended to | |
migrate to FSRef datatype. The big differences of FSRef | |
against FSSpec are explained in Apple TechNotes 2078. | |
http://developer.apple.com/technotes/tn2002/tn2078.html | |
- filename length: the max length of file | |
name of FSRef is 255 chars (it is limit of HFS+), | |
that of FSSpec is 31 chars (it is limit of HFS). | |
- filename encoding: FSSpec is localized by | |
legacy encoding for each language system, | |
FSRef is Unicode enabled. | |
A-2-2. FontManager | |
------------------ | |
Following functions receive QuickDraw fontname: | |
FT_GetFile_From_Mac_Name() | |
QuickDraw is deprecated and replaced by Quartz | |
since Mac OS X 10.4. They are still kept for | |
backward compatibility. By undefinition of | |
HAVE_QUICKDRAW in building, you can change these | |
functions to return FT_Err_Unimplemented always. | |
Replacement functions are added for migration. | |
FT_GetFile_From_Mac_ATS_Name() | |
They are usable on Mac OS X only. On older systems, | |
these functions return FT_Err_Unimplemented always. | |
The detailed incompatibilities and possibility | |
of FontManager emulation without QuickDraw is | |
explained in | |
http://www.gyve.org/~mpsuzuki/ats_benchmark.html | |
A-3. Framework Availabilities | |
----------------------------- | |
The framework of MacOS are often revised, especially | |
when new format of binary executable is introduced. | |
Following table is the minimum version of frameworks | |
to use functions used in FreeType2. The table is | |
extracted from MPW header files for assembly language. | |
*** NOTE *** | |
The conditional definition of available data type | |
in MPW compiler is insufficient. You can compile | |
program using FSRef data type for older systems | |
(MacOS 7, 8) that don't know FSRef data type. | |
+-------------------+-----------------------------+ | |
CPU | mc680x0 | PowerPC | | |
+---------+---------+---------+---------+---------+ | |
Binary Executable Format | Classic | 68K-CFM | CFM | CFM | Mach-O | | |
+---------+---------+---------+---------+---------+ | |
Framework API | Toolbox | Toolbox | Toolbox | Carbon | Carbon | | |
+---------+---------+---------+---------+---------+ | |
+---------+---------+---------+---------+---------+ | |
| ?(*) |Interface|Interface|CarbonLib|Mac OS X | | |
| |Lib |Lib | | | | |
* Files.h +---------+---------+---------+---------+---------+ | |
PBGetFCBInfoSync() | o | 7.1- | 7.1- | 1.0- | o | | |
FSMakeFSSpec() | o | 7.1- | 7.1- | 1.0- | o | | |
FSGetForkCBInfo() | o | (**) | 9.0- | 1.0- | o | | |
FSpMakeFSRef() | o | (**) | 9.0- | 1.0- | o | | |
FSGetCatalogInfo() | o | (**) | 9.0- | 1.0- | -10.3 | | |
FSPathMakeRef() | x | x | x | 1.1- | -10.3 | | |
+---------+---------+---------+---------+---------+ | |
+---------+---------+---------+---------+---------+ | |
| ?(*) |Font |Font |CarbonLib|Mac OS X | | |
| |Manager |Manager | | | | |
* Fonts.h +---------+---------+---------+---------+---------+ | |
FMCreateFontFamilyIterator() | x | x | 9.0- | 1.0- | -10.3 | | |
FMDisposeFontFamilyIterator() | x | x | 9.0- | 1.0- | -10.3 | | |
FMGetNextFontFamily() | x | x | 9.0- | 1.0- | -10.3 | | |
FMGetFontFamilyName() | x | x | 9.0- | 1.0- | -10.3 | | |
FMCreateFontFamilyInstanceIterator() | x | x | 9.0- | 1.0- | -10.3 | | |
FMDisposeFontFamilyInstanceIterator() | x | x | 9.0- | 1.0- | -10.3 | | |
FMGetNextFontFamilyInstance() | x | x | 9.0- | 1.0- | -10.3 | | |
+---------+---------+---------+---------+---------+ | |
+---------+---------+---------+---------+---------+ | |
| - | - | - |CarbonLib|Mac OS X | | |
* ATSFont.h (***) +---------+---------+---------+---------+---------+ | |
ATSFontFindFromName() | x | x | x | x | o | | |
ATSFontGetFileSpecification() | x | x | x | x | o | | |
+---------+---------+---------+---------+---------+ | |
(*) | |
In the "Classic": the original binary executable | |
format, these framework functions are directly | |
transformed to MacOS system call. Therefore, the | |
exact availability should be checked by running | |
system. | |
(**) | |
InterfaceLib is bundled to MacOS and its version | |
is usually equal to MacOS. There's no separate | |
update for InterfaceLib. It is supposed that | |
there's no InterfaceLib 9.x for m68k platforms. | |
In fact, these functions are FSRef dependent. | |
(***) | |
ATSUI framework is available on ATSUnicode 8.5 on | |
ppc Toolbox CFM, CarbonLib 1.0 too. But its base: | |
ATS font manager is not published in these versions. | |
------------------------------------------------------------ | |
Last update: 2013-Nov-03. | |
Currently maintained by | |
suzuki toshiya, <mpsuzuki@hiroshima-u.ac.jp> | |
Originally prepared by | |
Leonard Rosenthol, <leonardr@lazerware.com> | |
Just van Rossum, <just@letterror.com> |