From 966402adf5ccf37a0f1347ba8a1072fa9b9a8996 Mon Sep 17 00:00:00 2001 From: LepilkinaElena Date: Fri, 13 Mar 2020 17:06:22 +0300 Subject: [PATCH] Printing linker error message from gradle MPP plugin (#3979) --- .../jetbrains/kotlin/backend/konan/Linker.kt | 2 +- .../kotlin/konan/exec/ExecuteCommand.kt | 25 ++++++++++++++----- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Linker.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Linker.kt index ba5262299fe..d4e84e131cd 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Linker.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/Linker.kt @@ -133,7 +133,7 @@ internal class Linker(val context: Context) { it.execute() } } catch (e: KonanExternalToolFailure) { - context.reportCompilationError("${e.toolName} invocation reported errors") + context.reportCompilationError("${e.toolName} invocation reported errors\n${e.message}") } return executable } diff --git a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/exec/ExecuteCommand.kt b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/exec/ExecuteCommand.kt index d5de7e9297d..ffe19eb3206 100644 --- a/shared/src/main/kotlin/org/jetbrains/kotlin/konan/exec/ExecuteCommand.kt +++ b/shared/src/main/kotlin/org/jetbrains/kotlin/konan/exec/ExecuteCommand.kt @@ -16,9 +16,10 @@ package org.jetbrains.kotlin.konan.exec -import java.lang.ProcessBuilder -import java.lang.ProcessBuilder.Redirect import org.jetbrains.kotlin.konan.KonanExternalToolFailure +import java.io.BufferedReader +import java.io.InputStreamReader +import java.lang.ProcessBuilder.Redirect open class Command(initialCommand: List) { @@ -42,28 +43,33 @@ open class Command(initialCommand: List) { var logger: ((() -> String)->Unit)? = null + private var stdError: List = emptyList() + fun logWith(newLogger: ((() -> String)->Unit)): Command { logger = newLogger return this } open fun runProcess(): Int { + stdError = emptyList() val builder = ProcessBuilder(command) builder.redirectOutput(Redirect.INHERIT) builder.redirectInput(Redirect.INHERIT) - builder.redirectError(Redirect.INHERIT) val process = builder.start() + + val reader = BufferedReader(InputStreamReader(process.errorStream)) + stdError = reader.readLines() + val exitCode = process.waitFor() return exitCode } open fun execute() { log() - val code = runProcess() - handleExitCode(code) + handleExitCode(code, stdError) } /** @@ -104,8 +110,15 @@ open class Command(initialCommand: List) { private fun handleExitCode(code: Int, output: List = emptyList()) { if (code != 0) throw KonanExternalToolFailure(""" The ${command[0]} command returned non-zero exit code: $code. - output: ${output.joinToString("\n")} + output: + ${output.joinToString("\n")} """.trimIndent(), command[0]) + // Show warnings in case of success linkage. + if (stdError.isNotEmpty()) { + stdError.joinToString("\n").also { message -> + logger?.let { it { message } } ?: println(message) + } + } } private fun log() {