mirror of
https://github.com/nginx/nginx.git
synced 2025-02-25 18:55:26 -06:00
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.
This commit is contained in:
127
auto/modules
127
auto/modules
@@ -159,6 +159,35 @@ fi
|
||||
ngx_module_type=HTTP_FILTER
|
||||
HTTP_FILTER_MODULES=
|
||||
|
||||
ngx_module_order="ngx_http_static_module \
|
||||
ngx_http_gzip_static_module \
|
||||
ngx_http_dav_module \
|
||||
ngx_http_autoindex_module \
|
||||
ngx_http_index_module \
|
||||
ngx_http_random_index_module \
|
||||
ngx_http_access_module \
|
||||
ngx_http_realip_module \
|
||||
ngx_http_write_filter_module \
|
||||
ngx_http_header_filter_module \
|
||||
ngx_http_chunked_filter_module \
|
||||
ngx_http_v2_filter_module \
|
||||
ngx_http_range_header_filter_module \
|
||||
ngx_http_gzip_filter_module \
|
||||
ngx_http_postpone_filter_module \
|
||||
ngx_http_ssi_filter_module \
|
||||
ngx_http_charset_filter_module \
|
||||
ngx_http_xslt_filter_module \
|
||||
ngx_http_image_filter_module \
|
||||
ngx_http_sub_filter_module \
|
||||
ngx_http_addition_filter_module \
|
||||
ngx_http_gunzip_filter_module \
|
||||
ngx_http_userid_filter_module \
|
||||
ngx_http_headers_filter_module \
|
||||
ngx_http_copy_filter_module \
|
||||
ngx_http_range_body_filter_module \
|
||||
ngx_http_not_modified_filter_module \
|
||||
ngx_http_slice_filter_module"
|
||||
|
||||
if :; then
|
||||
ngx_module_name=ngx_http_write_filter_module
|
||||
ngx_module_incs=
|
||||
@@ -263,7 +292,7 @@ if [ $HTTP_CHARSET = YES ]; then
|
||||
. auto/module
|
||||
fi
|
||||
|
||||
if [ $HTTP_XSLT = YES ]; then
|
||||
if [ $HTTP_XSLT != NO ]; then
|
||||
ngx_module_name=ngx_http_xslt_filter_module
|
||||
ngx_module_incs=
|
||||
ngx_module_deps=
|
||||
@@ -274,7 +303,7 @@ if [ $HTTP_XSLT = YES ]; then
|
||||
. auto/module
|
||||
fi
|
||||
|
||||
if [ $HTTP_IMAGE_FILTER = YES ]; then
|
||||
if [ $HTTP_IMAGE_FILTER != NO ]; then
|
||||
ngx_module_name=ngx_http_image_filter_module
|
||||
ngx_module_incs=
|
||||
ngx_module_deps=
|
||||
@@ -579,14 +608,14 @@ if [ $HTTP_GEO = YES ]; then
|
||||
. auto/module
|
||||
fi
|
||||
|
||||
if [ $HTTP_GEOIP = YES ]; then
|
||||
if [ $HTTP_GEOIP != NO ]; then
|
||||
have=NGX_HTTP_X_FORWARDED_FOR . auto/have
|
||||
|
||||
ngx_module_name=ngx_http_geoip_module
|
||||
ngx_module_incs=
|
||||
ngx_module_deps=
|
||||
ngx_module_srcs=src/http/modules/ngx_http_geoip_module.c
|
||||
ngx_module_libs=
|
||||
ngx_module_libs=GEOIP
|
||||
ngx_module_link=$HTTP_GEOIP
|
||||
|
||||
. auto/module
|
||||
@@ -864,7 +893,7 @@ if [ $HTTP_STUB_STATUS = YES ]; then
|
||||
fi
|
||||
|
||||
|
||||
if [ $MAIL == YES ]; then
|
||||
if [ $MAIL != NO ]; then
|
||||
MAIL_MODULES=
|
||||
MAIL_DEPS=
|
||||
MAIL_INCS=
|
||||
@@ -873,6 +902,8 @@ if [ $MAIL == YES ]; then
|
||||
ngx_module_libs=
|
||||
ngx_module_link=YES
|
||||
|
||||
ngx_module_order=
|
||||
|
||||
ngx_module_name="ngx_mail_module ngx_mail_core_module"
|
||||
ngx_module_incs="src/mail"
|
||||
ngx_module_deps="src/mail/ngx_mail.h"
|
||||
@@ -937,7 +968,7 @@ if [ $MAIL == YES ]; then
|
||||
fi
|
||||
|
||||
|
||||
if [ $STREAM = YES ]; then
|
||||
if [ $STREAM != NO ]; then
|
||||
STREAM_MODULES=
|
||||
STREAM_DEPS=
|
||||
STREAM_INCS=
|
||||
@@ -948,6 +979,8 @@ if [ $STREAM = YES ]; then
|
||||
ngx_module_libs=
|
||||
ngx_module_link=YES
|
||||
|
||||
ngx_module_order=
|
||||
|
||||
ngx_module_name="ngx_stream_module \
|
||||
ngx_stream_core_module \
|
||||
ngx_stream_proxy_module \
|
||||
@@ -1041,6 +1074,7 @@ if test -n "$NGX_ADDONS"; then
|
||||
ngx_module_deps=
|
||||
ngx_module_srcs=
|
||||
ngx_module_libs=
|
||||
ngx_module_order=
|
||||
ngx_module_link=ADDON
|
||||
|
||||
if test -f $ngx_addon_dir/config; then
|
||||
@@ -1056,6 +1090,36 @@ if test -n "$NGX_ADDONS"; then
|
||||
fi
|
||||
|
||||
|
||||
if test -n "$DYNAMIC_ADDONS"; then
|
||||
|
||||
echo configuring additional dynamic modules
|
||||
|
||||
for ngx_addon_dir in $DYNAMIC_ADDONS
|
||||
do
|
||||
echo "adding module in $ngx_addon_dir"
|
||||
|
||||
ngx_module_type=
|
||||
ngx_module_name=
|
||||
ngx_module_incs=
|
||||
ngx_module_deps=
|
||||
ngx_module_srcs=
|
||||
ngx_module_libs=
|
||||
ngx_module_order=
|
||||
ngx_module_link=DYNAMIC
|
||||
|
||||
if test -f $ngx_addon_dir/config; then
|
||||
. $ngx_addon_dir/config
|
||||
|
||||
echo " + $ngx_addon_name was configured"
|
||||
|
||||
else
|
||||
echo "$0: error: no $ngx_addon_dir/config was found"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
if [ $USE_OPENSSL = YES ]; then
|
||||
ngx_module_type=CORE
|
||||
ngx_module_name=ngx_openssl_module
|
||||
@@ -1065,6 +1129,7 @@ if [ $USE_OPENSSL = YES ]; then
|
||||
src/event/ngx_event_openssl_stapling.c"
|
||||
ngx_module_libs=
|
||||
ngx_module_link=YES
|
||||
ngx_module_order=
|
||||
|
||||
. auto/module
|
||||
fi
|
||||
@@ -1078,6 +1143,7 @@ if [ $USE_PCRE = YES ]; then
|
||||
ngx_module_srcs=src/core/ngx_regex.c
|
||||
ngx_module_libs=
|
||||
ngx_module_link=YES
|
||||
ngx_module_order=
|
||||
|
||||
. auto/module
|
||||
fi
|
||||
@@ -1100,14 +1166,42 @@ if [ $HTTP = YES ]; then
|
||||
fi
|
||||
|
||||
|
||||
if [ $MAIL = YES ]; then
|
||||
modules="$modules $MAIL_MODULES"
|
||||
if [ $MAIL != NO ]; then
|
||||
|
||||
if [ $MAIL = YES ]; then
|
||||
modules="$modules $MAIL_MODULES"
|
||||
|
||||
elif [ $MAIL = DYNAMIC ]; then
|
||||
ngx_module_name=$MAIL_MODULES
|
||||
ngx_module_incs=
|
||||
ngx_module_deps=$MAIL_DEPS
|
||||
ngx_module_srcs=$MAIL_SRCS
|
||||
ngx_module_libs=
|
||||
ngx_module_link=DYNAMIC
|
||||
|
||||
. auto/module
|
||||
fi
|
||||
|
||||
NGX_ADDON_DEPS="$NGX_ADDON_DEPS \$(MAIL_DEPS)"
|
||||
fi
|
||||
|
||||
|
||||
if [ $STREAM = YES ]; then
|
||||
modules="$modules $STREAM_MODULES"
|
||||
if [ $STREAM != NO ]; then
|
||||
|
||||
if [ $STREAM = YES ]; then
|
||||
modules="$modules $STREAM_MODULES"
|
||||
|
||||
elif [ $STREAM = DYNAMIC ]; then
|
||||
ngx_module_name=$STREAM_MODULES
|
||||
ngx_module_incs=
|
||||
ngx_module_deps=$STREAM_DEPS
|
||||
ngx_module_srcs=$STREAM_SRCS
|
||||
ngx_module_libs=
|
||||
ngx_module_link=DYNAMIC
|
||||
|
||||
. auto/module
|
||||
fi
|
||||
|
||||
NGX_ADDON_DEPS="$NGX_ADDON_DEPS \$(STREAM_DEPS)"
|
||||
fi
|
||||
|
||||
@@ -1167,3 +1261,16 @@ cat << END >> $NGX_MODULES_C
|
||||
};
|
||||
|
||||
END
|
||||
|
||||
echo 'char *ngx_module_names[] = {' >> $NGX_MODULES_C
|
||||
|
||||
for mod in $modules
|
||||
do
|
||||
echo " \"$mod\"," >> $NGX_MODULES_C
|
||||
done
|
||||
|
||||
cat << END >> $NGX_MODULES_C
|
||||
NULL
|
||||
};
|
||||
|
||||
END
|
||||
|
||||
Reference in New Issue
Block a user