Subject: Re: What's cooking in git.git (Oct 2013, #07; Mon, 28)

From: Ramsay Jones <[email-masked]>
Date: Wed, 30 Oct 2013 19:06:23 +0000

On 30/10/13 17:14, Torsten Bögershausen wrote:
> On 2013-10-30 18.01, Vicent Martí wrote:
>> On Wed, Oct 30, 2013 at 5:51 PM, Torsten Bögershausen <[email-masked]> wrote:
>>> There is a name clash under cygwin 1.7 (1.5 is OK)
>>> The following "first aid hot fix" works for me:
>>> /Torsten
>>
>> If Cygwin declares its own bswap_64, wouldn't it be better to use it
>> instead of overwriting it with our own?
> Yes,
> this will be part of a longer patch.
> I found that some systems have something like this:
> 
> #define htobe64(x) bswap_64(x)
> And bswap_64 is a function, so we can not detect it by "asking"
> #ifdef bswap_64
> ..
> #endif
> 
> 
> But we can use
> #ifdef htobe64
> ...
> #endif
> and this will be part of a bigger patch.
> 
> And, in general, we should avoid to introduce functions which may have a
> name clash.
> Using the git_ prefix for function names is a good practice.
> So in order to unbrake the compilation error under cygwin 17,
> the "hotfix" can be used.

heh, my patch (given below) took a different approach, but ....

ATB,
Ramsay Jones

-- >8 --
Subject: [PATCH] compat/bswap.h: Fix redefinition of bswap_64 error on cygwin
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Since commit 452e0f20 ("compat: add endianness helpers", 24-10-2013)
the cygwin build has failed like so:

    GIT_VERSION = 1.8.4.1.804.g1f3748b
        * new build flags
        CC credential-store.o
    In file included from git-compat-util.h:305:0,
                     from cache.h:4,
                     from credential-store.c:1:
    compat/bswap.h:67:24: error: redefinition of 'bswap_64'
    In file included from /usr/include/endian.h:32:0,
                     from /usr/include/cygwin/types.h:21,
                     from /usr/include/sys/types.h:473,
                     from /usr/include/sys/unistd.h:9,
                     from /usr/include/unistd.h:4,
                     from git-compat-util.h:98,
                     from cache.h:4,
                     from credential-store.c:1:
    /usr/include/byteswap.h:31:1: note: previous definition of \
	‘bswap_64’ was here
    Makefile:1985: recipe for target 'credential-store.o' failed
    make: *** [credential-store.o] Error 1

Note that cygwin has a defintion of 'bswap_64' in the <byteswap.h>
header file (which had already been included by git-compat-util.h).
In order to suppress the error, ensure that the <byteswap.h> header
is included, just like the __GNUC__/__GLIBC__ case, rather than
attempting to define a fallback implementation.

Signed-off-by: Ramsay Jones <[email-masked]>
---
 compat/bswap.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/compat/bswap.h b/compat/bswap.h
index ea1a9ed..b864abd 100644
--- a/compat/bswap.h
+++ b/compat/bswap.h
@@ -61,7 +61,7 @@ static inline uint32_t git_bswap32(uint32_t x)
 # define ntohll(n) (n)
 # define htonll(n) (n)
 #elif __BYTE_ORDER == __LITTLE_ENDIAN
-#	if defined(__GNUC__) && defined(__GLIBC__)
+#	if defined(__GNUC__) && (defined(__GLIBC__) || defined(__CYGWIN__))
 #		include <byteswap.h>
 #	else /* GNUC & GLIBC */
 static inline uint64_t bswap_64(uint64_t val)
-- 
1.8.4