
# Copyright (C) Igor Sysoev


echo $ngx_n "checking for $ngx_feature ...$ngx_c"

cat << END >> $NGX_AUTOCONF_ERR

----------------------------------------
checking for $ngx_feature

END

ngx_found=no

if test -n "$ngx_feature_name"; then
    ngx_have_feature=`echo NGX_$ngx_feature_name | tr '[a-z]' '[A-Z]'`
    # STUB
    ngx_have_feature0=`echo HAVE_$ngx_feature_name | tr '[a-z]' '[A-Z]'`
fi

cat << END > $NGX_AUTOTEST.c

#include <sys/types.h>
$NGX_INCLUDE_UNISTD_H
$ngx_feature_incs

int main() {
    $ngx_feature_test;
    return 0;
}

END


ngx_test="$CC $CC_TEST_FLAGS $CC_WARN $CC_AUX_FLAGS \
          -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"

eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"


if [ -x $NGX_AUTOTEST ]; then

    if [ $ngx_feature_run = yes ]; then

       if $NGX_AUTOTEST 2>&1 > /dev/null; then
           echo " found"
           ngx_found=yes

           if test -n "$ngx_feature_name"; then
               have=$ngx_have_feature . auto/have
           fi

           #STUB
           if test -n "$ngx_feature_name"; then
               have=$ngx_have_feature0 . auto/have
           fi

       else
           echo " found but is not working"
       fi

    else
       echo " found"
       ngx_found=yes

       if test -n "$ngx_feature_name"; then
           have=$ngx_have_feature . auto/have
       fi

       #STUB
       if test -n "$ngx_feature_name"; then
           have=$ngx_have_feature0 . auto/have
       fi

    fi

else
    echo " not found"

    echo "----------"    >> $NGX_AUTOCONF_ERR
    cat $NGX_AUTOTEST.c  >> $NGX_AUTOCONF_ERR
    echo "----------"    >> $NGX_AUTOCONF_ERR
    echo $ngx_test       >> $NGX_AUTOCONF_ERR
    echo "----------"    >> $NGX_AUTOCONF_ERR
fi

rm $NGX_AUTOTEST*
