diff --git a/azure-pipelines.yml b/azure-pipelines.yml
new file mode 100644
index 00000000..14d21897
--- /dev/null
+++ b/azure-pipelines.yml
@@ -0,0 +1,29 @@
+trigger:
+ branches:
+ include:
+ - master
+ - refs/tags/*
+
+jobs:
+- job:
+ displayName: 'Snapshot build'
+ condition: eq(variables['build.sourceBranch'], 'refs/heads/master')
+ pool:
+ vmImage: 'macOS-10.15'
+
+ steps:
+ - checkout: self
+
+ - task: Maven@3
+ inputs:
+ mavenPomFile: 'pom.xml'
+ goals: 'clean install'
+ options: '-Drevision=$(Build.BuildNumber)'
+ publishJUnitResults: false
+ testResultsFiles: '**/surefire-reports/TEST-*.xml'
+ javaHomeOption: 'JDKVersion'
+ jdkVersionOption: '1.11'
+ mavenVersionOption: 'Default'
+ mavenAuthenticateFeed: false
+ effectivePomSkip: false
+ sonarQubeRunAnalysis: false
diff --git a/pom.xml b/pom.xml
index 3b0c2ca8..8bb433cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,9 +6,9 @@
acegi-standard-project
0.2.3
- org.lmdbjava
+ org.lmdbjava.alt
lmdbjava
- 0.7.1-SNAPSHOT
+ 0.7.1-${revision}-SNAPSHOT
jar
LmdbJava
Low latency Java API for the ultra-fast, embedded Symas Lightning Database (LMDB)
diff --git a/src/main/java/org/lmdbjava/Library.java b/src/main/java/org/lmdbjava/Library.java
index 3cb44fae..2a28f7ca 100644
--- a/src/main/java/org/lmdbjava/Library.java
+++ b/src/main/java/org/lmdbjava/Library.java
@@ -23,6 +23,7 @@
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.File;
import static java.io.File.createTempFile;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -33,6 +34,7 @@
import static java.util.Locale.ENGLISH;
import static java.util.Objects.nonNull;
import static java.util.Objects.requireNonNull;
+import java.util.Properties;
import static jnr.ffi.LibraryLoader.create;
import jnr.ffi.Pointer;
import static jnr.ffi.Runtime.getRuntime;
@@ -97,7 +99,8 @@ final class Library {
if (SHOULD_USE_LIB) {
libToLoad = getProperty(LMDB_NATIVE_LIB_PROP);
} else if (SHOULD_EXTRACT && arch64 && linux) {
- libToLoad = extract("org/lmdbjava/lmdbjava-native-linux-x86_64.so");
+ final String flavor = refineLinux();
+ libToLoad = extract(String.format("org/lmdbjava/lmdbjava-native-%s-x86_64.so", flavor));
} else if (SHOULD_EXTRACT && arch64 && osx) {
libToLoad = extract("org/lmdbjava/lmdbjava-native-osx-x86_64.dylib");
} else if (SHOULD_EXTRACT && arch64 && windows) {
@@ -137,6 +140,28 @@ private static String extract(final String name) {
}
}
+ @SuppressWarnings({"checkstyle:returncount", "PMD.AvoidFileStream"})
+ private static String refineLinux() {
+ // /etc/os-release is a very cross-platform way to determine the linux distribution
+ // and just happens to be specified in properties format
+ try (InputStream inputStream = new FileInputStream("/etc/os-release")) {
+ final Properties properties = new Properties();
+ properties.load(inputStream);
+
+ final String flavor = String.valueOf(properties.get("ID")).trim();
+
+ // We only care if it's Alpine for now as it uses MUSL instead of GLIBC
+ if ("alpine".equals(flavor)) {
+ return "linux-alpine";
+ } else {
+ return "linux";
+ }
+ } catch (final IOException e) {
+ // Default to plain 'linux' if anything fails
+ return "linux";
+ }
+ }
+
/**
* Structure to wrap a native MDB_envinfo. Not for external use.
*/