Brotli: add support for dynamic modules.

Fixes build with nginx-1.9.11+.

Change-Id: I34f0b2e49eb5923f6cac1062df404728c455b21b
Signed-off-by: Piotr Sikora <piotrsikora@google.com>
Reviewed-on: https://nginx-review.googlesource.com/1079
Reviewed-by: Martin Maly <mmaly@google.com>
diff --git a/config b/config
index 90c04e1..9f4d15f 100644
--- a/config
+++ b/config
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 Google Inc.
+# Copyright (C) 2015-2016 Google Inc.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -28,11 +28,23 @@
 # static module (no dependencies)
 #
 
-HTTP_MODULES="$HTTP_MODULES \
-              ngx_http_brotli_static_module"
+if [ -n "$ngx_module_link" ]; then
+    # nginx-1.9.11+
+    ngx_module_type=HTTP
+    ngx_module_name=ngx_http_brotli_static_module
+    ngx_module_incs=
+    ngx_module_deps=
+    ngx_module_srcs="$ngx_addon_dir/src/ngx_http_brotli_static_module.c"
+    ngx_module_libs=
 
-NGX_ADDON_SRCS="$NGX_ADDON_SRCS \
-                $ngx_addon_dir/src/ngx_http_brotli_static_module.c"
+    . auto/module
+else
+    HTTP_MODULES="$HTTP_MODULES \
+                  ngx_http_brotli_static_module"
+
+    NGX_ADDON_SRCS="$NGX_ADDON_SRCS \
+                    $ngx_addon_dir/src/ngx_http_brotli_static_module.c"
+fi
 
 have=NGX_HTTP_GZIP . auto/have
 have=NGX_HTTP_BROTLI_STATIC . auto/have
@@ -102,21 +114,60 @@
     exit 1
 fi
 
-CORE_INCS="$CORE_INCS $ngx_feature_path"
-CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
-
 if [ $HTTP_GZIP = YES ]; then
-    module=$HTTP_GZIP_FILTER_MODULE
+    next=ngx_http_gzip_filter_module
 elif echo $HTTP_FILTER_MODULES | grep ngx_pagespeed_etag_filter >/dev/null; then
-    module=ngx_pagespeed_etag_filter
+    next=ngx_pagespeed_etag_filter
 else
-    module=$HTTP_RANGE_HEADER_FILTER_MODULE
+    next=ngx_http_range_header_filter_module
 fi
 
-HTTP_FILTER_MODULES=`echo $HTTP_FILTER_MODULES \
-                     | sed "s/$module/$module ngx_http_brotli_filter_module/"`
+if [ -n "$ngx_module_link" ]; then
+    # nginx-1.9.11+
+    ngx_module_type=HTTP_FILTER
+    ngx_module_name=ngx_http_brotli_filter_module
+    ngx_module_incs="$ngx_feature_path"
+    ngx_module_deps=
+    ngx_module_srcs="$ngx_addon_dir/src/ngx_http_brotli_filter_module.cc"
+    ngx_module_libs="$ngx_feature_libs"
+    ngx_module_order="$ngx_module_name \
+                      ngx_pagespeed \
+                      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_ADDON_SRCS="$NGX_ADDON_SRCS \
-                $ngx_addon_dir/src/ngx_http_brotli_filter_module.cc"
+    . auto/module
+
+    if [ $ngx_module_link != DYNAMIC ]; then
+        # ngx_module_order doesn't work with static modules,
+        # so we must re-order filters here.
+        HTTP_FILTER_MODULES=`echo $HTTP_FILTER_MODULES \
+                             | sed "s/$ngx_module_name//" \
+                             | sed "s/$next/$next $ngx_module_name/"`
+    fi
+else
+    CORE_INCS="$CORE_INCS $ngx_feature_path"
+    CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
+
+    HTTP_FILTER_MODULES=`echo $HTTP_FILTER_MODULES \
+                         | sed "s/$next/$next ngx_http_brotli_filter_module/"`
+
+    NGX_ADDON_SRCS="$NGX_ADDON_SRCS \
+                    $ngx_addon_dir/src/ngx_http_brotli_filter_module.cc"
+fi
+
+# workaround for a bug in nginx-1.9.11, see:
+# http://hg.nginx.org/nginx/rev/ff1e625ae55b
+NGX_VERSION=`grep nginx_version src/core/nginx.h | sed -e 's/^.* \(.*\)$/\1/'`
+if [ "$NGX_VERSION" = "1009011" ]; then
+    CFLAGS="$CFLAGS -Wno-write-strings"
+fi
 
 have=NGX_HTTP_BROTLI_FILTER . auto/have