gnu: upower: Enable GObject introspection.
[jackhill/guix/guix.git] / gnu / packages / games.scm
index 8f495f7..4274d4c 100644 (file)
@@ -1,15 +1,19 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 John Darrington <jmd@gnu.org>
 ;;; Copyright © 2014 David Thompson <dthompson2@worcester.edu>
-;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2014, 2015 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
 ;;; Copyright © 2014 Sylvain Beucler <beuc@beuc.net>
 ;;; Copyright © 2014, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014, 2015 Sou Bunnbu <iyzsong@gmail.com>
-;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
 ;;; Copyright © 2015 David Hashe <david.hashe@dhashe.com>
 ;;; Copyright © 2015 Christopher Allan Webber <cwebber@dustycloud.org>
+;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015 Alex Kost <alezost@gmail.com>
+;;; Copyright © 2015 Paul van der Walt <paul@denknerd.org>
+;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix utils)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix git-download)
+  #:use-module (guix svn-download)
   #:use-module (gnu packages)
+  #:use-module (gnu packages autotools)
+  #:use-module (gnu packages backup)
   #:use-module (gnu packages base)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages audio)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages fribidi)
+  #:use-module (gnu packages game-development)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gl)
   #:use-module (gnu packages glib)
@@ -44,6 +54,8 @@
   #:use-module (gnu packages guile)
   #:use-module (gnu packages libcanberra)
   #:use-module (gnu packages libunwind)
+  #:use-module (gnu packages haskell)
+  #:use-module (gnu packages mp3)
   #:use-module (gnu packages image)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages python)
@@ -55,6 +67,7 @@
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages check)
   #:use-module (gnu packages fontutils)
+  #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages video)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages tcl)
+  #:use-module (gnu packages fribidi)
   #:use-module (guix build-system trivial)
   #:use-module (guix build-system gnu)
+  #:use-module (guix build-system haskell)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system trivial))
 
@@ -153,43 +168,31 @@ scriptable with Guile.")
      '(#:modules ((ice-9 match)
                   (guix build gnu-build-system)
                   (guix build utils))
