summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2020-01-03 17:20:27 +0100
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2020-02-02 14:20:28 +0100
commitf389c65dbbc4ed1802707aba709bef01bd315895 (patch)
treea9b3eb8cff74296989c87259d6743819276f5358
parent2a2da78326e80dabba2d02afa790f487e85df3e4 (diff)
downloadguix-f389c65dbbc4ed1802707aba709bef01bd315895.tar.gz
gnu: Add sdl-pango.
* gnu/packages/sdl.scm (sdl-pango): New variable.
* gnu/packages/patches/sdl-pango-api_additions.patch: New file.
* gnu/packages/patches/sdl-pango-blit_overflow.patch: New file.
* gnu/packages/patches/sdl-pango-fillrect_crash.patch: New file.
* gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch:
New file.
* gnu/packages/patches/sdl-pango-matrix_declarations.patch: New file.
* gnu/packages/patches/sdl-pango-sans-serif.patch: New file.
* gnu/local.mk (sdl-pango): Reference patches.

add
-rw-r--r--gnu/local.mk6
-rw-r--r--gnu/packages/patches/sdl-pango-api_additions.patch128
-rw-r--r--gnu/packages/patches/sdl-pango-blit_overflow.patch32
-rw-r--r--gnu/packages/patches/sdl-pango-fillrect_crash.patch15
-rw-r--r--gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch20
-rw-r--r--gnu/packages/patches/sdl-pango-matrix_declarations.patch131
-rw-r--r--gnu/packages/patches/sdl-pango-sans-serif.patch13
-rw-r--r--gnu/packages/sdl.scm52
8 files changed, 396 insertions, 1 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 42516544cc..53d94ff1e7 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1248,6 +1248,12 @@ dist_patch_DATA =						\
   %D%/packages/patches/p7zip-CVE-2017-17969.patch		\
   %D%/packages/patches/p7zip-remove-unused-code.patch		\
   %D%/packages/patches/pam-mount-luks2-support.patch		\
+  %D%/packages/patches/sdl-pango-api_additions.patch		\
+  %D%/packages/patches/sdl-pango-blit_overflow.patch		\
+  %D%/packages/patches/sdl-pango-fillrect_crash.patch		\
+  %D%/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch	\
+  %D%/packages/patches/sdl-pango-matrix_declarations.patch	\
+  %D%/packages/patches/sdl-pango-sans-serif.patch		\
   %D%/packages/patches/patchutils-test-perms.patch		\
   %D%/packages/patches/patch-hurd-path-max.patch		\
   %D%/packages/patches/perl-autosplit-default-time.patch	\
diff --git a/gnu/packages/patches/sdl-pango-api_additions.patch b/gnu/packages/patches/sdl-pango-api_additions.patch
new file mode 100644
index 0000000000..5c02e79910
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-api_additions.patch
@@ -0,0 +1,128 @@
+Index: SDL_Pango-0.1.2/src/SDL_Pango.c
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.c	2004-12-10 10:06:33.000000000 +0100
++++ SDL_Pango-0.1.2/src/SDL_Pango.c	2007-09-18 14:56:35.362379428 +0200
+@@ -723,13 +723,9 @@
+     SDL_UnlockSurface(surface);

+ }

+ 

+-/*!

+-    Create a context which contains Pango objects.

+ 

+-    @return A pointer to the context as a SDLPango_Context*.

+-*/

+ SDLPango_Context*

+-SDLPango_CreateContext()

++SDLPango_CreateContext_GivenFontDesc(const char* font_desc)

+ {

+     SDLPango_Context *context = g_malloc(sizeof(SDLPango_Context));

+     G_CONST_RETURN char *charset;

+@@ -743,8 +739,7 @@
+     pango_context_set_language (context->context, pango_language_from_string (charset));

+     pango_context_set_base_dir (context->context, PANGO_DIRECTION_LTR);

+ 

+-    context->font_desc = pango_font_description_from_string(

+-	MAKE_FONT_NAME (DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE));

++    context->font_desc = pango_font_description_from_string(font_desc);

+ 

+     context->layout = pango_layout_new (context->context);

+ 

+@@ -762,6 +757,17 @@
+ }

