
# 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 $MD5 in
    YES)   echo "  + md5: using system $MD5_LIB library" ;;
    NONE)  echo "  + md5 library is not used" ;;
    NO)    echo "  + md5 library is not found" ;;
    *)     echo "  + using md5 library: $MD5" ;;
esac

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 $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


echo "  nginx path prefix: $PREFIX"
echo "  nginx binary file: $SBIN_PATH"
echo "  nginx configuration file: $CONF_PATH"
echo "  nginx pid file: $PID_PATH"
if [ ".$ERROR_LOG_PATH" != "." ]; then
    echo "  nginx error log file: $ERROR_LOG_PATH"
else
    echo "  nginx logs errors to stderr"
fi
echo "  nginx http access log file: $HTTP_LOG_PATH"
echo
