mirror of
https://github.com/apache/httpd.git
synced 2025-07-21 23:44:07 +00:00
Merge r1761824, r1771789, r1771827, r1779111 from trunk:
mod_brotli: Unbreak building other filter modules without libbrotlienc. Don't add -lbrotlienc to the MOD_LDFLAGS unconditionally. And, when adding it, use MOD_BROTLI_LDADD to avoid linking all filter modules against this library. mod_brotli: Rewrite the autoconf script in a, hopefully, less convoluted way. Explicitly handle different cases when we do a pkg-config lookup (<nothing>, --with-brotli or --with-brotli=yes) or examine the path provided by the user (--with-brotli=PATH). This lays the groundwork to simplify the switch to the official Brotli library (https://github.com/google/brotli), instead of expecting the install layout of a third-party wrapper (https://github.com/bagder/libbrotli). mod_brotli: Update makefiles to use the library layout of the official Brotli repository. With the recent update (https://github.com/google/brotli/pull/464), the official repository now produces pkg-config metadata files (brotli.pc), and has a fixed library layout (libbrotlicommon/libbrotlienc/libbrotlidec) on both Windows and Linux. Expect this layout in the makefiles, and take advantage of the pkg-config metadata, if it's available. mod_brotli: Update makefile to cope with the pkg-config layout change in https://github.com/google/brotli/commit/fe9f9a9 There's a typo in the upstream commit [1] (s/brotlicommon/libbrotlicommon) that currently produces an unusable libbrotlienc.pc file, but hopefully this is going to be fixed there. [1] https://github.com/google/brotli/commit/fe9f9a9#diff-af3b638bc2a3e6c650974192a53c7291R409 Submitted by: kotkov Reviewed by: kotkov, covener, jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1793464 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@ -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()
|
||||
|
14
STATUS
14
STATUS
@ -125,20 +125,6 @@ RELEASE SHOWSTOPPERS:
|
||||
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
|
||||
[ start all new proposals below, under PATCHES PROPOSED. ]
|
||||
|
||||
*) mod_brotli: Fix two build issues (failing Unix build when mod_brotli
|
||||
is not being built and invalid library filenames in CMakeFiles).
|
||||
trunk patch: https://svn.apache.org/r1761824
|
||||
https://svn.apache.org/r1771789
|
||||
https://svn.apache.org/r1771827
|
||||
https://svn.apache.org/r1779111
|
||||
2.4.x patch: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x-r1761824-group
|
||||
Note: These changesets were missing in the original mod_brotli backport
|
||||
proposal merged in r1791231. They fix the described problems and avoid
|
||||
having unnecessarily different modules/filters/config.m4 file contents
|
||||
in trunk and in the 2.4.x branch. See the related discussion in
|
||||
https://lists.apache.org/thread.html/a83741642c3d20f383efdf2c427829b2f37cb81e98c0a1756a2c19ce@%3Cdev.httpd.apache.org%3E
|
||||
+1: kotkov, covener, jim
|
||||
|
||||
* core: don't run configtest in -V mode when MPM DSOs are in use, and try to
|
||||
print compile settings even if reading the configuration fails. Fixes
|
||||
PR61009.
|
||||
|
@ -140,125 +140,54 @@ 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=<path>" 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)
|
||||
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
|
||||
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])
|
||||
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 <brotli/encode.h>],[
|
||||
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
|
||||
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
|
||||
])
|
||||
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 <brotli/encode.h>],[
|
||||
const uint8_t *o = BrotliEncoderTakeOutput((BrotliEncoderState*)0, (size_t*)0);],
|
||||
[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
|
||||
enable_brotli=no
|
||||
if test -n "$PKGCONFIG"; then
|
||||
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
|
||||
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
|
||||
if test "$ap_brotli_with" = "yes"; then
|
||||
AC_MSG_ERROR([Brotli library was missing or unusable])
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
|
Reference in New Issue
Block a user