Mercurial > hg > nginx-quic
annotate auto/make @ 6778:5e95b9fb33b7
HTTP/2: graceful shutdown of active connections (closes #1106).
Previously, while shutting down gracefully, the HTTP/2 connections were
closed in transition to idle state after all active streams have been
processed. That might never happen if the client continued opening new
streams.
Now, nginx sends GOAWAY to all HTTP/2 connections and ignores further
attempts to open new streams. A worker process will quit as soon as
processing of already opened streams is finished.
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Thu, 20 Oct 2016 16:15:03 +0300 |
parents | 0d2956dfc4e6 |
children | 2c7a2d75938a |
rev | line source |
---|---|
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
417
diff
changeset
|
1 |
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
417
diff
changeset
|
2 # Copyright (C) Igor Sysoev |
4412 | 3 # Copyright (C) Nginx, Inc. |
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
417
diff
changeset
|
4 |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
5 |
2827 | 6 echo "creating $NGX_MAKEFILE" |
7 | |
469 | 8 mkdir -p $NGX_OBJS/src/core $NGX_OBJS/src/event $NGX_OBJS/src/event/modules \ |
9 $NGX_OBJS/src/os/unix $NGX_OBJS/src/os/win32 \ | |
6246
257b51c37c5a
The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents:
6164
diff
changeset
|
10 $NGX_OBJS/src/http $NGX_OBJS/src/http/v2 $NGX_OBJS/src/http/modules \ |
6065 | 11 $NGX_OBJS/src/http/modules/perl \ |
1949 | 12 $NGX_OBJS/src/mail \ |
6115 | 13 $NGX_OBJS/src/stream \ |
1949 | 14 $NGX_OBJS/src/misc |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
15 |
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
16 |
455 | 17 ngx_objs_dir=$NGX_OBJS$ngx_regex_dirsep |
18 ngx_use_pch=`echo $NGX_USE_PCH | sed -e "s/\//$ngx_regex_dirsep/g"` | |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
19 |
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
20 |
467 | 21 cat << END > $NGX_MAKEFILE |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
22 |
455 | 23 CC = $CC |
24 CFLAGS = $CFLAGS | |
25 CPP = $CPP | |
26 LINK = $LINK | |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
27 |
455 | 28 END |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
29 |
2825
bb05c0834c8c
remove BMAKE (build make): a cc compiler should use own make
Igor Sysoev <igor@sysoev.ru>
parents:
1949
diff
changeset
|
30 |
681 | 31 if test -n "$NGX_PERL_CFLAGS"; then |
32 echo NGX_PERL_CFLAGS = $NGX_PERL_CFLAGS >> $NGX_MAKEFILE | |
33 echo NGX_PM_CFLAGS = $NGX_PM_CFLAGS >> $NGX_MAKEFILE | |
6700
0d2956dfc4e6
Perl: pass additional linker options to perl module.
Konstantin Pavlov <thresh@nginx.com>
parents:
6425
diff
changeset
|
34 echo NGX_PM_LDFLAGS = $NGX_PM_LDFLAGS >> $NGX_MAKEFILE |
681 | 35 fi |
36 | |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
37 |
489 | 38 # ALL_INCS, required by the addons and by OpenWatcom C precompiled headers |
455 | 39 |
6118
1bdfceda86a9
Fixed building --with-stream when precompiled headers are used.
Sergey Kandaurov <pluknet@nginx.com>
parents:
6115
diff
changeset
|
40 ngx_incs=`echo $CORE_INCS $NGX_OBJS $HTTP_INCS $MAIL_INCS $STREAM_INCS\ |
455 | 41 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \ |
42 -e "s/\//$ngx_regex_dirsep/g"` | |
43 | |
44 cat << END >> $NGX_MAKEFILE | |
45 | |
46 ALL_INCS = $ngx_include_opt$ngx_incs | |
47 | |
48 END | |
49 | |
50 | |
51 ngx_all_srcs="$CORE_SRCS" | |
52 | |
53 | |
6164
4e5dda15f18f
Fixed misspellings of the word "dependencies".
Ruslan Ermilov <ru@nginx.com>
parents:
6118
diff
changeset
|
54 # the core dependencies and include paths |
455 | 55 |
467 | 56 ngx_deps=`echo $CORE_DEPS $NGX_AUTO_CONFIG_H $NGX_PCH \ |
455 | 57 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \ |
58 -e "s/\//$ngx_regex_dirsep/g"` | |
59 | |
469 | 60 ngx_incs=`echo $CORE_INCS $NGX_OBJS \ |
455 | 61 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \ |
62 -e "s/\//$ngx_regex_dirsep/g"` | |
63 | |
64 cat << END >> $NGX_MAKEFILE | |
65 | |
66 CORE_DEPS = $ngx_deps | |
67 | |
68 | |
69 CORE_INCS = $ngx_include_opt$ngx_incs | |
70 | |
71 END | |
72 | |
73 | |
6164
4e5dda15f18f
Fixed misspellings of the word "dependencies".
Ruslan Ermilov <ru@nginx.com>
parents:
6118
diff
changeset
|
74 # the http dependencies and include paths |
455 | 75 |
76 if [ $HTTP = YES ]; then | |
77 | |
78 ngx_all_srcs="$ngx_all_srcs $HTTP_SRCS" | |
79 | |
80 ngx_deps=`echo $HTTP_DEPS \ | |
81 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \ | |
82 -e "s/\//$ngx_regex_dirsep/g"` | |
83 | |
84 ngx_incs=`echo $HTTP_INCS \ | |
85 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \ | |
86 -e "s/\//$ngx_regex_dirsep/g"` | |
87 | |
88 cat << END >> $NGX_MAKEFILE | |
89 | |
90 HTTP_DEPS = $ngx_deps | |
91 | |
92 | |
93 HTTP_INCS = $ngx_include_opt$ngx_incs | |
94 | |
95 END | |
96 | |
97 fi | |
98 | |
99 | |
6164
4e5dda15f18f
Fixed misspellings of the word "dependencies".
Ruslan Ermilov <ru@nginx.com>
parents:
6118
diff
changeset
|
100 # the mail dependencies and include paths |
455 | 101 |
6383 | 102 if [ $MAIL != NO ]; then |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
103 |
6383 | 104 if [ $MAIL = YES ]; then |
105 ngx_all_srcs="$ngx_all_srcs $MAIL_SRCS" | |
106 fi | |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
107 |
1136 | 108 ngx_deps=`echo $MAIL_DEPS \ |
455 | 109 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \ |
110 -e "s/\//$ngx_regex_dirsep/g"` | |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
111 |
1136 | 112 ngx_incs=`echo $MAIL_INCS \ |
455 | 113 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \ |
114 -e "s/\//$ngx_regex_dirsep/g"` | |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
115 |
455 | 116 cat << END >> $NGX_MAKEFILE |
117 | |
1136 | 118 MAIL_DEPS = $ngx_deps |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
119 |
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
120 |
1136 | 121 MAIL_INCS = $ngx_include_opt$ngx_incs |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
122 |
455 | 123 END |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
124 |
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
125 fi |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
126 |
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
127 |
6164
4e5dda15f18f
Fixed misspellings of the word "dependencies".
Ruslan Ermilov <ru@nginx.com>
parents:
6118
diff
changeset
|
128 # the stream dependencies and include paths |
6115 | 129 |
6383 | 130 if [ $STREAM != NO ]; then |
6115 | 131 |
6383 | 132 if [ $STREAM = YES ]; then |
133 ngx_all_srcs="$ngx_all_srcs $STREAM_SRCS" | |
134 fi | |
6115 | 135 |
136 ngx_deps=`echo $STREAM_DEPS \ | |
137 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \ | |
138 -e "s/\//$ngx_regex_dirsep/g"` | |
139 | |
140 ngx_incs=`echo $STREAM_INCS \ | |
141 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont$ngx_include_opt\1/g" \ | |
142 -e "s/\//$ngx_regex_dirsep/g"` | |
143 | |
144 cat << END >> $NGX_MAKEFILE | |
145 | |
146 STREAM_DEPS = $ngx_deps | |
147 | |
148 | |
149 STREAM_INCS = $ngx_include_opt$ngx_incs | |
150 | |
151 END | |
152 | |
153 fi | |
154 | |
155 | |
6382
392959224560
Dynamic modules: auto/module script.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6246
diff
changeset
|
156 ngx_all_srcs="$ngx_all_srcs $MISC_SRCS" |
1949 | 157 |
158 | |
489 | 159 if test -n "$NGX_ADDON_SRCS"; then |
160 | |
161 cat << END >> $NGX_MAKEFILE | |
162 | |
541 | 163 ADDON_DEPS = \$(CORE_DEPS) $NGX_ADDON_DEPS |
489 | 164 |
165 END | |
166 | |
167 fi | |
168 | |
169 | |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
170 # nginx |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
171 |
455 | 172 ngx_all_srcs=`echo $ngx_all_srcs | sed -e "s/\//$ngx_regex_dirsep/g"` |
489 | 173 |
174 for ngx_src in $NGX_ADDON_SRCS | |
175 do | |
176 ngx_obj="addon/`basename \`dirname $ngx_src\``" | |
177 | |
178 test -d $NGX_OBJS/$ngx_obj || mkdir -p $NGX_OBJS/$ngx_obj | |
179 | |
180 ngx_obj=`echo $ngx_obj/\`basename $ngx_src\` \ | |
181 | sed -e "s/\//$ngx_regex_dirsep/g"` | |
182 | |
183 ngx_all_srcs="$ngx_all_srcs $ngx_obj" | |
184 done | |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
267
diff
changeset
|
185 |
455 | 186 ngx_all_objs=`echo $ngx_all_srcs \ |
665 | 187 | sed -e "s#\([^ ]*\.\)cpp#$NGX_OBJS\/\1$ngx_objext#g" \ |
188 -e "s#\([^ ]*\.\)cc#$NGX_OBJS\/\1$ngx_objext#g" \ | |
189 -e "s#\([^ ]*\.\)c#$NGX_OBJS\/\1$ngx_objext#g" \ | |
190 -e "s#\([^ ]*\.\)S#$NGX_OBJS\/\1$ngx_objext#g"` | |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
191 |
489 | 192 ngx_modules_c=`echo $NGX_MODULES_C | sed -e "s/\//$ngx_regex_dirsep/g"` |
193 | |
455 | 194 ngx_modules_obj=`echo $ngx_modules_c | sed -e "s/\(.*\.\)c/\1$ngx_objext/"` |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
267
diff
changeset
|
195 |
461 | 196 |
197 if test -n "$NGX_RES"; then | |
198 ngx_res=$NGX_RES | |
199 else | |
200 ngx_res="$NGX_RC $NGX_ICONS" | |
201 ngx_rcc=`echo $NGX_RCC | sed -e "s/\//$ngx_regex_dirsep/g"` | |
202 fi | |
203 | |
204 ngx_deps=`echo $ngx_all_objs $ngx_modules_obj $ngx_res $LINK_DEPS \ | |
455 | 205 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \ |
206 -e "s/\//$ngx_regex_dirsep/g"` | |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
207 |
455 | 208 ngx_objs=`echo $ngx_all_objs $ngx_modules_obj \ |
573 | 209 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_long_regex_cont\1/g" \ |
455 | 210 -e "s/\//$ngx_regex_dirsep/g"` |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
211 |
6383 | 212 ngx_libs= |
667 | 213 if test -n "$NGX_LD_OPT$CORE_LIBS"; then |
214 ngx_libs=`echo $NGX_LD_OPT $CORE_LIBS \ | |
215 | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"` | |
216 fi | |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
267
diff
changeset
|
217 |
455 | 218 ngx_link=${CORE_LINK:+`echo $CORE_LINK \ |
573 | 219 | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`} |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
220 |
6383 | 221 ngx_main_link=${MAIN_LINK:+`echo $MAIN_LINK \ |
222 | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`} | |
223 | |
461 | 224 |
455 | 225 cat << END >> $NGX_MAKEFILE |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
226 |
6408
cfc3cfa434ec
Configure: added "build" target.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6383
diff
changeset
|
227 build: binary modules manpage |
cfc3cfa434ec
Configure: added "build" target.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6383
diff
changeset
|
228 |
6424 | 229 binary: $NGX_OBJS${ngx_dirsep}nginx$ngx_binext |
6408
cfc3cfa434ec
Configure: added "build" target.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6383
diff
changeset
|
230 |
6424 | 231 $NGX_OBJS${ngx_dirsep}nginx$ngx_binext: $ngx_deps$ngx_spacer |
232 \$(LINK) $ngx_long_start$ngx_binout$NGX_OBJS${ngx_dirsep}nginx$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_main_link | |
461 | 233 $ngx_rcc |
6424 | 234 $ngx_long_end |
6383 | 235 |
236 modules: | |
455 | 237 END |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
238 |
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
239 |
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
240 # ngx_modules.c |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
241 |
455 | 242 if test -n "$NGX_PCH"; then |
243 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" | |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
281
diff
changeset
|
244 else |
455 | 245 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS)" |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
246 fi |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
247 |
455 | 248 cat << END >> $NGX_MAKEFILE |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
249 |
455 | 250 $ngx_modules_obj: \$(CORE_DEPS)$ngx_cont$ngx_modules_c |
561 | 251 $ngx_cc$ngx_tab$ngx_objout$ngx_modules_obj$ngx_tab$ngx_modules_c$NGX_AUX |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
252 |
455 | 253 END |
254 | |
255 | |
256 # the core sources | |
257 | |
258 for ngx_src in $CORE_SRCS | |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
259 do |
455 | 260 ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"` |
261 ngx_obj=`echo $ngx_src \ | |
665 | 262 | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \ |
263 -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
264 -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
265 -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"` | |
455 | 266 |
267 cat << END >> $NGX_MAKEFILE | |
268 | |
269 $ngx_obj: \$(CORE_DEPS)$ngx_cont$ngx_src | |
561 | 270 $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX |
455 | 271 |
272 END | |
273 | |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
274 done |
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
275 |
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
276 |
455 | 277 # the http sources |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
278 |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
279 if [ $HTTP = YES ]; then |
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
280 |
455 | 281 if test -n "$NGX_PCH"; then |
282 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" | |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
283 else |
455 | 284 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(HTTP_INCS)" |
6419 | 285 ngx_perl_cc="\$(CC) $ngx_compile_opt \$(NGX_PERL_CFLAGS)" |
681 | 286 ngx_perl_cc="$ngx_perl_cc \$(CORE_INCS) \$(HTTP_INCS)" |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
287 fi |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
281
diff
changeset
|
288 |
681 | 289 for ngx_source in $HTTP_SRCS |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
290 do |
681 | 291 ngx_src=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"` |
455 | 292 ngx_obj=`echo $ngx_src \ |
665 | 293 | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \ |
294 -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
295 -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
296 -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"` | |
455 | 297 |
681 | 298 if [ $ngx_source = src/http/modules/perl/ngx_http_perl_module.c ]; then |
299 | |
300 cat << END >> $NGX_MAKEFILE | |
301 | |
302 $ngx_obj: \$(CORE_DEPS) \$(HTTP_DEPS)$ngx_cont$ngx_src | |
303 $ngx_perl_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX | |
304 | |
305 END | |
306 else | |
307 | |
308 cat << END >> $NGX_MAKEFILE | |
455 | 309 |
310 $ngx_obj: \$(CORE_DEPS) \$(HTTP_DEPS)$ngx_cont$ngx_src | |
561 | 311 $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX |
455 | 312 |
313 END | |
681 | 314 |
315 fi | |
455 | 316 done |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
317 |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
281
diff
changeset
|
318 fi |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
319 |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
320 |
1136 | 321 # the mail sources |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
322 |
1136 | 323 if [ $MAIL = YES ]; then |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
324 |
455 | 325 if test -n "$NGX_PCH"; then |
326 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" | |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
327 else |
1136 | 328 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(MAIL_INCS)" |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
329 fi |
280
7c7183b3ea8b
nginx-0.0.2-2004-03-05-11:34:24 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
330 |
1136 | 331 for ngx_src in $MAIL_SRCS |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
332 do |
455 | 333 ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"` |
334 ngx_obj=`echo $ngx_src \ | |
665 | 335 | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \ |
336 -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
337 -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
338 -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"` | |
455 | 339 |
340 cat << END >> $NGX_MAKEFILE | |
341 | |
1136 | 342 $ngx_obj: \$(CORE_DEPS) \$(MAIL_DEPS)$ngx_cont$ngx_src |
561 | 343 $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX |
455 | 344 |
345 END | |
489 | 346 done |
455 | 347 |
489 | 348 fi |
349 | |
350 | |
6115 | 351 # the stream sources |
352 | |
353 if [ $STREAM = YES ]; then | |
354 | |
355 if test -n "$NGX_PCH"; then | |
356 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" | |
357 else | |
358 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) \$(CORE_INCS) \$(STREAM_INCS)" | |
359 fi | |
360 | |
361 for ngx_src in $STREAM_SRCS | |
362 do | |
363 ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"` | |
364 ngx_obj=`echo $ngx_src \ | |
365 | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
366 -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
367 -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
368 -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"` | |
369 | |
370 cat << END >> $NGX_MAKEFILE | |
371 | |
372 $ngx_obj: \$(CORE_DEPS) \$(STREAM_DEPS)$ngx_cont$ngx_src | |
373 $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX | |
374 | |
375 END | |
376 done | |
377 | |
378 fi | |
379 | |
380 | |
1949 | 381 # the misc sources |
382 | |
6382
392959224560
Dynamic modules: auto/module script.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6246
diff
changeset
|
383 if test -n "$MISC_SRCS"; then |
1949 | 384 |
385 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" | |
386 | |
6382
392959224560
Dynamic modules: auto/module script.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6246
diff
changeset
|
387 for ngx_src in $MISC_SRCS |
1949 | 388 do |
389 ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"` | |
390 ngx_obj=`echo $ngx_src \ | |
391 | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
392 -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
393 -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
394 -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"` | |
395 | |
396 cat << END >> $NGX_MAKEFILE | |
397 | |
398 $ngx_obj: \$(CORE_DEPS) $ngx_cont$ngx_src | |
399 $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX | |
400 | |
401 END | |
402 done | |
403 | |
404 fi | |
405 | |
406 | |
489 | 407 # the addons sources |
408 | |
409 if test -n "$NGX_ADDON_SRCS"; then | |
410 | |
411 ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" | |
412 | |
413 for ngx_src in $NGX_ADDON_SRCS | |
414 do | |
415 ngx_obj="addon/`basename \`dirname $ngx_src\``" | |
416 | |
417 ngx_obj=`echo $ngx_obj/\`basename $ngx_src\` \ | |
418 | sed -e "s/\//$ngx_regex_dirsep/g"` | |
419 | |
420 ngx_obj=`echo $ngx_obj \ | |
665 | 421 | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \ |
422 -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
423 -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
424 -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"` | |
489 | 425 |
426 ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"` | |
427 | |
428 cat << END >> $NGX_MAKEFILE | |
429 | |
430 $ngx_obj: \$(ADDON_DEPS)$ngx_cont$ngx_src | |
561 | 431 $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX |
489 | 432 |
433 END | |
455 | 434 done |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
435 |
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
297
diff
changeset
|
436 fi |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
281
diff
changeset
|
437 |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
281
diff
changeset
|
438 |
593 | 439 # the addons config.make |
440 | |
6416
35487ea55cb6
Dynamic modules: make sure to call config.make for dynamic addons.
Ruslan Ermilov <ru@nginx.com>
parents:
6408
diff
changeset
|
441 if test -n "$NGX_ADDONS$DYNAMIC_ADDONS"; then |
593 | 442 |
6416
35487ea55cb6
Dynamic modules: make sure to call config.make for dynamic addons.
Ruslan Ermilov <ru@nginx.com>
parents:
6408
diff
changeset
|
443 for ngx_addon_dir in $NGX_ADDONS $DYNAMIC_ADDONS |
593 | 444 do |
445 if test -f $ngx_addon_dir/config.make; then | |
446 . $ngx_addon_dir/config.make | |
447 fi | |
448 done | |
449 fi | |
450 | |
451 | |
461 | 452 # Win32 resource file |
453 | |
454 if test -n "$NGX_RES"; then | |
455 | |
456 ngx_res=`echo "$NGX_RES: $NGX_RC $NGX_ICONS" \ | |
457 | sed -e "s/\//$ngx_regex_dirsep/g"` | |
458 ngx_rcc=`echo $NGX_RCC | sed -e "s/\//$ngx_regex_dirsep/g"` | |
459 | |
460 cat << END >> $NGX_MAKEFILE | |
461 | |
462 $ngx_res | |
463 $ngx_rcc | |
464 | |
465 END | |
466 | |
467 fi | |
468 | |
469 | |
455 | 470 # the precompiled headers |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
281
diff
changeset
|
471 |
455 | 472 if test -n "$NGX_PCH"; then |
469 | 473 echo "#include <ngx_config.h>" > $NGX_OBJS/ngx_pch.c |
455 | 474 |
469 | 475 ngx_pch="src/core/ngx_config.h $OS_CONFIG $NGX_OBJS/ngx_auto_config.h" |
455 | 476 ngx_pch=`echo "$NGX_PCH: $ngx_pch" | sed -e "s/\//$ngx_regex_dirsep/g"` |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
281
diff
changeset
|
477 |
455 | 478 ngx_src="\$(CC) \$(CFLAGS) $NGX_BUILD_PCH $ngx_compile_opt \$(ALL_INCS)" |
469 | 479 ngx_src="$ngx_src $ngx_objout$NGX_OBJS/ngx_pch.obj $NGX_OBJS/ngx_pch.c" |
455 | 480 ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"` |
481 | |
482 cat << END >> $NGX_MAKEFILE | |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
281
diff
changeset
|
483 |
455 | 484 $ngx_pch |
485 $ngx_src | |
486 | |
487 END | |
488 | |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
281
diff
changeset
|
489 fi |
6383 | 490 |
491 | |
492 # dynamic modules | |
493 | |
494 if test -n "$NGX_PCH"; then | |
495 ngx_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)" | |
496 else | |
497 ngx_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(CFLAGS) \$(ALL_INCS)" | |
6419 | 498 ngx_perl_cc="\$(CC) $ngx_compile_opt $ngx_pic_opt \$(NGX_PERL_CFLAGS)" |
499 ngx_perl_cc="$ngx_perl_cc \$(ALL_INCS)" | |
6383 | 500 fi |
501 | |
502 ngx_obj_deps="\$(CORE_DEPS)" | |
503 if [ $HTTP != NO ]; then | |
504 ngx_obj_deps="$ngx_obj_deps \$(HTTP_DEPS)" | |
505 fi | |
506 if [ $MAIL != NO ]; then | |
507 ngx_obj_deps="$ngx_obj_deps \$(MAIL_DEPS)" | |
508 fi | |
509 if [ $STREAM != NO ]; then | |
510 ngx_obj_deps="$ngx_obj_deps \$(STREAM_DEPS)" | |
511 fi | |
512 | |
513 for ngx_module in $DYNAMIC_MODULES | |
514 do | |
515 eval ngx_module_srcs="\$${ngx_module}_SRCS" | |
516 eval eval ngx_module_libs="\\\"\$${ngx_module}_LIBS\\\"" | |
517 | |
518 eval ngx_module_modules="\$${ngx_module}_MODULES" | |
519 eval ngx_module_order="\$${ngx_module}_ORDER" | |
520 | |
521 ngx_modules_c=$NGX_OBJS/${ngx_module}_modules.c | |
522 | |
523 cat << END > $ngx_modules_c | |
524 | |
525 #include <ngx_config.h> | |
526 #include <ngx_core.h> | |
527 | |
528 END | |
529 | |
530 for mod in $ngx_module_modules | |
531 do | |
532 echo "extern ngx_module_t $mod;" >> $ngx_modules_c | |
533 done | |
534 | |
535 echo >> $ngx_modules_c | |
536 echo 'ngx_module_t *ngx_modules[] = {' >> $ngx_modules_c | |
537 | |
538 for mod in $ngx_module_modules | |
539 do | |
540 echo " &$mod," >> $ngx_modules_c | |
541 done | |
542 | |
543 cat << END >> $ngx_modules_c | |
544 NULL | |
545 }; | |
546 | |
547 END | |
548 | |
549 echo 'char *ngx_module_names[] = {' >> $ngx_modules_c | |
550 | |
551 for mod in $ngx_module_modules | |
552 do | |
553 echo " \"$mod\"," >> $ngx_modules_c | |
554 done | |
555 | |
556 cat << END >> $ngx_modules_c | |
557 NULL | |
558 }; | |
559 | |
560 END | |
561 | |
562 echo 'char *ngx_module_order[] = {' >> $ngx_modules_c | |
563 | |
564 for mod in $ngx_module_order | |
565 do | |
566 echo " \"$mod\"," >> $ngx_modules_c | |
567 done | |
568 | |
569 cat << END >> $ngx_modules_c | |
570 NULL | |
571 }; | |
572 | |
573 END | |
574 | |
575 ngx_modules_c=`echo $ngx_modules_c | sed -e "s/\//$ngx_regex_dirsep/g"` | |
576 | |
577 ngx_modules_obj=`echo $ngx_modules_c \ | |
578 | sed -e "s/\(.*\.\)c/\1$ngx_objext/"` | |
579 | |
580 ngx_module_objs= | |
581 for ngx_src in $ngx_module_srcs | |
582 do | |
583 case "$ngx_src" in | |
584 src/*) | |
585 ngx_obj=$ngx_src | |
586 ;; | |
587 *) | |
588 ngx_obj="addon/`basename \`dirname $ngx_src\``" | |
589 mkdir -p $NGX_OBJS/$ngx_obj | |
590 ngx_obj="$ngx_obj/`basename $ngx_src`" | |
591 ;; | |
592 esac | |
593 | |
594 ngx_module_objs="$ngx_module_objs $ngx_obj" | |
595 done | |
596 | |
597 ngx_module_objs=`echo $ngx_module_objs \ | |
598 | sed -e "s#\([^ ]*\.\)cpp#$NGX_OBJS\/\1$ngx_objext#g" \ | |
599 -e "s#\([^ ]*\.\)cc#$NGX_OBJS\/\1$ngx_objext#g" \ | |
600 -e "s#\([^ ]*\.\)c#$NGX_OBJS\/\1$ngx_objext#g" \ | |
601 -e "s#\([^ ]*\.\)S#$NGX_OBJS\/\1$ngx_objext#g"` | |
602 | |
603 ngx_deps=`echo $ngx_module_objs $ngx_modules_obj $LINK_DEPS \ | |
604 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_regex_cont\1/g" \ | |
605 -e "s/\//$ngx_regex_dirsep/g"` | |
606 | |
607 ngx_objs=`echo $ngx_module_objs $ngx_modules_obj \ | |
608 | sed -e "s/ *\([^ ][^ ]*\)/$ngx_long_regex_cont\1/g" \ | |
609 -e "s/\//$ngx_regex_dirsep/g"` | |
610 | |
6424 | 611 ngx_obj=$NGX_OBJS$ngx_dirsep$ngx_module$ngx_modext |
6383 | 612 |
613 if [ "$NGX_PLATFORM" = win32 ]; then | |
614 ngx_module_libs="$CORE_LIBS $ngx_module_libs" | |
615 fi | |
616 | |
617 ngx_libs= | |
618 if test -n "$NGX_LD_OPT$ngx_module_libs"; then | |
619 ngx_libs=`echo $NGX_LD_OPT $ngx_module_libs \ | |
620 | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"` | |
621 fi | |
622 | |
623 ngx_link=${CORE_LINK:+`echo $CORE_LINK \ | |
624 | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`} | |
625 | |
626 ngx_module_link=${MODULE_LINK:+`echo $MODULE_LINK \ | |
627 | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`} | |
628 | |
629 | |
630 cat << END >> $NGX_MAKEFILE | |
631 | |
632 modules: $ngx_obj | |
633 | |
634 $ngx_obj: $ngx_deps$ngx_spacer | |
635 \$(LINK) $ngx_long_start$ngx_binout$ngx_obj$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_module_link | |
636 $ngx_long_end | |
637 | |
638 $ngx_modules_obj: \$(CORE_DEPS)$ngx_cont$ngx_modules_c | |
639 $ngx_cc$ngx_tab$ngx_objout$ngx_modules_obj$ngx_tab$ngx_modules_c$NGX_AUX | |
640 | |
641 END | |
642 | |
6419 | 643 for ngx_source in $ngx_module_srcs |
6383 | 644 do |
6419 | 645 case "$ngx_source" in |
6383 | 646 src/*) |
6419 | 647 ngx_obj=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"` |
6383 | 648 ;; |
649 *) | |
6419 | 650 ngx_obj="addon/`basename \`dirname $ngx_source\``" |
651 ngx_obj=`echo $ngx_obj/\`basename $ngx_source\` \ | |
6383 | 652 | sed -e "s/\//$ngx_regex_dirsep/g"` |
653 ;; | |
654 esac | |
655 | |
656 ngx_obj=`echo $ngx_obj \ | |
657 | sed -e "s#^\(.*\.\)cpp\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
658 -e "s#^\(.*\.\)cc\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
659 -e "s#^\(.*\.\)c\\$#$ngx_objs_dir\1$ngx_objext#g" \ | |
660 -e "s#^\(.*\.\)S\\$#$ngx_objs_dir\1$ngx_objext#g"` | |
661 | |
6419 | 662 ngx_src=`echo $ngx_source | sed -e "s/\//$ngx_regex_dirsep/g"` |
663 | |
664 if [ $ngx_source = src/http/modules/perl/ngx_http_perl_module.c ]; then | |
665 | |
666 cat << END >> $NGX_MAKEFILE | |
6383 | 667 |
6419 | 668 $ngx_obj: $ngx_obj_deps$ngx_cont$ngx_src |
669 $ngx_perl_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX | |
670 | |
671 END | |
672 else | |
673 | |
674 cat << END >> $NGX_MAKEFILE | |
6383 | 675 |
676 $ngx_obj: $ngx_obj_deps$ngx_cont$ngx_src | |
677 $ngx_cc$ngx_tab$ngx_objout$ngx_obj$ngx_tab$ngx_src$NGX_AUX | |
678 | |
679 END | |
680 | |
6419 | 681 fi |
6383 | 682 done |
683 done |