
# Copyright (C) Igor Sysoev


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 $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 [ $PLATFORM != win32 ]; then
        MD5=NO

        # Solaris 8/9

        ngx_feature="rsaref md5 library"
        ngx_feature_name="rsaref_md5"
        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="rsaref_md5"
            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="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=HAVE_OPENSSL_MD5_H . auto/have
            CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
            MD5=YES
            MD5_LIB=crypto
        fi
    fi

fi
