
# Copyright (C) Igor Sysoev


if [ $MD5 != NONE ]; then

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

    CORE_INCS="$CORE_INCS $MD5"

    case "$NGX_CC_NAME" in

        msvc* | owc* | bcc)
            LINK_DEPS="$LINK_DEPS $MD5/md5.lib"
            CORE_LIBS="$CORE_LIBS $MD5/md5.lib"
        ;;

        icc*)
            LINK_DEPS="$LINK_DEPS $MD5/libmd5.a"

            # to allow -ipo optimization we link with the *.o but not library
            CORE_LIBS="$CORE_LIBS $MD5/md5_dgst.o"

            if [ $MD5_ASM = YES ]; then
                CORE_LIBS="$CORE_LIBS $MD5/asm/mx86-elf.o"
            fi
        ;;

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

    esac

else

    if [ $NGX_PLATFORM != win32 ]; then
        MD5=NO

        # Solaris 8/9

        ngx_feature="rsaref md5 library"
        ngx_feature_name=
        ngx_feature_run=no
        ngx_feature_incs="#include <md5.h>"
        ngx_feature_libs="-lmd5"
        ngx_feature_test="MD5_CTX md5; MD5Init(&md5)"
        . auto/feature

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

        else
            # FreeBSD

            ngx_feature="rsaref md library"
            ngx_feature_name=
            ngx_feature_run=no
            ngx_feature_incs="#include <md5.h>"
            ngx_feature_libs="-lmd"
            ngx_feature_test="MD5_CTX md5; MD5Init(&md5)"
            . auto/feature
        fi


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

        else
            if [ $MD5 = NO ]; then

               # OpenSSL crypto library

               ngx_feature="OpenSSL md5 crypto library"
               ngx_feature_name="NGX_OPENSSL_MD5"
               ngx_feature_run=no
               ngx_feature_incs="#include <openssl/md5.h>"
               ngx_feature_libs="-lcrypto"
               ngx_feature_test="MD5_CTX md5; MD5_Init(&md5)"
               . auto/feature
            fi
        fi


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

fi
