Commit 3a89c2a4ac5d1c43b82888bb799546ab80b75cd6

Werner Lemberg 2000-08-01T17:05:20

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!

diff --git a/include/freetype/config/ftconfig.h b/include/freetype/config/ftconfig.h
index bf4d331..a2e9842 100644
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -159,33 +159,78 @@
 
 
 #ifdef FT_MAKE_OPTION_SINGLE_OBJECT
-#define  LOCAL_DEF   static
-#define  LOCAL_FUNC  static
+
+#define LOCAL_DEF   static
+#define LOCAL_FUNC  static
+
+#else
+
+#ifdef __cplusplus
+#define LOCAL_DEF   extern "C"
+#define LOCAL_FUNC  extern "C"
 #else
-#define  LOCAL_DEF   extern
-#define  LOCAL_FUNC  /* nothing */
+#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
+
+#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
 
-#ifndef  FT_EXPORT_VAR
-#define  FT_EXPORT_VAR( x )   extern  x
+#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
   }
 #endif
diff --git a/src/autohint/ahmodule.c b/src/autohint/ahmodule.c
index 8575568..255d542 100644
--- 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 ),
diff --git a/src/base/ftinit.c b/src/base/ftinit.c
index 8cfc0de..ed060d5 100644
--- 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>
 
diff --git a/src/cff/t2driver.c b/src/cff/t2driver.c
index d1e1b18..ab6c20f 100644
--- 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 */
     {
diff --git a/src/cid/cidriver.c b/src/cid/cidriver.c
index f1c6b6a..b4f0fd7 100644
--- 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 */
     {
diff --git a/src/psnames/psmodule.c b/src/psnames/psmodule.c
index 55ab5df..448ea18 100644
--- 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 ),
diff --git a/src/raster1/ftrend1.c b/src/raster1/ftrend1.c
index d774cf1..9364864 100644
--- 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,
diff --git a/src/sfnt/sfdriver.c b/src/sfnt/sfdriver.c
index 96a738b..dfeb711 100644
--- 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 ),
diff --git a/src/smooth/ftsmooth.c b/src/smooth/ftsmooth.c
index 6f399ac..f040846 100644
--- 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,
diff --git a/src/truetype/ttdriver.c b/src/truetype/ttdriver.c
index 0b3cb48..9e19f28 100644
--- 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     |
diff --git a/src/type1/t1driver.c b/src/type1/t1driver.c
index 49b5a56..603546c 100644
--- 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,
diff --git a/src/type1z/z1driver.c b/src/type1z/z1driver.c
index aea2c10..ef6570d 100644
--- 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,
diff --git a/src/winfonts/winfnt.c b/src/winfonts/winfnt.c
index 79a549e..99f29e8 100644
--- 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,