From 3d5a124138ca57f1d516705aab43211a47e7e874 Mon Sep 17 00:00:00 2001 From: Vicente Armando Sole Date: Wed, 30 Nov 2016 12:03:13 +0100 Subject: [PATCH 1/9] Add manylinux 64-bit support --- hdf5plugin/__init__.py | 16 ++++++++++++++-- hdf5plugin/manylinux/x86_64/libH5Zlz4.so | Bin 0 -> 49138 bytes hdf5plugin/manylinux/x86_64/libH5bshuf.so | Bin 0 -> 71451 bytes setup.py | 10 ++++++---- test/test.py | 1 + 5 files changed, 21 insertions(+), 6 deletions(-) create mode 100755 hdf5plugin/manylinux/x86_64/libH5Zlz4.so create mode 100755 hdf5plugin/manylinux/x86_64/libH5bshuf.so diff --git a/hdf5plugin/__init__.py b/hdf5plugin/__init__.py index 1eaaa964..1dad4171 100644 --- a/hdf5plugin/__init__.py +++ b/hdf5plugin/__init__.py @@ -32,9 +32,21 @@ import os import sys + if sys.platform.startswith("darwin"): compiler = "darwin" arch = None + path_separator = ":" +elif sys.platform.startswith("linux2"): + if sys.maxsize > 2**32: + # 64 bit + arch = "x86_64" + compiler = "manylinux" + else: + # 32 bit + arch = None + compiler = None + path_separator = ":" elif sys.platform.startswith("win"): if sys.version.startswith("3.5"): compiler = "VS2015" @@ -48,6 +60,7 @@ else: # 32 bit arch = "x86" + path_separator = ";" else: compiler = None @@ -64,5 +77,4 @@ if current_path is None: os.environ["HDF5_PLUGIN_PATH"] = plugin_path else: - os.environ["HDF5_PLUGIN_PATH"] = current_path + ";" + plugin_path - + os.environ["HDF5_PLUGIN_PATH"] = current_path + path_separator + plugin_path diff --git a/hdf5plugin/manylinux/x86_64/libH5Zlz4.so b/hdf5plugin/manylinux/x86_64/libH5Zlz4.so new file mode 100755 index 0000000000000000000000000000000000000000..72eb2e3db5a14bbd641b36a6651be4a1a9eeab1c GIT binary patch literal 49138 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 KU*q&pjD7**YwO|w literal 0 HcmV?d00001 diff --git a/hdf5plugin/manylinux/x86_64/libH5bshuf.so b/hdf5plugin/manylinux/x86_64/libH5bshuf.so new file mode 100755 index 0000000000000000000000000000000000000000..f4cfde887718cf4a97efc683a507b28417123a34 GIT binary patch literal 71451 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

