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')


Reply via email to