in JetBrains.HabitatDetector/src/Impl/Linux/LinuxHelper.cs [36:86]
internal static JetLinuxLibC? ConvertToLibC(string interpreter)
{
if (interpreter is "/system/bin/linker64" or "/system/bin/linker")
return JetLinuxLibC.Bionic;
// Note(ww898,k15tfu): Removing interpreter directory is NixOS/snap support (see https://youtrack.jetbrains.com/issue/RIDER-55371):
// /nix/store/c1nqsqwl9allxbxhqx3iqfxk363qrnzv-glibc-2.32-54/lib/ld-linux-aarch64.so.1
// /nix/store/jsp3h3wpzc842j0rz61m5ly71ak6qgdn-glibc-2.32-54/lib/ld-linux-x86-64.so.2
// /snap/core18/current/lib64/ld-linux-x86-64.so.2
// /snap/core20/current/lib/ld-linux-aarch64.so.1
// /snap/core20/current/lib/ld-linux-armhf.so.3
// /snap/core18/current/lib/ld-linux.so.2
// /lib/ld-linux-aarch64.so.1
// /lib/ld-linux-armhf.so.3
// /lib/ld-linux.so.2
// /lib/ld-musl-aarch64.so.1
// /lib/ld-musl-armhf.so.1
// /lib/ld-musl-i386.so.1
// /lib/ld-musl-x86_64.so.1
var n = interpreter.LastIndexOf('/');
var interpreterFileName = interpreter.Substring(n + 1);
if (interpreterFileName.StartsWith("ld-linux-") ||
interpreterFileName.StartsWith("ld-linux."))
return JetLinuxLibC.Glibc;
if (interpreterFileName.StartsWith("ld-musl-") ||
interpreterFileName.StartsWith("ld-musl."))
return JetLinuxLibC.Musl;
// Note(ww898,k15tfu): Something special for dotnet-sdk installed via new snap (see https://youtrack.jetbrains.com/issue/RIDER-80530):
// /snap/dotnet-sdk/current/lib/x86_64-linux-gnu/ld-2.27.so
// /lib/x86_64-linux-gnu/ld-2.27.so
if (interpreterFileName.StartsWith("ld-") ||
interpreterFileName.StartsWith("ld."))
{
// Note(ww898,k15tfu): See https://llvm.org/doxygen/Triple_8h_source.html / https://llvm.org/doxygen/Triple_8cpp_source.html
// x86_64-linux-gnu
// aarch64-linux-gnu
// arm-linux-gnueabihf
// aarch64-linux-musl
// arm-linux-musleabihf
var k = interpreter.LastIndexOf('/', n - 1, n);
var triple = interpreter.Substring(k + 1, n - k - 1);
if (triple.Contains("-linux-gnu"))
return JetLinuxLibC.Glibc;
if (triple.Contains("-linux-musl"))
return JetLinuxLibC.Musl;
}
// Bug(ww898,k15tfu): Please don't call external processes like ldd to detect GLibC/Musl in OS because it's incorrect for the current process (see NixOS/snap/...)!!!
return null;
}