diff --git a/ChangeLog b/ChangeLog index 7bf83a028..39d2e8915 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +2020-07-07 David Turner + + [build] Really fix multi and C++ builds. + + The following builds were still failing due to previous changes: + + make multi + make multi CC="c++" + make CC="c++" + + This patch fixes the issues, which were missing includes to get the + right macro definitions in multi-build mode. + + Also, `FT_UNUSED' is actually used by third-party code, so move it + back to `public-macros.h' to avoid breaking it. + + * include/freetype/config/public-macros.h (FT_EXPORT): Remove + special definition for C++. + (FT_UNUSED): Define here instead of... + * include/freetype/config/compiler-macros.h: ... here. + (FT_FUNCTION_DECLARATION): Remove special definition for C++. + (FT_LOCAL_ARRAY_DEF): Fix definition. + + * src/cache/ftccback.h, src/lzw/ftzopen.h, src/gxvalid/gxvmort.h, + src/gxvalid/gxvmorx.h: Add `FT_BEGIN_HEADER' and `FT_END_HEADER'. + 2020-07-06 David Turner [build] Fix multi and C++ builds. diff --git a/include/freetype/config/public-macros.h b/include/freetype/config/public-macros.h index b1fa0f2b3..5cc3236ed 100644 --- a/include/freetype/config/public-macros.h +++ b/include/freetype/config/public-macros.h @@ -78,13 +78,23 @@ FT_BEGIN_HEADER * * FT_EXPORT( FT_Bool ) FT_Object_Method( FT_Object obj, ... ); * + * NOTE: This requires that all FT_EXPORT() uses are inside FT_BEGIN_HEADER .. + * FT_END_HEADER blocks. This guarantees that the functions are exported with + * C linkage, even when the header is included by a C++ source file. */ -#ifdef __cplusplus -#define FT_EXPORT( x ) FT_PUBLIC_FUNCTION_ATTRIBUTE extern "C" x -#else #define FT_EXPORT( x ) FT_PUBLIC_FUNCTION_ATTRIBUTE extern x + + /* `FT_UNUSED` indicates that a given parameter is not used -- */ + /* this is only used to get rid of unpleasant compiler warnings. */ + /* */ + /* Technically, this was not meant to be part of the public API, */ + /* but some third-party code depends on it. */ + /* */ +#ifndef FT_UNUSED +#define FT_UNUSED( arg ) ( (arg) = (arg) ) #endif + FT_END_HEADER #endif /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */ diff --git a/include/freetype/internal/compiler-macros.h b/include/freetype/internal/compiler-macros.h index 1f432bca5..b62c0777b 100644 --- a/include/freetype/internal/compiler-macros.h +++ b/include/freetype/internal/compiler-macros.h @@ -27,12 +27,6 @@ FT_BEGIN_HEADER # if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 ) # pragma set woff 3505 # endif -#endif - - /* `FT_UNUSED` indicates that a given parameter is not used -- */ - /* this is only used to get rid of unpleasant compiler warnings. */ -#ifndef FT_UNUSED -#define FT_UNUSED( arg ) ( (arg) = (arg) ) #endif /* Fix compiler warning with sgi compiler. */ @@ -126,18 +120,13 @@ FT_BEGIN_HEADER * * FT_FUNCTION_DECLARATION(int) foo(int x); * - * NOTE: Technically, all FreeType headers put their function declarations - * inside an extern "C" block, giving them C linkage. This means that using - * this macro is only necessary within internal source files, but using it in - * a header will be harmless. + * NOTE: This requires that all uses are inside FT_BEGIN_HEADER..FT_END_HEADER + * blocks. Which guarantees that the declarations have C linkage when the + * headers are included by C++ sources. * * NOTE: Do not use directly, use FT_LOCAL()/FT_BASE()/FT_EXPORT() instead. */ -#ifdef __cplusplus -#define FT_FUNCTION_DECLARATION( x ) extern "C" x -#else #define FT_FUNCTION_DECLARATION( x ) extern x -#endif /* Same as FT_FUNCTION_DECLARATION(), but for function definitions instead. * NOTE: Do not use directly, use FT_LOCAL_DEF()/FT_BASE_DEF()/FT_EXPORT_DEF() @@ -171,7 +160,7 @@ FT_BEGIN_HEADER * sub-directory, but are otherwise internal to the library. */ #define FT_LOCAL_ARRAY( x ) FT_INTERNAL_FUNCTION_ATTRIBUTE extern const x -#define FT_LOCAL_ARRAY_DEF( x ) const x +#define FT_LOCAL_ARRAY_DEF( x ) FT_FUNCTION_DEFINITION( const x ) /* Use FT_BASE()/FT_BASE_DEF() to declare or define an internal library * function that are used by more than one single module. diff --git a/src/cache/ftccback.h b/src/cache/ftccback.h index 802fd4444..542acb156 100644 --- a/src/cache/ftccback.h +++ b/src/cache/ftccback.h @@ -25,6 +25,7 @@ #include "ftcglyph.h" #include "ftcsbits.h" +FT_BEGIN_HEADER FT_LOCAL( void ) ftc_inode_free( FTC_Node inode, @@ -84,6 +85,7 @@ ftc_node_destroy( FTC_Node node, FTC_Manager manager ); +FT_END_HEADER #endif /* FTCCBACK_H_ */ diff --git a/src/gxvalid/gxvmort.h b/src/gxvalid/gxvmort.h index 24c7e45b2..7237c5825 100644 --- a/src/gxvalid/gxvmort.h +++ b/src/gxvalid/gxvmort.h @@ -34,6 +34,9 @@ #include +FT_BEGIN_HEADER + + typedef struct GXV_mort_featureRec_ { FT_UShort featureType; @@ -88,6 +91,8 @@ GXV_Validator gxvalid ); +FT_END_HEADER + #endif /* GXVMORT_H_ */ diff --git a/src/gxvalid/gxvmorx.h b/src/gxvalid/gxvmorx.h index ceb14a9e8..f747b1d63 100644 --- a/src/gxvalid/gxvmorx.h +++ b/src/gxvalid/gxvmorx.h @@ -36,6 +36,9 @@ #include +FT_BEGIN_HEADER + + FT_LOCAL( void ) gxv_morx_subtable_type0_validate( FT_Bytes table, FT_Bytes limit, @@ -62,6 +65,8 @@ GXV_Validator gxvalid ); +FT_END_HEADER + #endif /* GXVMORX_H_ */ diff --git a/src/lzw/ftzopen.h b/src/lzw/ftzopen.h index cb9206b3e..d8768f7b4 100644 --- a/src/lzw/ftzopen.h +++ b/src/lzw/ftzopen.h @@ -24,6 +24,7 @@ #include +FT_BEGIN_HEADER /* * This is a complete re-implementation of the LZW file reader, @@ -165,6 +166,8 @@ /* */ +FT_END_HEADER + #endif /* FTZOPEN_H_ */