diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt index ff4dc3bb7e5..74689179bef 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/apple/AppleXcodeTasks.kt @@ -125,7 +125,7 @@ private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): Ta needFatFramework -> locateOrRegisterTask(frameworkTaskName) { task -> task.description = "Packs $frameworkBuildType fat framework for Xcode" task.baseName = framework.baseName - task.destinationDirProperty.convention(appleFrameworkDir(envFrameworkSearchDir)) + task.destinationDirProperty.fileProvider(appleFrameworkDir(envFrameworkSearchDir)) task.isEnabled = frameworkBuildType == envBuildType }.also { it.configure { task -> task.from(framework) } @@ -136,7 +136,7 @@ private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): Ta task.sourceFramework.fileProvider(framework.linkTaskProvider.flatMap { it.outputFile }) task.sourceDsym.fileProvider(dsymFile(task.sourceFramework.mapToFile())) task.dependsOn(framework.linkTaskProvider) - task.destinationDirectory.set(appleFrameworkDir(envFrameworkSearchDir)) + task.destinationDirectory.fileProvider(appleFrameworkDir(envFrameworkSearchDir)) } } } @@ -194,7 +194,7 @@ internal fun Project.registerEmbedAndSignAppleFrameworkTask(framework: Framework embedAndSignTask.configure { task -> val frameworkFile = framework.outputFile task.dependsOn(assembleTask) - task.sourceFramework.set(File(appleFrameworkDir(envFrameworkSearchDir), frameworkFile.name)) + task.sourceFramework.fileProvider(appleFrameworkDir(envFrameworkSearchDir).map { it.resolve(frameworkFile.name) }) task.destinationDirectory.set(envEmbeddedFrameworksDir) if (envSign != null) { task.doLast { @@ -216,8 +216,11 @@ private val Framework.namePrefix: String outputKind.taskNameClassifier ) -private fun Project.appleFrameworkDir(frameworkSearchDir: File) = - buildDir.resolve("xcode-frameworks").resolve(frameworkSearchDir) +/** + * If [frameworkSearchDir] is absolute use it, otherwise make it relative to buildDir/xcode-frameworks + */ +private fun Project.appleFrameworkDir(frameworkSearchDir: File): Provider = + layout.buildDirectory.dir("xcode-frameworks").map { it.asFile.resolve(frameworkSearchDir) } /** * macOS frameworks contain symlinks which are resolved/removed by the Gradle [Copy] task. diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/configureBinaryFrameworks.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/configureBinaryFrameworks.kt index bb76169d2dd..153d8f0260b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/configureBinaryFrameworks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/configureBinaryFrameworks.kt @@ -9,20 +9,15 @@ import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.provider.Provider import org.gradle.api.tasks.TaskProvider -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.* -import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle import org.jetbrains.kotlin.gradle.plugin.internal.artifactTypeAttribute -import org.jetbrains.kotlin.gradle.plugin.launchInStage import org.jetbrains.kotlin.gradle.plugin.mpp.Framework import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType import org.jetbrains.kotlin.gradle.tasks.FatFrameworkTask import org.jetbrains.kotlin.gradle.tasks.KotlinNativeLink import org.jetbrains.kotlin.gradle.utils.* -import org.jetbrains.kotlin.gradle.utils.copyAttributes -import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import java.io.File @@ -112,7 +107,7 @@ private fun Project.createFatFramework(groupDescription: FrameworkGroupDescripti } else { tasks.register(fatFrameworkTaskName, FatFrameworkTask::class.java) { it.baseName = groupDescription.baseName - it.destinationDirProperty.set(it.destinationDirProperty.dir(groupDescription.buildType.name.toLowerCaseAsciiOnly())) + it.destinationDirProperty.set(it.defaultDestinationDir.dir(groupDescription.buildType.name.toLowerCaseAsciiOnly())) } } 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 c9b92772a5c..242a5cec862 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,11 +7,9 @@ package org.jetbrains.kotlin.gradle.tasks import org.gradle.api.DefaultTask -import org.gradle.api.file.DirectoryProperty -import org.gradle.api.file.FileSystemOperations -import org.gradle.api.file.FileTree -import org.gradle.api.file.ProjectLayout +import org.gradle.api.file.* import org.gradle.api.model.ObjectFactory +import org.gradle.api.provider.Provider import org.gradle.api.tasks.* import org.gradle.process.ExecOperations import org.gradle.work.DisableCachingByDefault @@ -148,10 +146,13 @@ internal constructor( @Input var baseName: String = project.name + @get:Internal + internal val defaultDestinationDir: Provider = projectLayout.buildDirectory.dir("fat-framework") + @OutputDirectory val destinationDirProperty: DirectoryProperty = objectFactory .directoryProperty() - .convention(projectLayout.buildDirectory.dir("fat-framework")) + .convention(defaultDestinationDir) /** * A parent directory for the fat framework. diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt index 50d642a04d2..dd9da0c59c9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt @@ -8,16 +8,11 @@ package org.jetbrains.kotlin.gradle.utils import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.file.ConfigurableFileCollection +import org.gradle.api.file.Directory import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty import org.gradle.api.model.ObjectFactory -import org.gradle.api.provider.ListProperty -import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider -import org.gradle.api.provider.ProviderFactory -import org.gradle.api.provider.SetProperty -import org.gradle.api.provider.ValueSource -import org.gradle.api.provider.ValueSourceParameters +import org.gradle.api.provider.* import java.io.File import kotlin.reflect.KProperty @@ -179,3 +174,5 @@ private abstract class AdhocValueSource : ValueSource.dir(path: String): Provider = map { it.dir(path) } \ No newline at end of file