diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index b3faa8cb111..f629b6ff80f 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -2612,6 +2612,9 @@ if (isMac()) { args "-lobjc", '-fobjc-arc' args '-fPIC', '-shared', '-o', "$buildDir/libobjcsmoke.dylib" } + if (project.testTarget == 'ios_x64') { + UtilsKt.codesign(project, "$buildDir/libobjcsmoke.dylib") + } } } } diff --git a/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/ExecutorService.kt b/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/ExecutorService.kt index 4b437d202ff..75aef82ae06 100644 --- a/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/ExecutorService.kt +++ b/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/ExecutorService.kt @@ -22,6 +22,7 @@ import org.gradle.api.Project import org.gradle.process.ExecResult import org.gradle.process.ExecSpec 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.PlatformManager @@ -123,6 +124,12 @@ fun runProcess(executor: (Action) -> ExecResult?, fun runProcess(executor: (Action) -> ExecResult?, executable: String, vararg args: String) = runProcess(executor, executable, args.toList()) +/** + * Returns Project's process executor + * @see Project.exec + */ +fun localExecutor(project: Project) = { a: Action -> project.exec(a) } + /** * Executes a given action with iPhone Simulator. * @@ -144,11 +151,22 @@ private fun simulator(project: Project) : ExecutorService = object : ExecutorSer 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): ExecResult? = project.exec { execSpec -> + println(list) 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 } } } diff --git a/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt b/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt index d463cbde195..938faa75801 100644 --- a/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt +++ b/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/FrameworkTest.kt @@ -40,15 +40,7 @@ open class FrameworkTest : DefaultTask() { fun run() { val frameworkPath = "$testOutput/$frameworkName/${project.testTarget().name}" - // Sign framework - 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() - }) + codesign(project, Paths.get(frameworkPath, "$frameworkName.framework").toString()) // create a test provider and get main entry point 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 "}) } - private val localExecutor = { a: Action -> 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, options: List, output: Path) { val target = project.testTarget() val platform = project.platformManager().platform(target) @@ -112,7 +97,7 @@ open class FrameworkTest : DefaultTask() { val args = listOf("-sdk", configs.absoluteTargetSysRoot, "-target", swiftTarget) + 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(""" |$compiler finished with exit code: $exitCode diff --git a/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/Utils.kt b/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/Utils.kt new file mode 100644 index 00000000000..7274106a7d6 --- /dev/null +++ b/buildSrc/plugins/src/main/kotlin/org/jetbrains/kotlin/Utils.kt @@ -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() + }) +} \ No newline at end of file