+ 

+ /*!

++    Create a context which contains Pango objects.

++

++    @return A pointer to the context as a SDLPango_Context*.

++*/

++SDLPango_Context*

++SDLPango_CreateContext()

++{

++    SDLPango_CreateContext_GivenFontDesc(MAKE_FONT_NAME(DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE));

++}

++

++/*!

+     Free a context.

+ 

+     @param *context [i/o] Context to be free

+@@ -1053,6 +1059,20 @@
+     pango_layout_set_font_description (context->layout, context->font_desc);

+ }

+ 

++void

++SDLPango_SetText_GivenAlignment(

++    SDLPango_Context *context,

++    const char *text,

++    int length,

++    SDLPango_Alignment alignment)

++{

++    pango_layout_set_attributes(context->layout, NULL);

++    pango_layout_set_text (context->layout, text, length);

++    pango_layout_set_auto_dir (context->layout, TRUE);

++    pango_layout_set_alignment (context->layout, alignment);

++    pango_layout_set_font_description (context->layout, context->font_desc);

++}

++

+ /*!

+     Set plain text to context.

+     Text must be utf-8.

+@@ -1067,11 +1087,7 @@
+     const char *text,

+     int length)

+ {

+-    pango_layout_set_attributes(context->layout, NULL);

+-    pango_layout_set_text (context->layout, text, length);

+-    pango_layout_set_auto_dir (context->layout, TRUE);

+-    pango_layout_set_alignment (context->layout, PANGO_ALIGN_LEFT);

+-    pango_layout_set_font_description (context->layout, context->font_desc);

++    SDLPango_SetText_GivenAlignment(context, text, length, SDLPANGO_ALIGN_LEFT);

+ }

+ 

+ /*!

+Index: SDL_Pango-0.1.2/src/SDL_Pango.h
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.h	2004-12-10 10:06:33.000000000 +0100
++++ SDL_Pango-0.1.2/src/SDL_Pango.h	2007-09-18 15:00:41.736419485 +0200
+@@ -26,6 +26,7 @@
+ 

+ #ifndef SDL_PANGO_H

+ #define SDL_PANGO_H

++#define SDL_PANGO_HAS_GC_EXTENSIONS

+ 

+ #include "SDL.h"

+ 

+@@ -109,12 +110,20 @@
+     SDLPANGO_DIRECTION_NEUTRAL	/*! Neutral */

+ } SDLPango_Direction;

+ 

+-

++/*!

++    Specifies alignment of text. See Pango reference for detail

++*/

++typedef enum {

++    SDLPANGO_ALIGN_LEFT,

++    SDLPANGO_ALIGN_CENTER,

++    SDLPANGO_ALIGN_RIGHT

++} SDLPango_Alignment;

+ 

+ extern DECLSPEC int SDLCALL SDLPango_Init();

+ 

+ extern DECLSPEC int SDLCALL SDLPango_WasInit();

+ 

++extern DECLSPEC SDLPango_Context* SDLCALL SDLPango_CreateContext_GivenFontDesc(const char* font_desc);

+ extern DECLSPEC SDLPango_Context* SDLCALL SDLPango_CreateContext();

+ 

+ extern DECLSPEC void SDLCALL SDLPango_FreeContext(

+@@ -157,6 +166,12 @@
+     const char *markup,

+     int length);

+ 

++extern DECLSPEC void SDLCALL SDLPango_SetText_GivenAlignment(

++    SDLPango_Context *context,

++    const char *text,

++    int length,

++    SDLPango_Alignment alignment);

++

