
# Copyright (C) Igor Sysoev


echo
echo "Configuration summary"


case $USE_THREADS in
    rfork)         echo "  + using rfork()ed threads" ;;
    pthreads)      echo "  + using libpthread threads library" ;;
    libthr)        echo "  + using FreeBSD libthr threads library" ;;
    libc_r)        echo "  + using FreeBSD libc_r threads library" ;;
    linuxthreads)  echo "  + using FreeBSD LinuxThreads port library" ;;
    NO)            echo "  + threads are not used" ;;
    *)             echo "  + using lib$USE_THREADS threads library" ;;
esac

if [ $USE_PCRE = DISABLED ]; then
    echo " + PCRE library is disabled"

else
    case $PCRE in
        YES)   echo "  + using system PCRE library" ;;
        NONE)  echo "  + PCRE library is not used" ;;
        NO)    echo "  + PCRE library is not found" ;;
        *)     echo "  + using PCRE library: $PCRE" ;;
    esac
fi

case $OPENSSL in
    YES)   echo "  + using system OpenSSL library" ;;
    NONE)  echo "  + OpenSSL library is not used" ;;
    NO)    echo "  + OpenSSL library is not found" ;;
    *)     echo "  + using OpenSSL library: $OPENSSL" ;;
esac

case $MD5 in
    YES)
        case $OPENSSL in
            NONE|NO)  echo "  + md5: using system $MD5_LIB library" ;;
            *)        echo "  + md5: using OpenSSL library" ;;
        esac
        ;;

    NONE)  echo "  + md5 library is not used" ;;
    NO)    echo "  + md5 library is not found" ;;
    *)     echo "  + using md5 library: $MD5" ;;
esac

case $ZLIB in
    YES)   echo "  + using system zlib library" ;;
    NONE)  echo "  + zlib library is not used" ;;
    NO)    echo "  + zlib library is not found" ;;
    *)     echo "  + using zlib library: $ZLIB" ;;
esac

echo


if [ $HTTP_REWRITE = YES ]; then
    if [ $USE_PCRE = DISABLED ]; then

cat << END
$0: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option or you have to enable the PCRE support.

END
        exit 1
    fi

    if [ $PCRE = NONE -o $PCRE = NO ]; then

cat << END
$0: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.

END

        exit 1
    fi
fi


if [ $HTTP_GZIP = YES ]; then
    if [ $ZLIB = NONE -o $ZLIB = NO ]; then

cat << END
$0: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.

END

        exit 1
    fi
fi


if [ $HTTP_SSL = YES ]; then
    if [ $OPENSSL = NONE -o $OPENSSL = NO ]; then

cat << END
$0: error: the HTTP SSL module requires the OpenSSL library.
You can either do not enable the module, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.

END

        exit 1
    fi
fi


cat << END
  nginx path prefix: $NGX_PREFIX
  nginx binary file: $NGX_SBIN_PATH
  nginx configuration file: $NGX_CONF_PATH
  nginx pid file: $NGX_PID_PATH
END

if test -n "$NGX_ERROR_LOG_PATH"; then
    echo "  nginx error log file: $NGX_ERROR_LOG_PATH"
else
    echo "  nginx logs errors to stderr"
fi

cat << END
  nginx http access log file: $NGX_HTTP_LOG_PATH
  nginx http client request body temporary files: $NGX_HTTP_CLIENT_TEMP_PATH
  nginx http proxy temporary files: $NGX_HTTP_PROXY_TEMP_PATH
  nginx http fastcgi temporary files: $NGX_HTTP_FASTCGI_TEMP_PATH

END
