From 53c4de62d053c0a8fac295fa94949f9b1cc7a2bc Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Tue, 1 Aug 2000 17:05:20 +0000 Subject: [PATCH] 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! --- include/freetype/config/ftconfig.h | 77 +++++++++++++++++++++++------- src/autohint/ahmodule.c | 2 +- src/base/ftinit.c | 4 ++ src/cff/t2driver.c | 2 +- src/cid/cidriver.c | 2 +- src/psnames/psmodule.c | 2 +- src/raster1/ftrend1.c | 11 +++-- src/sfnt/sfdriver.c | 3 +- src/smooth/ftsmooth.c | 2 +- src/truetype/ttdriver.c | 2 +- src/type1/t1driver.c | 2 +- src/type1z/z1driver.c | 2 +- src/winfonts/winfnt.c | 2 +- 13 files changed, 81 insertions(+), 32 deletions(-) diff --git a/include/freetype/config/ftconfig.h b/include/freetype/config/ftconfig.h index bf4d33167..a2e984249 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 -#define LOCAL_DEF extern -#define LOCAL_FUNC /* nothing */ -#endif -#ifdef FT_MAKE_OPTION_SINGLE_LIBRARY_OBJECT -#define BASE_DEF( x ) static x -#define BASE_FUNC( x ) static x +#ifdef __cplusplus +#define LOCAL_DEF extern "C" +#define LOCAL_FUNC extern "C" #else -#define BASE_DEF( x ) extern x -#define BASE_FUNC( x ) extern x +#define LOCAL_DEF extern +#define LOCAL_FUNC extern #endif -#ifndef FT_EXPORT_DEF -#define FT_EXPORT_DEF( x ) extern 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 #endif -#ifndef FT_EXPORT_FUNC -#define FT_EXPORT_FUNC( 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_VAR -#define FT_EXPORT_VAR( 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 + +#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 85755681e..255d542d9 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 8cfc0de58..ed060d5aa 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 diff --git a/src/cff/t2driver.c b/src/cff/t2driver.c index d1e1b188d..ab6c20f9a 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 f1c6b6a01..b4f0fd7d6 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 55ab5dfce..448ea18a6 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 d774cf1d4..9364864c7 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 96a738b43..dfeb7116a 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 6f399acf5..f0408468f 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 0b3cb480c..9e19f28e5 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 49b5a5637..603546c97 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 aea2c10f1..ef6570d1e 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 79a549eeb..99f29e866 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,