Bug#1139554: xmds2: FTBFS against HDF5 2.1.0 - The waf toolchain has to be adapted

pini at debian.org pini at debian.org
Tue Jun 23 14:34:52 BST 2026


Hi Rafaël,

Le 2026-06-23 13:43, Rafael Laboissière a écrit :
> Salut Gilles,
> 
> Thanks for the bug report and for the patch.
> 
> Which build-dependencies do you use to build the xmds2 package, in 
> order to reproduce the FTBFS issue?  The package builds fine against 
> the libhdf5-dev and libhdf5-mpi-dev packages currently in experimental.

I use a local repo for the rebuilt reverse-depedencies.
Plus a dedicated sbuild chroot with unstable + experimental + local 
repo, and HDF5 packages in experimental Priority-Pined, as well as all 
the packages in the local repo.

I rebuild all the reverse dependencies in the order given by the ben 
file and upload them into the local repo. So xmds2 is rebuilt against:
* hdf5 2.1.0 in experimental
* h5py rebuilt against hdf5 2.1.0
* octave rebuilt against hdf5 2.1.0

Best,
_g.

> Best,
> 
> Rafael
> 
> * Gilles Filippini <pini at debian.org> [2026-06-22 16:58]:
> 
>> Control: tags -1 + patch
>> 
>> Hi,
>> 
>> Gilles Filippini a écrit le 09/06/2026 à 14:57 :
>>> Source: xmds2
>>> Version: 3.1.0+dfsg2-13
>>> Severity: important
>>> Tags: ftbfs
>>> 
>>> Hi,
>>> 
>>> During a test rebuild of HDF5's reverse dependcies against HDF5 2.1.0
>>> currently in experimental, xmds2 FTBFS with:
>>> 
>>> Checking for program 'h5cc'                           : /usr/bin/h5cc
>>> Traceback (most recent call last):
>>>    File "/<<PKGBUILDDIR>>/bin-test/xmds2", line 4, in <module>
>>>      sys.exit(parser2.main())
>>>               ~~~~~~~~~~~~^^
>>>    File "/<<PKGBUILDDIR>>/xpdeint/parser2.py", line 219, in main
>>>      return Configuration.run_reconfig(includePaths, libPaths)
>>>             ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
>>>    File "/<<PKGBUILDDIR>>/xpdeint/Configuration.py", line 145, in 
>>> run_reconfig
>>>      return run_config(includePaths = includePaths, libPaths = 
>>> libPaths)
>>>    File "/<<PKGBUILDDIR>>/xpdeint/Configuration.py", line 119, in 
>>> run_config
>>>      ret = ctx.execute()
>>>    File "/<<PKGBUILDDIR>>/xpdeint/waf/waflib/Configure.py", line 159, 
>>> in execute
>>>      super(ConfigurationContext, self).execute()
>>>      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
>>>    File "/<<PKGBUILDDIR>>/xpdeint/waf/waflib/Context.py", line 204, 
>>> in execute
>>>      self.recurse([os.path.dirname(g_module.root_path)])
>>>      ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>    File "/<<PKGBUILDDIR>>/xpdeint/Configuration.py", line 56, in 
>>> <lambda>
>>>      lambda x, y: getattr(Context.g_module, x.cmd or x.fun, 
>>> Utils.nada)(x)
>>>                   
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^
>>>    File "/<<PKGBUILDDIR>>/xpdeint/Configuration.py", line 85, in _
>>>      return f(ctx, *args, **kw)
>>>    File "/<<PKGBUILDDIR>>/xpdeint/support/wscript", line 754, in 
>>> configure
>>>      configure_compiler()
>>>      ~~~~~~~~~~~~~~~~~~^^
>>>    File "/<<PKGBUILDDIR>>/xpdeint/support/wscript", line 411, in 
>>> configure_compiler
>>>      hdf5_libpath = re.search(r'\s-L(\S+)', 
>>> h5cc_shared_flags).group(1)
>>>                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>> AttributeError: 'NoneType' object has no attribute 'group'
>>> 
>>> I tried to poke into the xpdeint/support/wscript file; but while 
>>> xmds2 seems
>>> to build successfully many tests fail then. So I let it to the 
>>> maintainer of
>>> the package :)
>>> 
>>> Don't hesitate to reach if needed, as I am in touch with HDF5 devs 
>>> and
>>> they are willing to help.
>> Please review the attached patch. I've tested it with both HDF5 1.14.6 
>> in
>> unstable and HDF5 2.1.0 in experimental.
>> 
>> Best,
>> _g.
> 
>> diff -Nru xmds2-3.1.0+dfsg2/debian/changelog 
>> xmds2-3.1.0+dfsg2/debian/changelog
>> --- xmds2-3.1.0+dfsg2/debian/changelog	2026-03-26 13:48:46.000000000 
>> +0100
>> +++ xmds2-3.1.0+dfsg2/debian/changelog	2026-06-22 16:17:06.000000000 
>> +0200
>> @@ -1,3 +1,10 @@
>> +xmds2 (3.1.0+dfsg2-13.1) UNRELEASED; urgency=medium
>> +
>> +  * Non-maintainer upload.
>> +  * New patch to add support for HDF5 2.1.0 (closes: #1139554)
>> +
>> + -- Gilles Filippini <pini at debian.org>  Mon, 22 Jun 2026 16:17:06 
>> +0200
>> +
>>  xmds2 (3.1.0+dfsg2-13) unstable; urgency=medium
>> 
>>    * Upload to unstable
>> diff -Nru xmds2-3.1.0+dfsg2/debian/patches/hdf5-2.1.0.patch 
>> xmds2-3.1.0+dfsg2/debian/patches/hdf5-2.1.0.patch
>> --- xmds2-3.1.0+dfsg2/debian/patches/hdf5-2.1.0.patch	1970-01-01 
>> 01:00:00.000000000 +0100
>> +++ xmds2-3.1.0+dfsg2/debian/patches/hdf5-2.1.0.patch	2026-06-22 
>> 16:17:06.000000000 +0200
>> @@ -0,0 +1,58 @@
>> +Index: xmds2-3.1.0+dfsg2/xpdeint/support/wscript
>> +===================================================================
>> +--- xmds2-3.1.0+dfsg2.orig/xpdeint/support/wscript
>> ++++ xmds2-3.1.0+dfsg2/xpdeint/support/wscript
>> +@@ -400,22 +400,31 @@ def configure(conf):
>> +         if conf.env['ENVIRONMENT_NAME'] == 'default':
>> +             hdf5_helper = 'h5cc'
>> +             hdf5_helper_var = 'H5CC'
>> ++            hdf5_lib = 'hdf5_serial'
>> ++            hdf5_hl_lib = 'hdf5_serial_hl'
>> +         else:
>> +             hdf5_helper = 'h5pcc'
>> +             hdf5_helper_var = 'H5PCC'
>> ++            helper_implementation = "/usr/bin/h5pcc"
>> ++            while os.path.islink(helper_implementation):
>> ++                helper_implementation = 
>> os.readlink(helper_implementation)
>> ++            hdf5_mpi_flavor = 
>> os.path.splitext(helper_implementation)[1][1:]
>> ++            hdf5_lib = f'hdf5_{hdf5_mpi_flavor}'
>> ++            hdf5_hl_lib = f'hdf5_{hdf5_mpi_flavor}_hl'
>> +
>> +         if conf.find_program(f'{hdf5_helper}', var=hdf5_helper_var, 
>> mandatory = False):
>> +             h5cc_shared_flags = 
>> conf.cmd_and_log([conf.env[hdf5_helper_var][0], '-show', '-shlib'])
>> +             h5cc_static_flags = 
>> conf.cmd_and_log([conf.env[hdf5_helper_var][0], '-show', '-noshlib'])
>> +
>> +-            hdf5_libpath = re.search(r'\s-L(\S+)', 
>> h5cc_shared_flags).group(1)
>> +-
>> +-            conf.env.append_unique("LIBPATH_hdf5", hdf5_libpath)
>> ++            re_res = re.search(r'\s-L(\S+)', h5cc_shared_flags)
>> ++            if re_res:
>> ++                hdf5_libpath = re_res.group(1)
>> ++                conf.env.append_unique("LIBPATH_hdf5", hdf5_libpath)
>> +
>> +             # h5cc uses absolute paths to the static libraries.  
>> This interferes with how waf likes to link
>> +             # against static libraries.  Let's remove the absolute 
>> paths to the libraries, and add the static libraries
>> +             # again later.
>> +-            h5cc_static_flags = re.sub(re.escape(hdf5_libpath) + 
>> r"/libhdf5\S*\.a", "", h5cc_static_flags)
>> ++            h5cc_static_flags = re.sub(r" /[^ ]*/lib(hdf5\S*)\.a", 
>> r" -l\1", h5cc_static_flags)
>> +
>> +             conf.parse_flags(h5cc_shared_flags, 'hdf5_shared')
>> +             conf.parse_flags(h5cc_static_flags, 'hdf5_static')
>> +@@ -423,7 +432,7 @@ def configure(conf):
>> +             conf.env['uselib'].extend(['hdf5_shared', 
>> 'hdf5_static'])
>> +
>> +             check_cxx(
>> +-                lib='hdf5',
>> ++                lib=hdf5_lib,
>> +                 header_name='hdf5.h',
>> +                 #function_name='H5check_version',
>> +                 fragment='''
>> +@@ -444,7 +453,7 @@ def configure(conf):
>> +             if 'hdf5' in conf.env['uselib']:
>> +
>> +                 check_cxx(
>> +-                    lib='hdf5_hl',
>> ++                    lib=hdf5_hl_lib,
>> +                     defines='HAVE_HDF5_HL',
>> +                     header_name=['hdf5.h', 'hdf5_hl.h'],
>> +                     fragment='''
>> diff -Nru xmds2-3.1.0+dfsg2/debian/patches/series 
>> xmds2-3.1.0+dfsg2/debian/patches/series
>> --- xmds2-3.1.0+dfsg2/debian/patches/series	2026-03-26 
>> 13:48:46.000000000 +0100
>> +++ xmds2-3.1.0+dfsg2/debian/patches/series	2026-06-22 
>> 16:17:06.000000000 +0200
>> @@ -16,3 +16,4 @@
>>  wscript-hdf5-cmake-support.patch
>>  wscript-hdf5-mpi-support.patch
>>  auto-gitignore
>> +hdf5-2.1.0.patch

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://alioth-lists.debian.net/pipermail/debian-science-maintainers/attachments/20260623/776c1087/attachment.sig>


More information about the debian-science-maintainers mailing list