Fix issues with LWJGL tinyfd

This commit is contained in:
Petr Mrázek 2020-04-19 21:06:01 +02:00
parent 78574131fa
commit 3cad18d976
3 changed files with 430 additions and 12 deletions

View File

@ -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()

View File

@ -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):

334
static/lwjgl-3.2.2.json Normal file
View File

@ -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"
}