git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Version 1.8.1 does not compile on Cygwin 1.7.14

From
Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Date
Jan 22, 2013, 18:31 UTC
Message-ID
<50FEDB08.6030901@ramsay1.demon.co.uk>
In-Reply-To
<20130120101007.GD16339@elie.Belkin>
Jonathan Nieder wrote:
Show 20 quoted lines
> Ramsay Jones wrote:
> 
>> --- a/git-compat-util.h
>> +++ b/git-compat-util.h
>> @@ -85,12 +85,6 @@
>>  #define _NETBSD_SOURCE 1
>>  #define _SGI_SOURCE 1
>>  
>> -#ifdef WIN32 /* Both MinGW and MSVC */
>> -#define WIN32_LEAN_AND_MEAN  /* stops windows.h including winsock.h */
>> -#include <winsock2.h>
>> -#include <windows.h>
>> -#endif
> 
> So, do I understand correctly that the above conditional should be
> something like
> 
>  #if defined(WIN32) && !defined(__CYGWIN__)
> 
> to allow dropping the CYGWIN_V15_WIN32API setting?
Yes, replacing the git-compat-util.h hunk above with:
    diff --git a/git-compat-util.h b/git-compat-util.h
    index e5a4b74..a38ae8d 100644
    --- a/git-compat-util.h
    +++ b/git-compat-util.h
    @@ -85,7 +85,7 @@
     #define _NETBSD_SOURCE 1
     #define _SGI_SOURCE 1
 
    -#ifdef WIN32 /* Both MinGW and MSVC */
    +#if defined(WIN32) && !defined(__CYGWIN__) /* Both MinGW and MSVC */
     #define WIN32_LEAN_AND_MEAN  /* stops windows.h including winsock.h */
     #include <winsock2.h>
     #include <windows.h>
will also compile on cygwin 1.5.x
> "defined(WIN32)" is used throughout git to mean "win32 and not
> cygwin", so if I understand correctly we would either need to do

Hmm ... I remember being *very* nervous of commit 435bdf8c ("Make usage of windows.h lean and mean", 16-09-2009) exactly because it makes the code (on cygwin) much more fragile with respect to header include order. ;-)

As I have mentioned here before, the claim that "WIN32 is not defined on cygwin" is simply nonsense - it depends on if/when certain header files are included. For example, *as soon as* you include <windows.h> (and, I suspect, many other win32 headers) then "defined(WIN32)" is true.

Note that commit 380a4d92 ("Update cygwin.c for new mingw-64 win32 api headers", 11-11-2012) swaps the include order for the win32.h and git-compat-util.h header files. [I don't know the details, Mark didn't elaborate, but it is clearly an include order problem on cygwin 1.7.x :-D ] This causes compilation errors on cygwin 1.5.x, exactly because win32.h includes <windows.h>, which defines WIN32, which then leads to git-compat-util.h including <winsock2.h>.

>  #if defined(WIN32) && defined(__CYGWIN__)
>  # undef WIN32
>  #endif
Hmm, except when you want it defined on cygwin, of course ... ;-)
> Thanks for investigating.
No problem.
I've included the updated patch below, just for completeness.
HTH

ATB, Ramsay Jones

-- >8 --
Subject: [PATCH] cygwin: Remove the CYGWIN_V15_WIN32API config
Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
---
 Makefile          | 7 -------
 compat/cygwin.c   | 5 -----
 config.mak.uname  | 1 -
 git-compat-util.h | 2 +-
 4 files changed, 1 insertion(+), 14 deletions(-)
diff --git a/Makefile b/Makefile
index 1b30d7b..1c84f68 100644
--- a/Makefile
+++ b/Makefile
@@ -281,10 +281,6 @@ all::
 #
 # Define NO_REGEX if you have no or inferior regex support in your C library.
 #
-# Define CYGWIN_V15_WIN32API if you are using Cygwin v1.7.x but are not
-# using the current w32api packages. The recommended approach, however,
-# is to update your installation if compilation errors occur.
-#
 # Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the
 # user.
 #
@@ -1402,9 +1398,6 @@ ifdef NO_REGEX
 	COMPAT_CFLAGS += -Icompat/regex
 	COMPAT_OBJS += compat/regex/regex.o
 endif
-ifdef CYGWIN_V15_WIN32API
-	COMPAT_CFLAGS += -DCYGWIN_V15_WIN32API
-endif
 
 ifdef USE_NED_ALLOCATOR
        COMPAT_CFLAGS += -Icompat/nedmalloc
