blob: 52d6414a34ed5f080bc7ff1e35c0146e5e51715b [file] [log] [blame]
import com.android.ndkports.AdHocPortTask
import com.android.ndkports.AndroidExecutableTestTask
import com.android.ndkports.CMakeCompatibleVersion
fun openSslVersionToCMakeVersion(openSslVersion: String): CMakeCompatibleVersion {
val (major, minor, microAndLetter) = openSslVersion.split(".")
val letter = microAndLetter.last()
val micro = microAndLetter.substringBefore(letter)
val tweak = if (letter.isDigit()) {
// 1.1.1 is 1.1.1.0.
0
} else {
// 1.1.1a is 1.1.1.1.
letter.toInt() - 'a'.toInt() + 1
}
return CMakeCompatibleVersion(
major.toInt(), minor.toInt(), micro.toInt(), tweak
)
}
val portVersion = "1.1.1p"
val prefabVersion = openSslVersionToCMakeVersion(portVersion)
group = "com.android.ndk.thirdparty"
version = "$portVersion${rootProject.extra.get("snapshotSuffix")}"
plugins {
id("maven-publish")
id("com.android.ndkports.NdkPorts")
}
ndkPorts {
ndkPath.set(File(project.findProperty("ndkPath") as String))
source.set(project.file("src.tar.gz"))
minSdkVersion.set(16)
}
val buildTask = tasks.register<AdHocPortTask>("buildPort") {
builder {
run {
args(
sourceDirectory.resolve("Configure").absolutePath,
"android-${toolchain.abi.archName}",
"-D__ANDROID_API__=${toolchain.api}",
"--prefix=${installDirectory.absolutePath}",
"--openssldir=${installDirectory.absolutePath}",
"no-sctp",
"shared"
)
env("ANDROID_NDK", toolchain.ndk.path.absolutePath)
env("PATH", "${toolchain.binDir}:${System.getenv("PATH")}")
}
run {
args("make", "-j$ncpus", "SHLIB_EXT=.so")
env("ANDROID_NDK", toolchain.ndk.path.absolutePath)
env("PATH", "${toolchain.binDir}:${System.getenv("PATH")}")
}
run {
args("make", "install_sw", "SHLIB_EXT=.so")
env("ANDROID_NDK", toolchain.ndk.path.absolutePath)
env("PATH", "${toolchain.binDir}:${System.getenv("PATH")}")
}
}
}
tasks.prefabPackage {
version.set(prefabVersion)
modules {
create("crypto")
create("ssl")
}
}
tasks.register<AndroidExecutableTestTask>("test") {
val srcDir = tasks.extractSrc.get().outDir.asFile.get()
val testSrc = srcDir.resolve("test/ssl-tests")
val deviceTestRelPath = File("testconf")
val unsupportedTests = listOf(
// This test is empty and appears to just be broken in 1.1.1k.
"16-certstatus.conf",
// zlib support is not enabled.
"22-compression.conf",
// Android does not support SCTP sockets and this test requires them.
"29-dtls-sctp-label-bug.conf"
)
push {
val ignoredExtensions = listOf("o", "d")
val buildDirectory = buildTask.get().buildDirectoryFor(abi)
push(
srcDir.resolve("test/ct/log_list.conf"), File("log_list.conf")
)
for (file in buildDirectory.walk()) {
if (!file.isFile) {
continue
}
if (file.extension in ignoredExtensions) {
continue
}
push(file, file.relativeTo(buildDirectory))
}
for (file in testSrc.walk()) {
if (file.extension == "conf") {
push(
file, deviceTestRelPath.resolve(file.relativeTo(testSrc))
)
}
}
push(srcDir.resolve("test/certs"), File("certs"))
}
run {
// https://github.com/openssl/openssl/blob/master/test/README.ssltest.md
val sslTest = deviceDirectory.resolve("test/ssl_test")
val ctlogFile = deviceDirectory.resolve("log_list.conf")
val testCertDir = deviceDirectory.resolve("certs")
for (file in testSrc.walk()) {
val test = deviceDirectory.resolve(deviceTestRelPath)
.resolve(file.relativeTo(testSrc))
if (file.extension == "conf" && file.name !in unsupportedTests) {
shellTest(
file.relativeTo(testSrc).toString(), listOf(
"LD_LIBRARY_PATH=$deviceDirectory",
"CTLOG_FILE=$ctlogFile",
"TEST_CERTS_DIR=$testCertDir",
sslTest.toString(),
test.toString()
)
)
}
}
}
}
publishing {
publications {
create<MavenPublication>("maven") {
from(components["prefab"])
pom {
name.set("OpenSSL")
description.set("The ndkports AAR for OpenSSL.")
url.set(
"https://android.googlesource.com/platform/tools/ndkports"
)
licenses {
license {
name.set("Dual OpenSSL and SSLeay License")
url.set("https://www.openssl.org/source/license-openssl-ssleay.txt")
distribution.set("repo")
}
}
developers {
developer {
name.set("The Android Open Source Project")
}
}
scm {
url.set("https://android.googlesource.com/platform/tools/ndkports")
connection.set("scm:git:https://android.googlesource.com/platform/tools/ndkports")
}
}
}
}
repositories {
maven {
url = uri("${rootProject.buildDir}/repository")
}
}
}