Subject: [bug#75641] [PATCH v3] gnu: Add woof-doom.

From: Andrew Wong <[email-masked]>
Date: Tue, 4 Feb 2025 21:17:25 -0500

* gnu/packages/games.scm (woof-doom): New variable.
* gnu/packages/patches/woof-doom-unbundle-spng-miniz.patch: New file.

Change-Id: I77cfa0fd2f2a20d6eee5d0339b9673899bb0ecad
---
Here we are, unbundled and test note added! Yeah, there's no test target.
 gnu/packages/games.scm                        | 48 +++++++++++++++++++
 .../woof-doom-unbundle-spng-miniz.patch       | 26 ++++++++++
 2 files changed, 74 insertions(+)
 create mode 100644 gnu/packages/patches/woof-doom-unbundle-spng-miniz.patch

diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 2e7565ff5d..89b4291d90 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -8783,6 +8783,54 @@ (define-public crispy-doom
 original.")
     (home-page "https://www.chocolate-doom.org/wiki/index.php/Crispy_Doom")))
 
+(define-public woof-doom
+  (package
+    (name "woof-doom")
+    (version "15.2.0")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/fabiangreffrath/woof")
+             (commit (string-append "woof_" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "04c7hm4jnr9aiz6w4520zww6b7j86qv9xaf87hdv48cjc9sp2ljk"))
+       (modules '((guix build utils)))
+       (snippet '(begin
+                   (with-directory-excursion "third-party"
+                     (delete-file-recursively "spng")
+                     (delete-file-recursively "miniz"))
+                   (substitute* (find-files "src" ".")
+                     (("miniz.h")
+                      "miniz/miniz.h")) #t))
+       (patches (search-patches "woof-doom-unbundle-spng-miniz.patch"))))
+    (build-system cmake-build-system)
+    (arguments
+     (list
+      #:tests? #f)) ;no test target
+    (native-inputs (list python))
+    (inputs (list sdl2
+                  sdl2-net
+                  spng
+                  miniz
+                  openal
+                  libsndfile
+                  libebur128
+                  yyjson
+                  fluidsynth
+                  libxmp))
+    (home-page "https://github.com/fabiangreffrath/woof")
+    (synopsis "MBF-style Doom source port targeted at modern systems")
+    (description
+     "Woof! is a continuation of the MBF lineage of Doom source ports, with
+modern features such as dynamic resolution scaling, uncapped framerates,
+adjustable field of view, 3D audio with HRTF and 7.1 surround sound
+support, and modern gamepad features including rumble, gyro, and flick
+stick support.  Supports the new MBF21 format, as well as the MUSINFO,
+UMAPINFO, DEHEXTRA, and DSDHacked specifictions.")
+    (license license:gpl2+)))
+
 (define xonotic-data
   (package
     (name "xonotic-data")
diff --git a/gnu/packages/patches/woof-doom-unbundle-spng-miniz.patch b/gnu/packages/patches/woof-doom-unbundle-spng-miniz.patch
new file mode 100644
index 0000000000..43c3b39193
--- /dev/null
+++ b/gnu/packages/patches/woof-doom-unbundle-spng-miniz.patch
@@ -0,0 +1,26 @@
+Unbundle spng, miniz
+*** a/third-party/CMakeLists.txt
+--- b/third-party/CMakeLists.txt
+@@ -4,20 +4,13 @@
+ target_woof_settings(md5)
+ target_include_directories(md5 INTERFACE md5)
+ 
+-add_library(miniz STATIC miniz/miniz.c)
+-target_woof_settings(miniz)
+-target_compile_definitions(miniz PRIVATE MINIZ_NO_TIME)
+-target_include_directories(miniz INTERFACE miniz)
++find_package(miniz)
+ 
+ add_library(pffft STATIC pffft/pffft.c)
+ target_woof_settings(pffft)
+ target_include_directories(pffft INTERFACE pffft)
+ 
+-add_library(spng STATIC spng/spng.c)
+-target_woof_settings(spng)
+-target_compile_definitions(spng PRIVATE SPNG_USE_MINIZ INTERFACE SPNG_STATIC)
+-target_include_directories(spng INTERFACE spng)
+-target_link_libraries(spng miniz)
++find_package(spng)
+ 
+ if(NOT yyjson_FOUND)
+     add_library(yyjson STATIC yyjson/yyjson.c)

base-commit: 5a897c5c95a81278b044c18d962d3bd83131ba06
-- 
2.48.1