diff --git a/buildSrc/src/main/groovy/verified-download.groovy b/buildSrc/src/main/groovy/verified-download.groovy new file mode 100644 index 000000000..4ef4e338b --- /dev/null +++ b/buildSrc/src/main/groovy/verified-download.groovy @@ -0,0 +1,46 @@ +import org.gradle.api.tasks.* + + +//////////////////////////////////////////////////////////////////////// +// +// download and use checksum to verify that we got what we expected +// + +class VerifiedDownload extends org.gradle.api.DefaultTask { + + // URL of resource to download + def @Input src + + // expected checksum of resource as hex digits + def @Input checksum + + // algorithm to use for computing checksum + def @Input algorithm = 'MD5' + + // whether to use ETag for selective downloading + def @Input useETag = true + + // local file into which resource should be saved + def @OutputFile dest + + File getDest() { + return project.file(dest) + } + + @TaskAction + downloadAndVerify() { + def destFile = getDest() + project.download { + src this.src + dest destFile + overwrite true + onlyIfModified true + useETag this.useETag + } + project.verifyChecksum { + src destFile + algorithm this.algorithm + checksum this.checksum + } + } +} diff --git a/com.ibm.wala.cast.java.test.data/build.gradle b/com.ibm.wala.cast.java.test.data/build.gradle index 4686420e6..8c6264a3e 100644 --- a/com.ibm.wala.cast.java.test.data/build.gradle +++ b/com.ibm.wala.cast.java.test.data/build.gradle @@ -6,31 +6,10 @@ sourceSets.test.java.srcDirs = ['src'] // download JLex // -class VerifiedDownload extends org.gradle.api.DefaultTask { - - @Input String src - @Input String checksum - @OutputFile File dest - - @TaskAction - downloadAndVerify() { - download { - src this.src - dest this.dest - overwrite true - onlyIfModified true - } - verifyChecksum { - src this.dest - checksum this.checksum - } - } -} - task downloadJLex(type: VerifiedDownload) { src 'http://www.cs.princeton.edu/~appel/modern/java/JLex/current/Main.java' checksum 'fe0cff5db3e2f0f5d67a153cf6c783af' - dest file('src/JLex/Main.java') + dest 'src/JLex/Main.java' } task cleanDownloadJLex(type: Delete) { diff --git a/com.ibm.wala.cast.js.nodejs/build.gradle b/com.ibm.wala.cast.js.nodejs/build.gradle index 24a603a04..c8c9afd87 100644 --- a/com.ibm.wala.cast.js.nodejs/build.gradle +++ b/com.ibm.wala.cast.js.nodejs/build.gradle @@ -10,21 +10,10 @@ dependencies { ) } -task downloadNodeJS { - outputs.file "$temporaryDir/nodejs.zip" - doLast { - download { - src 'https://api.github.com/repos/nodejs/node/zipball/0a604e92e258c5ee2752d763e50721e35053f135' - dest outputs.files.singleFile - overwrite true - onlyIfModified true - useETag true - } - verifyChecksum { - src outputs.files.singleFile - checksum '33c5ba7a5d45644e70d268d8ad3e57df' - } - } +task downloadNodeJS(type: VerifiedDownload) { + src 'https://api.github.com/repos/nodejs/node/zipball/0a604e92e258c5ee2752d763e50721e35053f135' + dest "$temporaryDir/nodejs.zip" + checksum '33c5ba7a5d45644e70d268d8ad3e57df' } task unpackNodeJSLib(type: Copy, dependsOn: downloadNodeJS) { diff --git a/com.ibm.wala.cast.js.test.data/build.gradle b/com.ibm.wala.cast.js.test.data/build.gradle index acb178841..0bd43a3f3 100644 --- a/com.ibm.wala.cast.js.test.data/build.gradle +++ b/com.ibm.wala.cast.js.test.data/build.gradle @@ -1,22 +1,11 @@ apply plugin: 'base' -task downloadAjaxslt { +task downloadAjaxslt(type: VerifiedDownload) { def version = '0.8.1' def versionedArchive = "ajaxslt-${version}.tar.gz" - outputs.file "$temporaryDir/$versionedArchive" - doLast { - download { - src "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ajaxslt/$versionedArchive" - dest outputs.files.singleFile - overwrite true - onlyIfModified true - useETag true - } - verifyChecksum { - src outputs.files.singleFile - checksum 'c995abe3310a401bb4db7f28a6409756' - } - } + src "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ajaxslt/$versionedArchive" + dest "$temporaryDir/$versionedArchive" + checksum 'c995abe3310a401bb4db7f28a6409756' } task unpackAjaxslt(type: Sync, dependsOn: downloadAjaxslt) { diff --git a/com.ibm.wala.core.testdata/build.gradle b/com.ibm.wala.core.testdata/build.gradle index d8d34ee3d..b77b5e8a9 100644 --- a/com.ibm.wala.core.testdata/build.gradle +++ b/com.ibm.wala.core.testdata/build.gradle @@ -10,25 +10,13 @@ sourceSets.test.java.srcDirs = ['src'] // download and extract "bcel-5.2.jar" // -task downloadBcel { - ext { - version = '5.2' - } +task downloadBcel(type: VerifiedDownload) { + ext.version = '5.2' def archive = "bcel-${version}.tar.gz" - outputs.file "$temporaryDir/$archive" - doLast { - download { - src "http://archive.apache.org/dist/jakarta/bcel/binaries/$archive" - dest outputs.files.singleFile - overwrite true - onlyIfModified true - useETag false // server does not provide ETags - } - verifyChecksum { - src outputs.files.singleFile - checksum '19bffd7f217b0eae415f1ef87af2f0bc' - } - } + src "http://archive.apache.org/dist/jakarta/bcel/binaries/$archive" + dest "$temporaryDir/$archive" + checksum '19bffd7f217b0eae415f1ef87af2f0bc' + useETag false } task extractBcel(type: Copy, dependsOn: downloadBcel) { @@ -56,22 +44,11 @@ clean.dependsOn cleanExtractBcel // download "java-cup-11a.jar" // -task downloadJavaCup { +task downloadJavaCup(type: VerifiedDownload) { def archive = 'java-cup-11a.jar' - outputs.file "$projectDir/$archive" - doLast { - download { - src "http://www2.cs.tum.edu/projects/cup/$archive" - dest outputs.files.singleFile - overwrite true - onlyIfModified true - useETag true - } - verifyChecksum { - src outputs.files.singleFile - checksum '2bda8c40abd0cbc295d3038643d6e4ec' - } - } + src "http://www2.cs.tum.edu/projects/cup/$archive" + dest "$projectDir/$archive" + checksum '2bda8c40abd0cbc295d3038643d6e4ec' } task cleanDownloadJavaCup(type: Delete) { @@ -106,24 +83,13 @@ clean.dependsOn cleanCollectJLex // generate "hello_hash.jar" // -task downloadOcamlJava { +task downloadOcamlJava(type: VerifiedDownload) { def version = '2.0-alpha1' ext.basename = "ocamljava-$version" def archive = "${basename}.tar.gz" - outputs.file "$temporaryDir/$archive" - doLast { - download { - src "http://www.ocamljava.org/downloads/download.php?version=$version-bin" - dest outputs.files.singleFile - overwrite true - onlyIfModified true - useETag true - } - verifyChecksum { - src outputs.files.singleFile - checksum '45feec6e3889f5073a39c2c4c84878d1' - } - } + src "http://www.ocamljava.org/downloads/download.php?version=$version-bin" + dest "$temporaryDir/$archive" + checksum '45feec6e3889f5073a39c2c4c84878d1' } task unpackOcamlJava(type: Sync, dependsOn: downloadOcamlJava) { diff --git a/com.ibm.wala.dalvik.test/build.gradle b/com.ibm.wala.dalvik.test/build.gradle index 682e3f7ef..e3b336267 100644 --- a/com.ibm.wala.dalvik.test/build.gradle +++ b/com.ibm.wala.dalvik.test/build.gradle @@ -16,39 +16,26 @@ task cloneDroidBench(type: Exec) { commandLine 'git', 'clone', "--branch=$inputs.properties.branch", '--config=advice.detachedHead=false', '--depth=1', '--quiet', inputs.properties.repository, destDir } -task downloadAndroidSdk { +task downloadAndroidSdk(type: VerifiedDownload) { def sdkOs - def sdkChecksum switch (System.getProperty('os.name')) { case ~/Linux/: sdkOs = 'linux' - sdkChecksum = '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0' + checksum '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0' break case ~/Mac OS X/: sdkOs = 'darwin' - sdkChecksum = '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9' + checksum '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9' break case ~/Windows.*/: sdkOs = 'windows' - sdkChecksum = '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2' + checksum '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2' break } def archive = "sdk-tools-$sdkOs-3859397.zip" - outputs.file "$temporaryDir/$archive" - doLast { - download { - src "https://dl.google.com/android/repository/$archive" - dest outputs.files.singleFile - overwrite true - onlyIfModified true - useETag true - } - verifyChecksum { - src outputs.files.singleFile - algorithm 'SHA-256' - checksum sdkChecksum - } - } + src "https://dl.google.com/android/repository/$archive" + dest "$temporaryDir/$archive" + algorithm 'SHA-256' } task unpackAndroidSdk(type: Sync, dependsOn: downloadAndroidSdk) { @@ -86,38 +73,16 @@ task copyAndroidJar(type: Sync, dependsOn: installAndroidPlatforms) { into temporaryDir } -task downloadSampleCup { - outputs.file 'data/sample.cup' - doLast { - download { - src 'http://www.cc.gatech.edu/gvu/people/faculty/hudson/java_cup/classes.v0.9e/java_cup/parser.cup' - dest outputs.files.singleFile - overwrite true - onlyIfModified true - useETag true - } - verifyChecksum { - src outputs.files.singleFile - checksum '76b549e7c6e802b811a374248175ecf4' - } - } +task downloadSampleCup(type: VerifiedDownload) { + src 'http://www.cc.gatech.edu/gvu/people/faculty/hudson/java_cup/classes.v0.9e/java_cup/parser.cup' + dest 'data/sample.cup' + checksum '76b549e7c6e802b811a374248175ecf4' } -task downloadSampleLex { - outputs.file 'data/sample.lex' - doLast { - download { - src 'https://www.cs.princeton.edu/~appel/modern/java/JLex/current/sample.lex' - dest outputs.files.singleFile - overwrite true - onlyIfModified true - useETag true - } - verifyChecksum { - src outputs.files.singleFile - checksum 'ae887758b2657981d023a72a165da830' - } - } +task downloadSampleLex(type: VerifiedDownload) { + src 'https://www.cs.princeton.edu/~appel/modern/java/JLex/current/sample.lex' + dest 'data/sample.lex' + checksum 'ae887758b2657981d023a72a165da830' } clean.dependsOn cleanCopyDxJar