From 13dcb9388c458f06c6e1f0e55f49d8ee3b1eee64 Mon Sep 17 00:00:00 2001 From: Anton Lakotka Date: Tue, 11 Oct 2022 10:34:19 +0200 Subject: [PATCH] [Gradle] Support Configuration Cache for FatFramework task ^KT-54362 ^KT-54339 Verification Pending --- .../native/tasks/AdvancedCocoapodsTasks.kt | 2 +- .../targets/native/tasks/FatFrameworkTask.kt | 26 +++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt index 79836d26e32..f0cc9c02f6c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/AdvancedCocoapodsTasks.kt @@ -90,7 +90,7 @@ open class PodInstallTask : CocoapodsTask() { val podInstallCommand = listOf("pod", "install") runCommand(podInstallCommand, - project.logger, + logger, errorHandler = { returnCode, output, _ -> CocoapodsErrorHandlingUtil.handlePodInstallError( podInstallCommand.joinToString(" "), diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt index 9e00332213a..a0b29375941 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/FatFrameworkTask.kt @@ -7,8 +7,11 @@ package org.jetbrains.kotlin.gradle.tasks import org.gradle.api.DefaultTask +import org.gradle.api.file.FileSystemOperations import org.gradle.api.file.FileTree +import org.gradle.api.model.ObjectFactory import org.gradle.api.tasks.* +import org.gradle.process.ExecOperations import org.jetbrains.kotlin.gradle.plugin.cocoapods.asValidFrameworkName import org.jetbrains.kotlin.gradle.plugin.mpp.Framework import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget @@ -23,6 +26,7 @@ import org.jetbrains.kotlin.konan.util.visibleName import java.io.ByteArrayOutputStream import java.io.File import java.nio.file.Files +import javax.inject.Inject class FrameworkDsymLayout(val rootDir: File) { init { @@ -110,7 +114,13 @@ class FrameworkDescriptor( /** * Task running lipo to create a fat framework from several simple frameworks. It also merges headers, plists and module files. */ -open class FatFrameworkTask : DefaultTask() { +open class FatFrameworkTask +@Inject +internal constructor( + private val execOperations: ExecOperations, + private val fileOperations: FileSystemOperations, + private val objectFactory: ObjectFactory, +) : DefaultTask() { init { onlyIf { HostManager.hostIsMac } } @@ -150,7 +160,7 @@ open class FatFrameworkTask : DefaultTask() { @get:InputFiles @get:SkipWhenEmpty protected val inputFrameworkFiles: Iterable - get() = frameworks.map { project.fileTree(it.file) } + get() = frameworks.map { objectFactory.fileTree().from(it.file) } @get:PathSensitive(PathSensitivity.ABSOLUTE) @get:IgnoreEmptyDirectories @@ -160,7 +170,7 @@ open class FatFrameworkTask : DefaultTask() { framework.files.dSYM.takeIf { it.exists() }?.rootDir?.let { - project.fileTree(it) + objectFactory.fileTree().from(it) } } @@ -266,7 +276,7 @@ open class FatFrameworkTask : DefaultTask() { val commands = mutableListOf() var ignoreExitValue = false - fun run() = project.exec { exec -> + fun run() = execOperations.exec { exec -> exec.executable = "/usr/libexec/PlistBuddy" commands.forEach { exec.args("-c", it) @@ -285,7 +295,7 @@ open class FatFrameworkTask : DefaultTask() { } private fun runLipo(inputFiles: Collection, outputFile: File) = - project.exec { exec -> + execOperations.exec { exec -> exec.executable = "/usr/bin/lipo" exec.args = listOf( "-create", @@ -295,7 +305,7 @@ open class FatFrameworkTask : DefaultTask() { } private fun runInstallNameTool(file: File, frameworkName: String) { - project.exec { exec -> + execOperations.exec { exec -> exec.executable = "install_name_tool" exec.args = listOf( "-id", @@ -362,7 +372,7 @@ open class FatFrameworkTask : DefaultTask() { // Use Info.plist of one of the frameworks to get basic data. val baseInfo = frameworks.first().files.infoPlist - project.copy { + fileOperations.copy { it.from(baseInfo) it.into(outputFile.parentFile) } @@ -413,7 +423,7 @@ open class FatFrameworkTask : DefaultTask() { // Copy dSYM's Info.plist. // It doesn't contain target-specific info or framework names except the bundle id so there is no need to edit it. // TODO: handle bundle id. - project.copy { + fileOperations.copy { it.from(dsymInputs.values.first().infoPlist) it.into(fatDsym.infoPlist.parentFile) }