+ extern DECLSPEC void SDLCALL SDLPango_SetText(

+     SDLPango_Context *context,

+     const char *markup,

diff --git a/gnu/packages/patches/sdl-pango-blit_overflow.patch b/gnu/packages/patches/sdl-pango-blit_overflow.patch
new file mode 100644
index 0000000000..411d066a74
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-blit_overflow.patch
@@ -0,0 +1,32 @@
+Index: sdlpango-0.1.2/src/SDL_Pango.c
+===================================================================
+--- sdlpango-0.1.2.orig/src/SDL_Pango.c	2007-10-08 19:44:15.000000000 +0000
++++ sdlpango-0.1.2/src/SDL_Pango.c	2007-10-08 19:45:27.000000000 +0000
+@@ -725,16 +725,23 @@
+     int x = rect->x;

+     int y = rect->y;

+ 

++    if(x < 0) {

++	width += x; x = 0;

++    }

+     if(x + width > surface->w) {

+ 	width = surface->w - x;

+-	if(width <= 0)

+-	    return;

++    }

++    if(width <= 0)

++	return;

++

++    if(y < 0) {

++	height += y; y = 0;

+     }

+     if(y + height > surface->h) {

+ 	height = surface->h - y;

+-	if(height <= 0)

+-	    return;

+     }

++    if(height <= 0)

++	return;

+ 

+     if(SDL_LockSurface(surface)) {

+ 	SDL_SetError("surface lock failed");

diff --git a/gnu/packages/patches/sdl-pango-fillrect_crash.patch b/gnu/packages/patches/sdl-pango-fillrect_crash.patch
new file mode 100644
index 0000000000..7a41bbf2fe
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-fillrect_crash.patch
@@ -0,0 +1,15 @@
+Index: SDL_Pango-0.1.2/src/SDL_Pango.c
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.c	2007-09-18 15:56:12.406223540 +0200
++++ SDL_Pango-0.1.2/src/SDL_Pango.c	2007-09-18 15:57:27.986530616 +0200
+@@ -932,7 +932,9 @@
+     width = PANGO_PIXELS (logical_rect.width);

+     height = PANGO_PIXELS (logical_rect.height);

+ 

+-    SDL_FillRect(surface, NULL, SDL_MapRGBA(surface->format, 0, 0, 0, 0));

++    if (width && height) {

++        SDL_FillRect(surface, NULL, SDL_MapRGBA(surface->format, 0, 0, 0, 0));

++    }

+ 

+     if((! context->tmp_ftbitmap) || context->tmp_ftbitmap->width < width

+ 	|| context->tmp_ftbitmap->rows < height)

diff --git a/gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch b/gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch
new file mode 100644
index 0000000000..3d4b10cc10
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch
@@ -0,0 +1,20 @@
+--- a/src/SDL_Pango.h
++++ b/src/SDL_Pango.h
+@@ -171,7 +171,7 @@
+     SDLPango_Direction direction);

+ 

+ 

+-#ifdef __FT2_BUILD_UNIX_H__

++#ifdef FT2BUILD_H_

+ 

+ extern DECLSPEC void SDLCALL SDLPango_CopyFTBitmapToSurface(

+     const FT_Bitmap *bitmap,

+@@ -179,7 +179,7 @@
+     const SDLPango_Matrix *matrix,

+     SDL_Rect *rect);

+ 

+-#endif	/* __FT2_BUILD_UNIX_H__ */

++#endif

+ 

+ 

+ #ifdef __PANGO_H__

diff --git a/gnu/packages/patches/sdl-pango-matrix_declarations.patch b/gnu/packages/patches/sdl-pango-matrix_declarations.patch
new file mode 100644
index 0000000000..c35d0a708d
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-matrix_declarations.patch
@@ -0,0 +1,131 @@
+Index: SDL_Pango-0.1.2/src/SDL_Pango.c
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.c	2007-09-18 15:03:10.732910311 +0200
++++ SDL_Pango-0.1.2/src/SDL_Pango.c	2007-09-18 15:04:41.970109622 +0200
+@@ -286,6 +286,59 @@
+ } contextImpl;

+ 

+ 

++const SDLPango_Matrix _MATRIX_WHITE_BACK

++    = {255, 0, 0, 0,

++       255, 0, 0, 0,

++       255, 0, 0, 0,

++       255, 255, 0, 0,};

++

++/*!

++    Specifies white back and black letter.

++*/

++const SDLPango_Matrix *MATRIX_WHITE_BACK = &_MATRIX_WHITE_BACK;

++

