summaryrefslogtreecommitdiff
path: root/python-zipfile-deflate64.spec
diff options
context:
space:
mode:
Diffstat (limited to 'python-zipfile-deflate64.spec')
-rw-r--r--python-zipfile-deflate64.spec320
1 files changed, 320 insertions, 0 deletions
diff --git a/python-zipfile-deflate64.spec b/python-zipfile-deflate64.spec
new file mode 100644
index 0000000..30e64c4
--- /dev/null
+++ b/python-zipfile-deflate64.spec
@@ -0,0 +1,320 @@
+%global _empty_manifest_terminate_build 0
+Name: python-zipfile-deflate64
+Version: 0.2.0
+Release: 1
+Summary: Extract Deflate64 ZIP archives with Python's zipfile API.
+License: Apache 2.0
+URL: https://github.com/brianhelba/zipfile-deflate64
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/03/1b/f397f821b48156ee94c5ca7ad82dc5cdb73cbcbc4377b9c1b21556f3ce8c/zipfile-deflate64-0.2.0.tar.gz
+
+
+%description
+# zipfile-deflate64
+[![PyPI](https://img.shields.io/pypi/v/zipfile-deflate64)](https://pypi.org/project/zipfile-deflate64/)
+
+Extract Deflate64 ZIP archives with Python's `zipfile` API.
+
+## Installation
+```bash
+pip install zipfile-deflate64
+```
+
+Python 3.6, 3.7, 3.8, 3.9, and 3.10 are supported,
+with [manylinux2014](https://github.com/pypa/manylinux), macOS and Windows wheels published to PyPI.
+
+## Usage
+Anywhere in a Python codebase:
+```python
+import zipfile_deflate64 # This has the side effect of patching the zipfile module to support Deflate64
+```
+
+Alternatively, `zipfile_deflate64` re-exports the `zipfile` API, as a convenience:
+```python
+import zipfile_deflate64 as zipfile
+
+zipfile.ZipFile(...)
+...
+```
+
+## Design Rationale
+### The Problem
+Recent versions of Microsoft Windows Explorer
+[use Deflate64 compression when creating ZIP files larger than 2GB](https://github.com/dotnet/runtime/issues/17802#issuecomment-231808916).
+With the ubiquity of Windows and the ease of using "Sent to compressed folder", a majority of newly-created large
+ZIP files use Deflate64 compression.
+
+However, **support for Deflate64 in the open-source ecosystem is very poor**!
+Most ZIP libraries have declined to implement Deflate64,
+citing [its proprietary nature](https://en.wikipedia.org/wiki/Deflate#Deflate64/Enhanced_Deflate).
+
+In the .NET ecosystem, the [`ZipArchive` API supports decompression only](https://github.com/dotnet/corefx/pull/11264).
+In Java, the [Apache Commons Compress APIs support both compression and decompression](https://commons.apache.org/proper/commons-compress/examples.html#Archivers_and_Compressors).
+
+The 7-Zip project probably provides the best general-purpose support for compressing and decompressing
+Deflate64, but there are several obstacles to general usability:
+* [7-Zip itself](https://www.7-zip.org/) is a Windows-only GUI application
+ * 7-Zip is still issuing new releases, but has declined to implement certain new compression formats,
+ so the [mcmilk/7-Zip-zstd](https://github.com/mcmilk/7-Zip-zstd) fork is notable.
+* [p7zip, the POSIX-compatible CLI version](http://p7zip.sourceforge.net/) (which does include Deflate64),
+ [has not had a release since 2016 and is likely unmaintained](https://github.com/jinfeihan57/p7zip/issues/114#issuecomment-761551564).
+* p7zip does not build an API for external software to invoke for decompression.
+* p7zip seems to now be living on as the [jinfeihan57/p7zip](https://github.com/jinfeihan57/p7zip) fork,
+ which is packaged by Arch Linux, amongst others.
+ * This seems to be active, and now can be built with CMake, but there's no support for building an external API.
+* Many re-implementations of 7-Zip, such as [py7zr](https://github.com/miurahr/py7zr) for Python, do not support
+ Deflate64.
+
+In the Python ecosystem in particular, there have been several unfulfilled requests (
+[[1]](https://github.com/UCL-ShippingGroup/pyrate/issues/33)
+[[2]](https://www.reddit.com/r/learnpython/comments/iqr6eb/zip_files_with_compression_type_9_deflate64/)
+[[3]](https://stackoverflow.com/a/12809847)
+) for Deflate64 decompression support.
+
+### A Solution
+The best hope seems to be the [infback9](https://github.com/madler/zlib/tree/master/contrib/infback9) extension
+to zlib. This was developed in 2003 by Mark Adler, an original author of zlib, and is kept in the source repository
+of zlib, but it is not officially supported and contains no build tooling and is not distributed with zlib packages.
+Additionally, infback9 provides only low-level support for working with Deflate64 bitstreams, with no support for
+the ZIP archive format (which is out of scope for zlib).
+
+infback9's C-language API is relatively simple, but requires a non-trivial struct and function pointers for
+initialization and some explicit memory management operations (resizing allocated buffers and proving a
+Python-friendly `malloc`) to operate efficiently, so wrapping it with only
+[ctypes](https://docs.python.org/3/library/ctypes.html) seems to be inadequate.
+
+To manage ZIP archive extraction operations, the Python standard library
+[zipfile](https://docs.python.org/3/library/zipfile.html) module provides the essential features and is already
+ubiquitous in availability and usage. However, zipfile is difficult to extend, as it hardcodes many conditionals for
+compression formats and does not provide capabilities for easily augmenting or replacing parts of it. Monkey-patching
+can overcome some of these problems, and the promise of a drop-in, API-compatible patch to a standard library module
+outweighed the engineering benefits of basing a solution off a more naturally extensible third-party ZIP manipulation
+package.
+
+
+
+
+%package -n python3-zipfile-deflate64
+Summary: Extract Deflate64 ZIP archives with Python's zipfile API.
+Provides: python-zipfile-deflate64
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+BuildRequires: python3-cffi
+BuildRequires: gcc
+BuildRequires: gdb
+%description -n python3-zipfile-deflate64
+# zipfile-deflate64
+[![PyPI](https://img.shields.io/pypi/v/zipfile-deflate64)](https://pypi.org/project/zipfile-deflate64/)
+
+Extract Deflate64 ZIP archives with Python's `zipfile` API.
+
+## Installation
+```bash
+pip install zipfile-deflate64
+```
+
+Python 3.6, 3.7, 3.8, 3.9, and 3.10 are supported,
+with [manylinux2014](https://github.com/pypa/manylinux), macOS and Windows wheels published to PyPI.
+
+## Usage
+Anywhere in a Python codebase:
+```python
+import zipfile_deflate64 # This has the side effect of patching the zipfile module to support Deflate64
+```
+
+Alternatively, `zipfile_deflate64` re-exports the `zipfile` API, as a convenience:
+```python
+import zipfile_deflate64 as zipfile
+
+zipfile.ZipFile(...)
+...
+```
+
+## Design Rationale
+### The Problem
+Recent versions of Microsoft Windows Explorer
+[use Deflate64 compression when creating ZIP files larger than 2GB](https://github.com/dotnet/runtime/issues/17802#issuecomment-231808916).
+With the ubiquity of Windows and the ease of using "Sent to compressed folder", a majority of newly-created large
+ZIP files use Deflate64 compression.
+
+However, **support for Deflate64 in the open-source ecosystem is very poor**!
+Most ZIP libraries have declined to implement Deflate64,
+citing [its proprietary nature](https://en.wikipedia.org/wiki/Deflate#Deflate64/Enhanced_Deflate).
+
+In the .NET ecosystem, the [`ZipArchive` API supports decompression only](https://github.com/dotnet/corefx/pull/11264).
+In Java, the [Apache Commons Compress APIs support both compression and decompression](https://commons.apache.org/proper/commons-compress/examples.html#Archivers_and_Compressors).
+
+The 7-Zip project probably provides the best general-purpose support for compressing and decompressing
+Deflate64, but there are several obstacles to general usability:
+* [7-Zip itself](https://www.7-zip.org/) is a Windows-only GUI application
+ * 7-Zip is still issuing new releases, but has declined to implement certain new compression formats,
+ so the [mcmilk/7-Zip-zstd](https://github.com/mcmilk/7-Zip-zstd) fork is notable.
+* [p7zip, the POSIX-compatible CLI version](http://p7zip.sourceforge.net/) (which does include Deflate64),
+ [has not had a release since 2016 and is likely unmaintained](https://github.com/jinfeihan57/p7zip/issues/114#issuecomment-761551564).
+* p7zip does not build an API for external software to invoke for decompression.
+* p7zip seems to now be living on as the [jinfeihan57/p7zip](https://github.com/jinfeihan57/p7zip) fork,
+ which is packaged by Arch Linux, amongst others.
+ * This seems to be active, and now can be built with CMake, but there's no support for building an external API.
+* Many re-implementations of 7-Zip, such as [py7zr](https://github.com/miurahr/py7zr) for Python, do not support
+ Deflate64.
+
+In the Python ecosystem in particular, there have been several unfulfilled requests (
+[[1]](https://github.com/UCL-ShippingGroup/pyrate/issues/33)
+[[2]](https://www.reddit.com/r/learnpython/comments/iqr6eb/zip_files_with_compression_type_9_deflate64/)
+[[3]](https://stackoverflow.com/a/12809847)
+) for Deflate64 decompression support.
+
+### A Solution
+The best hope seems to be the [infback9](https://github.com/madler/zlib/tree/master/contrib/infback9) extension
+to zlib. This was developed in 2003 by Mark Adler, an original author of zlib, and is kept in the source repository
+of zlib, but it is not officially supported and contains no build tooling and is not distributed with zlib packages.
+Additionally, infback9 provides only low-level support for working with Deflate64 bitstreams, with no support for
+the ZIP archive format (which is out of scope for zlib).
+
+infback9's C-language API is relatively simple, but requires a non-trivial struct and function pointers for
+initialization and some explicit memory management operations (resizing allocated buffers and proving a
+Python-friendly `malloc`) to operate efficiently, so wrapping it with only
+[ctypes](https://docs.python.org/3/library/ctypes.html) seems to be inadequate.
+
+To manage ZIP archive extraction operations, the Python standard library
+[zipfile](https://docs.python.org/3/library/zipfile.html) module provides the essential features and is already
+ubiquitous in availability and usage. However, zipfile is difficult to extend, as it hardcodes many conditionals for
+compression formats and does not provide capabilities for easily augmenting or replacing parts of it. Monkey-patching
+can overcome some of these problems, and the promise of a drop-in, API-compatible patch to a standard library module
+outweighed the engineering benefits of basing a solution off a more naturally extensible third-party ZIP manipulation
+package.
+
+
+
+
+%package help
+Summary: Development documents and examples for zipfile-deflate64
+Provides: python3-zipfile-deflate64-doc
+%description help
+# zipfile-deflate64
+[![PyPI](https://img.shields.io/pypi/v/zipfile-deflate64)](https://pypi.org/project/zipfile-deflate64/)
+
+Extract Deflate64 ZIP archives with Python's `zipfile` API.
+
+## Installation
+```bash
+pip install zipfile-deflate64
+```
+
+Python 3.6, 3.7, 3.8, 3.9, and 3.10 are supported,
+with [manylinux2014](https://github.com/pypa/manylinux), macOS and Windows wheels published to PyPI.
+
+## Usage
+Anywhere in a Python codebase:
+```python
+import zipfile_deflate64 # This has the side effect of patching the zipfile module to support Deflate64
+```
+
+Alternatively, `zipfile_deflate64` re-exports the `zipfile` API, as a convenience:
+```python
+import zipfile_deflate64 as zipfile
+
+zipfile.ZipFile(...)
+...
+```
+
+## Design Rationale
+### The Problem
+Recent versions of Microsoft Windows Explorer
+[use Deflate64 compression when creating ZIP files larger than 2GB](https://github.com/dotnet/runtime/issues/17802#issuecomment-231808916).
+With the ubiquity of Windows and the ease of using "Sent to compressed folder", a majority of newly-created large
+ZIP files use Deflate64 compression.
+
+However, **support for Deflate64 in the open-source ecosystem is very poor**!
+Most ZIP libraries have declined to implement Deflate64,
+citing [its proprietary nature](https://en.wikipedia.org/wiki/Deflate#Deflate64/Enhanced_Deflate).
+
+In the .NET ecosystem, the [`ZipArchive` API supports decompression only](https://github.com/dotnet/corefx/pull/11264).
+In Java, the [Apache Commons Compress APIs support both compression and decompression](https://commons.apache.org/proper/commons-compress/examples.html#Archivers_and_Compressors).
+
+The 7-Zip project probably provides the best general-purpose support for compressing and decompressing
+Deflate64, but there are several obstacles to general usability:
+* [7-Zip itself](https://www.7-zip.org/) is a Windows-only GUI application
+ * 7-Zip is still issuing new releases, but has declined to implement certain new compression formats,
+ so the [mcmilk/7-Zip-zstd](https://github.com/mcmilk/7-Zip-zstd) fork is notable.
+* [p7zip, the POSIX-compatible CLI version](http://p7zip.sourceforge.net/) (which does include Deflate64),
+ [has not had a release since 2016 and is likely unmaintained](https://github.com/jinfeihan57/p7zip/issues/114#issuecomment-761551564).
+* p7zip does not build an API for external software to invoke for decompression.
+* p7zip seems to now be living on as the [jinfeihan57/p7zip](https://github.com/jinfeihan57/p7zip) fork,
+ which is packaged by Arch Linux, amongst others.
+ * This seems to be active, and now can be built with CMake, but there's no support for building an external API.
+* Many re-implementations of 7-Zip, such as [py7zr](https://github.com/miurahr/py7zr) for Python, do not support
+ Deflate64.
+
+In the Python ecosystem in particular, there have been several unfulfilled requests (
+[[1]](https://github.com/UCL-ShippingGroup/pyrate/issues/33)
+[[2]](https://www.reddit.com/r/learnpython/comments/iqr6eb/zip_files_with_compression_type_9_deflate64/)
+[[3]](https://stackoverflow.com/a/12809847)
+) for Deflate64 decompression support.
+
+### A Solution
+The best hope seems to be the [infback9](https://github.com/madler/zlib/tree/master/contrib/infback9) extension
+to zlib. This was developed in 2003 by Mark Adler, an original author of zlib, and is kept in the source repository
+of zlib, but it is not officially supported and contains no build tooling and is not distributed with zlib packages.
+Additionally, infback9 provides only low-level support for working with Deflate64 bitstreams, with no support for
+the ZIP archive format (which is out of scope for zlib).
+
+infback9's C-language API is relatively simple, but requires a non-trivial struct and function pointers for
+initialization and some explicit memory management operations (resizing allocated buffers and proving a
+Python-friendly `malloc`) to operate efficiently, so wrapping it with only
+[ctypes](https://docs.python.org/3/library/ctypes.html) seems to be inadequate.
+
+To manage ZIP archive extraction operations, the Python standard library
+[zipfile](https://docs.python.org/3/library/zipfile.html) module provides the essential features and is already
+ubiquitous in availability and usage. However, zipfile is difficult to extend, as it hardcodes many conditionals for
+compression formats and does not provide capabilities for easily augmenting or replacing parts of it. Monkey-patching
+can overcome some of these problems, and the promise of a drop-in, API-compatible patch to a standard library module
+outweighed the engineering benefits of basing a solution off a more naturally extensible third-party ZIP manipulation
+package.
+
+
+
+
+%prep
+%autosetup -n zipfile-deflate64-0.2.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-zipfile-deflate64 -f filelist.lst
+%dir %{python3_sitearch}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Thu May 18 2023 Python_Bot <Python_Bot@openeuler.org> - 0.2.0-1
+- Package Spec generated