Subject: [PATCH v3 05/11] gnu: Add libretro-dolphin-emu.

From: Maxim Cournoyer <[email-masked]>
Date: Thu, 23 Jan 2025 21:21:41 +0900

* gnu/packages/emulators.scm (libretro-dolphin-emu): New variable.

Change-Id: Id05e1d17ff6927bb1492ce2816790f7d94f9e1b8
---

(no changes since v1)

 gnu/packages/emulators.scm | 51 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 46a7ee3707..aa03f0550c 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -482,6 +482,57 @@ (define-public dolphin-emu
       ;; dolphin/Data/Sys/GC/font_*.bin: Licensed under ASL2.0.
       (license (list license:gpl2+ license:asl2.0 license:fdl1.2+)))))
 
+(define-public libretro-dolphin-emu
+  ;; There are no tag or release; use the latest commit.
+  (let ((commit "89a4df725d4eb24537728f7d655cddb1add25c18")
+        (revision "0"))
+    (package
+      (inherit dolphin-emu)
+      (name "libretro-dolphin-emu")
+      (version (git-version "5.0" revision commit))
+      (source (origin
+                (inherit (package-source dolphin-emu))
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/libretro/dolphin")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1fvm6hy0ihc0j3sgv88a7ak08c0kyikmmiif827j981fy7zvglvz"))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments dolphin-emu)
+         ((#:configure-flags flags ''())
+          #~(cons "-DLIBRETRO=ON" #$flags))
+         ((#:phases phases '%standard-phases)
+          #~(modify-phases #$phases
+              (add-after 'unpack 'deregister-bundled-sources
+                (lambda _
+                  (substitute* "CMakeLists.txt"
+                    ((".*add_subdirectory.*Externals/curl.*") "")
+                    ((".*add_subdirectory.*Externals/libpng.*") ""))))
+              (replace 'install
+                (lambda _
+                  (install-file "dolphin_libretro.so"
+                                (string-append #$output "/lib/libretro"))
+                  ;; The system data files are also required for the proper
+                  ;; functioning of dolphin; without them, it crashes with
+                  ;; segmentation faults and cannot save files to the memory
+                  ;; card.
+                  (let ((sysdir (string-append
+                                 #$output
+                                 "/share/libretro/system/dolphin-emu")))
+                    (mkdir-p sysdir)
+                    (copy-recursively "../source/Data/Sys"
+                                      (string-append sysdir "/Sys")))))))))
+      (inputs
+       ;; Delete large and extraneous inputs.
+       (modify-inputs (package-inputs dolphin-emu)
+         (delete "ffmpeg"
+                 "gtk+"
+                 "qtbase")))
+      (synopsis "Libretro port of Dolphin, the Nintendo Wii/GameCube emulator"))))
+
 (define-public dosbox
   (package
     (name "dosbox")
-- 
2.47.1