++const SDLPango_Matrix _MATRIX_BLACK_BACK

++    = {0, 255, 0, 0,

++       0, 255, 0, 0,

++       0, 255, 0, 0,

++       255, 255, 0, 0,};

++/*!

++    Specifies black back and white letter.

++*/

++const SDLPango_Matrix *MATRIX_BLACK_BACK = &_MATRIX_BLACK_BACK;

++

++const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_BLACK_LETTER

++    = {0, 0, 0, 0,

++       0, 0, 0, 0,

++       0, 0, 0, 0,

++       0, 255, 0, 0,};

++/*!

++    Specifies transparent back and black letter.

++*/

++const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_BLACK_LETTER = &_MATRIX_TRANSPARENT_BACK_BLACK_LETTER;

++

++const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_WHITE_LETTER

++    = {255, 255, 0, 0,

++       255, 255, 0, 0,

++       255, 255, 0, 0,

++       0, 255, 0, 0,};

++/*!

++    Specifies transparent back and white letter.

++*/

++const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_WHITE_LETTER = &_MATRIX_TRANSPARENT_BACK_WHITE_LETTER;

++

++const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER

++    = {255, 255, 0, 0,

++       255, 255, 0, 0,

++       255, 255, 0, 0,

++       0, 0, 0, 0,};

++/*!

++    Specifies transparent back and transparent letter.

++    This is useful for KARAOKE like rendering.

++*/

++const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER = &_MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER;

++

++

+ /*!

+     Initialize the Glib and Pango API.

+     This must be called before using other functions in this library,

+Index: SDL_Pango-0.1.2/src/SDL_Pango.h
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.h	2007-09-18 15:03:10.732910311 +0200
++++ SDL_Pango-0.1.2/src/SDL_Pango.h	2007-09-18 15:06:24.919976401 +0200
+@@ -47,57 +47,27 @@
+     Uint8 m[4][4];  /*! Matrix variables */

+ } SDLPango_Matrix;

+ 

+-const SDLPango_Matrix _MATRIX_WHITE_BACK

+-    = {255, 0, 0, 0,

+-       255, 0, 0, 0,

+-       255, 0, 0, 0,

+-       255, 255, 0, 0,};

+-

+ /*!

+     Specifies white back and black letter.

+ */

+-const SDLPango_Matrix *MATRIX_WHITE_BACK = &_MATRIX_WHITE_BACK;

+-

+-const SDLPango_Matrix _MATRIX_BLACK_BACK

+-    = {0, 255, 0, 0,

+-       0, 255, 0, 0,

+-       0, 255, 0, 0,

+-       255, 255, 0, 0,};

++extern const SDLPango_Matrix *MATRIX_WHITE_BACK;

+ /*!

+     Specifies black back and white letter.

+ */

+-const SDLPango_Matrix *MATRIX_BLACK_BACK = &_MATRIX_BLACK_BACK;

+-

+-const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_BLACK_LETTER

+-    = {0, 0, 0, 0,

+-       0, 0, 0, 0,

+-       0, 0, 0, 0,

+-       0, 255, 0, 0,};

++extern const SDLPango_Matrix *MATRIX_BLACK_BACK;

+ /*!

+     Specifies transparent back and black letter.

+ */

+-const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_BLACK_LETTER = &_MATRIX_TRANSPARENT_BACK_BLACK_LETTER;

+-

+-const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_WHITE_LETTER

+-    = {255, 255, 0, 0,

+-       255, 255, 0, 0,

+-       255, 255, 0, 0,

+-       0, 255, 0, 0,};

++extern const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_BLACK_LETTER;

+ /*!

+     Specifies transparent back and white letter.

+ */

+-const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_WHITE_LETTER = &_MATRIX_TRANSPARENT_BACK_WHITE_LETTER;

+-

+-const SDLPango_Matrix _MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER

+-    = {255, 255, 0, 0,

+-       255, 255, 0, 0,

+-       255, 255, 0, 0,

+-       0, 0, 0, 0,};

++extern const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_WHITE_LETTER;

+ /*!

+     Specifies transparent back and transparent letter.

+     This is useful for KARAOKE like rendering.

+ */

