Move out codesign to utils to be used not only for framework tests

This commit is contained in:
Pavel Punegov
2018-04-23 19:45:53 +03:00
committed by Pavel Punegov
parent f517d5b4a3
commit b99cc25e70
4 changed files with 49 additions and 19 deletions
+3
View File
@@ -2612,6 +2612,9 @@ if (isMac()) {
args "-lobjc", '-fobjc-arc' args "-lobjc", '-fobjc-arc'
args '-fPIC', '-shared', '-o', "$buildDir/libobjcsmoke.dylib" args '-fPIC', '-shared', '-o', "$buildDir/libobjcsmoke.dylib"
} }
if (project.testTarget == 'ios_x64') {
UtilsKt.codesign(project, "$buildDir/libobjcsmoke.dylib")
}
} }
} }
} }
@@ -22,6 +22,7 @@ import org.gradle.api.Project
import org.gradle.process.ExecResult import org.gradle.process.ExecResult
import org.gradle.process.ExecSpec import org.gradle.process.ExecSpec
import org.gradle.util.ConfigureUtil import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.konan.target.AppleConfigurables
import org.jetbrains.kotlin.konan.target.KonanTarget import org.jetbrains.kotlin.konan.target.KonanTarget
import org.jetbrains.kotlin.konan.target.PlatformManager import org.jetbrains.kotlin.konan.target.PlatformManager
@@ -123,6 +124,12 @@ fun runProcess(executor: (Action<in ExecSpec>) -> ExecResult?,
fun runProcess(executor: (Action<in ExecSpec>) -> ExecResult?, fun runProcess(executor: (Action<in ExecSpec>) -> ExecResult?,
executable: String, vararg args: String) = runProcess(executor, executable, args.toList()) executable: String, vararg args: String) = runProcess(executor, executable, args.toList())
/**
* Returns Project's process executor
* @see Project.exec
*/
fun localExecutor(project: Project) = { a: Action<in ExecSpec> -> project.exec(a) }
/** /**
* Executes a given action with iPhone Simulator. * Executes a given action with iPhone Simulator.
* *
@@ -144,11 +151,22 @@ private fun simulator(project: Project) : ExecutorService = object : ExecutorSer
out.toString("UTF-8").trim() out.toString("UTF-8").trim()
} }
private val iosDevice = project.findProperty("iosDevice")?.toString() ?: "iPhone 8" private val list by lazy {
val out = ByteArrayOutputStream()
val result = project.exec {
it.commandLine(simctl, "list")
it.standardOutput = out
}
result.assertNormalExitValue()
out.toString("UTF-8").trim()
}
private val iosDevice = project.findProperty("iosDevice")?.toString() ?: "iPhone 6"
override fun execute(action: Action<in ExecSpec>): ExecResult? = project.exec { execSpec -> override fun execute(action: Action<in ExecSpec>): ExecResult? = project.exec { execSpec ->
println(list)
action.execute(execSpec) action.execute(execSpec)
with(execSpec) { commandLine = listOf(simctl, "spawn", iosDevice, executable) + args } with(execSpec) { commandLine = listOf("/usr/bin/xcrun", "simctl", "spawn", "iPhone 6", executable) + args }
} }
} }
@@ -40,15 +40,7 @@ open class FrameworkTest : DefaultTask() {
fun run() { fun run() {
val frameworkPath = "$testOutput/$frameworkName/${project.testTarget().name}" val frameworkPath = "$testOutput/$frameworkName/${project.testTarget().name}"
// Sign framework codesign(project, Paths.get(frameworkPath, "$frameworkName.framework").toString())
val (stdOut, stdErr, exitCode) = runProcess(executor = localExecutor, executable = "/usr/bin/codesign",
args = listOf("--verbose", "-s", "-", Paths.get(frameworkPath, "$frameworkName.framework").toString()))
check(exitCode == 0, { """
|Codesign failed with exitCode: $exitCode
|stdout: $stdOut
|stderr: $stdErr
""".trimMargin()
})
// create a test provider and get main entry point // create a test provider and get main entry point
val provider = Paths.get(testOutput, frameworkName, "provider.swift") val provider = Paths.get(testOutput, frameworkName, "provider.swift")
@@ -88,13 +80,6 @@ open class FrameworkTest : DefaultTask() {
check(exitCode == 0, { "Execution failed with exit code: $exitCode "}) check(exitCode == 0, { "Execution failed with exit code: $exitCode "})
} }
private val localExecutor = { a: Action<in ExecSpec> -> project.exec(a) }
private fun Project.platformManager() = rootProject.findProperty("platformManager") as PlatformManager
private fun Project.testTarget() = platformManager()
.targetManager(project.findProperty("testTarget") as String?).target
private fun swiftc(sources: List<String>, options: List<String>, output: Path) { private fun swiftc(sources: List<String>, options: List<String>, output: Path) {
val target = project.testTarget() val target = project.testTarget()
val platform = project.platformManager().platform(target) val platform = project.platformManager().platform(target)
@@ -112,7 +97,7 @@ open class FrameworkTest : DefaultTask() {
val args = listOf("-sdk", configs.absoluteTargetSysRoot, "-target", swiftTarget) + val args = listOf("-sdk", configs.absoluteTargetSysRoot, "-target", swiftTarget) +
options + "-o" + output.toString() + sources options + "-o" + output.toString() + sources
val (stdOut, stdErr, exitCode) = runProcess(executor = localExecutor, executable = compiler, args = args) val (stdOut, stdErr, exitCode) = runProcess(executor = localExecutor(project), executable = compiler, args = args)
println(""" println("""
|$compiler finished with exit code: $exitCode |$compiler finished with exit code: $exitCode
@@ -0,0 +1,24 @@
package org.jetbrains.kotlin
import org.gradle.api.Project
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.PlatformManager
fun Project.platformManager() = rootProject.findProperty("platformManager") as PlatformManager
fun Project.testTarget() = platformManager().targetManager(project.findProperty("testTarget") as String?).target
/**
* Ad-hoc signing of the specified path
*/
fun codesign(project: Project, path: String) {
check(HostManager.hostIsMac, { "Apple specific code signing" } )
val (stdOut, stdErr, exitCode) = runProcess(executor = localExecutor(project), executable = "/usr/bin/codesign",
args = listOf("--verbose", "-s", "-", path))
check(exitCode == 0, { """
|Codesign failed with exitCode: $exitCode
|stdout: $stdOut
|stderr: $stdErr
""".trimMargin()
})
}