gnu: upower: Enable GObject introspection.
[jackhill/guix/guix.git] / gnu / packages / games.scm
index 5843ca6..4274d4c 100644 (file)
@@ -1,14 +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 Ludovic Courtès <ludo@gnu.org>
+;;; 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)
@@ -41,6 +53,9 @@
   #:use-module (gnu packages gtk)
   #: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)
@@ -52,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 curl)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages video)
-  #:use-module (gnu packages which)
   #: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))
 
@@ -105,7 +123,7 @@ representation of the playing board.")
 (define-public gnubik
   (package
     (name "gnubik")
-    (version "2.4.1")
+    (version "2.4.2")
     (source
      (origin
       (method url-fetch)
@@ -113,7 +131,7 @@ representation of the playing board.")
                           version ".tar.gz"))
       (sha256
        (base32
-        "0mfpwz341i1qpzi2qgslpc5i7d4fv7i01kv392m11pczqdc7i7m5"))))
+        "0mhpfnxzbns0wfrsjv5vafqr34770rbvkmdzxk0x0aq67hb3zyl5"))))
     (build-system gnu-build-system)
     (inputs `(("gtk+" ,gtk+-2)
               ("mesa" ,mesa)
@@ -150,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
@@ -251,7 +257,7 @@ level's exit.  The game is presented in a 2D side view.")
      (origin
        (method url-fetch)
        (uri (string-append "http://www.hyperrealm.com/" name "/"
-                           name  "-" version  ".tar.gz")) 
+                           name  "-" version  ".tar.gz"))
        (sha256
         (base32 "19nc5vq4bnkjvhk8srqddzhcs93jyvpm9r6lzjzwc1mgf08yg0a6"))))
     (build-system gnu-build-system)
@@ -299,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)
@@ -307,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")
@@ -441,21 +447,21 @@ Portable Game Notation.")
      `(#:tests? #f
        #:phases
        (alist-replace
-        'configure 
+        'configure
         (lambda* (#:key outputs #:allow-other-keys)
-          
-          (substitute* "Imakefile" 
+
+          (substitute* "Imakefile"
             (("XPMINCLUDE[\t ]*= -I/usr/X11/include/X11")
              (string-append "XPMINCLUDE = -I" (assoc-ref %build-inputs "libxpm")
                             "/include/X11")))
-          
-          (substitute* "Imakefile" 
+
+          (substitute* "Imakefile"
             (("XBOING_DIR = \\.") "XBOING_DIR=$(PROJECTROOT)"))
-          
+
           ;; FIXME: HIGH_SCORE_FILE should be set to somewhere writeable
-          
-          (zero? (system* "xmkmf" "-a" 
-                          (string-append "-DProjectRoot=" 
+
+          (zero? (system* "xmkmf" "-a"
+                          (string-append "-DProjectRoot="
                                          (assoc-ref outputs "out")))))
         (alist-replace 'install
                        (lambda* (#:key outputs #:allow-other-keys)
@@ -513,35 +519,6 @@ alternative layouts Dvorak and Colemak, as well as for the numpad.  Tutorials
 are primarily in English, however some in other languages are provided.")
     (license license:gpl3+)))
 
-(define-public openal
-  (package
-    (name "openal")
-    (version "1.15.1")
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "http://kcat.strangesoft.net/openal-releases/openal-soft-"
-                    version ".tar.bz2"))
-              (sha256
-               (base32
-                "0mmhdqiyb3c9dzvxspm8h2v8jibhi8pfjxnf6m0wn744y1ia2a8f"))))
-    (build-system cmake-build-system)
-    (arguments
-     `(#:tests? #f)) ; no check target
-    (inputs
-     `(("alsa-lib" ,alsa-lib)
-       ("pulseaudio" ,pulseaudio)))
-    (synopsis "3D audio API")
-    (description
-     "OpenAL provides capabilities for playing audio in a virtual 3D
-environment.  Distance attenuation, doppler shift, and directional sound
-emitters are among the features handled by the API.  More advanced effects,
-including air absorption, occlusion, and environmental reverb, are available
-through the EFX extension.  It also facilitates streaming audio, multi-channel
-buffers, and audio capture.")
-    (home-page "http://kcat.strangesoft.net/openal.html")
-    (license license:lgpl2.0+)))
-
 (define-public irrlicht
   (package
     (name "irrlicht")
@@ -597,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.11")
+    (version "0.4.13")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -609,7 +639,7 @@ for common mesh file formats, and collision detection.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0hzb27srv6f2j84dpxx2p0p0aaq9vdp5jvbrfpklb5q5ssdjxvc6"))))
+                "04xnyfap75v3p818kpqb07xshqwqzpws5xjvw5m96qnd9x4725ld"))))
     (build-system trivial-build-system)
     (native-inputs
      `(("source" ,source)
@@ -641,7 +671,7 @@ for common mesh file formats, and collision detection.")
 (define-public minetest
   (package
     (name "minetest")
-    (version "0.4.11")
+    (version "0.4.13")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -650,30 +680,19 @@ for common mesh file formats, and collision detection.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0h223svzkvp63b77nqfxy7k8whw4543gahs3kxd3x4myi5ax5z5f"))))
+                "1xzrvsg0fpbj5p4pz6lls11m3ab4y2bnjlsm4gnw68x9006ffznp"))))
     (build-system cmake-build-system)
     (arguments
-     '(#:modules ((guix build utils)
-                  (guix build cmake-build-system)
-                  (ice-9 match))
-       #:phases (alist-cons-before
-                 'configure 'set-cpath
-                 (lambda* (#:key inputs #:allow-other-keys)
-                   (use-modules (ice-9 match))
-                   ;; Adjust the CPATH so that cmake can find irrlicht,
-                   ;; openal, and curl headers.
-                   (set-path-environment-variable "CPATH"
-                                                  '("include/AL"
-                                                    "include/irrlicht"
-                                                    "include/curl"
-                                                    "include")
-                                                  (map (match-lambda
-                                                        ((_ . dir) dir))
-                                                       inputs)))
-                 %standard-phases)
-       #:configure-flags '("-DRUN_IN_PLACE=0"
-                           "-DENABLE_FREETYPE=1"
-                           "-DENABLE_GETTEXT=1")
+     '(#:configure-flags
+         (list "-DRUN_IN_PLACE=0"
+               "-DENABLE_FREETYPE=1"
+               "-DENABLE_GETTEXT=1"
+               (string-append "-DIRRLICHT_INCLUDE_DIR="
+                              (assoc-ref %build-inputs "irrlicht")
+                              "/include/irrlicht")
+               (string-append "-DCURL_INCLUDE_DIR="
+                              (assoc-ref %build-inputs "curl")
+                              "/include/curl"))
        #:tests? #f)) ; no check target
     (native-search-paths
      (list (search-path-specification
@@ -684,7 +703,7 @@ for common mesh file formats, and collision detection.")
     (inputs
      `(("irrlicht" ,irrlicht)
        ("libpng" ,libpng)
-       ("libjpeg-8" ,libjpeg-8)
+       ("libjpeg" ,libjpeg)
        ("libxxf86vm" ,libxxf86vm)
        ("mesa" ,mesa)
        ("libogg" ,libogg)
@@ -785,18 +804,55 @@ some of the restrictions in the venerable Z-machine format.  This is the
 reference interpreter, using Glk API.")
    (license (license:fsf-free "file://README"))))
 
+(define-public fizmo
+  (package
+    (name "fizmo")
+    (version "0.7.9")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://christoph-ender.de/fizmo/source/"
+                                  name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1w7cgyjrhgkadjrazijzhq7zh0pl5bfc6wl7mdpgh020y4kp46d7"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags
+       (let ((libjpeg (assoc-ref %build-inputs "libjpeg"))
+             (ncurses (assoc-ref %build-inputs "ncurses")))
+         (list (string-append "jpeg_CFLAGS=-I" libjpeg "/include")
+               (string-append "jpeg_LIBS=-ljpeg")
+               (string-append "ncursesw_CFLAGS=-I" ncurses "/include")
+               (string-append "ncursesw_LIBS=-lncursesw")))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("libjpeg" ,libjpeg)
+       ("libpng" ,libpng)
+       ("libsndfile" ,libsndfile)
+       ("libxml2" ,libxml2)
+       ("ncurses" ,ncurses)
+       ("sdl" ,sdl)))
+    (home-page "https://christoph-ender.de/fizmo/")
+    (synopsis "Z-machine interpreter")
+    (description
+     "Fizmo is a console-based Z-machine interpreter.  It is used to play
+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,12 +909,914 @@ 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+)))
+
+(define-public extremetuxracer
+  (package
+    (name "extremetuxracer")
+    (version "0.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "http://downloads.sourceforge.net/project/extremetuxracer/releases/"
+                    version "/etr-" version ".tar.xz"))
+              (sha256
+               (base32
+                "0fl9pwkywqnsmgr6plfj9zb05xrdnl5xb2hcmbjk7ap9l4cjfca4"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("freetype" ,freetype)
+       ("mesa" ,mesa)
+       ("glu" ,glu)
+       ("libice" ,libice)
+       ("libpng" ,libpng)
+       ("sdl" ,sdl)
+       ("sdl-mixer" ,sdl-mixer)
+       ("sdl-image" ,sdl-image)
+       ("libsm" ,libsm)
+       ("libunwind" ,libunwind)
+       ("libx11" ,libx11)
+       ("libxext" ,libxext)
+       ("libxi" ,libxi)
+       ("libxmu" ,libxmu)
+       ("libxt" ,libxt)
+       ("tcl" ,tcl)
+       ("zlib" ,zlib)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'patch-makefile
+           (lambda _
+             (substitute* "Makefile"
+               (("CXXFLAGS =") "CXXFLAGS = ${CFLAGS}")))))))
+    (synopsis "High speed arctic racing game based on Tux Racer")
+    ;; Snarfed straight from Debian
+    (description "Extreme Tux Racer, or etracer as it is called for short, is
+a simple OpenGL racing game featuring Tux, the Linux mascot.  The goal of the
+game is to slide down a snow- and ice-covered mountain as quickly as possible,
+avoiding the trees and rocks that will slow you down.
+
+Collect herrings and other goodies while sliding down the hill, but avoid fish
+bones.
+
+This game is based on the GPL version of the famous game TuxRacer.")
+    (home-page "http://sourceforge.net/projects/extremetuxracer/")
+    (license license:gpl2+)))
+
+(define-public gnujump
+  (package
+    (name "gnujump")
+    (version "1.0.8")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/gnujump/gnujump-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "05syy9mzbyqcfnm0hrswlmhwlwx54f0l6zhcaq8c1c0f8dgzxhqk"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-before
+          'configure 'link-libm
+          (lambda _ (setenv "LIBS" "-lm"))))))
+    (inputs
+     `(("glu" ,glu)
+       ("mesa", mesa)
+       ("sdl" ,sdl)
+       ("sdl-image" ,sdl-image)
+       ("sdl-mixer" ,sdl-mixer)))
+    (home-page "http://gnujump.es.gnu.org/")
+    (synopsis
+     "Game of jumping to the next floor, trying not to fall")
+    (description
+     "GNUjump is a simple, yet addictive game in which you must jump from
+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+)))