+-const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER = &_MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER;

++extern const SDLPango_Matrix *MATRIX_TRANSPARENT_BACK_TRANSPARENT_LETTER;

+ 

+ /*!

+     Specifies direction of text. See Pango reference for detail

diff --git a/gnu/packages/patches/sdl-pango-sans-serif.patch b/gnu/packages/patches/sdl-pango-sans-serif.patch
new file mode 100644
index 0000000000..ccdc8150a7
--- /dev/null
+++ b/gnu/packages/patches/sdl-pango-sans-serif.patch
@@ -0,0 +1,13 @@
+Index: SDL_Pango-0.1.2/src/SDL_Pango.c
+===================================================================
+--- SDL_Pango-0.1.2.orig/src/SDL_Pango.c	2007-09-18 15:12:20.736253215 +0200
++++ SDL_Pango-0.1.2/src/SDL_Pango.c	2007-09-18 15:12:44.621614364 +0200
+@@ -234,7 +234,7 @@
+ //! non-zero if initialized

+ static int IS_INITIALIZED = 0;

+ 

+-#define DEFAULT_FONT_FAMILY "Sans"

++#define DEFAULT_FONT_FAMILY "sans-serif"

+ #define DEFAULT_FONT_SIZE 12

+ #define DEFAULT_DPI 96

+ #define _MAKE_FONT_NAME(family, size) family " " #size

diff --git a/gnu/packages/sdl.scm b/gnu/packages/sdl.scm
index a01cafb34a..26c9bd5eb3 100644
--- a/gnu/packages/sdl.scm
+++ b/gnu/packages/sdl.scm
@@ -8,7 +8,7 @@
 ;;; Copyright © 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2019 Kei Kebreau <kkebreau@posteo.net>
-;;; Copyright © 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
+;;; Copyright © 2019, 2020 Nicolas Goaziou <mail@nicolasgoaziou.fr>
 ;;; Copyright © 2019 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2019 Pierre Neidhardt <mail@ambrevar.xyz>
 ;;; Copyright © 2020 Timotej Lazar <timotej.lazar@araneo.si>
@@ -42,10 +42,12 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (gnu packages audio)
+  #:use-module (gnu packages autotools)
   #:use-module (gnu packages fcitx)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages glib)
+  #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages ibus)
   #:use-module (gnu packages image)
@@ -326,6 +328,54 @@ SDL.")
     (home-page "https://www.libsdl.org/projects/SDL_net/")
     (license zlib)))
 
+(define-public sdl-pango
+  (package
+    (name "sdl-pango")
+    (version "0.1.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://sourceforge/sdlpango/SDL_Pango/" version "/"
+             "SDL_Pango-" version  ".tar.gz"))
+       (sha256
+        (base32 "197baw1dsg0p4pljs5k0fshbyki00r4l49m1drlpqw6ggawx6xbz"))
+       (patches
+        (search-patches
+         "sdl-pango-api_additions.patch"
+         "sdl-pango-blit_overflow.patch"
+         "sdl-pango-fillrect_crash.patch"
+         "sdl-pango-fix-explicit-SDLPango_CopyFTBitmapToSurface.patch"
+         "sdl-pango-matrix_declarations.patch"
+         "sdl-pango-sans-serif.patch"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:configure-flags (list "--disable-static")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'autogen
+           ;; Force reconfiguration because the included libtool
+           ;; generates linking errors.
+           (lambda _ (invoke "autoreconf" "-vif"))))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("fontconfig" ,fontconfig)
+       ("freetype" ,freetype)
+       ("glib" ,glib)
+       ("harfbuzz" ,harfbuzz)
+       ("pango" ,pango)
+       ("sdl" ,sdl)))
+    (home-page "http://sdlpango.sourceforge.net")
+    (synopsis "Pango SDL binding")
+    (description "This library is a wrapper around the Pango library.
+It allows you to use TrueType fonts to render internationalized and
+tagged text in SDL applications.")
+    (license lgpl2.1)))
+
 (define-public sdl-ttf
   (package
     (name "sdl-ttf")