sdl: rebuilt for multimedia group

This commit is contained in:
Neofytos Kolokotronis 2016-01-20 15:31:56 +01:00
parent 398722a78a
commit 45df446049
9 changed files with 356 additions and 15 deletions

View File

@ -1,36 +1,63 @@
#
# Platform Packages for Chakra, part of chakra-project.org
#
# maintainer (i686): Phil Miller <philm[at]chakra-project[dog]org>
# maintainer (x86_64): Manuel Tortosa <manutortosa[at]chakra-project[dot]org>
# Contributions from Arch: https://projects.archlinux.org/svntogit/packages.git/tree/trunk?h=packages/sdl
pkgname=sdl
pkgver=1.2.15
pkgrel=2
pkgrel=3
pkgdesc="A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard"
arch=('i686' 'x86_64')
arch=('x86_64')
url="http://www.libsdl.org"
license=('LGPL')
depends=('glibc' 'libxext' 'libxrender' 'libx11')
makedepends=('alsa-lib' 'mesa' 'libpulse')
options=('!libtool')
options=('staticlibs')
source=(http://www.libsdl.org/release/SDL-${pkgver}.tar.gz
SDL-1.2.10-GrabNotViewable.patch
SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch
SDL-1.2.15-const_XData32.patch
SDL-1.2.15-ignore_insane_joystick_axis.patch
SDL-1.2.15-no-default-backing-store.patch
SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch
sdl-1.2.14-fix-mouse-clicking.patch
sdl-1.2.14-disable-mmx.patch)
sdl-1.2.14-disable-mmx.patch
libsdl-1.2.15-resizing.patch
X11_KeyToUnicode.patch)
md5sums=('9d96df8417572a2afb781a7c4c811a85'
'37ad001a4d2ff924a5fab356b49f8a78'
'513840e76b6b4fab80e06c9cdbc2a641'
'303bd7481693415029f7d9f4a730d735'
'e382e5b7449e95969c5ba4084b0aab39'
'1b0578c76453813eb4eaf0125ce242db'
'321377e38e2db7f1baf43c392e165dd5'
'd79137e6bdadf21ff2f716590e9709ac'
'a19dabb85729fab36f2662e9e273a4d9')
'a19dabb85729fab36f2662e9e273a4d9'
'3dd50347d8856160a9cbd7f80383a1f8'
'edea272dff4698470877c016d818918d')
prepare() {
cd SDL-$pkgver
patch -Np1 -i ../SDL-1.2.10-GrabNotViewable.patch
patch -Np1 -i ../SDL-1.2.15-SDL_EnableUNICODE_drops_keyboard_events.patch
patch -Np1 -i ../SDL-1.2.15-const_XData32.patch
patch -Np1 -i ../SDL-1.2.15-ignore_insane_joystick_axis.patch
patch -Np1 -i ../SDL-1.2.15-no-default-backing-store.patch
# https://bugs.freedesktop.org/show_bug.cgi?id=27222
patch -Np1 -i ../SDL-1.2.15-x11-Bypass-SetGammaRamp-when-changing-gamma.patch
patch -Np1 -i ../sdl-1.2.14-fix-mouse-clicking.patch
patch -Np1 -i ../sdl-1.2.14-disable-mmx.patch
patch -Np1 -i ../libsdl-1.2.15-resizing.patch
patch -Np1 -i ../X11_KeyToUnicode.patch
}
build() {
cd ${srcdir}/SDL-${pkgver}
patch -Np1 -i $srcdir/sdl-1.2.14-fix-mouse-clicking.patch
patch -Np1 -i $srcdir/sdl-1.2.14-disable-mmx.patch
cd SDL-$pkgver
./configure --prefix=/usr --disable-nasm --enable-alsa \
--with-x --disable-rpath --disable-static
make
}
package() {
cd ${srcdir}/SDL-${pkgver}
make DESTDIR=${pkgdir} install
cd SDL-$pkgver
make DESTDIR="$pkgdir" install
}

View File

