For XCFramework with default name register 'nameless' task 'assembleXCFramework`

#KT-42667
This commit is contained in:
Konstantin Tskhovrebov
2021-06-29 13:40:14 +03:00
committed by Space
parent 08c505f9ba
commit a54e758189
2 changed files with 29 additions and 9 deletions
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.native
import org.jetbrains.kotlin.gradle.BaseGradleIT
import org.jetbrains.kotlin.gradle.GradleVersionRequired
import org.jetbrains.kotlin.gradle.transformProjectWithPluginsDsl
import org.jetbrains.kotlin.gradle.util.AGPVersion
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.test.util.KtTestUtil
@@ -62,15 +63,15 @@ class XCFrameworkIT : BaseGradleIT() {
@Test
fun `assemble other XCFramework for ios targets`() {
with(Project("appleXCFramework")) {
build("assembleSharedXCFramework") {
build("assembleXCFramework") {
assertSuccessful()
assertTasksExecuted(":shared:linkReleaseFrameworkIosArm64")
assertTasksExecuted(":shared:linkReleaseFrameworkIosX64")
assertTasksExecuted(":shared:assembleSharedReleaseXCFramework")
assertTasksExecuted(":shared:assembleReleaseXCFramework")
assertFileExists("/shared/build/XCFrameworks/release/shared.xcframework")
assertTasksExecuted(":shared:linkDebugFrameworkIosArm64")
assertTasksExecuted(":shared:linkDebugFrameworkIosX64")
assertTasksExecuted(":shared:assembleSharedDebugXCFramework")
assertTasksExecuted(":shared:assembleDebugXCFramework")
assertFileExists("/shared/build/XCFrameworks/debug/shared.xcframework")
}
}
@@ -82,11 +83,27 @@ class XCFrameworkIT : BaseGradleIT() {
build("tasks") {
assertSuccessful()
assertTasksNotRegistered(
":shared:assembleSharedDebugXCFramework",
":shared:assembleSharedReleaseXCFramework",
":shared:assembleSharedXCFramework"
":shared:assembleDebugXCFramework",
":shared:assembleReleaseXCFramework",
":shared:assembleXCFramework"
)
}
}
}
@Test
fun `check configuration error if two XCFrameworks were registered with same name`() {
with(transformProjectWithPluginsDsl("appleXCFramework")) {
with(gradleBuildScript("shared")) {
var text = readText()
text = text.replace("XCFramework(\"sdk\")", "XCFramework()")
writeText(text)
}
build("tasks") {
assertFailed()
assertContains("Cannot add task 'assembleReleaseXCFramework' as a task with that name already exists.")
}
}
}
}
@@ -41,6 +41,7 @@ internal class XCFrameworkTaskHolder(
) {
companion object {
fun create(project: Project, xcFrameworkName: String, buildType: NativeBuildType): XCFrameworkTaskHolder {
require(xcFrameworkName.isNotBlank())
val parentTask = project.parentAssembleXCFrameworkTask(xcFrameworkName)
val task = project.registerAssembleXCFrameworkTask(xcFrameworkName, buildType)
@@ -89,8 +90,11 @@ class XCFrameworkConfig {
fun Project.XCFramework(xcFrameworkName: String = name) = XCFrameworkConfig(this, xcFrameworkName)
private fun Project.eraseIfDefault(xcFrameworkName: String) =
if (name == xcFrameworkName) "" else xcFrameworkName
private fun Project.parentAssembleXCFrameworkTask(xcFrameworkName: String): TaskProvider<Task> =
locateOrRegisterTask(lowerCamelCaseName("assemble", xcFrameworkName, "XCFramework")) {
locateOrRegisterTask(lowerCamelCaseName("assemble", eraseIfDefault(xcFrameworkName), "XCFramework")) {
it.group = "build"
it.description = "Assemble all types of registered '$xcFrameworkName' XCFramework"
}
@@ -99,10 +103,9 @@ private fun Project.registerAssembleXCFrameworkTask(
xcFrameworkName: String,
buildType: NativeBuildType
): TaskProvider<XCFrameworkTask> {
require(xcFrameworkName.isNotBlank())
val taskName = lowerCamelCaseName(
"assemble",
xcFrameworkName,
eraseIfDefault(xcFrameworkName),
buildType.getName(),
"XCFramework"
)