From 3cad18d976e08bbea1930a3caba58b38ff09d8a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 19 Apr 2020 21:06:01 +0200 Subject: [PATCH] Fix issues with LWJGL tinyfd --- generateMojang.py | 106 +++++++++++-- metautil.py | 2 +- static/lwjgl-3.2.2.json | 334 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 430 insertions(+), 12 deletions(-) create mode 100644 static/lwjgl-3.2.2.json diff --git a/generateMojang.py b/generateMojang.py index d887d4a..353271d 100755 --- a/generateMojang.py +++ b/generateMojang.py @@ -14,6 +14,11 @@ from metautil import * from distutils import version +from collections import defaultdict +from collections import namedtuple +from datetime import datetime +import hashlib + def addOrGetBucket(buckets, rules): ruleHash = None if rules: @@ -34,12 +39,35 @@ def addOrGetBucket(buckets, rules): buckets[ruleHash] = bucket return bucket -def addLWJGLVersion(versions, bucket): - if bucket.version in versions: - if bucket.releaseTime < versions[bucket.version].releaseTime: - versions[bucket.version].releaseTime = bucket.releaseTime - else: - versions[bucket.version] = bucket +def hashVersion(lwjgl): + lwjglObjectCopy = copy.deepcopy(lwjgl) + lwjglObjectCopy.releaseTime = datetime.fromtimestamp(0) + return hashlib.sha1(json.dumps(lwjglObjectCopy.to_json()).encode("utf-8", "strict")).hexdigest() + +def sort_libs_by_name(library): + return library.name + +LWJGLEntry = namedtuple('LWJGLEntry', ('version', 'sha1')) + +lwjglVersionVariants = defaultdict(list) + +def addLWJGLVersion(versionVariants, lwjglObject): + lwjglObjectCopy = copy.deepcopy(lwjglObject) + libraries = list(lwjglObjectCopy.libraries) + libraries.sort(key=sort_libs_by_name) + lwjglObjectCopy.libraries = libraries + + lwjglVersion = lwjglObjectCopy.version + lwjglObjectHash = hashVersion(lwjglObjectCopy) + found = False + for variant in versionVariants[lwjglVersion]: + existingHash = variant.sha1 + if lwjglObjectHash == existingHash: + found = True + break + if not found: + print("!!! New variant for LWJGL version %s" % (lwjglVersion)) + versionVariants[lwjglVersion].append(LWJGLEntry(version=lwjglObjectCopy, sha1=lwjglObjectHash)) def removePathsFromLib(lib): if mmcLib.downloads.artifact: @@ -81,7 +109,7 @@ with open("static/minecraft.json", 'r', encoding='utf-8') as legacyIndexFile: staticVersionlist = LegacyOverrideIndex(json.load(legacyIndexFile)) found_any_lwjgl3 = False -lwjglVersions = {} + for filename in os.listdir('upstream/mojang/versions'): with open("upstream/mojang/versions/" + filename) as json_file: print("Processing", filename) @@ -116,7 +144,7 @@ for filename in os.listdir('upstream/mojang/versions'): else: libs_minecraft.append(mmcLib) if len(buckets) == 1: - addLWJGLVersion(lwjglVersions, buckets[None]) + addLWJGLVersion(lwjglVersionVariants, buckets[None]) print("Found only candidate LWJGL", buckets[None].version) else: # multiple buckets for LWJGL. [None] is common to all, other keys are for different sets of rules @@ -128,7 +156,7 @@ for filename in os.listdir('upstream/mojang/versions'): keyBucket.libraries = sorted(keyBucket.libraries + buckets[None].libraries, key=itemgetter('name')) else: keyBucket.libraries = sorted(keyBucket.libraries, key=itemgetter('name')) - addLWJGLVersion(lwjglVersions, keyBucket) + addLWJGLVersion(lwjglVersionVariants, keyBucket) print("Found candidate LWJGL", keyBucket.version, key) # remove the common bucket... if None in buckets: @@ -178,8 +206,9 @@ for filename in os.listdir('upstream/mojang/versions'): with open(filenameOut, 'w') as outfile: json.dump(versionFile.to_json(), outfile, sort_keys=True, indent=4) -for lwjglVersion in lwjglVersions: - versionObj = lwjglVersions[lwjglVersion] +def processSingleVariant(lwjglVariant): + lwjglVersion = lwjglVariant.version + versionObj = copy.deepcopy(lwjglVariant) if lwjglVersion[0] == '2': filename = "multimc/org.lwjgl/%s.json" % lwjglVersion versionObj.name = 'LWJGL 2' @@ -220,6 +249,61 @@ for lwjglVersion in lwjglVersions: else: print("Skipped LWJGL", versionObj.version) + +passVariants = [ + "dc788960f7e74062aee7cee0e1e7d0a14c342418", # 2.9.0 + "cc1241e6cc967857961c7385ba078242d866d896", # 2.9.1 + "569845af361b8cd54de7153c142053425944da57", # 2.9.1-nightly-20131120 + "838930186ce1f4222f71b737ee17725d0fd14e5a", # 2.9.3 + "079b297aa801e551cc96b5e06c44e4a921807c8a", # 2.9.4-nightly-20150209 + "446142ccdcb27eca829be79702d6ff53420198a9", # 3.1.2 + "48c276ed559a4b7ca680770b110b9b60d0b2a3b9", # 3.1.6 + "4f9e33a93e5974e2ec433134983c110b3959aa31", # 3.2.1 + "15d5562e9a3d11edec17c8e2de084a96fe9f371d", # 3.2.2 - our fixed version +] + +badVariants = [ + "032bfe9afc34cf1271037f734a6e7a8835fdfff0", # 2.9.0 - duplication nation + "859f5679c60fce520a7c8cfe0c5663f848ff51ab", # 2.9.0 - broken natives + "7811cd3ba93467842b1823ca8e571f3d49421291", # 3.1.6 + "194e5109cbdfb8d5a7da918c449b7414cd609629", # 3.2.1 + "74f2ae137e9767f0cfbe10ca9db38adaba08a4a6", # 3.2.2 - missing tinyfd + "eaeeca768920d981bdc8ea698305f4e9723c6ba8", # 3.2.2 - missing osx natives + "8a85feb57480e9cbb0b9c54e7b1751816122cf97", # 3.2.2 - missing other osx natives +] + +# Add our own 3.2.2, with hookers and blackjack. +with open("static/lwjgl-3.2.2.json", 'r', encoding='utf-8') as lwjgl322file: + lwjgl322 = MultiMCVersionFile(json.load(lwjgl322file)) + addLWJGLVersion(lwjglVersionVariants, lwjgl322) + +for lwjglVersionVariant in lwjglVersionVariants: + decidedVariant = None + passedVariants = 0 + unknownVariants = 0 + print("%d variant(s) for LWJGL %s:" % (len(lwjglVersionVariants[lwjglVersionVariant]), lwjglVersionVariant)) + + for variant in lwjglVersionVariants[lwjglVersionVariant]: + if variant.sha1 in badVariants: + print("Variant %s ignored because it's marked as bad." % (variant.sha1)) + continue + if variant.sha1 in passVariants: + print("Variant %s accepted." % (variant.sha1)) + decidedVariant = variant + passedVariants += 1 + continue + + print("Variant %s:" % (variant.sha1)) + print(json.dumps(variant.version.to_json(), sort_keys=True, indent=4)) + print("") + unknownVariants += 1 + print("") + + if decidedVariant and passedVariants == 1 and unknownVariants == 0: + processSingleVariant(decidedVariant.version) + else: + raise Exception("No variant decided for version %s out of %d possible ones and %d unknown ones." % (lwjglVersionVariant, passedVariants, unknownVariants)) + lwjglSharedData = MultiMCSharedPackageData(uid = 'org.lwjgl', name = 'LWJGL 2') lwjglSharedData.recommended = ['2.9.4-nightly-20150209'] lwjglSharedData.write() diff --git a/metautil.py b/metautil.py index 3d0ab38..e228b11 100644 --- a/metautil.py +++ b/metautil.py @@ -261,7 +261,7 @@ class MultiMCVersionFile (VersionedJsonObject): type = StringProperty(exclude_if_none=True, default=None) addTraits = ListProperty(StringProperty, name="+traits", exclude_if_none=True, default=None) addTweakers = ListProperty(StringProperty, name="+tweakers", exclude_if_none=True, default=None) - order = IntegerProperty() + order = IntegerProperty(exclude_if_none=True, default=None) # Convert Mojang version file object to a MultiMC version file object def MojangToMultiMC (file, name, uid, version): diff --git a/static/lwjgl-3.2.2.json b/static/lwjgl-3.2.2.json new file mode 100644 index 0000000..5cfe630 --- /dev/null +++ b/static/lwjgl-3.2.2.json @@ -0,0 +1,334 @@ +{ + "formatVersion": 1, + "libraries": [ + { + "downloads": { + "artifact": { + "sha1": "39c7796b469a600f72380316f6b1f11db6c2c7c4", + "size": 208338, + "url": "https://libraries.minecraft.net/net/java/jinput/jinput/2.0.5/jinput-2.0.5.jar" + } + }, + "name": "net.java.jinput:jinput:2.0.5" + }, + { + "downloads": { + "artifact": { + "sha1": "e12fe1fda814bd348c1579329c86943d2cd3c6a6", + "size": 7508, + "url": "https://libraries.minecraft.net/net/java/jutils/jutils/1.0.0/jutils-1.0.0.jar" + } + }, + "name": "net.java.jutils:jutils:1.0.0" + }, + { + "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", + "releaseTime": "2019-06-24T12:52:52+00:00", + "type": "release", + "uid": "org.lwjgl", + "version": "3.2.2" +}