WALA/com.ibm.wala.dalvik.test/build.gradle
Ben Liblit 47539da731 Unpack Android SDK and install extra components as a single task
Previously we unpacked in one task, then installed two extra
components in two dependent tasks.  However, installing extra
components modifies some files in place, effectively making those
files both inputs and outputs.  That creates race conditions, and
probably interferes with task output caching.  Better, then, to treat
the unpack and extra installations all as a single task whose output
is the complete Android SDK tree with all required components
installed.
2018-04-18 11:29:29 -05:00

161 lines
4.1 KiB
Groovy

sourceSets.test {
java.srcDirs = ['source']
resources.srcDirs = [
'data',
project(':com.ibm.wala.core.testdata').compileTestJava,
]
}
def osName = System.getProperty('os.name')
ext.isWindows = osName.startsWith('Windows ')
task downloadDroidBench(type: VerifiedDownload) {
src 'https://codeload.github.com/secure-software-engineering/DroidBench/zip/DroidBench_2.0'
dest "$temporaryDir/DroidBench_2.0.zip"
checksum '16726a48329835140e14f18470a1b4a3'
}
task unpackDroidBench(type: Sync, dependsOn: downloadDroidBench) {
from(zipTree(files(downloadDroidBench).singleFile)) {
eachFile {
relativePath new RelativePath(!directory, relativePath.segments[1..-1] as String[])
}
}
into '/tmp/DroidBench'
includeEmptyDirs false
}
task downloadAndroidSdk(type: VerifiedDownload) {
def sdkOs
switch (osName) {
case ~/Linux/:
sdkOs = 'linux'
checksum '444e22ce8ca0f67353bda4b85175ed3731cae3ffa695ca18119cbacef1c1bea0'
break
case ~/Mac OS X/:
sdkOs = 'darwin'
checksum '4a81754a760fce88cba74d69c364b05b31c53d57b26f9f82355c61d5fe4b9df9'
break
case ~/Windows.*/:
sdkOs = 'windows'
checksum '7f6037d3a7d6789b4fdc06ee7af041e071e9860c51f66f7a4eb5913df9871fd2'
break
}
def archive = "sdk-tools-$sdkOs-3859397.zip"
src "https://dl.google.com/android/repository/$archive"
dest "$temporaryDir/$archive"
algorithm 'SHA-256'
}
task installAndroidSdk(type: Sync, dependsOn: downloadAndroidSdk) {
from zipTree(files(downloadAndroidSdk).singleFile)
into temporaryDir
def buildToolsVersion = '26.0.2'
ext {
components = [
'build-tools': buildToolsVersion,
'platforms': "android-${buildToolsVersion.tokenize('.')[0]}"
]
}
doLast {
exec {
def shell, shellFlags, yes, semicolon, discard
if (project.isWindows) {
shell = 'PowerShell'
shellFlags = '-Command'
yes = 'echo y'
semicolon = '`;'
discard = '$null'
} else {
shell = 'sh'
shellFlags = '-ceu'
yes = 'yes 2>/dev/null'
semicolon = /\;/
discard = '/dev/null'
}
def componentArgs = components.collect { "$it.key$semicolon$it.value" }.join ' '
commandLine shell, shellFlags, "$yes | $temporaryDir/tools/bin/sdkmanager $componentArgs >$discard"
}
}
outputs.cacheIf { true }
}
task copyDxJar(type: Sync, dependsOn: installAndroidSdk) {
from "${files(installAndroidSdk).singleFile}/build-tools/${installAndroidSdk.components['build-tools']}/lib/dx.jar"
into 'lib'
}
clean.dependsOn cleanCopyDxJar
compileTestJava.dependsOn copyDxJar
afterEclipseBuildshipImport.dependsOn copyDxJar
task copyAndroidJar(type: Sync, dependsOn: installAndroidSdk) {
from "${files(installAndroidSdk).singleFile}/platforms/${installAndroidSdk.components['platforms']}/android.jar"
into temporaryDir
}
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'
}
clean.dependsOn cleanDownloadSampleCup
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 cleanDownloadSampleLex
dependencies {
testCompile(
'junit:junit:4.11',
'org.osgi:org.osgi.core:4.2.0',
files("${files(copyDxJar).singleFile}/dx.jar"),
project(':com.ibm.wala.core'),
project(':com.ibm.wala.dalvik'),
project(':com.ibm.wala.shrike'),
project(':com.ibm.wala.util'),
project(configuration: 'testArchives', path: ':com.ibm.wala.core.tests'),
)
testRuntime files("${files(copyAndroidJar).singleFile}/android.jar")
}
processTestResources {
from copyAndroidJar
from downloadSampleCup
from downloadSampleLex
def testdata = project(':com.ibm.wala.core.testdata')
from testdata.collectJLex
from testdata.collectTestDataA
from testdata.downloadJavaCup
}
if (isWindows)
test.exclude '**/droidbench/**'
else
processTestResources.dependsOn unpackDroidBench
test {
maxHeapSize = '800M'
}
task cleanTest(type: Delete) {
delete(
'parser.java',
'report',
'sym.java',
)
}
clean.dependsOn cleanTest