summaryrefslogtreecommitdiffstats
path: root/6.patch
blob: 4d826d8921eee3de22f46ed3b5f731e7e3d15ff2 (plain)
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