Subject: [bug#73522] [PATCH games-team 06/14] gnu: retroarch: Clean-up source from extraneous bundled libraries.

From: Maxim Cournoyer <[email-masked]>
Date: Sun, 6 Oct 2024 14:32:02 +0900

* gnu/packages/emulators.scm (retroarch) [source]: Add snippet removing
unnecessary sources.
[license]: Add licenses of bundled sources.

Change-Id: I824391424bf0fa2ec3888f02535b94dea3021378
---

 gnu/packages/emulators.scm | 45 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 44 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index afe11caf7f..e6cf365e26 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -1587,6 +1587,43 @@ (define-public retroarch
        (uri (git-reference
              (url "https://github.com/libretro/RetroArch")
              (commit (string-append "v" version))))
+       (modules '((guix build utils)
+                  (ice-9 ftw)
+                  (srfi srfi-26)))
+       (snippet
+        #~(begin
+            ;; XXX: 'delete-all-but' is copied from the turbovnc package.
+            (define (delete-all-but directory . preserve)
+              (define (directory? x)
+                (and=> (stat x #f)
+                       (compose (cut eq? 'directory <>) stat:type)))
+              (with-directory-excursion directory
+                (let* ((pred
+                        (negate (cut member <> (append '("." "..") preserve))))
+                       (items (scandir "." pred)))
+                  (for-each (lambda (item)
+                              (if (directory? item)
+                                  (delete-file-recursively item)
+                                  (delete-file item)))
+                            items))))
+            ;; Remove as much bundled sources as possible, shaving off about
+            ;; 17 MiB.
+            (delete-all-but "deps"
+                            "7zip"
+                            "SPIRV-Cross"   ;used in slang_reflection.cpp
+                            "discord-rpc"   ;used in network/discord.h
+                            "dr"            ;used in audio_mixer.c
+                            "feralgamemode" ;used in platform_unix.c
+                            "ibxm"          ;used in audio_mixer.c
+                            "mbedtls"       ;further refined below
+                            "rcheevos"      ;used in menu_setting.c
+                            "stb"           ;used in audio_mixer.c
+                            "switchres"     ;used in video_crt_switch.c
+                            "xdelta3"       ;used in task_patch.c
+                            "yxml")         ;used in rxml.c
+            ;; This is an old root certificate used in net_socket_ssl_mbed.c,
+            ;; not actually from mbedtls.
+            (delete-all-but "deps/mbedtls" "cacert.h")))
        (file-name (git-file-name name version))
        (sha256
         (base32 "15nh4y4vpf4n1ryhiy4fwvzn5xz5idzfzn9fsi5v9hzp25vbjmrm"))))
@@ -1669,7 +1706,13 @@ (define-public retroarch
 straight into any libretro-compatible frontend.  RetroArch is the official
 reference frontend for the libretro API, currently used by most as a modular
 multi-system game/emulator system.")
-    (license license:gpl3+)))
+    (license (list license:gpl3+         ;for RetroArch itself
+                   license:asl2.0        ;SPIRV-Cross, xdelta3
+                   license:public-domain ;7zip, stb
+                   license:expat         ;discord-rpc, rcheevos, yxml
+                   license:unlicense     ;dr
+                   license:bsd-3         ;feragamemode, ibxm
+                   license:gpl2+))))    ;switchres
 
 (define-public wasm4
   (package
-- 
2.46.0