diff --git a/Add-minimal-except-definitions-for-Cython-3-compatib.patch b/Add-minimal-except-definitions-for-Cython-3-compatib.patch new file mode 100644 index 0000000000000000000000000000000000000000..e7d16c90368a9afe9700f504b8aa361f068f1256 --- /dev/null +++ b/Add-minimal-except-definitions-for-Cython-3-compatib.patch @@ -0,0 +1,151 @@ +From c0a7b9848eedbd3b64c248ed579ee629903231f1 Mon Sep 17 00:00:00 2001 +From: David Hoese +Date: Tue, 28 Nov 2023 09:57:33 -0600 +Subject: [PATCH] Add minimal except definitions for Cython 3 compatibility + +--- + h5py/api_types_hdf5.pxd | 38 +++++++++++++++++++------------------- + h5py/h5fd.pyx | 36 ++++++++++++++++++++++++++---------- + 2 files changed, 45 insertions(+), 29 deletions(-) + +diff --git a/h5py/api_types_hdf5.pxd b/h5py/api_types_hdf5.pxd +index a1369e8a..0523b2fe 100644 +--- a/h5py/api_types_hdf5.pxd ++++ b/h5py/api_types_hdf5.pxd +@@ -259,25 +259,25 @@ cdef extern from "hdf5.h": + size_t fapl_size + void * (*fapl_get)(H5FD_t *file) except * + void * (*fapl_copy)(const void *fapl) except * +- herr_t (*fapl_free)(void *fapl) except * ++ herr_t (*fapl_free)(void *fapl) except -1 + 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) except * +- herr_t (*close)(H5FD_t *file) except * ++ herr_t (*close)(H5FD_t *file) except -1 + 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) except * +- herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr) except * +- haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) except * ++ haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type) noexcept ++ herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr) noexcept ++ haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) noexcept + 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) except * + herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer) except * +- herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) except * +- herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) except * ++ herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) except -1 ++ herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) except -1 + herr_t (*lock)(H5FD_t *file, hbool_t rw) + herr_t (*unlock)(H5FD_t *file) + H5FD_mem_t fl_map[H5FD_MEM_NTYPES] +@@ -295,27 +295,27 @@ cdef extern from "hdf5.h": + 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) ++ void * (*fapl_get)(H5FD_t *file) except * ++ void * (*fapl_copy)(const void *fapl) except * ++ herr_t (*fapl_free)(void *fapl) except -1 + 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) ++ H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr) except * ++ herr_t (*close)(H5FD_t *file) except -1 + 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) ++ haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type) noexcept ++ herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr) noexcept ++ haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) noexcept + 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 (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer) except * ++ herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer) except * ++ herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) except -1 ++ herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) except -1 + herr_t (*lock)(H5FD_t *file, hbool_t rw) + herr_t (*unlock)(H5FD_t *file) + H5FD_mem_t fl_map[H5FD_MEM_NTYPES] +diff --git a/h5py/h5fd.pyx b/h5py/h5fd.pyx +index f1b4aade..5e2ea9cd 100644 +--- a/h5py/h5fd.pyx ++++ b/h5py/h5fd.pyx +@@ -151,7 +151,7 @@ cdef herr_t H5FD_fileobj_set_eoa(H5FD_fileobj_t *f, H5FD_mem_t type, haddr_t add + f.eoa = addr + return 0 + +-cdef haddr_t H5FD_fileobj_get_eof(const H5FD_fileobj_t *f, H5FD_mem_t type) except -1 with gil: # HADDR_UNDEF ++cdef haddr_t H5FD_fileobj_get_eof(const H5FD_fileobj_t *f, H5FD_mem_t type) noexcept with gil: # HADDR_UNDEF + (f.fileobj).seek(0, libc.stdio.SEEK_END) + return (f.fileobj).tell() + +@@ -191,22 +191,38 @@ cdef herr_t H5FD_fileobj_flush(H5FD_fileobj_t *f, hid_t dxpl, hbool_t closing) e + cdef H5FD_class_t info + memset(&info, 0, sizeof(info)) + ++# Cython doesn't support "except X" in casting definition currently ++ctypedef herr_t (*file_free_func_ptr)(void *) except -1 ++ ++ctypedef herr_t (*file_close_func_ptr)(H5FD_t *) except -1 ++ctypedef haddr_t (*file_get_eoa_func_ptr)(const H5FD_t *, H5FD_mem_t) noexcept ++ctypedef herr_t (*file_set_eof_func_ptr)(H5FD_t *, H5FD_mem_t, haddr_t) noexcept ++ctypedef haddr_t (*file_get_eof_func_ptr)(const H5FD_t *, H5FD_mem_t) noexcept ++ctypedef herr_t (*file_read_func_ptr)(H5FD_t *, H5FD_mem_t, hid_t, haddr_t, size_t, void*) except -1 ++ctypedef herr_t (*file_write_func_ptr)(H5FD_t *, H5FD_mem_t, hid_t, haddr_t, size_t, const void*) except -1 ++ctypedef herr_t (*file_truncate_func_ptr)(H5FD_t *, hid_t, hbool_t) except -1 ++ctypedef herr_t (*file_flush_func_ptr)(H5FD_t *, hid_t, hbool_t) except -1 ++ ++ + info.name = 'fileobj' + info.maxaddr = libc.stdint.SIZE_MAX - 1 + info.fc_degree = H5F_CLOSE_WEAK + info.fapl_size = sizeof(PyObject *) + info.fapl_get = H5FD_fileobj_fapl_get + info.fapl_copy = H5FD_fileobj_fapl_copy +-info.fapl_free = H5FD_fileobj_fapl_free ++ ++info.fapl_free = H5FD_fileobj_fapl_free ++ + info.open = H5FD_fileobj_open +-info.close = H5FD_fileobj_close +-info.get_eoa = H5FD_fileobj_get_eoa +-info.set_eoa = H5FD_fileobj_set_eoa +-info.get_eof = H5FD_fileobj_get_eof +-info.read = H5FD_fileobj_read +-info.write = H5FD_fileobj_write +-info.truncate = H5FD_fileobj_truncate +-info.flush = H5FD_fileobj_flush ++ ++info.close = H5FD_fileobj_close ++info.get_eoa = H5FD_fileobj_get_eoa ++info.set_eoa = H5FD_fileobj_set_eoa ++info.get_eof = H5FD_fileobj_get_eof ++info.read = H5FD_fileobj_read ++info.write = H5FD_fileobj_write ++info.truncate = H5FD_fileobj_truncate ++info.flush = H5FD_fileobj_flush + # H5FD_FLMAP_DICHOTOMY + info.fl_map = [H5FD_MEM_SUPER, # default + H5FD_MEM_SUPER, # super +-- +2.27.0 + 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 0000000000000000000000000000000000000000..f988fc84225f924d72e7bfe1277df503ec23326a --- /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.27.0 + diff --git a/Fix-get_eof-exception-definition.patch b/Fix-get_eof-exception-definition.patch new file mode 100644 index 0000000000000000000000000000000000000000..6cf2a7796de3ed9eff3fe051a490977985810cbd --- /dev/null +++ b/Fix-get_eof-exception-definition.patch @@ -0,0 +1,57 @@ +From d6b267d980b391561047af0e573d26140c7d35bd Mon Sep 17 00:00:00 2001 +From: David Hoese +Date: Fri, 1 Dec 2023 09:49:29 -0600 +Subject: [PATCH] Fix get_eof exception definition + +--- + h5py/api_types_hdf5.pxd | 4 ++-- + h5py/h5fd.pyx | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/h5py/api_types_hdf5.pxd b/h5py/api_types_hdf5.pxd +index 6e2fc239..099e0f58 100644 +--- a/h5py/api_types_hdf5.pxd ++++ b/h5py/api_types_hdf5.pxd +@@ -272,7 +272,7 @@ cdef extern from "hdf5.h": + 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) noexcept + herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr) noexcept +- haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) noexcept ++ haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) except -1 + 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) except * + herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer) except * +@@ -310,7 +310,7 @@ cdef extern from "hdf5.h": + 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) noexcept + herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr) noexcept +- haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) noexcept ++ haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) except -1 + 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) except * + herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer) except * +diff --git a/h5py/h5fd.pyx b/h5py/h5fd.pyx +index 5e2ea9cd..d39cf68f 100644 +--- a/h5py/h5fd.pyx ++++ b/h5py/h5fd.pyx +@@ -151,7 +151,7 @@ cdef herr_t H5FD_fileobj_set_eoa(H5FD_fileobj_t *f, H5FD_mem_t type, haddr_t add + f.eoa = addr + return 0 + +-cdef haddr_t H5FD_fileobj_get_eof(const H5FD_fileobj_t *f, H5FD_mem_t type) noexcept with gil: # HADDR_UNDEF ++cdef haddr_t H5FD_fileobj_get_eof(const H5FD_fileobj_t *f, H5FD_mem_t type) except -1 with gil: # HADDR_UNDEF + (f.fileobj).seek(0, libc.stdio.SEEK_END) + return (f.fileobj).tell() + +@@ -197,7 +197,7 @@ ctypedef herr_t (*file_free_func_ptr)(void *) except -1 + ctypedef herr_t (*file_close_func_ptr)(H5FD_t *) except -1 + ctypedef haddr_t (*file_get_eoa_func_ptr)(const H5FD_t *, H5FD_mem_t) noexcept + ctypedef herr_t (*file_set_eof_func_ptr)(H5FD_t *, H5FD_mem_t, haddr_t) noexcept +-ctypedef haddr_t (*file_get_eof_func_ptr)(const H5FD_t *, H5FD_mem_t) noexcept ++ctypedef haddr_t (*file_get_eof_func_ptr)(const H5FD_t *, H5FD_mem_t) except -1 + ctypedef herr_t (*file_read_func_ptr)(H5FD_t *, H5FD_mem_t, hid_t, haddr_t, size_t, void*) except -1 + ctypedef herr_t (*file_write_func_ptr)(H5FD_t *, H5FD_mem_t, hid_t, haddr_t, size_t, const void*) except -1 + ctypedef herr_t (*file_truncate_func_ptr)(H5FD_t *, hid_t, hbool_t) except -1 +-- +2.27.0 + diff --git a/python-h5py.spec b/python-h5py.spec index 32949287742634f9b4ac1d65df95cf6cfb8d9133..58602c0ed384ce3fad00cf3e34d22092702b0272 100644 --- a/python-h5py.spec +++ b/python-h5py.spec @@ -3,12 +3,15 @@ Summary: A high- and low-level interface to the HDF5 library from Python Name: python-h5py Version: 3.10.0 -Release: 1 +Release: 2 License: BSD URL: http://www.h5py.org/ Source0: https://github.com/h5py/h5py/archive/refs/tags/%{version}.tar.gz Patch1: Fix-compiling-fileobj-file-driver-with-Cython-3.0.patch +Patch2: Add-minimal-except-definitions-for-Cython-3-compatib.patch +Patch3: Add-page-buffer-and-fix-file-locking-tests.patch +Patch4: Fix-get_eof-exception-definition.patch BuildRequires: gcc BuildRequires: hdf5-devel @@ -55,6 +58,9 @@ A high- and low-level interface to the HDF5 library from Python3 %{python3_sitearch}/%{modname}-%{version}-*.egg-info %changelog +* Tue Nov 26 2024 zhangxianjun - 3.10.0-2 +- fix build error due to hdf5 upgrade + * Fri Jan 26 2024 wangjiang - 3.10.0-1 - update version to 3.10.0