diff --git a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanToolRunner.kt b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanToolRunner.kt index 7cf9a9dd56a..331508a1b29 100644 --- a/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanToolRunner.kt +++ b/tools/kotlin-native-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KonanToolRunner.kt @@ -71,6 +71,15 @@ internal abstract class KonanCliRunner( override val environment = mutableMapOf("LIBCLANG_DISABLE_CRASH_RECOVERY" to "1") + private fun String.escapeQuotes() = replace("\"", "\\\"") + + private fun List>.escapeQuotesForWindows() = + if (HostManager.hostIsMingw) { + map { (key, value) -> key.escapeQuotes() to value.escapeQuotes() } + } else { + this + } + override fun run(args: List) { project.logger.info("Run tool: $toolName with args: ${args.joinToString(separator = " ")}") if (classpath.isEmpty) { @@ -83,7 +92,12 @@ internal abstract class KonanCliRunner( spec.main = mainClass spec.classpath = classpath spec.jvmArgs(jvmArgs) - spec.systemProperties(System.getProperties().map { (k, v) -> k.toString() to v }.toMap()) + spec.systemProperties( + System.getProperties() + .map { (k, v) -> k.toString() to v.toString() } + .escapeQuotesForWindows() + .toMap() + ) spec.systemProperties(additionalSystemProperties) spec.args(listOf(toolName) + args) blacklistEnvironment.forEach { spec.environment.remove(it) }