diff mbox

add kobodeluxe

Message ID 87h98bag8p.fsf@dustycloud.org
State New
Headers show

Commit Message

Christopher Allan Webber Oct. 17, 2016, 1:58 a.m. UTC
Christopher Allan Webber writes:

> I know Stephen, so I helped him put together this package, which is his
> first.  It's a long time favorite free software game.
>
> There were a lot of patches to Kobo Deluxe in Debian; we kept finding
> that it wouldn't build without one or another of them, and we read the
> summary of all of them and decided they were all probably worth
> including.
>
> I think the package looks fine, but probably someone else should look it
> over.  If someone can give it an ACK, I'd love to merge it (or you can)!
>
>  - Chris

There was something I overlooked, mainly because we corrected it late
in the patch... the automake file is missing some backslashes.  I also
changed some underscores to dashes in the patch filenames.

New patch attached!

Comments

Ludovic Courtès Oct. 17, 2016, 2:50 p.m. UTC | #1
Hello!

Welcome, Stephen!

Christopher Allan Webber <cwebber@dustycloud.org> skribis:

> From c8b122d8c7cf7a574bbbac66963ac355c64effc5 Mon Sep 17 00:00:00 2001
> From: Stephen Webber <webber.sl@gmail.com>
> Date: Sun, 16 Oct 2016 15:04:35 -0500
> Subject: [PATCH] gnu: Add kobodeluxe.
>
> * gnu/packages/games.scm (kobodeluxe): New variable.
> * gnu/packages/patches/kobodeluxe_paths.patch: New file.
> * gnu/packages/patches/kobodeluxe-spelling.patch: New file.
> * gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch: New file.
> * gnu/packages/patches/kobodeluxe_const_charp_conversion.patch: New file.
> * gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch: New file.
> * gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch: New file.
> * gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch: New file.
> * gnu/local.mk (dist_patch_DATA): Register it.

Overall looks good to me!  I have minor/cosmetic suggestions, but
otherwise this is ready for commit IMO.

> +  %D%/packages/patches/kobodeluxe_paths.patch
> +  %D%/packages/patches/kobodeluxe-spelling.patch
> +  %D%/packages/patches/kobodeluxe_enemies-pipe-decl.patch
> +  %D%/packages/patches/kobodeluxe_const_charp_conversion.patch
> +  %D%/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch
> +  %D%/packages/patches/kobodeluxe-midicon-segmentation-fault.patch
> +  %D%/packages/patches/kobodeluxe_graphics_window-signed-char.patch

Maybe use only hyphens in file names for consistency.

> +    (synopsis "Shooter with space station destruction")
> +    (description
> +     "Kobo Deluxe is an enhanced version of Akira Higuchi's XKobo for Un*x
> +systems with X11.")

Maybe s/XKobo.*/XKobo graphical game/.

That way ‘guix package -s game’ will return it.  :-)

> --- /dev/null
> +++ b/gnu/packages/patches/kobodeluxe-spelling.patch
> @@ -0,0 +1,25 @@
> +Description: two spelling fixes
> +Author: Damyan Ivanov <dmn@debian.org>

Maybe this patch can be omitted; hopefully it’ll be fixed in the next
release.

> +++ b/gnu/packages/patches/kobodeluxe_paths.patch
> @@ -0,0 +1,40 @@
> +# Disable reading of configs, graphics, and data from the current directory.
> +# So it's safe to run kobodeluxe from anywhere w/o worry about an attacker
> +# feeding it bad data.

Could you indicate the origin or status of this patch?

Chris: feel free to push an updated version!

Stephen, you picked a tricky package as your first patch but it’s
perfect!  I’m sure you had a good mentor too.  ;-)

Ludo’.
diff mbox

Patch

From c8b122d8c7cf7a574bbbac66963ac355c64effc5 Mon Sep 17 00:00:00 2001
From: Stephen Webber <webber.sl@gmail.com>
Date: Sun, 16 Oct 2016 15:04:35 -0500
Subject: [PATCH] gnu: Add kobodeluxe.

