* ?var Arnfj?r? Bjarmason <avarab@xxxxxxxxx> [170626 08:47]: > > 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__) && \ > This addition still fails on Solaris for me. It appears that _BIG_ENDIAN is defined but with no value on this platform. > > > > 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? I am running Linux and 2.13.2 compiles and works fine for me on SPARC. If you want to keep the compact layout you have in the #if defined() portion, you can get away with reversing the logic as follows: --------- >8 ------------- diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c index facea1bb5..808b520cd 100644 --- a/sha1dc/sha1.c +++ b/sha1dc/sha1.c @@ -36,20 +36,20 @@ #undef SHA1DC_BIGENDIAN #endif -#if (defined(_BYTE_ORDER) || defined(__BYTE_ORDER) || defined(__BYTE_ORDER__)) +#if !(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(_BIG_ENDIAN) || defined(__BIG_ENDIAN) || defined(__BIG_ENDIAN__) || \ + defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \ + defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || \ + defined(__sparc)) #define SHA1DC_BIGENDIAN #endif #else +#if ((defined(_BYTE_ORDER) && defined(_BIG_ENDIAN)) || \ + (defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN)) || \ + (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __BIG_ENDIAN__)) ) -#if (defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN) || defined(__BIG_ENDIAN__) || \ - defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \ - defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || \ - defined(__sparc)) #define SHA1DC_BIGENDIAN #endif