Files
Bitsy 82ffd7cf4d feat: migrate to Compose Multiplatform 1.12.0 + SDL3 3.4.16
Upstream baseline
- Pin both vendored refs to the STABLE v1.12.0 tag (core + umbrella); the
  native and JVM-parity legs are back in lockstep, no dev-build skew.
- Catalog: compose 1.12.0, composeRuntime 1.12.0. material3 stays
  1.12.0-alpha03 - that IS the version CMP 1.12.0 ships (its own train).
- Re-synced 1560 vendored files; drift + vendor-clean both clean.
- Retire the SelectionLayout.kt manual vendor: upstream fixed the same
  out-of-bounds at the source (lastSlot = currentSlot, not currentSlot + 1),
  so the fork's index clamps are redundant. Back to verbatim vendoring.
- Re-stamp 10 manual vendors to @ v1.12.0 (upstream unchanged base..pin).
- Regenerate the klib API dumps. These had already drifted on main (the last
  dump predates the scrollbar / IME changes), so the diff covers that too.

SDL3 3.4.16, skiko fork 0.150.1-mingw.2
- Rebuild the static libSDL3.a from release-3.4.16.
- CMP 1.12.0 uses skiko 0.150.1, unchanged, so the fork's Skia base still
  matches; bump to the -mingw.2 build and centralise it as `skikoMingw` in
  the version catalog instead of three hardcoded copies.
- Resolve the fork from the PUBLIC maven.bitsycore.com/releases instead of
  the credentialed GitHub Packages repo: building the Windows target no
  longer needs a GitHub token.

Gradle module paths mirror the directory
- Drop every projectDir redirect: :ui -> :compose:ui:ui,
  :animation-core -> :compose:animation:animation-core, and so on.
- INVARIANT (documented in settings.gradle.kts + CLAUDE.md): the leaf
  directory IS the published artifactId. KMP derives a target publication's
  coordinate as <project.name>-<target>, and a target disabled on the
  building host (all Apple targets on Windows) has no publication object to
  retarget - while the root kotlinMultiplatform metadata, which the WINDOWS
  publish job owns, still emits an available-at for it. A mismatched leaf
  silently ships a root module pointing at a nonexistent <leaf>-macosarm64.
  So compose/desktop/native/window and components/resources/library are
  renamed to their artifactIds. Published coordinates are unchanged.

Manual-vendor audit
- New scripts/compose-fork/audit-exclusions.py: classifies every `!` manifest
  exclusion as manual vendor (VENDOR-BASE, drift-tracked), reimplementation
  (VENDOR-REIMPL, deliberately not tracked), or orphan, and fails on any
  unclassified one.
- 14 project reimplementations were invisible to the drift checker by
  accident; mark them VENDOR-REIMPL. None needed reconciling (all verified
  <= 0.53 similarity to their upstream counterparts, none changed upstream
  between the old pin and v1.12.0).

Fix the JVM apidemo build
- Declare components-resources on jvmMain (decodeToImageBitmap /
  decodeToSvgPainter) and add the two missing cross-package imports. The JVM
  parity target had never compiled.

Verified on Windows: both native executables link and render, apidemo JVM
builds and launches, apiCheck green, common metadata compiles (the Windows
publish gate), publishToMavenLocal emits the same coordinates as before.
2026-09-12 00:03:13 +02:00

109 lines
12 KiB
Plaintext

