Upstream solved this slightly differently, and it's become a bit messy: https://github.com/xkbcommon/libxkbcommon/commit/ebe4157d by bapt added the --undefined-version option https://github.com/xkbcommon/libxkbcommon/commit/1d8a25d6 added yet another check, some old ld versions don't support --undefined-version
This could all go, if they used test version script, instead of the full script. I'll see about putting in a pull request. -Dimitry > On 10 Jan 2025, at 13:42, Peter Blok <pb...@bsd4all.org> wrote: > > Patch works fine! Thanks. > > Do I need to open up a bug to get this pushed upstream? > > Peter > > >> On 10 Jan 2025, at 13:28, Dimitry Andric <d...@freebsd.org> wrote: >> >> On 10 Jan 2025, at 12:56, Dimitry Andric <d...@freebsd.org> wrote: >>> >>> On 10 Jan 2025, at 12:20, Peter Blok <pb...@bsd4all.org> wrote: >>>> >>>> Test works ok when using clang18 from ports >>>> >>>>> On 10 Jan 2025, at 11:19, Dimitry Andric <d...@freebsd.org> wrote: >>>>> >>>>> On 10 Jan 2025, at 10:22, Peter Blok <pb...@bsd4all.org> wrote: >>>>>> >>>>>> I have recompiled x11/libxkbcommon and it fails to detect if the >>>>>> compiler/linker supports versioned symbols. As a result other code >>>>>> expecting the versioned symbol to exist, fail to link. >>>>>> >>>>>> C compiler for the host machine: cc (clang 19.1.5 "FreeBSD clang version >>>>>> 19.1.5 (https://github.com/llvm/llvm-project.git >>>>>> llvmorg-19.1.5-0-gab4b5a2db582)") >>>>>> C linker for the host machine: cc ld.lld 19.1.5 >>>>>> >>>>>> Below the meson.build check. If I force have_version_script to true, the >>>>>> versioned symbols are created and other code links fine. >>>>>> >>>>>> # Supports -Wl,--version-script? >>>>>> have_version_script = cc.links( >>>>>> 'int main(){}', >>>>>> args: '-Wl,--undefined-version,--version-script=' + >>>>>> meson.current_source_dir()/'xkbcommon.map', >>>>>> name: '-Wl,--version-script', >>>>>> ) >>>>>> >>>>>> Below the output for the test. >>>>>> >>>>>> Checking if "-Wl,--version-script" : links: NO >>>>>> >>>>>> If I create test.c with content "int main(){}” and compile it manually >>>>>> with the same flags AFAIK, it compiles ok. No errors. >>>>>> >>>>>> However when I capture "make configure" with ktrace, it fails with the >>>>>> error below. >>>>>> >>>>>> ld: error: non-exported symbol 'environ' in '/usr/lib/crt1.o' is >>>>>> referenced by DSO '/lib/libc.so.7' >>>>>> ld: error: non-exported symbol '__progname' in '/usr/lib/crt1.o' is >>>>>> referenced by DSO '/lib/libc.so.7' >>>>>> cc: error: linker command failed with exit code 1 (use -v to see >>>>>> invocation) >>>>>> >>>>>> What flags need to be added in meson.build to allow it to work? >>>>>> >>>>>> BTW This is on recent stable, but I suspect it fails the same way on >>>>>> current which I do not run at the moment. >>>>> >>>>> It works just fine on -CURRENT: >>>>> >>>>> ... >>>>> Checking if "-Wl,--version-script" : links: YES >>>>> >>>>> Not sure what is going wrong in your environment. Is this stable/14? >>> >>> It appears to help when the lines: >>> >>> local: >>> *; >>> >>> are removed from >>> /wrkdirs/usr/ports/x11/libxkbcommon/work/libxkbcommon-1.7.0/xkbcommon.map. >>> Apparently on main, environ and __progname are slightly different. >>> >>> In any case, the "local: *;" thing has caused problems before, so maybe >>> it's better to get rid of it. >> >> Here's a better patch, that can also be upstreamed. It avoids the whole >> problem of trying to use the "full" xkbcommon.map during meson tests. >> >> -Dimitry >> >> <x11__libxkbcommon-fix-version-script-check-1.diff> > >