shithub: freetype+ttf2subf

Download patch

ref: 3a89c2a4ac5d1c43b82888bb799546ab80b75cd6
parent: c713d924d8107d8c2ccd0e27832a09992397eeae
author: Werner Lemberg <[email protected]>
date: Tue Aug 1 13:05:20 EDT 2000

Removing FT_MAKE_OPTION_SINGLE_LIBRARY_OBJECT.  It has never worked.
Instead, define BASE_DEF() and BASE_FUNC() similarly to FT_EXPORT_DEF() and
FT_EXPORT_FUNC(), respectively, allowing the programmer to define proper
types and/or export lists for multiple DLLs if necessary (e.g. ftbase.dll --
standalone, fttype1.dll -- needs ftbase.dll, etc.).

The library is finally compiling and linking natively with a C++ compiler!

git/fs: mount .git/fs: mount/attach disallowed
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -159,32 +159,77 @@
 
 
 #ifdef FT_MAKE_OPTION_SINGLE_OBJECT
-#define  LOCAL_DEF   static
-#define  LOCAL_FUNC  static
+
+#define LOCAL_DEF   static
+#define LOCAL_FUNC  static
+
 #else
-#define  LOCAL_DEF   extern
-#define  LOCAL_FUNC  /* nothing */
+
+#ifdef __cplusplus
+#define LOCAL_DEF   extern "C"
+#define LOCAL_FUNC  extern "C"
+#else
+#define LOCAL_DEF   extern
+#define LOCAL_FUNC  extern
 #endif
 
-#ifdef FT_MAKE_OPTION_SINGLE_LIBRARY_OBJECT
-#define  BASE_DEF( x )   static  x
-#define  BASE_FUNC( x )  static  x
+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
+
+
+#ifndef BASE_DEF
+
+#ifdef __cplusplus
+#define BASE_DEF( x )  extern "C"  x
 #else
-#define  BASE_DEF( x )   extern  x
-#define  BASE_FUNC( x )  extern  x
+#define BASE_DEF( x )  extern  x
 #endif
 
-#ifndef  FT_EXPORT_DEF
-#define  FT_EXPORT_DEF( x )   extern  x
+#endif /* !BASE_DEF */
+
+
+#ifndef BASE_FUNC
+
+#ifdef __cplusplus
+#define BASE_FUNC( x )  extern "C"  x
+#else
+#define BASE_FUNC( x )  extern  x
 #endif
 
-#ifndef  FT_EXPORT_FUNC
-#define  FT_EXPORT_FUNC( x )  extern  x
+#endif /* !BASE_FUNC */
+
+
+#ifndef FT_EXPORT_DEF
+
+#ifdef __cplusplus
+#define FT_EXPORT_DEF( x )  extern "C"  x
+#else
+#define FT_EXPORT_DEF( x )  extern  x
 #endif
 
-#ifndef  FT_EXPORT_VAR
-#define  FT_EXPORT_VAR( x )   extern  x
+#endif /* !FT_EXPORT_DEF */
+
+
+#ifndef FT_EXPORT_FUNC
+
+#ifdef __cplusplus
+#define FT_EXPORT_FUNC( x )  extern "C"  x
+#else
+#define FT_EXPORT_FUNC( x )  extern  x
 #endif
+
+#endif /* !FT_EXPORT_FUNC */
+
+
+#ifndef FT_EXPORT_VAR
+
+#ifdef __cplusplus
+#define FT_EXPORT_VAR( x )  extern "C"  x
+#else
+#define FT_EXPORT_VAR( x )  extern  x
+#endif
+
+#endif /* !FT_EXPORT_VAR */
+
 
 #ifdef __cplusplus
   }
--- a/src/autohint/ahmodule.c
+++ b/src/autohint/ahmodule.c
@@ -107,7 +107,7 @@
   };
 
 
