1*2e149f73SXin Li import com.android.ndkports.AdHocPortTask
2*2e149f73SXin Li import com.android.ndkports.AndroidExecutableTestTask
3*2e149f73SXin Li import com.android.ndkports.CMakeCompatibleVersion
4*2e149f73SXin Li
5*2e149f73SXin Li val portVersion = "3.2.1"
6*2e149f73SXin Li
7*2e149f73SXin Li group = "com.android.ndk.thirdparty"
8*2e149f73SXin Li version = "$portVersion${rootProject.extra.get("snapshotSuffix")}"
9*2e149f73SXin Li
<lambda>null10*2e149f73SXin Li plugins {
11*2e149f73SXin Li id("maven-publish")
12*2e149f73SXin Li id("com.android.ndkports.NdkPorts")
13*2e149f73SXin Li distribution
14*2e149f73SXin Li }
15*2e149f73SXin Li
<lambda>null16*2e149f73SXin Li ndkPorts {
17*2e149f73SXin Li ndkPath.set(File(project.findProperty("ndkPath") as String))
18*2e149f73SXin Li source.set(project.file("src.tar.gz"))
19*2e149f73SXin Li minSdkVersion.set(21)
20*2e149f73SXin Li }
21*2e149f73SXin Li
<lambda>null22*2e149f73SXin Li val buildTask = tasks.register<AdHocPortTask>("buildPort") {
23*2e149f73SXin Li builder {
24*2e149f73SXin Li run {
25*2e149f73SXin Li args(
26*2e149f73SXin Li sourceDirectory.resolve("Configure").absolutePath,
27*2e149f73SXin Li "android-${toolchain.abi.archName}",
28*2e149f73SXin Li "-D__ANDROID_API__=${toolchain.api}",
29*2e149f73SXin Li "--prefix=${installDirectory.absolutePath}",
30*2e149f73SXin Li "--openssldir=${installDirectory.absolutePath}",
31*2e149f73SXin Li "no-sctp",
32*2e149f73SXin Li "shared"
33*2e149f73SXin Li )
34*2e149f73SXin Li
35*2e149f73SXin Li env("ANDROID_NDK", toolchain.ndk.path.absolutePath)
36*2e149f73SXin Li env("PATH", "${toolchain.binDir}:${System.getenv("PATH")}")
37*2e149f73SXin Li }
38*2e149f73SXin Li
39*2e149f73SXin Li run {
40*2e149f73SXin Li args("make", "-j$ncpus", "SHLIB_EXT=.so")
41*2e149f73SXin Li
42*2e149f73SXin Li env("ANDROID_NDK", toolchain.ndk.path.absolutePath)
43*2e149f73SXin Li env("PATH", "${toolchain.binDir}:${System.getenv("PATH")}")
44*2e149f73SXin Li }
45*2e149f73SXin Li
46*2e149f73SXin Li run {
47*2e149f73SXin Li args("make", "install_sw", "SHLIB_EXT=.so")
48*2e149f73SXin Li
49*2e149f73SXin Li env("ANDROID_NDK", toolchain.ndk.path.absolutePath)
50*2e149f73SXin Li env("PATH", "${toolchain.binDir}:${System.getenv("PATH")}")
51*2e149f73SXin Li }
52*2e149f73SXin Li }
53*2e149f73SXin Li }
54*2e149f73SXin Li
<lambda>null55*2e149f73SXin Li tasks.prefabPackage {
56*2e149f73SXin Li version.set(CMakeCompatibleVersion.parse(portVersion))
57*2e149f73SXin Li
58*2e149f73SXin Li licensePath.set("LICENSE.txt")
59*2e149f73SXin Li
60*2e149f73SXin Li modules {
61*2e149f73SXin Li create("crypto")
62*2e149f73SXin Li create("ssl")
63*2e149f73SXin Li }
64*2e149f73SXin Li }
65*2e149f73SXin Li
<lambda>null66*2e149f73SXin Li tasks.register<AndroidExecutableTestTask>("test") {
67*2e149f73SXin Li val srcDir = tasks.extractSrc.get().outDir.asFile.get()
68*2e149f73SXin Li val testSrc = srcDir.resolve("test/ssl-tests")
69*2e149f73SXin Li val deviceTestRelPath = File("testconf")
70*2e149f73SXin Li
71*2e149f73SXin Li val unsupportedTests = listOf(
72*2e149f73SXin Li // This test is empty and appears to just be broken in 1.1.1k.
73*2e149f73SXin Li "16-certstatus.conf",
74*2e149f73SXin Li // zlib support is not enabled.
75*2e149f73SXin Li "22-compression.conf",
76*2e149f73SXin Li // Android does not support SCTP sockets and this test requires them.
77*2e149f73SXin Li "29-dtls-sctp-label-bug.conf"
78*2e149f73SXin Li )
79*2e149f73SXin Li
80*2e149f73SXin Li push {
81*2e149f73SXin Li val ignoredExtensions = listOf("o", "d")
82*2e149f73SXin Li val buildDirectory = buildTask.get().buildDirectoryFor(abi)
83*2e149f73SXin Li push(
84*2e149f73SXin Li srcDir.resolve("test/ct/log_list.conf"), File("log_list.conf")
85*2e149f73SXin Li )
86*2e149f73SXin Li for (file in buildDirectory.walk()) {
87*2e149f73SXin Li if (!file.isFile) {
88*2e149f73SXin Li continue
89*2e149f73SXin Li }
90*2e149f73SXin Li
91*2e149f73SXin Li if (file.extension in ignoredExtensions) {
92*2e149f73SXin Li continue
93*2e149f73SXin Li }
94*2e149f73SXin Li
95*2e149f73SXin Li push(file, file.relativeTo(buildDirectory))
96*2e149f73SXin Li }
97*2e149f73SXin Li for (file in testSrc.walk()) {
98*2e149f73SXin Li if (file.extension == "conf") {
99*2e149f73SXin Li push(
100*2e149f73SXin Li file, deviceTestRelPath.resolve(file.relativeTo(testSrc))
101*2e149f73SXin Li )
102*2e149f73SXin Li }
103*2e149f73SXin Li }
104*2e149f73SXin Li push(srcDir.resolve("test/certs"), File("certs"))
105*2e149f73SXin Li }
106*2e149f73SXin Li
107*2e149f73SXin Li run {
108*2e149f73SXin Li // https://github.com/openssl/openssl/blob/master/test/README.ssltest.md
109*2e149f73SXin Li val sslTest = deviceDirectory.resolve("test/ssl_test")
110*2e149f73SXin Li val ctlogFile = deviceDirectory.resolve("log_list.conf")
111*2e149f73SXin Li val testCertDir = deviceDirectory.resolve("certs")
112*2e149f73SXin Li for (file in testSrc.walk()) {
113*2e149f73SXin Li val test = deviceDirectory.resolve(deviceTestRelPath)
114*2e149f73SXin Li .resolve(file.relativeTo(testSrc))
115*2e149f73SXin Li if (file.extension == "conf" && file.name !in unsupportedTests) {
116*2e149f73SXin Li shellTest(
117*2e149f73SXin Li file.relativeTo(testSrc).toString(), listOf(
118*2e149f73SXin Li "LD_LIBRARY_PATH=$deviceDirectory",
119*2e149f73SXin Li "CTLOG_FILE=$ctlogFile",
120*2e149f73SXin Li "TEST_CERTS_DIR=$testCertDir",
121*2e149f73SXin Li sslTest.toString(),
122*2e149f73SXin Li test.toString()
123*2e149f73SXin Li )
124*2e149f73SXin Li )
125*2e149f73SXin Li }
126*2e149f73SXin Li }
127*2e149f73SXin Li }
128*2e149f73SXin Li }
129*2e149f73SXin Li
<lambda>null130*2e149f73SXin Li publishing {
131*2e149f73SXin Li publications {
132*2e149f73SXin Li create<MavenPublication>("maven") {
133*2e149f73SXin Li from(components["prefab"])
134*2e149f73SXin Li pom {
135*2e149f73SXin Li name.set("OpenSSL")
136*2e149f73SXin Li description.set("The ndkports AAR for OpenSSL.")
137*2e149f73SXin Li url.set(
138*2e149f73SXin Li "https://android.googlesource.com/platform/tools/ndkports"
139*2e149f73SXin Li )
140*2e149f73SXin Li licenses {
141*2e149f73SXin Li license {
142*2e149f73SXin Li name.set("Dual OpenSSL and SSLeay License")
143*2e149f73SXin Li url.set("https://www.openssl.org/source/license-openssl-ssleay.txt")
144*2e149f73SXin Li distribution.set("repo")
145*2e149f73SXin Li }
146*2e149f73SXin Li }
147*2e149f73SXin Li developers {
148*2e149f73SXin Li developer {
149*2e149f73SXin Li name.set("The Android Open Source Project")
150*2e149f73SXin Li }
151*2e149f73SXin Li }
152*2e149f73SXin Li scm {
153*2e149f73SXin Li url.set("https://android.googlesource.com/platform/tools/ndkports")
154*2e149f73SXin Li connection.set("scm:git:https://android.googlesource.com/platform/tools/ndkports")
155*2e149f73SXin Li }
156*2e149f73SXin Li }
157*2e149f73SXin Li }
158*2e149f73SXin Li }
159*2e149f73SXin Li
160*2e149f73SXin Li repositories {
161*2e149f73SXin Li maven {
162*2e149f73SXin Li url = uri("${project.buildDir}/repository")
163*2e149f73SXin Li }
164*2e149f73SXin Li }
165*2e149f73SXin Li }
166*2e149f73SXin Li
<lambda>null167*2e149f73SXin Li distributions {
168*2e149f73SXin Li main {
169*2e149f73SXin Li contents {
170*2e149f73SXin Li from("${project.buildDir}/repository")
171*2e149f73SXin Li include("**/*.aar")
172*2e149f73SXin Li include("**/*.pom")
173*2e149f73SXin Li }
174*2e149f73SXin Li }
175*2e149f73SXin Li }
176*2e149f73SXin Li
<lambda>null177*2e149f73SXin Li tasks {
178*2e149f73SXin Li distZip {
179*2e149f73SXin Li dependsOn("publish")
180*2e149f73SXin Li destinationDirectory.set(File(rootProject.buildDir, "distributions"))
181*2e149f73SXin Li }
182*2e149f73SXin Li }
183