123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- From 08617a8d29ee22831175697555558fec8f52772c Mon Sep 17 00:00:00 2001
- From: Samuel Martin <s.martin49@gmail.com>
- Date: Sun, 1 Jun 2014 16:05:04 +0200
- Subject: [PATCH] auto/unix: make sys_nerr guessing cross-friendly
- This patch replaces the default sys_nerr runtest with a test done at
- buildtime.
- The idea behind this buildtime test is finding the value of the ERR_MAX
- macro if defined, or the EHWPOISON (which is currently the last errno)
- otherwise.
- Signed-off-by: Samuel Martin <s.martin49@gmail.com>
- Refresh for 1.8.0.
- Signed-off-by: Danomi Manchego <danomimanchego123@gmail.com>
- ---
- auto/os/sys_nerr | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- auto/unix | 10 ++++++++
- 2 files changed, 88 insertions(+)
- create mode 100644 auto/os/sys_nerr
- diff --git a/auto/os/sys_nerr b/auto/os/sys_nerr
- new file mode 100644
- index 0000000..8970f5f
- --- /dev/null
- +++ b/auto/os/sys_nerr
- @@ -0,0 +1,78 @@
- +
- +# Copyright (C) Samuel Martin <s.martin49@gmail.com>
- +
- +
- +echo $ngx_n "checking for sys_nerr value...$ngx_c"
- +
- +# sys_nerr guessing is done using a (very) poor (but working)
- +# heuristics, by checking for the value of ERR_MAX if defined, or
- +# EHWPOISON otherwise.
- +
- +cat << END >> $NGX_AUTOCONF_ERR
- +
- +----------------------------------------
- +checking for sys_nerr value
- +
- +END
- +
- +ngx_sys_nerr=
- +
- +cat << _EOF > $NGX_AUTOTEST.c
- +
- +#include <stdio.h>
- +#include <errno.h>
- +
- +static char sys_nerr_test[ERR_MAX];
- +int main(void)
- +{
- + return 0;
- +}
- +
- +_EOF
- +
- +if $CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
- + $NGX_AUTOTEST.c -o $NGX_AUTOTEST \
- + $NGX_LD_OPT $ngx_feature_libs >/dev/null 2>&1 ; then
- + _ngx_max_err_macro=ERR_MAX
- +else
- + # the +2 has been empirically found!
- + _ngx_max_err_macro="EHWPOISON + 2"
- +fi
- +
- +cat << _EOF > $NGX_AUTOTEST.c
- +
- +#include <stdio.h>
- +#include <errno.h>
- +
- +static char sys_nerr_test[(TEST_ERR_MAX == $_ngx_max_err_macro) ? 1 : -1];
- +int main(void)
- +{
- + return 0;
- +}
- +
- +_EOF
- +
- +
- +ngx_sys_nerr=`for i in $(seq 0 2000) ; do \
- + $CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
- + -DTEST_ERR_MAX="$i" \
- + $NGX_AUTOTEST.c -o $NGX_AUTOTEST \
- + $NGX_LD_OPT $ngx_feature_libs >/dev/null 2>&1 || continue ;\
- + echo $i ; break ; done`
- +
- +rm -rf $NGX_AUTOTEST*
- +
- +if test -z $ngx_sys_nerr ; then
- + ngx_size=0
- + ngx_sys_nerr=0
- +fi
- +
- +cat << END >> $NGX_AUTO_CONFIG_H
- +
- +#ifndef $ngx_feature_name
- +#define $ngx_feature_name $ngx_sys_nerr
- +#endif
- +
- +END
- +
- +echo " $ngx_sys_nerr"
- diff --git a/auto/unix b/auto/unix
- index 7dbf9d1..00a7370 100755
- --- a/auto/unix
- +++ b/auto/unix
- @@ -708,6 +708,10 @@ ngx_feature_incs='#include <errno.h>
- #include <stdio.h>'
- ngx_feature_path=
- ngx_feature_libs=
- +
- +if false ; then
- +# Disabled because only valid for native build.
- +
- ngx_feature_test='printf("%d", sys_nerr);'
- . auto/feature
-
- @@ -756,6 +760,12 @@ if [ $ngx_found = no ]; then
- . auto/feature
- fi
-
- +else
- + # Cross-compilation support
- + . auto/os/sys_nerr
- +
- +fi
- +
-
- ngx_feature="localtime_r()"
- ngx_feature_name="NGX_HAVE_LOCALTIME_R"
- --
- 1.9.1
|