comparison src/core/ngx_module.h @ 6383:85dea406e18f

Dynamic modules. The auto/module script is extended to understand ngx_module_link=DYNAMIC. When set, it links the module as a shared object rather than statically into nginx binary. The module can later be loaded using the "load_module" directive. New auto/module parameter ngx_module_order allows to define module loading order in complex cases. By default the order is set based on ngx_module_type. 3rd party modules can be compiled dynamically using the --add-dynamic-module configure option, which will preset ngx_module_link to "DYNAMIC" before calling the module config script. Win32 support is rudimentary, and only works when using MinGW gcc (which is able to handle exports/imports automatically). In collaboration with Ruslan Ermilov.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 04 Feb 2016 20:25:29 +0300
parents 0f203a2af17c
children ff1e625ae55b
comparison
equal deleted inserted replaced
6382:392959224560 6383:85dea406e18f
10 #define _NGX_MODULE_H_INCLUDED_ 10 #define _NGX_MODULE_H_INCLUDED_
11 11
12 12
13 #include <ngx_config.h> 13 #include <ngx_config.h>
14 #include <ngx_core.h> 14 #include <ngx_core.h>
15 15 #include <nginx.h>
16 16
17 #define NGX_MODULE_V1 0, 0, 0, 0, 0, 0, 1 17
18 #define NGX_MODULE_UNSET_INDEX (ngx_uint_t) -1
19
20
21 #define NGX_MODULE_SIGNATURE_0 \
22 ngx_value(NGX_PTR_SIZE) "," \
23 ngx_value(NGX_SIG_ATOMIC_T_SIZE) "," \
24 ngx_value(NGX_TIME_T_SIZE) ","
25
26 #if (NGX_HAVE_KQUEUE)
27 #define NGX_MODULE_SIGNATURE_1 "1"
28 #else
29 #define NGX_MODULE_SIGNATURE_1 "0"
30 #endif
31
32 #if (NGX_HAVE_IOCP)
33 #define NGX_MODULE_SIGNATURE_2 "1"
34 #else
35 #define NGX_MODULE_SIGNATURE_2 "0"
36 #endif
37
38 #if (NGX_HAVE_FILE_AIO)
39 #define NGX_MODULE_SIGNATURE_3 "1"
40 #else
41 #define NGX_MODULE_SIGNATURE_3 "0"
42 #endif
43
44 #if (NGX_HAVE_AIO_SENDFILE)
45 #define NGX_MODULE_SIGNATURE_4 "1"
46 #else
47 #define NGX_MODULE_SIGNATURE_4 "0"
48 #endif
49
50 #if (NGX_HAVE_EVENTFD)
51 #define NGX_MODULE_SIGNATURE_5 "1"
52 #else
53 #define NGX_MODULE_SIGNATURE_5 "0"
54 #endif
55
56 #if (NGX_HAVE_EPOLL)
57 #define NGX_MODULE_SIGNATURE_6 "1"
58 #else
59 #define NGX_MODULE_SIGNATURE_6 "0"
60 #endif
61
62 #if (NGX_HAVE_KEEPALIVE_TUNABLE)
63 #define NGX_MODULE_SIGNATURE_7 "1"
64 #else
65 #define NGX_MODULE_SIGNATURE_7 "0"
66 #endif
67
68 #if (NGX_HAVE_INET6)
69 #define NGX_MODULE_SIGNATURE_8 "1"
70 #else
71 #define NGX_MODULE_SIGNATURE_8 "0"
72 #endif
73
74 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
75 #define NGX_MODULE_SIGNATURE_9 "1"
76 #else
77 #define NGX_MODULE_SIGNATURE_9 "0"
78 #endif
79
80 #if (NGX_HAVE_REUSEPORT)
81 #define NGX_MODULE_SIGNATURE_10 "1"
82 #else
83 #define NGX_MODULE_SIGNATURE_10 "0"
84 #endif
85
86 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
87 #define NGX_MODULE_SIGNATURE_11 "1"
88 #else
89 #define NGX_MODULE_SIGNATURE_11 "0"
90 #endif
91
92 #if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT)
93 #define NGX_MODULE_SIGNATURE_12 "1"
94 #else
95 #define NGX_MODULE_SIGNATURE_12 "0"
96 #endif
97
98 #if (NGX_HAVE_SETFIB)
99 #define NGX_MODULE_SIGNATURE_13 "1"
100 #else
101 #define NGX_MODULE_SIGNATURE_13 "0"
102 #endif
103
104 #if (NGX_HAVE_TCP_FASTOPEN)
105 #define NGX_MODULE_SIGNATURE_14 "1"
106 #else
107 #define NGX_MODULE_SIGNATURE_14 "0"
108 #endif
109
110 #if (NGX_HAVE_UNIX_DOMAIN)
111 #define NGX_MODULE_SIGNATURE_15 "1"
112 #else
113 #define NGX_MODULE_SIGNATURE_15 "0"
114 #endif
115
116 #if (NGX_HAVE_VARIADIC_MACROS)
117 #define NGX_MODULE_SIGNATURE_16 "1"
118 #else
119 #define NGX_MODULE_SIGNATURE_16 "0"
120 #endif
121
122 #if (NGX_HAVE_MD5)
123 #define NGX_MODULE_SIGNATURE_17 "1"
124 #else
125 #define NGX_MODULE_SIGNATURE_17 "0"
126 #endif
127
128 #if (NGX_HAVE_SHA1)
129 #define NGX_MODULE_SIGNATURE_18 "1"
130 #else
131 #define NGX_MODULE_SIGNATURE_18 "0"
132 #endif
133
134 #if (NGX_HAVE_OPENAT)
135 #define NGX_MODULE_SIGNATURE_19 "1"
136 #else
137 #define NGX_MODULE_SIGNATURE_19 "0"
138 #endif
139
140 #if (NGX_HAVE_ATOMIC_OPS)
141 #define NGX_MODULE_SIGNATURE_20 "1"
142 #else
143 #define NGX_MODULE_SIGNATURE_20 "0"
144 #endif
145
146 #if (NGX_HAVE_POSIX_SEM)
147 #define NGX_MODULE_SIGNATURE_21 "1"
148 #else
149 #define NGX_MODULE_SIGNATURE_21 "0"
150 #endif
151
152 #if (NGX_THREADS)
153 #define NGX_MODULE_SIGNATURE_22 "1"
154 #else
155 #define NGX_MODULE_SIGNATURE_22 "0"
156 #endif
157
158 #if (NGX_PCRE)
159 #define NGX_MODULE_SIGNATURE_23 "1"
160 #else
161 #define NGX_MODULE_SIGNATURE_23 "0"
162 #endif
163
164 #if (NGX_HTTP_SSL)
165 #define NGX_MODULE_SIGNATURE_24 "1"
166 #else
167 #define NGX_MODULE_SIGNATURE_24 "0"
168 #endif
169
170 #if (NGX_HTTP_V2)
171 #define NGX_MODULE_SIGNATURE_25 "1"
172 #else
173 #define NGX_MODULE_SIGNATURE_25 "0"
174 #endif
175
176 #if (NGX_HTTP_GZIP)
177 #define NGX_MODULE_SIGNATURE_26 "1"
178 #else
179 #define NGX_MODULE_SIGNATURE_26 "0"
180 #endif
181
182 #if (NGX_HTTP_DEGRADATION)
183 #define NGX_MODULE_SIGNATURE_27 "1"
184 #else
185 #define NGX_MODULE_SIGNATURE_27 "0"
186 #endif
187
188 #if (NGX_HTTP_X_FORWARDED_FOR)
189 #define NGX_MODULE_SIGNATURE_28 "1"
190 #else
191 #define NGX_MODULE_SIGNATURE_28 "0"
192 #endif
193
194 #if (NGX_HTTP_REALIP)
195 #define NGX_MODULE_SIGNATURE_29 "1"
196 #else
197 #define NGX_MODULE_SIGNATURE_29 "0"
198 #endif
199
200 #if (NGX_HTTP_HEADERS)
201 #define NGX_MODULE_SIGNATURE_30 "1"
202 #else
203 #define NGX_MODULE_SIGNATURE_30 "0"
204 #endif
205
206 #if (NGX_HTTP_DAV)
207 #define NGX_MODULE_SIGNATURE_31 "1"
208 #else
209 #define NGX_MODULE_SIGNATURE_31 "0"
210 #endif
211
212 #if (NGX_HTTP_CACHE)
213 #define NGX_MODULE_SIGNATURE_32 "1"
214 #else
215 #define NGX_MODULE_SIGNATURE_32 "0"
216 #endif
217
218 #if (NGX_HTTP_UPSTREAM_ZONE)
219 #define NGX_MODULE_SIGNATURE_33 "1"
220 #else
221 #define NGX_MODULE_SIGNATURE_33 "0"
222 #endif
223
224 #define NGX_MODULE_SIGNATURE \
225 NGX_MODULE_SIGNATURE_0 NGX_MODULE_SIGNATURE_1 NGX_MODULE_SIGNATURE_2 \
226 NGX_MODULE_SIGNATURE_3 NGX_MODULE_SIGNATURE_4 NGX_MODULE_SIGNATURE_5 \
227 NGX_MODULE_SIGNATURE_6 NGX_MODULE_SIGNATURE_7 NGX_MODULE_SIGNATURE_8 \
228 NGX_MODULE_SIGNATURE_9 NGX_MODULE_SIGNATURE_10 NGX_MODULE_SIGNATURE_11 \
229 NGX_MODULE_SIGNATURE_12 NGX_MODULE_SIGNATURE_13 NGX_MODULE_SIGNATURE_14 \
230 NGX_MODULE_SIGNATURE_15 NGX_MODULE_SIGNATURE_16 NGX_MODULE_SIGNATURE_17 \
231 NGX_MODULE_SIGNATURE_18 NGX_MODULE_SIGNATURE_19 NGX_MODULE_SIGNATURE_20 \
232 NGX_MODULE_SIGNATURE_21 NGX_MODULE_SIGNATURE_22 NGX_MODULE_SIGNATURE_23 \
233 NGX_MODULE_SIGNATURE_24 NGX_MODULE_SIGNATURE_25 NGX_MODULE_SIGNATURE_26 \
234 NGX_MODULE_SIGNATURE_27 NGX_MODULE_SIGNATURE_28 NGX_MODULE_SIGNATURE_29 \
235 NGX_MODULE_SIGNATURE_30 NGX_MODULE_SIGNATURE_31 NGX_MODULE_SIGNATURE_32 \
236 NGX_MODULE_SIGNATURE_33
237
238
239 #define NGX_MODULE_V1 \
240 NGX_MODULE_UNSET_INDEX, NGX_MODULE_UNSET_INDEX, \
241 NULL, 0, 0, nginx_version, NGX_MODULE_SIGNATURE
242
18 #define NGX_MODULE_V1_PADDING 0, 0, 0, 0, 0, 0, 0, 0 243 #define NGX_MODULE_V1_PADDING 0, 0, 0, 0, 0, 0, 0, 0
19 244
20 245
21 struct ngx_module_s { 246 struct ngx_module_s {
22 ngx_uint_t ctx_index; 247 ngx_uint_t ctx_index;
23 ngx_uint_t index; 248 ngx_uint_t index;
24 249
250 char *name;
251
25 ngx_uint_t spare0; 252 ngx_uint_t spare0;
26 ngx_uint_t spare1; 253 ngx_uint_t spare1;
27 ngx_uint_t spare2;
28 ngx_uint_t spare3;
29 254
30 ngx_uint_t version; 255 ngx_uint_t version;
256 char *signature;
31 257
32 void *ctx; 258 void *ctx;
33 ngx_command_t *commands; 259 ngx_command_t *commands;
34 ngx_uint_t type; 260 ngx_uint_t type;
35 261
61 char *(*init_conf)(ngx_cycle_t *cycle, void *conf); 287 char *(*init_conf)(ngx_cycle_t *cycle, void *conf);
62 } ngx_core_module_t; 288 } ngx_core_module_t;
63 289
64 290
65 ngx_int_t ngx_preinit_modules(); 291 ngx_int_t ngx_preinit_modules();
292 ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle);
66 ngx_int_t ngx_init_modules(ngx_cycle_t *cycle); 293 ngx_int_t ngx_init_modules(ngx_cycle_t *cycle);
67 ngx_int_t ngx_count_modules(ngx_cycle_t *cycle, ngx_uint_t type); 294 ngx_int_t ngx_count_modules(ngx_cycle_t *cycle, ngx_uint_t type);
68 295
69 296
297 ngx_int_t ngx_add_module(ngx_conf_t *cf, ngx_str_t *file,
298 ngx_module_t *module, char **order);
299
300
70 extern ngx_module_t *ngx_modules[]; 301 extern ngx_module_t *ngx_modules[];
71 extern ngx_uint_t ngx_max_module; 302 extern ngx_uint_t ngx_max_module;
72 303
304 extern char *ngx_module_names[];
305
73 306
74 #endif /* _NGX_MODULE_H_INCLUDED_ */ 307 #endif /* _NGX_MODULE_H_INCLUDED_ */