diff options
| author | Maxim Dounin <mdounin@mdounin.ru> | 2016-02-04 20:25:29 +0300 |
|---|---|---|
| committer | Maxim Dounin <mdounin@mdounin.ru> | 2016-02-04 20:25:29 +0300 |
| commit | 97f59dda09f139fbf18d6a20097d3337a2489b3c (patch) | |
| tree | 14bdb60c3fbb499c15dcd21267d847af4c8f4b5b /auto/module | |
| parent | 0805ba14e7a25bc61627d6ece2a79243fe0b640a (diff) | |
| download | nginx-97f59dda09f139fbf18d6a20097d3337a2489b3c.tar.gz nginx-97f59dda09f139fbf18d6a20097d3337a2489b3c.tar.bz2 | |
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.
Diffstat (limited to 'auto/module')
| -rw-r--r-- | auto/module | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/auto/module b/auto/module index 33ee18126..908f0c6e6 100644 --- a/auto/module +++ b/auto/module @@ -9,7 +9,58 @@ case $ngx_module_type in esac -if [ "$ngx_module_link" = YES ]; then +if [ "$ngx_module_link" = DYNAMIC ]; then + + for ngx_module in $ngx_module_name; do + # extract the first name + break + done + + DYNAMIC_MODULES="$DYNAMIC_MODULES $ngx_module" + eval ${ngx_module}_SRCS=\"$ngx_module_srcs\" + + eval ${ngx_module}_MODULES=\"$ngx_module_name\" + + if [ -z "$ngx_module_order" -a \ + \( "$ngx_module_type" = "HTTP_FILTER" \ + -o "$ngx_module_type" = "HTTP_AUX_FILTER" \) ] + then + eval ${ngx_module}_ORDER=\"$ngx_module_name \ + ngx_http_copy_filter_module\" + else + eval ${ngx_module}_ORDER=\"$ngx_module_order\" + fi + + if test -n "$ngx_module_incs"; then + CORE_INCS="$CORE_INCS $ngx_module_incs" + fi + + libs= + for lib in $ngx_module_libs + do + case $lib in + + LIBXSLT | LIBGD | GEOIP) + libs="$libs \$NGX_LIB_$lib" + + if eval [ "\$USE_${lib}" = NO ] ; then + eval USE_${lib}=DYNAMIC + fi + ;; + + PCRE | OPENSSL | MD5 | SHA1 | ZLIB | PERL) + eval USE_${lib}=YES + ;; + + *) + libs="$libs $lib" + ;; + + esac + done + eval ${ngx_module}_LIBS=\'$libs\' + +elif [ "$ngx_module_link" = YES ]; then eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \ $ngx_module_name\" |
