about summary refs log tree commit diff
path: root/pkgs/applications/emulators/86box
diff options
context:
space:
mode:
authorJohn Chadwick <john@jchw.io>2023-04-03 17:09:23 -0400
committerJohn Chadwick <john@jchw.io>2023-04-23 18:16:26 -0400
commit28288bfb69cbe2212a6f1b2d60a8a3a801c8a414 (patch)
tree291f33b976e25802fa42e02d57e1946cac70611f /pkgs/applications/emulators/86box
parente51af9620322889dfbdc4bd5df05a1251d352514 (diff)
86Box: init at 3.11
Diffstat (limited to 'pkgs/applications/emulators/86box')
-rw-r--r--pkgs/applications/emulators/86box/default.nix74
1 files changed, 74 insertions, 0 deletions
diff --git a/pkgs/applications/emulators/86box/default.nix b/pkgs/applications/emulators/86box/default.nix
new file mode 100644
index 0000000000000..a6b3ca0d66c3d
--- /dev/null
+++ b/pkgs/applications/emulators/86box/default.nix
@@ -0,0 +1,74 @@
+{ stdenv, lib, fetchFromGitHub, cmake, pkg-config, makeWrapper, freetype, SDL2
+, glib, pcre2, openal, rtmidi, fluidsynth, jack2, alsa-lib, qt5, libvncserver
+, discord-gamesdk, libpcap
+
+, enableDynarec ? with stdenv.hostPlatform; isx86 || isAarch
+, enableNewDynarec ? enableDynarec && stdenv.hostPlatform.isAarch
+, enableVncRenderer ? false
+, unfreeEnableDiscord ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "86Box";
+  version = "3.11";
+
+  src = fetchFromGitHub {
+    owner = "86Box";
+    repo = "86Box";
+    rev = "v${version}";
+    hash = "sha256-n3Q/NUiaC6/EZyBUn6jUomnQCqr8tvYKPI5JrRRFScI=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    makeWrapper
+    qt5.wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    freetype
+    SDL2
+    glib
+    openal
+    rtmidi
+    pcre2
+    jack2
+    libpcap
+    qt5.qtbase
+    qt5.qttools
+  ] ++ lib.optional stdenv.isLinux alsa-lib
+    ++ lib.optional enableVncRenderer libvncserver;
+
+  cmakeFlags = lib.optional stdenv.isDarwin "-DCMAKE_MACOSX_BUNDLE=OFF"
+    ++ lib.optional enableNewDynarec "-DNEW_DYNAREC=ON"
+    ++ lib.optional enableVncRenderer "-DVNC=ON"
+    ++ lib.optional (!enableDynarec) "-DDYNAREC=OFF"
+    ++ lib.optional (!unfreeEnableDiscord) "-DDISCORD=OFF";
+
+  # Some libraries are loaded dynamically, but QLibrary doesn't seem to search
+  # the runpath, so use a wrapper instead.
+  postFixup = let
+    libPath = lib.makeLibraryPath ([
+      libpcap
+      fluidsynth
+    ] ++ lib.optional unfreeEnableDiscord discord-gamesdk);
+    libPathVar = if stdenv.isDarwin then "DYLD_LIBRARY_PATH" else "LD_LIBRARY_PATH";
+  in
+  ''
+    wrapProgram $out/bin/86Box \
+      "''${qtWrapperArgs[@]}" \
+      --prefix ${libPathVar} : "${libPath}"
+  '';
+
+  # Do not wrap twice.
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    description = "Emulator of x86-based machines based on PCem.";
+    homepage = "https://86box.net/";
+    license = with licenses; [ gpl2Only ] ++ optional unfreeEnableDiscord unfree;
+    maintainers = [ maintainers.jchw ];
+    platforms = platforms.linux;
+  };
+}