summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Turner <david@freetype.org>2020-07-06 10:56:36 +0200
committerWerner Lemberg <wl@gnu.org>2020-07-07 06:51:09 +0200
commit0f35b042e02e23cc6fb29d805d25aa85679274eb (patch)
treeea1b31ac8e1428e0267096ab465bf817d3bd1976
parentcb4a943bc4d24d48eeb5d1515c5acd880c4a82ab (diff)
downloadfreetype2-0f35b042e02e23cc6fb29d805d25aa85679274eb.tar.gz
[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'.
-rw-r--r--ChangeLog26
-rw-r--r--include/freetype/config/public-macros.h16
-rw-r--r--include/freetype/internal/compiler-macros.h19
-rw-r--r--src/cache/ftccback.h2
-rw-r--r--src/gxvalid/gxvmort.h5
-rw-r--r--src/gxvalid/gxvmorx.h5
-rw-r--r--src/lzw/ftzopen.h3
7 files changed, 58 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 7bf83a028..39d2e8915 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
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
@@ -29,12 +29,6 @@ FT_BEGIN_HEADER
# 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. */
#if defined( __sgi ) && !defined( __GNUC__ )
# if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
@@ -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 <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_ */
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 <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_ */
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 <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_ */