
# Copyright (C) Igor Sysoev


if test -z "$NGX_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"

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

case $NGX_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 [ $NGX_PLATFORM != win32 ]; then

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


    ngx_feature="/dev/poll"
    ngx_feature_name="NGX_HAVE_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
        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="NGX_HAVE_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=NGX_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="NGX_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
