
# Copyright (C) Igor Sysoev


if [ $EVENT_SELECT = NO -a $EVENT_FOUND = NO ]; then
    EVENT_SELECT=YES
fi

if [ $EVENT_SELECT = YES ]; then
    have=HAVE_SELECT . auto/have
    CORE_SRCS="$CORE_SRCS $SELECT_SRCS"
    EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE"
fi


if [ $EVENT_POLL = NO -a $EVENT_FOUND = NO ]; then
    EVENT_POLL=YES
fi

if [ $EVENT_POLL = YES ]; then
    have=HAVE_POLL . auto/have
    CORE_SRCS="$CORE_SRCS $POLL_SRCS"
    EVENT_MODULES="$EVENT_MODULES $POLL_MODULE"
fi


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

if [ $TEST_BUILD_EPOLL = YES ]; then
    have=HAVE_EPOLL . auto/have
    have=TEST_BUILD_EPOLL . auto/have
    EVENT_MODULES="$EVENT_MODULES $EPOLL_MODULE"
    CORE_SRCS="$CORE_SRCS $EPOLL_SRCS"
fi

if [ $TEST_BUILD_RTSIG = YES ]; then
    have=HAVE_RTSIG . auto/have
    have=TEST_BUILD_RTSIG . auto/have
    EVENT_MODULES="$EVENT_MODULES $RTSIG_MODULE"
    CORE_SRCS="$CORE_SRCS $RTSIG_SRCS"
fi


# the filter order is important
#     ngx_http_write_filter
#     ngx_http_header_filter
#     ngx_http_chunked_filter
#     ngx_http_range_header_filter
#     ngx_http_ssl_filter
#     ngx_http_gzip_filter
#     ngx_http_charset_filter
#     ngx_http_ssi_filter
#     ngx_http_headers_filter
#     ngx_http_copy_filter
#     ngx_http_range_body_filter
#     ngx_http_not_modified_filter

HTTP_FILTER_MODULES="$HTTP_WRITE_FILTER_MODULE \
                     $HTTP_HEADER_FILTER_MODULE \
                     $HTTP_CHUNKED_FILTER_MODULE \
                     $HTTP_RANGE_HEADER_FILTER_MODULE"

if [ $HTTP_GZIP = YES ]; then
    have=NGX_HTTP_GZIP . auto/have
    USE_ZLIB=YES
    HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_GZIP_FILTER_MODULE"
    HTTP_SRCS="$HTTP_SRCS $HTTP_GZIP_SRCS"
fi

if [ $HTTP_CHARSET = YES ]; then
    have=NGX_HTTP_CHARSET . auto/have
    HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_CHARSET_FILTER_MODULE"
    HTTP_SRCS="$HTTP_SRCS $HTTP_CHARSET_SRCS"
fi

if [ $HTTP_SSI = YES ]; then
    have=NGX_HTTP_SSI . auto/have
    HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_SSI_FILTER_MODULE"
    HTTP_SRCS="$HTTP_SRCS $HTTP_SSI_SRCS"
fi

if [ $HTTP_USERID = YES ]; then
    HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_USERID_FILTER_MODULE"
    HTTP_SRCS="$HTTP_SRCS $HTTP_USERID_SRCS"
fi

HTTP_MODULES="$HTTP_MODULES $HTTP_STATIC_MODULE"

if [ $HTTP_AUTOINDEX = YES ]; then
    have=NGX_HTTP_AUTOINDEX . auto/have
    HTTP_MODULES="$HTTP_MODULES $HTTP_AUTOINDEX_MODULE"
    HTTP_SRCS="$HTTP_SRCS $HTTP_AUTOINDEX_SRCS"
fi

HTTP_MODULES="$HTTP_MODULES $HTTP_INDEX_MODULE"

if [ $HTTP_ACCESS = YES ]; then
    have=NGX_HTTP_ACCESS . auto/have
    HTTP_MODULES="$HTTP_MODULES $HTTP_ACCESS_MODULE"
    HTTP_SRCS="$HTTP_SRCS $HTTP_ACCESS_SRCS"
fi

if [ $HTTP_STATUS = YES ]; then
    have=NGX_HTTP_STATUS . auto/have
    HTTP_MODULES="$HTTP_MODULES $HTTP_STATUS_MODULE"
    HTTP_SRCS="$HTTP_SRCS $HTTP_STATUS_SRCS"
fi

if [ $HTTP_REWRITE = YES -a $USE_PCRE != DISABLED ]; then
    have=NGX_HTTP_REWRITE . auto/have
    USE_PCRE=YES
    HTTP_MODULES="$HTTP_MODULES $HTTP_REWRITE_MODULE"
    HTTP_SRCS="$HTTP_SRCS $HTTP_REWRITE_SRCS"
fi

if [ $HTTP_SSL = YES ]; then
    USE_OPENSSL=YES
    have=NGX_HTTP_SSL . auto/have
    HTTP_MODULES="$HTTP_MODULES $HTTP_SSL_MODULE"
    HTTP_DEPS="$HTTP_DEPS $HTTP_SSL_DEPS"
    HTTP_SRCS="$HTTP_SRCS $HTTP_SSL_SRCS"
fi

if [ $HTTP_PROXY = YES ]; then
    have=NGX_HTTP_PROXY . auto/have
    #USE_MD5=YES
    HTTP_MODULES="$HTTP_MODULES $HTTP_PROXY_MODULE"
    HTTP_INCS="$HTTP_INCS $HTTP_PROXY_INCS"
    HTTP_DEPS="$HTTP_DEPS $HTTP_PROXY_DEPS"
    HTTP_SRCS="$HTTP_SRCS $HTTP_PROXY_SRCS"
fi

if [ -r $OBJS/auto ]; then
    . $OBJS/auto
fi

modules="$CORE_MODULES $EVENT_MODULES"

if [ $HTTP = YES ]; then
    modules="$modules $HTTP_MODULES $HTTP_FILTER_MODULES \
             $HTTP_HEADERS_FILTER_MODULE \
             $HTTP_COPY_FILTER_MODULE \
             $HTTP_RANGE_BODY_FILTER_MODULE \
             $HTTP_NOT_MODIFIED_FILTER_MODULE"
fi

IMAP_MODULES=$IMAP_MODULE

if [ $IMAP = YES ]; then
    modules="$modules $IMAP_MODULES"
fi


cat << END                                    > $NGX_MODULES_C

#include <ngx_config.h>
#include <ngx_core.h>

$NGX_PRAGMA

END

for mod in $modules
do
    echo "extern ngx_module_t  $mod;"         >> $NGX_MODULES_C
done

echo                                          >> $NGX_MODULES_C
echo 'ngx_module_t *ngx_modules[] = {'        >> $NGX_MODULES_C

for mod in $modules
do
    echo "    &$mod,"                         >> $NGX_MODULES_C
done

cat << END                                    >> $NGX_MODULES_C
    NULL
};

END
