[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'.
This commit is contained in:
David Turner 2020-07-06 10:56:36 +02:00 committed by Werner Lemberg
parent cb4a943bc4
commit 0f35b042e0
7 changed files with 58 additions and 18 deletions

View File

@ -1,3 +1,29 @@
2020-07-07 David Turner <david@freetype.org>
[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 <david@freetype.org>
[build] Fix multi and C++ builds.

View File

@ -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_ */

View File

@ -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.

View File

@ -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_ */

View File

@ -34,6 +34,9 @@
#include <freetype/ftsnames.h>
FT_BEGIN_HEADER
typedef struct GXV_mort_featureRec_
{
FT_UShort featureType;
@ -88,6 +91,8 @@
GXV_Validator gxvalid );
FT_END_HEADER
#endif /* GXVMORT_H_ */

View File

@ -36,6 +36,9 @@
#include <freetype/ftsnames.h>
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_ */

View File

@ -24,6 +24,7 @@
#include <freetype/freetype.h>
FT_BEGIN_HEADER
/*
* This is a complete re-implementation of the LZW file reader,
@ -165,6 +166,8 @@
/* */
FT_END_HEADER
#endif /* FTZOPEN_H_ */