Commit 44b5e57781453d4fd238f5aba8c7f6c0dc5398fb

Suzuki, Toshiya (鈴木俊哉) 2007-12-06T07:47:25

Mac OS X Carbon tests in configure.raw are improved and builds/mac/ftmac.c is updated to sync to src/base/ftmac.c

diff --git a/ChangeLog b/ChangeLog
index 3f16d87..db14450 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2007-12-06  suzuki toshiya  <mpsuzuki@hiroshima-u.ac.jp>
 
+	* 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  <mpsuzuki@hiroshima-u.ac.jp>
+
 	The documents and comments for Mac OS X are improved by Sean
 	McBride.
 
diff --git a/builds/mac/ftmac.c b/builds/mac/ftmac.c
index 0f44fc5..7c77dda 100644
--- 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,20 +265,26 @@
 
   /* 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;
 
 
     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 )
diff --git a/builds/unix/configure.raw b/builds/unix/configure.raw
index d756d2b..8cc189f 100644
--- a/builds/unix/configure.raw
+++ b/builds/unix/configure.raw
@@ -316,11 +316,9 @@ elif test x$with_old_mac_fonts = xyes -a x$with_fsref != x; then
     ],
     [
 
-      FCBPBPtr             paramBlock;
       short                vRefNum;
       long                 dirID;
       ConstStr255Param     fileName;
-      FSSpec*              spec;
 
       Boolean*             isDirectory;
       UInt8*               path;
@@ -334,16 +332,21 @@ elif test x$with_old_mac_fonts = xyes -a x$with_fsref != x; then
       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 @@ elif test x$with_old_mac_fonts = xyes -a x$with_ats != x ; then
 
 
       ATSFontFindFromName( NULL, kATSOptionFlagsUnRestrictedScope );
+#if HAVE_FSSPEC
       ATSFontGetFileSpecification( 0, pathSpec );
+#endif
 
     ],
     [AC_MSG_RESULT([ok])