From 649f246cef48e509d42a258286f3d14ce60b6dc3 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Wed, 9 Feb 2022 17:55:36 +0300 Subject: [PATCH] Build: Normalize line separators in components.xml of kotlin-scripting-dependencies-maven-all jar to produce same binaries on linux and windows #KTI-782 --- .../dependencies-maven-all/build.gradle.kts | 45 ++++++++++++++++--- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/libraries/scripting/dependencies-maven-all/build.gradle.kts b/libraries/scripting/dependencies-maven-all/build.gradle.kts index a3a8c96226d..2d0b31b8fff 100644 --- a/libraries/scripting/dependencies-maven-all/build.gradle.kts +++ b/libraries/scripting/dependencies-maven-all/build.gradle.kts @@ -52,7 +52,7 @@ val relocatedJar by task { configurations = listOf(embedded) duplicatesStrategy = DuplicatesStrategy.INCLUDE destinationDirectory.set(File(buildDir, "libs")) - archiveClassifier.set("before-proguard") + archiveClassifier.set("relocated") transform(ComponentsXmlResourceTransformer()) @@ -63,11 +63,46 @@ val relocatedJar by task { } } -val proguard by task { +val normalizeComponentsXmlEndings by tasks.registering { dependsOn(relocatedJar) + val outputDirectory = buildDir.resolve(name) + val outputFile = outputDirectory.resolve(ComponentsXmlResourceTransformer.COMPONENTS_XML_PATH) + outputs.file(outputFile) + + doFirst { + val componentsXml = zipTree(relocatedJar.get().singleOutputFile()).matching { + include { it.path == ComponentsXmlResourceTransformer.COMPONENTS_XML_PATH } + }.single().readText() + val processedComponentsXml = componentsXml.replace("\r\n", "\n") + outputDirectory.mkdirs() + outputFile.writeText(processedComponentsXml) + } +} + +val normalizedJar by task { + dependsOn(relocatedJar) + dependsOn(normalizeComponentsXmlEndings) + + archiveClassifier.set("normalized") + + from { + zipTree(relocatedJar.get().singleOutputFile()).matching { + exclude(ComponentsXmlResourceTransformer.COMPONENTS_XML_PATH) + } + } + + into(ComponentsXmlResourceTransformer.COMPONENTS_XML_PATH.substringBeforeLast("/")) { + from { + normalizeComponentsXmlEndings.get().singleOutputFile() + } + } +} + +val proguard by task { + dependsOn(normalizedJar) configuration("dependencies-maven.pro") - injars(mapOf("filter" to "!META-INF/versions/**,!kotlinx/coroutines/debug/**"), relocatedJar.get().outputs.files) + injars(mapOf("filter" to "!META-INF/versions/**,!kotlinx/coroutines/debug/**"), normalizedJar.get().outputs.files) outjars(fileFrom(buildDir, "libs", "$jarBaseName-$version-after-proguard.jar")) @@ -94,11 +129,10 @@ val proguard by task { } ) ) - } val resultJar by task { - val pack = if (kotlinBuildProperties.proguard) proguard else relocatedJar + val pack = if (kotlinBuildProperties.proguard) proguard else normalizedJar dependsOn(pack) setupPublicJar(jarBaseName) from { @@ -106,6 +140,7 @@ val resultJar by task { } } + addArtifact("runtime", resultJar) addArtifact("runtimeElements", resultJar) addArtifact("archives", resultJar)