diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CocoaPodsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CocoaPodsIT.kt index 10e844fce10..0a0744921b9 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CocoaPodsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CocoaPodsIT.kt @@ -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") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/DefaultCInteropSettings.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/DefaultCInteropSettings.kt index 2591318df39..a2566f6a942 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/DefaultCInteropSettings.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/DefaultCInteropSettings.kt @@ -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 = project.objects.property(String::class.java) val compilerOpts = mutableListOf() val linkerOpts = mutableListOf() - val extraOpts = mutableListOf() + var extraOpts: List + get() = _extraOptsProp.get() + set(value) { + _extraOptsProp = project.objects.listProperty(String::class.java) + extraOpts(value) + } + + internal var _extraOptsProp: ListProperty = 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) { - extraOpts.addAll(values.map { it.toString() }) + _extraOptsProp.addAll(project.provider { values.map { it.toString() } }) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/CocoapodsExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/CocoapodsExtension.kt index ea59e9b332f..26cc026f4d7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/CocoapodsExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/CocoapodsExtension.kt @@ -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 = listOf(), + @get:Internal var packageName: String = "cocoapods.$moduleName" ) : Named { @Input override fun getName(): String = name diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt index f33b368df29..f3fb460f02f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/cocoapods/KotlinCocoapodsPlugin.kt @@ -239,9 +239,11 @@ open class KotlinCocoapodsPlugin : Plugin { 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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt index 17285dcea37..0bfdacd2d2d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/tasks/KotlinNativeTasks.kt @@ -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 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