[BUILD] add support for build under Cygwin
After considering various possibilities, we compiled haproxy under cygwin.
Attached is an updated full diff that also has the TARGET=cygwin documented.
The whole thing compiles and installs with this diff only.
In cygwin 1.7 (now in beta), there is apparently support for ipv6. Cygwin
1.5 (later versions, anyway) already includes some support in the form of a
define USE_IPV6. When defined, it declares the sockaddr_in6 struct and
possibly other things. The above definition AF_INET6=23 is taken from
their /usr/include/socket.h file (where it is #if 0'd out).
We are running into a socket limit. It appears that Cygwin (running on
Windows 2003 Server) will only allow us to set ulimit -n (maximum open
files) to 3200, which means we're a little short of 1600 connections.
The limit of 3200 is an internal Cygwin limit. Perhaps they can raise it in
the future. Using the nbproc option, I was able to bring up 10 servers. It
seems to me that they were able to handle over 2000 connections (even though
each had maxconn 1500 set, and the hard Cygwin fd limit).
diff --git a/Makefile b/Makefile
index 8e97645..61451c2 100644
--- a/Makefile
+++ b/Makefile
@@ -70,7 +70,7 @@
# Use TARGET=<target_name> to optimize for a specifc target OS among the
# following list (use the default "generic" if uncertain) :
# generic, linux22, linux24, linux24e, linux26, solaris,
-# freebsd, openbsd, custom
+# freebsd, openbsd, cygwin, custom
TARGET =
#### TARGET CPU
@@ -217,6 +217,14 @@
USE_POLL = implicit
USE_KQUEUE = implicit
USE_TPROXY = implicit
+else
+ifeq ($(TARGET),cygwin)
+ # This is for Cygwin
+ # Cygwin adds IPv6 support only in version 1.7 (in beta right now).
+ USE_POLL = implicit
+ USE_TPROXY = implicit
+ TARGET_CFLAGS = $(if $(filter 1.5.%, $(shell uname -r)), -DUSE_IPV6 -DAF_INET6=23 -DINET6_ADDRSTRLEN=46, )
+endif # cygwin
endif # openbsd
endif # freebsd
endif # solaris
@@ -440,7 +448,7 @@
@echo "Please choose the target among the following supported list :"
@echo
@echo " linux26, linux24, linux24e, linux22, solaris"
- @echo " freebsd, openbsd, custom, generic"
+ @echo " freebsd, openbsd, cygwin, custom, generic"
@echo
@echo "Use \"generic\" if you don't want any optimization, \"custom\" if you"
@echo "want to precisely tweak every option, or choose the target which"