diff --git a/pkgs/by-name/bl/blastem/package.nix b/pkgs/by-name/bl/blastem/package.nix new file mode 100644 index 000000000000..f6b7206bd03c --- /dev/null +++ b/pkgs/by-name/bl/blastem/package.nix @@ -0,0 +1,80 @@ +{ + lib, + stdenv, + fetchhg, + pkg-config, + makeWrapper, + SDL2, + glew, + gtk3, + testers, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "blastem"; + version = "0.6.2-unstable-2024-03-31"; + + src = fetchhg { + url = "https://www.retrodev.com/repos/blastem"; + rev = "48ab1e3e5df5"; + hash = "sha256-UZl5fIE7LJqxwS8kFJ3xr8BJyHF60dnRNeA5k7lAuxg="; + }; + + # will probably be fixed in https://github.com/NixOS/nixpkgs/pull/302481 + postPatch = lib.optionalString stdenv.isDarwin '' + substituteInPlace Makefile \ + --replace-fail "-flto" "" + ''; + + nativeBuildInputs = [ + pkg-config + makeWrapper + ]; + + buildInputs = [ + gtk3 + SDL2 + glew + ]; + + # Note: menu.bin cannot be generated yet, because it would + # need the `vasmm68k_mot` executable (part of vbcc for amigaos68k + # Luckily, menu.bin doesn't need to be present for the emulator to function + + makeFlags = [ "HOST_ZLIB=1" ]; + + env.NIX_CFLAGS_COMPILE = "-I${lib.getDev SDL2}/include/SDL2"; + + installPhase = '' + runHook preInstall + + # not sure if any executable other than blastem is really needed here + install -Dm755 blastem dis zdis termhelper -t $out/share/blastem + install -Dm644 gamecontrollerdb.txt default.cfg rom.db -t $out/share/blastem + cp -r shaders $out/share/blastem/shaders + + # wrapping instead of sym-linking makes sure argv0 stays at the original location + makeWrapper $out/share/blastem/blastem $out/bin/blastem + + runHook postInstall + ''; + + passthru.tests.version = testers.testVersion { + package = finalAttrs.finalPackage; + command = "blastem -v"; + version = "0.6.3-pre"; # remove line when moving to a stable version + }; + + meta = { + description = "The fast and accurate Genesis emulator"; + homepage = "https://www.retrodev.com/blastem/"; + license = lib.licenses.gpl3Plus; + mainProgram = "blastem"; + maintainers = with lib.maintainers; [ tomasajt ]; + platforms = [ + "i686-linux" + "x86_64-linux" + "x86_64-darwin" + ]; + }; +})