
# Copyright (C) Igor Sysoev


LINK="\$(CC)"

ngx_include_opt="-I "
ngx_compile_opt="-c"
ngx_objout="-o "
ngx_binout="-o "
ngx_objext="o"
ngx_binext=

ngx_regex_dirsep="\/"
ngx_dirsep='/'

ngx_regex_cont=' \\\
	'
ngx_cont=' \
	'
ngx_tab=' \
		'
ngx_spacer=

. auto/cc/name

if test -n "$CFLAGS"; then

    CC_TEST_FLAGS="$CFLAGS $NGX_CC_OPT"

    case $NGX_CC_NAME in

        ccc)
            # Compaq C V6.5-207

            ngx_include_opt="-I"
        ;;

    esac

else

    case $NGX_CC_NAME in
        gcc)
            # gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2
            #     3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4.0, 3.4.2
            #     4.0.0, 4.0.1, 4.1.0

            . auto/cc/gcc
        ;;

        icc)
            # Intel C++ compiler 7.1, 8.0, 8.1

            . auto/cc/icc
        ;;

        sunc)
            # Sun C 5.7 Patch 117837-04 2005/05/11

            . auto/cc/sunc
        ;;

        ccc)
            # Compaq C V6.5-207

            . auto/cc/ccc
        ;;

        acc)
            # aCC: HP ANSI C++ B3910B A.03.55.02

            . auto/cc/acc
        ;;

        msvc*)
            # MSVC++ 6.0 SP2, MSVC++ Toolkit 2003

            . auto/cc/msvc
        ;;

        owc)
            # Open Watcom C 1.0, 1.2

            . auto/cc/owc
        ;;

        bcc)
            # Borland C++ 5.5

            . auto/cc/bcc
        ;;

    esac

    CC_TEST_FLAGS="$CC_TEST_FLAGS $NGX_CC_OPT"

fi

CFLAGS="$CFLAGS $NGX_CC_OPT"


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

    if test -n "$NGX_LD_OPT"; then
        ngx_feature=--with-ld-opt=\"$NGX_LD_OPT\"
        ngx_feature_name=
        ngx_feature_run=no
        ngx_feature_incs=
        ngx_feature_libs=
        ngx_feature_test=
        . auto/feature

        if [ $ngx_found = no ]; then
            echo $0: error: the invalid value in --with-ld-opt=\"$NGX_LD_OPT\"
            echo
            exit 1
        fi
    fi

    ngx_feature="gcc variadic macros"
    ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS"
    ngx_feature_run=yes
    ngx_feature_incs="#include <stdio.h>
#define var(dummy, args...)  sprintf(args)"
    ngx_feature_libs=
    ngx_feature_test="char  buf[30]; buf[0] = '0';
                      var(0, buf, \"%d\", 1);
                      if (buf[0] != '1') return 1"
    . auto/feature


    if [ "$NGX_CC_NAME" = "ccc" ]; then
        echo "checking for C99 variadic macros ... disabled"
    else
        ngx_feature="C99 variadic macros"
        ngx_feature_name="NGX_HAVE_C99_VARIADIC_MACROS"
        ngx_feature_run=yes
        ngx_feature_incs="#include <stdio.h>
#define var(dummy, ...)  sprintf(__VA_ARGS__)"
        ngx_feature_libs=
        ngx_feature_test="char  buf[30]; buf[0] = '0';
                          var(0, buf, \"%d\", 1);
                          if (buf[0] != '1') return 1"
        . auto/feature
     fi


#    ngx_feature="inline"
#    ngx_feature_name=
#    ngx_feature_run=no
#    ngx_feature_incs="int inline f(void) { return 1 }"
#    ngx_feature_libs=
#    ngx_feature_test=
#    . auto/feature
#
#    if [ $ngx_found = yes ]; then
#    fi

fi
