KT-49032: Add default framework header search path for Cocoapod cinterop

Similarly Cocoapods logic
https://github.com/CocoaPods/CocoaPods/blob/d18f49392c5e9ed9a2cdcb2ee89391cf7690ee5d/lib/cocoapods/target/build_settings.rb#L1188
This commit is contained in:
konstantin.tskhovrebov
2022-05-06 15:19:52 +02:00
committed by Space
parent b5449f6ed3
commit 8b9e91568f
2 changed files with 13 additions and 3 deletions
@@ -136,6 +136,14 @@ internal val PodBuildSettingsProperties.frameworkSearchPaths: List<String>
return frameworkPathsSelfIncluding
}
//Make frameworks headers discoverable with any syntax (quotes, brackets, @import, etc.)
//https://github.com/CocoaPods/CocoaPods/blob/d18f49392c5e9ed9a2cdcb2ee89391cf7690ee5d/lib/cocoapods/target/build_settings.rb#L1188
private val PodBuildSettingsProperties.frameworkHeadersSearchPaths: List<String>
get() = mutableListOf<String>().apply {
headerPaths?.let { addAll(it.splitQuotedArgs()) }
publicHeadersFolderPath?.let { add("${configurationBuildDir.trimQuotes()}/${it.trimQuotes()}") }
}
/**
* Splits a string using a whitespace characters as delimiters.
* Ignores whitespaces in quotes and drops quotes, e.g. a string
@@ -340,10 +348,8 @@ open class KotlinCocoapodsPlugin : Plugin<Project> {
// Here and below we need to split such paths taking this into account.
interop.compilerOpts.addAll(args.splitQuotedArgs())
}
podBuildSettings.headerPaths?.let { args ->
interop.compilerOpts.addAll(args.splitQuotedArgs().map { "-I$it" })
}
interop.compilerOpts.addAll(podBuildSettings.frameworkHeadersSearchPaths.map { "-I$it" })
interop.compilerOpts.addAll(podBuildSettings.frameworkSearchPaths.map { "-F$it" })
}
@@ -608,6 +608,7 @@ data class PodBuildSettingsProperties(
internal val podsTargetSrcRoot: String,
internal val cflags: String? = null,
internal val headerPaths: String? = null,
internal val publicHeadersFolderPath: String? = null,
internal val frameworkPaths: String? = null
) {
@@ -627,6 +628,7 @@ data class PodBuildSettingsProperties(
appendText("$PODS_TARGET_SRCROOT=$podsTargetSrcRoot\n")
cflags?.let { appendText("$OTHER_CFLAGS=$it\n") }
headerPaths?.let { appendText("$HEADER_SEARCH_PATHS=$it\n") }
publicHeadersFolderPath?.let { appendText("$PUBLIC_HEADERS_FOLDER_PATH=$it\n") }
frameworkPaths?.let { appendText("$FRAMEWORK_SEARCH_PATHS=$it") }
}
}
@@ -638,6 +640,7 @@ data class PodBuildSettingsProperties(
const val PODS_TARGET_SRCROOT = "PODS_TARGET_SRCROOT"
const val OTHER_CFLAGS = "OTHER_CFLAGS"
const val HEADER_SEARCH_PATHS = "HEADER_SEARCH_PATHS"
const val PUBLIC_HEADERS_FOLDER_PATH = "PUBLIC_HEADERS_FOLDER_PATH"
const val FRAMEWORK_SEARCH_PATHS = "FRAMEWORK_SEARCH_PATHS"
fun readSettingsFromReader(reader: Reader): PodBuildSettingsProperties {
@@ -650,6 +653,7 @@ data class PodBuildSettingsProperties(
readProperty(PODS_TARGET_SRCROOT),
readNullableProperty(OTHER_CFLAGS),
readNullableProperty(HEADER_SEARCH_PATHS),
readNullableProperty(PUBLIC_HEADERS_FOLDER_PATH),
readNullableProperty(FRAMEWORK_SEARCH_PATHS)
)
}