
# Copyright (C) Igor Sysoev


if [ ".$PLATFORM" = "." ]; then
    echo "checking for OS"

    SYSTEM=`uname -s 2>/dev/null`
    RELEASE=`uname -r 2>/dev/null`
    MACHINE=`uname -m 2>/dev/null`

    echo " + $SYSTEM $RELEASE $MACHINE"

    PLATFORM="$SYSTEM:$RELEASE:$MACHINE";
else
    echo "building for $PLATFORM"
fi

case $PLATFORM in

    FreeBSD:* | DragonFly:*)
        . auto/os/freebsd
    ;;

    Linux:*)
        . auto/os/linux
    ;;

    SunOS:*)
        . auto/os/solaris
    ;;

    win32)
        . auto/os/win32
    ;;

    *)
        CORE_INCS="$UNIX_INCS"
        CORE_DEPS="$UNIX_DEPS $POSIX_DEPS"
        CORE_SRCS="$UNIX_SRCS"
    ;;

esac


if [ $PLATFORM != win32 ]; then

    if test -z "$NGX_USER"; then
        NGX_USER=nobody
        NGX_GROUP=nobody
    fi


    ngx_feature="/dev/poll"
    ngx_feature_name="devpoll"
    ngx_feature_run=no
    ngx_feature_incs="#include <sys/devpoll.h>"
    ngx_feature_libs=
    ngx_feature_test="int  n, dp; struct dvpoll  dvp;
                      dp = 0;
                      dvp.dp_fds = NULL;
                      dvp.dp_nfds = 0;
                      dvp.dp_timeout = 0;
                      n = ioctl(dp, DP_POLL, &dvp)"
    . auto/feature

    if [ $ngx_found = yes ]; then
        have=HAVE_DEVPOLL . auto/have
        CORE_SRCS="$CORE_SRCS $DEVPOLL_SRCS"
        EVENT_MODULES="$EVENT_MODULES $DEVPOLL_MODULE"
        EVENT_FOUND=YES
    fi


    if test -z "$NGX_KQUEUE_CHECKED"; then
        ngx_feature="kqueue"
        ngx_feature_name="kqueue"
        ngx_feature_run=no
        ngx_feature_incs="#include <sys/event.h>"
        ngx_feature_libs=
        ngx_feature_test="int kq; kq = kqueue()"
        . auto/feature

        if [ $ngx_found = yes ]; then

            have=HAVE_KQUEUE . auto/have
            have=HAVE_CLEAR_EVENT . auto/have
            EVENT_MODULES="$EVENT_MODULES $KQUEUE_MODULE"
            CORE_SRCS="$CORE_SRCS $KQUEUE_SRCS"
            EVENT_FOUND=YES

            ngx_feature="kqueue's NOTE_LOWAT"
            ngx_feature_name="HAVE_LOWAT_EVENT"
            ngx_feature_run=no
            ngx_feature_incs="#include <sys/event.h>"
            ngx_feature_libs=
            ngx_feature_test="struct kevent  kev;
                              kev.fflags = NOTE_LOWAT;"
            . auto/feature
        fi
    fi
fi