-  const FT_Module_Class  autohint_module_class =
+  FT_EXPORT_VAR( const FT_Module_Class )  autohint_module_class =
   {
     ft_module_hinter,
     sizeof ( FT_AutoHinterRec ),
--- a/src/base/ftinit.c
+++ b/src/base/ftinit.c
@@ -53,7 +53,11 @@
 #define FT_COMPONENT  trace_init
 
 #undef  FT_USE_MODULE
+#ifdef __cplusplus
+#define FT_USE_MODULE( x )  extern "C" const FT_Module_Class*  x;
+#else
 #define FT_USE_MODULE( x )  extern const FT_Module_Class*  x;
+#endif
 
 #include <freetype/config/ftmodule.h>
 
--- a/src/cff/t2driver.c
+++ b/src/cff/t2driver.c
@@ -302,7 +302,7 @@
 
   /* The FT_DriverInterface structure is defined in ftdriver.h. */
 
-  const FT_Driver_Class   cff_driver_class =
+  FT_EXPORT_VAR( const FT_Driver_Class )  cff_driver_class =
   {
     /* begin with the FT_Module_Class fields */
     {
--- a/src/cid/cidriver.c
+++ b/src/cid/cidriver.c
@@ -182,7 +182,7 @@
   }
 
 
-  const FT_Driver_Class  t1cid_driver_class =
+  FT_EXPORT_VAR( const FT_Driver_Class )  t1cid_driver_class =
   {
     /* first of all, the FT_Module_Class fields */
     {
--- a/src/psnames/psmodule.c
+++ b/src/psnames/psmodule.c
@@ -296,7 +296,7 @@
 #endif /* !FT_CONFIG_OPTION_NO_POSTSCRIPT_NAMES */
 
 
-  const FT_Module_Class  psnames_module_class =
+  FT_EXPORT_VAR( const FT_Module_Class )  psnames_module_class =
   {
     0,  /* this is not a font driver, nor a renderer */
     sizeof( FT_ModuleRec ),
--- a/src/raster1/ftrend1.c
+++ b/src/raster1/ftrend1.c
@@ -213,7 +213,7 @@
   }
 
 
-  const FT_Renderer_Class  ft_raster1_renderer_class =
+  FT_EXPORT_VAR( const FT_Renderer_Class )  ft_raster1_renderer_class =
   {
     {
       ft_module_renderer,
@@ -241,10 +241,11 @@
   };
 
 
-  /* this renderer is _NOT_ part of the default modules, you'll need */
-  /* to register it by hand in your application.  It should only be  */
-  /* used for backwards-compatibility with FT 1.x anyway.            */
-  const FT_Renderer_Class  ft_raster5_renderer_class =
+  /* This renderer is _NOT_ part of the default modules; you will need */
+  /* to register it by hand in your application.  It should only be    */
+  /* used for backwards-compatibility with FT 1.x anyway.              */
+  /*                                                                   */
+  FT_EXPORT_VAR( const FT_Renderer_Class )  ft_raster5_renderer_class =
   {
     {
       ft_module_renderer,
--- a/src/sfnt/sfdriver.c
+++ b/src/sfnt/sfdriver.c
@@ -204,8 +204,7 @@
   };
 
 
-  const
-  FT_Module_Class  sfnt_module_class =
+  FT_EXPORT_VAR( const FT_Module_Class )  sfnt_module_class =
   {
     0,  /* not a font driver or renderer */
     sizeof( FT_ModuleRec ),
--- a/src/smooth/ftsmooth.c
+++ b/src/smooth/ftsmooth.c
@@ -189,7 +189,7 @@
   }
 
 
-  const FT_Renderer_Class  ft_smooth_renderer_class =
+  FT_EXPORT_VAR( const FT_Renderer_Class )  ft_smooth_renderer_class =
   {
     {
       ft_module_renderer,
--- a/src/truetype/ttdriver.c
+++ b/src/truetype/ttdriver.c
@@ -430,7 +430,7 @@
 
   /* The FT_DriverInterface structure is defined in ftdriver.h. */
 
-  const FT_Driver_Class  tt_driver_class =
+  FT_EXPORT_VAR( const FT_Driver_Class )  tt_driver_class =
   {
     {
       ft_module_font_driver     |
--- a/src/type1/t1driver.c
+++ b/src/type1/t1driver.c
@@ -324,7 +324,7 @@
 
 
 
-  const FT_Driver_Class  t1_driver_class =
+  FT_EXPORT_VAR( const FT_Driver_Class )  t1_driver_class =
   {
     {
       ft_module_font_driver | ft_module_driver_scalable,
--- a/src/type1z/z1driver.c
+++ b/src/type1z/z1driver.c
@@ -283,7 +283,7 @@
   }
 
 
-  const FT_Driver_Class  t1_driver_class =
+  FT_EXPORT_VAR( const FT_Driver_Class )  t1_driver_class =
   {
     {
       ft_module_font_driver | ft_module_driver_scalable,
--- a/src/winfonts/winfnt.c
+++ b/src/winfonts/winfnt.c
@@ -588,7 +588,7 @@
   }
 
 
-  const FT_Driver_Class  winfnt_driver_class =
+  FT_EXPORT_VAR( const FT_Driver_Class )  winfnt_driver_class =
   {
     {
       ft_module_font_driver,