
# 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=
ngx_fmt_x=

for ngx_fmt in $ngx_formats
do

    cat << END > $NGX_AUTOTEST.c

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
            ngx_format=$ngx_fmt
        fi
    fi

    rm $NGX_AUTOTEST

    if [ $ngx_format != no ]; then
        break
    fi

    ngx_fmt_x=`echo $ngx_fmt | sed -e "s/d/X/"`

    echo $ngx_n "$ngx_comma \"${ngx_fmt_x}\" 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


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

    exit 1
fi


if [ $ngx_ptr_size = 4 ]; then
    ngx_fmt_x="%0`expr 2 \* $ngx_ptr_size`"
else
    ngx_fmt_x="%"
fi

ngx_format=`echo $ngx_format | sed -e "s/d/X/" -e "s/^%/$ngx_fmt_x/"`

echo "$ngx_comma \"${ngx_format}\" used"


cat << END >> $NGX_AUTO_CONFIG_H

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

END
