Skip to content
This repository was archived by the owner on Apr 10, 2025. It is now read-only.

Commit fbde0ac

Browse files
oschaafcrowell
authored andcommitted
Support building ngx_pagespeed as a dynamic module.
As of 1.9.11, nginx supports loading dynamic modules This change makes us support building ngx_pagespeed.so Fixes #1116
1 parent 13e99f6 commit fbde0ac

File tree

1 file changed

+107
-56
lines changed

1 file changed

+107
-56
lines changed

config

Lines changed: 107 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -193,72 +193,123 @@ ngx_feature_test="
193193
# Test whether we have pagespeed and can compile and link against it.
194194
. "$ngx_addon_dir/cpp_feature"
195195

196-
if [ $ngx_found = yes ]; then
197-
ps_src="$ngx_addon_dir/src"
198-
ngx_addon_name=ngx_pagespeed
199-
NGX_ADDON_DEPS="$NGX_ADDON_DEPS \
200-
$ps_src/log_message_handler.h \
201-
$ps_src/ngx_base_fetch.h \
202-
$ps_src/ngx_caching_headers.h \
203-
$ps_src/ngx_event_connection.h \
204-
$ps_src/ngx_fetch.h \
205-
$ps_src/ngx_gzip_setter.h \
206-
$ps_src/ngx_list_iterator.h \
207-
$ps_src/ngx_message_handler.h \
208-
$ps_src/ngx_pagespeed.h \
209-
$ps_src/ngx_rewrite_driver_factory.h \
210-
$ps_src/ngx_rewrite_options.h \
211-
$ps_src/ngx_server_context.h \
212-
$ps_src/ngx_url_async_fetcher.h \
213-
$psol_binary"
214-
NGX_ADDON_SRCS="$NGX_ADDON_SRCS \
215-
$ps_src/log_message_handler.cc \
216-
$ps_src/ngx_base_fetch.cc \
217-
$ps_src/ngx_caching_headers.cc \
218-
$ps_src/ngx_event_connection.cc \
219-
$ps_src/ngx_fetch.cc \
220-
$ps_src/ngx_gzip_setter.cc \
221-
$ps_src/ngx_list_iterator.cc \
222-
$ps_src/ngx_message_handler.cc \
223-
$ps_src/ngx_pagespeed.cc \
224-
$ps_src/ngx_rewrite_driver_factory.cc \
225-
$ps_src/ngx_rewrite_options.cc \
226-
$ps_src/ngx_server_context.cc \
227-
$ps_src/ngx_url_async_fetcher.cc"
228-
# Save our sources in a separate var since we may need it in config.make
229-
PS_NGX_SRCS="$NGX_ADDON_SRCS"
196+
if [ $ngx_found = no ]; then
197+
cat << END
198+
$0: error: module ngx_pagespeed requires the pagespeed optimization library.
199+
Look in obj/autoconf.err for more details.
200+
END
201+
exit 1
202+
fi
230203

