
# Copyright (C) Igor Sysoev


have=NGX_FREEBSD . auto/have_headers

CORE_INCS="$UNIX_INCS"
CORE_DEPS="$UNIX_DEPS $FREEBSD_DEPS"
CORE_SRCS="$UNIX_SRCS $FREEBSD_SRCS"

ngx_spacer='
'


# __FreeBSD_version and sysctl kern.osreldate are the best ways
# to determine whether some capability exists and is safe to use.
# __FreeBSD_version is used for the testing of the build environment.
# sysctl kern.osreldate is used for the testing of the kernel capabilities.

version=`grep "#define __FreeBSD_version" /usr/include/osreldate.h \
         | sed -e 's/^.* \(.*\)$/\1/'`

osreldate=`/sbin/sysctl -n kern.osreldate`


# setproctitle() in libutil

if [ \( $version -ge 500000 -a $version -lt 500012 \) \
     -o $version -lt 410002 ]
then
    echo " + setproctitle() in libutil"

    CORE_LIBS="$CORE_LIBS -lutil"
    NGX_SETPROCTITLE_LIB="-lutil"
fi

# sendfile

if [ $osreldate -gt 300007 ]; then
    echo " + sendfile() found"

    have=NGX_HAVE_SENDFILE . auto/have
    CORE_SRCS="$CORE_SRCS $FREEBSD_SENDFILE_SRCS"
fi


# kqueue

if [ \( $osreldate -lt 500000 -a $osreldate -ge 410000 \) \
     -o $osreldate -ge 500011 ]
then
    echo " + kqueue found"

    have=NGX_HAVE_KQUEUE . auto/have
    have=NGX_HAVE_CLEAR_EVENT . auto/have
    EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
    CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
    EVENT_FOUND=YES
fi


NGX_KQUEUE_CHECKED=YES


# kqueue's NOTE_LAWAT

if [ \( $version -lt 500000 -a $version -ge 430000 \) \
     -o $version -ge 500018 ]
then
    echo " + kqueue's NOTE_LOWAT found"
    have=NGX_HAVE_LOWAT_EVENT . auto/have
fi

# kqueue's EVFILT_TIMER

if [ \( $version -lt 500000 -a $version -ge 440001 \) \
     -o $version -ge 500023 ]
then
    echo " + kqueue's EVFILT_TIMER found"
    have=NGX_HAVE_TIMER_EVENT . auto/have
fi


if [ $USE_THREADS = "rfork" ]; then

    echo " + using rfork()"

#    # kqueue's EVFILT_SIGNAL is safe
#
#    if [ $version -gt 460101 ]; then
#        echo " + kqueue's EVFILT_SIGNAL is safe"
#        have=NGX_HAVE_SAFE_EVFILT_SIGNAL . auto/have
#    else
#        echo "$0: error: the kqueue's EVFILT_SIGNAL is unsafe on this"
#        echo "FreeBSD version, so --with-threads=rfork could not be used"
#        echo
#
#        exit 1
#    fi
fi


if [ $EVENT_AIO = YES ]; then
    if [ \( $version -lt 500000 -a $version -ge 430000 \) \
         -o $version -ge 500014 ]
    then
        have=NGX_HAVE_AIO . auto/have
        EVENT_MODULES="$EVENT_MODULES $AIO_MODULE"
        CORE_SRCS="$CORE_SRCS $AIO_SRCS"
    else

cat << END

$0: error: the kqueue does not support AIO on this FreeBSD version

END

        exit 1
    fi
fi
