[Gradle, Cocoapods] Custom packageName and extraOpts for pods cinterop

#KT-40999 Fixed
This commit is contained in:
Yaroslav Chernyshev
2020-09-28 12:54:08 +03:00
parent b0b971cd0a
commit ad7ad98738
5 changed files with 66 additions and 11 deletions
@@ -674,6 +674,38 @@ class CocoaPodsIT : BaseGradleIT() {
project.testImportWithAsserts()
}
@Test
fun testCustomPackageName() {
with(project.gradleBuildScript()) {
addPod("AFNetworking", "packageName = \"AFNetworking\"")
}
with(project) {
File(projectDir, "src/iosMain/kotlin/A.kt").modify {
it.replace(
"fun foo() {", """
import AFNetworking
fun foo() {
""".trimIndent()
)
it.replace("println(\"hi!\")", "println(AFNetworking.AFNetworkingReachabilityNotificationStatusItem)")
}
testWithWrapper("assemble")
}
}
@Test
fun testCinteropExtraOpts() {
with(project.gradleBuildScript()) {
addPod("AFNetworking", "extraOpts = listOf(\"-help\")")
}
project.build("wrapper", "cinteropAFNetworkingIOS") {
assertSuccessful()
assertContains("Usage: cinterop options_list")
}
}
// paths
private fun CompiledProject.url() = externalSources().resolve("url")
@@ -10,6 +10,7 @@ import groovy.lang.Closure
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.file.FileCollection
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.CInteropSettings
@@ -62,13 +63,28 @@ open class DefaultCInteropSettings @Inject constructor(
var defFile: File
get() = defFileProperty.get()
set(value) { defFileProperty.set(value) }
set(value) {
defFileProperty.set(value)
}
var packageName: String? = null
var packageName: String?
get() = _packageNameProp.orNull
set(value) {
_packageNameProp.set(value)
}
internal val _packageNameProp: Property<String> = project.objects.property(String::class.java)
val compilerOpts = mutableListOf<String>()
val linkerOpts = mutableListOf<String>()
val extraOpts = mutableListOf<String>()
var extraOpts: List<String>
get() = _extraOptsProp.get()
set(value) {
_extraOptsProp = project.objects.listProperty(String::class.java)
extraOpts(value)
}
internal var _extraOptsProp: ListProperty<String> = project.objects.listProperty(String::class.java)
val includeDirs = DefaultIncludeDirectories()
var headers: FileCollection = project.files()
@@ -80,7 +96,7 @@ open class DefaultCInteropSettings @Inject constructor(
}
override fun packageName(value: String) {
packageName = value
_packageNameProp.set(value)
}
override fun header(file: Any) = headers(file)
@@ -106,6 +122,6 @@ open class DefaultCInteropSettings @Inject constructor(
override fun extraOpts(vararg values: Any) = extraOpts(values.toList())
override fun extraOpts(values: List<Any>) {
extraOpts.addAll(values.map { it.toString() })
_extraOptsProp.addAll(project.provider { values.map { it.toString() } })
}
}
@@ -186,7 +186,9 @@ open class CocoapodsExtension(private val project: Project) {
private val name: String,
@get:Input var moduleName: String,
@get:Optional @get:Input var version: String? = null,
@get:Optional @get:Nested var source: PodLocation? = null
@get:Optional @get:Nested var source: PodLocation? = null,
@get:Internal var extraOpts: List<String> = listOf(),
@get:Internal var packageName: String = "cocoapods.$moduleName"
) : Named {
@Input
override fun getName(): String = name
@@ -239,9 +239,11 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
interopTask.dependsOn(defTask)
interop.defFileProperty.set(defTask.map { it.outputFile })
interop.packageName = "cocoapods.${pod.moduleName}"
with(interop) {
defFileProperty.set(defTask.map { it.outputFile })
_packageNameProp.set(project.provider { pod.packageName })
_extraOptsProp.addAll(project.provider { pod.extraOpts })
}
if (
isAvailableToProduceSynthetic
@@ -14,6 +14,7 @@ import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection
import org.gradle.api.file.FileTree
import org.gradle.api.logging.Logger
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.*
@@ -559,7 +560,8 @@ open class KotlinNativeLink : AbstractKotlinNativeCompile<KotlinCommonToolOption
when (embedBitcode) {
Framework.BitcodeEmbeddingMode.MARKER -> add("-Xembed-bitcode-marker")
Framework.BitcodeEmbeddingMode.BITCODE -> add("-Xembed-bitcode")
else -> { /* Do nothing. */ }
else -> { /* Do nothing. */
}
}
linkerOpts.forEach {
addArg("-linker-option", it)
@@ -585,7 +587,8 @@ open class KotlinNativeLink : AbstractKotlinNativeCompile<KotlinCommonToolOption
listOf("-Xinclude=${intermediateLibrary.get().absolutePath}")
@get:Internal
val apiFilesProvider = compilation.map {project.configurations.getByName(it.apiConfigurationName).files.filterKlibsPassedToCompiler(project)}
val apiFilesProvider =
compilation.map { project.configurations.getByName(it.apiConfigurationName).files.filterKlibsPassedToCompiler(project) }
private fun validatedExportedLibraries() {
val exportConfiguration = exportLibraries as? Configuration ?: return