summaryrefslogtreecommitdiff
path: root/cpp/include
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2016-06-15 18:06:00 +0200
committerJose <jose@zeroc.com>2016-06-15 18:06:00 +0200
commit99855eefd7419c24e9b204fb851ec95adc581b4e (patch)
tree0d79a68449d770c3c550b43121c0d6d43f602d14 /cpp/include
parentAllow java libraries to override pom scm data (diff)
parentStack trace test expec files for Linux (diff)
downloadice-99855eefd7419c24e9b204fb851ec95adc581b4e.tar.bz2
ice-99855eefd7419c24e9b204fb851ec95adc581b4e.tar.xz
ice-99855eefd7419c24e9b204fb851ec95adc581b4e.zip
Merge branch '3.6-stretch' into 3.6
Diffstat (limited to 'cpp/include')
-rw-r--r--cpp/include/IceUtil/Config.h71
-rw-r--r--cpp/include/IceUtil/IconvStringConverter.h2
2 files changed, 58 insertions, 15 deletions
diff --git a/cpp/include/IceUtil/Config.h b/cpp/include/IceUtil/Config.h
index 0f8d19b8a26..5ca6a10227b 100644
--- a/cpp/include/IceUtil/Config.h
+++ b/cpp/include/IceUtil/Config.h
@@ -11,41 +11,84 @@
#define ICE_UTIL_CONFIG_H
//
-// Endianness
+// Use the system headers as preferred way to detect endianness
+// and fallback to architecture based checks.
//
-// Most CPUs support only one endianness, with the notable exceptions
-// of Itanium (IA64) and MIPS.
//
-#ifdef __GLIBC__
-# include <endian.h>
+#include <stdlib.h>
+
+#if defined(__GLIBC__)
+# include <endian.h>
+#elif defined(__APPLE__)
+# include <machine/endian.h>
+#elif defined(__FreeBSD__)
+# include <sys/endian.h>
#endif
-#if defined(__i386) || defined(_M_IX86) || defined(__x86_64) || \
- defined(_M_X64) || defined(_M_IA64) || defined(__alpha__) || \
- defined(__ARMEL__) || defined(_M_ARM_FP) || defined(__arm64) || \
- defined(__MIPSEL__) || (defined(__BYTE_ORDER) && (__BYTE_ORDER == __LITTLE_ENDIAN))
+#if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && (__BYTE_ORDER == __LITTLE_ENDIAN)) || \
+ (defined(_BYTE_ORDER) && defined(_LITTLE_ENDIAN) && (_BYTE_ORDER == _LITTLE_ENDIAN))
+
+# define ICE_LITTLE_ENDIAN
+
+#elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && (__BYTE_ORDER == __BIG_ENDIAN)) || \
+ (defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && (_BYTE_ORDER == _BIG_ENDIAN))
+
+# define ICE_BIG_ENDIAN
+
+#elif defined(__i386) || \
+ defined(_M_IX86) || \
+ defined(__x86_64) || \
+ defined(_M_X64) || \
+ defined(_M_IA64) || \
+ defined(__alpha__) || \
+ defined(__ARMEL__) || \
+ defined(_M_ARM_FP) || \
+ defined(__arm64) || \
+ defined(__MIPSEL__)
+
# define ICE_LITTLE_ENDIAN
-#elif defined(__sparc) || defined(__sparc__) || defined(__hppa) || \
- defined(__ppc__) || defined(__powerpc) || defined(_ARCH_COM) || \
- defined(__MIPSEB__) || (defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN))
+
+#elif defined(__sparc) || \
+ defined(__sparc__) || \
+ defined(__hppa) || \
+ defined(__ppc__) || \
+ defined(__powerpc) || \
+ defined(_ARCH_COM) || \
+ defined(__MIPSEB__)
+
# define ICE_BIG_ENDIAN
+
#else
+
# error "Unknown architecture"
+
#endif
+
//
-// 32 or 64 bit mode?
+// Use system headers as preferred way to detect 32 or 64 bit mode and
+// fallback to architecture based checks
//
-#if defined(__sun) && (defined(__sparcv9) || defined(__x86_64)) || \
+#include <stdint.h>
+
+#if defined(__WORDSIZE) && (__WORDSIZE == 64)
+# define ICE_64
+#elif 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(__hppa) && defined(__LP64__) || \
defined(_ARCH_COM) && defined(__64BIT__) || \
defined(__alpha__) || \
defined(_WIN64)
+
# define ICE_64
+
#else
+
# define ICE_32
+
#endif
//
diff --git a/cpp/include/IceUtil/IconvStringConverter.h b/cpp/include/IceUtil/IconvStringConverter.h
index 4281eb89aff..95a4c4120fd 100644
--- a/cpp/include/IceUtil/IconvStringConverter.h
+++ b/cpp/include/IceUtil/IconvStringConverter.h
@@ -18,7 +18,7 @@
#include <langinfo.h>
#include <string.h> // For strerror
-#if (defined(__APPLE__) && _LIBICONV_VERSION < 0x010B) || defined(__FreeBSD__)
+#if (defined(__APPLE__) && _LIBICONV_VERSION < 0x010B)
//
// See http://sourceware.org/bugzilla/show_bug.cgi?id=2962
//