From 9e06e7c6b24058c2fbdc8585d6b5adba34ad48c7 Mon Sep 17 00:00:00 2001 From: Evgeny Kotkov Date: Wed, 26 Apr 2017 20:21:58 +0000 Subject: Create a backport branch with r1761824, r1771789, r1771827 and r1779111 applied to 2.4.x. These are the mod_brotli related Makefile changes that didn't make it into the original backport proposal merged in r1791231. The lack of these changes causes a failing Unix build in my environment if mod_brotli is not being built. Another issue is that by default the CMakeLists.txt file refers to invalid library filenames. Shortlog of the changes: r1761824: Unbreak building other filter modules without libbrotlienc. r1771789: Rewrite the autoconf script in a, hopefully, less convoluted way. This lays the groundwork to simplify the switch to the official Brotli library. r1771827: Update makefiles to use the library layout of the official Brotli repository. r1779111: Update makefile to cope with the pkg-config layout change in https://github.com/google/brotli/commit/fe9f9a9 Also see https://lists.apache.org/thread.html/a83741642c3d20f383efdf2c427829b2f37cb81e98c0a1756a2c19ce@%3Cdev.httpd.apache.org%3E git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x-r1761824-group@1792805 13f79535-47bb-0310-9956-ffa450edef68 --- CMakeLists.txt | 4 +- modules/filters/config.m4 | 156 +++++++++++++--------------------------------- 2 files changed, 45 insertions(+), 115 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 373bd708fe..3cd8a34d14 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,8 +58,8 @@ ELSE() SET(default_nghttp2_libraries "${CMAKE_INSTALL_PREFIX}/lib/nghttp2.lib") ENDIF() -IF(EXISTS "${CMAKE_INSTALL_PREFIX}/lib/brotli_enc.lib") - SET(default_brotli_libraries "${CMAKE_INSTALL_PREFIX}/lib/brotli_enc.lib" "${CMAKE_INSTALL_PREFIX}/lib/brotli_common.lib") +IF(EXISTS "${CMAKE_INSTALL_PREFIX}/lib/brotlienc.lib") + SET(default_brotli_libraries "${CMAKE_INSTALL_PREFIX}/lib/brotlienc.lib" "${CMAKE_INSTALL_PREFIX}/lib/brotlicommon.lib") ELSE() SET(default_brotli_libraries) ENDIF() diff --git a/modules/filters/config.m4 b/modules/filters/config.m4 index 3b57b5a0b6..367e70b7fa 100644 --- a/modules/filters/config.m4 +++ b/modules/filters/config.m4 @@ -140,125 +140,55 @@ APACHE_MODULE(proxy_html, Fix HTML Links in a Reverse Proxy, , , , [ ] ) -dnl -dnl APACHE_CHECK_BROTLI -dnl -dnl Configure for Brotli, giving preference to -dnl "--with-brotli=" if it was specified. -dnl -AC_DEFUN([APACHE_CHECK_BROTLI],[ - AC_CACHE_CHECK([for Brotli], [ac_cv_brotli], [ - dnl initialise the variables we use - ac_cv_brotli=no - ac_brotli_found="" - ac_brotli_base="" - ac_brotli_libs="" - ac_brotli_mod_cflags="" - ac_brotli_mod_ldflags="" - - dnl Determine the Brotli base directory, if any - AC_MSG_CHECKING([for user-provided Brotli base directory]) - AC_ARG_WITH(brotli, APACHE_HELP_STRING(--with-brotli=PATH,Brotli installation directory), [ - dnl If --with-brotli specifies a directory, we use that directory - if test "x$withval" != "xyes" -a "x$withval" != "x"; then - dnl This ensures $withval is actually a directory and that it is absolute - ac_brotli_base="`cd $withval ; pwd`" - fi - ]) - if test "x$ac_brotli_base" = "x"; then - AC_MSG_RESULT(none) - else - AC_MSG_RESULT($ac_brotli_base) +APACHE_MODULE(brotli, Brotli compression support, , , most, [ + AC_ARG_WITH(brotli, APACHE_HELP_STRING(--with-brotli=PATH,Brotli installation directory),[ + if test "$withval" != "yes" -a "x$withval" != "x"; then + ap_brotli_base="$withval" + ap_brotli_with=yes fi - - dnl Run header and version checks - saved_CPPFLAGS="$CPPFLAGS" - saved_LIBS="$LIBS" - saved_LDFLAGS="$LDFLAGS" - - dnl Before doing anything else, load in pkg-config variables + ]) + ap_brotli_found=no + if test -n "$ap_brotli_base"; then + ap_save_cppflags=$CPPFLAGS + APR_ADDTO(CPPFLAGS, [-I${ap_brotli_base}/include]) + AC_MSG_CHECKING([for Brotli library >= 0.6.0 via prefix]) + AC_TRY_COMPILE( + [#include ],[ +const uint8_t *o = BrotliEncoderTakeOutput((BrotliEncoderState*)0, (size_t*)0); +if (o) return *o;], + [AC_MSG_RESULT(yes) + ap_brotli_found=yes + ap_brotli_cflags="-I${ap_brotli_base}/include" + ap_brotli_libs="-L${ap_brotli_base}/lib -lbrotlienc -lbrotlicommon"], + [AC_MSG_RESULT(no)] + ) + CPPFLAGS=$ap_save_cppflags + else if test -n "$PKGCONFIG"; then - saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" - if test "x$ac_brotli_base" != "x" -a \ - -f "${ac_brotli_base}/lib/pkgconfig/libbrotlienc.pc"; then - dnl Ensure that the given path is used by pkg-config too, otherwise - dnl the system libbrotlienc.pc might be picked up instead. - PKG_CONFIG_PATH="${ac_brotli_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}" - export PKG_CONFIG_PATH - fi - ac_brotli_libs="`$PKGCONFIG --libs-only-l --silence-errors libbrotlienc`" - if test $? -eq 0; then - ac_brotli_found="yes" - pkglookup="`$PKGCONFIG --cflags-only-I libbrotlienc`" - APR_ADDTO(CPPFLAGS, [$pkglookup]) - APR_ADDTO(MOD_CFLAGS, [$pkglookup]) - pkglookup="`$PKGCONFIG --libs-only-L libbrotlienc`" - APR_ADDTO(LDFLAGS, [$pkglookup]) - APR_ADDTO(MOD_LDFLAGS, [$pkglookup]) - pkglookup="`$PKGCONFIG --libs-only-other libbrotlienc`" - APR_ADDTO(LDFLAGS, [$pkglookup]) - APR_ADDTO(MOD_LDFLAGS, [$pkglookup]) - fi - PKG_CONFIG_PATH="$saved_PKG_CONFIG_PATH" - fi - - dnl fall back to the user-supplied directory if not found via pkg-config - if test "x$ac_brotli_base" != "x" -a "x$ac_brotli_found" = "x"; then - APR_ADDTO(CPPFLAGS, [-I$ac_brotli_base/include]) - APR_ADDTO(MOD_CFLAGS, [-I$ac_brotli_base/include]) - APR_ADDTO(LDFLAGS, [-L$ac_brotli_base/lib]) - APR_ADDTO(MOD_LDFLAGS, [-L$ac_brotli_base/lib]) - if test "x$ap_platform_runtime_link_flag" != "x"; then - APR_ADDTO(LDFLAGS, [$ap_platform_runtime_link_flag$ac_brotli_base/lib]) - APR_ADDTO(MOD_LDFLAGS, [$ap_platform_runtime_link_flag$ac_brotli_base/lib]) + AC_MSG_CHECKING([for Brotli library >= 0.6.0 via pkg-config]) + if $PKGCONFIG --exists "libbrotlienc >= 0.6.0"; then + AC_MSG_RESULT(yes) + ap_brotli_found=yes + ap_brotli_cflags=`$PKGCONFIG libbrotlienc --cflags` + ap_brotli_libs=`$PKGCONFIG libbrotlienc --libs` + else + AC_MSG_RESULT(no) fi fi - - ac_brotli_libs="${ac_brotli_libs:--lbrotlienc `$apr_config --libs`} " - APR_ADDTO(MOD_LDFLAGS, [$ac_brotli_libs]) - APR_ADDTO(LIBS, [$ac_brotli_libs]) - - dnl Run library and function checks - liberrors="" - AC_CHECK_HEADERS([brotli/encode.h]) - AC_MSG_CHECKING([for Brotli version >= 0.6.0]) - AC_TRY_COMPILE([#include ],[ -const uint8_t *o = BrotliEncoderTakeOutput((BrotliEncoderState*)0, (size_t*)0); -if (o) return *o;], - [AC_MSG_RESULT(OK) - ac_cv_brotli="yes"], - [AC_MSG_RESULT(FAILED)]) - - dnl restore - CPPFLAGS="$saved_CPPFLAGS" - LIBS="$saved_LIBS" - LDFLAGS="$saved_LDFLAGS" - - dnl cache MOD_LDFLAGS, MOD_CFLAGS - ac_brotli_mod_cflags=$MOD_CFLAGS - ac_brotli_mod_ldflags=$MOD_LDFLAGS - ]) - if test "x$ac_cv_brotli" = "xyes"; then - APR_ADDTO(MOD_LDFLAGS, [$ac_brotli_mod_ldflags]) - - dnl Ouch! libbrotlienc.1.so doesn't link against libm.so (-lm), - dnl although it should. Workaround that in our LDFLAGS: - - APR_ADDTO(MOD_LDFLAGS, ["-lm"]) - APR_ADDTO(MOD_CFLAGS, [$ac_brotli_mod_cflags]) fi -]) - -APACHE_MODULE(brotli, Brotli compression support, , , most, [ - APACHE_CHECK_BROTLI - if test "$ac_cv_brotli" = "yes" ; then - if test "x$enable_brotli" = "xshared"; then - # The only symbol which needs to be exported is the module - # structure, so ask libtool to hide everything else: - APR_ADDTO(MOD_BROTLI_LDADD, [-export-symbols-regex brotli_module]) - fi + if test "$ap_brotli_found" = "yes"; then + APR_ADDTO(MOD_CFLAGS, [$ap_brotli_cflags]) + APR_ADDTO(MOD_BROTLI_LDADD, [$ap_brotli_libs]) + if test "$enable_brotli" = "shared"; then + dnl The only symbol which needs to be exported is the module + dnl structure, so ask libtool to hide everything else: + APR_ADDTO(MOD_BROTLI_LDADD, [-export-symbols-regex brotli_module]) + fi else - enable_brotli=no + enable_brotli=no + if test "$ap_brotli_with" = "yes"; then + AC_MSG_ERROR([Brotli library was missing or unusable]) + fi fi ]) -- cgit v1.2.1