[MacPorts] #45570: gpsd @3.11: driver_rtcm2.c:125:2: error: #error Unknown endianness!
MacPorts
noreply at macports.org
Thu Apr 30 03:16:14 PDT 2015
#45570: gpsd @3.11: driver_rtcm2.c:125:2: error: #error Unknown endianness!
---------------------------+---------------------------
Reporter: ryandesign@… | Owner: ryandesign@…
Type: defect | Status: closed
Priority: Normal | Milestone:
Component: ports | Version: 2.3.2
Resolution: fixed | Keywords: tiger leopard
Port: gpsd |
---------------------------+---------------------------
Comment (by ryandesign@…):
I may as well reproduce here what I sent to the developer, in case anyone
is interested:
-----
The problem is that on 10.5 only the following are defined:
{{{
$ cpp -E -dM < /dev/null | grep -E '(BYTE|ENDIAN)'
#define __BIG_ENDIAN__ 1
#define _BIG_ENDIAN 1
}}}
That's on a PowerPC Mac; on an Intel Mac, presumably `__LITTLE_ENDIAN__`
and `_LITTLE_ENDIAN` would both be defined to `1`.
This runs afoul of the code in gpsd's driver_rtcm2.c which first does
this:
{{{
/*
* BSD uses _BYTE_ORDER, and Linux uses __BYTE_ORDER.
*/
#if !defined( __BYTE_ORDER) && defined(_BYTE_ORDER)
#define __BYTE_ORDER _BYTE_ORDER
#endif
#if !defined( __BIG_ENDIAN) && defined(_BIG_ENDIAN)
#define __BIG_ENDIAN _BIG_ENDIAN
#endif
#if !defined( __LITTLE_ENDIAN) && defined(_LITTLE_ENDIAN)
#define __LITTLE_ENDIAN _LITTLE_ENDIAN
#endif
}}}
And then does this:
{{{
/*
* Darwin (Mac OS X) uses special defines.
*/
#if !defined( __BYTE_ORDER) && defined(__DARWIN_BYTE_ORDER)
#define __BYTE_ORDER __DARWIN_BYTE_ORDER
#endif
#if !defined( __BIG_ENDIAN) && defined(__DARWIN_BIG_ENDIAN)
#define __BIG_ENDIAN __DARWIN_BIG_ENDIAN
#endif
#if !defined( __LITTLE_ENDIAN) && defined(__DARWIN_LITTLE_ENDIAN)
#define __LITTLE_ENDIAN __DARWIN_LITTLE_ENDIAN
#endif
}}}
On 10.5, in the first block, on PowerPC, `__BIG_ENDIAN` gets set to
`_BIG_ENDIAN`, i.e. `1` (or on Intel, `__LITTLE_ENDIAN` gets set to
`_LITTLE_ENDIAN`, i.e. `1`), and `1` doesn't match either of the possible
values of `__BYTE_ORDER` == `__DARWIN_BYTE_ORDER` (which is either
`__DARWIN_BIG_ENDIAN` == `4321` or `__DARWIN_LITTLE_ENDIAN` == `1234`),
which is where the error trips:
{{{
#if __BYTE_ORDER == __BIG_ENDIAN
#define WORDS_BIGENDIAN 1
#elif __BYTE_ORDER == __LITTLE_ENDIAN
#undef WORDS_BIGENDIAN
#else
#error Unknown endianness!
#endif /* __BYTE_ORDER */
}}}
Assuming the BSD block is correct for BSD, the solution I propose is to
reverse the order of these two blocks, putting the Darwin block before the
BSD one. This allows the build to succeed on 10.5 at least.
--
Ticket URL: <https://trac.macports.org/ticket/45570#comment:5>
MacPorts <https://www.macports.org/>
Ports system for OS X
More information about the macports-tickets
mailing list