-
Notifications
You must be signed in to change notification settings - Fork 543
/
configure
executable file
·134 lines (104 loc) · 4.69 KB
/
configure
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/sh
# Copyright (C) Igor Sysoev
# Copyright (C) Nginx, Inc.
# 处理configure命令的参数。
. auto/options
# 初始化后续将产生的文件路径。例如,Makefile,ngx_modules.c等文件默认情况下会在<nginx-source>/objs/
. auto/init
# 分析Nginx的源码结构,这样才能构造后续的Makefile文件
. auto/sources
# 编译过程中所有目录文件生成的路径由--builddir=DIR参数指定,默认情况下为<nginx-source>/objs,此时这个目录将会被创建
test -d $NGX_OBJS || mkdir $NGX_OBJS
# 开始准备建立ngx_auto_headers.h,autoconf.err等必要的编译文件
echo > $NGX_AUTO_HEADERS_H
echo > $NGX_AUTOCONF_ERR
# 向objs/ngx_auto_config.h写入命令行带的参数
echo "#define NGX_CONFIGURE \"$NGX_CONFIGURE\"" > $NGX_AUTO_CONFIG_H
# 判断DEBUG标志,如果有,在objs/ngx_auto_config.h文件中写入DEBUG宏
if [ $NGX_DEBUG = YES ]; then
have=NGX_DEBUG . auto/have
fi
# 现在开始检查操作系统参数是否支持后续编译
if test -z "$NGX_PLATFORM"; then
echo "checking for OS"
NGX_SYSTEM=`uname -s 2>/dev/null`
NGX_RELEASE=`uname -r 2>/dev/null`
NGX_MACHINE=`uname -m 2>/dev/null`
# 输出OS名称,内核版本,32位/64位内核
echo " + $NGX_SYSTEM $NGX_RELEASE $NGX_MACHINE"
NGX_PLATFORM="$NGX_SYSTEM:$NGX_RELEASE:$NGX_MACHINE";
case "$NGX_SYSTEM" in
MINGW32_*)
NGX_PLATFORM=win32
;;
esac
else
echo "building for $NGX_PLATFORM"
NGX_SYSTEM=$NGX_PLATFORM
fi
# 检查并设置编译器,如GCC是否安装,GCC版本是否支持后续编译nginx
. auto/cc/conf
# 对非Windows操作系统定义一些必要的头文件,并检查其是否存在,以此决定configure后续步骤是否可以成功
if [ "$NGX_PLATFORM" != win32 ]; then
. auto/headers
fi
# 对于当前操作系统,定义一些特定的操作系统相关的方法,并检查当前环境是否支持。
. auto/os/conf
# 定义类Unix操作系统中通用的头文件和系统调用等,并检查当前环境是否支持
if [ "$NGX_PLATFORM" != win32 ]; then
. auto/unix
fi
# 最核心的构造运行期modules的脚本。
# 它会生成ngx_modules.c文件,这个文件会被编译进nginx中,其中它所做的唯一事情就是定义了ngx_modules数组。
# ngx_moduels指明nginx运行期间有哪些模块会参与到请求的处理中,包括HTTP请求可能会使用哪些模块处理。
# 因此它对数组元素的顺序非常敏感。也就是说,绝大部分模块在ngx_modules数组中的顺序其实是固定的。
. auto/modules
# conf脚本用来检查nginx在链接期间需要链接的第三方静态库,动态库或者目标文件是否存在
. auto/lib/conf
# 处理nginx安装后的路径
case ".$NGX_PREFIX" in
.)
NGX_PREFIX=${NGX_PREFIX:-/usr/local/nginx}
have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define
;;
.!)
NGX_PREFIX=
;;
*)
have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define
;;
esac
# 处理nginx安装后conf文件的路径
if [ ".$NGX_CONF_PREFIX" != "." ]; then
have=NGX_CONF_PREFIX value="\"$NGX_CONF_PREFIX/\"" . auto/define
fi
# 处理nginx安装后,二进制文件,pid,lock等其他文件的路径。
have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define
have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define
have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define
have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define
have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define
have=NGX_HTTP_LOG_PATH value="\"$NGX_HTTP_LOG_PATH\"" . auto/define
have=NGX_HTTP_CLIENT_TEMP_PATH value="\"$NGX_HTTP_CLIENT_TEMP_PATH\""
. auto/define
have=NGX_HTTP_PROXY_TEMP_PATH value="\"$NGX_HTTP_PROXY_TEMP_PATH\""
. auto/define
have=NGX_HTTP_FASTCGI_TEMP_PATH value="\"$NGX_HTTP_FASTCGI_TEMP_PATH\""
. auto/define
have=NGX_HTTP_UWSGI_TEMP_PATH value="\"$NGX_HTTP_UWSGI_TEMP_PATH\""
. auto/define
have=NGX_HTTP_SCGI_TEMP_PATH value="\"$NGX_HTTP_SCGI_TEMP_PATH\""
. auto/define
# 创建编译时使用的objs/Makefile文件
. auto/make
# 为objs/Makefile加入需要链接的第三方静态库,动态库,或者目标文件
. auto/lib/make
# 为objs/Makefile加入install功能,当执行make install时,将编译生成的必要文件复制到安装路径,建立必要的目录
. auto/install
# STUB,在nginx_auto_config.h文件中加入NGX_SUPPRESS_WARN宏,NGX_SMP宏
. auto/stubs
# 在nginx_auto_config.h文件中指定NGX_USER和NGX_GROUP宏,如果执行configure时没有参数指定,默认两者皆为nobody
have=NGX_USER value="\"$NGX_USER\"" . auto/define
have=NGX_GROUP value="\"$NGX_GROUP\"" . auto/define
# 显示configure执行的结果,如果失败,则给出原因
. auto/summary