
# Copyright (C) Igor Sysoev


help=no

PREFIX=
SBIN_PATH=
CONF_PATH=
ERROR_LOG_PATH=
PID_PATH=
NGX_USER=
NGX_GROUP=
HTTP_LOG_PATH=

CC=${CC:-gcc}
CPP=
NGX_OBJS=objs

DEBUG=NO
NGX_CC_OPT=
NGX_LD_OPT=
CPU=NO

TEST_BUILD_DEVPOLL=NO
TEST_BUILD_EPOLL=NO
TEST_BUILD_RTSIG=NO

EVENT_FOUND=NO

EVENT_RTSIG=NO
EVENT_SELECT=NO
EVENT_POLL=NO
EVENT_AIO=NO

USE_THREADS=NO

HTTP=YES
HTTP_CHARSET=YES
HTTP_GZIP=YES
HTTP_SSL=NO
HTTP_SSI=NO
HTTP_ACCESS=YES
HTTP_USERID=YES
HTTP_AUTOINDEX=YES
HTTP_STATUS=NO
HTTP_REWRITE=YES
HTTP_PROXY=YES

IMAP=NO

USE_PCRE=NO
PCRE=NONE
PCRE_OPT=

USE_OPENSSL=NO
OPENSSL=NONE

USE_MD5=NO
MD5=NONE
MD5_OPT=
MD5_ASM=NO

USE_ZLIB=NO
ZLIB=NONE
ZLIB_OPT=
ZLIB_ASM=NO


for option
do
    case "$option" in
        -*=*) value=`echo "$option" | sed -e 's/[-_a-zA-Z0-9]*=//'` ;;
           *) value="" ;;
    esac

    case "$option" in
        --help)                          help=yes                   ;;

        --prefix=*)                      PREFIX="$value"            ;;
        --sbin-path=*)                   SBIN_PATH="$value"         ;;
        --conf-path=*)                   CONF_PATH="$value"         ;;
        --error-log-path=*)              ERROR_LOG_PATH="$value"    ;;
        --pid-path=*)                    PID_PATH="$value"          ;;
        --user=*)                        NGX_USER="$value"          ;;
        --group=*)                       NGX_GROUP="$value"         ;;

        --crossbuild=*)                  PLATFORM="$value"          ;;

        --builddir=*)                    NGX_OBJS="$value"          ;;

        --with-rtsig_module)             EVENT_RTSIG=YES            ;;
        --with-select_module)            EVENT_SELECT=YES           ;;
        --without-select_module)         EVENT_SELECT=NONE          ;;
        --with-poll_module)              EVENT_POLL=YES             ;;
        --without-poll_module)           EVENT_POLL=NONE            ;;
        --with-aio_module)               EVENT_AIO=YES              ;;

        --with-threads=*)                USE_THREADS="$value"       ;;
        --with-threads)                  USE_THREADS="pthreads"     ;;

        --without-http)                  HTTP=NO                    ;;
        --http-log-path=*)               HTTP_LOG_PATH="$value"     ;;

        --with-http_ssl_module)          HTTP_SSL=YES               ;;
        --without-http_charset_module)   HTTP_CHARSET=NO            ;;
        --without-http_gzip_module)      HTTP_GZIP=NO               ;;
        --without-http_ssi_module)       HTTP_SSI=NO                ;;
        --without-http_userid_module)    HTTP_USERID=NO             ;;
        --without-http_access_module)    HTTP_ACCESS=NO             ;;
        --without-http_autoindex_module) HTTP_AUTOINDEX=NO          ;;
        --without-http_status_module)    HTTP_STATUS=NO             ;;
        --without-http_rewrite_module)   HTTP_REWRITE=NO            ;;
        --without-http_proxy_module)     HTTP_PROXY=NO              ;;

        --with-imap)                     IMAP=YES                   ;;

        --with-cc=*)                     CC="$value"                ;;
        --with-cpp=*)                    CPP="$value"               ;;
        --with-cc-opt=*)                 NGX_CC_OPT="$value"        ;;
        --with-ld-opt=*)                 NGX_LD_OPT="$value"        ;;
        --with-cpu-opt=*)                CPU="$value"               ;;
        --with-debug)                    DEBUG=YES                  ;;

        --without-pcre)                  USE_PCRE=DISABLED          ;;
        --with-pcre=*)                   PCRE="$value"              ;;
        --with-pcre-opt=*)               PCRE_OPT="$value"          ;;

        --with-openssl=*)                OPENSSL="$value"           ;;

        --with-md5=*)                    MD5="$value"               ;;
        --with-md5-opt=*)                MD5_OPT="$value"           ;;
        --with-md5-asm)                  MD5_ASM=YES                ;;

        --with-zlib=*)                   ZLIB="$value"              ;;
        --with-zlib-opt=*)               ZLIB_OPT="$value"          ;;
        --with-zlib-asm=*)               ZLIB_ASM="$value"          ;;

        --test-build-devpoll)            TEST_BUILD_DEVPOLL=YES     ;;
        --test-build-epoll)              TEST_BUILD_EPOLL=YES       ;;
        --test-build-rtsig)              TEST_BUILD_RTSIG=YES       ;;

        *)
            echo "$0: error: invalid option \"$option\""
            exit 1
        ;;
    esac
