portablemc: init at 4.3.0

This commit is contained in:
TomaSajt 2024-03-13 18:18:46 +01:00
parent 7035968845
commit 10d978b260
No known key found for this signature in database
GPG Key ID: F011163C050122A1
2 changed files with 144 additions and 0 deletions

View File

@ -0,0 +1,97 @@
{
lib,
stdenv,
python3Packages,
fetchFromGitHub,
installShellFiles,
jre,
libX11,
libXext,
libXcursor,
libXrandr,
libXxf86vm,
libpulseaudio,
libGL,
glfw,
openal,
udev,
textToSpeechSupport ? stdenv.isLinux,
flite,
}:
let
# Copied from the `prismlauncher` package
runtimeLibs = [
libX11
libXext
libXcursor
libXrandr
libXxf86vm
# lwjgl
libpulseaudio
libGL
glfw
openal
stdenv.cc.cc.lib
# oshi
udev
] ++ lib.optional textToSpeechSupport flite;
in
python3Packages.buildPythonApplication rec {
pname = "portablemc";
version = "4.3.0";
pyproject = true;
disabled = python3Packages.pythonOlder "3.8";
src = fetchFromGitHub {
owner = "mindstorm38";
repo = "portablemc";
rev = "v${version}";
hash = "sha256-jCv4ncXUWbkWlBZr3P1hNeVpdQzY9HtrFz+pmKknL0I=";
};
patches = [
# Use the jre package provided by nixpkgs by default
./use-builtin-java.patch
];
nativeBuildInputs = [ installShellFiles ];
build-system = [ python3Packages.poetry-core ];
dependencies = [ python3Packages.certifi ];
# Note: Tests use networking, so we don't run them
postInstall = ''
installShellCompletion --cmd portablemc \
--bash <($out/bin/portablemc show completion bash) \
--zsh <($out/bin/portablemc show completion zsh)
'';
preFixup = ''
makeWrapperArgs+=(
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath runtimeLibs}
--prefix PATH : ${lib.makeBinPath [ jre ]}
)
'';
meta = {
homepage = "https://github.com/mindstorm38/portablemc";
description = "A fast, reliable and cross-platform command-line Minecraft launcher and API for developers";
longDescription = ''
A fast, reliable and cross-platform command-line Minecraft launcher and API for developers.
Including fast and easy installation of common mod loaders such as Fabric, Forge, NeoForge and Quilt.
This launcher is compatible with the standard Minecraft directories.
'';
changelog = "https://github.com/mindstorm38/portablemc/releases/tag/${src.rev}";
license = lib.licenses.gpl3Only;
mainProgram = "portablemc";
maintainers = with lib.maintainers; [ tomasajt ];
};
}

View File

@ -0,0 +1,47 @@
diff --git a/portablemc/standard.py b/portablemc/standard.py
index f59c55d..0f017e1 100644
--- a/portablemc/standard.py
+++ b/portablemc/standard.py
@@ -843,6 +843,8 @@ class Version:
if jvm_major_version is not None and not isinstance(jvm_major_version, int):
raise ValueError("metadata: /javaVersion/majorVersion must be an integer")
+ return self._resolve_builtin_jvm(watcher, JvmNotFoundError.UNSUPPORTED_ARCH, jvm_major_version)
+
if platform.system() == "Linux" and platform.libc_ver()[0] != "glibc":
return self._resolve_builtin_jvm(watcher, JvmNotFoundError.UNSUPPORTED_LIBC, jvm_major_version)
@@ -926,31 +928,10 @@ class Version:
builtin_path = shutil.which(jvm_bin_filename)
if builtin_path is None:
raise JvmNotFoundError(reason)
-
- try:
-
- # Get version of the JVM.
- process = Popen([builtin_path, "-version"], bufsize=1, stdout=PIPE, stderr=STDOUT, universal_newlines=True)
- stdout, _stderr = process.communicate(timeout=1)
-
- version_start = stdout.index(f"1.{major_version}" if major_version <= 8 else str(major_version))
- version = None
-
- # Parse version by getting all character that are numeric or '.'.
- for i, ch in enumerate(stdout[version_start:]):
- if not ch.isnumeric() and ch not in (".", "_"):
- version = stdout[version_start:i]
- break
-
- if version is None:
- raise ValueError()
-
- except (TimeoutExpired, ValueError):
- raise JvmNotFoundError(JvmNotFoundError.BUILTIN_INVALID_VERSION)
self._jvm_path = Path(builtin_path)
- self._jvm_version = version
- watcher.handle(JvmLoadedEvent(version, JvmLoadedEvent.BUILTIN))
+ self._jvm_version = "nixpkgs"
+ watcher.handle(JvmLoadedEvent("nixpkgs", JvmLoadedEvent.BUILTIN))
def _download(self, watcher: Watcher) -> None: