
# 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 "$CC" in

        cl | wcl386 | bcc32)
            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
        ngx_lib_cflags=

        # Solaris 8/9

        ngx_lib_inc="#include <sys/types.h>
#include <md5.h>"
        ngx_lib="rsaref md5 library"
        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 library"
            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
            if [ $MD5 = NO ]; then

               # OpenSSL crypto library

               ngx_lib_inc="#include <openssl/md5.h>"
               ngx_lib="OpenSSL md5 crypto library"
               ngx_lib_test="MD5_CTX md5; MD5_Init(&md5)"
               ngx_libs=-lcrypto
               . auto/lib/test
            fi
        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

fi