done


if [ $help = yes ]; then

cat << END

  --help                           this message

  --user=USER                      set non-privilege user
                                   for the worker processes
  --group=GROUP                    set non-privilege group
                                   for the worker processes

  --with-select_module             enable select module
  --without-select_module          disable select module
  --with-poll_module               enable poll module
  --without-poll_module            disable poll module

  --without-http_charset_module    disable ngx_http_charset_module
  --without-http_rewrite_module    disable ngx_http_rewrite_module
  --without-http_gzip_module       disable ngx_http_gzip_module
  --without-http_proxy_module      disable ngx_http_proxy_module

  --with-cc-opt=OPTIONS            additional options for compiler
  --with-ld-opt=OPTIONS            additional options for linker

  --with-pcre=DIR                  path to PCRE library
  --with-md5=DIR                   path to md5 library
  --with-zlib=DIR                  path to zlib library
  --with-openssl=DIR               path to OpenSSL library

END

    exit 1
fi


if [ $HTTP = NO ]; then
    HTTP_CHARSET=NO
    HTTP_GZIP=NO
    HTTP_SSI=NO
    HTTP_USERID=NO
    HTTP_ACCESS=NO
    HTTP_STATUS=NO
    HTTP_REWRITE=NO
    HTTP_PROXY=NO
fi


if [ ".$PLATFORM" = ".win32" -a $EVENT_POLL = YES ]; then
    EVENT_POLL=NO
    echo "$0: warning: --with-poll_module option is ignored for win32"
fi


if test -z "$PREFIX"; then
    PREFIX=/usr/local/nginx
fi


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


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


case ".$SBIN_PATH" in
    ./*)
    ;;

    .)
        SBIN_PATH=$PREFIX/sbin/nginx
    ;;

    *)
        SBIN_PATH=$PREFIX/$SBIN_PATH
    ;;
esac


case ".$CONF_PATH" in
    ./*)
    ;;

    .)
        CONF_PATH=$PREFIX/conf/nginx.conf
    ;;

    *)
        CONF_PATH=$PREFIX/$CONF_PATH
    ;;
esac


case ".$PID_PATH" in
    ./*)
    ;;

    .)
        PID_PATH=$PREFIX/logs/nginx.pid
    ;;

    *)
        PID_PATH=$PREFIX/$PID_PATH
    ;;
esac


case ".$ERROR_LOG_PATH" in
    ./*)
    ;;

    .)
        ERROR_LOG_PATH=$PREFIX/logs/error.log
    ;;

    .stderr)
        ERROR_LOG_PATH=
    ;;

    *)
        ERROR_LOG_PATH=$PREFIX/$ERROR_LOG_PATH
    ;;
esac


case ".$HTTP_LOG_PATH" in
    ./*)
    ;;

    .)
        HTTP_LOG_PATH=$PREFIX/logs/access.log
    ;;

    *)
        HTTP_LOG_PATH=$PREFIX/$HTTP_LOG_PATH
    ;;
esac
