No luck with the patch. Still got: CC sha1dc/sha1.o sha1dc/sha1.c:43:58: error: operator '==' has no right operand (defined(_BYTE_ORDER) && (_BYTE_ORDER == _BIG_ENDIAN)) || \ ^ gmake: *** [sha1dc/sha1.o] Error 1 Greetings Michael 2017-06-26 10:42 GMT+02:00 Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>: > > On Mon, Jun 26 2017, Michael Kebe jotted: > >> When compiling 2.13.2 on Solaris SPARC I get this error: >> >> CC sha1dc/sha1.o >> sha1dc/sha1.c:41:58: error: operator '==' has no right operand >> #if ((defined(_BYTE_ORDER) && (_BYTE_ORDER == _BIG_ENDIAN)) || \ >> ^ >> gmake: *** [sha1dc/sha1.o] Error 1 >> >> The define _BIG_ENDIAN is set by Solaris on SPARC systems. So the >> check in line 41 gives this error. >> >> The _BIG_ENDIAN define is used few line below for defining >> SHA1DC_BIGENDIAN. This is needed for Solaris SPARC systems. >> See >> https://github.com/cr-marcstevens/sha1collisiondetection/commit/33a694a9ee1b79c24be45f9eab5ac0e1aeeaf271 > > I can see why this would error out. In sys/isa_defs.h on SPARC there's > just `#define _BIG_ENDIAN` > (http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/sys/isa_defs.h), > and (on Linux): > > $ cat /tmp/test.c > #define _FOO > #define _BAR 1 > #if (_BAR == _FOO) > #endif > $ gcc -E /tmp/test.c > # 1 "/tmp/test.c" > # 1 "<built-in>" > # 1 "<command-line>" > # 31 "<command-line>" > # 1 "/usr/include/stdc-predef.h" 1 3 4 > # 32 "<command-line>" 2 > # 1 "/tmp/test.c" > /tmp/test.c:3:18: error: operator '==' has no right operand > #if (_BAR == _FOO) > > What I don't get is how this would have worked for Liam then (see > 20170613020939.gemh3m5z6czgwmzp@xxxxxxxxxx). Differences in Solaris > versions and how their headers look like? > > Does this patch fix it for you? > > diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c > index facea1bb56..0b75b31b67 100644 > --- a/sha1dc/sha1.c > +++ b/sha1dc/sha1.c > @@ -36,9 +36,11 @@ > #undef SHA1DC_BIGENDIAN > #endif > > -#if (defined(_BYTE_ORDER) || defined(__BYTE_ORDER) || defined(__BYTE_ORDER__)) > +#if (defined(BYTE_ORDER) || defined(_BYTE_ORDER) || defined(__BYTE_ORDER) || \ > + defined(__BYTE_ORDER__)) > > -#if ((defined(_BYTE_ORDER) && (_BYTE_ORDER == _BIG_ENDIAN)) || \ > +#if ((defined(BYTE_ORDER) && (BYTE_ORDER == BIG_ENDIAN)) || \ > + (defined(_BYTE_ORDER) && (_BYTE_ORDER == _BIG_ENDIAN)) || \ > (defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN)) || \ > (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __BIG_ENDIAN__)) ) > #define SHA1DC_BIGENDIAN > > I thought maybe BYTE_ORDER would work after searching the Illumos > sources a bit more: > http://src.illumos.org/source/search?q=BYTE_ORDER&project=illumos-gate