diff --git a/.gitignore b/.gitignore index 1c4c1bd..2f401ac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,2 @@ -/blosc-1.1.tar.gz -/blosc-1.2.3.tar.gz -/blosc-1.2.4.tar.gz -/blosc-1.2.5.tar.gz -/blosc-1.2.7.tar.gz -/blosc-1.2.8.tar.gz +/.build-*.log +/blosc-*.tar.gz diff --git a/0001-docs-update-example-for-newer-numpy.patch b/0001-docs-update-example-for-newer-numpy.patch new file mode 100644 index 0000000..e46338a --- /dev/null +++ b/0001-docs-update-example-for-newer-numpy.patch @@ -0,0 +1,30 @@ +From ed3998803650bec0666c3ca458df76fcd9293417 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 31 Oct 2025 12:33:57 +0100 +Subject: [PATCH] docs: update example for newer numpy + +File ".../usr/lib64/python3.14/site-packages/blosc/toplevel.py", line 515, in blosc.toplevel.compress_ptr +Failed example: + np_ans = numpy.fromstring(d, dtype=np_array.dtype) +Exception raised: + Traceback (most recent call last): + File "", line 1, in + np_ans = numpy.fromstring(d, dtype=np_array.dtype) + ValueError: The binary mode of fromstring is removed, use frombuffer instead +--- + blosc/toplevel.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/blosc/toplevel.py b/blosc/toplevel.py +index 4d2d4139af..3ef2327618 100644 +--- a/blosc/toplevel.py ++++ b/blosc/toplevel.py +@@ -513,7 +513,7 @@ def compress_ptr(address, items, typesize=8, clevel=9, shuffle=blosc.SHUFFLE, + >>> c = blosc.compress_ptr(np_array.__array_interface__['data'][0], \ + items, np_array.dtype.itemsize) + >>> d = blosc.decompress(c) +- >>> np_ans = numpy.fromstring(d, dtype=np_array.dtype) ++ >>> np_ans = numpy.frombuffer(d, dtype=np_array.dtype) + >>> bool((np_array == np_ans).all()) + True + diff --git a/0001-tests-fix-error-with-new-numpy.patch b/0001-tests-fix-error-with-new-numpy.patch deleted file mode 100644 index 613f7cc..0000000 --- a/0001-tests-fix-error-with-new-numpy.patch +++ /dev/null @@ -1,35 +0,0 @@ -From b49ff10a169a0c8e862a5dbe0f4b291cef17f9d0 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= -Date: Sat, 13 Feb 2016 17:35:36 -0500 -Subject: [PATCH] tests: fix error with new numpy - -ERROR: test_pack_array_exceptions (blosc.test.TestCodec) ----------------------------------------------------------------------- -Traceback (most recent call last): - File "/builddir/build/BUILDROOT/python-blosc-1.2.8-2.fc24.i386/usr/lib/python2.7/site-packages/blosc/test.py", line 195, in test_pack_array_exceptions - strides=(8, 0))[0] - File "/usr/lib/python2.7/site-packages/numpy/lib/stride_tricks.py", line 48, in as_strided - array = np.asarray(DummyArray(interface, base=x)) - File "/usr/lib/python2.7/site-packages/numpy/core/numeric.py", line 482, in asarray - return array(a, dtype, copy=False, order=order) -TypeError: 'float' object cannot be interpreted as an index ---- - blosc/test.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/blosc/test.py b/blosc/test.py -index 8bf9c48600..ce96f5ec6f 100644 ---- a/blosc/test.py -+++ b/blosc/test.py -@@ -185,7 +185,7 @@ class TestCodec(unittest.TestCase): - self.assertRaises(TypeError, blosc.pack_array, 'abc') - self.assertRaises(TypeError, blosc.pack_array, 1.0) - -- items = (blosc.BLOSC_MAX_BUFFERSIZE / 8) + 1 -+ items = (blosc.BLOSC_MAX_BUFFERSIZE // 8) + 1 - one = numpy.ones(1, dtype=numpy.int64) - self.assertRaises(ValueError, blosc.pack_array, one, clevel=-1) - self.assertRaises(ValueError, blosc.pack_array, one, clevel=10) --- -2.5.0 - diff --git a/changelog b/changelog new file mode 100644 index 0000000..915172e --- /dev/null +++ b/changelog @@ -0,0 +1,160 @@ +* Fri Jul 23 2021 Fedora Release Engineering - 1.10.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Jun 15 2021 Zbigniew Jędrzejewski-Szmek - 1.10.4-1 +- Latest bugfix version (#1966828) + +* Fri Jun 04 2021 Python Maint - 1.10.2-2 +- Rebuilt for Python 3.10 + +* Sat Feb 13 2021 Zbigniew Jędrzejewski-Szmek - 1.10.2-1 +- Latest version (#1783504) + +* Wed Jan 27 2021 Fedora Release Engineering - 1.8.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Jul 28 2020 Fedora Release Engineering - 1.8.1-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Wed May 27 2020 Charalampos Stratakis - 1.8.1-7 +- Fix Python 3.9 compatibility (#1792055) + +* Tue May 26 2020 Miro Hrončok - 1.8.1-6 +- Rebuilt for Python 3.9 + +* Thu Jan 30 2020 Fedora Release Engineering - 1.8.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Oct 03 2019 Miro Hrončok - 1.8.1-4 +- Rebuilt for Python 3.8.0rc1 (#1748018) + +* Mon Aug 19 2019 Miro Hrončok - 1.8.1-3 +- Rebuilt for Python 3.8 + +* Fri Jul 26 2019 Fedora Release Engineering - 1.8.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sun May 5 2019 Zbigniew Jędrzejewski-Szmek - 1.8.1-1 +- Update to latest version (#1684965) + +* Sat Feb 02 2019 Fedora Release Engineering - 1.5.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Oct 17 2018 Zbigniew Jędrzejewski-Szmek - 1.5.1-2 +- Subpackage python2-blosc has been removed + See https://fedoraproject.org/wiki/Changes/Mass_Python_2_Package_Removal + +* Thu Jul 19 2018 Zbigniew Jędrzejewski-Szmek - 1.5.1-1 +- Update to latest version (#1372856) + +* Fri Jul 13 2018 Fedora Release Engineering - 1.4.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 19 2018 Miro Hrončok - 1.4.1-8 +- Rebuilt for Python 3.7 + +* Fri Feb 09 2018 Fedora Release Engineering - 1.4.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Aug 03 2017 Fedora Release Engineering - 1.4.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 1.4.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 1.4.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Thu Jan 05 2017 Dan Horák - 1.4.1-3 +- remove build time CPU detection, fixed build on ppc64/ppc64le and s390(x) + +* Mon Dec 19 2016 Miro Hrončok - 1.4.1-2 +- Rebuild for Python 3.6 + +* Thu Jul 28 2016 Zbigniew Jędrzejewski-Szmek - 1.4.1-1 +- Update to latest version (#1323008) + +* Tue Jul 19 2016 Fedora Release Engineering - 1.3.3-2 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Thu Jul 14 2016 Thibault North - 1.3.3-1 +- Update to 1.3.3 + +* Mon May 16 2016 Orion Poplawski - 1.3.2-1 +- Update to 1.3.2 + +* Mon May 16 2016 Orion Poplawski - 1.2.8-3 +- Fix provides filter +- Use %%python3_pkgversion for EPEL7 compatibility + +* Sat Feb 13 2016 Zbigniew Jędrzejewski-Szmek - 1.2.8-2 +- Add dependency on psutil to check for leaks during build +- Fix build (#1307896) + +* Thu Feb 04 2016 Fedora Release Engineering - 1.2.8-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Nov 16 2015 Zbigniew Jędrzejewski-Szmek - 1.2.8-1 +- Update to latest version (#1263680) +- Add python2 subpackage following the latest guidelines + +* Tue Nov 10 2015 Fedora Release Engineering - 1.2.7-5 +- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 + +* Thu Jun 18 2015 Fedora Release Engineering - 1.2.7-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri May 29 2015 Zbigniew Jędrzejewski-Szmek - 1.2.7-3 +- Run test suite + +* Thu May 28 2015 Zbigniew Jędrzejewski-Szmek - 1.2.7-2 +- Build python 3 subpackage +- Install license and readme files + +* Thu May 7 2015 Zbigniew Jędrzejewski-Szmek - 1.2.7-1 +- Update to 1.2.7 (#1212231) + +* Mon Apr 20 2015 Zbigniew Jędrzejewski-Szmek - 1.2.5-1 +- Update to 1.2.5 (#1212231) + +* Tue Jan 06 2015 Zbigniew Jędrzejewski-Szmek - 1.2.4-1 +- Update to 1.2.4 + +* Sun Aug 17 2014 Fedora Release Engineering - 1.2.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 1.2.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Wed Mar 26 2014 Zbigniew Jędrzejewski-Szmek - 1.2.3-2 +- Rebuild for blosc + +* Sat Mar 22 2014 Thibault North - 1.2.3-1 +- Update to 1.2.3 for blosc 1.3.4 + +* Wed Jan 08 2014 Zbigniew Jędrzejewski-Szmek - 1.1-8 +- Rebuild for blosc + +* Tue Nov 05 2013 Thibault North - 1.1-7 +- Properly link with blosc shared lib + +* Tue Nov 05 2013 Thibault North - 1.1-6 +- Disable SSE2 optimizations + +* Tue Nov 05 2013 Thibault North - 1.1-5 +- Final cosmetic fixes + +* Tue Nov 05 2013 Thibault North - 1.1-4 +- Fix wrong lib perms + +* Fri Oct 18 2013 Thibault North - 1.1-3 +- Fixes, thanks to Christopher Meng + +* Wed Oct 16 2013 Thibault North - 1.1-2 +- Various fixes + +* Fri Sep 20 2013 Thibault North - 1.1-1 +- Sync to version 1.1 + +* Mon Jan 2 2012 Thibault North - 1.0.7-1 +- Initial package diff --git a/python-blosc.spec b/python-blosc.spec index 18583af..4e93d3a 100644 --- a/python-blosc.spec +++ b/python-blosc.spec @@ -1,162 +1,58 @@ -%global with_python3 0%{?fedora} - -%global __provides_filter_from ^%{python_sitearch}/.*\\.so$ -%global __provides_filter_from ^%{python3_sitearch}/.*\\.so$ - -%global module blosc - -# Use the same directory of the main package for subpackage licence and docs -%global _docdir_fmt %{name} - +Name: python-blosc Summary: Python wrapper for the Blosc high performance compressor -Name: python-%{module} -Version: 1.2.8 -Release: 2%{?dist} -License: MIT -URL: https://github.com/FrancescAlted/python-blosc -Source0: https://pypi.python.org/packages/source/b/%{module}/%{module}-%{version}.tar.gz -Patch0: 0001-tests-fix-error-with-new-numpy.patch +Version: 1.11.3 +Release: %autorelease +License: BSD-3-Clause +URL: https://github.com/Blosc/python-blosc +Source0: https://github.com/Blosc/python-blosc/archive/v%{version}/blosc-%{version}.tar.gz +Source1: https://raw.githubusercontent.com/Blosc/python-blosc/f3c5e341a2504a03c225f4f1d9066ccdf4bd31dd/setup.py -BuildRequires: blosc-devel -BuildRequires: python2-devel -BuildRequires: numpy -BuildRequires: python2-psutil +Patch: 0001-docs-update-example-for-newer-numpy.patch + +BuildRequires: gcc +BuildRequires: blosc-devel >= 1.16.0 +BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python%{python3_pkgversion}-setuptools +BuildRequires: python%{python3_pkgversion}-numpy +BuildRequires: python%{python3_pkgversion}-psutil +BuildRequires: python%{python3_pkgversion}-cpuinfo %description %{summary}. -%package -n python2-%{module} -Summary: %{summary} - -%{?python_provide:%python_provide python2-blosc} -%{?fedora:Recommends: numpy} - -%description -n python2-%{module} -%{summary}. - -%if 0%{?with_python3} -%package -n python3-%{module} +%package -n python%{python3_pkgversion}-blosc Summary: Python wrapper for the blosc high performance compressor +Requires: blosc%{_isa} >= 1.16.0 -BuildRequires: python3-devel -BuildRequires: python3-numpy -BuildRequires: python3-psutil -%{?python_provide:%python_provide python3-blosc} -%{?fedora:Recommends: python3-numpy} +%{?python_provide:%python_provide python%{python3_pkgversion}-blosc} +%{?fedora:Recommends: python%{python3_pkgversion}-numpy} -%description -n python3-%{module} +%description -n python%{python3_pkgversion}-blosc %{summary}. -%endif %prep -%autosetup -n %{module}-%{version} -p1 +%autosetup -p1 -# Don't enable SSE2 optimizations -sed -i "s|CFLAGS\.append(\"-msse2\")|pass|" setup.py +# Overwrite setup.py with the last version that does not use skbuild and cmake +cp %{SOURCE1} . %build export BLOSC_DIR=%{_libdir}/blosc CFLAGS="%{optflags}" -%py2_build -%if 0%{?with_python3} +export DISABLE_BLOSC_AVX2=1 %py3_build -%endif %install -%py2_install -%if 0%{?with_python3} %py3_install -%endif - -%files -n python2-%{module} -%{python2_sitearch}/blosc/ -%{python2_sitearch}/blosc-%{version}*-py*.egg-info -%license LICENSES/PYTHON-BLOSC.txt -%doc README.rst RELEASE_NOTES.rst - -%if 0%{?with_python3} -%files -n python3-%{module} -%{python3_sitearch}/blosc/ -%{python3_sitearch}/blosc-%{version}*-py*.egg-info -%license LICENSES/PYTHON-BLOSC.txt -%doc README.rst RELEASE_NOTES.rst -%endif %check cd / # avoid interference with build dir -PYTHONPATH=%{buildroot}%{python2_sitearch} python -c 'import sys, blosc; sys.exit(blosc.test())' -%if 0%{?with_python3} -PYTHONPATH=%{buildroot}%{python3_sitearch} python3 -c 'import sys, blosc; sys.exit(blosc.test())' -%endif +PYTHONPATH=%{buildroot}%{python3_sitearch} %__python3 -c 'import sys, blosc; sys.exit(blosc.test())' + +%files -n python%{python3_pkgversion}-blosc +%{python3_sitearch}/blosc/ +%{python3_sitearch}/blosc-%{version}*-py*.egg-info +%license LICENSE.txt +%doc README.rst RELEASE_NOTES.rst %changelog -* Sat Feb 13 2016 Zbigniew Jędrzejewski-Szmek - 1.2.8-2 -- Add dependency on psutil to check for leaks during build -- Fix build (#1307896) - -* Thu Feb 04 2016 Fedora Release Engineering - 1.2.8-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Mon Nov 16 2015 Zbigniew Jędrzejewski-Szmek - 1.2.8-1 -- Update to latest version (#1263680) -- Add python2 subpackage following the latest guidelines - -* Tue Nov 10 2015 Fedora Release Engineering - 1.2.7-5 -- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 - -* Thu Jun 18 2015 Fedora Release Engineering - 1.2.7-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Fri May 29 2015 Zbigniew Jędrzejewski-Szmek - 1.2.7-3 -- Run test suite - -* Thu May 28 2015 Zbigniew Jędrzejewski-Szmek - 1.2.7-2 -- Build python 3 subpackage -- Install license and readme files - -* Thu May 7 2015 Zbigniew Jędrzejewski-Szmek - 1.2.7-1 -- Update to 1.2.7 (#1212231) - -* Mon Apr 20 2015 Zbigniew Jędrzejewski-Szmek - 1.2.5-1 -- Update to 1.2.5 (#1212231) - -* Tue Jan 06 2015 Zbigniew Jędrzejewski-Szmek - 1.2.4-1 -- Update to 1.2.4 - -* Sun Aug 17 2014 Fedora Release Engineering - 1.2.3-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Sat Jun 07 2014 Fedora Release Engineering - 1.2.3-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Wed Mar 26 2014 Zbigniew Jędrzejewski-Szmek - 1.2.3-2 -- Rebuild for blosc - -* Sat Mar 22 2014 Thibault North - 1.2.3-1 -- Update to 1.2.3 for blosc 1.3.4 - -* Wed Jan 08 2014 Zbigniew Jędrzejewski-Szmek - 1.1-8 -- Rebuild for blosc - -* Tue Nov 05 2013 Thibault North - 1.1-7 -- Properly link with blosc shared lib - -* Tue Nov 05 2013 Thibault North - 1.1-6 -- Disable SSE2 optimizations - -* Tue Nov 05 2013 Thibault North - 1.1-5 -- Final cosmetic fixes - -* Tue Nov 05 2013 Thibault North - 1.1-4 -- Fix wrong lib perms - -* Fri Oct 18 2013 Thibault North - 1.1-3 -- Fixes, thanks to Christopher Meng - -* Wed Oct 16 2013 Thibault North - 1.1-2 -- Various fixes - -* Fri Sep 20 2013 Thibault North - 1.1-1 -- Sync to version 1.1 - -* Mon Jan 2 2012 Thibault North - 1.0.7-1 -- Initial package +%autochangelog diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..2508a94 --- /dev/null +++ b/setup.py @@ -0,0 +1,327 @@ +# -*- coding: utf-8 -*- +######################################################################## +# +# License: BSD 3-clause +# Created: September 22, 2010 +# Author: Francesc Alted - faltet@gmail.com +# +######################################################################## + +# flake8: noqa + +from __future__ import print_function + +import os +import platform +import re +import sys +import io + +from setuptools import Extension +from setuptools import setup +from glob import glob +from distutils.version import LooseVersion +from distutils.command.build_ext import build_ext +from distutils.errors import CompileError +from textwrap import dedent + + +class BloscExtension(Extension): + """Allows extension to carry architecture-capable flag options. + + Attributes: + avx2_def (Dict[str]: List[str]): + AVX2 support dictionary mapping Extension properties to a + list of values. If compiler is AVX2 capable, then these will + be appended onto the end of the Extension properties. + """ + + def __init__(self, *args, **kwargs): + self.avx2_defs = kwargs.pop("avx2_defs", {}) + Extension.__init__(self, *args, **kwargs) + + +class build_ext_posix_avx2(build_ext): + """build_ext customized to test for AVX2 support in posix compiler. + + This is because until distutils has actually started the build + process, we can't be certain what compiler is being used. + + If compiler supports, then the avx2_defs dictionary on any given + Extension will be used to extend the other Extension attributes. + """ + + def _test_compiler_flags(self, name, flags): + # type: (List[str]) -> Bool + """Test that a sample program can compile with given flags. + + Attr: + flags (List[str]): the flags to test + name (str): An identifier-like name to cache the results as + + Returns: + (bool): Whether the compiler accepted the flags(s) + """ + # Look to see if we have a written file to cache the result + success_file = os.path.join(self.build_temp, "_{}_present".format(name)) + fail_file = os.path.join(self.build_temp, "_{}_failed".format(name)) + if os.path.isfile(success_file): + return True + elif os.path.isfile(fail_file): + return False + # No cache file, try to run the compile + try: + # Write an empty test file + test_file = os.path.join(self.build_temp, "test_{}_empty.c".format(name)) + if not os.path.isfile(test_file): + open(test_file, "w").close() + objects = self.compiler.compile( + [test_file], output_dir=self.build_temp, extra_postargs=flags + ) + # Write a success marker so we don't need to compile again + open(success_file, 'w').close() + return True + except CompileError: + # Write a failure marker so we don't need to compile again + open(fail_file, 'w').close() + return False + finally: + pass + + def build_extensions(self): + # Verify that the compiler supports requested extra flags + if self._test_compiler_flags("avx2", ["-mavx2"]): + # Apply the AVX2 properties to each extension + for extension in self.extensions: + if hasattr(extension, "avx2_defs"): + # Extend an existing attribute with the stored values + for attr, defs in extension.avx2_defs.items(): + getattr(extension, attr).extend(defs) + else: + print("AVX2 Unsupported by compiler") + + # Call up to the superclass to do the actual build + build_ext.build_extensions(self) + + +if __name__ == '__main__': + + with io.open('README.rst', encoding='utf-8') as f: + long_description = f.read() + + try: + import cpuinfo + cpu_info = cpuinfo.get_cpu_info() + except Exception: + # newer cpuinfo versions fail to import on unsupported architectures + cpu_info = None + + ########### Check versions ########## + def exit_with_error(message): + print('ERROR: %s' % message) + sys.exit(1) + + # Check for Python + if sys.version_info[0] == 2: + if sys.version_info[1] < 7: + exit_with_error("You need Python 2.7 or greater to install blosc!") + elif sys.version_info[0] == 3: + if sys.version_info[1] < 4: + exit_with_error("You need Python 3.4 or greater to install blosc!") + else: + exit_with_error("You need Python 2.7/3.4 or greater to install blosc!") + + tests_require = ['numpy', 'psutil'] + + ########### End of checks ########## + + # Read the long_description from README.rst + with open('README.rst') as f: + long_description = f.read() + + # Blosc version + VERSION = open('VERSION').read().strip() + # Create the version.py file + open('blosc/version.py', 'w').write('__version__ = "%s"\n' % VERSION) + + # Global variables + CFLAGS = os.environ.get('CFLAGS', '').split() + LFLAGS = os.environ.get('LFLAGS', '').split() + # Allow setting the Blosc dir if installed in the system + BLOSC_DIR = os.environ.get('BLOSC_DIR', '') + + # Check for USE_CODEC environment variables + try: + INCLUDE_LZ4 = os.environ['INCLUDE_LZ4'] == '1' + except KeyError: + INCLUDE_LZ4 = True + try: + INCLUDE_SNAPPY = os.environ['INCLUDE_SNAPPY'] == '1' + except KeyError: + INCLUDE_SNAPPY = False # Snappy is disabled by default + try: + INCLUDE_ZLIB = os.environ['INCLUDE_ZLIB'] == '1' + except KeyError: + INCLUDE_ZLIB = True + try: + INCLUDE_ZSTD = os.environ['INCLUDE_ZSTD'] == '1' + except KeyError: + INCLUDE_ZSTD = True + + + # Handle --blosc=[PATH] --lflags=[FLAGS] --cflags=[FLAGS] + args = sys.argv[:] + for arg in args: + if arg.find('--blosc=') == 0: + BLOSC_DIR = os.path.expanduser(arg.split('=')[1]) + sys.argv.remove(arg) + if arg.find('--lflags=') == 0: + LFLAGS = arg.split('=')[1].split() + sys.argv.remove(arg) + if arg.find('--cflags=') == 0: + CFLAGS = arg.split('=')[1].split() + sys.argv.remove(arg) + + + # Blosc sources and headers + + # To avoid potential namespace collisions use build_clib.py for each codec + # instead of co-compiling all sources files in one setuptools.Extension object. + clibs = [] # for build_clib, libraries TO BE BUILT + + # Below are parameters for the Extension object + sources = ["blosc/blosc_extension.c"] + inc_dirs = [] + lib_dirs = [] + libs = [] # Pre-built libraries ONLY, like python36.so + def_macros = [] + builder_class = build_ext # To swap out if we have AVX capability and posix + avx2_defs = {} # Definitions to build extension with if compiler supports AVX2 + + if BLOSC_DIR != '': + # Using the Blosc library + lib_dirs += [os.path.join(BLOSC_DIR, 'lib')] + inc_dirs += [os.path.join(BLOSC_DIR, 'include')] + libs += ['blosc'] + else: + + # Configure the Extension + # Compiling everything from included C-Blosc sources + sources += [f for f in glob('c-blosc/blosc/*.c') + if 'avx2' not in f and 'sse2' not in f] + + inc_dirs += [os.path.join('c-blosc', 'blosc')] + inc_dirs += glob('c-blosc/internal-complibs/*') + + # Codecs to be built with build_clib + if INCLUDE_LZ4: + clibs.append( ('lz4', {'sources': glob('c-blosc/internal-complibs/lz4*/*.c')} ) ) + inc_dirs += glob('c-blosc/internal-complibs/lz4*') + def_macros += [('HAVE_LZ4',1)] + + # Tried and failed to compile Snappy with gcc using 'cflags' on posix + # setuptools always uses gcc instead of g++, as it only checks for the + # env var 'CC' and not 'CXX'. + if INCLUDE_SNAPPY: + clibs.append( ('snappy', {'sources': glob('c-blosc/internal-complibs/snappy*/*.cc'), + 'cflags': ['-std=c++11', '-lstdc++'] } ) ) + inc_dirs += glob('c-blosc/internal-complibs/snappy*') + def_macros += [('HAVE_SNAPPY',1)] + + if INCLUDE_ZLIB: + clibs.append( ('zlib', {'sources': glob('c-blosc/internal-complibs/zlib*/*.c')} ) ) + def_macros += [('HAVE_ZLIB',1)] + + if INCLUDE_ZSTD: + clibs.append( ('zstd', {'sources': glob('c-blosc/internal-complibs/zstd*/*/*.c'), + 'include_dirs': glob('c-blosc/internal-complibs/zstd*') + glob('c-blosc/internal-complibs/zstd*/common') } ) ) + inc_dirs += glob('c-blosc/internal-complibs/zstd*/common') + inc_dirs += glob('c-blosc/internal-complibs/zstd*') + def_macros += [('HAVE_ZSTD',1)] + + + # Guess SSE2 or AVX2 capabilities + # SSE2 + if 'DISABLE_BLOSC_SSE2' not in os.environ and cpu_info != None and 'sse2' in cpu_info.get('flags', {}): + print('SSE2 detected') + CFLAGS.append('-DSHUFFLE_SSE2_ENABLED') + sources += [f for f in glob('c-blosc/blosc/*.c') if 'sse2' in f] + if os.name == 'posix': + CFLAGS.append('-msse2') + elif os.name == 'nt': + def_macros += [('__SSE2__', 1)] + # AVX2 + if 'DISABLE_BLOSC_AVX2' not in os.environ and cpu_info != None and 'sse2' in cpu_info.get('flags', {}): + if os.name == 'posix': + print("AVX2 detected") + avx2_defs = { + "extra_compile_args": ["-DSHUFFLE_AVX2_ENABLED", "-mavx2"], + "sources": [f for f in glob("c-blosc/blosc/*.c") if "avx2" in f] + } + # The CPU supports it but the compiler might not.. + builder_class = build_ext_posix_avx2 + elif(os.name == 'nt' and + LooseVersion(platform.python_version()) >= LooseVersion('3.5.0')): + # Neither MSVC2008 for Python 2.7 or MSVC2010 for Python 3.4 have + # sufficient AVX2 support + # Since we don't rely on any special compiler capabilities, + # we don't need to rely on testing the compiler + print('AVX2 detected') + CFLAGS.append('-DSHUFFLE_AVX2_ENABLED') + sources += [f for f in glob('c-blosc/blosc/*.c') if 'avx2' in f] + def_macros += [('__AVX2__', 1)] + # TODO: AVX512 + + classifiers = dedent("""\ + Development Status :: 5 - Production/Stable + Intended Audience :: Developers + Intended Audience :: Information Technology + Intended Audience :: Science/Research + License :: OSI Approved :: BSD License + Programming Language :: Python + Programming Language :: Python :: 2.7 + Programming Language :: Python :: 3.4 + Programming Language :: Python :: 3.5 + Programming Language :: Python :: 3.6 + Programming Language :: Python :: 3.7 + Topic :: Software Development :: Libraries :: Python Modules + Topic :: System :: Archiving :: Compression + Operating System :: Microsoft :: Windows + Operating System :: Unix + """) + + setup(name = "blosc", + version = VERSION, + description = 'Blosc data compressor', + long_description = long_description, + classifiers = [c for c in classifiers.split("\n") if c], + author = 'Francesc Alted, Valentin Haenel', + author_email = 'faltet@gmail.com, valentin@haenel.co', + maintainer = 'Francesc Alted, Valentin Haenel', + maintainer_email = 'faltet@gmail.com, valentin@haenel.co', + url = 'http://github.com/blosc/python-blosc', + license = 'https://opensource.org/licenses/BSD-3-Clause', + platforms = ['any'], + libraries = clibs, + ext_modules = [ + BloscExtension( "blosc.blosc_extension", + include_dirs=inc_dirs, + define_macros=def_macros, + sources=sources, + library_dirs=lib_dirs, + libraries=libs, + extra_link_args=LFLAGS, + extra_compile_args=CFLAGS, + avx2_defs=avx2_defs + ), + ], + tests_require=tests_require, + zip_safe=False, + packages = ['blosc'], + cmdclass={'build_ext': builder_class}, + ) +elif __name__ == '__mp_main__': + # This occurs from `cpuinfo 4.0.0` using multiprocessing to interrogate the + # CPUID flags + # https://github.com/workhorsy/py-cpuinfo/issues/108 + pass diff --git a/sources b/sources index 63e3e9a..5a5fb48 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -d7f505adefd46fbdb50c7b608d5cbdf6 blosc-1.2.8.tar.gz +SHA512 (blosc-1.11.3.tar.gz) = fc82b7b100d306965874868b2a0b1b6a9b865f1ba86ce65546aeb8212ba5085ef7a565f46ac3b40f648641d449d9f5265087ca8670075221ba8018dc8efd7be4