ref: 44b5e57781453d4fd238f5aba8c7f6c0dc5398fb
parent: 05f5c58d13449640c42a42832fe2b10dee086964
author: Suzuki, Toshiya (鈴木俊哉) <[email protected]>
date: Thu Dec 6 02:47:25 EST 2007
Mac OS X Carbon tests in configure.raw are improved and builds/mac/ftmac.c is updated to sync to src/base/ftmac.c
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2007-12-06 suzuki toshiya <[email protected]>
+ * builds/unix/configure.raw: improve the compile tests to search
+ Carbon functions.
+ * builds/mac/ftmac.c: import fixes for Carbon incompatibilities
+ proposed by Sean McBride from src/base/ftmac.c (see 2007-11-16).
+
+2007-12-06 suzuki toshiya <[email protected]>
+
The documents and comments for Mac OS X are improved by Sean
McBride.
--- a/builds/mac/ftmac.c
+++ b/builds/mac/ftmac.c
@@ -74,7 +74,9 @@
#undef OS_INLINE
#define OS_INLINE static __inline__
#endif
-#include <Carbon/Carbon.h>
+#include <CoreServices/CoreServices.h>
+#include <ApplicationServices/ApplicationServices.h>
+#include <sys/syslimits.h> /* PATH_MAX */
#else
#include <Resources.h>
#include <Fonts.h>
@@ -84,6 +86,10 @@
#include <TextUtils.h>
#endif
+#ifndef PATH_MAX
+#define PATH_MAX 1024 /* same with Mac OS X's syslimits.h */
+#endif
+
#if defined( __MWERKS__ ) && !TARGET_RT_MAC_MACHO
#include <FSp_fopen.h>
#endif
@@ -92,9 +98,12 @@
#include FT_MAC_H
+ /* undefine blocking-macros in ftmac.h */
#undef FT_GetFile_From_Mac_Name
#undef FT_GetFile_From_Mac_ATS_Name
+#undef FT_New_Face_From_FOND
#undef FT_New_Face_From_FSSpec
+#undef FT_New_Face_From_FSRef
/* FSSpec functions are deprecated since Mac OS X 10.4 */
@@ -115,11 +124,6 @@
#endif
#endif
-#ifndef HFS_MAXPATHLEN
-#define HFS_MAXPATHLEN 1024
-#endif
-
-
/* QuickDraw is deprecated since Mac OS X 10.4 */
#ifndef HAVE_QUICKDRAW_CARBON
#if TARGET_API_MAC_OS8 || TARGET_API_MAC_CARBON
@@ -133,11 +137,19 @@
#ifndef HAVE_ATS
#if TARGET_API_MAC_OSX
#define HAVE_ATS 1
+#ifndef kATSOptionFlagsUnRestrictedScope /* since Mac OS X 10.1 */
+#define kATSOptionFlagsUnRestrictedScope kATSOptionFlagsDefault
+#endif
#else
#define HAVE_ATS 0
#endif
#endif
+ /* Some portable types are unavailable on legacy SDKs */
+#ifndef MAC_OS_X_VERSION_10_5
+typedef short ResourceIndex;
+#endif
+
/* Set PREFER_LWFN to 1 if LWFN (Type 1) is preferred over
TrueType in case *both* are available (this is not common,
but it *is* possible). */
@@ -253,14 +265,17 @@
/* Private function. */
/* The FSSpec type has been discouraged for a long time, */
- /* but for some reason, there is no FSRef version of */
- /* ATSFontGetFileSpecification(), so we made our own. */
- /* Apple will provide one eventually. */
+ /* unfortunately an FSRef replacement API for */
+ /* ATSFontGetFileSpecification() is only available in */
+ /* Mac OS X 10.5 and later. */
static OSStatus
FT_ATSFontGetFileReference( ATSFontRef ats_font_id,
FSRef* ats_font_ref )
{
OSStatus err;
+
+#if !defined( MAC_OS_X_VERSION_10_5 ) || \
+ MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
FSSpec spec;
@@ -267,6 +282,9 @@
err = ATSFontGetFileSpecification( ats_font_id, &spec );
if ( noErr == err )
err = FSpMakeFSRef( &spec, ats_font_ref );
+#else
+ err = ATSFontGetFileReference( ats_font_id, ats_font_ref );
+#endif
return err;
}
@@ -887,7 +905,7 @@
ResID sfnt_id;
short have_sfnt, have_lwfn;
Str255 lwfn_file_name;
- UInt8 buff[HFS_MAXPATHLEN];
+ UInt8 buff[PATH_MAX];
FT_Error err;
short num_faces;
@@ -945,7 +963,8 @@
for (;;)
{
- post_data = Get1Resource( 'POST', res_id++ );
+ post_data = Get1Resource( FT_MAKE_TAG( 'P', 'O', 'S', 'T' ),
+ res_id++ );
if ( post_data == NULL )
break; /* we are done */
@@ -984,7 +1003,8 @@
for (;;)
{
- post_data = Get1Resource( 'POST', res_id++ );
+ post_data = Get1Resource( FT_MAKE_TAG( 'P', 'O', 'S', 'T' ),
+ res_id++ );
if ( post_data == NULL )
break; /* we are done */
@@ -1186,7 +1206,7 @@
int is_cff;
- sfnt = GetResource( 'sfnt', sfnt_id );
+ sfnt = GetResource( FT_MAKE_TAG( 's', 'f', 'n', 't' ), sfnt_id );
if ( ResError() )
return FT_Err_Invalid_Handle;
@@ -1225,7 +1245,7 @@
{
FT_Error error = FT_Err_Cannot_Open_Resource;
ResFileRefNum res_ref;
- short res_index;
+ ResourceIndex res_index;
Handle fond;
short num_faces_in_res, num_faces_in_fond;
@@ -1240,7 +1260,8 @@
num_faces_in_res = 0;
for ( res_index = 1; ; ++res_index )
{
- fond = Get1IndResource( 'FOND', res_index );
+ fond = Get1IndResource( FT_MAKE_TAG( 'F', 'O', 'N', 'D' ),
+ res_index );
if ( ResError() )
break;
@@ -1273,13 +1294,14 @@
OSType fond_type;
Str255 fond_name;
Str255 lwfn_file_name;
- UInt8 path_lwfn[HFS_MAXPATHLEN];
+ UInt8 path_lwfn[PATH_MAX];
OSErr err;
FT_Error error = FT_Err_Ok;
GetResInfo( fond, &fond_id, &fond_type, fond_name );
- if ( ResError() != noErr || fond_type != 'FOND' )
+ if ( ResError() != noErr ||
+ fond_type != FT_MAKE_TAG( 'F', 'O', 'N', 'D' ) )
return FT_Err_Invalid_File_Format;
HLock( fond );
@@ -1298,7 +1320,7 @@
#if HAVE_FSREF
{
- UInt8 path_fond[HFS_MAXPATHLEN];
+ UInt8 path_fond[PATH_MAX];
FSRef ref;
@@ -1320,7 +1342,7 @@
#elif HAVE_FSSPEC
{
- UInt8 path_fond[HFS_MAXPATHLEN];
+ UInt8 path_fond[PATH_MAX];
FCBPBRec pb;
Str255 fond_file_name;
FSSpec spec;
@@ -1389,7 +1411,7 @@
/* LWFN is a (very) specific file format, check for it explicitly */
file_type = get_file_type_from_path( pathname );
- if ( file_type == 'LWFN' )
+ if ( file_type == FT_MAKE_TAG( 'L', 'W', 'F', 'N' ) )
return FT_New_Face_From_LWFN( library, pathname, face_index, aface );
/* Otherwise the file type doesn't matter (there are more than */
@@ -1457,6 +1479,8 @@
/* FT_New_Face_From_FSRef is identical to FT_New_Face except it */
/* accepts an FSRef instead of a path. */
/* */
+ /* This function is deprecated because Carbon data types (FSRef) */
+ /* are not cross-platform, and thus not suitable for the freetype API. */
FT_EXPORT_DEF( FT_Error )
FT_New_Face_From_FSRef( FT_Library library,
const FSRef* ref,
@@ -1478,7 +1502,7 @@
FT_Error error;
FT_Open_Args args;
OSErr err;
- UInt8 pathname[HFS_MAXPATHLEN];
+ UInt8 pathname[PATH_MAX];
if ( !ref )
@@ -1511,6 +1535,8 @@
/* FT_New_Face_From_FSSpec is identical to FT_New_Face except it */
/* accepts an FSSpec instead of a path. */
/* */
+ /* This function is deprecated because Carbon data types (FSSpec) */
+ /* are not cross-platform, and thus not suitable for the freetype API. */
FT_EXPORT_DEF( FT_Error )
FT_New_Face_From_FSSpec( FT_Library library,
const FSSpec* spec,
@@ -1533,7 +1559,7 @@
FT_Error error;
FT_Open_Args args;
OSErr err;
- UInt8 pathname[HFS_MAXPATHLEN];
+ UInt8 pathname[PATH_MAX];
if ( !spec )
--- a/builds/unix/configure.raw
+++ b/builds/unix/configure.raw
@@ -316,11 +316,9 @@
],
[
- FCBPBPtr paramBlock;
short vRefNum;
long dirID;
ConstStr255Param fileName;
- FSSpec* spec;
Boolean* isDirectory;
UInt8* path;
@@ -334,16 +332,21 @@
FSForkInfo* forkInfo;
FSRef* ref;
+#if HAVE_FSSPEC
+ FSSpec* spec;
+#endif
/* FSRef functions: no need to check? */
FSGetForkCBInfo( desiredRefNum, volume, iterator,
actualRefNum, forkInfo, ref,
outForkName );
+ FSPathMakeRef( path, ref, isDirectory );
+
+#if HAVE_FSSPEC
FSpMakeFSRef ( spec, ref );
FSGetCatalogInfo( ref, whichInfo, catalogInfo,
outForkName, spec, ref );
- FSPathMakeRef( path, ref, isDirectory );
-
+#endif
],
[AC_MSG_RESULT([ok])
CFLAGS="$CFLAGS -DHAVE_FSREF=1"],
@@ -465,7 +468,9 @@
ATSFontFindFromName( NULL, kATSOptionFlagsUnRestrictedScope );
+#if HAVE_FSSPEC
ATSFontGetFileSpecification( 0, pathSpec );
+#endif
],
[AC_MSG_RESULT([ok])