Better support of LLP64 systems with gcc (and clang). * builds/unix/configure.raw: Call `AC_TYPE_LONG_LONG_INT'. * builds/unix/ftconfig.in (FT_LONG64): Enable for LLP64 systems (and suppress warnings) even without `FT_CONFIG_OPTION_FORCE_INT64'.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
diff --git a/ChangeLog b/ChangeLog
index 793eb89..dd68497 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2016-11-17 Werner Lemberg <wl@gnu.org>
+
+ Better support of LLP64 systems with gcc (and clang).
+
+ * builds/unix/configure.raw: Call `AC_TYPE_LONG_LONG_INT'.
+
+ * builds/unix/ftconfig.in (FT_LONG64): Enable for LLP64 systems (and
+ suppress warnings) even without `FT_CONFIG_OPTION_FORCE_INT64'.
+
2016-11-10 Werner Lemberg <wl@gnu.org>
Fix `lcd_weights' array size.
diff --git a/builds/unix/configure.raw b/builds/unix/configure.raw
index 72dd2ae..034c9eb 100644
--- a/builds/unix/configure.raw
+++ b/builds/unix/configure.raw
@@ -105,6 +105,7 @@ AC_CHECK_HEADERS([fcntl.h unistd.h])
AC_C_CONST
AC_CHECK_SIZEOF([int])
AC_CHECK_SIZEOF([long])
+AC_TYPE_LONG_LONG_INT
# check whether cpp computation of size of int and long in ftconfig.in works
diff --git a/builds/unix/ftconfig.in b/builds/unix/ftconfig.in
index 7eb5106..6f228f5 100644
--- a/builds/unix/ftconfig.in
+++ b/builds/unix/ftconfig.in
@@ -287,8 +287,8 @@ FT_BEGIN_HEADER
#endif
- /* determine whether we have a 64-bit int type for platforms without */
- /* Autoconf */
+ /* determine whether we have a 64-bit int type */
+ /* (mostly for environments without `autoconf') */
#if FT_SIZEOF_LONG == 8
/* FT_LONG64 must be defined if a 64-bit type is available */
@@ -296,6 +296,16 @@ FT_BEGIN_HEADER
#define FT_INT64 long
#define FT_UINT64 unsigned long
+ /* we handle the LLP64 scheme separately for GCC and clang, */
+ /* suppressing the `long long' warning */
+#elif ( FT_SIZEOF_LONG == 4 ) && \
+ defined( HAVE_LONG_LONG_INT ) && \
+ defined( __GNUC__ )
+#pragma GCC diagnostic ignored "-Wlong-long"
+#define FT_LONG64
+#define FT_INT64 long long int
+#define FT_UINT64 unsigned long long int
+
/*************************************************************************/
/* */
/* A 64-bit data type may create compilation problems if you compile */