From b47f7dcf73ebaade58a9e2762a35be8360d0feab Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Tue, 28 Nov 2017 19:53:41 +0700 Subject: [PATCH] gradle-plugin: Fix CMake generation --- .../gradle/plugin/tasks/KonanGenerateCMakeTask.kt | 13 +++++++++---- .../gradle/plugin/test/CMakeSpecification.groovy | 11 +++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanGenerateCMakeTask.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanGenerateCMakeTask.kt index 2ee87fd6b70..9fd8767f944 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanGenerateCMakeTask.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/tasks/KonanGenerateCMakeTask.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.gradle.plugin.KonanInteropLibrary import org.jetbrains.kotlin.gradle.plugin.KonanLibrary import org.jetbrains.kotlin.gradle.plugin.KonanProgram import org.jetbrains.kotlin.gradle.plugin.konanArtifactsContainer +import org.jetbrains.kotlin.konan.target.Family import org.jetbrains.kotlin.konan.target.TargetManager import java.io.File @@ -70,7 +71,7 @@ open class KonanGenerateCMakeTask : DefaultTask() { appendln( Call("cinterop") .arg("NAME", interop.name) - .arg("DEF_FILE", task.defFile.relativePath.toString()) + .arg("DEF_FILE", task.defFile.relativePath.toString().crossPlatformPath) .arg("COMPILER_OPTS", task.cMakeCompilerOpts) ) } @@ -99,11 +100,15 @@ open class KonanGenerateCMakeTask : DefaultTask() { private val File.relativePath get() = relativeTo(project.projectDir) + private val String.crossPlatformPath get() = + if (TargetManager.host.family == Family.WINDOWS) replace('\\', '/') else this + private val FileCollection.asCMakeSourceList: List - get() = files.map { it.relativePath.toString() } + get() = files.map { it.relativePath.toString().crossPlatformPath } private val KonanInteropTask.cMakeCompilerOpts: String - get() = compilerOpts.joinToString(" ") + get() = (compilerOpts + includeDirs.allHeadersDirs.map { "-I${it.absolutePath.crossPlatformPath}" }) + .joinToString(" ") private val KonanCompileTask.cMakeSources: String get() = srcFiles.flatMap { it.asCMakeSourceList }.joinToString(" ") @@ -112,7 +117,7 @@ open class KonanGenerateCMakeTask : DefaultTask() { get() = mutableListOf().apply { addAll(libraries.artifacts.map { it.artifactName }) addAll(libraries.namedKlibs) - addAll(libraries.files.flatMap { it.files }.map { it.canonicalPath }) + addAll(libraries.files.flatMap { it.files }.map { it.canonicalPath.crossPlatformPath }) }.joinToString(" ") private val KonanCompileTask.cMakeLinkerOpts: String diff --git a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/CMakeSpecification.groovy b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/CMakeSpecification.groovy index 33360795b39..15149763800 100644 --- a/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/CMakeSpecification.groovy +++ b/tools/kotlin-native-gradle-plugin/src/test/groovy/org/jetbrains/kotlin/gradle/plugin/test/CMakeSpecification.groovy @@ -1,9 +1,12 @@ package org.jetbrains.kotlin.gradle.plugin.test -class CMakeSpecification extends BaseKonanSpecification { +import org.jetbrains.kotlin.konan.target.Family +import org.jetbrains.kotlin.konan.target.TargetManager +class CMakeSpecification extends BaseKonanSpecification { def 'Plugin should generate CMake from project without additional settings'() { when: + def sdlIncludePath = (TargetManager.host.family == Family.WINDOWS) ? "C:/SDL2/include" : "/usr/include/SDL2" def project = KonanProject.createEmpty(projectDirectory) { KonanProject it -> it.buildFile.write(""" plugins { id 'konan' } @@ -11,7 +14,7 @@ class CMakeSpecification extends BaseKonanSpecification { interop('stdio') interop('sdl') { defFile 'src/main/c_interop/sdl.def' - includeDirs '/usr/include/SDL2' + includeDirs '$sdlIncludePath' } library('main_lib') program('Main') { @@ -40,7 +43,7 @@ class CMakeSpecification extends BaseKonanSpecification { cinterop( NAME sdl DEF_FILE src/main/c_interop/sdl.def - COMPILER_OPTS -I/usr/include/SDL2) + COMPILER_OPTS -I$sdlIncludePath) cinterop( NAME stdio @@ -61,7 +64,7 @@ class CMakeSpecification extends BaseKonanSpecification { cMakeModule.exists() cMakeLists.exists() - def actualCMakeLists = cMakeLists.text.trim() + def actualCMakeLists = cMakeLists.text.trim().replace('\r\n', '\n') actualCMakeLists == expectedCMakeLists }