[Gradle] Add defaultDestinationDir to FatFrameworkTask
To prevent cycle when updating destinationDirProperty
This commit is contained in:
committed by
Space Team
parent
8b335ea051
commit
6eeb459076
+8
-5
@@ -125,7 +125,7 @@ private fun Project.registerAssembleAppleFrameworkTask(framework: Framework): Ta
|
||||
needFatFramework -> locateOrRegisterTask<FatFrameworkTask>(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<File> =
|
||||
layout.buildDirectory.dir("xcode-frameworks").map { it.asFile.resolve(frameworkSearchDir) }
|
||||
|
||||
/**
|
||||
* macOS frameworks contain symlinks which are resolved/removed by the Gradle [Copy] task.
|
||||
|
||||
+1
-6
@@ -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()))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-5
@@ -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<Directory> = 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.
|
||||
|
||||
+4
-7
@@ -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<T> : ValueSource<T, AdhocValueSource.Par
|
||||
return parameters.producingLambda.get().invoke() as T
|
||||
}
|
||||
}
|
||||
|
||||
internal fun Provider<Directory>.dir(path: String): Provider<Directory> = map { it.dir(path) }
|
||||
Reference in New Issue
Block a user