On Mon, Jun 26 2017, Michael Kebe jotted: > Still no luck, with one or both patches. Could you please attach (or pastebin or whatever) your copy of /usr/include/sys/isa_defs.h? And what Solaris/Illumos/Whatever version is this? Maybe this patch works for you: diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c index facea1bb56..4f747c3aea 100644 --- a/sha1dc/sha1.c +++ b/sha1dc/sha1.c @@ -36,17 +36,19 @@ #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)) || \ - (defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN)) || \ - (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __BIG_ENDIAN__)) ) +#if ((defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN)) || \ + (defined(_BYTE_ORDER) && defined(_BIG_ENDIAN) && (_BYTE_ORDER == _BIG_ENDIAN)) || \ + (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && (__BYTE_ORDER == __BIG_ENDIAN)) || \ + (defined(__BYTE_ORDER__) && defined(__BIG_ENDIAN__) && (__BYTE_ORDER__ == __BIG_ENDIAN__)) ) #define SHA1DC_BIGENDIAN #endif #else -#if (defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN) || defined(__BIG_ENDIAN__) || \ +#if (defined(BIG_ENDIAN) || defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN) || defined(__BIG_ENDIAN__) || \ defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \ defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || \ defined(__sparc)) Make sure to run the test suite after that, because it may compile but not diagnose you as Big Endian if it doesn't work, thus failing horribly on runtime. > Greetings > Michael > > 2017-06-26 14:47 GMT+02:00 Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>: >> >> 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 >>