diff mbox series

[bug#58499,v3] gnu: Add citra

Message ID b9344989ac3a6b9b2660c4d5a6f9a975c5e7759e.1667325314.git.florhizome@posteo.net
State New
Headers show
Series [bug#58499,v3] gnu: Add citra | expand

Checks

Context Check Description
cbaines/comparison success View comparision
cbaines/git-branch success View Git branch
cbaines/applying patch success
cbaines/issue success View issue

Commit Message

florhizome Nov. 1, 2022, 5:58 p.m. UTC
From: florhizome <florhizome@posteo.net>

* gnu/packages/emulators.scm (citra): New variable.
---
 gnu/packages/emulators.scm | 100 +++++++++++++++++++++++++++++++++++++
 1 file changed, 100 insertions(+)

Comments

Liliana Marie Prikler Nov. 2, 2022, 8:04 a.m. UTC | #1
Am Dienstag, dem 01.11.2022 um 17:58 +0000 schrieb
florhizome@posteo.net:
> From: florhizome <florhizome@posteo.net>
> 
> * gnu/packages/emulators.scm (citra): New variable.
> ---
>  gnu/packages/emulators.scm | 100
> +++++++++++++++++++++++++++++++++++++
>  1 file changed, 100 insertions(+)
> 
> diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
> index 4d7710f8ea..3ea3bfe327 100644
> --- a/gnu/packages/emulators.scm
> +++ b/gnu/packages/emulators.scm
> @@ -61,6 +61,7 @@ (define-module (gnu packages emulators)
>    #:use-module (gnu packages cross-base)
>    #:use-module (gnu packages curl)
>    #:use-module (gnu packages digest)
> +  #:use-module (gnu packages documentation)
>    #:use-module (gnu packages elf)
>    #:use-module (gnu packages flex)
>    #:use-module (gnu packages fltk)
> @@ -74,6 +75,7 @@ (define-module (gnu packages emulators)
>    #:use-module (gnu packages gl)
>    #:use-module (gnu packages glib)
>    #:use-module (gnu packages gnome)
> +  #:use-module (gnu packages gstreamer)
>    #:use-module (gnu packages gtk)
>    #:use-module (gnu packages image)
>    #:use-module (gnu packages libedit)
> @@ -105,6 +107,7 @@ (define-module (gnu packages emulators)
>    #:use-module (gnu packages xorg)
>    #:use-module (gnu packages web)
>    #:use-module (guix build-system cmake)
> +  #:use-module (guix build-system qt)
>    #:use-module (guix build-system glib-or-gtk)
>    #:use-module (guix build-system gnu)
>    #:use-module (guix build-system meson)
> @@ -245,9 +248,106 @@ (define-public desmume
>       "DeSmuME is an emulator for the Nintendo DS handheld gaming
> console.")
>      (license license:gpl2)))
>  
> +(define-public citra
> +  ;; we use the 'nightly' revision, picking stable features
> +  (let ((revision "1785")
> +        (commit "baecc18d8c5365af0dddb231bc8c0a9c03850bf6"))
Note that the latest citra revision is now 1802.  Feel free to bump it
during review.
> +  (package
> +    (name "citra")
> +    (version (git-version "0" revision commit))
> +    (source
> +     (origin
> +       (method git-fetch)
> +       (uri (git-reference
> +             (url "https://github.com/citra-emu/citra-nightly")
> +             (commit
> +              (string-append "nightly-" revision))
> +             ;;some submodules can't be avoided
> +             ;;TODO devendor the rest
> +             (recursive? #t)))
For those submodules that can't be avoided, the "unpack after unpack"
pattern is still preferable to recursive checkouts; the latter can pull
in new vendored modules sneakily.

For instance, the first package that fails the build because it's
missing is cryptopp [1].  They vendor version 8.5 while the latest is
8.7.  I think packaging cryptopp and trying to unvendor it makes sense.
Even if not completely unvendored (i.e. we still pull in the source
instead of the built package, as is e.g. done for armips in ppsspp),
I'd prefer the origin to be explicit.
> +       (sha256
> +        (base32
> +         "1grkrrxs1497i51spgnwmgfkqgkm7gplylhcrk67agaklx65d5s9"))
> +       (file-name (git-file-name name version))
> +       (modules '((guix build utils)))
> +         (snippet
> +          '(begin
> +             ;; Remove as much external stuff as we can
> +             ;; f.e. some files in boost are still needed
> +             (for-each (lambda (dir)
> +                         (delete-file-recursively
> +                          (string-append "externals/" dir)))
> +                       '("android-ifaddrs"
> +                         "catch"
> +                         "discord-rpc"
> +                         "getopt"
> +                         "libyuv"
> +                         "libressl"
> +                         "libusb"))
> +             ;; Clean up source.
> +             (for-each delete-file
> +                       (find-files "."
> ".*\\.(bin|dsy|exe|jar|rar)$"))
> +             #t))))
> +    (build-system qt-build-system)
> +    (arguments
> +     (list
> +      #:configure-flags
> +      #~(list
> +         "-DUSE_SYSTEM_BOOST=ON"
> +         "-DCITRA_USE_BUNDLED_FFMPEG=OFF"
> +         "-DCITRA_USE_BUNDLED_QT=OFF"
> +         "-DCITRA_USE_BUNDLED_SDL2=OFF"
> +         "-DCITRA_ENABLE_COMPATIBILITY_REPORTING=OFF"
> +         "-DCMAKE_BUILD_TYPE=Release"
> +         "-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=OFF"
> +         "-DENABLE_FFMPEG_AUDIO_DECODER=ON"
> +         "-DENABLE_QT_TRANSLATION=ON"
> +         "-DENABLE_WEB_SERVICE=ON")
The web service should be disabled, we don't let our software phone
home.
> +       #:phases
> +       #~(modify-phases %standard-phases
> +           (add-before 'configure 'delete-check
> +             (lambda _
> +               (substitute* "CMakeLists.txt"
> +                 (("check_submodules_present\\(\\)")""))))
Instead of 'delete-check, I'd name this 'patch-cmake.  'delete-check
implies that we're disabling checks, which we don't.
> +           (add-after 'qt-wrap 'wrap-gst-plugins
> +             (lambda* (#:key outputs #:allow-other-keys)
> +               (for-each
> +                (lambda (bin)
> +                  (wrap-program bin)
> +                  `("GST_PLUGIN_SYSTEM_PATH" prefix
> +                    (,(getenv "GST_PLUGIN_SYSTEM_PATH"))))
> +                `(,(search-input-file outputs "bin/citra")
> +                  ,(search-input-file outputs "bin/citra-qt"))))))))
> +    (native-inputs
> +     (list catch2 doxygen pkg-config))
> +    (inputs
> +     (list boost
> +           curl
> +           ffmpeg
> +           gst-plugins-bad-minimal      ;camera-support
> +           libfdk
> +           libpng
> +           libusb
> +           libxkbcommon
> +           openssl
> +           pulseaudio
> +           qtbase-5
> +           qtmultimedia-5
> +           qttools-5
> +           qtwayland-5
> +           sdl2))
There seem to be more missing inputs, for instance json-modern-cxx
which has nlohmann::json (somewhat related, I do think that it's a
silly package name and we should rename it for searchability's sake).
> +    (propagated-inputs (list xdg-utils shared-mime-info))
> +    (home-page "https://citra-emu.org")
> +    (synopsis "Nintendo 3DS Emulator")
> +    (description "Citra is an experimental emulator/debugger for the
> Nintendo 3DS
I'd write out "and" instead of the slash.
> + written in C++.  It emulates a subset of the Nintendo 3DS'
> hardware.")
> +    (license license:gpl2+))))
> +
> +
Gratuitous newline.
>  ;; Building from recent Git because the official 5.0 release no
> longer builds.
>  ;; Following commits and revision numbers of beta versions listed at
>  ;; https://dolphin-emu.org/download/.
> +
Gratuitous newline.
>  (define-public dolphin-emu
>    (let ((commit "a34823df61df65168aa40ef5e82e44defd4a0138")
>          (revision "13178"))

Cheers

[1] https://github.com/weidai11/cryptopp
diff mbox series

Patch

diff --git a/gnu/packages/emulators.scm b/gnu/packages/emulators.scm
index 4d7710f8ea..3ea3bfe327 100644
--- a/gnu/packages/emulators.scm
+++ b/gnu/packages/emulators.scm
@@ -61,6 +61,7 @@  (define-module (gnu packages emulators)
   #:use-module (gnu packages cross-base)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages digest)
+  #:use-module (gnu packages documentation)
   #:use-module (gnu packages elf)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fltk)
@@ -74,6 +75,7 @@  (define-module (gnu packages emulators)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
+  #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages image)
   #:use-module (gnu packages libedit)
@@ -105,6 +107,7 @@  (define-module (gnu packages emulators)
   #:use-module (gnu packages xorg)
   #:use-module (gnu packages web)
   #:use-module (guix build-system cmake)
+  #:use-module (guix build-system qt)
   #:use-module (guix build-system glib-or-gtk)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system meson)
@@ -245,9 +248,106 @@  (define-public desmume
      "DeSmuME is an emulator for the Nintendo DS handheld gaming console.")
     (license license:gpl2)))
 
+(define-public citra
+  ;; we use the 'nightly' revision, picking stable features
+  (let ((revision "1785")
+        (commit "baecc18d8c5365af0dddb231bc8c0a9c03850bf6"))
+  (package
+    (name "citra")
+    (version (git-version "0" revision commit))
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/citra-emu/citra-nightly")
+             (commit
+              (string-append "nightly-" revision))
+             ;;some submodules can't be avoided
+             ;;TODO devendor the rest
+             (recursive? #t)))
+       (sha256
+        (base32
+         "1grkrrxs1497i51spgnwmgfkqgkm7gplylhcrk67agaklx65d5s9"))
+       (file-name (git-file-name name version))
+       (modules '((guix build utils)))
+         (snippet
+          '(begin
+             ;; Remove as much external stuff as we can
+             ;; f.e. some files in boost are still needed
+             (for-each (lambda (dir)
+                         (delete-file-recursively
+                          (string-append "externals/" dir)))
+                       '("android-ifaddrs"
+                         "catch"
+                         "discord-rpc"
+                         "getopt"
+                         "libyuv"
+                         "libressl"
+                         "libusb"))
+             ;; Clean up source.
+             (for-each delete-file
+                       (find-files "." ".*\\.(bin|dsy|exe|jar|rar)$"))
+             #t))))
+    (build-system qt-build-system)
+    (arguments
+     (list
+      #:configure-flags
+      #~(list
+         "-DUSE_SYSTEM_BOOST=ON"
+         "-DCITRA_USE_BUNDLED_FFMPEG=OFF"
+         "-DCITRA_USE_BUNDLED_QT=OFF"
+         "-DCITRA_USE_BUNDLED_SDL2=OFF"
+         "-DCITRA_ENABLE_COMPATIBILITY_REPORTING=OFF"
+         "-DCMAKE_BUILD_TYPE=Release"
+         "-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=OFF"
+         "-DENABLE_FFMPEG_AUDIO_DECODER=ON"
+         "-DENABLE_QT_TRANSLATION=ON"
+         "-DENABLE_WEB_SERVICE=ON")
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-before 'configure 'delete-check
+             (lambda _
+               (substitute* "CMakeLists.txt"
+                 (("check_submodules_present\\(\\)")""))))
+           (add-after 'qt-wrap 'wrap-gst-plugins
+             (lambda* (#:key outputs #:allow-other-keys)
+               (for-each
+                (lambda (bin)
+                  (wrap-program bin)
+                  `("GST_PLUGIN_SYSTEM_PATH" prefix
+                    (,(getenv "GST_PLUGIN_SYSTEM_PATH"))))
+                `(,(search-input-file outputs "bin/citra")
+                  ,(search-input-file outputs "bin/citra-qt"))))))))
+    (native-inputs
+     (list catch2 doxygen pkg-config))
+    (inputs
+     (list boost
+           curl
+           ffmpeg
+           gst-plugins-bad-minimal      ;camera-support
+           libfdk
+           libpng
+           libusb
+           libxkbcommon
+           openssl
+           pulseaudio
+           qtbase-5
+           qtmultimedia-5
+           qttools-5
+           qtwayland-5
+           sdl2))
+    (propagated-inputs (list xdg-utils shared-mime-info))
+    (home-page "https://citra-emu.org")
+    (synopsis "Nintendo 3DS Emulator")
+    (description "Citra is an experimental emulator/debugger for the Nintendo 3DS
+ written in C++.  It emulates a subset of the Nintendo 3DS' hardware.")
+    (license license:gpl2+))))
+
+
 ;; Building from recent Git because the official 5.0 release no longer builds.
 ;; Following commits and revision numbers of beta versions listed at
 ;; https://dolphin-emu.org/download/.
+
 (define-public dolphin-emu
   (let ((commit "a34823df61df65168aa40ef5e82e44defd4a0138")
         (revision "13178"))