* gnu/packages/games.scm (kobodeluxe): New variable.
* gnu/packages/patches/kobodeluxe_paths.patch: New file.
* gnu/packages/patches/kobodeluxe-spelling.patch: New file.
* gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch: New file.
* gnu/packages/patches/kobodeluxe_const_charp_conversion.patch: New file.
* gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch: New file.
* gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch: New file.
* gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
---
 gnu/local.mk                                       |  7 +++
 gnu/packages/games.scm                             | 34 +++++++++++
 .../kobodeluxe-midicon-segmentation-fault.patch    | 24 ++++++++
 gnu/packages/patches/kobodeluxe-spelling.patch     | 25 ++++++++
 .../kobodeluxe_const_charp_conversion.patch        | 17 ++++++
 .../patches/kobodeluxe_enemies-pipe-decl.patch     | 67 ++++++++++++++++++++++
 .../kobodeluxe_graphics_window-signed-char.patch   | 38 ++++++++++++
 .../kobodeluxe_manpage-minus-not-hyphen.patch      | 15 +++++
 gnu/packages/patches/kobodeluxe_paths.patch        | 40 +++++++++++++
 9 files changed, 267 insertions(+)
 create mode 100644 gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch
 create mode 100644 gnu/packages/patches/kobodeluxe-spelling.patch
 create mode 100644 gnu/packages/patches/kobodeluxe_const_charp_conversion.patch
 create mode 100644 gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch
 create mode 100644 gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch
 create mode 100644 gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch
 create mode 100644 gnu/packages/patches/kobodeluxe_paths.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index 19dd9ae..ccdca77 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -621,6 +621,13 @@  dist_patch_DATA =						\
   %D%/packages/patches/jq-CVE-2015-8863.patch			\
   %D%/packages/patches/khmer-use-libraries.patch                \
   %D%/packages/patches/kmod-module-directory.patch		\
+  %D%/packages/patches/kobodeluxe_paths.patch
+  %D%/packages/patches/kobodeluxe-spelling.patch
+  %D%/packages/patches/kobodeluxe_enemies-pipe-decl.patch
+  %D%/packages/patches/kobodeluxe_const_charp_conversion.patch
+  %D%/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch
+  %D%/packages/patches/kobodeluxe-midicon-segmentation-fault.patch
+  %D%/packages/patches/kobodeluxe_graphics_window-signed-char.patch
   %D%/packages/patches/laby-make-install.patch			\
   %D%/packages/patches/ldc-disable-tests.patch			\
   %D%/packages/patches/lftp-dont-save-unknown-host-fingerprint.patch \
diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 2bb53e0..3fed38c 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -23,6 +23,7 @@ 
 ;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
 ;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2016 Steve Webber <webber.sl@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -2994,3 +2995,36 @@  symbols, the game needs graphics to render the non-euclidean world.")
                    license:public-domain ; src/direntx.*
                    license:zlib          ; src/savepng.*
                    license:gpl2+))))     ; remaining files
