There is some mess across platforms in how they define endianness, especially
in number of underscores in definition prefix, i.e. __BYTE_ORDER vs _BYTE_ORDER
and so on.
The port/port_posix.h tries to handle it, but on some platforms, perticularly,
on NetBSD 6.x, compiler fails with the following error:
c++ -O2 -I/usr/pkg/include -I. -I./include -fno-builtin-memcmp -D_REENTRANT
-DOS_NETBSD -DLEVELDB_PLATFORM_POSIX -DSNAPPY -O2 -DNDEBUG -c
db/builder.cc -o db/builder.o
In file included from ./port/port.h:14:0,
from ./db/filename.h:14,
from db/builder.cc:7:
./port/port_posix.h:67:35: error: '__BYTE_ORDER' was not declared in this scope
./port/port_posix.h:67:35: error: '__LITTLE_ENDIAN' was not declared in this
scope
gmake: *** [db/builder.o] Error 1
Exactly the same case exists for FreeBSD before it was handled in Issue 98
(https://code.google.com/p/leveldb/issues/detail?id=98).
I'd like to suggest the following patch so the endianness detection could be
handled a little bit more gracefully:
--- port/port_posix.h.orig 2012-12-27 18:32:31.000000000 +0000
+++ port/port_posix.h
@@ -7,6 +7,13 @@
#ifndef STORAGE_LEVELDB_PORT_PORT_POSIX_H_
#define STORAGE_LEVELDB_PORT_PORT_POSIX_H_
+#ifndef __BYTE_ORDER
+#define __BYTE_ORDER _BYTE_ORDER
+#endif
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN _LITTLE_ENDIAN
+#endif
+
#undef PLATFORM_IS_LITTLE_ENDIAN
#if defined(OS_MACOSX)
#include <machine/endian.h>
Original issue reported on code.google.com by mike.vol...@gmail.com on 5 Jan 2013 at 9:21
Original issue reported on code.google.com by
mike.vol...@gmail.com
on 5 Jan 2013 at 9:21