Skip to content

Commit ada2b14

Browse files
gotsonPromanSEW
andauthored
detect musl by checking /proc/self/map_files (#675)
* detect musl by checking /proc/self/map_files * spotless:apply * Update src/main/java/org/sqlite/util/OSInfo.java Co-authored-by: Roman Parshikov <[email protected]> * spotless:apply Co-authored-by: Roman Parshikov <[email protected]>
1 parent 15ecb1b commit ada2b14

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ freebsd-arm64: $(SQLITE_UNPACKED) jni-header
151151
docker run $(DOCKER_RUN_OPTS) -v $$PWD:/workdir gotson/freebsd-cross-build:aarch64-11.4 sh -c 'make clean-native native OS_NAME=FreeBSD OS_ARCH=aarch64 CROSS_PREFIX=aarch64-unknown-freebsd11-'
152152

153153
alpine-linux64: $(SQLITE_UNPACKED) jni-header
154-
docker run $(DOCKER_RUN_OPTS) -v $$PWD:/work xerial/alpine-linux-x86_64 bash -c 'make clean-native native OS_NAME=Linux-Alpine OS_ARCH=x86_64'
154+
docker run $(DOCKER_RUN_OPTS) -v $$PWD:/work xerial/alpine-linux-x86_64 bash -c 'make clean-native native OS_NAME=Linux-Musl OS_ARCH=x86_64'
155155

156156
linux-arm: $(SQLITE_UNPACKED) jni-header
157157
./docker/dockcross-armv5 -a $(DOCKER_RUN_OPTS) bash -c 'make clean-native native CROSS_PREFIX=armv5-unknown-linux-gnueabi- OS_NAME=Linux OS_ARCH=arm'

src/main/java/org/sqlite/util/OSInfo.java

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@
2525
package org.sqlite.util;
2626

2727
import java.io.IOException;
28+
import java.nio.file.Files;
29+
import java.nio.file.Path;
30+
import java.nio.file.Paths;
2831
import java.util.HashMap;
2932
import java.util.Locale;
30-
import java.util.concurrent.TimeUnit;
33+
import java.util.stream.Stream;
3134

3235
/**
3336
* Provides OS name and architecture name.
@@ -109,15 +112,22 @@ public static boolean isAndroid() {
109112
return System.getProperty("java.runtime.name", "").toLowerCase().contains("android");
110113
}
111114

112-
public static boolean isAlpine() {
113-
try {
114-
String output =
115-
processRunner.runAndWaitFor(
116-
"cat /etc/os-release | grep ^ID", 300, TimeUnit.MILLISECONDS);
117-
return output.toLowerCase().contains("alpine");
118-
} catch (Throwable e) {
119-
return false;
115+
public static boolean isMusl() {
116+
Path mapFilesDir = Paths.get("/proc/self/map_files");
117+
try (Stream<Path> dirStream = Files.list(mapFilesDir)) {
118+
return dirStream
119+
.map(
120+
path -> {
121+
try {
122+
return path.toRealPath().toString();
123+
} catch (IOException e) {
124+
return "";
125+
}
126+
})
127+
.anyMatch(s -> s.toLowerCase().contains("musl"));
128+
} catch (IOException ignored) {
120129
}
130+
return false;
121131
}
122132

123133
static String getHardwareName() {
@@ -213,8 +223,8 @@ static String translateOSNameToFolderName(String osName) {
213223
return "Windows";
214224
} else if (osName.contains("Mac") || osName.contains("Darwin")) {
215225
return "Mac";
216-
} else if (isAlpine()) {
217-
return "Linux-Alpine";
226+
} else if (isMusl()) {
227+
return "Linux-Musl";
218228
} else if (isAndroid()) {
219229
return "Linux-Android";
220230
} else if (osName.contains("Linux")) {

0 commit comments

Comments
 (0)