Skip to content

Commit 8eb95d0

Browse files
committed
Support musl system library and LmdbJava Native 0.9.33-3 (#280)
1 parent db70f14 commit 8eb95d0

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
<jnr-ffi.version>2.2.18</jnr-ffi.version>
3939
<junit.version>5.14.1</junit.version>
4040
<license-maven-plugin.version>4.6</license-maven-plugin.version>
41-
<lmdbjava-native.version>0.9.33-2</lmdbjava-native.version>
41+
<lmdbjava-native.version>0.9.33-3</lmdbjava-native.version>
4242
<maven-clean-plugin.version>3.5.0</maven-clean-plugin.version>
4343
<maven-compiler-plugin.version>3.14.1</maven-compiler-plugin.version>
4444
<maven-dependency-plugin.version>3.9.0</maven-dependency-plugin.version>

src/main/java/org/lmdbjava/TargetName.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
import static java.lang.System.getProperty;
1919
import static java.util.Locale.ENGLISH;
2020

21+
import java.io.IOException;
22+
import java.nio.file.Files;
23+
import java.nio.file.Paths;
24+
2125
/**
2226
* Determines the name of the target LMDB native library.
2327
*
@@ -160,6 +164,19 @@ private static String resolveOs(final String os) {
160164
}
161165

162166
private static String resolveToolchain(final String os) {
163-
return check(os, "Mac OS") ? "none" : "gnu";
167+
if (check(os, "Mac OS")) {
168+
return "none";
169+
}
170+
return isMuslLibc() ? "musl" : "gnu";
171+
}
172+
173+
private static boolean isMuslLibc() {
174+
try {
175+
return Files.lines(Paths.get("/proc/self/maps"))
176+
.filter(line -> line.contains("libc"))
177+
.anyMatch(line -> line.contains("musl"));
178+
} catch (final IOException e) {
179+
return false;
180+
}
164181
}
165182
}

src/test/java/org/lmdbjava/TargetNameTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,13 @@ void customEmbedded() {
4141

4242
@Test
4343
void embeddedNameResolution() {
44-
embed("aarch64-linux-gnu.so", "aarch64", "Linux");
44+
// Note: Linux resolution now detects musl vs glibc at runtime
45+
// These tests verify the resolution logic but actual toolchain depends on system
46+
final String linuxToolchain = TargetName.resolveFilename(NONE, NONE, "x86_64", "Linux")
47+
.contains("-musl.") ? "musl" : "gnu";
48+
embed("aarch64-linux-" + linuxToolchain + ".so", "aarch64", "Linux");
4549
embed("aarch64-macos-none.so", "aarch64", "Mac OS");
46-
embed("x86_64-linux-gnu.so", "x86_64", "Linux");
50+
embed("x86_64-linux-" + linuxToolchain + ".so", "x86_64", "Linux");
4751
embed("x86_64-macos-none.so", "x86_64", "Mac OS");
4852
embed("x86_64-windows-gnu.dll", "x86_64", "Windows");
4953
}

0 commit comments

Comments
 (0)