
case $CC in

    *gcc)
         # gcc 2.95.4, 3.3.2

         # optimization
         #CFLAGS="$CFLAGS -O2 -fomit-frame-pointer"

         case $CPU in
             pentiumpro)
                 # optimize for Pentium Pro, Pentium II and Pentium III
                 CPU_OPT="-march=pentiumpro"
             ;;
             pentium4)
                 # optimize for Pentium 4, gcc 3.x
                 CPU_OPT="-march=pentium4"
             ;;
         esac

         CFLAGS="$CFLAGS $PIPE"
         CFLAGS="$CFLAGS $CPU_OPT"

         if [ ".$PCRE_OPT" = "." ]; then
             PCRE_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
         else
             PCRE_OPT="$PCRE_OPT $PIPE"
         fi

         if [ ".$MD5_OPT" = "." ]; then
             MD5_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
         else
             MD5_OPT="$MD5_OPT $PIPE"
         fi

         if [ ".$ZLIB_OPT" = "." ]; then
             ZLIB_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT"
         else
             ZLIB_OPT="$ZLIB_OPT $PIPE"
         fi

         # warnings
         CFLAGS="$CFLAGS -O -W"
         CFLAGS="$CFLAGS -Wall -Wpointer-arith"
         #CFLAGS="$CFLAGS -Wconversion"
         #CFLAGS="$CFLAGS -Winline"

         # we have a lot of the unused function arguments
         CFLAGS="$CFLAGS -Wno-unused"

         # stop on warning
         CFLAGS="$CFLAGS -Werror"

         # ANSI C warnings
         #CFLAGS="$CFLAGS -pedantic"

         # debug
         CFLAGS="$CFLAGS -g"

         have=HAVE_GCC_VARIADIC_MACROS . auto/have

         if [ ".$CPP" = "." ]; then
             CPP="$CC -E"
         fi

         LINK="\$(CC)"

         OBJEXT=o
         COMPILEONLY="-c"
         OBJOUT="-o "
         BINOUT="-o "

         CC_STRONG="$CC -Wall -Werror"
    ;;


    *icc)
         # Intel C++ compiler 7.1

         # optimization
         CFLAGS="$CFLAGS -O"
         # inline functions declared with __inline
         CFLAGS="$CFLAGS -Ob1"
         # inline any function, at the compiler's discretion
         #CFLAGS="$CFLAGS -Ob2"

         case $CPU in
             pentiumpro)
                 # optimize for Pentium Pro, Pentium II and Pentium III
                 CPU_OPT="-mcpu=pentiumpro -march=pentiumpro"
             ;;
             pentium4)
                 # optimize for Pentium 4, default
                 CPU_OPT="-march=pentium4"
             ;;
         esac

         CFLAGS="$CFLAGS $CPU_OPT"

         if [ ".$PCRE_OPT" = "." ]; then
             PCRE_OPT="-O $CPU_OPT"
         fi

         if [ ".$MD5_OPT" = "." ]; then
             MD5_OPT="-O $CPU_OPT"
         fi

         if [ ".$ZLIB_OPT" = "." ]; then
             ZLIB_OPT="-O $CPU_OPT"
         fi

         # warnings
         CFLAGS="$CFLAGS -w1"

         # stop on warning
         CFLAGS="$CFLAGS -Werror"

         have=HAVE_C99_VARIADIC_MACROS . auto/have

         LINK="\$(CC)"

         OBJEXT=o
         COMPILEONLY="-c"
         OBJOUT="-o "
         BINOUT="-o "

         CC_STRONG="$CC -w1 -Werror"
    ;;


    cl)
         # MSVC 6.0 SP2

         # optimization

         # maximize speed
         CFLAGS="$CFLAGS -O2"
         # enable global optimization
         CFLAGS="$CFLAGS -Og"
         # enable intrinsic functions
         CFLAGS="$CFLAGS -Oi"
         # inline expansion
         CFLAGS="$CFLAGS -Ob1"
         # enable frame pointer omission
         CFLAGS="$CFLAGS -Oy"
         # disable stack checking calls
         CFLAGS="$CFLAGS -Gs"

         case $CPU in
             pentiumpro)
                 # optimize for Pentium Pro, Pentium II and Pentium III
                 CPU_OPT="-G6"
             ;;
             pentium4)
                 # optimize for Pentium 4
                 #CPU_OPT="-G7"
             ;;
         esac

         CFLAGS="$CFLAGS $CPU_OPT"

         # warnings
         CFLAGS="$CFLAGS -W3"
         #CFLAGS="$CFLAGS -W4"

         # stop on warning
         CFLAGS="$CFLAGS -WX"

         # link with libcmt.lib, multithreaded
         #LIBC="-MT"
         # link with msvcrt.dll
         LIBC="-MD"

         CFLAGS="$CFLAGS $LIBC"

         # disable logo
         CFLAGS="$CFLAGS -nologo"

         LINK="\$(CC)"

         # link flags
         CORE_LINK="$CORE_LINK -link -verbose:lib"

         # debug
         CFLAGS="$CFLAGS -Yd"
         CORE_LINK="$CORE_LINK -debug -debugtype:coff"

         # precompiled headers
         CORE_DEPS="$CORE_DEPS ngx_config.pch"
         PCH="ngx_config.pch"
         BUILDPCH="-Ycngx_config.h"
         USEPCH="-Yungx_config.h"

         OBJEXT=obj
         COMPILEONLY="-c"
         OBJOUT="-Fo"
         BINOUT="-Fe"
         BINEXT=.exe

         CC_STRONG="$CC -W3 -WX"
    ;;


    wcl386)
         # Open Watcom 1.0

         # optimization

         # maximize speed
         CFLAGS="$CFLAGS -ot"
         # reorder instructions for best pipeline usage
         CFLAGS="$CFLAGS -op"
         # inline intrinsic functions
         CFLAGS="$CFLAGS -oi"
         # inline expansion
         CFLAGS="$CFLAGS -oe"
         # disable stack checking calls
         CFLAGS="$CFLAGS -s"

         case $CPU in
             pentiumpro)
                 # optimize for Pentium Pro, Pentium II and Pentium III
                 # register-based arguments passing conventions
                 CPU_OPT="-6r"
                 # stack-based arguments passing conventions
                 #CPU_OPT="-6s"
             ;;
         esac

         CFLAGS="$CFLAGS $CPU_OPT"

         # warnings
         #CFLAGS="$CFLAGS -w3"
         CFLAGS="$CFLAGS -wx"

         # stop on warning
         CFLAGS="$CFLAGS -we"

         # built target is NT
         CFLAGS="$CFLAGS -bt=nt"

         # multithreaded
         CFLAGS="$CFLAGS -bm"

         # debug
         CFLAGS="$CFLAGS -d2"

         # quiet
         CFLAGS="$CFLAGS -zq"

         # precompiled headers
         CORE_DEPS="$CORE_DEPS $OBJS\\ngx_config.pch"
         PCH="$OBJS\\ngx_config.pch"
         BUILDPCH="-fhq=$OBJS\\ngx_config.pch"
         USEPCH="-fh=$OBJS\\ngx_config.pch"

         LINK="\$(CC)"

         # link flags
         CORE_LINK="$CORE_LINK -l=nt"

         OBJEXT=obj
         COMPILEONLY="-c"
         OBJOUT="-fo"
         BINOUT="-fe="
         BINEXT=.exe

         INC_EQ=YES
         MAKE_BS=YES
         MAKE_SL=YES
    ;;

esac
