diff --git a/generateMojang.py b/generateMojang.py index 7d11c30..e458ca1 100755 --- a/generateMojang.py +++ b/generateMojang.py @@ -4,11 +4,11 @@ import os from collections import defaultdict, namedtuple from operator import attrgetter from pprint import pprint -from typing import Optional +from typing import Optional, List from meta.common import ensure_component_dir, polymc_path, upstream_path, static_path from meta.common.mojang import VERSION_MANIFEST_FILE, MINECRAFT_COMPONENT, LWJGL3_COMPONENT, LWJGL_COMPONENT, \ - STATIC_LWJGL322_FILE, STATIC_OVERRIDES_FILE, VERSIONS_DIR, LIBRARY_PATCHES_FILE + STATIC_OVERRIDES_FILE, VERSIONS_DIR, LIBRARY_PATCHES_FILE from meta.model import MetaVersion, Library, GradleSpecifier, MojangLibraryDownloads, MojangArtifact, Dependency, \ MetaPackage, MojangRules from meta.model.mojang import MojangIndexWrap, MojangIndex, MojangVersion, LegacyOverrideIndex, LibraryPatches @@ -62,7 +62,7 @@ LOG4J_HASHES = { PASS_VARIANTS = [ # "beed62ec1d40ae89d808fe70b83df6bd4b3be81f", # 3.3.1 (2022-05-18 13:51:54+00:00) split natives, without workaround "8836c419f90f69a278b97d945a34af165c24ff60", # 3.3.1 (2022-05-18 13:51:54+00:00) split natives, with workaround - "e13abfa8c5f45ae4a7e87e0b388de46066d31a67", # 3.2.2 (2019-06-19 11:44:29+00:00) our fixed version + "ea4973ebc9eadf059f30f0958c89f330898bff51", # 3.2.2 (2019-07-04 14:41:05+00:00) will be patched by us, missing tinyfd "8e1f89b96c6f583a0e494949c75115ed13412ba1", # 3.2.1 (2019-02-13 16:12:08+00:00) "7ed2372097dbd635f5aef3137711141ce91c4ee9", # 3.1.6 (2018-11-29 13:11:38+00:00) "5a006b7c72a080ac673fff02b259f3127c376655", # 3.1.2 (2018-06-21 12:57:11+00:00) @@ -81,7 +81,6 @@ BAD_VARIANTS = [ "4b73fccb9e5264c2068bdbc26f9651429abbf21a", # 3.2.2 (2021-08-25 14:41:57+00:00) only linux, windows "090cec3577ecfe438b890b2a9410ea07aa725e16", # 3.2.2 (2021-04-07 14:04:09+00:00) only linux, windows "ab463e9ebc6a36abf22f2aa27b219dd372ff5069", # 3.2.2 (2019-07-19 09:25:47+00:00) only linux, windows - "ea4973ebc9eadf059f30f0958c89f330898bff51", # 3.2.2 (2019-07-04 14:41:05+00:00) fine but replaced by fixed version "8bde129ef334023c365bd7f57512a4bf5e72a378", # 3.2.1 (2019-04-18 11:05:19+00:00) only osx, windows "65b2ce1f2b869bf98b8dd7ec0bc6956967d04811", # 3.1.6 (2019-04-18 11:05:19+00:00) only linux "f04052162b50fa1433f67e1a90bc79466c4ab776", # 2.9.0 (2013-10-21 16:34:47+00:00) only linux, windows @@ -181,15 +180,24 @@ def is_macos_only(rules: Optional[MojangRules]): return False -def patch_library(lib: Library, patches: LibraryPatches): - new_libraries = [] - for patch in patches: - if lib.name in patch.match: - if patch.override: - lib.merge(patch.override) +def patch_library(lib: Library, patches: LibraryPatches) -> List[Library]: + to_patch = [lib] + + new_libraries = [] + while to_patch: + target = to_patch.pop(0) + + for patch in patches: + if patch.applies(target): + if patch.override: + target.merge(patch.override) + + if patch.additionalLibraries: + additional_copy = copy.deepcopy(patch.additionalLibraries) + new_libraries += set(additional_copy) + if patch.patchAdditionalLibraries: + to_patch += additional_copy - if patch.additionalLibraries: - new_libraries += patch.additionalLibraries return new_libraries @@ -203,21 +211,13 @@ def process_single_variant(lwjgl_variant: MetaVersion, patches: LibraryPatches): v.libraries += list(dict.fromkeys(new_libraries)) if lwjgl_version[0] == '2': - static_filename = os.path.join(STATIC_DIR, LWJGL_COMPONENT, f"{lwjgl_version}.json") filename = os.path.join(PMC_DIR, LWJGL_COMPONENT, f"{lwjgl_version}.json") - if os.path.isfile(static_filename): - v = MetaVersion.parse_file(static_filename) - print("LWJGL2 is static:", v.version) v.name = 'LWJGL 2' v.uid = LWJGL_COMPONENT v.conflicts = [Dependency(uid=LWJGL3_COMPONENT)] elif lwjgl_version[0] == '3': - static_filename = os.path.join(STATIC_DIR, LWJGL3_COMPONENT, f"{lwjgl_version}.json") filename = os.path.join(PMC_DIR, LWJGL3_COMPONENT, f"{lwjgl_version}.json") - if os.path.isfile(static_filename): - v = MetaVersion.parse_file(static_filename) - print("LWJGL3 is static:", v.version) v.name = 'LWJGL 3' v.uid = LWJGL3_COMPONENT @@ -417,10 +417,6 @@ def main(): override.apply_onto_meta_version(v) v.write(out_filename) - # Add our own 3.2.2, which includes the missing tinyfd libraries - lwjgl322 = MetaVersion.parse_file(os.path.join(STATIC_DIR, STATIC_LWJGL322_FILE)) - add_lwjgl_version(lwjglVersionVariants, lwjgl322) - for lwjglVersionVariant in lwjglVersionVariants: decided_variant = None passed_variants = 0 diff --git a/meta/common/mojang.py b/meta/common/mojang.py index 0b8dc02..a2d39e9 100644 --- a/meta/common/mojang.py +++ b/meta/common/mojang.py @@ -7,7 +7,6 @@ VERSIONS_DIR = join(BASE_DIR, "versions") ASSETS_DIR = join(BASE_DIR, "assets") STATIC_EXPERIMENTS_FILE = join(BASE_DIR, "minecraft-experiments.json") -STATIC_LWJGL322_FILE = join(BASE_DIR, "lwjgl-3.2.2.json") STATIC_OVERRIDES_FILE = join(BASE_DIR, "minecraft-legacy-override.json") LIBRARY_PATCHES_FILE = join(BASE_DIR, "library-patches.json") diff --git a/meta/model/mojang.py b/meta/model/mojang.py index e99145c..6581417 100644 --- a/meta/model/mojang.py +++ b/meta/model/mojang.py @@ -114,6 +114,10 @@ class LibraryPatch(MetaBase): match: List[GradleSpecifier] override: Optional[Library] additionalLibraries: Optional[List[Library]] + patchAdditionalLibraries: bool = Field(False) + + def applies(self, target: Library) -> bool: + return target.name in self.match class LibraryPatches(MetaBase): diff --git a/static/mojang/library-patches.json b/static/mojang/library-patches.json index 2eac327..baa0789 100644 --- a/static/mojang/library-patches.json +++ b/static/mojang/library-patches.json @@ -1,4 +1,55 @@ [ + { + "_comment": "Add missing tinyfd to the broken LWJGL 3.2.2 variant", + "match": [ + "org.lwjgl:lwjgl:3.2.2" + ], + "additionalLibraries": [ + { + "downloads": { + "artifact": { + "sha1": "fcbe606c8f8da6f8f9a05e2c540eb1ee8632b0e9", + "size": 7092, + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2.jar" + } + }, + "name": "org.lwjgl:lwjgl-tinyfd:3.2.2" + }, + { + "downloads": { + "artifact": { + "sha1": "fcbe606c8f8da6f8f9a05e2c540eb1ee8632b0e9", + "size": 7092, + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2.jar" + }, + "classifiers": { + "natives-linux": { + "sha1": "39e35b161c130635d9c8918ce04e887a30c5b687", + "size": 38804, + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2-natives-linux.jar" + }, + "natives-macos": { + "sha1": "46d0798228b8a28e857a2a0f02310fd6ba2a4eab", + "size": 42136, + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2-natives-macos.jar" + }, + "natives-windows": { + "sha1": "e9115958773644e863332a6a06488d26f9e1fc9f", + "size": 208314, + "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2-natives-windows.jar" + } + } + }, + "name": "org.lwjgl:lwjgl-tinyfd:3.2.2", + "natives": { + "linux": "natives-linux", + "osx": "natives-macos", + "windows": "natives-windows" + } + } + ], + "patchAdditionalLibraries": true + }, { "_comment": "Add additional library just for osx-arm64. No override needed", "match": [ diff --git a/static/mojang/lwjgl-3.2.2.json b/static/mojang/lwjgl-3.2.2.json deleted file mode 100644 index e910729..0000000 --- a/static/mojang/lwjgl-3.2.2.json +++ /dev/null @@ -1,322 +0,0 @@ - -{ - "conflicts": [ - { - "uid": "org.lwjgl" - } - ], - "formatVersion": 1, - "libraries": [ - { - "downloads": { - "artifact": { - "sha1": "d3ad4df38e400b8afba1de63f84338809399df5b", - "size": 108907, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2.jar" - } - }, - "name": "org.lwjgl:lwjgl-glfw:3.2.2" - }, - { - "downloads": { - "artifact": { - "sha1": "d3ad4df38e400b8afba1de63f84338809399df5b", - "size": 108907, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2.jar" - }, - "classifiers": { - "natives-linux": { - "sha1": "0957733f26a6661d4883da0335f7ef46d3bbbd7d", - "size": 159198, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2-natives-linux.jar" - }, - "natives-macos": { - "sha1": "98f745038d17ac3192fcd01dc44126b03ec1570d", - "size": 67311, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2-natives-macos.jar" - }, - "natives-windows": { - "sha1": "dc6826d636bf796b33a49038c354210e661bfc17", - "size": 266648, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-glfw/3.2.2/lwjgl-glfw-3.2.2-natives-windows.jar" - } - } - }, - "name": "org.lwjgl:lwjgl-glfw:3.2.2", - "natives": { - "linux": "natives-linux", - "osx": "natives-macos", - "windows": "natives-windows" - } - }, - { - "downloads": { - "artifact": { - "sha1": "ee8e57a79300f78294576d87c4a587f8c99402e2", - "size": 34848, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-jemalloc/3.2.2/lwjgl-jemalloc-3.2.2.jar" - } - }, - "name": "org.lwjgl:lwjgl-jemalloc:3.2.2" - }, - { - "downloads": { - "artifact": { - "sha1": "ee8e57a79300f78294576d87c4a587f8c99402e2", - "size": 34848, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-jemalloc/3.2.2/lwjgl-jemalloc-3.2.2.jar" - }, - "classifiers": { - "natives-linux": { - "sha1": "268c08a150347e04e44ba56e359d62c9b78669df", - "size": 156173, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-jemalloc/3.2.2/lwjgl-jemalloc-3.2.2-natives-linux.jar" - }, - "natives-macos": { - "sha1": "805f5a10465375ba034b27b72331912fd2846690", - "size": 117127, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-jemalloc/3.2.2/lwjgl-jemalloc-3.2.2-natives-macos.jar" - }, - "natives-windows": { - "sha1": "338b25b99da3ba5f441f6492f2ce2a9c608860ed", - "size": 220623, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-jemalloc/3.2.2/lwjgl-jemalloc-3.2.2-natives-windows.jar" - } - } - }, - "name": "org.lwjgl:lwjgl-jemalloc:3.2.2", - "natives": { - "linux": "natives-linux", - "osx": "natives-macos", - "windows": "natives-windows" - } - }, - { - "downloads": { - "artifact": { - "sha1": "2b772a102b0a11ee5f2109a5b136f4dc7c630827", - "size": 80012, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2.jar" - } - }, - "name": "org.lwjgl:lwjgl-openal:3.2.2" - }, - { - "downloads": { - "artifact": { - "sha1": "2b772a102b0a11ee5f2109a5b136f4dc7c630827", - "size": 80012, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2.jar" - }, - "classifiers": { - "natives-linux": { - "sha1": "0364f9f5c3947393083ab5f37a571f5603aadd0b", - "size": 590997, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2-natives-linux.jar" - }, - "natives-macos": { - "sha1": "a97b6345d5a9ddf889e262bd7ad8eed43b1bb063", - "size": 528006, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2-natives-macos.jar" - }, - "natives-windows": { - "sha1": "ec20a7d42a2438528fca87e60b1705f1e2339ddb", - "size": 1310102, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-openal/3.2.2/lwjgl-openal-3.2.2-natives-windows.jar" - } - } - }, - "name": "org.lwjgl:lwjgl-openal:3.2.2", - "natives": { - "linux": "natives-linux", - "osx": "natives-macos", - "windows": "natives-windows" - } - }, - { - "downloads": { - "artifact": { - "sha1": "6ac5bb88b44c43ea195a570aab059f63da004cd8", - "size": 929780, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2.jar" - } - }, - "name": "org.lwjgl:lwjgl-opengl:3.2.2" - }, - { - "downloads": { - "artifact": { - "sha1": "6ac5bb88b44c43ea195a570aab059f63da004cd8", - "size": 929780, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2.jar" - }, - "classifiers": { - "natives-linux": { - "sha1": "338d33387919cb3f4cdba143c2b738a71ccfda60", - "size": 77392, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2-natives-linux.jar" - }, - "natives-macos": { - "sha1": "cf4f43e69ee70d8ebfbb6ba93dec9016339e4fdc", - "size": 38989, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2-natives-macos.jar" - }, - "natives-windows": { - "sha1": "d8dcdc91066cae2d2d8279cb4a9f9f05d9525826", - "size": 170798, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-opengl/3.2.2/lwjgl-opengl-3.2.2-natives-windows.jar" - } - } - }, - "name": "org.lwjgl:lwjgl-opengl:3.2.2", - "natives": { - "linux": "natives-linux", - "osx": "natives-macos", - "windows": "natives-windows" - } - }, - { - "downloads": { - "artifact": { - "sha1": "3b8e6ebc5851dd3d17e37e5cadce2eff2a429f0f", - "size": 104469, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2.jar" - } - }, - "name": "org.lwjgl:lwjgl-stb:3.2.2" - }, - { - "downloads": { - "artifact": { - "sha1": "3b8e6ebc5851dd3d17e37e5cadce2eff2a429f0f", - "size": 104469, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2.jar" - }, - "classifiers": { - "natives-linux": { - "sha1": "172c52e586fecf43f759bc4f70a778c01f6fdcc1", - "size": 203476, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2-natives-linux.jar" - }, - "natives-macos": { - "sha1": "ee059b129b09fdecbd8595273926ae930bf5a5d7", - "size": 196796, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2-natives-macos.jar" - }, - "natives-windows": { - "sha1": "811f705cbb29e8ae8d60bdf8fdd38c0c123ad3ef", - "size": 465810, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-stb/3.2.2/lwjgl-stb-3.2.2-natives-windows.jar" - } - } - }, - "name": "org.lwjgl:lwjgl-stb:3.2.2", - "natives": { - "linux": "natives-linux", - "osx": "natives-macos", - "windows": "natives-windows" - } - }, - { - "downloads": { - "artifact": { - "sha1": "fcbe606c8f8da6f8f9a05e2c540eb1ee8632b0e9", - "size": 7092, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2.jar" - } - }, - "name": "org.lwjgl:lwjgl-tinyfd:3.2.2" - }, - { - "downloads": { - "artifact": { - "sha1": "fcbe606c8f8da6f8f9a05e2c540eb1ee8632b0e9", - "size": 7092, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2.jar" - }, - "classifiers": { - "javadoc": { - "sha1": "ba657a222ee267b75fa81ae5ab29ae29b50f725f", - "size": 368913, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2-javadoc.jar" - }, - "natives-linux": { - "sha1": "39e35b161c130635d9c8918ce04e887a30c5b687", - "size": 38804, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2-natives-linux.jar" - }, - "natives-macos": { - "sha1": "46d0798228b8a28e857a2a0f02310fd6ba2a4eab", - "size": 42136, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2-natives-macos.jar" - }, - "natives-windows": { - "sha1": "e9115958773644e863332a6a06488d26f9e1fc9f", - "size": 208314, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2-natives-windows.jar" - }, - "sources": { - "sha1": "2fe76dcf2ca02ae0e64ac7c69eb251c09df0e922", - "size": 5034, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl-tinyfd/3.2.2/lwjgl-tinyfd-3.2.2-sources.jar" - } - } - }, - "name": "org.lwjgl:lwjgl-tinyfd:3.2.2", - "natives": { - "linux": "natives-linux", - "osx": "natives-macos", - "windows": "natives-windows" - } - }, - { - "downloads": { - "artifact": { - "sha1": "8ad6294407e15780b43e84929c40e4c5e997972e", - "size": 321900, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2.jar" - } - }, - "name": "org.lwjgl:lwjgl:3.2.2" - }, - { - "downloads": { - "artifact": { - "sha1": "8ad6294407e15780b43e84929c40e4c5e997972e", - "size": 321900, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2.jar" - }, - "classifiers": { - "natives-linux": { - "sha1": "ae7976827ca2a3741f6b9a843a89bacd637af350", - "size": 124776, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2-natives-linux.jar" - }, - "natives-macos": { - "sha1": "bbfb75693bdb714c0c69c2c9f9be73d259b43b62", - "size": 48462, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2-natives-macos.jar" - }, - "natives-windows": { - "sha1": "05359f3aa50d36352815fc662ea73e1c00d22170", - "size": 279593, - "url": "https://libraries.minecraft.net/org/lwjgl/lwjgl/3.2.2/lwjgl-3.2.2-natives-windows.jar" - } - } - }, - "name": "org.lwjgl:lwjgl:3.2.2", - "natives": { - "linux": "natives-linux", - "osx": "natives-macos", - "windows": "natives-windows" - } - } - ], - "name": "LWJGL 3", - "order": -1, - "releaseTime": "2019-06-19T11:44:29+00:00", - "type": "release", - "uid": "org.lwjgl3", - "version": "3.2.2", - "volatile": true -}