-
Notifications
You must be signed in to change notification settings - Fork 1
Description
On my system lld --version returns a string that does neither contain glibc, gnu libc nor musl:
$ lld --version
ldd (Gentoo 2.41-r6 (patchset 8)) 2.41
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
This causes the following exception:
Caused by: java.lang.UnsupportedOperationException: Cannot work out libc used by this OS. ldd output was: ldd (gentoo 2.41-r6 (patchset 8)) 2.41
copyright (c) 2024 free software foundation, inc.
this is free software; see the source for copying conditions. there is no
warranty; not even for merchantability or fitness for a particular purpose.
written by roland mcgrath and ulrich drepper.
at com.palantir.platform.GradleOperatingSystem.lambda$linuxLibcFromLdd$5(GradleOperatingSystem.java:77)
at org.gradle.api.internal.provider.BiProvider.calculateOwnValue(BiProvider.java:81)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:115)
at org.gradle.api.internal.provider.FlatMapProvider.calculateOwnValue(FlatMapProvider.java:53)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:115)
at org.gradle.api.internal.provider.TransformBackedProvider.calculateOwnValue(TransformBackedProvider.java:81)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:115)
at org.gradle.api.internal.provider.DelegatingProviderWithValue.calculateOwnValue(DelegatingProviderWithValue.java:45)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:115)
at org.gradle.api.internal.provider.TransformBackedProvider.calculateOwnValue(TransformBackedProvider.java:81)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:115)
at org.gradle.api.internal.provider.MapCollectors$EntryWithValueFromProvider.collectEntries(MapCollectors.java:104)
at org.gradle.api.internal.provider.DefaultMapProperty$CollectingSupplier.lambda$calculateOwnValue$1(DefaultMapProperty.java:594)
at org.gradle.api.internal.provider.AbstractCollectingSupplier.calculateValue(AbstractCollectingSupplier.java:87)
at org.gradle.api.internal.provider.DefaultMapProperty$CollectingSupplier.calculateOwnValue(DefaultMapProperty.java:593)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:115)
at org.gradle.api.internal.provider.AbstractCollectingSupplier.calculateValue(AbstractCollectingSupplier.java:41)
at org.gradle.api.internal.provider.DefaultMapProperty.calculateValueFrom(DefaultMapProperty.java:348)
at org.gradle.api.internal.provider.DefaultMapProperty.calculateValueFrom(DefaultMapProperty.java:58)
at org.gradle.api.internal.provider.AbstractProperty.doCalculateValue(AbstractProperty.java:176)
at org.gradle.api.internal.provider.AbstractProperty.calculateOwnValue(AbstractProperty.java:169)
at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateOwnPresentValue(AbstractMinimalProvider.java:80)
at org.gradle.api.internal.provider.AbstractMinimalProvider.get(AbstractMinimalProvider.java:100)
at org.gradle.api.internal.attributes.DefaultMutableAttributeContainer.doRealize(DefaultMutableAttributeContainer.java:153)
at org.gradle.api.internal.attributes.DefaultMutableAttributeContainer.asImmutable(DefaultMutableAttributeContainer.java:193)
at org.gradle.api.internal.attributes.DefaultMutableAttributeContainer.toString(DefaultMutableAttributeContainer.java:64)
at org.gradle.internal.logging.text.TreeFormatter.appendValue(TreeFormatter.java:214)
at org.gradle.api.internal.artifacts.transform.DefaultVariantTransformRegistry.buildFailureToRegisterMsg(DefaultVariantTransformRegistry.java:107)
at org.gradle.api.internal.artifacts.transform.DefaultVariantTransformRegistry.doRegisterTransform(DefaultVariantTransformRegistry.java:95)
at org.gradle.api.internal.artifacts.transform.DefaultVariantTransformRegistry.registerTransform(DefaultVariantTransformRegistry.java:73)
at org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.registerTransform(DefaultDependencyHandler.java:321)
at com.palantir.javaformat.gradle.NativeImageFormatProviderPlugin.apply(NativeImageFormatProviderPlugin.java:62)
at com.palantir.javaformat.gradle.NativeImageFormatProviderPlugin.apply(NativeImageFormatProviderPlugin.java:30)
at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:55)
at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:50)
at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:190)
at org.gradle.api.internal.plugins.DefaultPluginManager.access$100(DefaultPluginManager.java:54)
at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:285)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:166)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
at org.gradle.api.internal.plugins.DefaultPluginManager.lambda$doApply$0(DefaultPluginManager.java:170)
at org.gradle.internal.code.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:44)
at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:169)
... 278 more
A more reliable way compared to checking the ldd --version output would be to obtain the Requesting program interpreter output of readelf -l
$ readelf -l /bin/sh | grep -F 'Requesting program interpreter'
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]If it contains musl then it's most likely musl, if it's ld-linux then it's most likely glibc. Note that you may want to invoke readelf on a binary's path obtained from PATH to account for prefix situations, so basically readelf -v $(command -v sh).
Additionally, it would be nice if there where an setting to side-step the automatic detection. Ideally via gradle property and/or via an environment variable.
Note that this unreliable approach is used at two places
GradleOperatingSystem.linuxLIbcFromLddOperatingSystem
(maybe a good idea to reduce the duplicate code in both)