
# Copyright (C) Igor Sysoev


if [ "$NGX_PLATFORM" != win32 ]; then

    ngx_feature="C compiler"
    ngx_feature_name=
    ngx_feature_run=yes
    ngx_feature_incs=
    ngx_feature_path=
    ngx_feature_libs=
    ngx_feature_test=
    . auto/feature

    if [ $ngx_found = no ]; then
        echo
        echo $0: error: C compiler $CC is not found
        echo
        exit 1
    fi

fi


if [ "$CC" = cl ]; then
    if `$NGX_WINE $CC -v 2>&1 \
        | grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16' \
        >/dev/null 2>&1`; then

        NGX_CC_NAME=msvc10
        echo " + using Microsoft Visual C++ 10 compiler"

    else if `$NGX_WINE $CC -v 2>&1 \
        | grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14' \
        >/dev/null 2>&1`; then

        NGX_CC_NAME=msvc8
        echo " + using Microsoft Visual C++ 8 compiler"

    else if `$NGX_WINE $CC -v 2>&1 \
        | grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13' \
        >/dev/null 2>&1`; then

        NGX_CC_NAME=msvc7
        echo " + using Microsoft Visual C++ 7 compiler"

    else
        NGX_CC_NAME=msvc
        echo " + using Microsoft Visual C++ compiler"
    fi
    fi
    fi

else
if [ "$CC" = wcl386 ]; then
    NGX_CC_NAME=owc
    echo " + using Open Watcom C compiler"

else
if [ "$CC" = bcc32 ]; then
    NGX_CC_NAME=bcc
    echo " + using Borland C++ compiler"

else
if `$CC -v 2>&1 | grep 'gcc version' >/dev/null 2>&1`; then
    NGX_CC_NAME=gcc
    echo " + using GNU C compiler"

else
if `$CC -V 2>&1 | grep '^Intel(R) C' >/dev/null 2>&1`; then
    NGX_CC_NAME=icc
    echo " + using Intel C++ compiler"

else
if `$CC -V 2>&1 | grep 'Sun C' >/dev/null 2>&1`; then
    NGX_CC_NAME=sunc
    echo " + using Sun C compiler"

else
if `$CC -V 2>&1 | grep '^Compaq C' >/dev/null 2>&1`; then
    NGX_CC_NAME=ccc
    echo " + using Compaq C compiler"

else
if `$CC -V 2>&1 | grep '^aCC: ' >/dev/null 2>&1`; then
    NGX_CC_NAME=acc
    echo " + using HP aC++ compiler"

else
    NGX_CC_NAME=unknown

fi # acc
fi # ccc
fi # sunc
fi # icc
fi # gcc
fi # bcc
fi # owc
fi # msvc
