From adef8d673c93b5a1fdfcffa05aeb01af94f466d8 Mon Sep 17 00:00:00 2001 From: Trial97 Date: Fri, 10 May 2024 23:58:50 +0300 Subject: [PATCH] Mapped linux-arm variants to mojang provider Signed-off-by: Trial97 --- meta/run/generate_java.py | 181 ++++++++++++++++++++++++++------------ 1 file changed, 123 insertions(+), 58 deletions(-) diff --git a/meta/run/generate_java.py b/meta/run/generate_java.py index 110d871..fd32308 100644 --- a/meta/run/generate_java.py +++ b/meta/run/generate_java.py @@ -123,6 +123,26 @@ def mojang_os_to_java_os(mojang_os: MojangJavaOsName) -> JavaRuntimeOS: return JavaRuntimeOS.Unknown +def mojang_component_to_major(mojang_component: MojangJavaComponent) -> int: + match mojang_component: + case MojangJavaComponent.JreLegacy: + return 8 + case MojangJavaComponent.Alpha: + return 17 + case MojangJavaComponent.Beta: + return 17 + case MojangJavaComponent.Gamma: + return 17 + case MojangJavaComponent.GammaSnapshot: + return 17 + case MojangJavaComponent.Exe: + return 0 + case MojangJavaComponent.Delta: + return 21 + case _: + return 0 + + def mojang_runtime_to_java_runtime( mojang_runtime: MojangJavaRuntime, mojang_component: MojangJavaComponent, @@ -240,34 +260,6 @@ def azul_package_to_java_runtime( ) -PREFERED_VENDOR_ORDER = ["mojang", "eclipse", "azul"] - -__PREFERED_VENDOR_ORDER = list(reversed(PREFERED_VENDOR_ORDER)) - - -def vendor_priority(vendor: str) -> int: - """Get a numeric priority for a given vendor - - Args: - vendor (str): the vendor to check - - Returns: - int: how preferable the vendor is, the higher the better - """ - if vendor not in PREFERED_VENDOR_ORDER: - return -1 - return __PREFERED_VENDOR_ORDER.index(vendor) - - -def pkg_type_priority(pkg_type: JavaPackageType) -> int: - match pkg_type: - case JavaPackageType.Jre: - return 2 - case JavaPackageType.Jdk: - return 1 - return -1 - - def writeJavas(javas: dict[int, list[JavaRuntimeMeta]], uid: str): def oldest_timestamp(a: datetime.datetime | None, b: datetime.datetime): if a is None or a > b: @@ -308,6 +300,7 @@ def writeJavas(javas: dict[int, list[JavaRuntimeMeta]], uid: str): def main(): javas: dict[int, list[JavaRuntimeMeta]] = {} + extra_mojang_javas: dict[int, list[JavaRuntimeMeta]] = {} def add_java_runtime(runtime: JavaRuntimeMeta, major: int): if major not in javas: @@ -315,37 +308,27 @@ def main(): print(f"Regestering runtime: {runtime.name} for Java {major}") javas[major].append(runtime) - print("Processing Mojang Javas") - mojang_java_manifest = JavaIndex.parse_file( - os.path.join(UPSTREAM_DIR, JAVA_MANIFEST_FILE) - ) - for mojang_os_name in mojang_java_manifest: - if mojang_os_name == MojangJavaOsName.Gamecore: - continue # empty - java_os = mojang_os_to_java_os(mojang_os_name) - for comp in mojang_java_manifest[mojang_os_name]: - if comp == MojangJavaComponent.Exe: - continue # doesn't appear to be used and not marked with a full verison so I don't trust it - mojang_runtimes = mojang_java_manifest[mojang_os_name][comp] - if ( - len(mojang_runtimes) == 0 - and mojang_os_name - in [MojangJavaOsName.WindowsArm64, MojangJavaOsName.MacOSArm64] - and comp in [MojangJavaComponent.Alpha, MojangJavaComponent.Beta] - ): - mojang_runtimes = mojang_java_manifest[mojang_os_name][ - MojangJavaComponent.Gamma + # only add specific versions to the list + if ( + ( + runtime.runtime_os + in [JavaRuntimeOS.MacOsArm64, JavaRuntimeOS.WindowsArm64] + and major == 8 + ) + or ( + runtime.runtime_os + in [ + JavaRuntimeOS.WindowsArm32, + JavaRuntimeOS.LinuxArm32, + JavaRuntimeOS.LinuxArm64, ] - for mojang_runtime in mojang_runtimes: - if comp == MojangJavaComponent.JreLegacy: - major = 8 - else: - major = int(mojang_runtime.version.name.partition(".")[0]) - runtime = mojang_runtime_to_java_runtime(mojang_runtime, comp, java_os) - add_java_runtime(runtime, major) - - writeJavas(javas=javas, uid=JAVA_MINECRAFT_COMPONENT) - javas = {} + and major in [8, 17, 21] + ) + or (runtime.runtime_os == JavaRuntimeOS.LinuxX86 and major in [17, 21]) + ): + if major not in extra_mojang_javas: + extra_mojang_javas[major] = list[JavaRuntimeMeta]() + extra_mojang_javas[major].append(runtime) print("Processing Adoptium Releases") adoptium_path = os.path.join(UPSTREAM_DIR, ADOPTIUM_DIR, "available_releases.json") @@ -411,6 +394,88 @@ def main(): writeJavas(javas=javas, uid=JAVA_AZUL_COMPONENT) javas = {} + # constructs the missing mojang javas based on adoptium or azul + def get_mojang_extra_java( + mojang_component: MojangJavaComponent, java_os: JavaRuntimeOS + ) -> JavaRuntimeMeta | None: + java_major = mojang_component_to_major(mojang_component) + if not java_major in extra_mojang_javas: + return None + posible_javas = list( + filter(lambda x: x.runtime_os == java_os, extra_mojang_javas[java_major]) + ) + if len(posible_javas) == 0: + return None + prefered_vendor = list(filter(lambda x: x.vendor != "azul", posible_javas)) + if len(prefered_vendor) == 0: + prefered_vendor = posible_javas + prefered_vendor.sort(key=lambda x: x.version, reverse=True) + runtime = prefered_vendor[0] + runtime.name = mojang_component + return runtime + + print("Processing Mojang Javas") + mojang_java_manifest = JavaIndex.parse_file( + os.path.join(UPSTREAM_DIR, JAVA_MANIFEST_FILE) + ) + for mojang_os_name in mojang_java_manifest: + if mojang_os_name == MojangJavaOsName.Gamecore: + continue # empty + java_os = mojang_os_to_java_os(mojang_os_name) + for comp in mojang_java_manifest[mojang_os_name]: + if comp == MojangJavaComponent.Exe: + continue # doesn't appear to be used and not marked with a full verison so I don't trust it + mojang_runtimes = mojang_java_manifest[mojang_os_name][comp] + if len(mojang_runtimes) == 0: + if mojang_os_name in [ + MojangJavaOsName.WindowsArm64, + MojangJavaOsName.MacOSArm64, + ]: + if comp in [MojangJavaComponent.Alpha, MojangJavaComponent.Beta]: + mojang_runtimes = mojang_java_manifest[mojang_os_name][ + MojangJavaComponent.Gamma + ] + elif ( + comp == MojangJavaComponent.JreLegacy + ): # arm version of win and mac is missing the legacy java + runtime = get_mojang_extra_java(comp, java_os) + if runtime != None: + add_java_runtime(runtime, mojang_component_to_major(comp)) + if ( + mojang_os_name == MojangJavaOsName.Linuxi386 + and comp != MojangJavaComponent.JreLegacy + ): # the linux x86 is missing all but legacy + runtime = get_mojang_extra_java(comp, java_os) + if runtime != None: + add_java_runtime(runtime, mojang_component_to_major(comp)) + for mojang_runtime in mojang_runtimes: + if comp == MojangJavaComponent.JreLegacy: + major = 8 + else: + major = int(mojang_runtime.version.name.partition(".")[0]) + runtime = mojang_runtime_to_java_runtime(mojang_runtime, comp, java_os) + add_java_runtime(runtime, major) + # mojang doesn't provide any versions for the following systems so borrow info from adoptium/azul + for java_os in [ + JavaRuntimeOS.WindowsArm32, + JavaRuntimeOS.LinuxArm32, + JavaRuntimeOS.LinuxArm64, + ]: + for comp in [ + MojangJavaComponent.JreLegacy, + MojangJavaComponent.Alpha, + MojangJavaComponent.Beta, + MojangJavaComponent.Gamma, + MojangJavaComponent.GammaSnapshot, + MojangJavaComponent.Delta, + ]: + runtime = get_mojang_extra_java(comp, java_os) + if runtime != None: + add_java_runtime(runtime, mojang_component_to_major(comp)) + + writeJavas(javas=javas, uid=JAVA_MINECRAFT_COMPONENT) + javas = {} + if __name__ == "__main__": main()