libxkbcommon version-script detection

From: Peter Blok <pblok_at_bsd4all.org>
Date: Fri, 10 Jan 2025 09:22:31 UTC
Hi,

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.

Peter