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:
Ilya Matveev
2017-07-11 19:58:49 +07:00
committed by ilmat192
parent e8b1fc3dee
commit f87ae58f7c
4 changed files with 19 additions and 15 deletions
@@ -133,4 +133,4 @@ bintray {
override = project.hasProperty("override")
}
publications = ['gradlePlugin']
}
}
@@ -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
@@ -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
@@ -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 ---------------------------------------