
# Copyright (C) Igor Sysoev


CORE_INCS="$UNIX_INCS"
CORE_DEPS="$UNIX_DEPS $LINUX_DEPS"
CORE_SRCS="$UNIX_SRCS $LINUX_SRCS"
EVENT_MODULES="$EVENT_MODULES"

PIPE="-pipe"


CC_TEST_FLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"

# Linux kernel version

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


# enable the rt signals on Linux 2.2.19 and onward

if [ $version -ge 131609 -o $EVENT_RTSIG = YES ]; then
    echo " + using rt signals"
    have=HAVE_RTSIG . auto/have
    EVENT_MODULES="$EVENT_MODULES $RTSIG_MODULE"
    CORE_SRCS="$CORE_SRCS $RTSIG_SRCS"
    EVENT_FOUND=YES
fi


# epoll, EPOLLET version

ngx_func="epoll";
ngx_func_inc="#include <sys/epoll.h>"
ngx_func_test="int efd = 0, fd = 1, n;
               struct epoll_event ee;
               ee.events = EPOLLIN|EPOLLOUT|EPOLLET;
               ee.data.ptr = NULL;
               n = epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ee)"
. auto/func

if [ $ngx_found = yes ]; then
    have=HAVE_EPOLL . auto/have
    have=HAVE_CLEAR_EVENT . auto/have
    CORE_SRCS="$CORE_SRCS $EPOLL_SRCS"
    EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE"
    EVENT_FOUND=YES
fi


# sendfile()

CC_TEST_FLAGS="-D_GNU_SOURCE"
ngx_func="sendfile()";
ngx_func_inc="#include <sys/sendfile.h>"
ngx_func_test="int s = 0, fd = 1;
               ssize_t n; off_t off = 0;
               n = sendfile(s, fd, &off, 1)"
. auto/func

if [ $ngx_found = yes ]; then
    CORE_SRCS="$CORE_SRCS $LINUX_SENDFILE_SRCS"
fi


# sendfile64()

CC_TEST_FLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
ngx_func="sendfile64()"; . auto/func


# prctl(PR_SET_DUMPABLE)

ngx_func="prctl()";
ngx_func_inc="#include <sys/prctl.h>"
ngx_func_test="prctl(PR_SET_DUMPABLE, 1, 0, 0, 0)"
. auto/func

if [ $ngx_found = yes ]; then
    have=HAVE_PR_SET_DUMPABLE . auto/have
fi