diff --git a/compat/cygwin.c b/compat/cygwin.c
index 5428858..0a9aa6d 100644
--- a/compat/cygwin.c
+++ b/compat/cygwin.c
@@ -1,13 +1,8 @@
 #define WIN32_LEAN_AND_MEAN
-#ifdef CYGWIN_V15_WIN32API
-#include "../git-compat-util.h"
-#include "win32.h"
-#else
 #include <sys/stat.h>
 #include <sys/errno.h>
 #include "win32.h"
 #include "../git-compat-util.h"
-#endif
 #include "../cache.h" /* to read configuration */
 
 static inline void filetime_to_timespec(const FILETIME *ft, struct timespec *ts)
diff --git a/config.mak.uname b/config.mak.uname
index bea34f0..5e493c9 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -158,7 +158,6 @@ ifeq ($(uname_O),Cygwin)
 		NO_SYMLINK_HEAD = YesPlease
 		NO_IPV6 = YesPlease
 		OLD_ICONV = UnfortunatelyYes
-		CYGWIN_V15_WIN32API = YesPlease
 	endif
 	NO_THREAD_SAFE_PREAD = YesPlease
 	NEEDS_LIBICONV = YesPlease
diff --git a/git-compat-util.h b/git-compat-util.h
index e5a4b74..a38ae8d 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -85,7 +85,7 @@
 #define _NETBSD_SOURCE 1
 #define _SGI_SOURCE 1
 
-#ifdef WIN32 /* Both MinGW and MSVC */
+#if defined(WIN32) && !defined(__CYGWIN__) /* Both MinGW and MSVC */
 #define WIN32_LEAN_AND_MEAN  /* stops windows.h including winsock.h */
 #include <winsock2.h>
 #include <windows.h>
-- 
1.8.1
Previous: Ramsay JonesNext: Mark Levedahl
Message 35 of 45 in “Version 1.8.1 does not compile on Cygwin 1.7.14”
  1. Stephen & Linda SmithJan 6, 2013
  2. Jason PyeronJan 6, 2013
  3. Jason PyeronJan 6, 2013
  4. Stephen & Linda SmithJan 6, 2013
  5. Jason PyeronJan 6, 2013
  6. Torsten BögershausenJan 6, 2013
  7. Jonathan NiederJan 6, 2013
  8. Torsten BögershausenJan 6, 2013
  9. Jonathan NiederJan 6, 2013
  10. Mark LevedahlJan 6, 2013
  11. Jonathan NiederJan 6, 2013
  12. Stephen & Linda SmithJan 6, 2013
  13. Junio C HamanoJan 6, 2013
  14. Torsten BögershausenJan 6, 2013
  15. Mark LevedahlJan 6, 2013
  16. Mark LevedahlJan 6, 2013
  17. Jason PyeronJan 6, 2013
  18. Junio C HamanoJan 6, 2013
  19. Jason PyeronJan 6, 2013
  20. Mark LevedahlJan 6, 2013
  21. Mark LevedahlJan 6, 2013
  22. Jason PyeronJan 7, 2013
  23. Junio C HamanoJan 7, 2013
  24. Pyeron, Jason J CTR (US)Jan 7, 2013
  25. Mark LevedahlJan 8, 2013
  26. Alex RiesenJan 11, 2013
  27. Alex RiesenJan 11, 2013
  28. Mark LevedahlJan 13, 2013
  29. Ramsay JonesJan 15, 2013
  30. Jonathan NiederJan 20, 2013
  31. Torsten BögershausenJan 20, 2013
  32. Jonathan NiederJan 20, 2013
  33. Torsten BögershausenJan 21, 2013
  34. Ramsay JonesJan 22, 2013
  35. Ramsay JonesJan 22, 2013
  36. Mark LevedahlJan 25, 2013
  37. Junio C HamanoJan 26, 2013
  38. Eric BlakeJan 26, 2013
  39. mingw: rename WIN32 cpp macro to NATIVE_WINDOWSJonathan Nieder, Jan 26, 2013
  40. Mark LevedahlJan 26, 2013
  41. Torsten BögershausenJan 26, 2013
  42. Ramsay JonesJan 28, 2013
  43. Junio C HamanoFeb 25, 2013
  44. Mark LevedahlFeb 26, 2013
  45. Torsten BögershausenFeb 26, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.