From a7a085d640c720fae431dab5131f5370cd1b5847 Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Mon, 1 Mar 2021 15:42:57 +0100 Subject: [PATCH] [Commonizer] ModuleSerializer: Sanitize library names for Windows The CInterop tool can produce klibs that contain colons in their library name. Therefore the library name, as is, cannot be used as file name. The sanitizer will replace any occurring ':' with '_' --- .../commonizer/konan/ModuleSerializer.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/ModuleSerializer.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/ModuleSerializer.kt index 19ec275bdc3..e4587bcd0de 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/ModuleSerializer.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/konan/ModuleSerializer.kt @@ -22,14 +22,12 @@ internal class ModuleSerializer( val librariesDestination = outputLayout.getTargetDirectory(destination, target) when (moduleResult) { is ResultsConsumer.ModuleResult.Commonized -> { - val libraryName = moduleResult.libraryName - val libraryDestination = librariesDestination.resolve(libraryName) + val libraryDestination = librariesDestination.resolve(moduleResult.fileSystemCompatibleLibraryName) writeLibrary(moduleResult.metadata, moduleResult.manifest, libraryDestination) } is ResultsConsumer.ModuleResult.Missing -> { - val libraryName = moduleResult.libraryName val missingModuleLocation = moduleResult.originalLocation - missingModuleLocation.copyRecursively(librariesDestination.resolve(libraryName)) + missingModuleLocation.copyRecursively(librariesDestination.resolve(moduleResult.fileSystemCompatibleLibraryName)) } } } @@ -54,3 +52,10 @@ private fun writeLibrary( manifestData.applyTo(library.base as BaseWriterImpl) library.commit() } + +/** + * Returns [ResultsConsumer.ModuleResult.libraryName] but replaces potentially occurring colons ':' with underscores '_'. + * Colons cannot be used as filenames on Windows, but they occured as libraryNames for Klibs produced by the cinterop tool. + */ +val ResultsConsumer.ModuleResult.fileSystemCompatibleLibraryName: String + get() = libraryName.replace(":", "_")