
if [ $MD5 != NONE ]; then

    if grep MD5_Init $MD5/md5.h >/dev/null; then
        # OpenSSL md5
        OPENSSL_MD5=YES
        have=HAVE_OPENSSL_MD5 . auto/have
    else
        # rsaref md5
        OPENSSL_MD5=NO
    fi

    CORE_INCS="$CORE_INCS -I $MD5"

    case $CC in

        cl)
            LINK_DEPS="$LINK_DEPS $MD5/md5.lib"
            CORE_LIBS="$CORE_LIBS md5.lib"
            CORE_LINK="$CORE_LINK -libpath:$MD5"
        ;;

        wcl386)
            LINK_DEPS="$LINK_DEPS $MD5/md5.lib"
            CORE_LIBS="$CORE_LIBS $MD5/md5.lib"
        ;;

        *)
            LINK_DEPS="$LINK_DEPS $MD5/libmd5.a"
            CORE_LIBS="$CORE_LIBS -L $MD5 -lmd5"
        ;;

    esac

else

ngx_lib_inc="#include <sys/types.h>
#include <md5.h>"

    MD5=NO

    # Solaris 8/9

    ngx_lib="rsaref md5"
    ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
    ngx_libs=-lmd5
    . auto/lib/test


    if [ $ngx_found = yes ]; then
        CORE_LIBS="$CORE_LIBS $ngx_libs"
        MD5=YES
        MD5_LIB=md5
        ngx_found=no

    else
        # FreeBSD

        ngx_lib="rsaref md"
        ngx_lib_test="MD5_CTX md5; MD5Init(&md5)"
        ngx_libs=-lmd
        . auto/lib/test
    fi


    if [ $ngx_found = yes ]; then
        CORE_LIBS="$CORE_LIBS $ngx_libs"
        MD5=YES
        MD5_LIB=md
        ngx_found=no

    else
        # OpenSSL crypto library

        ngx_inc="#include <openssl/md5.h>"
        ngx_lib="OpenSSL md5 crypto"
        ngx_lib_test="MD5_CTX md5; MD5_Init(&md5)"
        ngx_libs=-lcrypto
        . auto/lib/test
    fi


    if [ $ngx_found = yes ]; then
        have=HAVE_OPENSSL_MD5 . auto/have
        have=HAVE_OPENSSL_MD5_H . auto/have
        CORE_LIBS="$CORE_LIBS $ngx_libs"
        MD5=YES
        MD5_LIB=crypto
    fi
fi