@ -0,0 +1,22 @@
Makes SDL-1.2 SDL_WM_GrabInput() non-blocking in case of SDL window is not
viewable. Patch provided by <pbonzini@redhat.com>.
See <http://bugzilla.libsdl.org/show_bug.cgi?id=1155>.
--- ./src/video/x11/SDL_x11wm.c 2007-12-31 04:48:13.000000000 +0000
+++ ./src/video/x11/SDL_x11wm.c 2009-01-15 10:27:14.000000000 +0000
@@ -351,13 +351,14 @@ SDL_GrabMode X11_GrabInputNoLock(_THIS,
result = XGrabPointer(SDL_Display, SDL_Window, True, 0,
GrabModeAsync, GrabModeAsync,
SDL_Window, None, CurrentTime);
- if ( result == GrabSuccess ) {
+ if ( result == GrabSuccess || result == GrabNotViewable ) {
break;
}
SDL_Delay(100);
}
if ( result != GrabSuccess ) {
/* Uh, oh, what do we do here? */ ;
+ return(SDL_GRAB_OFF);
}
/* Now grab the keyboard */
XGrabKeyboard(SDL_Display, WMwindow, True,

View File

@ -0,0 +1,73 @@
# HG changeset patch
# User Sam Lantinga <slouken@libsdl.org>
# Date 1397799374 25200
# Thu Apr 17 22:36:14 2014 -0700
# Branch SDL-1.2
# Node ID 0aade9c0203f717fe4b823a176c3c040f1a709f8
# Parent 22a7f096bb9d4d596f35a93e33608825693462b0
Fixed bug 2325 - SDL_EnableUNICODE sometimes drops keyboard events completely
Rafał Mużyło
The most annoying part of this bug is that though I've found it in two separate apps, I don't have a trivial testcase for it.
The problem seems to be a condition race, as it's triggered quite randomly (therefore it will be hard to tell whether it really gets fixed, if a probable fix is found).
While it's specific to SDL 1.2, it seems quite similar to the problem described and fixed in http://forums.libsdl.org/viewtopic.php?p=40503.
Now, I should start describing the problem.
A game uses Escape to open menu (the exact key might not be important). Upon opening, it calls SDL_EnableUNICODE(1). Upon closing it calls SDL_EnableUNICODE(0).
I have an IME running.
Game uses SDL_PollEvent to get the events.
If Escape is pressed repeatedly, menu is opened and closed, till it eventually freezes in open state.
"freezes" in this context means "app itself still runs, but no keyboard events are getting delivered (though - for example - mouse events still are)". "getting delivered" should mean "SDL_PollEvent is not receiving any".
If it matters, the last delivered keyboard event is a keypress, the release never arrives.
It seems (no guarantees, due to random nature of the freeze) that unsetting XMODIFIERS (which - AFAIU - will disable IME as far as SDL is concerned) prevents the freeze, therefore the reference to that SDL2 thread.
diff -r 22a7f096bb9d -r 0aade9c0203f src/video/x11/SDL_x11events.c
--- a/src/video/x11/SDL_x11events.c Sun Dec 01 00:00:17 2013 -0500
+++ b/src/video/x11/SDL_x11events.c Thu Apr 17 22:36:14 2014 -0700
@@ -395,6 +395,8 @@
{
int posted;
XEvent xevent;
+ int orig_event_type;
+ KeyCode orig_keycode;
SDL_memset(&xevent, '\0', sizeof (XEvent)); /* valgrind fix. --ryan. */
XNextEvent(SDL_Display, &xevent);
@@ -410,9 +412,29 @@
#ifdef X_HAVE_UTF8_STRING
/* If we are translating with IM, we need to pass all events
to XFilterEvent, and discard those filtered events immediately. */
+ orig_event_type = xevent.type;
+ if (orig_event_type == KeyPress || orig_event_type == KeyRelease) {
+ orig_keycode = xevent.xkey.keycode;
+ } else {
+ orig_keycode = 0;
+ }
if ( SDL_TranslateUNICODE
&& SDL_IM != NULL
&& XFilterEvent(&xevent, None) ) {
+ if (orig_keycode) {
+ SDL_keysym keysym;
+ static XComposeStatus state;
+ char keybuf[32];
+
+ keysym.scancode = xevent.xkey.keycode;
+ keysym.sym = X11_TranslateKeycode(SDL_Display, xevent.xkey.keycode);
+ keysym.mod = KMOD_NONE;
+ keysym.unicode = 0;
+ if (orig_event_type == KeyPress && XLookupString(&xevent.xkey, keybuf, sizeof(keybuf), NULL, &state))
+ keysym.unicode = (Uint8)keybuf[0];
+
+ SDL_PrivateKeyboard(orig_event_type == KeyPress ? SDL_PRESSED : SDL_RELEASED, &keysym);
+ }
return 0;
}
#endif

View File

@ -0,0 +1,16 @@
libX11-1.5.99.901 has changed prototype of _XData32
<http://bugzilla.libsdl.org/show_bug.cgi?id=1769>
diff -r b6b2829cd7ef src/video/x11/SDL_x11sym.h
--- a/src/video/x11/SDL_x11sym.h Wed Feb 27 15:20:31 2013 -0800
+++ b/src/video/x11/SDL_x11sym.h Wed Mar 27 16:07:23 2013 +0100
@@ -165,7 +165,7 @@
*/
#ifdef LONG64
SDL_X11_MODULE(IO_32BIT)
-SDL_X11_SYM(int,_XData32,(Display *dpy,register long *data,unsigned len),(dpy,data,len),return)
+SDL_X11_SYM(int,_XData32,(Display *dpy,register _Xconst long *data,unsigned len),(dpy,data,len),return)
SDL_X11_SYM(void,_XRead32,(Display *dpy,register long *data,long len),(dpy,data,len),)
#endif

View File

@ -0,0 +1,20 @@
changeset: 6324:95abff7adcc2
branch: SDL-1.2
parent: 6306:2b923729fd01
user: Ryan C. Gordon <icculus@icculus.org>
date: Sun Jun 03 04:49:25 2012 -0400
summary: Linux evdev: ignore joystick axis events if they aren't in a sane range.
diff -r 2b923729fd01 -r 95abff7adcc2 src/joystick/linux/SDL_sysjoystick.c
--- a/src/joystick/linux/SDL_sysjoystick.c Sat May 12 23:32:51 2012 -0700
+++ b/src/joystick/linux/SDL_sysjoystick.c Sun Jun 03 04:49:25 2012 -0400
@@ -1106,6 +1106,9 @@
}
break;
case EV_ABS:
+ if (code > ABS_MISC) {
+ break;
+ }
switch (code) {
case ABS_HAT0X:
case ABS_HAT0Y:

View File

@ -0,0 +1,24 @@
Do not harness backing store by default
xorg-server 1.15 enables backing store if composite extension is enabled
(default settings). Harnessing backing store through compositor leads to
tearing effect.
This patch reverts default harnessing backing store to conditional use if
SDL_VIDEO_X11_BACKINGSTORE environment variable exists.
<https://bugzilla.libsdl.org/show_bug.cgi?id=2383>
<https://bugzilla.redhat.com/show_bug.cgi?id=1073057>
diff -up SDL-1.2.15/src/video/x11/SDL_x11video.c.jx SDL-1.2.15/src/video/x11/SDL_x11video.c
--- SDL-1.2.15/src/video/x11/SDL_x11video.c.jx 2012-01-19 01:30:06.000000000 -0500
+++ SDL-1.2.15/src/video/x11/SDL_x11video.c 2014-03-04 14:39:34.691545549 -0500
@@ -1088,7 +1088,7 @@ static int X11_CreateWindow(_THIS, SDL_S
}
}
-#if 0 /* This is an experiment - are the graphics faster now? - nope. */
+#if 1 /* This is an experiment - are the graphics faster now? - nope. */
if ( SDL_getenv("SDL_VIDEO_X11_BACKINGSTORE") )
#endif
/* Cache the window in the server, when possible */

View File

@ -0,0 +1,44 @@
From 4b56fa058a45b7c804d1a5fcaf7a70db0bd0581c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <petr.pisar@atlas.cz>
Date: Tue, 1 Jan 2013 21:25:15 +0100
Subject: [PATCH] x11: Bypass SetGammaRamp when changing gamma
Recent Xorg has broken dynamic colors setting, so calling SDL_SetGamme()
does not have any effect here. Recent means xorg-server >= 1.7, since 2010.
See <https://bugs.freedesktop.org/show_bug.cgi?id=27222>.
---
src/video/SDL_gamma.c | 15 ++-------------
1 files changed, 2 insertions(+), 13 deletions(-)
diff --git a/src/video/SDL_gamma.c b/src/video/SDL_gamma.c
index 4fd0370..464ab88 100644
--- a/src/video/SDL_gamma.c
+++ b/src/video/SDL_gamma.c
@@ -92,22 +92,11 @@ static void CalculateGammaFromRamp(float *gamma, Uint16 *ramp)
int SDL_SetGamma(float red, float green, float blue)
{
- int succeeded;
+ int succeeded = -1;
SDL_VideoDevice *video = current_video;
SDL_VideoDevice *this = current_video;
- succeeded = -1;
- /* Prefer using SetGammaRamp(), as it's more flexible */
- {
- Uint16 ramp[3][256];
-
- CalculateGammaRamp(red, ramp[0]);
- CalculateGammaRamp(green, ramp[1]);
- CalculateGammaRamp(blue, ramp[2]);
- succeeded = SDL_SetGammaRamp(ramp[0], ramp[1], ramp[2]);
- }
- if ( (succeeded < 0) && video->SetGamma ) {
- SDL_ClearError();
+ if ( video->SetGamma ) {
succeeded = video->SetGamma(this, red, green, blue);
}
return succeeded;
--
1.7.8.6

View File

@ -0,0 +1,52 @@
# HG changeset patch
# User Sam Lantinga <slouken@libsdl.org>
# Date 1327258041 18000
# Node ID 900a0fae90ca65cff55a70a17b9ec39d2ddccbcf
# Parent 5273dfd19a5e8c5736a0d417bd441f704c5355f8
Fixed bug 1390 - X11_KeyToUnicode
manuel.montezelo 2012-01-22 08:56:18 PST
We had the following bug report at Debian:
http://bugs.debian.org/376560
Same one in Ubuntu:
https://bugs.launchpad.net/ubuntu/+source/libsdl1.2/+bug/66217
We've been including a patch since then (attached) to actually export the
symbol, since 2006. In the last release the function seems to be there, alive
and kicking.
It's affecting other people too:
http://www.garagegames.com/community/forums/viewthread/52287
diff -r 5273dfd19a5e -r 900a0fae90ca src/video/x11/SDL_x11events.c
--- a/src/video/x11/SDL_x11events.c Sat Jan 21 12:06:51 2012 -0500
+++ b/src/video/x11/SDL_x11events.c Sun Jan 22 13:47:21 2012 -0500
@@ -1246,8 +1246,11 @@
* sequences (dead accents, compose key sequences) will not work since the
* state has been irrevocably lost.
*/
+extern DECLSPEC Uint16 SDLCALL X11_KeyToUnicode(SDLKey, SDLMod);
+
Uint16 X11_KeyToUnicode(SDLKey keysym, SDLMod modifiers)
{
+ static int warning = 0;
struct SDL_VideoDevice *this = current_video;
char keybuf[32];
int i;
@@ -1255,6 +1258,12 @@
XKeyEvent xkey;
Uint16 unicode;
+ if ( warning ) {
+ warning = 0;
+ fprintf(stderr, "WARNING: Application is using X11_KeyToUnicode().\n");
+ fprintf(stderr, "This is not an official SDL function, please report this as a bug.\n");
+ }
+
if ( !this || !SDL_Display ) {
return 0;
}

View File

@ -0,0 +1,63 @@
Description: Revert change that breaks window corner resizing
http://bugzilla.libsdl.org/show_bug.cgi?id=1430
Author: Andrew Caudwell <acaudwell@gmail.com>
Last-Update: 2012-04-10
Bug-Debian: http://bugs.debian.org/665779
diff -r c787fb1b5699 src/video/x11/SDL_x11events.c
--- a/src/video/x11/SDL_x11events.c Mon Feb 20 23:51:08 2012 -0500
+++ b/src/video/x11/SDL_x11events.c Mon Mar 26 12:26:52 2012 +1300
@@ -57,12 +57,6 @@
static SDLKey MISC_keymap[256];
SDLKey X11_TranslateKeycode(Display *display, KeyCode kc);
-/*
- Pending resize target for ConfigureNotify (so outdated events don't
- cause inappropriate resize events)
-*/
-int X11_PendingConfigureNotifyWidth = -1;
-int X11_PendingConfigureNotifyHeight = -1;
#ifdef X_HAVE_UTF8_STRING
Uint32 Utf8ToUcs4(const Uint8 *utf8)
@@ -825,16 +819,6 @@
#ifdef DEBUG_XEVENTS
printf("ConfigureNotify! (resize: %dx%d)\n", xevent.xconfigure.width, xevent.xconfigure.height);
#endif
- if ((X11_PendingConfigureNotifyWidth != -1) &&
- (X11_PendingConfigureNotifyHeight != -1)) {
- if ((xevent.xconfigure.width != X11_PendingConfigureNotifyWidth) &&
- (xevent.xconfigure.height != X11_PendingConfigureNotifyHeight)) {
- /* Event is from before the resize, so ignore. */
- break;
- }
- X11_PendingConfigureNotifyWidth = -1;
- X11_PendingConfigureNotifyHeight = -1;
- }
if ( SDL_VideoSurface ) {
if ((xevent.xconfigure.width != SDL_VideoSurface->w) ||
(xevent.xconfigure.height != SDL_VideoSurface->h)) {
diff -r c787fb1b5699 src/video/x11/SDL_x11events_c.h
--- a/src/video/x11/SDL_x11events_c.h Mon Feb 20 23:51:08 2012 -0500
+++ b/src/video/x11/SDL_x11events_c.h Mon Mar 26 12:26:52 2012 +1300
@@ -27,8 +27,3 @@
extern void X11_InitOSKeymap(_THIS);
extern void X11_PumpEvents(_THIS);
extern void X11_SetKeyboardState(Display *display, const char *key_vec);
-
-/* Variables to be exported */
-extern int X11_PendingConfigureNotifyWidth;
-extern int X11_PendingConfigureNotifyHeight;
-
diff -r c787fb1b5699 src/video/x11/SDL_x11video.c
--- a/src/video/x11/SDL_x11video.c Mon Feb 20 23:51:08 2012 -0500
+++ b/src/video/x11/SDL_x11video.c Mon Mar 26 12:26:52 2012 +1300
@@ -1182,8 +1182,6 @@
current = NULL;
goto done;
}
- X11_PendingConfigureNotifyWidth = width;
- X11_PendingConfigureNotifyHeight = height;
} else {
if (X11_CreateWindow(this,current,width,height,bpp,flags) < 0) {
current = NULL;