On Mon, Jun 26 2017, Michael Kebe jotted: > 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 Does this patch change anything, with or without the previous patch: diff --git a/git-compat-util.h b/git-compat-util.h index 047172d173..1327aea229 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -131,6 +131,14 @@ # else # define _XOPEN_SOURCE 500 # endif + +/* + * Bring in macros defining _BIG_ENDIAN etc. Should be brought in by + * the likes of stdio.h, but include it here in case it hasn't been + * included already. + */ +#include <sys/isa_defs.h> + #elif !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__USLC__) && \ !defined(_M_UNIX) && !defined(__sgi) && !defined(__DragonFly__) && \ !defined(__TANDEM) && !defined(__QNX__) && !defined(__MirBSD__) && \ > > 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