summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta/run/generate_java.py181
1 files changed, 123 insertions, 58 deletions
diff --git a/meta/run/generate_java.py b/meta/run/generate_java.py
index 110d871d86..fd32308217 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()