-       #:phases (alist-cons-after
-                 'set-paths 'set-sdl-paths
-                 (lambda* (#:key inputs outputs (search-paths '()) #:allow-other-keys)
-                   (define input-directories
-                     (match inputs
-                       (((_ . dir) ...)
-                        dir)))
-                   ;; This package does not use pkg-config, so modify CPATH
-                   ;; variable to point to include/SDL for SDL header files.
-                   (set-path-environment-variable "CPATH"
-                                                  '("include/SDL")
-                                                  input-directories))
-                 (alist-cons-after
-                  'patch-source-shebangs 'patch-makefile
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    ;; Replace /usr with package output directory.
-                    (for-each (lambda (file)
-                                (substitute* file
-                                  (("/usr") (assoc-ref outputs "out"))))
-                              '("makefile" "src/pantallas.c" "src/comun.h")))
-                  (alist-cons-before
-                   'install 'make-install-dirs
-                   (lambda* (#:key outputs #:allow-other-keys)
-                     (let ((prefix (assoc-ref outputs "out")))
-                       ;; Create directories that the makefile assumes exist.
-                       (mkdir-p (string-append prefix "/bin"))
-                       (mkdir-p (string-append prefix "/share/applications"))
-                       (mkdir-p (string-append prefix "/share/pixmaps"))))
-                   ;; No configure script.
-                   (alist-delete 'configure %standard-phases))))
+       #:phases (modify-phases %standard-phases
+                  (add-after 'set-paths 'set-sdl-paths
+                    (lambda* (#:key inputs #:allow-other-keys)
+                      (setenv "CPATH"
+                              (string-append (assoc-ref inputs "sdl-union")
+                                             "/include/SDL"))))
+                  (add-after 'patch-source-shebangs 'patch-makefile
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      ;; Replace /usr with package output directory.
+                      (for-each (lambda (file)
+                                  (substitute* file
+                                    (("/usr") (assoc-ref outputs "out"))))
+                                '("makefile" "src/pantallas.c" "src/comun.h"))))
+                  (add-before 'install 'make-install-dirs
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let ((prefix (assoc-ref outputs "out")))
+                        ;; Create directories that the makefile assumes exist.
+                        (mkdir-p (string-append prefix "/bin"))
+                        (mkdir-p (string-append prefix "/share/applications"))
+                        (mkdir-p (string-append prefix "/share/pixmaps")))))
+                  ;; No configure script.
+                  (delete 'configure))
        #:tests? #f)) ;; No check target.
     (native-inputs `(("pkg-config" ,pkg-config)))
-    (inputs `(("sdl" ,sdl)
-              ("sdl-gfx" ,sdl-gfx)
-              ("sdl-image" ,sdl-image)
-              ("sdl-mixer" ,sdl-mixer)
-              ("sdl-ttf" ,sdl-ttf)))
+    (inputs `(("sdl-union" ,(sdl-union))))
     (home-page "http://code.google.com/p/abbaye-for-linux/")
     (synopsis "GNU/Linux port of the indie game \"l'Abbaye des Morts\"")
     (description "L'Abbaye des Morts is a 2D platform game set in 13th century
@@ -302,7 +305,7 @@ asynchronously and at a user-defined speed.")
 (define-public chess
   (package
     (name "chess")
-    (version "6.1.1")
+    (version "6.2.2")
     (source
      (origin
        (method url-fetch)
@@ -310,7 +313,7 @@ asynchronously and at a user-defined speed.")
                            ".tar.gz"))
        (sha256
         (base32
-         "1jckpg1qi1vjr3pqs0dnip3rmn0mgklx63xflrpqiv3cx2qlz8kn"))))
+         "1a41ag03q66pwy3pjrmbxxjpzi9fcaiiaiywd7m9v25mxqac2xkp"))))
     (build-system gnu-build-system)
     (home-page "http://www.gnu.org/software/chess")
     (synopsis "Full chess implementation")
@@ -571,10 +574,63 @@ for common mesh file formats, and collision detection.")
     (home-page "http://irrlicht.sourceforge.net/")
     (license license:zlib)))
 
+(define-public mars
+  ;; The latest release on SourceForge relies on an unreleased version of SFML
+  ;; with a different API, so we take the latest version from the official
+  ;; repository on Github.
+  (let ((commit   "c855d04409")
+        (revision "1"))
+    (package
+      (name "mars")
+      (version (string-append "0.7.5." revision "." commit ))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/thelaui/M.A.R.S..git")
+                      (commit commit)))
+                (file-name (string-append name "-" version))
+                (sha256
+                 (base32
+                  "1r4c5gap1z2zsv4yjd34qriqkxaq4lb4rykapyzkkdf4g36lc3nh"))
+                (patches (list (search-patch "mars-sfml-2.3.patch")
+                               (search-patch "mars-install.patch")))))
+      (build-system cmake-build-system)
+      (arguments
+       `(#:tests? #f        ; There are no tests
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'fix-install-path
+            (lambda _
+              (substitute* "src/CMakeLists.txt"
+                (("\\$\\{CMAKE_INSTALL_PREFIX\\}/games")
+                 "${CMAKE_INSTALL_PREFIX}/bin"))
+              #t))
+           (add-after 'unpack 'fix-data-path
+            (lambda* (#:key outputs #:allow-other-keys)
+              (substitute* "src/System/settings.cpp"
+                (("C_dataPath = \"./data/\";")
+                 (string-append "C_dataPath = \""
+                                (assoc-ref outputs "out")
+                                "/share/games/marsshooter/\";")))
+              #t)))))
+      (inputs
+       `(("mesa" ,mesa)
+         ("fribidi" ,fribidi)
+         ("taglib" ,taglib)
+         ("sfml" ,sfml)))
+      (home-page "http://marsshooter.org")
+      (synopsis "2D space shooter")
+      (description
+       "M.A.R.S. is a 2D space shooter with pretty visual effects and
+attractive physics.  Players can battle each other or computer controlled
+enemies in different game modes such as space ball, death match, team death
+match, cannon keep, and grave-itation pit.")
+      (license license:gpl3+))))
+
 (define minetest-data
   (package
     (name "minetest-data")
-    (version "0.4.12")
+    (version "0.4.13")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -583,7 +639,7 @@ for common mesh file formats, and collision detection.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0642vy6r6sv96mz6wbs9qvyr95vd69zj4fxiljdg9801javrmm9p"))))
+                "04xnyfap75v3p818kpqb07xshqwqzpws5xjvw5m96qnd9x4725ld"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("source" ,source)
@@ -615,7 +671,7 @@ for common mesh file formats, and collision detection.")
 (define-public minetest
   (package
     (name "minetest")
-    (version "0.4.12")
+    (version "0.4.13")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -624,7 +680,7 @@ for common mesh file formats, and collision detection.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "1pqp8hfwg5wkimig8j5jrihzgjjgplxr24w5xisrxvx1hlvnczdk"))))
+                "1xzrvsg0fpbj5p4pz6lls11m3ab4y2bnjlsm4gnw68x9006ffznp"))))
     (build-system cmake-build-system)
     (arguments
      '(#:configure-flags
@@ -781,22 +837,22 @@ reference interpreter, using Glk API.")
     (synopsis "Z-machine interpreter")
     (description
      "Fizmo is a console-based Z-machine interpreter.  It is used to play
-interactive ficiton, also known as textadventures, which were implemented
+interactive fiction, also known as text adventures, which were implemented
 either by Infocom or created using the Inform compiler.")
     (license license:bsd-3)))
 
 (define-public retroarch
   (package
     (name "retroarch")
-    (version "1.0.0.3-beta")
+    (version "1.2.2")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://github.com/libretro/RetroArch/archive/"
+       (uri (string-append "https://github.com/libretro/RetroArch/archive/v"
                            version ".tar.gz"))
        (file-name (string-append name "-" version ".tar.gz"))
        (sha256
-        (base32 "1iqcrb076xiih20sk8n1w79xsp4fb8pj4vkmdc1xn562h56y4nxx"))))
+        (base32 "1bxr8yhk3ad4df544qljsfjfhxa8zy1grq7rn1s02yfvdmgzf4qi"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f ; no tests
@@ -853,13 +909,14 @@ multi-system game/emulator system.")
     (build-system gnu-build-system)
     (inputs `(("readline" ,readline)))
     (synopsis "Play the game of Go")
-    (description "GNU Go is a program that plays the game of Go, in which
-players place stones on a grid to form territory or capture other stones.
-While it can be played directly from the terminal, rendered in ASCII
-characters, it is also possible to play GNU Go with 3rd party graphical
-interfaces or even in Emacs.  It supports the standard game storage format
-(SGF, Smart Game Format) and inter-process communication format (GMP, Go
-Modem Protocol).")
+    (description
+     "GNU Go is a program that plays the game of Go, in which players
+place stones on a grid to form territory or capture other stones.  While
+it can be played directly from the terminal, rendered in ASCII characters,
+it is also possible to play GNU Go with 3rd party graphical interfaces or
+even in Emacs.  It supports the standard game storage format (SGF, Smart
+Game Format) and inter-process communication format (GMP, Go Modem
+Protocol).")
     (home-page "http://www.gnu.org/software/gnugo/")
     (license license:gpl3+)))
 
@@ -950,3 +1007,816 @@ platform to platform to avoid falling, while the platforms drop at faster rates
 the higher you go.  The game features multiplayer, unlimited FPS, smooth floor
 falling, themeable graphics and sounds, and replays.")
     (license license:gpl3+)))
+
+(define-public wesnoth
+  (package
+    (name "wesnoth")
+    (version "1.12.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/wesnoth/"
+                                  name "-" version ".tar.bz2"))
+              (sha256
+               (base32
+                "19qyylylaljhk45lk2ja0xp7cx9iy4hx07l65zkg20a2v9h50lmz"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f ; no check target
+       #:configure-flags
+       ;; XXX: Failed to compile with '-Werror=old-style-cast'.
+       ;;   boost/mpl/assert.hpp:313:58: error:
+       ;;     use of old-style cast [-Werror=old-style-cast]
+       ;;   [...]
+       ;;   cc1plus: all warnings being treated as errors
+       '("-DENABLE_STRICT_COMPILATION=OFF")))
+    (native-inputs
+     `(("gettext" ,gnu-gettext)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("boost" ,boost)
+       ("dbus" ,dbus)
+       ("fribidi" ,fribidi)
+       ("libvorbis" ,libvorbis)
+       ("pango" ,pango)
+       ("sdl-image" ,sdl-image)
+       ("sdl-mixer" ,sdl-mixer)
+       ("sdl-net" ,sdl-net)
+       ("sdl-ttf" ,sdl-ttf)))
+    (home-page "http://www.wesnoth.org/")
+    (synopsis "Turn-based strategy game")
+    (description
+     "The Battle for Wesnoth is a fantasy, turn based tactical strategy game,
+with several single player campaigns, and multiplayer games (both networked and
+local).
+
+Battle for control on a range of maps, using variety of units which have
+advantages and disadvantages against different types of attacks.  Units gain
+experience and advance levels, and are carried over from one scenario to the
+next campaign.")
+    (license license:gpl2+)))
+
+(define-public dosbox
+  (package
+    (name "dosbox")
+    (version "0.74.svn3947")
+    (source (origin
+              (method svn-fetch)
+              (uri (svn-reference
+                    (url "http://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk/")
+                    (revision 3947)))
+              (file-name (string-append name "-" version "-checkout"))
+              ;; Use SVN head, since the last release (2010) is incompatible
+              ;; with GCC 4.8+ (see
+              ;; <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=624976>).
+              (sha256
+               (base32
+                "1p918j6090d1nkvgq7ifvmn506zrdmyi32y7p3ms40d5ssqjg8fj"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases (modify-phases %standard-phases
+                  (add-after
+                   'unpack 'autogen.sh
+                   (lambda _
+                     (zero? (system* "sh" "autogen.sh")))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)))
+    (inputs
+     `(("sdl" ,sdl)
+       ("libpng" ,libpng)
+       ("zlib" ,zlib)
+       ("alsa-lib" ,alsa-lib)
+       ("glu" ,glu)
+       ("mesa" ,mesa)))
+    (home-page "http://www.dosbox.com")
+    (synopsis "x86 emulator with CGA/EGA/VGA/etc. graphics and sound")
+    (description "DOSBox is a DOS-emulator that uses the SDL library.  DOSBox
+also emulates CPU:286/386 realmode/protected mode, Directory
+FileSystem/XMS/EMS, Tandy/Hercules/CGA/EGA/VGA/VESA graphics, a
+SoundBlaster/Gravis Ultra Sound card for excellent sound compatibility with
+older games.")
+    (license license:gpl2+)))
+
+(define-public gamine
+  (package
+    (name "gamine")
+    (version "1.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/gamine-game/"
+                                  "gamine-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1iny959i1kl2ab6z5xi4s66mrvrwcarxyvjfp2k1sx532s8knk8h"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("intltool" ,intltool)))
+    (inputs
+     `(("gstreamer" ,gstreamer)
+       ("gst-plugins-base" ,gst-plugins-base) ;playbin plugin
+       ("gst-plugins-good" ,gst-plugins-good) ;for wav playback
+       ("gtk+" ,gtk+)))
+    (arguments
+     `(#:tests? #f
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out")))
+         (list (string-append "PREFIX=" out)
+               (string-append "SYSCONFDIR=" out "/etc")))
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (add-after
+          'install 'wrap-gamine
+          (lambda* (#:key outputs #:allow-other-keys)
+            (let ((out             (assoc-ref outputs "out"))
+                  (gst-plugin-path (getenv "GST_PLUGIN_SYSTEM_PATH")))
+              (wrap-program (string-append out "/bin/gamine")
+                `("GST_PLUGIN_SYSTEM_PATH" ":" prefix (,gst-plugin-path))))
+            #t)))))
+    (home-page "http://gamine-game.sourceforge.net/")
+    (synopsis "Mouse and keyboard discovery for children")
+    (description
+     "Gamine is a game designed for young children who are learning to use the
+mouse and keyboard.  The child uses the mouse to draw colored dots and lines
+on the screen and keyboard to display letters.")
+    ;; Most files under gpl2+ or gpl3+, but eat.wav under gpl3
+    (license license:gpl3)))
+
+(define-public raincat
+  (package
+    (name "raincat")
+    (version "1.1.1.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "http://hackage.haskell.org/package/Raincat/Raincat-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1aalh68h6799mv4vyg30zpskl5jkn6x2j1jza7p4lrflyifxzar8"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-extensible-exceptions" ,ghc-extensible-exceptions)
+       ("ghc-mtl" ,ghc-mtl)
+       ("ghc-random" ,ghc-random)
+       ("ghc-glut" ,ghc-glut)
+       ("ghc-opengl" ,ghc-opengl)
+       ("ghc-sdl" ,ghc-sdl)
+       ("ghc-sdl-image" ,ghc-sdl-image)
+       ("ghc-sdl-mixer" ,ghc-sdl-mixer)))
+    (home-page "http://raincat.bysusanlin.com/")
+    (synopsis "Puzzle game with a cat in lead role")
+    (description "Project Raincat is a game developed by Carnegie Mellon
+students through GCS during the Fall 2008 semester.  Raincat features game
+play inspired from classics Lemmings and The Incredible Machine.  The project
+proved to be an excellent learning experience for the programmers.  Everything
+is programmed in Haskell.")
+    (license license:bsd-3)))
+
+(define-public manaplus
+  (package
+    (name "manaplus")
+    (version "1.5.10.24")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://repo.manaplus.org/manaplus/download/"
+                    version "/manaplus-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1bjxdyicli1pq65a6l4m84ksqwn9i90xa7yly9sfcrwq5mm1zimb"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags
+       (list (string-append "CPPFLAGS=-I"
+                            (assoc-ref %build-inputs "sdl-union")
+                            "/include/SDL"))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("glu" ,glu)
+       ("curl" ,curl)
+       ("libxml2" ,libxml2)
+       ("mesa" ,mesa)
+       ("physfs" ,physfs)
+       ("sdl-union" ,(sdl-union))))
+    (home-page "http://manaplus.org")
+    (synopsis "Client for 'The Mana World' and similar games")
+    (description
+     "ManaPlus is a 2D MMORPG client for game servers.  It is the only
+fully supported client for @uref{http://www.themanaworld.org, The mana
+world}, @uref{http://evolonline.org, Evol Online} and
+@uref{http://landoffire.org, Land of fire}.")
+    ;; "src/debug/*" and "src/sdl2gfx/*" are under Zlib.
+    ;; "data/themes/{golden-delicious,jewelry}/*" are under CC-BY-SA.
+    ;; The rest is under GPL2+.
+    (license (list license:gpl2+ license:zlib license:cc-by-sa4.0))))
+
+(define-public mupen64plus-core
+  (package
+    (name "mupen64plus-core")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-core/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0dg2hksm5qni2hcha93k7n4fqr92888p946f7phb0ndschzfh9kk"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("freetype" ,freetype)
+       ("glu" ,glu)
+       ("libpng" ,libpng)
+       ("mesa" ,mesa)
+       ("sdl2" ,sdl2)
+       ("zlib" ,zlib)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags (let ((out (assoc-ref %outputs "out")))
+                      (list "all" (string-append "PREFIX=" out)))
+       ;; There are no tests.
+       #:tests? #f))
+    ;; As per the Makefile (in projects/unix/Makefile):
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Nintendo 64 emulator core library")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+core library.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-audio-sdl
+  (package
+    (name "mupen64plus-audio-sdl")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-audio-sdl/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0ss6w92n2rpfnazhg9lbq0nvs3fqx93nliz3k3wjxdlx4dpi7h3a"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus SDL input plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+SDL audio plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-input-sdl
+  (package
+    (name "mupen64plus-input-sdl")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-input-sdl/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "11sj5dbalp2nrlmki34vy7wy28vc175pnnkdk65p8599hnyq37ri"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("which" ,which)))
+    (inputs
+     `(("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus SDL input plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+SDL input plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-rsp-hle
+  (package
+    (name "mupen64plus-rsp-hle")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-rsp-hle/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "15h7mgz6xd2zjzm6l3f96sbs8kwr3xvbwzgikhnka79m6c69hsxv"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("mupen64plus-core" ,mupen64plus-core)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus SDL input plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+high-level emulation (HLE) RSP processor plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-rsp-z64
+  (package
+    (name "mupen64plus-rsp-z64")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-rsp-z64/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "10jz1w2dhx5slhyk4m8mdqlpsd6cshchslr1fckb2ayzb1ls3ghi"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("mupen64plus-core" ,mupen64plus-core)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus SDL input plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Z64 RSP processor plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-video-arachnoid
+  (package
+    (name "mupen64plus-video-arachnoid")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-video-arachnoid/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0jjwf144rihznm4lnqbhgigxw664v3v32wy94adaa6imk8z6gslh"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("mesa" ,mesa)
+       ("mupen64plus-core" ,mupen64plus-core)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus Rice Video plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Arachnoid video plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-video-glide64
+  (package
+    (name "mupen64plus-video-glide64")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-video-glide64/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1rm55dbf6xgsq1blbzs6swa2ajv0qkn38acbljj346abnk6s3dla"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("mesa" ,mesa)
+       ("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix")))
+         ;; XXX Should be unnecessary with the next release.
+         (add-before
+          'build 'use-sdl2
+          (lambda _
+            (substitute* "Makefile"
+              (("SDL_CONFIG = (.*)sdl-config" all prefix)
+               (string-append "SDL_CONFIG = " prefix "sdl2-config"))))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus Rice Video plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Glide64 video plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-video-glide64mk2
+  (package
+    (name "mupen64plus-video-glide64mk2")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-video-glide64mk2/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1ihl4q293d6svba26b4mhapjcdg12p90gibz79b4mx423jlcxxj9"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("boost" ,boost)
+       ("libpng" ,libpng)
+       ("mesa" ,mesa)
+       ("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)
+       ("zlib" ,zlib)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus Rice Video plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Glide64MK2 video plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-video-rice
+  (package
+    (name "mupen64plus-video-rice")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-video-rice/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "0rd2scjmh285w61aj3mgx71whg5rqrjbry3cdgicczrnyvf8wdvk"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("libpng" ,libpng)
+       ("mesa" ,mesa)
+       ("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus Rice Video plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Rice Video plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-video-z64
+  (package
+    (name "mupen64plus-video-z64")
+    (version "2.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-video-z64/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "1x7wsjs5gx2iwx20p4cjcbf696zsjlh31qxmghwv0ifrq8x58s1b"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("glew" ,glew)
+       ("mupen64plus-core" ,mupen64plus-core)
+       ("sdl2" ,sdl2)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix")))
+         ;; XXX Should be unnecessary with the next release.
+         (add-before
+          'build 'use-sdl2
+          (lambda _
+            (substitute* "Makefile"
+              (("SDL_CONFIG = (.*)sdl-config" all prefix)
+               (string-append "SDL_CONFIG = " prefix "sdl2-config"))))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus Z64 video plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+Z64 video plugin.")
+    (license license:gpl2+)))
+
+(define-public mupen64plus-ui-console
+  (package
+    (name "mupen64plus-ui-console")
+    (version "2.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/mupen64plus/mupen64plus-ui-console/archive/"
+             version ".tar.gz"))
+       (file-name (string-append name "-" version ".tar.gz"))
+       (sha256
+        (base32 "04qkpd8ic7xsgnqz7spl00wxdygf79m7d1k8rabbygjk5lg6p8z2"))
+       (patches
+        (list (search-patch "mupen64plus-ui-console-notice.patch")))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)
+       ("which" ,which)))
+    (inputs
+     `(("sdl2" ,sdl2)))
+    ;; Mupen64Plus supports a single data directory and a single plugin
+    ;; directory in its configuration, yet we need data and plugin files from
+    ;; a variety of packages.  The best way to deal with this is to install
+    ;; all packages from which data and plugin files are needed into one's
+    ;; profile, and point the configuration there.  Hence, propagate the most
+    ;; important packages here to save the user from the bother.  The patch
+    ;; mupen64plus-ui-console-notice also gives users instructions on what
+    ;; they need to do in order to point the configuration to their profile.
+    (propagated-inputs
+     `(("mupen64plus-core" ,mupen64plus-core)
+       ("mupen64plus-audio-sdl" ,mupen64plus-audio-sdl)
+       ("mupen64plus-input-sdl" ,mupen64plus-input-sdl)
+       ("mupen64plus-rsp-hle" ,mupen64plus-rsp-hle)
+       ("mupen64plus-video-glide64" ,mupen64plus-video-glide64)
+       ("mupen64plus-video-glide64mk2" ,mupen64plus-video-glide64mk2)
+       ("mupen64plus-video-rice" ,mupen64plus-video-rice)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The mupen64plus build system has no configure phase.
+         (delete 'configure)
+         ;; Makefile is in a subdirectory.
+         (add-before
+          'build 'cd-to-project-dir
+          (lambda _
+            (chdir "projects/unix"))))
+       #:make-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (m64p (assoc-ref %build-inputs "mupen64plus-core")))
+         (list "all"
+               (string-append "PREFIX=" out)
+               (string-append "APIDIR=" m64p "/include/mupen64plus")
+               ;; Trailing slash matters here.
+               (string-append "COREDIR=" m64p "/lib/")))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://www.mupen64plus.org/")
+    (synopsis "Mupen64Plus SDL input plugin")
+    (description
+     "Mupen64Plus is a cross-platform plugin-based Nintendo 64 (N64) emulator
+which is capable of accurately playing many games.  This package contains the
+command line user interface.  Installing this package is the easiest way
+towards a working Mupen64Plus for casual users.")
+    (license license:gpl2+)))
+
+(define-public nestopia-ue
+  (package
+    (name "nestopia-ue")
+    (version "1.46.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://github.com/rdanbrook/nestopia/archive/"
+                    version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "07h49xwvg61dx20rk5p4r3ax2ar5y0ppvm60cqwqljyi9rdfbh7p"))
+              (modules '((guix build utils)))
+              (snippet
+               '(begin
+                  ;; We don't need libretro for the GNU/Linux build.
+                  (delete-file-recursively "libretro")
+                  ;; Use system zlib.
+                  (delete-file-recursively "source/zlib")
+                  (substitute* "source/core/NstZlib.cpp"
+                    (("#include \"../zlib/zlib.h\"") "#include <zlib.h>"))))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("ao" ,ao)
+       ("glu" ,glu)
+       ("gtk+" ,gtk+)
+       ("libarchive" ,libarchive)
+       ("mesa" ,mesa)
+       ("sdl2" ,sdl2)
+       ("zlib" ,zlib)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         ;; The Nestopia build system consists solely of a Makefile.
+         (delete 'configure)
+         ;; XXX Should be unnecessary with the next release.
+         (add-before
+          'build 'patch-makefile
+          (lambda _
+            (substitute* "Makefile"
+              (("@mkdir \\$@") "@mkdir -p $@")
+              (("CC =") "CC ?=")
+              (("CXX =") "CXX ?=")
+              (("PREFIX =") "PREFIX ?=")
+              (("^install:\n$") "install:\n\tmkdir -p $(BINDIR)\n"))))
+         (add-before
+          'build 'remove-xdg-desktop-menu-call
+          (lambda _
+            (substitute* "Makefile"
+              (("xdg-desktop-menu install .*") "")))))
+       #:make-flags (let ((out (assoc-ref %outputs "out")))
+                      (list "CC=gcc" "CXX=g++" (string-append "PREFIX=" out)))
+       ;; There are no tests.
+       #:tests? #f))
+    (home-page "http://0ldsk00l.ca/nestopia/")
+    (synopsis "Nintendo Entertainment System (NES/Famicom) emulator")
+    (description
+     "Nestopia UE (Undead Edition) is a fork of the Nintendo Entertainment
+System (NES/Famicom) emulator Nestopia, with enhancements from members of the
+emulation community.  It provides highly accurate emulation.")
+    (license license:gpl2+)))