Hello community,
here is the log from the commit of package python-brotlipy for openSUSE:Factory
checked in at 2019-11-04 17:14:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-brotlipy (Old)
and /work/SRC/openSUSE:Factory/.python-brotlipy.new.2990 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-brotlipy"
Mon Nov 4 17:14:32 2019 rev:5 rq:744883 version:0.7.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-brotlipy/python-brotlipy.changes
2019-03-22 15:13:27.457283161 +0100
+++
/work/SRC/openSUSE:Factory/.python-brotlipy.new.2990/python-brotlipy.changes
2019-11-04 17:14:33.812783998 +0100
@@ -1,0 +2,9 @@
+Fri Nov 1 11:37:53 UTC 2019 - John Vandenberg <[email protected]>
+
+- Replace builtin libbrotli v0.6 with system libbrotli 1.x with patches:
+ - merged_pr_94.patch
+ - pr_154-brotli-v1.patch
+- Remove build dependency stdc++
+- Remove brotli/build.py from installed package
+
+-------------------------------------------------------------------
New:
----
merged_pr_94.patch
pr_154-brotli-v1.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-brotlipy.spec ++++++
--- /var/tmp/diff_new_pack.dddlxD/_old 2019-11-04 17:14:34.864785122 +0100
+++ /var/tmp/diff_new_pack.dddlxD/_new 2019-11-04 17:14:34.888785147 +0100
@@ -28,13 +28,15 @@
# Copy of
https://github.com/google/brotli/tree/46c1a881b41bb638c76247558aa04b1591af3aa7/tests/testdata
Source1: testdata.tgz
Source2:
https://raw.githubusercontent.com/python-hyper/brotlipy/master/test/conftest.py
+Patch0: merged_pr_94.patch
+Patch1: pr_154-brotli-v1.patch
BuildRequires: %{python_module cffi >= 1.0.0}
BuildRequires: %{python_module devel}
BuildRequires: %{python_module hypothesis}
BuildRequires: %{python_module pytest}
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
-BuildRequires: gcc-c++
+BuildRequires: libbrotli-devel
BuildRequires: python-enum34
BuildRequires: python-rpm-macros
Requires: python-cffi >= 1.0.0
@@ -51,7 +53,11 @@
%prep
%setup -q -n brotlipy-%{version}
-mv libbrotli/LICENSE LICENSE.libbrotli
+%autopatch -p1
+# Remove unnecessary dependency on stdc++
+# See https://github.com/python-hyper/brotlipy/pull/151
+sed -i 's/libraries.append.*stdc++.*$/pass/' src/brotli/build.py
+
cp %{SOURCE2} test/
cd libbrotli
mkdir -p tests
@@ -60,21 +66,23 @@
%build
export CFLAGS="%{optflags}"
-export CXXFLAGS="%{optflags}"
+export USE_SHARED_BROTLI=1
%python_build
%install
%python_install
-%python_expand %fdupes %{buildroot}%{$python_sitearch}
+%{python_expand rm -f %{buildroot}%{$python_sitearch}/brotli/build.py*
%{buildroot}%{$python_sitearch}/brotli/__pycache__/build.*
+%fdupes %{buildroot}%{$python_sitearch}
+}
%check
# the skipped tests are benchmarks which can be flaky in OBS
%python_expand PYTHONPATH=%{buildroot}%{$python_sitearch} $python -m pytest -k
'not (test_streaming_compression or test_streaming_compression_flush)'
%files %{python_files}
-%license LICENSE LICENSE.libbrotli
+%license LICENSE
%doc README.rst
%{python_sitearch}/brotli
-%{python_sitearch}/brotlipy-%{version}-py%{py_ver}.egg-info
+%{python_sitearch}/brotlipy-%{version}-py*.egg-info
%changelog
++++++ merged_pr_94.patch ++++++
>From bd202a98e44947aaed2345278955a86ca8f42f8c Mon Sep 17 00:00:00 2001
From: Felix Yan <[email protected]>
Date: Tue, 6 Jun 2017 19:16:36 +0800
Subject: [PATCH] Allow to build with shared brotli
It would be nice to allow building with shared brotli since we have one
in the repositories. This commit would not break the default
installation.
---
.travis.yml | 8 +++++-
setup.py | 67 ++++++++++++++++++++++++---------------------
src/brotli/build.py | 8 +++++-
3 files changed, 50 insertions(+), 33 deletions(-)
Index: brotlipy-0.7.0/setup.py
===================================================================
--- brotlipy-0.7.0.orig/setup.py
+++ brotlipy-0.7.0/setup.py
@@ -1,41 +1,15 @@
#!/usr/bin/env python
+import os
from setuptools import find_packages, setup
long_description = (
open("README.rst").read() + '\n\n' + open("HISTORY.rst").read()
)
-
-setup(
- name="brotlipy",
- version="0.7.0",
-
- description="Python binding to the Brotli library",
- long_description=long_description,
- url="https://github.com/python-hyper/brotlipy/",
- license="MIT",
-
- author="Cory Benfield",
- author_email="[email protected]",
-
- setup_requires=[
- "cffi>=1.0.0",
- ],
- install_requires=[
- "cffi>=1.0.0",
- ],
- extras_require={
- ':python_version == "2.7" or python_version == "3.3"':
['enum34>=1.0.4, <2'],
- },
-
- cffi_modules=["src/brotli/build.py:ffi"],
-
- packages=find_packages('src'),
- package_dir={'': 'src'},
-
- ext_package="brotli",
-
- libraries=[
+libraries = []
+USE_SHARED_BROTLI = os.environ.get("USE_SHARED_BROTLI")
+if USE_SHARED_BROTLI != "1":
+ libraries = [
("libbrotli", {
"include_dirs": [
"libbrotli/include",
@@ -67,7 +41,38 @@ setup(
'libbrotli/enc/entropy_encode.c'
]
}),
+ ]
+
+setup(
+ name="brotlipy",
+ version="0.7.0",
+
+ description="Python binding to the Brotli library",
+ long_description=long_description,
+ url="https://github.com/python-hyper/brotlipy/",
+ license="MIT",
+
+ author="Cory Benfield",
+ author_email="[email protected]",
+
+ setup_requires=[
+ "cffi>=1.0.0",
],
+ install_requires=[
+ "cffi>=1.0.0",
+ ],
+ extras_require={
+ ':python_version == "2.7" or python_version == "3.3"':
['enum34>=1.0.4, <2'],
+ },
+
+ cffi_modules=["src/brotli/build.py:ffi"],
+
+ packages=find_packages('src'),
+ package_dir={'': 'src'},
+
+ ext_package="brotli",
+
+ libraries=libraries,
zip_safe=False,
Index: brotlipy-0.7.0/src/brotli/build.py
===================================================================
--- brotlipy-0.7.0.orig/src/brotli/build.py
+++ brotlipy-0.7.0/src/brotli/build.py
@@ -1,10 +1,16 @@
# -*- coding: utf-8 -*-
+import os
import sys
from cffi import FFI
ffi = FFI()
-libraries = ['libbrotli']
+USE_SHARED_BROTLI = os.environ.get("USE_SHARED_BROTLI")
+if USE_SHARED_BROTLI != "1":
+ libraries = ['libbrotli']
+else:
+ libraries = ['brotlienc', 'brotlidec']
+
if 'win32' not in str(sys.platform).lower():
libraries.append('stdc++')
++++++ pr_154-brotli-v1.patch ++++++
commit b2c5c4a0216408a1f3c74246f2334ed35827a55d
Author: John Vandenberg <[email protected]>
Date: Fri Nov 1 18:31:50 2019 +0700
Update brotli to v1.0.7
Removes decommissioned custom dictionary functionality
which was removed from libbrotli.
Closes https://github.com/python-hyper/brotlipy/issues/129
diff --git a/src/brotli/brotli.py b/src/brotli/brotli.py
index a9cfa39..cc08000 100644
--- a/src/brotli/brotli.py
+++ b/src/brotli/brotli.py
@@ -95,8 +95,7 @@ def compress(data,
mode=DEFAULT_MODE,
quality=lib.BROTLI_DEFAULT_QUALITY,
lgwin=lib.BROTLI_DEFAULT_WINDOW,
- lgblock=0,
- dictionary=b''):
+ lgblock=0):
"""
Compress a string using Brotli.
@@ -142,7 +141,6 @@ def compress(data,
quality=quality,
lgwin=lgwin,
lgblock=lgblock,
- dictionary=dictionary
)
compressed_data = compressor._compress(data, lib.BROTLI_OPERATION_FINISH)
assert lib.BrotliEncoderIsFinished(compressor._encoder) == lib.BROTLI_TRUE
@@ -242,21 +240,13 @@ class Compressor(object):
range of this value is 16 to 24. If set to 0, the value will be set
based on ``quality``.
:type lgblock: ``int``
-
- :param dictionary: A pre-set dictionary for LZ77. Please use this with
- caution: if a dictionary is used for compression, the same dictionary
- **must** be used for decompression!
- :type dictionary: ``bytes``
"""
- _dictionary = None
- _dictionary_size = None
def __init__(self,
mode=DEFAULT_MODE,
quality=lib.BROTLI_DEFAULT_QUALITY,
lgwin=lib.BROTLI_DEFAULT_WINDOW,
- lgblock=0,
- dictionary=b''):
+ lgblock=0):
enc = lib.BrotliEncoderCreateInstance(
ffi.NULL, ffi.NULL, ffi.NULL
)
@@ -271,13 +261,6 @@ class Compressor(object):
_set_parameter(enc, lib.BROTLI_PARAM_LGWIN, "lgwin", lgwin)
_set_parameter(enc, lib.BROTLI_PARAM_LGBLOCK, "lgblock", lgblock)
- if dictionary:
- self._dictionary = ffi.new("uint8_t []", dictionary)
- self._dictionary_size = len(dictionary)
- lib.BrotliEncoderSetCustomDictionary(
- enc, self._dictionary_size, self._dictionary
- )
-
self._encoder = enc
def _compress(self, data, operation):
@@ -358,31 +341,12 @@ class Decompressor(object):
"""
An object that allows for streaming decompression of Brotli-compressed
data.
-
- .. versionchanged:: 0.5.0
- Added ``dictionary`` parameter.
-
- :param dictionary: A pre-set dictionary for LZ77. Please use this with
- caution: if a dictionary is used for compression, the same dictionary
- **must** be used for decompression!
- :type dictionary: ``bytes``
"""
- _dictionary = None
- _dictionary_size = None
- def __init__(self, dictionary=b''):
+ def __init__(self):
dec = lib.BrotliDecoderCreateInstance(ffi.NULL, ffi.NULL, ffi.NULL)
self._decoder = ffi.gc(dec, lib.BrotliDecoderDestroyInstance)
- if dictionary:
- self._dictionary = ffi.new("uint8_t []", dictionary)
- self._dictionary_size = len(dictionary)
- lib.BrotliDecoderSetCustomDictionary(
- self._decoder,
- self._dictionary_size,
- self._dictionary
- )
-
def decompress(self, data):
"""
Decompress part of a complete Brotli-compressed string.
diff --git a/src/brotli/build.py b/src/brotli/build.py
index 0e1bb80..f93d312 100644
--- a/src/brotli/build.py
+++ b/src/brotli/build.py
@@ -93,20 +93,6 @@ ffi.cdef("""
uint8_t** next_out,
size_t* total_out);
- /* Fills the new state with a dictionary for LZ77, warming up the
- ringbuffer, e.g. for custom static dictionaries for data formats.
- Not to be confused with the built-in transformable dictionary of Brotli.
- |size| should be less or equal to 2^24 (16MiB), otherwise the dictionary
- will be ignored. The dictionary must exist in memory until decoding is
- done and is owned by the caller. To use:
- 1) Allocate and initialize state with BrotliCreateInstance
- 2) Use BrotliSetCustomDictionary
- 3) Use BrotliDecompressStream
- 4) Clean up and free state with BrotliDestroyState
- */
- void BrotliDecoderSetCustomDictionary(
- BrotliDecoderState* s, size_t size, const uint8_t* dict);
-
/* Returns true, if decoder has some unconsumed output.
Otherwise returns false. */
BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s);
@@ -205,15 +191,6 @@ ffi.cdef("""
BrotliEncoderParameter p,
uint32_t value);
- /* Fills the new state with a dictionary for LZ77, warming up the
- ringbuffer, e.g. for custom static dictionaries for data formats.
- Not to be confused with the built-in transformable dictionary of Brotli.
- To decode, use BrotliSetCustomDictionary() of the decoder with the same
- dictionary. */
- void BrotliEncoderSetCustomDictionary(BrotliEncoderState* state,
- size_t size,
- const uint8_t* dict);
-
/* Check if encoder is in "finished" state, i.e. no more input is
acceptable and no more output will be produced.
Works only with BrotliEncoderCompressStream workflow.
diff --git a/test/test_simple_compression.py b/test/test_simple_compression.py
index b9921eb..e189f74 100644
--- a/test/test_simple_compression.py
+++ b/test/test_simple_compression.py
@@ -106,14 +106,6 @@ def test_compressed_data_roundtrips(s):
assert brotli.decompress(brotli.compress(s)) == s
-@given(binary(), binary())
-def test_compressed_data_with_dictionaries(s, dictionary):
- d = brotli.Decompressor(dictionary)
- compressed = brotli.compress(s, dictionary=dictionary)
- uncompressed = d.decompress(compressed)
- assert uncompressed == s
-
-
@pytest.mark.parametrize(
"params",
[