1*4882a593SmuzhiyunFrom 08617a8d29ee22831175697555558fec8f52772c Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Samuel Martin <s.martin49@gmail.com> 3*4882a593SmuzhiyunDate: Sun, 1 Jun 2014 16:05:04 +0200 4*4882a593SmuzhiyunSubject: [PATCH] auto/unix: make sys_nerr guessing cross-friendly 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunThis patch replaces the default sys_nerr runtest with a test done at 7*4882a593Smuzhiyunbuildtime. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunThe idea behind this buildtime test is finding the value of the ERR_MAX 10*4882a593Smuzhiyunmacro if defined, or the EHWPOISON (which is currently the last errno) 11*4882a593Smuzhiyunotherwise. 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunSigned-off-by: Samuel Martin <s.martin49@gmail.com> 14*4882a593Smuzhiyun 15*4882a593SmuzhiyunRefresh for 1.8.0. 16*4882a593Smuzhiyun 17*4882a593SmuzhiyunSigned-off-by: Danomi Manchego <danomimanchego123@gmail.com> 18*4882a593Smuzhiyun[rebased against v1.20.1] 19*4882a593SmuzhiyunSigned-off-by: Adam Duskett <Aduskett@gmail.com> 20*4882a593Smuzhiyun--- 21*4882a593Smuzhiyun auto/os/sys_nerr | 78 ++++++++++++++++++++++++++++++++++++++++++++++++ 22*4882a593Smuzhiyun auto/unix | 8 +++++ 23*4882a593Smuzhiyun 2 files changed, 86 insertions(+) 24*4882a593Smuzhiyun create mode 100644 auto/os/sys_nerr 25*4882a593Smuzhiyun 26*4882a593Smuzhiyundiff --git a/auto/os/sys_nerr b/auto/os/sys_nerr 27*4882a593Smuzhiyunnew file mode 100644 28*4882a593Smuzhiyunindex 0000000..8970f5f 29*4882a593Smuzhiyun--- /dev/null 30*4882a593Smuzhiyun+++ b/auto/os/sys_nerr 31*4882a593Smuzhiyun@@ -0,0 +1,78 @@ 32*4882a593Smuzhiyun+ 33*4882a593Smuzhiyun+# Copyright (C) Samuel Martin <s.martin49@gmail.com> 34*4882a593Smuzhiyun+ 35*4882a593Smuzhiyun+ 36*4882a593Smuzhiyun+echo $ngx_n "checking for sys_nerr value...$ngx_c" 37*4882a593Smuzhiyun+ 38*4882a593Smuzhiyun+# sys_nerr guessing is done using a (very) poor (but working) 39*4882a593Smuzhiyun+# heuristics, by checking for the value of ERR_MAX if defined, or 40*4882a593Smuzhiyun+# EHWPOISON otherwise. 41*4882a593Smuzhiyun+ 42*4882a593Smuzhiyun+cat << END >> $NGX_AUTOCONF_ERR 43*4882a593Smuzhiyun+ 44*4882a593Smuzhiyun+---------------------------------------- 45*4882a593Smuzhiyun+checking for sys_nerr value 46*4882a593Smuzhiyun+ 47*4882a593Smuzhiyun+END 48*4882a593Smuzhiyun+ 49*4882a593Smuzhiyun+ngx_sys_nerr= 50*4882a593Smuzhiyun+ 51*4882a593Smuzhiyun+cat << _EOF > $NGX_AUTOTEST.c 52*4882a593Smuzhiyun+ 53*4882a593Smuzhiyun+#include <stdio.h> 54*4882a593Smuzhiyun+#include <errno.h> 55*4882a593Smuzhiyun+ 56*4882a593Smuzhiyun+static char sys_nerr_test[ERR_MAX]; 57*4882a593Smuzhiyun+int main(void) 58*4882a593Smuzhiyun+{ 59*4882a593Smuzhiyun+ return 0; 60*4882a593Smuzhiyun+} 61*4882a593Smuzhiyun+ 62*4882a593Smuzhiyun+_EOF 63*4882a593Smuzhiyun+ 64*4882a593Smuzhiyun+if $CC $CC_TEST_FLAGS $CC_AUX_FLAGS \ 65*4882a593Smuzhiyun+ $NGX_AUTOTEST.c -o $NGX_AUTOTEST \ 66*4882a593Smuzhiyun+ $NGX_LD_OPT $ngx_feature_libs >/dev/null 2>&1 ; then 67*4882a593Smuzhiyun+ _ngx_max_err_macro=ERR_MAX 68*4882a593Smuzhiyun+else 69*4882a593Smuzhiyun+ # the +2 has been empirically found! 70*4882a593Smuzhiyun+ _ngx_max_err_macro="EHWPOISON + 2" 71*4882a593Smuzhiyun+fi 72*4882a593Smuzhiyun+ 73*4882a593Smuzhiyun+cat << _EOF > $NGX_AUTOTEST.c 74*4882a593Smuzhiyun+ 75*4882a593Smuzhiyun+#include <stdio.h> 76*4882a593Smuzhiyun+#include <errno.h> 77*4882a593Smuzhiyun+ 78*4882a593Smuzhiyun+static char sys_nerr_test[(TEST_ERR_MAX == $_ngx_max_err_macro) ? 1 : -1]; 79*4882a593Smuzhiyun+int main(void) 80*4882a593Smuzhiyun+{ 81*4882a593Smuzhiyun+ return 0; 82*4882a593Smuzhiyun+} 83*4882a593Smuzhiyun+ 84*4882a593Smuzhiyun+_EOF 85*4882a593Smuzhiyun+ 86*4882a593Smuzhiyun+ 87*4882a593Smuzhiyun+ngx_sys_nerr=`for i in $(seq 0 2000) ; do \ 88*4882a593Smuzhiyun+ $CC $CC_TEST_FLAGS $CC_AUX_FLAGS \ 89*4882a593Smuzhiyun+ -DTEST_ERR_MAX="$i" \ 90*4882a593Smuzhiyun+ $NGX_AUTOTEST.c -o $NGX_AUTOTEST \ 91*4882a593Smuzhiyun+ $NGX_LD_OPT $ngx_feature_libs >/dev/null 2>&1 || continue ;\ 92*4882a593Smuzhiyun+ echo $i ; break ; done` 93*4882a593Smuzhiyun+ 94*4882a593Smuzhiyun+rm -rf $NGX_AUTOTEST* 95*4882a593Smuzhiyun+ 96*4882a593Smuzhiyun+if test -z $ngx_sys_nerr ; then 97*4882a593Smuzhiyun+ ngx_size=0 98*4882a593Smuzhiyun+ ngx_sys_nerr=0 99*4882a593Smuzhiyun+fi 100*4882a593Smuzhiyun+ 101*4882a593Smuzhiyun+cat << END >> $NGX_AUTO_CONFIG_H 102*4882a593Smuzhiyun+ 103*4882a593Smuzhiyun+#ifndef $ngx_feature_name 104*4882a593Smuzhiyun+#define $ngx_feature_name $ngx_sys_nerr 105*4882a593Smuzhiyun+#endif 106*4882a593Smuzhiyun+ 107*4882a593Smuzhiyun+END 108*4882a593Smuzhiyun+ 109*4882a593Smuzhiyun+echo " $ngx_sys_nerr" 110*4882a593Smuzhiyundiff --git a/auto/unix b/auto/unix 111*4882a593Smuzhiyunindex 7dbf9d1..00a7370 100755 112*4882a593Smuzhiyun--- a/auto/unix 113*4882a593Smuzhiyun+++ b/auto/unix 114*4882a593Smuzhiyun@@ -744,10 +744,18 @@ if [ $ngx_found = no ]; then 115*4882a593Smuzhiyun #include <stdio.h>' 116*4882a593Smuzhiyun ngx_feature_path= 117*4882a593Smuzhiyun ngx_feature_libs= 118*4882a593Smuzhiyun+ if false ; then 119*4882a593Smuzhiyun+ # Disabled because only valid for native build. 120*4882a593Smuzhiyun ngx_feature_test='printf("%d", _sys_nerr);' 121*4882a593Smuzhiyun . auto/feature 122*4882a593Smuzhiyun fi 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun+else 125*4882a593Smuzhiyun+ # Cross-compilation support 126*4882a593Smuzhiyun+ . auto/os/sys_nerr 127*4882a593Smuzhiyun+ 128*4882a593Smuzhiyun+fi 129*4882a593Smuzhiyun+ 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun ngx_feature="localtime_r()" 132*4882a593Smuzhiyun ngx_feature_name="NGX_HAVE_LOCALTIME_R" 133*4882a593Smuzhiyun-- 134*4882a593Smuzhiyun1.9.1 135*4882a593Smuzhiyun 136