+
+(define-public kobodeluxe
+  (package
+    (name "kobodeluxe")
+    (version "0.5.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "http://olofson.net/kobodl/download/KoboDeluxe-"
+                                  version ".tar.bz2"))
+              (sha256
+               (base32
+                "0b2wvdpnmaibsy419c16dfwj5kvd3pccby2aaqvm964x74592yqg"))
+              (patches (search-patches
+                        "kobodeluxe_const_charp_conversion.patch"
+                        "kobodeluxe_enemies-pipe-decl.patch"
+                        "kobodeluxe_graphics_window-signed-char.patch"
+                        "kobodeluxe_manpage-minus-not-hyphen.patch"
+                        "kobodeluxe-midicon-segmentation-fault.patch"
+                        "kobodeluxe_paths.patch"
+                        "kobodeluxe-spelling.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags
+       (list (string-append "CPPFLAGS=-I"
+                            (assoc-ref %build-inputs "sdl-union")
+                            "/include/SDL"))))
+    (inputs `(("sdl-union" ,(sdl-union (list sdl sdl-image)))))
+    (synopsis "Shooter with space station destruction")
+    (description
+     "Kobo Deluxe is an enhanced version of Akira Higuchi's XKobo for Un*x
+systems with X11.")
+    (home-page "http://olofson.net/kobodl/")
+    (license license:gpl2+)))
diff --git a/gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch b/gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch
new file mode 100644
index 0000000..65ce259
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch
@@ -0,0 +1,24 @@ 
+From: Emile CARRY <emile.carry@sequanux.org>
+Date: Wed, 6 Apr 2016 00:27:17 +0200
+Subject: midicon segmentation fault
+
+Debian-Bug: https://bugs.debian.org/819897
+Forwarded: no
+---
+ sound/a_midicon.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/sound/a_midicon.c b/sound/a_midicon.c
+index 57de3cf..ded2988 100644
+--- a/sound/a_midicon.c
++++ b/sound/a_midicon.c
+@@ -120,8 +120,8 @@ static inline void __press(unsigned ch, unsigned key)
+ {
+ 	m[ch].next[key] = -1;
+ 	m[ch].prev[key] = m[ch].last;
+-	m[ch].next[m[ch].last] = (char)key;
+ 	m[ch].last = (char)key;
++	m[ch].next[m[ch].last] = (char)key;
+ }
+ 
+ 
diff --git a/gnu/packages/patches/kobodeluxe-spelling.patch b/gnu/packages/patches/kobodeluxe-spelling.patch
new file mode 100644
index 0000000..21259cc
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe-spelling.patch
@@ -0,0 +1,25 @@ 
+Description: two spelling fixes
+Author: Damyan Ivanov <dmn@debian.org>
+
+--- a/graphics/sofont.cpp
++++ b/graphics/sofont.cpp
+@@ -255,7 +255,7 @@ bool SoFont::load(SDL_Surface * FontSurf
+ 
+ 	if(!FontSurface)
+ 	{
+-		log_printf(ELOG, "SoFont recieved a NULL SDL_Surface\n");
++		log_printf(ELOG, "SoFont received a NULL SDL_Surface\n");
+ 		return false;
+ 	}
+ 	if(picture)
+--- a/prefs.cpp
++++ b/prefs.cpp
+@@ -161,7 +161,7 @@ void prefs_t::postload()
+ 
+ 	if((o_wait_msec != 30) && !cmd_cheat)
+ 	{
+-		log_printf(ELOG, "'wait' is only avaliable in cheat mode!\n");
++		log_printf(ELOG, "'wait' is only available in cheat mode!\n");
+ 		o_wait_msec = 30;
+ 	}
+ 
diff --git a/gnu/packages/patches/kobodeluxe_const_charp_conversion.patch b/gnu/packages/patches/kobodeluxe_const_charp_conversion.patch
new file mode 100644
index 0000000..a14ed4b
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe_const_charp_conversion.patch
@@ -0,0 +1,17 @@ 
+Description: Avoid compilation error with gcc-4.4.
+ "const char* -> char*" conversion is fatal in that version
+Origin: vendor, https://bugs.launchpad.net/ubuntu/+source/kobodeluxe/+bug/461373
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/kobodeluxe/+bug/461373
+Bug-Debian: http://bugs.debian.org/552548
+Forwarded: http://www.freelists.org/post/olofsonprojects/kobodlpatch-compile-error-in-windowcpp-with-g44
+--- a/graphics/window.cpp
++++ b/graphics/window.cpp
+@@ -398,7 +398,7 @@ void window_t::center_token_fxp(int _x, 
+ 		 */
+ 		if(token)
+ 		{
+-			char *tok = strchr(txt, token);
++			const char *tok = strchr(txt, token);
+ 			if(tok)
+ 				tokpos = tok-txt;
+ 			else
diff --git a/gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch b/gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch
new file mode 100644
index 0000000..9510ed4
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe_enemies-pipe-decl.patch
@@ -0,0 +1,67 @@ 
+# Authhor: Damyan Ivanov <dmn@debian.org>
+# Description: rename pipe2 symbol to pipe2_kbdl to avoid clashes with the one
+#              declared in system unistd.h
+# Debian-Bug: 527705
+# Upstream-Report: http://www.freelists.org/post/olofsonprojects/kobodeluxe-failing-to-build-in-Debian-enemiesh75-error-const-enemy-kind-pipe2-redeclared-as-different-kind-of-symbol
+--- a/enemies.h
++++ b/enemies.h
+@@ -72,7 +72,7 @@ extern const enemy_kind bombdeto;
+ extern const enemy_kind cannon;
+ extern const enemy_kind pipe1;
+ extern const enemy_kind core;
+-extern const enemy_kind pipe2;
++extern const enemy_kind pipe2_kbdl;
+ extern const enemy_kind rock;
+ extern const enemy_kind ring;
+ extern const enemy_kind enemy_m1;
+@@ -430,7 +430,7 @@ inline int _enemy::realize()
+ 
+ inline int _enemy::is_pipe()
+ {
+-	return ((_state != notuse) && ((ek == &pipe1) || (ek == &pipe2)));
++	return ((_state != notuse) && ((ek == &pipe1) || (ek == &pipe2_kbdl)));
+ }
+ 
+ 
+--- a/enemy.cpp
++++ b/enemy.cpp
+@@ -755,10 +755,10 @@ void _enemy::move_core()
+ 
+ void _enemy::kill_core()
+ {
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
+-	enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
++	enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
++	enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
++	enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
++	enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
+ 	enemies.make(&explosion4, CS2PIXEL(x), CS2PIXEL(y));
+ 	sound.g_base_core_explo(x, y);
+ 	release();
+@@ -978,19 +978,19 @@ void _enemy::move_pipe2()
+ 	}
+ 	p ^= a;
+ 	if(p & U_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
++		enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 1);
+ 	if(p & R_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
++		enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 3);
+ 	if(p & D_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
++		enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 5);
+ 	if(p & L_MASK)
+-		enemies.make(&pipe2, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
++		enemies.make(&pipe2_kbdl, CS2PIXEL(x), CS2PIXEL(y), 0, 0, 7);
+ 	manage.add_score(10);
+ 	release();
+ }
+ 
+ 
+-const enemy_kind pipe2 = {
++const enemy_kind pipe2_kbdl = {
+ 	0,
+ 	&_enemy::make_pipe2,
+ 	&_enemy::move_pipe2,
diff --git a/gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch b/gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch
new file mode 100644
index 0000000..b258b62
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe_graphics_window-signed-char.patch
@@ -0,0 +1,38 @@ 
+# This was created in responce to Debian bug #163979
+# Thing is, if you want to compant "-1" with a char value,
+# you better make that char signed
+--- kobodeluxe-0.5.1.orig/graphics/window.cpp
++++ kobodeluxe-0.5.1/graphics/window.cpp
+@@ -331,7 +331,7 @@
+ }
+ 
+ 
+-void window_t::center_token(int _x, int _y, const char *txt, char token)
++void window_t::center_token(int _x, int _y, const char *txt, signed char token)
+ {
+ 	center_token_fxp(PIXEL2CS(_x), PIXEL2CS(_y), txt, token);
+ }
+@@ -374,7 +374,7 @@
+ }
+ 
+ 
+-void window_t::center_token_fxp(int _x, int _y, const char *txt, char token)
++void window_t::center_token_fxp(int _x, int _y, const char *txt, signed char token)
+ {
+ 	_x = CS2PIXEL((_x * xs + 128) >> 8);
+ 	_y = CS2PIXEL((_y * ys + 128) >> 8);
+--- kobodeluxe-0.5.1.orig/graphics/window.h
++++ kobodeluxe-0.5.1/graphics/window.h
+@@ -265,10 +265,10 @@
+ 	void font(int fnt);
+ 	void string(int _x, int _y, const char *txt);
+ 	void center(int _y, const char *txt);
+-	void center_token(int _x, int _y, const char *txt, char token = 0);
++	void center_token(int _x, int _y, const char *txt, signed char token = 0);
+ 	void string_fxp(int _x, int _y, const char *txt);
+ 	void center_fxp(int _y, const char *txt);
+-	void center_token_fxp(int _x, int _y, const char *txt, char token = 0);
++	void center_token_fxp(int _x, int _y, const char *txt, signed char token = 0);
+ 	int textwidth(const char *txt, int min = 0, int max = 255);
+ 	int textwidth_fxp(const char *txt, int min = 0, int max = 255);
+ 	int fontheight();
diff --git a/gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch b/gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch
new file mode 100644
index 0000000..34cab90
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe_manpage-minus-not-hyphen.patch
@@ -0,0 +1,15 @@ 
+# Author: Damyan Ivanov <dmn@debian.org>
+# Description: convert a hyphen in kobodl manpage to a minus, which is what is
+#              inttented here
+# Upstream-Report: http://www.freelists.org/post/olofsonprojects/patch-manpage-uses-hyphen-instead-of-a-minus-sign
+--- a/kobodl.6
++++ b/kobodl.6
+@@ -176,7 +176,7 @@ Video Mode. Default: 17200.
+ Enable Vertical Sync. Default: On.
+ .TP
+ .B \-videopages
+-Number of Video Pages. Default: -1.
++Number of Video Pages. Default: \-1.
+ .TP
+ .B \-scalemode
+ Scaling Filter Mode. Default: 1.
diff --git a/gnu/packages/patches/kobodeluxe_paths.patch b/gnu/packages/patches/kobodeluxe_paths.patch
new file mode 100644
index 0000000..b54ab52
--- /dev/null
+++ b/gnu/packages/patches/kobodeluxe_paths.patch
@@ -0,0 +1,40 @@ 
+# Disable reading of configs, graphics, and data from the current directory.
+# So it's safe to run kobodeluxe from anywhere w/o worry about an attacker
+# feeding it bad data.
+--- kobodeluxe-0.5.1.orig/kobo.cpp
++++ kobodeluxe-0.5.1/kobo.cpp
+@@ -141,21 +141,21 @@
+ 	 * Graphics data
+ 	 */
+ 	/* Current dir; from within the build tree */
+-	fmap->addpath("GFX", "./data/gfx");
++	//fmap->addpath("GFX", "./data/gfx");
+ 	/* Real data dir */
+ 	fmap->addpath("GFX", "DATA>>gfx");
+ 	/* Current dir */
+-	fmap->addpath("GFX", "./gfx");
++	//fmap->addpath("GFX", "./gfx");
+ 
+ 	/*
+ 	 * Sound data
+ 	 */
+ 	/* Current dir; from within the build tree */
+-	fmap->addpath("SFX", "./data/sfx");
++	//fmap->addpath("SFX", "./data/sfx");
+ 	/* Real data dir */
+ 	fmap->addpath("SFX", "DATA>>sfx");
+ 	/* Current dir */
+-	fmap->addpath("SFX", "./sfx");
++	//fmap->addpath("SFX", "./sfx");
+ 
+ 	/*
+ 	 * Score files (user and global)
+@@ -173,7 +173,7 @@
+ 	/* System local */
+ 	fmap->addpath("CONFIG", SYSCONF_DIR);
+ 	/* In current dir (last resort) */
+-	fmap->addpath("CONFIG", "./");
++	//fmap->addpath("CONFIG", "./");
+ }
+ 
+ 
-- 
2.1.4