Nginx源码分析之--辅助脚本

微信公众号:Nginx源码分析
关注可了解更多的Nginx知识。任何问题或建议,请公众号留言;
关注公众号,有趣有内涵的文章第一时间送达!

辅助脚本

我们在前面的几篇文章中详细的分析了auto/optionsauto/init,auto/sources脚本源码,除此之外,nginx还有一些其他的辅助脚本,用于完成一些特定的功能。我总结了一下在nginx中遇到的辅助脚本,如下图所示:
nginx辅助脚本
我们本篇文章以及后续的两到三篇文章就详细的分析一下这些辅助脚本的功能。
本文详细分析上图中的前三个脚本。

auto/define脚本
功能

该脚本用于向NGX_AUTO_CONFIG_H头文件中增加一个宏定义,并且设置这个宏的名称。

参数

have:宏的名称
value:宏的值

脚本内容
cat << END >> $NGX_AUTO_CONFIG_H

#ifndef $have
#define $have  $value
#endif

END
示例

configure文件中,有如下的代码:

have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define

这行脚本就是根据我们传递的NGX_PREFIX的值,向头文件中增加内容,比如我们调用configure的时候如下:

./configure --prefix=/usr/local/nginx

那么上面的语句就会变成:

have=NGX_PREFIX  value="/usr/local/nginx" .auto/define

那么就会向NGX_AUTO_CONFIG_H头文件中写入下面的内容:

#ifndef NGX_PREFIX
#define NGX_PREFIX  "/usr/local/nginx"
#endif

就这样,通过auto/define脚本,nginx可以把我们的配置参数和c的源码结合起来。反正对于我来说,第一个看到这样的形式,非常的新颖。

auto/have脚本
功能

和上面的auto/define脚本类似,auto/have也是向NGX_AUTO_CONFIG_H头文件中增加一个宏定义,但是这里增加的宏的值都是1,不会又自定义的值。

参数

have:宏的名称

脚本内容
cat << END >> $NGX_AUTO_CONFIG_H

#ifndef $have
#define $have  1
#endif

END
示例

我们从configure脚本中发现如下的内容:

if [ $NGX_DEBUG = YES ]; then
    have=NGX_DEBUG . auto/have
fi

这里的意思就是,如果我们在configure的时候设置了DEBUG模式,那么就会向NGX_AUTO_CONFIG_H头文件中增加如下代码:

#ifndef NGX_DEBUG
#define NGX_DEBUG 1
#endif

这就表明我们打开了DEBUG模式。

auto/nohave
功能

auto/have的功能恰恰相反,auto/nohave的功能如下:
如果NGX_AUTO_CONFIG_H头文件中已经定义了一个宏,那么auto/nohave就会通过把这个宏的值设置为0从而取消这个宏定义。

参数

have:宏的名称

脚本内容
cat << END >> $NGX_AUTO_CONFIG_H

#ifndef $have
#define $have  0
#endif

END
示例

auto/modules中有如下的代码:

if [ $HTTP != YES ]; then
    have=NGX_CRYPT . auto/nohave
    CRYPT_LIB=
fi

这里的判断很简单,如果HTTP变量的值不是YES的话,就向NGX_AUTO_CONFIG_H文件中写入如下内容:

#ifdef HTTP
#define HTTP 0
#endif

这样,就相当于取消了HTTP宏的定义。

auto/have_headers脚本
功能

和前面的auto/have脚本类似,auto/have是向NGX_AUTO_HEADERS_H头文件中增加一个宏定义,增加的宏的值都是1
划重点了,它和auto_have的不同之处在于,auto_have是向NGX_AUTO_CONFIG_H文件中增加的宏定义,而auto/have_headers是向NGX_AUTO_CONFIG_H中增加的宏定义。

参数

have:宏的名称

脚本内容
cat << END >> $NGX_AUTO_HEADERS_H

#ifndef $have
#define $have  1
#endif

END
示例

auto/os/linux脚本中有如下的内容:

have=NGX_LINUX . auto/have_headers

显然这里是判断当前的操作系统类型的,如果是Linux的话,就会向NGX_AUTO_HEADERS_H中增加如下内容:

#ifndef NGX_LINUX
#define NGX_LINUX 1
#endif

总结

本文详细的分析了auto/define, auto/have, auto/nohave三个辅助脚本的功能。下面总结一下:

auto/defnie: 定义一个宏,并且可以自定义这个宏的值。

auto/have: 如果一个宏之前没有被定义过,那么就定义该宏,并且把值设置为1,其实就是一个bool标识,标识某个功能已经被打开,比如我们例子中的debug功能。

auto/nohave: 它和auto/have脚本的功能恰恰相反。如果我们已经打开了某一个宏(比如nginx默认打开的那些功能),现在我们取消这个宏的定义,也是一个bool类型,表示我们关闭了某个功能。

auto/have_headers: auto_have是向NGX_AUTO_CONFIG_H文件中增加的宏定义,而auto/have_headers是向NGX_AUTO_CONFIG_H中增加的宏定义,二者其他功能相同。

后面的文章我们会接着分析nginx的其他辅助脚本,敬请期待。顺便关注我的个公众号(Nginx源码分析)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值