1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
From 50e219b0df0d66357dfd504475a041b545d9330d Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@remirepo.net>
Date: Thu, 9 Nov 2017 14:31:44 +0100
Subject: [PATCH] allow to use system broti library
---
config.m4 | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++----------
php_brotli.h | 1 -
2 files changed, 56 insertions(+), 12 deletions(-)
diff --git a/config.m4 b/config.m4
index c7f7a4c..5010df0 100644
--- a/config.m4
+++ b/config.m4
@@ -1,38 +1,83 @@
dnl config.m4 for extension brotli
-dnl Check PHP version:
+dnl Check PHP version ID:
AC_MSG_CHECKING(PHP version)
if test ! -z "$phpincludedir"; then
- PHP_VERSION=`grep 'PHP_VERSION ' $phpincludedir/main/php_version.h | sed -e 's/.*"\([[0-9\.]]*\)".*/\1/g' 2>/dev/null`
+ PHP_VERSION_ID=`grep 'PHP_VERSION_ID' $phpincludedir/main/php_version.h | sed -e 's/.* \([[0-9]]*\)/\1/g' 2>/dev/null`
elif test ! -z "$PHP_CONFIG"; then
- PHP_VERSION=`$PHP_CONFIG --version 2>/dev/null`
+ PHP_VERSION_ID=`$PHP_CONFIG --vernum 2>/dev/null`
fi
-if test x"$PHP_VERSION" = "x"; then
+if test x"$PHP_VERSION_ID" = "x"; then
AC_MSG_WARN([none])
else
- PHP_MAJOR_VERSION=`echo $PHP_VERSION | sed -e 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/g' 2>/dev/null`
- PHP_MINOR_VERSION=`echo $PHP_VERSION | sed -e 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/g' 2>/dev/null`
- PHP_RELEASE_VERSION=`echo $PHP_VERSION | sed -e 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/g' 2>/dev/null`
- AC_MSG_RESULT([$PHP_VERSION])
+ AC_MSG_RESULT($PHP_VERSION_ID)
fi
-if test $PHP_MAJOR_VERSION -lt 5; then
+if test $PHP_VERSION_ID -lt 50000; then
AC_MSG_ERROR([need at least PHP 5 or newer])
fi
PHP_ARG_ENABLE(brotli, whether to enable brotli support,
[ --enable-brotli Enable brotli support])
+PHP_ARG_WITH(libbrotli, whether to use system brotli library,
+[ --with-libbrotli=DIR Use libbrotli], no, no)
+
if test "$PHP_BROTLI" != "no"; then
+ BROTLI_MIN_VERSION=0.6
+
+ if test "$PHP_LIBBROTLI" != "no"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+
+ AC_MSG_CHECKING(for libbrotlienc)
+ if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libbrotlienc; then
+ if $PKG_CONFIG libbrotlienc --atleast-version $BROTLI_MIN_VERSION; then
+ LIBBROTLIENC_CFLAGS=`$PKG_CONFIG libbrotlienc --cflags`
+ LIBBROTLIENC_LIBS=`$PKG_CONFIG libbrotlienc --libs`
+ LIBBROTLIENC_VERSION=`$PKG_CONFIG libbrotlienc --modversion`
+ AC_MSG_RESULT(from pkgconfig: version $LIBBROTLIENC_VERSION found)
+ else
+ AC_MSG_ERROR(system libbrotlienc must be upgraded to version >= $BROTLI_MIN_VERSION)
+ fi
+ else
+ AC_MSG_ERROR(system libbrotlienc not found)
+ fi
+ PHP_EVAL_INCLINE($LIBBROTLIENC_CFLAGS)
+ PHP_EVAL_LIBLINE($LIBBROTLIENC_LIBS, BROTLI_SHARED_LIBADD)
+
+ AC_MSG_CHECKING(for libbrotlidec)
+ if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libbrotlidec; then
+ if $PKG_CONFIG libbrotlidec --atleast-version $BROTLI_MIN_VERSION; then
+ LIBBROTLIDEC_CFLAGS=`$PKG_CONFIG libbrotlidec --cflags`
+ LIBBROTLIDEC_LIBS=`$PKG_CONFIG libbrotlidec --libs`
+ LIBBROTLIDEC_VERSION=`$PKG_CONFIG libbrotlidec --modversion`
+ AC_MSG_RESULT(from pkgconfig: version $LIBBROTLIDEC_VERSION found)
+ else
+ AC_MSG_ERROR(system libbrotlienc must be upgraded to version >= $BROTLI_MIN_VERSION)
+ fi
+ else
+ AC_MSG_ERROR(system libbrotlienc not found)
+ fi
+ PHP_EVAL_INCLINE($LIBBROTLIDEC_CFLAGS)
+ PHP_EVAL_LIBLINE($LIBBROTLIDEC_LIBS, BROTLI_SHARED_LIBADD)
+ AC_DEFINE_UNQUOTED(BROTLI_LIB_VERSION, "$LIBBROTLIDEC_VERSION", [system library version])
+ else
+ AC_MSG_CHECKING(for brotli)
+ AC_MSG_RESULT(use bundled copy)
+ AC_DEFINE_UNQUOTED(BROTLI_LIB_VERSION, "1.0.1", [bundled library version])
+
BROTLI_COMMON_SOURCES="brotli/c/common/dictionary.c"
BROTLI_ENC_SOURCES="brotli/c/enc/backward_references.c brotli/c/enc/backward_references_hq.c brotli/c/enc/bit_cost.c brotli/c/enc/block_splitter.c brotli/c/enc/brotli_bit_stream.c brotli/c/enc/cluster.c brotli/c/enc/compress_fragment.c brotli/c/enc/compress_fragment_two_pass.c brotli/c/enc/dictionary_hash.c brotli/c/enc/encode.c brotli/c/enc/entropy_encode.c brotli/c/enc/histogram.c brotli/c/enc/literal_cost.c brotli/c/enc/memory.c brotli/c/enc/metablock.c brotli/c/enc/static_dict.c brotli/c/enc/utf8_util.c"
BROTLI_DEC_SOURCES="brotli/c/dec/bit_reader.c brotli/c/dec/decode.c brotli/c/dec/huffman.c brotli/c/dec/state.c"
+ fi
- PHP_SUBST(BROTLI_SHARED_LIBADD)
+ PHP_SUBST(BROTLI_SHARED_LIBADD)
- PHP_NEW_EXTENSION(brotli, brotli.c $BROTLI_COMMON_SOURCES $BROTLI_ENC_SOURCES $BROTLI_DEC_SOURCES, $ext_shared)
+ PHP_NEW_EXTENSION(brotli, brotli.c $BROTLI_COMMON_SOURCES $BROTLI_ENC_SOURCES $BROTLI_DEC_SOURCES, $ext_shared)
+ if test -n "$BROTLI_COMMON_SOURCES" ; then
PHP_ADD_INCLUDE([$ext_srcdir/brotli/c/include])
+ fi
fi
diff --git a/php_brotli.h b/php_brotli.h
index 4405001..773af76 100644
--- a/php_brotli.h
+++ b/php_brotli.h
@@ -6,7 +6,6 @@ extern "C" {
#endif
#define BROTLI_EXT_VERSION "0.5.0"
-#define BROTLI_LIB_VERSION "1.0.1"
extern zend_module_entry brotli_module_entry;
#define phpext_brotli_ptr &brotli_module_entry
|