~ruther/guix-local

2922852e86b5173d45d1097b8cb72f8e081b4152 — okapi 8 years ago 9073c87
gnu: Add gzdoom.

* gnu/packages/games.scm (gzdoom): New variable.
* gnu/packages/patches/gzdoom-search-in-installed-share.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
M gnu/local.mk => gnu/local.mk +1 -0
@@ 746,6 746,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/gtk3-respect-GUIX_GTK3_PATH.patch	\
  %D%/packages/patches/gtk3-respect-GUIX_GTK3_IM_MODULE_FILE.patch \
  %D%/packages/patches/gtkglext-disable-disable-deprecated.patch \
  %D%/packages/patches/gzdoom-search-in-installed-share.patch	\
  %D%/packages/patches/handbrake-pkg-config-path.patch		\
  %D%/packages/patches/hdf4-architectures.patch 		\
  %D%/packages/patches/hdf4-reproducibility.patch 		\

M gnu/packages/games.scm => gnu/packages/games.scm +89 -0
@@ 33,6 33,7 @@
;;; Copyright © 2017, 2018 Rutger Helling <rhelling@mykolab.com>
;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
;;; Copyright © 2017, 2018 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2018 okapi <okapi@firemail.cc>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 5678,3 5679,91 @@ to C++ and Java.  Your mission is to find a new planet to live and survive.
You can save humanity and get programming skills!")
    (home-page "https://colobot.info")
    (license license:gpl3+)))

(define-public gzdoom
  (package
    (name "gzdoom")
    (version "3.2.5")
    (source (origin
              (method url-fetch)
              (uri
               (string-append "https://zdoom.org/files/gzdoom/src/gzdoom-g"
                              version ".zip"))
              (sha256
               (base32
                "1164d1zf5in98gp4j981ml3hwmks3q7vzfanlqpjlx2c09jmlv0q"))
              (patches (search-patches "gzdoom-search-in-installed-share.patch"))
              (modules '((guix build utils)))
              (snippet
               '(begin
                  (delete-file-recursively "bzip2")
                  (delete-file-recursively "game-music-emu")
                  (delete-file-recursively "jpeg-6b")
                  (delete-file-recursively "zlib")))))
    (arguments
     '(#:tests? #f
       #:configure-flags
       (let ((out (assoc-ref %outputs "out")))
         (list
          (string-append
           "-DCMAKE_CXX_FLAGS:="
           "-DSHARE_DIR=\\\"" out "/share/\\\" "
           "-DGUIX_OUT_PK3=\\\"" out "/share/games/doom\\\"")
          ;; look for libraries at buildtime instead of
          ;; dynamically finding them at runtime
          "-DDYN_OPENAL=OFF"
          "-DDYN_FLUIDSYNTH=OFF"
          "-DDYN_GTK=OFF"
          "-DDYN_MPG123=OFF"
          "-DDYN_SNDFILE=OFF"))
       #:phases
       (modify-phases %standard-phases
         (add-before 'configure 'fix-referenced-paths
           (lambda* (#:key inputs outputs #:allow-other-keys)
             (let ((fluid-3 (assoc-ref inputs "fluid-3"))
                   (timidity++ (assoc-ref inputs "timidity++"))
                   (out (assoc-ref outputs "out")))

               (substitute*
                   "src/CMakeLists.txt"
                 (("COMMAND /bin/sh")
                  (string-append "COMMAND " (which "sh"))))

               (substitute*
                   "src/sound/mididevices/music_fluidsynth_mididevice.cpp"
                 (("/usr/share/sounds/sf2/FluidR3_GM.sf2")
                  (string-append fluid-3 "/share/soundfonts/FluidR3Mono_GM.sf3")))

               (substitute*
                   "src/sound/mididevices/music_timiditypp_mididevice.cpp"
                 (("exename = \"timidity\"")
                  (string-append "exename = \"" timidity++ "/bin/timidity\"")))
               #t))))))
    (build-system cmake-build-system)
    (inputs `(("bzip2" ,bzip2)
              ("fluid-3" ,fluid-3)
              ("fluidsynth" ,fluidsynth)
              ("gtk+3" ,gtk+)
              ("libgme" ,libgme)
              ("libjpeg" ,libjpeg)
              ("libsndfile" ,libsndfile)
              ("mesa" ,mesa)
              ("mpg123" ,mpg123)
              ("openal" ,openal)
              ("sdl2" ,sdl2)
              ("timidity++" ,timidity++)
              ("zlib" ,zlib)))
    (native-inputs `(("pkg-config" ,pkg-config)
                     ("unzip" ,unzip)))
    (synopsis "Modern Doom 2 source port")
    (description "GZdoom is a port of the Doom 2 game engine, with a modern
renderer.  It improves modding support with ZDoom's advanced mapping features
and the new ZScript language.  In addition to Doom, it supports Heretic, Hexen,
Strife, Chex Quest, and fan-created games like Harmony, Hacx and Freedoom.")
    (home-page "https://zdoom.org/index")
    (license (list license:gpl3+         ; gzdoom game
                   license:lgpl3+        ; gzdoom renderer
                   license:expat         ; gdtoa
                   (license:non-copyleft ; modified dumb
                    "file://dumb/licence.txt"
                    "Dumb license, explicitly GPL compatible.")))))

A gnu/packages/patches/gzdoom-search-in-installed-share.patch => gnu/packages/patches/gzdoom-search-in-installed-share.patch +23 -0
@@ 0,0 1,23 @@
Lookup gzdoom pk3 files in the installed directory in
addition to the path that is stored in ~/.config/gzdoom/.

Simply replacing the hardcoded /usr/share would leave the
configfile pointing to outdated guix builds, which could get
garbage collected and break the gzdoom installation.
This ensures that the files installed with the corresponding
build will be used.

--- /src/d_main.cpp	2018-01-16 22:13:09.700602781 +0200
+++ /src/d_main.cpp	2018-01-16 22:22:36.560617961 +0200
@@ -1716,6 +1716,11 @@
 		return wad;
 	}
 
+    mysnprintf (wad, countof(wad), "%s/%s", GUIX_OUT_PK3, file);
+    if (DirEntryExists (wad)) {
+        return wad;
+    }
+
 	if (GameConfig != NULL && GameConfig->SetSection ("FileSearch.Directories"))
 	{
 		const char *key;