Add OpenBSD support for ICU library loading#129124
Conversation
OpenBSD uses ABI versioning in SONAME rather than ICU version numbering. Use unversioned dlopen calls and probe symbol versioning instead of attempting to load versioned library names.
|
Tagging subscribers to this area: @dotnet/area-system-globalization |
|
Hello world was working with the override: am11@foo:~$ DOTNET_ICU_VERSION_OVERRIDE=22 th/artifacts/bin/testhost/net11.0-openbsd-Debug-x64/dotnet exec ~/projects/hw1/hw1/bin/Debug/net11.0/hw1.dll
Hello, World!
Environment.Version: 11.0.0
RuntimeInformation.OSDescription: OpenBSD 7.8 GENERIC.MP#54This makes it work without. |
|
Two important caveats this PR introduces
|
|
@tarekgh, I think it’s fine to make it work with OpenBSD packaging convention in a standard install just like we have for Android (at least for the bringup). Unlike some other desktop OS, OpenBSD seem to have one package version at a time policy, If someone wants to use .NET with a custom build of ICU, they can use LD_LIBRARY_PATH or symlink type of mechanism to prioritize their copy. So far there is no use case for overriding and I intentionally left it out because it looks weird to use DOTNET_ICU_VERSION_OVERRIDE=22 because this env var refers to API/packaging version on Linux, FreeBSD and Solaris and we are supporting v60 onwards; while OpenBSD is using ABI versions in SONAME part. |
I am not objecting, I am just pointing out OpenBSD will be kind of special case. At least we should document the new behavior in https://learn.microsoft.com/en-us/dotnet/core/extensions/globalization-icu for completeness. |
OpenBSD uses ABI versioning in SONAME rather than ICU version numbering. Use unversioned dlopen calls and probe symbol versioning instead of attempting to load versioned library names.
Contributes to #124911.