gradle-plugin: Fix incremental build
The patch makes the plugin to set default input directories (src/main/kotlin and src/main/c_interop) at task construction rather than setting them during compiler command line building. It allows gradle to perform up-to-date checks correctly.
This commit is contained in:
@@ -133,4 +133,4 @@ bintray {
|
||||
override = project.hasProperty("override")
|
||||
}
|
||||
publications = ['gradlePlugin']
|
||||
}
|
||||
}
|
||||
|
||||
+1
-5
@@ -160,11 +160,7 @@ open class KonanCompileTask: KonanTargetableTask() {
|
||||
addKey("-opt", enableOptimization)
|
||||
addKey("-ea", enableAssertions)
|
||||
|
||||
(if (inputFiles.isEmpty()) {
|
||||
project.fileTree("${project.projectDir.canonicalPath}/src/main/kotlin")
|
||||
} else {
|
||||
inputFiles.flatMap { it.files }
|
||||
}).filter { it.name.endsWith(".kt") }.mapTo(this) { it.canonicalPath }
|
||||
inputFiles.flatMap { it.files }.filter { it.name.endsWith(".kt") }.mapTo(this) { it.canonicalPath }
|
||||
}
|
||||
|
||||
@TaskAction
|
||||
|
||||
+3
-7
@@ -58,8 +58,6 @@ open class KonanInteropTask: KonanTargetableTask() {
|
||||
get() = listOf("-Dkonan.home=${project.konanHome}", "-Djava.library.path=${project.konanHome}/konan/nativelib")
|
||||
internal val INTEROP_CLASSPATH: String
|
||||
get() = "${project.konanHome}/konan/lib/"
|
||||
internal val C_INTEROP_DIR_PATH: String
|
||||
get() = "${project.projectDir}/src/main/c_interop"
|
||||
|
||||
// Output directories -----------------------------------------------------
|
||||
|
||||
@@ -124,9 +122,7 @@ open class KonanInteropTask: KonanTargetableTask() {
|
||||
manifest ?.let {addArg("-manifest", it)}
|
||||
|
||||
addArgIfNotNull("-target", target)
|
||||
val defFilePath = defFile?.canonicalPath ?:
|
||||
project.file("$C_INTEROP_DIR_PATH/$libName.def").takeIf { it.exists() }?.canonicalPath
|
||||
addArgIfNotNull("-def", defFilePath)
|
||||
addArgIfNotNull("-def", defFile?.canonicalPath)
|
||||
addArg("-pkg", pkg ?: libName)
|
||||
addArgIfNotNull("-linker", linker)
|
||||
|
||||
@@ -159,8 +155,8 @@ open class KonanInteropConfig(
|
||||
// Task to process the library and generate stubs
|
||||
val generateStubsTask: KonanInteropTask = project.tasks.create(
|
||||
"gen${name.capitalize()}InteropStubs",
|
||||
KonanInteropTask::class.java
|
||||
) { it.init(name)
|
||||
KonanInteropTask::class.java) {
|
||||
it.init(name)
|
||||
it.manifest = "${it.stubsDir.path}/manifest.properties"
|
||||
}
|
||||
// Config and task to compile *.kt stubs into a library
|
||||
|
||||
+14
-2
@@ -48,6 +48,10 @@ internal val Project.konanInteropStubsOutputDir get() = "${konanBuildRoot}/int
|
||||
internal val Project.konanInteropCompiledStubsDir get() = "${konanBuildRoot}/interopCompiledStubs"
|
||||
internal val Project.konanInteropLibsOutputDir get() = "${konanBuildRoot}/nativelibs"
|
||||
|
||||
internal val Project.konanDefaultSrcDir get() = file("${projectDir.canonicalPath}/src/main/kotlin")
|
||||
internal fun Project.konanDefaultDefFile(interopName: String)
|
||||
= file("${projectDir.canonicalPath}/src/main/c_interop/$interopName.def")
|
||||
|
||||
internal val Project.konanArtifactsContainer: KonanArtifactsContainer
|
||||
get() = extensions.getByName(KonanPlugin.COMPILER_EXTENSION_NAME) as KonanArtifactsContainer
|
||||
internal val Project.konanInteropContainer: KonanInteropContainer
|
||||
@@ -90,7 +94,11 @@ class KonanArtifactsContainer(val project: ProjectInternal): AbstractNamedDomain
|
||||
project.gradle.services.get(Instantiator::class.java)) {
|
||||
|
||||
override fun doCreate(name: String): KonanCompileConfig =
|
||||
KonanCompileConfig(name, project)
|
||||
KonanCompileConfig(name, project).apply {
|
||||
project.konanDefaultSrcDir?.takeIf { it.exists() }?.let {
|
||||
inputDir(it.canonicalPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class KonanInteropContainer(val project: ProjectInternal): AbstractNamedDomainObjectContainer<KonanInteropConfig>(
|
||||
@@ -98,7 +106,11 @@ class KonanInteropContainer(val project: ProjectInternal): AbstractNamedDomainOb
|
||||
project.gradle.services.get(Instantiator::class.java)) {
|
||||
|
||||
override fun doCreate(name: String): KonanInteropConfig =
|
||||
KonanInteropConfig(name, project)
|
||||
KonanInteropConfig(name, project).apply {
|
||||
project.konanDefaultDefFile(name).takeIf { it.exists() }?.let {
|
||||
defFile(it.canonicalFile)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Useful extensions and functions ---------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user