aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Webber <webber.sl@gmail.com>2016-10-16 15:04:35 -0500
committerChristopher Allan Webber <cwebber@dustycloud.org>2016-10-18 20:23:03 -0500
commita56145e1fa8c8c9cb866518efdeaaf4ad4017ba1 (patch)
tree63cf2172eec05f1d3bf607bbbde0864e832bfb6b
parent91988aee126376ea9e111882afb511e3a555936d (diff)
downloadgnu-guix-a56145e1fa8c8c9cb866518efdeaaf4ad4017ba1.tar
gnu-guix-a56145e1fa8c8c9cb866518efdeaaf4ad4017ba1.tar.gz
gnu: Add kobodeluxe.
* gnu/packages/games.scm (kobodeluxe): New variable. * gnu/packages/patches/kobodeluxe-paths.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.
-rw-r--r--gnu/local.mk7
-rw-r--r--gnu/packages/games.scm33
-rw-r--r--gnu/packages/patches/kobodeluxe-const-charp-conversion.patch17
-rw-r--r--gnu/packages/patches/kobodeluxe-enemies-pipe-decl.patch67
-rw-r--r--gnu/packages/patches/kobodeluxe-graphics-window-signed-char.patch38
-rw-r--r--gnu/packages/patches/kobodeluxe-manpage-minus-not-hyphen.patch15
-rw-r--r--gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch24
-rw-r--r--gnu/packages/patches/kobodeluxe-paths.patch40
8 files changed, 241 insertions, 0 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index a492716eb7..8c30e92a4d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -610,6 +610,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 17ca12bce6..a2c8ac078a 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.
;;;
@@ -2966,3 +2967,35 @@ 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"))))
+ (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 graphical game
+for Un*x systems with X11.")
+ (home-page "http://olofson.net/kobodl/")
+ (license license:gpl2+)))
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 0000000000..8386cf83fc
--- /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 0000000000..05cd884b2b
--- /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 0000000000..d626618cd1
--- /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 0000000000..34cab90ec3
--- /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-midicon-segmentation-fault.patch b/gnu/packages/patches/kobodeluxe-midicon-segmentation-fault.patch
new file mode 100644
index 0000000000..3348348ced
--- /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-paths.patch b/gnu/packages/patches/kobodeluxe-paths.patch
new file mode 100644
index 0000000000..87c7b3a620
--- /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", "./");
+ }
+
+