(aZ9 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 Date: Wed, 30 Nov 2016 12:19:00 +0100 Subject: [PATCH 2/9] Add linux testing. --- .travis.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.travis.yml b/.travis.yml index f85ca67a..8667a3f2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,18 @@ git: matrix: include: + - python: 2.7 + os: linux + env: BUILD_COMMAND=sdist + + - python: 3.4 + os: linux + env: BUILD_COMMAND=sdist + + - python: 3.5 + os: linux + env: BUILD_COMMAND=sdist + - language: generic os: osx env: BUILD_COMMAND=bdist_wheel From d5c1db759c4c06a59a4000978d18992b2a625e98 Mon Sep 17 00:00:00 2001 From: Vicente Armando Sole Date: Wed, 30 Nov 2016 14:26:13 +0100 Subject: [PATCH 3/9] Put the correct output flag. --- test/test.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/test/test.py b/test/test.py index f80e03ba..1a603cae 100644 --- a/test/test.py +++ b/test/test.py @@ -87,7 +87,12 @@ def getSuite(auto=True): return testSuite def test(auto=False): - unittest.TextTestRunner(verbosity=2).run(getSuite(auto=auto)) + result = unittest.TextTestRunner(verbosity=2).run(getSuite(auto=auto)) + return(result) if __name__ == "__main__": - test() + result = test() + if result.wasSuccessful(): + sys.exit(0) + else: + sys.exit(1) From 3ab53ee48c611e155e5164e8afccc3794f2c8e1c Mon Sep 17 00:00:00 2001 From: Vicente Armando Sole Date: Wed, 30 Nov 2016 14:55:06 +0100 Subject: [PATCH 4/9] Skip tests in case of wrong HDF5 version. --- test/test.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/test.py b/test/test.py index 1a603cae..faf7ff8f 100644 --- a/test/test.py +++ b/test/test.py @@ -29,6 +29,7 @@ import os import sys import unittest +from distutils.version import LooseVersion class TestHDF5Plugin(unittest.TestCase): def setUp(self): @@ -46,6 +47,9 @@ def testHDF5PluginImport(self): def testLZ4(self): import h5py + version = h5py.version.hdf5_version + if LooseVersion(version) < LooseVersion("1.10"): + self.skipTest("HDF5 %s Version is lower than 1.8.11" % version) dirname = os.path.abspath(os.path.dirname(__file__)) fname = os.path.join(dirname, "lz4.h5") self.assertTrue(os.path.exists(fname), @@ -61,6 +65,9 @@ def testLZ4(self): def testBitshuffle(self): import h5py + version = h5py.version.hdf5_version + if LooseVersion(version) < LooseVersion("1.8.11"): + self.skipTest("HDF5 %s Version is lower than 1.8.11" % version) dirname = os.path.abspath(os.path.dirname(__file__)) fname = os.path.join(dirname, "bitshuffle.h5") self.assertTrue(os.path.exists(fname), From 6f63c8827ced95504c8f63f4e9c301f8fa3d8aba Mon Sep 17 00:00:00 2001 From: Vicente Armando Sole Date: Wed, 30 Nov 2016 15:20:01 +0100 Subject: [PATCH 5/9] Remove TABs --- test/test.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/test.py b/test/test.py index faf7ff8f..2dc12ec6 100644 --- a/test/test.py +++ b/test/test.py @@ -47,9 +47,9 @@ def testHDF5PluginImport(self): def testLZ4(self): import h5py - version = h5py.version.hdf5_version - if LooseVersion(version) < LooseVersion("1.10"): - self.skipTest("HDF5 %s Version is lower than 1.8.11" % version) + version = h5py.version.hdf5_version + if LooseVersion(version) < LooseVersion("1.10"): + self.skipTest("HDF5 %s Version is lower than 1.8.11" % version) dirname = os.path.abspath(os.path.dirname(__file__)) fname = os.path.join(dirname, "lz4.h5") self.assertTrue(os.path.exists(fname), @@ -65,9 +65,9 @@ def testLZ4(self): def testBitshuffle(self): import h5py - version = h5py.version.hdf5_version - if LooseVersion(version) < LooseVersion("1.8.11"): - self.skipTest("HDF5 %s Version is lower than 1.8.11" % version) + version = h5py.version.hdf5_version + if LooseVersion(version) < LooseVersion("1.10"): + self.skipTest("HDF5 %s Version is lower than 1.8.11" % version) dirname = os.path.abspath(os.path.dirname(__file__)) fname = os.path.join(dirname, "bitshuffle.h5") self.assertTrue(os.path.exists(fname), From ad10764361323b9e77914db656c436c0e6e7d8b1 Mon Sep 17 00:00:00 2001 From: Vicente Armando Sole Date: Wed, 30 Nov 2016 15:27:59 +0100 Subject: [PATCH 6/9] Wrong version check. --- test/test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test.py b/test/test.py index 2dc12ec6..afa1f6a4 100644 --- a/test/test.py +++ b/test/test.py @@ -48,7 +48,7 @@ def testHDF5PluginImport(self): def testLZ4(self): import h5py version = h5py.version.hdf5_version - if LooseVersion(version) < LooseVersion("1.10"): + if LooseVersion(version) < LooseVersion("1.8.11"): self.skipTest("HDF5 %s Version is lower than 1.8.11" % version) dirname = os.path.abspath(os.path.dirname(__file__)) fname = os.path.join(dirname, "lz4.h5") @@ -66,7 +66,7 @@ def testLZ4(self): def testBitshuffle(self): import h5py version = h5py.version.hdf5_version - if LooseVersion(version) < LooseVersion("1.10"): + if LooseVersion(version) < LooseVersion("1.8.11"): self.skipTest("HDF5 %s Version is lower than 1.8.11" % version) dirname = os.path.abspath(os.path.dirname(__file__)) fname = os.path.join(dirname, "bitshuffle.h5") From 1157efb91fd294255791a8e4383931757f2ac66b Mon Sep 17 00:00:00 2001 From: Vicente Armando Sole Date: Wed, 30 Nov 2016 15:51:47 +0100 Subject: [PATCH 7/9] Linux test was not passing under Python 3 --- hdf5plugin/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hdf5plugin/__init__.py b/hdf5plugin/__init__.py index 1dad4171..d0570577 100644 --- a/hdf5plugin/__init__.py +++ b/hdf5plugin/__init__.py @@ -37,7 +37,7 @@ compiler = "darwin" arch = None path_separator = ":" -elif sys.platform.startswith("linux2"): +elif sys.platform.startswith("linux"): if sys.maxsize > 2**32: # 64 bit arch = "x86_64" From 024547193b14f68aa9509c6be376563e3a1b2773 Mon Sep 17 00:00:00 2001 From: Vicente Armando Sole Date: Wed, 30 Nov 2016 16:04:23 +0100 Subject: [PATCH 8/9] Update CHANGELOG.rst --- CHANGELOG.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index cc27e7a4..48231a14 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,3 +1,13 @@ +1.3.0 +----- + +- Add 64-bit manylinux version LZ4 filter plugin + +- Add 64-bit manylinux version bitshuffle plugin + +- Implement continuous imtegration testing + + 1.2.0 ----- From d8aa4e912989795f5eb4f26c00aba7c02304fc13 Mon Sep 17 00:00:00 2001 From: Vicente Armando Sole Date: Wed, 30 Nov 2016 16:06:09 +0100 Subject: [PATCH 9/9] Update README.rst --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 7da2b417..a1239b7a 100644 --- a/README.rst +++ b/README.rst @@ -3,7 +3,7 @@ hdf5plugin This module provides HDF5 plugins and sets the HDF5_PLUGIN_PATH to the appropriate value according to the version of python used. -The module is mainly intended for use under windows but shared libraries for MacOS are also provided. +The module is mainly intended for use under windows but shared libraries for MacOS and manylinux are also provided. The LZ4 plugin sources were obtained from https://github.com/nexusformat/HDF5-External-Filter-Plugins @@ -12,7 +12,7 @@ The bitshuffle plugin sources were obtained from https://github.com/kiyo-masui/b Known issues ------------ -Under MacOS, the bitshuffle plugin is limited to decompression (i.e. it can be used to read bitshuffle compressed data). +Under MacOS and linux, the bitshuffle plugin is limited to decompression (i.e. it can be used to read bitshuffle compressed data). Installation