19.01.2026 18:07, [email protected] пишет: > bulk build on octeon.ports.openbsd.org > started on Wed Jan 7 16:47:18 UTC 2026 > finished at Tue Jan 13 07:12:20 UTC 2026 > lasted 06D14h25m > done with kern.version=OpenBSD 7.8-current (GENERIC.MP) #120: Mon Dec 29 > 00:57:14 MST 2025 > > built packages:8646 > Jan 7:1442 > Jan 8:1815 > Jan 9:2029 > Jan 10:605 > Jan 11:355 > Jan 12:398 > Jan 13:2001 > > > build failures: 81
> http://build-failures.rhaalovely.net/mips64/2026-01-07/sysutils/libvirt.log | FAILED: src/libvirt.so.2.6 | cc [...] src/util/libvirt_util.a [...] -shared [...] -Wl,-no_warn_duplicate_libraries -Wl,-export-dynamic /usr/local/lib/libglib-2.0.so.4201.15 [...] | /usr/bin/ld: attempted static link of dynamic object `/usr/local/lib/libglib-2.0.so.4201.15' I snipped the long line to highlight what's being linked: a bunch of static libvirt_* with a bunch of dynamic package libs. Neither -static, nor any of the three other arguments mentioned with it in ld.bfd(1) are used, thuse I don't quite understand why the linker at some point in decides that a static object is to be produced. glib2 is just the first .so and not special here. So I pasted the command into a file, turned spaces into newlines and bisected execution failure by moving only glib2 up until it started complaining about the second .so, thinking '-shared /.../libglib-...' must work. That way I found -Wl,-no_warn_duplicate_libraries to be the culprit, causing all .so following it to throw above error. I have no idea what's going on in the linker here and I won't ask any questions. Simply skipping this flag on octeon makes it build. Next up was this: # make fake [...] Stripping target 'src/libvirt.so.2.6'. Installing src/libvirt-qemu.so.2.3 to /usr/ports/pobj/libvirt-12.0.0/fake-mips64/usr/local/lib Stripping target 'src/libvirt-qemu.so.2.3'. Traceback (most recent call last): File "/usr/local/lib/python3.13/site-packages/mesonbuild/mesonmain.py", line 193, in run return options.run_func(options) ~~~~~~~~~~~~~~~~^^^^^^^^^ File "/usr/local/lib/python3.13/site-packages/mesonbuild/minstall.py", line 888, in run installer.do_install(datafilename) ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^ File "/usr/local/lib/python3.13/site-packages/mesonbuild/minstall.py", line 563, in do_install self.install_targets(d, dm, destdir, fullprefix) ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.13/site-packages/mesonbuild/minstall.py", line 788, in install_targets self.fix_rpath(outname, t.rpath_dirs_to_remove, install_rpath, final_path, ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ install_name_mappings, verbose=False) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.13/site-packages/mesonbuild/minstall.py", line 348, in fix_rpath depfixer.fix_rpath(*args, **kwargs) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.13/site-packages/mesonbuild/scripts/depfixer.py", line 550, in fix_rpath fix_elf(fname, rpath_dirs_to_remove, new_rpath, verbose) ~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.13/site-packages/mesonbuild/scripts/depfixer.py", line 457, in fix_elf with Elf(fname, verbose) as e: ~~~^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.13/site-packages/mesonbuild/scripts/depfixer.py", line 150, in __init__ self.parse_dynsym_strings() ~~~~~~~~~~~~~~~~~~~~~~~~~^^ File "/usr/local/lib/python3.13/site-packages/mesonbuild/scripts/depfixer.py", line 276, in parse_dynsym_strings self.dynsym_strings.append(self.read_str().decode()) ~~~~~~~~~~~~~^^ File "/usr/local/lib/python3.13/site-packages/mesonbuild/scripts/depfixer.py", line 238, in read_str raise RuntimeError('Tried to read past the end of the file') RuntimeError: Tried to read past the end of the file ERROR: Unhandled python exception This is a Meson bug and should be reported! [...] libvirt and libvirt-qemu both build/link, but the latter fails to strip. With help from tb and jca, we compared their flags in the logs and came up with -Wl,--version-script=... as pime suspect. Again, no idea what the linker is doing, but omitting that flag makes it strip just fine, so that's what I did. Now packages, but I haven't done any tests. In turn, sysutils/collectd now packages, which I actually need and tested. Feedback? OK? Index: patches/patch-meson_build =================================================================== RCS file: /cvs/ports/sysutils/libvirt/patches/patch-meson_build,v diff -u -p -r1.41 patch-meson_build --- patches/patch-meson_build 4 Nov 2025 07:52:39 -0000 1.41 +++ patches/patch-meson_build 21 Jan 2026 22:41:08 -0000 @@ -3,6 +3,13 @@ ld: error: undefined symbol: _Unwind_Res Should match b_lundef in meson(1). +Skip -Wl,-no_warn_duplicate_libraries on octeon/mips64 to unbreak build: +/usr/bin/ld: attempted static link of dynamic object `/usr/local/lib/libglib-2.0.so.4201.15' + +Skip -Wl,--version-script= on octeon/mips64 to unbreak fake: +RuntimeError: Tried to read past the end of the file + This is a Meson bug and should be reported! + Index: meson.build --- meson.build.orig +++ meson.build @@ -26,7 +33,22 @@ Index: meson.build libvirt_no_indirect = cc.get_supported_link_arguments([ '-Wl,--no-copy-dt-needed-entries', -@@ -872,7 +866,7 @@ if not get_option('driver_remote').disabled() +@@ -573,10 +567,13 @@ libvirt_no_indirect = cc.get_supported_link_arguments( + libvirt_no_warn_duplicate_libraries = cc.get_supported_link_arguments([ + '-Wl,-no_warn_duplicate_libraries', + ]) ++if host_machine.cpu_family() == 'mips64' ++libvirt_no_warn_duplicate_libraries = '' ++endif + + if host_machine.system() == 'windows' + version_script_flags = '-Wl,' +-elif host_machine.system() == 'darwin' ++elif host_machine.system() == 'darwin' or host_machine.cpu_family() == 'mips64' + # macOS libraries don't support symbol versioning + version_script_flags = '' + else +@@ -872,7 +869,7 @@ if not get_option('driver_remote').disabled() xdr_dep = cc.find_library('portablexdr', required: get_option('driver_remote')) elif host_machine.system() in [ 'linux', 'gnu' ] xdr_dep = dependency('libtirpc', required: get_option('driver_remote')) @@ -35,7 +57,7 @@ Index: meson.build xdr_dep = cc.find_library('c', required: get_option('driver_remote')) else xdr_dep = dependency('', required: false) -@@ -960,15 +954,18 @@ if devmapper_dep.found() +@@ -960,15 +957,18 @@ if devmapper_dep.found() conf.set('WITH_DEVMAPPER', 1) endif @@ -62,7 +84,7 @@ Index: meson.build fuse_version = '3.1.0' fuse_dep = dependency('fuse3', version: '>=' + fuse_version, required: false) if fuse_dep.found() -@@ -1906,7 +1903,7 @@ endif +@@ -1906,7 +1906,7 @@ endif driver_modules_flags = [] if conf.has('WITH_LIBVIRTD')
