From 06351c8f8192cf89e371987f87279ded04a5792d Mon Sep 17 00:00:00 2001 From: PhsySimon Date: Thu, 7 Nov 2024 18:55:36 +0800 Subject: [PATCH] fix build error due to hdf5 upgrade (cherry picked from commit ab578e5c50810ca98814d52d6c6a96b429b9f301) --- Add-new-H5FD_class_value_t-typedef.patch | 150 ++++++++++++++++++ ...ge-buffer-and-fix-file-locking-tests.patch | 73 +++++++++ Fix-wrong-file-driver-version-error.patch | 24 +++ python-h5py.spec | 10 +- 4 files changed, 256 insertions(+), 1 deletion(-) create mode 100644 Add-new-H5FD_class_value_t-typedef.patch create mode 100644 Add-page-buffer-and-fix-file-locking-tests.patch create mode 100644 Fix-wrong-file-driver-version-error.patch diff --git a/Add-new-H5FD_class_value_t-typedef.patch b/Add-new-H5FD_class_value_t-typedef.patch new file mode 100644 index 0000000..fa311e0 --- /dev/null +++ b/Add-new-H5FD_class_value_t-typedef.patch @@ -0,0 +1,150 @@ +From 8b3cfbbd5565efc27124e5ddccc6b9d5e9b5d443 Mon Sep 17 00:00:00 2001 +From: Aleksandar Jelenak +Date: Sat, 17 Dec 2022 22:19:13 -0500 +Subject: [PATCH] Add new H5FD_class_value_t typedef + +--- + h5py/api_types_hdf5.pxd | 126 +++++++++++++++++++++++++++++----------- + 1 file changed, 93 insertions(+), 33 deletions(-) + +diff --git a/h5py/api_types_hdf5.pxd b/h5py/api_types_hdf5.pxd +index 6977f1a7..7861f848 100644 +--- a/h5py/api_types_hdf5.pxd ++++ b/h5py/api_types_hdf5.pxd +@@ -235,40 +235,100 @@ cdef extern from "hdf5.h": + H5FD_MPIO_INDEPENDENT = 0, + H5FD_MPIO_COLLECTIVE + ++ # File driver identifier type and values ++ IF HDF5_VERSION >= (1, 14, 0): ++ ctypedef int H5FD_class_value_t ++ ++ H5FD_class_value_t H5_VFD_INVALID # -1 ++ H5FD_class_value_t H5_VFD_SEC2 # 0 ++ H5FD_class_value_t H5_VFD_CORE # 1 ++ H5FD_class_value_t H5_VFD_LOG # 2 ++ H5FD_class_value_t H5_VFD_FAMILY # 3 ++ H5FD_class_value_t H5_VFD_MULTI # 4 ++ H5FD_class_value_t H5_VFD_STDIO # 5 ++ H5FD_class_value_t H5_VFD_SPLITTER # 6 ++ H5FD_class_value_t H5_VFD_MPIO # 7 ++ H5FD_class_value_t H5_VFD_DIRECT # 8 ++ H5FD_class_value_t H5_VFD_MIRROR # 9 ++ H5FD_class_value_t H5_VFD_HDFS # 10 ++ H5FD_class_value_t H5_VFD_ROS3 # 11 ++ H5FD_class_value_t H5_VFD_SUBFILING # 12 ++ H5FD_class_value_t H5_VFD_IOC # 13 ++ H5FD_class_value_t H5_VFD_ONION # 14 ++ + # Class information for each file driver +- ctypedef struct H5FD_class_t: +- const char *name +- haddr_t maxaddr +- H5F_close_degree_t fc_degree +- herr_t (*terminate)() +- hsize_t (*sb_size)(H5FD_t *file) +- herr_t (*sb_encode)(H5FD_t *file, char *name, unsigned char *p) +- herr_t (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p) +- size_t fapl_size +- void * (*fapl_get)(H5FD_t *file) +- void * (*fapl_copy)(const void *fapl) +- herr_t (*fapl_free)(void *fapl) +- size_t dxpl_size +- void * (*dxpl_copy)(const void *dxpl) +- herr_t (*dxpl_free)(void *dxpl) +- H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr) +- herr_t (*close)(H5FD_t *file) +- int (*cmp)(const H5FD_t *f1, const H5FD_t *f2) +- herr_t (*query)(const H5FD_t *f1, unsigned long *flags) +- herr_t (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map) +- haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size) +- herr_t (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size) +- haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type) +- herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr) +- haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) +- herr_t (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle) +- herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer) +- herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer) +- herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) +- herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) +- herr_t (*lock)(H5FD_t *file, hbool_t rw) +- herr_t (*unlock)(H5FD_t *file) +- H5FD_mem_t fl_map[H5FD_MEM_NTYPES] ++ IF HDF5_VERSION < (1, 14, 0): ++ ctypedef struct H5FD_class_t: ++ const char *name ++ haddr_t maxaddr ++ H5F_close_degree_t fc_degree ++ herr_t (*terminate)() ++ hsize_t (*sb_size)(H5FD_t *file) ++ herr_t (*sb_encode)(H5FD_t *file, char *name, unsigned char *p) ++ herr_t (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p) ++ size_t fapl_size ++ void * (*fapl_get)(H5FD_t *file) ++ void * (*fapl_copy)(const void *fapl) ++ herr_t (*fapl_free)(void *fapl) ++ size_t dxpl_size ++ void * (*dxpl_copy)(const void *dxpl) ++ herr_t (*dxpl_free)(void *dxpl) ++ H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr) ++ herr_t (*close)(H5FD_t *file) ++ int (*cmp)(const H5FD_t *f1, const H5FD_t *f2) ++ herr_t (*query)(const H5FD_t *f1, unsigned long *flags) ++ herr_t (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map) ++ haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size) ++ herr_t (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size) ++ haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type) ++ herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr) ++ haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) ++ herr_t (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle) ++ herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer) ++ herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer) ++ herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) ++ herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) ++ herr_t (*lock)(H5FD_t *file, hbool_t rw) ++ herr_t (*unlock)(H5FD_t *file) ++ H5FD_mem_t fl_map[H5FD_MEM_NTYPES] ++ ELSE: ++ unsigned H5FD_CLASS_VERSION # File driver struct version ++ ++ ctypedef struct H5FD_class_t: ++ unsigned version # File driver class struct version number ++ H5FD_class_value_t value ++ const char *name ++ haddr_t maxaddr ++ H5F_close_degree_t fc_degree ++ herr_t (*terminate)() ++ hsize_t (*sb_size)(H5FD_t *file) ++ herr_t (*sb_encode)(H5FD_t *file, char *name, unsigned char *p) ++ herr_t (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p) ++ size_t fapl_size ++ void * (*fapl_get)(H5FD_t *file) ++ void * (*fapl_copy)(const void *fapl) ++ herr_t (*fapl_free)(void *fapl) ++ size_t dxpl_size ++ void * (*dxpl_copy)(const void *dxpl) ++ herr_t (*dxpl_free)(void *dxpl) ++ H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr) ++ herr_t (*close)(H5FD_t *file) ++ int (*cmp)(const H5FD_t *f1, const H5FD_t *f2) ++ herr_t (*query)(const H5FD_t *f1, unsigned long *flags) ++ herr_t (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map) ++ haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size) ++ herr_t (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size) ++ haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type) ++ herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr) ++ haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) ++ herr_t (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle) ++ herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer) ++ herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer) ++ herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) ++ herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) ++ herr_t (*lock)(H5FD_t *file, hbool_t rw) ++ herr_t (*unlock)(H5FD_t *file) ++ H5FD_mem_t fl_map[H5FD_MEM_NTYPES] + + # The main datatype for each driver + ctypedef struct H5FD_t: +-- +2.39.2 (Apple Git-143) + diff --git a/Add-page-buffer-and-fix-file-locking-tests.patch b/Add-page-buffer-and-fix-file-locking-tests.patch new file mode 100644 index 0000000..023f3e5 --- /dev/null +++ b/Add-page-buffer-and-fix-file-locking-tests.patch @@ -0,0 +1,73 @@ +From eea4cbc6a4b6333182c8d9b43276f8269c49d980 Mon Sep 17 00:00:00 2001 +From: Aleksandar Jelenak +Date: Wed, 3 Apr 2024 11:29:22 -0400 +Subject: [PATCH] Add page buffer and fix file locking tests + +--- + h5py/tests/test_file.py | 36 ++++++++++++++++++++++++++++++++++-- + 1 file changed, 34 insertions(+), 2 deletions(-) + +diff --git a/h5py/tests/test_file.py b/h5py/tests/test_file.py +index 1aa38731..0ceddc37 100644 +--- a/h5py/tests/test_file.py ++++ b/h5py/tests/test_file.py +@@ -213,6 +213,8 @@ class TestPageBuffering(TestCase): + fapl = f.id.get_access_plist() + self.assertEqual(fapl.get_page_buffer_size(), (pbs, mm, mr)) + ++ @pytest.mark.skipif(h5py.version.hdf5_version_tuple > (1, 14, 3), ++ reason='Requires HDF5 <= 1.14.3') + def test_too_small_pbs(self): + """Page buffer size must be greater than file space page size.""" + fname = self.mktemp() +@@ -222,6 +224,30 @@ class TestPageBuffering(TestCase): + with self.assertRaises(OSError): + File(fname, mode="r", page_buf_size=fsp-1) + ++ @pytest.mark.skipif(h5py.version.hdf5_version_tuple < (1, 14, 4), ++ reason='Requires HDF5 >= 1.14.4') ++ def test_open_nonpage_pbs(self): ++ """Open non-PAGE file with page buffer set.""" ++ fname = self.mktemp() ++ fsp = 16 * 1024 ++ with File(fname, mode='w'): ++ pass ++ with File(fname, mode='r', page_buf_size=fsp) as f: ++ fapl = f.id.get_access_plist() ++ assert fapl.get_page_buffer_size()[0] == 0 ++ ++ @pytest.mark.skipif(h5py.version.hdf5_version_tuple < (1, 14, 4), ++ reason='Requires HDF5 >= 1.14.4') ++ def test_smaller_pbs(self): ++ """Adjust page buffer size automatically when smaller than file page.""" ++ fname = self.mktemp() ++ fsp = 16 * 1024 ++ with File(fname, mode='w', fs_strategy='page', fs_page_size=fsp): ++ pass ++ with File(fname, mode='r', page_buf_size=fsp-100) as f: ++ fapl = f.id.get_access_plist() ++ assert fapl.get_page_buffer_size()[0] == fsp ++ + def test_actual_pbs(self): + """Verify actual page buffer size.""" + fname = self.mktemp() +@@ -923,8 +949,14 @@ class TestFileLocking: + with h5py.File(fname, mode="r", locking=True) as h5f_read: + pass + +- with h5py.File(fname, mode="r", locking='best-effort') as h5f_read: +- pass ++ if h5py.version.hdf5_version_tuple < (1, 14, 4): ++ with h5py.File(fname, mode="r", locking='best-effort') as h5f_read: ++ pass ++ else: ++ with pytest.raises(OSError): ++ with h5py.File(fname, mode="r", locking='best-effort') as h5f_read: ++ pass ++ + + def test_unsupported_locking(self, tmp_path): + """Test with erroneous file locking value""" +-- +2.39.2 (Apple Git-143) + diff --git a/Fix-wrong-file-driver-version-error.patch b/Fix-wrong-file-driver-version-error.patch new file mode 100644 index 0000000..b5b605a --- /dev/null +++ b/Fix-wrong-file-driver-version-error.patch @@ -0,0 +1,24 @@ +From dbb202c14f91fd3d70735ffd6ef5737c12e88f4e Mon Sep 17 00:00:00 2001 +From: Aleksandar Jelenak +Date: Sat, 17 Dec 2022 22:19:56 -0500 +Subject: [PATCH] Fix wrong file driver version error + +--- + h5py/h5fd.pyx | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/h5py/h5fd.pyx b/h5py/h5fd.pyx +index 04aff077..e9746057 100644 +--- a/h5py/h5fd.pyx ++++ b/h5py/h5fd.pyx +@@ -216,5 +216,7 @@ info.fl_map = [H5FD_MEM_SUPER, # default + H5FD_MEM_SUPER, # lheap + H5FD_MEM_SUPER # ohdr + ] ++IF HDF5_VERSION >= (1, 14, 0): ++ info.version = H5FD_CLASS_VERSION + + fileobj_driver = H5FDregister(&info) +-- +2.39.2 (Apple Git-143) + diff --git a/python-h5py.spec b/python-h5py.spec index 6ee44ca..8e29ba5 100644 --- a/python-h5py.spec +++ b/python-h5py.spec @@ -3,11 +3,15 @@ Summary: A high- and low-level interface to the HDF5 library from Python Name: python-h5py Version: 3.6.0 -Release: 2 +Release: 3 License: BSD URL: http://www.h5py.org/ Source0: https://github.com/h5py/h5py/archive/refs/tags/%{version}.tar.gz +Patch1: Add-new-H5FD_class_value_t-typedef.patch +Patch2: Add-page-buffer-and-fix-file-locking-tests.patch +Patch3: Fix-wrong-file-driver-version-error.patch + BuildRequires: gcc BuildRequires: hdf5-devel BuildRequires: python3-devel @@ -34,6 +38,7 @@ A high- and low-level interface to the HDF5 library from Python3 %prep %setup -q -n %{modname}-%{version} +%autopatch -p1 %{__python3} api_gen.py %build @@ -52,6 +57,9 @@ A high- and low-level interface to the HDF5 library from Python3 %{python3_sitearch}/%{modname}-%{version}-*.egg-info %changelog +* Thu Nov 7 2024 caixiaomeng - 3.6.0-3 +- fix build error due to hdf5 upgrade + * Wed Nov 23 2022 yanglongkang - 3.6.0-2 - fix Source incorrect in spec file -- Gitee