[nginx] Dynamic modules: auto/module script.
Maxim Dounin
mdounin at mdounin.ru
Thu Feb 4 18:40:40 UTC 2016
details: http://hg.nginx.org/nginx/rev/392959224560
branches:
changeset: 6382:392959224560
user: Maxim Dounin <mdounin at mdounin.ru>
date: Thu Feb 04 18:30:21 2016 +0300
description:
Dynamic modules: auto/module script.
This script simplifies configuration of additional modules,
including 3rd party ones. The script is extensible, and
will be used to introduce dynamic linking of modules in upcoming
changes.
3rd party module config scripts are called with ngx_module_link
preset to "ADDON" - this allows config scripts to call auto/module
without ngx_module_link explicitly defined, as well as testing if
new interface is in place if compatibility with older nginx versions
is desired.
In collaboration with Ruslan Ermilov.
diffstat:
auto/make | 6 +-
auto/module | 71 ++++
auto/modules | 979 ++++++++++++++++++++++++++++++++++++++++++++++------------
auto/sources | 350 ---------------------
4 files changed, 848 insertions(+), 558 deletions(-)
diffs (truncated from 1691 to 300 lines):
diff --git a/auto/make b/auto/make
--- a/auto/make
+++ b/auto/make
@@ -148,7 +148,7 @@ END
fi
-ngx_all_srcs="$ngx_all_srcs $NGX_MISC_SRCS"
+ngx_all_srcs="$ngx_all_srcs $MISC_SRCS"
if test -n "$NGX_ADDON_SRCS"; then
@@ -365,11 +365,11 @@ fi
# the misc sources
-if test -n "$NGX_MISC_SRCS"; then
+if test -n "$MISC_SRCS"; then
ngx_cc="\$(CC) $ngx_compile_opt \$(CFLAGS) $ngx_use_pch \$(ALL_INCS)"
- for ngx_src in $NGX_MISC_SRCS
+ for ngx_src in $MISC_SRCS
do
ngx_src=`echo $ngx_src | sed -e "s/\//$ngx_regex_dirsep/g"`
ngx_obj=`echo $ngx_src \
diff --git a/auto/module b/auto/module
new file mode 100644
--- /dev/null
+++ b/auto/module
@@ -0,0 +1,71 @@
+
+# Copyright (C) Ruslan Ermilov
+# Copyright (C) Nginx, Inc.
+
+
+case $ngx_module_type in
+ HTTP_*) ngx_var=HTTP ;;
+ *) ngx_var=$ngx_module_type ;;
+esac
+
+
+if [ "$ngx_module_link" = YES ]; then
+
+ eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \
+ $ngx_module_name\"
+
+ eval ${ngx_var}_SRCS=\"\$${ngx_var}_SRCS $ngx_module_srcs\"
+
+ if test -n "$ngx_module_incs"; then
+ eval ${ngx_var}_INCS=\"\$${ngx_var}_INCS $ngx_module_incs\"
+ fi
+
+ if test -n "$ngx_module_deps"; then
+ eval ${ngx_var}_DEPS=\"\$${ngx_var}_DEPS $ngx_module_deps\"
+ fi
+
+ for lib in $ngx_module_libs
+ do
+ case $lib in
+
+ PCRE | OPENSSL | MD5 | SHA1 | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP)
+ eval USE_${lib}=YES
+ ;;
+
+ *)
+ CORE_LIBS="$CORE_LIBS $lib"
+ ;;
+
+ esac
+ done
+
+elif [ "$ngx_module_link" = ADDON ]; then
+
+ eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \
+ $ngx_module_name\"
+
+ NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_module_srcs"
+
+ if test -n "$ngx_module_incs"; then
+ eval ${ngx_var}_INCS=\"\$${ngx_var}_INCS $ngx_module_incs\"
+ fi
+
+ if test -n "$ngx_module_deps"; then
+ NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_module_deps"
+ fi
+
+ for lib in $ngx_module_libs
+ do
+ case $lib in
+
+ PCRE | OPENSSL | MD5 | SHA1 | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP)
+ eval USE_${lib}=YES
+ ;;
+
+ *)
+ CORE_LIBS="$CORE_LIBS $lib"
+ ;;
+
+ esac
+ done
+fi
diff --git a/auto/modules b/auto/modules
--- a/auto/modules
+++ b/auto/modules
@@ -55,6 +55,45 @@ if [ $NGX_TEST_BUILD_SOLARIS_SENDFILEV =
fi
+HTTP_MODULES=
+HTTP_DEPS=
+HTTP_INCS=
+
+ngx_module_type=HTTP
+
+if :; then
+ ngx_module_name="ngx_http_module \
+ ngx_http_core_module \
+ ngx_http_log_module \
+ ngx_http_upstream_module"
+ ngx_module_incs="src/http src/http/modules"
+ ngx_module_deps="src/http/ngx_http.h \
+ src/http/ngx_http_request.h \
+ src/http/ngx_http_config.h \
+ src/http/ngx_http_core_module.h \
+ src/http/ngx_http_cache.h \
+ src/http/ngx_http_variables.h \
+ src/http/ngx_http_script.h \
+ src/http/ngx_http_upstream.h \
+ src/http/ngx_http_upstream_round_robin.h"
+ ngx_module_srcs="src/http/ngx_http.c \
+ src/http/ngx_http_core_module.c \
+ src/http/ngx_http_special_response.c \
+ src/http/ngx_http_request.c \
+ src/http/ngx_http_parse.c \
+ src/http/modules/ngx_http_log_module.c \
+ src/http/ngx_http_request_body.c \
+ src/http/ngx_http_variables.c \
+ src/http/ngx_http_script.c \
+ src/http/ngx_http_upstream.c \
+ src/http/ngx_http_upstream_round_robin.c"
+ ngx_module_libs=
+ ngx_module_link=YES
+
+ . auto/module
+fi
+
+
if [ $HTTP != YES ]; then
have=NGX_CRYPT . auto/nohave
CRYPT_LIB=
@@ -117,304 +156,872 @@ fi
# ngx_http_not_modified_filter
# ngx_http_slice_filter
-HTTP_FILTER_MODULES="$HTTP_WRITE_FILTER_MODULE \
- $HTTP_HEADER_FILTER_MODULE \
- $HTTP_CHUNKED_FILTER_MODULE"
+ngx_module_type=HTTP_FILTER
+HTTP_FILTER_MODULES=
+
+if :; then
+ ngx_module_name=ngx_http_write_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/ngx_http_write_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
+
+ . auto/module
+fi
+
+if :; then
+ ngx_module_name=ngx_http_header_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/ngx_http_header_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
+
+ . auto/module
+fi
+
+if :; then
+ ngx_module_name=ngx_http_chunked_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_chunked_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
+
+ . auto/module
+fi
if [ $HTTP_V2 = YES ]; then
- HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_V2_FILTER_MODULE"
+ ngx_module_name=ngx_http_v2_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/v2/ngx_http_v2_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_V2
+
+ . auto/module
fi
-HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_RANGE_HEADER_FILTER_MODULE"
+if :; then
+ ngx_module_name=ngx_http_range_header_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_range_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=YES
+
+ . auto/module
+fi
if [ $HTTP_GZIP = YES ]; then
have=NGX_HTTP_GZIP . auto/have
USE_ZLIB=YES
- HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_GZIP_FILTER_MODULE"
- HTTP_SRCS="$HTTP_SRCS $HTTP_GZIP_SRCS"
+
+ ngx_module_name=ngx_http_gzip_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_gzip_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_GZIP
+
+ . auto/module
fi
if [ $HTTP_POSTPONE = YES ]; then
- HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_POSTPONE_FILTER_MODULE"
- HTTP_SRCS="$HTTP_SRCS $HTTP_POSTPONE_FILTER_SRCS"
+ ngx_module_name=ngx_http_postpone_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/ngx_http_postpone_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_POSTPONE
+
+ . auto/module
fi
if [ $HTTP_SSI = YES ]; then
have=NGX_HTTP_SSI . auto/have
- HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_SSI_FILTER_MODULE"
- HTTP_DEPS="$HTTP_DEPS $HTTP_SSI_DEPS"
- HTTP_SRCS="$HTTP_SRCS $HTTP_SSI_SRCS"
+
+ ngx_module_name=ngx_http_ssi_filter_module
+ ngx_module_incs=
+ ngx_module_deps=src/http/modules/ngx_http_ssi_filter_module.h
+ ngx_module_srcs=src/http/modules/ngx_http_ssi_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_SSI
+
+ . auto/module
fi
if [ $HTTP_CHARSET = YES ]; then
- HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_CHARSET_FILTER_MODULE"
- HTTP_SRCS="$HTTP_SRCS $HTTP_CHARSET_SRCS"
+ ngx_module_name=ngx_http_charset_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_charset_filter_module.c
+ ngx_module_libs=
+ ngx_module_link=$HTTP_CHARSET
+
+ . auto/module
fi
if [ $HTTP_XSLT = YES ]; then
- USE_LIBXSLT=YES
- HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_XSLT_FILTER_MODULE"
- HTTP_SRCS="$HTTP_SRCS $HTTP_XSLT_SRCS"
+ ngx_module_name=ngx_http_xslt_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_xslt_filter_module.c
+ ngx_module_libs=LIBXSLT
+ ngx_module_link=$HTTP_XSLT
+
+ . auto/module
fi
if [ $HTTP_IMAGE_FILTER = YES ]; then
- USE_LIBGD=YES
- HTTP_FILTER_MODULES="$HTTP_FILTER_MODULES $HTTP_IMAGE_FILTER_MODULE"
- HTTP_SRCS="$HTTP_SRCS $HTTP_IMAGE_SRCS"
+ ngx_module_name=ngx_http_image_filter_module
+ ngx_module_incs=
+ ngx_module_deps=
+ ngx_module_srcs=src/http/modules/ngx_http_image_filter_module.c
+ ngx_module_libs=LIBGD
+ ngx_module_link=$HTTP_IMAGE_FILTER
More information about the nginx-devel
mailing list