
# Copyright (C) Igor Sysoev


echo $ngx_n "checking for $ngx_type printf() format ...$ngx_c"

cat << END >> $NGX_AUTOCONF_ERR

----------------------------------------
checking for $ngx_type printf() format

END


ngx_format=no
ngx_comma=


for ngx_fmt in $ngx_formats
do

    cat << END > $NGX_AUTOTEST.c

#include <sys/types.h>
#include <sys/time.h>
#include <stdio.h>
#include <sys/resource.h>
$NGX_INCLUDE_INTTYPES_H
$NGX_INCLUDE_AUTO_CONFIG_H

int main() {
    printf("$ngx_fmt", ($ngx_type) $ngx_max_value);
    return 0;
}

END

    ngx_test="$CC $CC_TEST_FLAGS $CC_WARN $CC_AUX_FLAGS \
              -o $NGX_AUTOTEST $NGX_AUTOTEST.c"
    eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"

    ngx_max_val=`echo $ngx_max_value | sed -e "s/L*\$//"`

    if [ -x $NGX_AUTOTEST ]; then

        if [ "`$NGX_AUTOTEST`" = $ngx_max_val ]; then

            if [ $ngx_fmt_collect = yes ]; then
                echo $ngx_n "$ngx_comma \"${ngx_fmt}\" is appropriate$ngx_c"
            else
                echo $ngx_n "$ngx_comma \"${ngx_fmt}\" used$ngx_c"
            fi

            ngx_format=$ngx_fmt
        fi
    fi

    rm -f $NGX_AUTOTEST

    if [ $ngx_format != no ]; then
        if [ $ngx_fmt_collect = yes ]; then
            eval "ngx_${ngx_size}_fmt=\"\${ngx_${ngx_size}_fmt} \$ngx_format\""
            ngx_comma=","
            continue
        else
            break
        fi
    fi

    echo $ngx_n "$ngx_comma \"${ngx_fmt}\" is not appropriate$ngx_c"
    ngx_comma=","

    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
done

echo

if [ $ngx_format = no ]; then
    echo "$0: error: printf() $ngx_type format not found"

    exit 1
fi


if [ $ngx_fmt_collect = no ]; then
    cat << END >> $NGX_AUTO_CONFIG_H

#ifndef $ngx_fmt_name
#define $ngx_fmt_name  "$ngx_format"
#endif

END

fi
