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