3 * Makefile skeltons for Apple MPW (Macintosh's Programmers Workshop)
5 * Python script to generate MPW makefile from skelton
7 * Metrowerks CodeWarrior 9.0 project file in XML format
9 ------------------------------------------------------------
14 Files in this directory are designed to build FreeType
15 running on classic MacOS. To build FreeType running on
16 Mac OS X, build as the system is UNIX.
18 However, Mac OS X is most useful to manipulate files in
19 vanilla FreeType to fit classic MacOS.
21 The information about MacOS specific API is written in
22 appendix of this document.
27 You can use MPW: a free-charged developer environment
28 by Apple, or CodeWarrior: a commercial developer
29 environment by Metrowerks. GCC for MPW and Symantec
30 "Think C" are not tested at present.
36 Following C compilers are tested:
38 m68k target: Apple SC 8.9.0d3e1
39 ppc target: Apple MrC 5.0.0d3c1
41 The final MPW-GM (official release on 1999/Dec) is too
42 old and cannot compile FreeType, because bundled C
43 compilers cannot search header files in sub directories.
44 Updating by the final MPW-PR (pre-release on 2001/Feb)
47 Required files are downloadable from:
49 http://developer.apple.com/tools/mpw-tools/index.html
51 Also you can find documents how to update by MPW-PR.
53 Python is required to restore MPW makefiles from the
54 skeltons. Python bundled to Mac OS X is enough. For
55 classic MacOS, MacPython is available:
57 http://homepages.cwi.nl/~jack/macpython/
59 MPW requires all files are typed by resource fork.
60 ResEdit bundled to MPW is enough. In Mac OS X,
61 /Developer/Tools/SetFile of DevTool is useful to
62 manipulate from commandline.
64 2-2. Metrowerks CodeWarrior
65 ---------------------------
67 XML project file is generated and tested by
68 CodeWarrior 9.0. Older versions are not tested
69 at all. At present, static library for ppc target
70 is available in the project file.
78 Detailed building procedure by Apple MPW is
79 described in following.
81 3-1-1. Generate MPW makefiles from the skeltons
82 ------------------------------------------------
84 Here are 4 skeltons for following targets are
87 - FreeType.m68k_far.make.txt
88 Ancient 32bit binary executable format for
89 m68k MacOS: System 6, with 32bit addressing
90 mode (far-pointer-model) So-called "Toolbox"
93 - FreeType.m68k_cfm.make.txt
94 CFM binary executable format for m68k MacOS:
95 System 7. So-called "Toolbox" API is used.
97 - FreeType.ppc_classic.make.txt
98 CFM binary executable format for ppc MacOS:
99 System 7, MacOS 8, MacOS 9. So-called "Toolbox"
102 - FreeType.ppc_carbon.make.txt
103 CFM binary executable format for ppc MacOS:
104 MacOS 9. Carbon API is used.
106 At present, static library is only supported,
107 although targets except of m68k_far are capable
108 to use shared library.
110 MPW makefile syntax uses 8bit characters. To keep
111 from violating them during version control, here
112 we store skeltons in pure ASCII format. You must
113 generate MPW makefile by Python script ascii2mpw.py.
115 In Mac OS X terminal, you can convert as:
117 python builds/mac/ascii2mpw.py \
118 < builds/mac/FreeType.m68k_far.make.txt \
119 > FreeType.m68k_far.make
121 The skeltons are designed to use in the top
122 directory where there are builds, include, src etc.
123 You must name the generated MPW makefile by removing
124 ".txt" from source skelton name.
126 3-1-2. Add resource forks to related files
127 ------------------------------------------
129 MPW's Make and C compilers cannot recognize files
130 without resource fork. You have to add resource
131 fork to the files that MPW uses. In Mac OS X
132 terminal of the system, you can do as:
134 find . -name '*.[ch]' -exec \
135 /Developer/Tools/SetFile -a l -c "MPS " -t TEXT \{\} \;
137 find . -name '*.make' -exec \
138 /Developer/Tools/SetFile -a l -c "MPS " -t TEXT \{\} \;
141 3-1-3. Open MPW shell and build
142 -------------------------------
144 Open MPW shell and go to the top directory that
145 FreeType sources are extracted (MPW makefile must
146 be located in there), from "Set Directory" in
149 Choose "Build" from "Build" menu, and type the
150 name of project by removing ".make" from MPW
151 makefile, as: FreeType.m68k_far
153 If building is successfully finished, you can find
154 built library in objs/ directory.
157 3-2. Metrowerks CodeWarrior
158 ---------------------------
160 Detailed building procedure by Metrowerks
161 CodeWarrior (CW) 9.0 is described in following.
163 3-2-1. Import XML project file
164 ------------------------------
166 CW XML project file is not ready for double-
167 click. Start CodeWarrior IDE, and choose
168 "Import project" in "File" menu. Choose XML
169 project file: builds/mac/ftlib.prj.xml.
170 In next, you will be asked where to save CW
171 native project file: you must choose
172 "builds/mac/ftlib.prj". The project file is
173 designed with relative path from there. After
174 CW native project file is generated, it is
175 automatically loaded, small project window
176 titled "ftlib.prj" is displayed.
180 Choose "Make" from "Project" menu. If building
181 is successfully finished, you can find built
182 library at objs/FreeTypeLib.
187 4-1. All modules should be included
188 -----------------------------------
190 At present, MPW makefiles and CW project file are
191 just updated versions of these by Leonard. Some
192 modules are added after the last maintenance, they
195 4-2. Working test with ftdemos
196 ------------------------------
198 At present, MPW makefiles and CW project file can
199 build FreeType for classic MacOS. But their working
200 behaviours are not tested at all. Building ftdemos
201 for classic MacOS and working test is required.
203 4-3. Porting Jam onto MPW
204 -------------------------
206 FreeType uses Jam (and FT-Jam) for unified cross-
207 platform building tool. At present, Jam is not ported
208 to MPW. To update classic MacOS support easily,
209 building by Jam is expected on MPW.
215 A-1. Framework dependencies
216 ---------------------------
218 src/base/ftmac.c adds two Mac-specific features to
219 FreeType. These features are based on MacOS libraries.
221 * accessing resource-fork font
222 The fonts for classic MacOS store their graphical data
223 in resource forks which cannot be accessed via ANSI C
224 functions. FreeType2 provides functions to handle such
225 resource fork fonts, they are based on File Manager
226 framework of MacOS. In addition, HFS and HFS+ file
227 system driver of Linux is supported. Following
228 functions are for this purpose.
230 FT_New_Face_From_Resource()
231 FT_New_Face_From_FSSpec()
232 FT_New_Face_From_FSRef()
234 * resolving font name to font file
235 The font menu of MacOS application prefers font name
236 written in FOND resource than sfnt resource. FreeType2
237 provides functions to find font file by name in MacOS
238 application, they are based on QuickDraw Font Manager
239 and Apple Type Service framework of MacOS.
241 FT_GetFile_From_Mac_Name()
242 FT_GetFile_From_Mac_ATS_Name()
244 Working functions for each MacOS are summarized as
248 not tested (you have to obtain MPW 2.x)
250 MacOS 7.x, 8.x, 9.x (without CarbonLib):
251 FT_GetFile_From_Mac_Name()
252 FT_New_Face_From_Resource()
253 FT_New_Face_From_FSSpec()
255 MacOS 9.x (with CarbonLib):
256 FT_GetFile_From_Mac_Name()
257 FT_New_Face_From_Resource()
258 FT_New_Face_From_FSSpec()
259 FT_New_Face_From_FSRef()
261 Mac OS X upto 10.4.x:
262 FT_GetFile_From_Mac_Name() deprecated
263 FT_New_Face_From_FSSpec() deprecated
264 FT_GetFile_From_Mac_ATS_Name() deprecated?
265 FT_New_Face_From_FSRef()
267 A-2. Deprecated Functions
268 -------------------------
273 For convenience to write MacOS application, ftmac.c
274 provides functions to specify a file by FSSpec and FSRef,
275 because the file identification pathname had ever been
276 unrecommended method in MacOS programming.
278 Toward to MacOS X 10.4 & 5, Carbon functions using FSSpec
279 datatype is noticed as deprecated, and recommended to
280 migrate to FSRef datatype. The big differences of FSRef
281 against FSSpec are explained in Apple TechNotes 2078.
283 http://developer.apple.com/technotes/tn2002/tn2078.html
285 - filename length: the max length of file
286 name of FSRef is 255 chars (it is limit of HFS+),
287 that of FSSpec is 31 chars (it is limit of HFS).
289 - filename encoding: FSSpec is localized by
290 legacy encoding for each language system,
291 FSRef is Unicode enabled.
296 Following functions receive QuickDraw fontname:
298 FT_GetFile_From_Mac_Name()
300 QuickDraw is deprecated and replaced by Quartz
301 since Mac OS X 10.4. They are still kept for
302 backward compatibility. By undefinition of
303 HAVE_QUICKDRAW in building, you can change these
304 functions to return FT_Err_Unimplemented always.
306 Replacement functions are added for migration.
308 FT_GetFile_From_Mac_ATS_Name()
310 They are usable on Mac OS X only. On older systems,
311 these functions return FT_Err_Unimplemented always.
313 The detailed incompatibilities and possibility
314 of FontManager emulation without QuickDraw is
317 http://www.gyve.org/~mpsuzuki/ats_benchmark.html
319 A-3. Framework Availabilities
320 -----------------------------
322 The framework of MacOS are often revised, especially
323 when new format of binary executable is introduced.
324 Following table is the minimum version of frameworks
325 to use functions used in FreeType2. The table is
326 extracted from MPW header files for assembly language.
329 The conditional definition of available data type
330 in MPW compiler is insufficient. You can compile
331 program using FSRef data type for older systems
332 (MacOS 7, 8) that don't know FSRef data type.
335 +-------------------+-----------------------------+
336 CPU | mc680x0 | PowerPC |
337 +---------+---------+---------+---------+---------+
338 Binary Executable Format | Classic | 68K-CFM | CFM | CFM | Mach-O |
339 +---------+---------+---------+---------+---------+
340 Framework API | Toolbox | Toolbox | Toolbox | Carbon | Carbon |
341 +---------+---------+---------+---------+---------+
343 +---------+---------+---------+---------+---------+
344 | ?(*) |Interface|Interface|CarbonLib|Mac OS X |
346 * Files.h +---------+---------+---------+---------+---------+
347 PBGetFCBInfoSync() | o | 7.1- | 7.1- | 1.0- | o |
348 FSMakeFSSpec() | o | 7.1- | 7.1- | 1.0- | o |
349 FSGetForkCBInfo() | o | (**) | 9.0- | 1.0- | o |
350 FSpMakeFSRef() | o | (**) | 9.0- | 1.0- | o |
351 FSGetCatalogInfo() | o | (**) | 9.0- | 1.0- | -10.3 |
352 FSPathMakeRef() | x | x | x | 1.1- | -10.3 |
353 +---------+---------+---------+---------+---------+
355 +---------+---------+---------+---------+---------+
356 | ?(*) |Font |Font |CarbonLib|Mac OS X |
357 | |Manager |Manager | | |
358 * Fonts.h +---------+---------+---------+---------+---------+
359 FMCreateFontFamilyIterator() | x | x | 9.0- | 1.0- | -10.3 |
360 FMDisposeFontFamilyIterator() | x | x | 9.0- | 1.0- | -10.3 |
361 FMGetNextFontFamily() | x | x | 9.0- | 1.0- | -10.3 |
362 FMGetFontFamilyName() | x | x | 9.0- | 1.0- | -10.3 |
363 FMCreateFontFamilyInstanceIterator() | x | x | 9.0- | 1.0- | -10.3 |
364 FMDisposeFontFamilyInstanceIterator() | x | x | 9.0- | 1.0- | -10.3 |
365 FMGetNextFontFamilyInstance() | x | x | 9.0- | 1.0- | -10.3 |
366 +---------+---------+---------+---------+---------+
368 +---------+---------+---------+---------+---------+
369 | - | - | - |CarbonLib|Mac OS X |
370 * ATSFont.h (***) +---------+---------+---------+---------+---------+
371 ATSFontFindFromName() | x | x | x | x | o |
372 ATSFontGetFileSpecification() | x | x | x | x | o |
373 +---------+---------+---------+---------+---------+
376 In the "Classic": the original binary executable
377 format, these framework functions are directly
378 transformed to MacOS system call. Therefore, the
379 exact availability should be checked by running
383 InterfaceLib is bundled to MacOS and its version
384 is usually equal to MacOS. There's no separate
385 update for InterfaceLib. It is supposed that
386 there's no InterfaceLib 9.x for m68k platforms.
387 In fact, these functions are FSRef dependent.
390 ATSUI framework is available on ATSUnicode 8.5 on
391 ppc Toolbox CFM, CarbonLib 1.0 too. But its base:
392 ATS font manager is not published in these versions.
394 ------------------------------------------------------------
395 Last update: 2009-Jul-25.
397 Currently maintained by
398 suzuki toshiya, <mpsuzuki@hiroshima-u.ac.jp>
399 Originally prepared by
400 Leonard Rosenthol, <leonardr@lazerware.com>
401 Just van Rossum, <just@letterror.com>
403 This directory is now actively maintained as part of the FreeType Project.