Fix 64-bit platform detection for pre C++11 compilers.

In version 3.6.3, Ice started detecting 64 bit platforms by
checking __WORDSIZE. When using C++98/03, __STDC_LIMIT_MACROS isn't
set by default and __WORDSIZE is always set to 32, even if the
required headers weren't included beforehand. Until a proper
fix is available in base (e.g. not setting __WORDSIZE at all if
__STDC_LIMIT_MACROS isn't defined), we detect if C++11 or newer
is used and only rely on __WORDSIZE in this case, otherwise
we fall back to detecting the platform using other macros.

PR:		216609
Reported by:	jbeich
This commit is contained in:
Michael Gmelin 2017-01-30 22:29:23 +00:00
parent 104700fa67
commit a0eac7f8c4
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=432888
3 changed files with 33 additions and 4 deletions

View File

@ -5,6 +5,17 @@ they are unavoidable.
You should get into the habit of checking this file for changes each time
you update your ports collection, before attempting any port upgrades.
20170130:
AFFECTS: users of devel/ice, devel/py-ice, devel/php5-ice
AUTHOR: grembo@FreeBSD.org
Since __WORDSIZE as defined by <stdint.h> always reports 32 when using
C++98/03 (unless __STDC_LIMIT_MACROS is set explictly), Ice 3.6.3 used
"long long" for Int64 instead of "long" on 64-bit platforms by mistake.
A workaround has been added in version 3.6.3_2 of these three ports,
requiring to upgrade all of them at the same time and to rebuild all
custom code that links against them.
20170129:
AFFECTS: users of multimedia/motion
AUTHOR: jhale@FreeBSD.org

View File

@ -3,7 +3,7 @@
PORTNAME= Ice
PORTVERSION= 3.6.3
PORTREVISION= 1
PORTREVISION= 2
DISTVERSIONPREFIX= v
CATEGORIES= devel

View File

@ -1,6 +1,24 @@
--- cpp/include/IceUtil/Config.h.orig 2015-06-27 15:37:32.688102665 +0000
+++ cpp/include/IceUtil/Config.h 2015-06-27 15:37:34.926179135 +0000
@@ -49,6 +49,16 @@
--- cpp/include/IceUtil/Config.h.orig 2016-10-05 16:59:08.000000000 +0200
+++ cpp/include/IceUtil/Config.h 2017-01-30 22:11:08.235308977 +0100
@@ -80,13 +80,15 @@
//
# include <stdint.h>
-# if defined(__WORDSIZE) && (__WORDSIZE == 64)
+# if (__cplusplus >= 201103L) && defined(__WORDSIZE) && (__WORDSIZE == 64)
# define ICE_64
-# elif defined(__WORDSIZE) && (__WORDSIZE == 32)
+# elif (__cplusplus >= 201103L) && defined(__WORDSIZE) && (__WORDSIZE == 32)
# define ICE_32
# elif defined(__sun) && (defined(__sparcv9) || defined(__x86_64)) || \
defined(__linux) && defined(__x86_64) || \
defined(__APPLE__) && defined(__x86_64) || \
+ defined(__FreeBSD__) && defined(__x86_64) || \
+ defined(__FreeBSD__) && defined(__LP64__) || \
defined(__hppa) && defined(__LP64__) || \
defined(_ARCH_COM) && defined(__64BIT__) || \
defined(__alpha__) || \
@@ -98,6 +100,16 @@
#endif
//