Skip to content

Commit 39fa449

Browse files
committed
Add libaec-native subproject
Create a new subproject to assemble a jar containing native libaec libraries suitable for use with JNA.
1 parent 1ef165d commit 39fa449

File tree

4 files changed

+58
-0
lines changed

4 files changed

+58
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,6 @@ thredds.tgz
6161

6262
# dependency check NVD files
6363
project-files/owasp-dependency-check/nvd
64+
65+
# native binary distribution files
66+
project-files/native

native-compression/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
description = 'Native binding for compression'
2+
ext.title = 'native compression binding'
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import java.security.DigestInputStream
2+
import java.security.MessageDigest
3+
4+
apply from: "$rootDir/gradle/any/java-library.gradle"
5+
6+
description = 'Jar distribution of native libraries for libaec compression.'
7+
ext.title = 'Native libraries for libaec.'
8+
9+
// zip file produced by GitHub workflow
10+
def libaecNative = 'libaec-native-1.1.3-1ef165d829f330d72d199d3c4655c327d339604d.zip'
11+
12+
// sha256 checksum from GitHub workflow output
13+
def expectedChecksum = 'f8273bf7eef9aef6bf4766301d978a2dea7cefcad72a2d7c2d655299d5847a4b'
14+
15+
def resourceZip = new File("${rootDir}/project-files/native/libaec/${libaecNative}")
16+
17+
def fetchNativeResources = tasks.register("fetchNativeResources") {
18+
outputs.file resourceZip
19+
doLast {
20+
if (!resourceZip.exists()) {
21+
def actualChecksum = ''
22+
def resourceUrl = "https://downloads.unidata.ucar.edu/netcdf-java/native/libaec/${libaecNative}"
23+
new URL(resourceUrl).withInputStream {
24+
ips ->
25+
DigestInputStream dips = new DigestInputStream(ips, MessageDigest.getInstance('SHA-256'))
26+
resourceZip.withOutputStream { ops ->
27+
ops << dips
28+
}
29+
actualChecksum = dips.getMessageDigest().digest().encodeHex().toString()
30+
}
31+
if (actualChecksum != expectedChecksum) {
32+
resourceZip.delete()
33+
String msg =
34+
String.format('Error: checksum on libaec.zip does not match expected ' +
35+
'value.\n Expected: %s\n Actual: %s\n', expectedChecksum, actualChecksum)
36+
throw new RuntimeException(msg);
37+
}
38+
}
39+
}
40+
}
41+
42+
def processNativeResources = tasks.register("processNativeResources", Copy) {
43+
inputs.file resourceZip
44+
from zipTree(resourceZip)
45+
destinationDir(file("$buildDir/resources/main"))
46+
eachFile { details ->
47+
details.path = details.path.replaceFirst("resources/", "")
48+
}
49+
dependsOn(fetchNativeResources)
50+
}
51+
52+
processResources.dependsOn(processNativeResources)

settings.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ include 'docs'
1616
include 'grib'
1717
include 'httpservices'
1818
include 'legacy'
19+
include 'native-compression:libaec-native'
1920
include 'netcdf4'
2021
include 'netcdf-java-bom'
2122
include 'netcdf-java-platform'

0 commit comments

Comments
 (0)