################# nginx/auto/unix ###############
......
#定义当前feature的各个元素
ngx_feature="poll()"
ngx_feature_name=
ngx_feature_run=no
ngx_feature_incs="#include <poll.h>"
ngx_feature_path=
ngx_feature_libs=
#测试当前feature是否可用的代码段
ngx_feature_test="int n; struct pollfd pl;
pl.fd = 0;
pl.events = 0;
pl.revents = 0;
n = poll(&pl, 1, 0);
if (n == -1) return 1"
#利用上面定义的各个变量测试poll()函数这个feature是否可用
. auto/feature
#如果上述的测试结果表明该feature不可用,就将相应的宏设置为NONE
if [ $ngx_found = no ]; then
EVENT_POLL=NONE
fi
......
################# nginx/auto/feature ###############
......
#利用cat命令将END分隔符之间的内容(与测试feature的代码段组合成的一个简单的C程序)
#写到 $NGX_AUTOTEST.c文件中
cat << END > $NGX_AUTOTEST.c
#include <sys/types.h>
$NGX_INCLUDE_UNISTD_H
$ngx_feature_incs
int main(void) {
$ngx_feature_test;
return 0;
}
END
#将编译链接$NGX_AUTOTEST.c的命令赋值给ngx_test变量
ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS $ngx_feature_inc_path \
-o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_TEST_LD_OPT $ngx_feature_libs"
ngx_feature_inc_path=
#执行ngx_test变量指向的编译、链接指令,完成对$NGX_AUTOTEST.c的编译、链接生成可执行程序NGX_AUTOTEST
eval "/bin/sh -c "$ngx_test" >> $NGX_AUTOCONF_ERR 2>&1"
#检查是否成功生成可执行程序$NGX_AUTOTEST
if [ -x $NGX_AUTOTEST ]; then
#根据feature的类型,采用不同的方案验证feature的可行性
case "$ngx_feature_run" in
yes)
# /bin/sh is used to intercept "Killed" or "Abort trap" messages
#执行对应的可执行程序,并重定向输出
if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
#执行成功,将ngx_found设成yes,表示该feature可用
echo " found"
ngx_found=yes
#调用auto/have文件,在$NGX_AUTO_CONFIG_H 文件中,设置该feature对应的宏的值为1(启用该feature)
if test -n "$ngx_feature_name"; then
have=$ngx_have_feature . auto/have
fi
else
echo " found but is not working"
fi
;;
......