|
| 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) |
0 commit comments