From fe8fc26ac438a79955d967a095ff9a0807c7f14f Mon Sep 17 00:00:00 2001 From: soywiz Date: Tue, 24 Jan 2023 10:41:28 +0100 Subject: [PATCH 1/4] Update to Kotlin 1.8 --- buildSrc/build.gradle | 2 +- .../soywiz/korge/gradle/KorgeGradlePlugin.kt | 67 +++++++++++++++++++ .../soywiz/korlibs/root/RootKorlibsPlugin.kt | 5 ++ .../com/soywiz/korge/gradle/BuildVersions.kt | 2 +- gradle/libs.versions.toml | 5 +- kotlin-js-store/yarn.lock | 25 ++++--- 6 files changed, 91 insertions(+), 15 deletions(-) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index a20077e121..c987e39026 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -2,7 +2,7 @@ plugins { id "publishing" id "maven-publish" id "signing" - id "org.jetbrains.kotlin.jvm" version "1.7.10" + id "org.jetbrains.kotlin.jvm" } def isJava8or9 = System.getProperty("java.version").startsWith("1.8") || System.getProperty("java.version").startsWith("9") diff --git a/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeGradlePlugin.kt b/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeGradlePlugin.kt index 8f8ed950cb..fa9b99f3f7 100644 --- a/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeGradlePlugin.kt +++ b/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeGradlePlugin.kt @@ -7,9 +7,12 @@ import org.gradle.api.* import org.gradle.api.Project import org.gradle.api.plugins.* import org.gradle.api.tasks.* +import org.gradle.api.tasks.diagnostics.* +import org.gradle.internal.classloader.* import org.gradle.plugins.ide.idea.model.* import org.jetbrains.kotlin.gradle.dsl.* import java.io.* +import java.net.* class KorgeGradleApply(val project: Project) { fun apply(includeIndirectAndroid: Boolean = true) = project { @@ -114,6 +117,7 @@ class KorgeGradleApply(val project: Project) { open class KorgeGradlePlugin : Plugin { override fun apply(project: Project) { + project.configureBuildScriptClasspathTasks() //TODO PABLO changed to have the android tasks enabled again KorgeGradleApply(project).apply(includeIndirectAndroid = true) @@ -122,6 +126,69 @@ open class KorgeGradlePlugin : Plugin { } } +fun Project.configureBuildScriptClasspathTasks() { + // https://gist.github.com/xconnecting/4037220 + val printBuildScriptClasspath = project.tasks.createThis("printBuildScriptClasspath") { + configurations = project.buildscript.configurations + } + val printBuildScriptClasspath2 = project.tasks.createThis("printBuildScriptClasspath2") { + doFirst { + fun getClassLoaderChain(classLoader: ClassLoader, out: ArrayList = arrayListOf()): List { + var current: ClassLoader? = classLoader + while (current != null) { + out.add(current) + current = current.parent + } + return out + } + + fun printClassLoader(classLoader: ClassLoader) { + when (classLoader) { + is URLClassLoader -> { + println(classLoader.urLs.joinToString("\n")) + } + is ClassLoaderHierarchy -> { + classLoader.visit(object : ClassLoaderVisitor() { + override fun visit(classLoader: ClassLoader) { + super.visit(classLoader) + } + + override fun visitSpec(spec: ClassLoaderSpec) { + super.visitSpec(spec) + } + + override fun visitClassPath(classPath: Array) { + classPath.forEach { println(it) } + } + + override fun visitParent(classLoader: ClassLoader) { + super.visitParent(classLoader) + } + }) + } + } + } + + println("Class loaders:") + val classLoaders = getClassLoaderChain(Thread.currentThread().contextClassLoader) + for (classLoader in classLoaders.reversed()) { + println(" - $classLoader") + } + + for (classLoader in classLoaders.reversed()) { + println("") + println("$classLoader:") + println("--------------") + printClassLoader(classLoader) + } + //println(ClassLoader.getSystemClassLoader()) + //println((Thread.currentThread().contextClassLoader as URLClassLoader).parent.urLs.joinToString("\n")) + //println((KorgeGradlePlugin::class.java.classLoader as URLClassLoader).urLs.joinToString("\n")) + } + } + +} + val Project.gkotlin get() = properties["kotlin"] as KotlinMultiplatformExtension val Project.ext get() = extensions.getByType(ExtraPropertiesExtension::class.java) diff --git a/buildSrc/src/main/kotlin/com/soywiz/korlibs/root/RootKorlibsPlugin.kt b/buildSrc/src/main/kotlin/com/soywiz/korlibs/root/RootKorlibsPlugin.kt index f7ccf1a25d..8a546993d5 100644 --- a/buildSrc/src/main/kotlin/com/soywiz/korlibs/root/RootKorlibsPlugin.kt +++ b/buildSrc/src/main/kotlin/com/soywiz/korlibs/root/RootKorlibsPlugin.kt @@ -2,6 +2,7 @@ package com.soywiz.korlibs.root import com.android.build.gradle.* import com.android.build.gradle.internal.tasks.* +import com.soywiz.korge.gradle.* import com.soywiz.korge.gradle.targets.* import com.soywiz.korge.gradle.targets.android.* import com.soywiz.korge.gradle.targets.ios.* @@ -10,8 +11,11 @@ import com.soywiz.korge.gradle.targets.native.* import com.soywiz.korge.gradle.util.* import com.soywiz.korge.gradle.util.create import com.soywiz.korlibs.* +import com.soywiz.korlibs.gkotlin +import com.soywiz.korlibs.kotlin import com.soywiz.korlibs.modules.* import com.soywiz.korlibs.modules.KorgeJavaExec +import com.soywiz.korlibs.tasks import org.gradle.api.* import org.gradle.api.Project import org.gradle.api.artifacts.repositories.* @@ -34,6 +38,7 @@ object RootKorlibsPlugin { } fun Project.init() { + configureBuildScriptClasspathTasks() initPlugins() initRootKotlinJvmTarget() initVersions() diff --git a/buildSrc/src/main/kotlinGen/com/soywiz/korge/gradle/BuildVersions.kt b/buildSrc/src/main/kotlinGen/com/soywiz/korge/gradle/BuildVersions.kt index 63ef296de9..e0006fa95c 100644 --- a/buildSrc/src/main/kotlinGen/com/soywiz/korge/gradle/BuildVersions.kt +++ b/buildSrc/src/main/kotlinGen/com/soywiz/korge/gradle/BuildVersions.kt @@ -2,7 +2,7 @@ package com.soywiz.korge.gradle object BuildVersions { const val GIT = "main" - const val KOTLIN = "1.7.21" + const val KOTLIN = "1.8.0" const val NODE_JS = "16.9.1" const val JNA = "5.13.0" const val COROUTINES = "1.6.4" diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 328d7ef518..d5671d4350 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,11 +2,10 @@ jna = "5.13.0" jcodec = "0.2.5" proguard-gradle = "7.2.2" -kotlin = "1.7.21" -dokka = "1.7.20" +kotlin = "1.8.0" kotlinx-coroutines = "1.6.4" kotlinx-serialization = "1.4.1" -kotlinx-atomicfu = "0.18.5" +kotlinx-atomicfu = "0.19.0" kover = "0.6.1" kover-agent = "1.0.692" node = "16.9.1" diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index 0fdcb740a4..66b4fc3e8d 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -267,7 +267,7 @@ acorn-import-assertions@^1.7.6: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== -acorn@^8.4.1: +acorn@^8.7.1: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== @@ -883,7 +883,7 @@ engine.io@~6.2.0: engine.io-parser "~5.0.3" ws "~8.2.3" -enhanced-resolve@^5.9.3: +enhanced-resolve@^5.10.0: version "5.12.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== @@ -2602,6 +2602,11 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typescript@4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + ua-parser-js@^0.7.30: version "0.7.31" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.31.tgz#649a656b191dffab4f21d5e053e27ca17cbff5c6" @@ -2657,7 +2662,7 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= -watchpack@^2.3.1: +watchpack@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== @@ -2752,21 +2757,21 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@5.73.0: - version "5.73.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.73.0.tgz#bbd17738f8a53ee5760ea2f59dce7f3431d35d38" - integrity sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA== +webpack@5.74.0: + version "5.74.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" + integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^0.0.51" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.4.1" + acorn "^8.7.1" acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.9.3" + enhanced-resolve "^5.10.0" es-module-lexer "^0.9.0" eslint-scope "5.1.1" events "^3.2.0" @@ -2779,7 +2784,7 @@ webpack@5.73.0: schema-utils "^3.1.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.3" - watchpack "^2.3.1" + watchpack "^2.4.0" webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: From 50de9cd7796a3d41f7fd994cfd99ac497cde8d4c Mon Sep 17 00:00:00 2001 From: soywiz Date: Tue, 24 Jan 2023 11:57:22 +0100 Subject: [PATCH 2/4] Fix dokka --- buildSrc/build.gradle | 2 +- gradle/libs.versions.toml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index c987e39026..466531d723 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -2,7 +2,7 @@ plugins { id "publishing" id "maven-publish" id "signing" - id "org.jetbrains.kotlin.jvm" + id "org.jetbrains.kotlin.jvm" version libs.versions.kotlin } def isJava8or9 = System.getProperty("java.version").startsWith("1.8") || System.getProperty("java.version").startsWith("9") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d5671d4350..59689e200f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,6 +6,7 @@ kotlin = "1.8.0" kotlinx-coroutines = "1.6.4" kotlinx-serialization = "1.4.1" kotlinx-atomicfu = "0.19.0" +dokka = "1.7.20" kover = "0.6.1" kover-agent = "1.0.692" node = "16.9.1" From cc579c6d56853849c1450b97351071a4183a03e1 Mon Sep 17 00:00:00 2001 From: soywiz Date: Tue, 24 Jan 2023 11:57:36 +0100 Subject: [PATCH 3/4] Deprecate android indirect --- .../src/main/kotlin/com/soywiz/korge/gradle/KorgeExtension.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeExtension.kt b/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeExtension.kt index a37a301d70..6ed0dd9176 100644 --- a/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeExtension.kt +++ b/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeExtension.kt @@ -183,6 +183,7 @@ class KorgeExtension(val project: Project) { * Android SDK not required if tasks are not executed. * The project can be opened on Android Studio. */ + @Deprecated("Use targetAndroidDirect instead") fun targetAndroidIndirect() { target("android") { project.configureAndroidIndirect() From 54aad08838a3d8e3f4f468f356aee12e276d3334 Mon Sep 17 00:00:00 2001 From: soywiz Date: Tue, 24 Jan 2023 11:58:07 +0100 Subject: [PATCH 4/4] Support automatic version substitution and substitute korge artifact --- .../com/soywiz/korge/gradle/KorgeExtension.kt | 8 +++++++ .../soywiz/korge/gradle/KorgeGradlePlugin.kt | 21 +++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeExtension.kt b/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeExtension.kt index 6ed0dd9176..c113b54c04 100644 --- a/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeExtension.kt +++ b/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeExtension.kt @@ -284,6 +284,14 @@ class KorgeExtension(val project: Project) { var sourceMaps: Boolean = false var supressWarnings: Boolean = false + val versionSubstitutions = LinkedHashMap().also { + it["com.soywiz.korlibs.korge2:korge"] = BuildVersions.KORGE + } + + fun versionSubstitution(groupName: String, version: String) { + versionSubstitutions[groupName] = version + } + /** * Determines whether the standard console will be available on Windows or not * by setting the windows subsystem to console or windows. diff --git a/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeGradlePlugin.kt b/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeGradlePlugin.kt index fa9b99f3f7..31feff41c5 100644 --- a/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeGradlePlugin.kt +++ b/buildSrc/src/main/kotlin/com/soywiz/korge/gradle/KorgeGradlePlugin.kt @@ -3,6 +3,7 @@ package com.soywiz.korge.gradle import com.soywiz.korge.gradle.targets.* import com.soywiz.korge.gradle.targets.linux.LDLibraries import com.soywiz.korge.gradle.util.* +import com.soywiz.korlibs.* import org.gradle.api.* import org.gradle.api.Project import org.gradle.api.plugins.* @@ -122,10 +123,30 @@ open class KorgeGradlePlugin : Plugin { //TODO PABLO changed to have the android tasks enabled again KorgeGradleApply(project).apply(includeIndirectAndroid = true) + project.configureAutoVersions() + //for (res in project.getResourcesFolders()) println("- $res") } } +fun Project.configureAutoVersions() { + allprojectsThis { + configurations.all { + it.resolutionStrategy.eachDependency { details -> + //println("DETAILS: ${details.requested} : '${details.requested.group}' : '${details.requested.name}' : '${details.requested.version}'") + val groupWithName = "${details.requested.group}:${details.requested.name}" + if (details.requested.version.isNullOrBlank()) { + val version = korge.versionSubstitutions[groupWithName] + if (version != null) { + details.useVersion(version) + details.because("korge.versionSubstitutions: '$groupWithName' -> $version") + } + } + } + } + } +} + fun Project.configureBuildScriptClasspathTasks() { // https://gist.github.com/xconnecting/4037220 val printBuildScriptClasspath = project.tasks.createThis("printBuildScriptClasspath") {