Revert "Revert "CocoaPods: Skip synthetic task on non-mac hosts""
This reverts commit 6040491373.
This commit is contained in:
committed by
Ilya Matveev
parent
fd9bfe44f1
commit
920f1184bd
+24
-1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Compan
|
||||
import org.jetbrains.kotlin.gradle.plugin.cocoapods.KotlinCocoapodsPlugin.Companion.POD_SETUP_BUILD_TASK_NAME
|
||||
import org.jetbrains.kotlin.gradle.util.modify
|
||||
import org.jetbrains.kotlin.konan.target.HostManager
|
||||
import org.junit.Assume.assumeFalse
|
||||
import org.junit.Assume.assumeTrue
|
||||
import org.junit.Test
|
||||
import java.io.File
|
||||
@@ -168,6 +169,28 @@ class CocoaPodsIT : BaseGradleIT() {
|
||||
mapOf("kotlin-library" to "foobaz")
|
||||
)
|
||||
|
||||
@Test
|
||||
fun testSkippingTasksOnOtherHosts() {
|
||||
assumeFalse(HostManager.hostIsMac)
|
||||
|
||||
with(transformProjectWithPluginsDsl(cocoapodsSingleKtPod, gradleVersion)) {
|
||||
val syntheticTasks = arrayOf(
|
||||
":podInstall",
|
||||
":kotlin-library:generateDummyFramework",
|
||||
":kotlin-library:podGenIOS",
|
||||
":kotlin-library:podSetupBuildIOS",
|
||||
":kotlin-library:podBuildDependenciesIOS",
|
||||
":kotlin-library:podImport"
|
||||
)
|
||||
|
||||
build(*syntheticTasks, "-Pkotlin.native.cocoapods.generate.wrapper=true") {
|
||||
// Check that tasks working with synthetic projects are skipped on non-mac hosts.
|
||||
assertSuccessful()
|
||||
assertTasksSkipped(*syntheticTasks)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun BaseGradleIT.Project.useCustomFrameworkName(subproject: String, frameworkName: String, iosAppLocation: String? = null) {
|
||||
// Change the name at the Gradle side.
|
||||
gradleBuildScript(subproject).appendText(
|
||||
@@ -234,7 +257,7 @@ class CocoaPodsIT : BaseGradleIT() {
|
||||
subprojectsToFrameworkNamesMap: Map<String, String?>,
|
||||
) {
|
||||
assumeTrue(HostManager.hostIsMac)
|
||||
assumeTrue(KotlinCocoapodsPlugin.isAvailableToProduceSynthetic())
|
||||
assumeTrue(KotlinCocoapodsPlugin.isAvailableToProduceSynthetic)
|
||||
|
||||
val subprojects = subprojectsToFrameworkNamesMap.keys
|
||||
val gradleProject = transformProjectWithPluginsDsl(projectName, gradleVersion)
|
||||
|
||||
+24
-13
@@ -213,8 +213,8 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
interop.packageName = "cocoapods.${pod.moduleName}"
|
||||
|
||||
|
||||
if (//TODO ychernyshev improve first check
|
||||
isAvailableToProduceSynthetic()
|
||||
if (
|
||||
isAvailableToProduceSynthetic
|
||||
&& project.findProperty(TARGET_PROPERTY) == null
|
||||
&& project.findProperty(CONFIGURATION_PROPERTY) == null
|
||||
) {
|
||||
@@ -239,8 +239,8 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
// Since we cannot expand the configuration phase of interop tasks
|
||||
// receiving the required environment variables happens on execution phase.
|
||||
// TODO This needs to be fixed to improve UP-TO-DATE checks.
|
||||
if (// TODO ychernyshev improve first check
|
||||
isAvailableToProduceSynthetic()
|
||||
if (
|
||||
isAvailableToProduceSynthetic
|
||||
&& project.findProperty(TARGET_PROPERTY) == null
|
||||
&& project.findProperty(CONFIGURATION_PROPERTY) == null
|
||||
) {
|
||||
@@ -305,6 +305,8 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
it.group = TASK_GROUP
|
||||
it.description = "Invokes `pod install` call within Podfile location directory"
|
||||
it.cocoapodsExtension = cocoapodsExtension
|
||||
it.onlyIf { isAvailableToProduceSynthetic }
|
||||
|
||||
//TODO avoid subproject task management here
|
||||
project.allprojects.map { it.tasks.named(POD_SPEC_TASK_NAME, PodspecTask::class.java) }
|
||||
.forEach { podspecTaskProvider ->
|
||||
@@ -328,6 +330,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
it.kotlinNativeTarget = target
|
||||
it.cocoapodsExtension = cocoapodsExtension
|
||||
it.dependsOn(podspecTaskProvider)
|
||||
it.onlyIf { isAvailableToProduceSynthetic }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -352,6 +355,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
val podGenTaskProvider = project.tasks.named(target.toPodGenTaskName, PodGenTask::class.java)
|
||||
it.podsXcodeProjDirProvider = podGenTaskProvider.get().podsXcodeProjDirProvider
|
||||
it.dependsOn(podGenTaskProvider)
|
||||
it.onlyIf { isAvailableToProduceSynthetic }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -374,6 +378,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
it.podsXcodeProjDirProvider = podSetupBuildTaskProvider.get().podsXcodeProjDirProvider
|
||||
it.buildSettingsFileProvider = podSetupBuildTaskProvider.get().buildSettingsFileProvider
|
||||
it.dependsOn(podSetupBuildTaskProvider)
|
||||
it.onlyIf { isAvailableToProduceSynthetic }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -388,6 +393,7 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
it.group = TASK_GROUP
|
||||
it.description = "Called on Gradle sync, depends on Cinterop tasks for every used pod"
|
||||
it.dependsOn(podInstallTaskProvider)
|
||||
it.onlyIf { isAvailableToProduceSynthetic }
|
||||
|
||||
kotlinExtension.supportedTargets().all { target ->
|
||||
target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME).cinterops.all { interop ->
|
||||
@@ -408,13 +414,14 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
registerDummyFrameworkTask(project, cocoapodsExtension)
|
||||
createSyncTask(project, kotlinExtension)
|
||||
registerPodspecTask(project, cocoapodsExtension)
|
||||
if (isAvailableToProduceSynthetic()) {
|
||||
registerPodGenTask(project, kotlinExtension, cocoapodsExtension)
|
||||
registerPodInstallTask(project, cocoapodsExtension)
|
||||
registerPodSetupBuildTasks(project, kotlinExtension, cocoapodsExtension)
|
||||
registerPodBuildTasks(project, kotlinExtension, cocoapodsExtension)
|
||||
registerPodImportTask(project, kotlinExtension)
|
||||
} else {
|
||||
|
||||
registerPodGenTask(project, kotlinExtension, cocoapodsExtension)
|
||||
registerPodInstallTask(project, cocoapodsExtension)
|
||||
registerPodSetupBuildTasks(project, kotlinExtension, cocoapodsExtension)
|
||||
registerPodBuildTasks(project, kotlinExtension, cocoapodsExtension)
|
||||
registerPodImportTask(project, kotlinExtension)
|
||||
|
||||
if (HostManager.hostIsMac && !isAvailableToProduceSynthetic) {
|
||||
logger.quiet(
|
||||
"""
|
||||
To take advantage of the new functionality for Cocoapods Integration like synchronizing with the Xcode project
|
||||
@@ -457,13 +464,17 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
|
||||
const val KOTLIN_TARGET_FOR_IOS_DEVICE = "ios_arm"
|
||||
const val KOTLIN_TARGET_FOR_WATCHOS_DEVICE = "watchos_arm"
|
||||
|
||||
fun isAvailableToProduceSynthetic(): Boolean {
|
||||
val isAvailableToProduceSynthetic: Boolean by lazy {
|
||||
if (!HostManager.hostIsMac) {
|
||||
return@lazy false
|
||||
}
|
||||
|
||||
val gemListProcess = ProcessBuilder("gem", "list").start()
|
||||
val gemListRetCode = gemListProcess.waitFor()
|
||||
val gemListOutput = gemListProcess.inputStream.use {
|
||||
it.reader().readText()
|
||||
}
|
||||
return gemListRetCode == 0 && gemListOutput.contains("cocoapods-generate")
|
||||
gemListRetCode == 0 && gemListOutput.contains("cocoapods-generate")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user