From 7815050334f67b1bdf6ce11c22cdde1fe0e68e41 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Thu, 17 Nov 2016 12:00:20 +0100 Subject: [PATCH] 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'. --- ChangeLog | 9 +++++++++ builds/unix/configure.raw | 1 + builds/unix/ftconfig.in | 14 ++++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 793eb89cc..dd6849753 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2016-11-17 Werner Lemberg + + 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 Fix `lcd_weights' array size. diff --git a/builds/unix/configure.raw b/builds/unix/configure.raw index 72dd2ae6a..034c9ebee 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 7eb5106ae..6f228f51f 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 */