# Files vendored VERBATIM from JetBrains/compose-multiplatform (the umbrella repo -
# NOT compose-multiplatform-core) into :components-resources. The official
# org.jetbrains.compose.components:components-resources artifact publishes NO
# mingwX64/linux variants, so the runtime library is vendored and the platform
# actuals are project code:
# src/nativeMain - ResourceReader (data.kres), getSystemEnvironment (SDL),
# pure-Kotlin DomXmlParser (upstream's is Darwin NSXMLParser),
# and the Font/Image resource actuals: renderer-agnostic
# project code (image decode via the :ui-graphics Skia
# decoder, Font via the project font registry)
# Re-sync: python scripts/compose-fork/sync.py components/resources/library
SET_REPO=https://github.com/JetBrains/compose-multiplatform@<COMPOSE_REF>
SET_FOLDER=components/resources/library/src
commonMain/kotlin/ -> src/vendor/common/kotlin/
# | commonMain/kotlin/org/jetbrains/compose/resources/FontResources.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/FontResources.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/ImageDecoders.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/ImageDecoders.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/ImageResources.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/ImageResources.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/PluralStringResources.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/PluralStringResources.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/Qualifier.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/Qualifier.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/Resource.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/Resource.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/ResourceCaches.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/ResourceCaches.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/ResourceContentHash.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/ResourceContentHash.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/ResourceReader.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/ResourceReader.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/ResourceState.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/ResourceState.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/StringArrayResources.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/StringArrayResources.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/StringResources.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/StringResources.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/StringResourcesUtils.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/StringResourcesUtils.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/plural/CLDRPluralRuleLists.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/plural/CLDRPluralRuleLists.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/plural/PluralCategory.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/plural/PluralCategory.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/plural/PluralRule.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/plural/PluralRule.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/plural/PluralRuleList.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/plural/PluralRuleList.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/vector/ValueParsers.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/vector/ValueParsers.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/vector/XmlVectorParser.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/vector/XmlVectorParser.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/Element.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/vector/xmldom/Element.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/MalformedXMLException.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/vector/xmldom/MalformedXMLException.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/Node.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/vector/xmldom/Node.kt
# | commonMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/NodeList.kt -> src/vendor/common/kotlin/org/jetbrains/compose/resources/vector/xmldom/NodeList.kt
blockingMain/kotlin/ -> src/vendor/native/kotlin/
# | blockingMain/kotlin/org/jetbrains/compose/resources/ResourceState.blocking.kt -> src/vendor/native/kotlin/org/jetbrains/compose/resources/ResourceState.blocking.kt
nativeMain/kotlin/ -> src/vendor/native/kotlin/
# | nativeMain/kotlin/org/jetbrains/compose/resources/ImageResources.native.kt -> src/vendor/native/kotlin/org/jetbrains/compose/resources/ImageResources.native.kt
# | nativeMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/DomXmlParser.kt -> src/vendor/native/kotlin/org/jetbrains/compose/resources/vector/xmldom/DomXmlParser.kt
# Darwin-only (Foundation NSXMLParser) - replaced by a pure-Kotlin project parser
# in src/nativeMain so mingwX64/linux compile.
!nativeMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/DomXmlParser.kt
# Portable pieces of upstream skikoMain (no Skia references - pure delegation /
# runtime-only) - every native target gets them.
skikoMain/kotlin/org/jetbrains/compose/resources/ImageDecoders.skiko.kt -> src/vendor/native/kotlin/org/jetbrains/compose/resources/ImageDecoders.skiko.kt
skikoMain/kotlin/org/jetbrains/compose/resources/ResourceReader.skiko.kt -> src/vendor/native/kotlin/org/jetbrains/compose/resources/ResourceReader.skiko.kt
# Skia-bound pieces - upstream's skikoMain actuals rely on Compose-Desktop Skia
# extensions (SystemFont / toComposeImageBitmap / nativeCanvas) this port's :ui
# doesn't expose. The module's own Font/Image actuals (src/nativeMain/kotlin/)
# use pure project APIs (IconFont / NamedFont / decodeEncodedImageBitmap)
# instead, so opt the upstream Skia-bound files out.
!skikoMain/kotlin/org/jetbrains/compose/resources/ImageResources.skiko.kt
!skikoMain/kotlin/org/jetbrains/compose/resources/FontResources.skiko.kt
!skikoMain/kotlin/org/jetbrains/compose/resources/SvgPainter.kt
!skikoMain/kotlin/org/jetbrains/compose/resources/DrawCache.kt
# >>> ---- DIAGNOSTIC GAPS ---- <<<<
# androidMain (5)
# | androidMain/kotlin/org/jetbrains/compose/resources/AndroidContextProvider.kt -> src/vendor/android/kotlin/org/jetbrains/compose/resources/AndroidContextProvider.kt
# | androidMain/kotlin/org/jetbrains/compose/resources/FontResources.android.kt -> src/vendor/android/kotlin/org/jetbrains/compose/resources/FontResources.android.kt
# | androidMain/kotlin/org/jetbrains/compose/resources/ImageResources.android.kt -> src/vendor/android/kotlin/org/jetbrains/compose/resources/ImageResources.android.kt
# | androidMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.android.kt -> src/vendor/android/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.android.kt
# | androidMain/kotlin/org/jetbrains/compose/resources/ResourceReader.android.kt -> src/vendor/android/kotlin/org/jetbrains/compose/resources/ResourceReader.android.kt
# desktopMain (3)
# | desktopMain/kotlin/org/jetbrains/compose/resources/ResourceCaches.desktop.kt -> src/vendor/desktop/kotlin/org/jetbrains/compose/resources/ResourceCaches.desktop.kt
# | desktopMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.desktop.kt -> src/vendor/desktop/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.desktop.kt
# | desktopMain/kotlin/org/jetbrains/compose/resources/ResourceReader.desktop.kt -> src/vendor/desktop/kotlin/org/jetbrains/compose/resources/ResourceReader.desktop.kt
# iosMain (2)
# | iosMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.ios.kt -> src/vendor/native/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.ios.kt
# | iosMain/kotlin/org/jetbrains/compose/resources/ResourceReader.ios.kt -> src/vendor/native/kotlin/org/jetbrains/compose/resources/ResourceReader.ios.kt
# jsMain (5)
# | jsMain/kotlin/org/jetbrains/compose/resources/ImageResources.js.kt -> src/vendor/js/kotlin/org/jetbrains/compose/resources/ImageResources.js.kt
# | jsMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.js.kt -> src/vendor/js/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.js.kt
# | jsMain/kotlin/org/jetbrains/compose/resources/ResourceReader.js.kt -> src/vendor/js/kotlin/org/jetbrains/compose/resources/ResourceReader.js.kt
# | jsMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/ElementImpl.kt -> src/vendor/js/kotlin/org/jetbrains/compose/resources/vector/xmldom/ElementImpl.kt
# | jsMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/NodeImpl.kt -> src/vendor/js/kotlin/org/jetbrains/compose/resources/vector/xmldom/NodeImpl.kt
# jvmAndAndroidMain (3)
# | jvmAndAndroidMain/kotlin/org/jetbrains/compose/resources/ImageResources.jvmAndAndroid.kt -> src/vendor/jvmAndAndroid/kotlin/org/jetbrains/compose/resources/ImageResources.jvmAndAndroid.kt
# | jvmAndAndroidMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/ElementImpl.kt -> src/vendor/jvmAndAndroid/kotlin/org/jetbrains/compose/resources/vector/xmldom/ElementImpl.kt
# | jvmAndAndroidMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/NodeImpl.kt -> src/vendor/jvmAndAndroid/kotlin/org/jetbrains/compose/resources/vector/xmldom/NodeImpl.kt
# macosMain (2)
# | macosMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.macos.kt -> src/vendor/native/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.macos.kt
# | macosMain/kotlin/org/jetbrains/compose/resources/ResourceReader.macos.kt -> src/vendor/native/kotlin/org/jetbrains/compose/resources/ResourceReader.macos.kt
# skikoMain (4)
# | skikoMain/kotlin/org/jetbrains/compose/resources/DrawCache.kt -> src/vendor/skikoRenderer/kotlin/org/jetbrains/compose/resources/DrawCache.kt
# | skikoMain/kotlin/org/jetbrains/compose/resources/FontResources.skiko.kt -> src/vendor/skikoRenderer/kotlin/org/jetbrains/compose/resources/FontResources.skiko.kt
# | skikoMain/kotlin/org/jetbrains/compose/resources/ImageResources.skiko.kt -> src/vendor/skikoRenderer/kotlin/org/jetbrains/compose/resources/ImageResources.skiko.kt
# | skikoMain/kotlin/org/jetbrains/compose/resources/SvgPainter.kt -> src/vendor/skikoRenderer/kotlin/org/jetbrains/compose/resources/SvgPainter.kt
# wasmJsMain (6)
# | wasmJsMain/kotlin/org/jetbrains/compose/resources/ImageResources.wasmJs.kt -> src/vendor/wasmJs/kotlin/org/jetbrains/compose/resources/ImageResources.wasmJs.kt
# | wasmJsMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.wasmJs.kt -> src/vendor/wasmJs/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.wasmJs.kt
# | wasmJsMain/kotlin/org/jetbrains/compose/resources/ResourceReader.wasmJs.kt -> src/vendor/wasmJs/kotlin/org/jetbrains/compose/resources/ResourceReader.wasmJs.kt
# | wasmJsMain/kotlin/org/jetbrains/compose/resources/WasmByteArrayUtils.kt -> src/vendor/wasmJs/kotlin/org/jetbrains/compose/resources/WasmByteArrayUtils.kt
# | wasmJsMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/ElementImpl.kt -> src/vendor/wasmJs/kotlin/org/jetbrains/compose/resources/vector/xmldom/ElementImpl.kt
# | wasmJsMain/kotlin/org/jetbrains/compose/resources/vector/xmldom/NodeImpl.kt -> src/vendor/wasmJs/kotlin/org/jetbrains/compose/resources/vector/xmldom/NodeImpl.kt
# webMain (3)
# | webMain/kotlin/org/jetbrains/compose/resources/Resource.web.kt -> src/vendor/web/kotlin/org/jetbrains/compose/resources/Resource.web.kt
# | webMain/kotlin/org/jetbrains/compose/resources/ResourceState.web.kt -> src/vendor/web/kotlin/org/jetbrains/compose/resources/ResourceState.web.kt
# | webMain/kotlin/org/jetbrains/compose/resources/ResourceWebCache.web.kt -> src/vendor/web/kotlin/org/jetbrains/compose/resources/ResourceWebCache.web.kt
# <<< ---- DIAGNOSTIC GAPS ---- >>>>