diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 6612a4b4709..c20d0ed260b 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -2249,4 +2249,20 @@ class NewMultiplatformIT : BaseGradleIT() { } } } + + @Test + fun testNativeArgsWithSpaces() = with(Project("sample-lib", directoryPrefix = "new-mpp-lib-and-app")) { + setupWorkingDir() + val fileWithSpacesInPath = projectDir.resolve("src/commonMain/kotlin/path with spaces and special symbols like \"") + .apply { mkdirs() } + .resolve("B.kt") + fileWithSpacesInPath.writeText("fun foo() = 42") + + build("compileKotlin${nativeHostTargetName.capitalize()}") { + assertSuccessful() + checkNativeCommandLineFor(":compileKotlin${nativeHostTargetName.capitalize()}") { + it.contains(fileWithSpacesInPath.absolutePath) + } + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt index a4c8b215da8..87ffc0b9245 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/KotlinNativeToolRunner.kt @@ -227,8 +227,11 @@ internal class KonanCompilerRunner( deleteOnExit() } argFile.printWriter().use { writer -> - args.forEach { - writer.println(it) + args.forEach { arg -> + val escapedArg = arg + .replace("\\", "\\\\") + .replace("\"", "\\\"") + writer.println("\"$escapedArg\"") } }