diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropLibrary.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropLibrary.kt index deb4f2d1eb6..2e4681d20ef 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropLibrary.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanInteropLibrary.kt @@ -58,4 +58,14 @@ open class KonanInteropLibrary(name: String, project: ProjectInternal, instantia override fun link(vararg files: Any) = forEach { it.link(*files) } override fun link(files: FileCollection) = forEach { it.link(files) } + + override fun headerFilterAdditionalSearchPrefix(path: Any) = + forEach { it.headerFilterAdditionalSearchPrefix(path) } + + override fun headerFilterAdditionalSearchPrefixes(vararg paths: Any) = + headerFilterAdditionalSearchPrefixes(paths.toList()) + + override fun headerFilterAdditionalSearchPrefixes(paths: Collection) = + forEach { it.headerFilterAdditionalSearchPrefix(paths) } + } \ No newline at end of file diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt index 7147cb37318..f261046ac8c 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanSpecs.kt @@ -86,4 +86,8 @@ interface KonanInteropSpec: KonanBuildingSpec { fun link(vararg files: Any) fun link(files: FileCollection) + + fun headerFilterAdditionalSearchPrefix(path: Any) + fun headerFilterAdditionalSearchPrefixes(vararg paths: Any) + fun headerFilterAdditionalSearchPrefixes(paths: Collection) } \ No newline at end of file diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanInteropTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanInteropTask.kt index c1134ff291d..5f5f55ba484 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanInteropTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanInteropTask.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.gradle.plugin.tasks +import org.gradle.api.InvalidUserDataException import org.gradle.api.file.FileCollection import org.gradle.api.tasks.* import org.jetbrains.kotlin.gradle.plugin.* @@ -51,6 +52,8 @@ open class KonanInteropTask: KonanBuildingTask(), KonanInteropSpec { @InputFiles val headers = mutableSetOf() @InputFiles val linkFiles = mutableSetOf() + @Input val headerFilterAdditionalSearchDirectories = mutableSetOf() + override fun buildArgs() = mutableListOf().apply { addArg("-properties", "${project.konanHome}/konan/konan.properties") @@ -82,6 +85,15 @@ open class KonanInteropTask: KonanBuildingTask(), KonanInteropSpec { addKey("-nodefaultlibs", noDefaultLibs) + addArgs("-headerFilterAdditionalSearchPrefix", + headerFilterAdditionalSearchDirectories.map { + if (!it.isDirectory) { + throw InvalidUserDataException("headerFilterAdditionalSearchPrefix must be a directory: $it") + } + it.absolutePath + } + ) + addAll(extraOpts) } @@ -122,7 +134,18 @@ open class KonanInteropTask: KonanBuildingTask(), KonanInteropSpec { override fun link(files: FileCollection) { linkFiles.add(files) } - + + override fun headerFilterAdditionalSearchPrefix(path: Any) { + headerFilterAdditionalSearchDirectories.add(project.file(path)) + } + + override fun headerFilterAdditionalSearchPrefixes(vararg paths: Any) = + headerFilterAdditionalSearchPrefixes(paths.toList()) + + override fun headerFilterAdditionalSearchPrefixes(paths: Collection) = paths.forEach { + headerFilterAdditionalSearchPrefix(it) + } + // endregion } diff --git a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy index 1a789d5a1ff..06d6452936a 100644 --- a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy +++ b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/IncrementalSpecification.groovy @@ -97,7 +97,7 @@ class IncrementalSpecification extends BaseKonanSpecification { "noDefaultLibs" | "true" } - def 'Plugin should support custom entry points and recompile an artifact if it changes'() { + def 'Plugin should support a custom entry point and recompile an artifact if it changes'() { when: def project = KonanProject.createEmpty(projectDirectory) { KonanProject it -> it.addCompilerArtifact("main", """