231-
if [ "$position_aux" = "true" ] ; then
232-
HTTP_AUX_FILTER_MODULES="$HTTP_AUX_FILTER_MODULES $ngx_addon_name"
233-
else
234-
# Make pagespeed run immediately before gzip and Brotli.
235-
if echo $HTTP_FILTER_MODULES | grep ngx_http_brotli_filter_module >/dev/null; then
236-
module=ngx_http_brotli_filter_module
237-
elif [ $HTTP_GZIP = YES ]; then
238-
module=ngx_http_gzip_filter_module
204+
ps_src="$ngx_addon_dir/src"
205+
ngx_addon_name=ngx_pagespeed
206+
NGX_ADDON_DEPS="$NGX_ADDON_DEPS \
207+
$ps_src/log_message_handler.h \
208+
$ps_src/ngx_base_fetch.h \
209+
$ps_src/ngx_caching_headers.h \
210+
$ps_src/ngx_event_connection.h \
211+
$ps_src/ngx_fetch.h \
212+
$ps_src/ngx_gzip_setter.h \
213+
$ps_src/ngx_list_iterator.h \
214+
$ps_src/ngx_message_handler.h \
215+
$ps_src/ngx_pagespeed.h \
216+
$ps_src/ngx_rewrite_driver_factory.h \
217+
$ps_src/ngx_rewrite_options.h \
218+
$ps_src/ngx_server_context.h \
219+
$ps_src/ngx_url_async_fetcher.h \
220+
$psol_binary"
221+
NPS_SRCS=" \
222+
$ps_src/log_message_handler.cc \
223+
$ps_src/ngx_base_fetch.cc \
224+
$ps_src/ngx_caching_headers.cc \
225+
$ps_src/ngx_event_connection.cc \
226+
$ps_src/ngx_fetch.cc \
227+
$ps_src/ngx_gzip_setter.cc \
228+
$ps_src/ngx_list_iterator.cc \
229+
$ps_src/ngx_message_handler.cc \
230+
$ps_src/ngx_pagespeed.cc \
231+
$ps_src/ngx_rewrite_driver_factory.cc \
232+
$ps_src/ngx_rewrite_options.cc \
233+
$ps_src/ngx_server_context.cc \
234+
$ps_src/ngx_url_async_fetcher.cc"
235+
# Save our sources in a separate var since we may need it in config.make
236+
PS_NGX_SRCS="$NGX_ADDON_SRCS \
237+
$NPS_SRCS"
238+
239+
# Make pagespeed run immediately before gzip and Brotli.
240+
if echo $HTTP_FILTER_MODULES | grep ngx_http_brotli_filter_module >/dev/null; then
241+
next=ngx_http_brotli_filter_module
242+
elif [ $HTTP_GZIP = YES ]; then
243+
next=ngx_http_gzip_filter_module
244+
else
245+
next=ngx_http_range_header_filter_module
246+
fi
247+
248+
if [ -n "$ngx_module_link" ]; then
249+
# nginx-1.9.11+
250+
ngx_module_type=HTTP_FILTER
251+
ngx_module_name="ngx_pagespeed ngx_pagespeed_etag_filter"
252+
ngx_module_incs="$ngx_feature_path"
253+
ngx_module_deps=
254+
ngx_module_srcs="$NPS_SRCS"
255+
ngx_module_libs="$ngx_feature_libs"
256+
ngx_module_order="ngx_http_range_header_filter_module\
257+
ngx_pagespeed_etag_filter\
258+
ngx_http_gzip_filter_module \
259+
ngx_http_brotli_filter_module \
260+
ngx_pagespeed \
261+
ngx_http_postpone_filter_module \
262+
ngx_http_ssi_filter_module \
263+
ngx_http_charset_filter_module \
264+
ngx_http_xslt_filter_module \
265+
ngx_http_image_filter_module \
266+
ngx_http_sub_filter_module \
267+
ngx_http_addition_filter_module \
268+
ngx_http_gunzip_filter_module \
269+
ngx_http_userid_filter_module \
270+
ngx_http_headers_filter_module"
271+
272+
. auto/module
273+
274+
if [ $ngx_module_link != DYNAMIC ]; then
275+
# ngx_module_order doesn't work with static modules,
276+
# so we must re-order filters here.
277+
if [ "$position_aux" = "true" ] ; then
278+
HTTP_AUX_FILTER_MODULES="$HTTP_AUX_FILTER_MODULES $ngx_addon_name"
279+
else
280+
HTTP_FILTER_MODULES=$(echo $HTTP_FILTER_MODULES \
281+
| sed "s/ngx_pagespeed//" \
282+
| sed "s/$next/$next ngx_pagespeed/")
283+
fi
284+
# Make the etag header filter run immediately before range header filter.
285+
HTTP_FILTER_MODULES=$(echo $HTTP_FILTER_MODULES \
286+
| sed "s/ngx_pagespeed_etag_filter//" \
287+
| sed "s/ngx_http_range_header_filter_module/ngx_http_range_header_filter_module ngx_pagespeed_etag_filter/")
239288
else
240-
module=ngx_http_range_header_filter_module
289+
# config.make is not executed for dynamic modules
290+
CFLAGS="$CFLAGS -Wno-c++11-extensions"
291+
if [ "$position_aux" = "true" ] ; then
292+
ngx_module_type=HTTP_AUX_FILTER
293+
ngx_module_order=""
294+
fi
241295
fi
242-
243-
HTTP_FILTER_MODULES=$(echo $HTTP_FILTER_MODULES |\
244-
sed "s/$module/$module $ngx_addon_name/")
296+
else
297+
CORE_LIBS="$CORE_LIBS $pagespeed_libs"
298+
CORE_INCS="$CORE_INCS $pagespeed_include"
299+
NGX_ADDON_SRCS="$PS_NGX_SRCS"
300+
if [ "$position_aux" = "true" ] ; then
301+
HTTP_AUX_FILTER_MODULES="$HTTP_AUX_FILTER_MODULES $ngx_addon_name"
302+
else
303+
HTTP_FILTER_MODULES=$(echo $HTTP_FILTER_MODULES | sed "s/$next/$next $ngx_addon_name/")
245304
fi
246305

247306
# Make the etag header filter run immediately before range header filter.
248307
HTTP_FILTER_MODULES=$(echo $HTTP_FILTER_MODULES |\
249308
sed "s/ngx_http_range_header_filter_module/ngx_http_range_header_filter_module ngx_pagespeed_etag_filter/")
250-
251-
CORE_LIBS="$CORE_LIBS $pagespeed_libs"
252-
CORE_INCS="$CORE_INCS $pagespeed_include"
253-
echo "List of modules (in reverse order of applicability): "$HTTP_FILTER_MODULES
254-
else
255-
cat << END
256-
$0: error: module ngx_pagespeed requires the pagespeed optimization library.
257-
Look in obj/autoconf.err for more details.
258-
END
259-
exit 1
260309
fi
261310

311+
echo "List of modules (in reverse order of applicability): "$HTTP_FILTER_MODULES
312+
262313
# Test whether the compiler is compatible
263314
ngx_feature="psol-compiler-compat"
264315
ngx_feature_name=""

0 commit comments

Comments
 (0)