core: DragonFly kqueue support enabled
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Fri, 13 Aug 2010 09:45:39 +0000 (11:45 +0200)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Fri, 13 Aug 2010 09:50:06 +0000 (11:50 +0200)
- fixed kqueue support check for DragonFly (seems to be always
supported since it was forked from FreeBSD 4.8).
- in dragonfly case define both __OS_freebsd and __OS_dragonfly so
  that we can make some exceptions for dragonfly (e.g. no >= 4.1
  version check at runtime before enabling kqueue).
- assume SCTP in 2.6 is at least on par with SCTP in FreeBSD 7.1.

Makefile.defs
io_wait.c

index 440179c..73edb4b 100644 (file)
@@ -626,18 +626,20 @@ $(info target architecture <$(ARCH)>, host architecture <$(HOST_ARCH)>)
 #              adds support for Application Server interface
 # Sometimes is needes correct non-quoted $OS. HACK: gcc translates known OS to number ('linux'), so there is added underscore
 
-# Tell it that dragonflybsd is equivalent to compiling for freebsd.
-# This will cause __OS_freebsd to be defined below.
 ifeq ($(OS), dragonfly)
-       EQUIV_OS := freebsd
+       # Tell it that dragonflybsd is equivalent to compiling for freebsd, but
+       # define also __OS_dragonfly (for fine-tunning like kqueue support).
+       os_defs := -D__OS_freebsd -D__OS_dragonfly
+       EQUIV_OS = freebsd
 else
-       EQUIV_OS := $(OS)
+       os_defs := -D__OS_$(OS)
+       EQUIV_OS = $(OS)
 endif
 
 C_DEFS= $(extra_defs) \
         -DNAME='"$(MAIN_NAME)"' -DVERSION='"$(RELEASE)"' -DARCH='"$(ARCH)"' \
         -DOS='$(OS)_' -DOS_QUOTED='"$(OS)"' -DCOMPILER='"$(CC_VER)"'\
-        -D__CPU_$(ARCH) -D__OS_$(EQUIV_OS) \
+        -D__CPU_$(ARCH) $(os_defs) \
         -DSER_VER=$(SER_VER) \
         -DCFG_DIR='"$(cfg_target)"'\
         -DPKG_MALLOC \
@@ -1820,11 +1822,9 @@ ifeq ($(OS), dragonfly)
        else
                LIBS=   #dlopen is in libc
        endif
-       # check for ver >= 4.1
-       ifeq ($(shell [ $(OSREL_N) -gt 4001 ] && echo has_kqueue), has_kqueue)
-               ifeq ($(NO_KQUEUE),)
-                       C_DEFS+=-DHAVE_KQUEUE
-               endif
+       # dragonfly was forked from freebsd 4.8 => all version have kqueue
+       ifeq ($(NO_KQUEUE),)
+               C_DEFS+=-DHAVE_KQUEUE
        endif
        ifeq ($(NO_SELECT),)
                C_DEFS+=-DHAVE_SELECT
@@ -1840,8 +1840,11 @@ ifeq ($(OS), dragonfly)
 $(info "sctp development files not installed -- sctp disabled")
                        override SCTP :=
                endif
-               ifeq ($(shell [ $(OSREL_N) -lt 7000 ] && echo sctp), sctp)
-$(info "old freebsd version (>= 7.0 needed) -- sctp disabled")
+               # FIXME: don't know what's the status of SCTP on dragonfly
+               #        (we suppose the 2.6 version is >= the version in
+               #         in freebsd 7.0)
+               ifeq ($(shell [ $(OSREL_N) -lt 2006 ] && echo sctp), sctp)
+$(info "old dragonfly version (>= 2.6 needed) -- sctp disabled")
                        override SCTP :=
                endif
                
index 0c73402..62cdee9 100644 (file)
--- a/io_wait.c
+++ b/io_wait.c
@@ -340,10 +340,13 @@ char* check_poll_method(enum poll_types poll_method)
 #ifndef HAVE_KQUEUE
                        ret="kqueue not supported, try re-compiling with -DHAVE_KQUEUE";
 #else
-               /* only in FreeBSD 4.1, NETBSD 2.0, OpenBSD 2.9, Darwin */
+               /* only in FreeBSD 4.1, NETBSD 2.0, OpenBSD 2.9, Darwin, DragonFly */
        #ifdef __OS_freebsd
+               /* all DragonFly versions have kqueque */
+               #ifndef __OS_dragonfly
                        if (_os_ver<0x0401) /* if ver < 4.1 */
                                ret="kqueue not supported on FreeBSD < 4.1";
+               #endif /* __OS_dragonfly */
        #elif defined (__OS_netbsd)
                        if (_os_ver<0x020000) /* if ver < 2.0 */
                                ret="kqueue not supported on NetBSD < 2.0";
@@ -388,9 +391,12 @@ enum poll_types choose_poll_method()
 #endif
 #ifdef HAVE_KQUEUE
        if (poll_method==0)
-               /* only in FreeBSD 4.1, NETBSD 2.0, OpenBSD 2.9, Darwin */
+               /* only in FreeBSD 4.1, NETBSD 2.0, OpenBSD 2.9, Darwin, DragonFly */
        #ifdef __OS_freebsd
+               /* all DragonFly versions have kqueque */
+               #ifndef __OS_dragonfly
                if (_os_ver>=0x0401) /* if ver >= 4.1 */
+               #endif /**__OS_dragonfly
        #elif defined (__OS_netbsd)
                if (_os_ver>=0x020000) /* if ver >= 2.0 */
        #elif defined (__OS_openbsd)