diff options
author | Michael Sterrett <mr_bones_@gentoo.org> | 2004-07-14 00:17:25 +0000 |
---|---|---|
committer | Michael Sterrett <mr_bones_@gentoo.org> | 2004-07-14 00:17:25 +0000 |
commit | 1361a1f02f384ac1df590000653859fe10e8d01e (patch) | |
tree | a1301586c5ea465a269988cc3be9568b6ae93d86 /media-libs | |
parent | new release, fixes bugs and squashfs update (Manifest recommit) (diff) | |
download | gentoo-2-1361a1f02f384ac1df590000653859fe10e8d01e.tar.gz gentoo-2-1361a1f02f384ac1df590000653859fe10e8d01e.tar.bz2 gentoo-2-1361a1f02f384ac1df590000653859fe10e8d01e.zip |
Updated joystick patch from libsdl CVS. (bug #52833)
Diffstat (limited to 'media-libs')
-rw-r--r-- | media-libs/libsdl/ChangeLog | 8 | ||||
-rw-r--r-- | media-libs/libsdl/Manifest | 21 | ||||
-rw-r--r-- | media-libs/libsdl/files/1.2.7-joystick2.patch | 567 | ||||
-rw-r--r-- | media-libs/libsdl/files/digest-libsdl-1.2.7-r2 | 1 | ||||
-rw-r--r-- | media-libs/libsdl/libsdl-1.2.7-r2.ebuild | 97 |
5 files changed, 684 insertions, 10 deletions
diff --git a/media-libs/libsdl/ChangeLog b/media-libs/libsdl/ChangeLog index 1f74b08dd598..233dfed549f7 100644 --- a/media-libs/libsdl/ChangeLog +++ b/media-libs/libsdl/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for media-libs/libsdl # Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/media-libs/libsdl/ChangeLog,v 1.52 2004/07/13 23:46:29 kloeri Exp $ +# $Header: /var/cvsroot/gentoo-x86/media-libs/libsdl/ChangeLog,v 1.53 2004/07/14 00:17:25 mr_bones_ Exp $ + +*libsdl-1.2.7-r2 (13 Jul 2004) + + 13 Jul 2004; Michael Sterrett <mr_bones_@gentoo.org> + +files/1.2.7-joystick2.patch, +libsdl-1.2.7-r2.ebuild: + Updated joystick patch from libsdl CVS. (bug #52833) 14 Jul 2004; Bryan Østergaard <kloeri@gentoo.org> libsdl-1.2.7-r1.ebuild: Stable on alpha. diff --git a/media-libs/libsdl/Manifest b/media-libs/libsdl/Manifest index 16e9c62b5491..01b29105cbe4 100644 --- a/media-libs/libsdl/Manifest +++ b/media-libs/libsdl/Manifest @@ -1,15 +1,18 @@ -MD5 725053ce30b454e912aaab60c08caf10 libsdl-1.2.6-r3.ebuild 2854 -MD5 5074715fa2ad4fbd78e35864ff07248a libsdl-1.2.7.ebuild 2486 -MD5 4cdef02cae2d28ec06e6fc752ff24602 libsdl-1.2.7-r1.ebuild 2750 MD5 97257b0c3b14e040ec2af96d04ade1a6 ChangeLog 7843 MD5 baaaa69f33ef9027dac84ee4ff02773b metadata.xml 974 -MD5 206ddd08dd3e33819d03245d11af3014 files/1.2.7-gcc34.patch 8196 -MD5 0c2020ec3ce37ea0612064c52d1014b1 files/1.2.6-alsa-1.0.0.patch 557 +MD5 725053ce30b454e912aaab60c08caf10 libsdl-1.2.6-r3.ebuild 2854 +MD5 4cdef02cae2d28ec06e6fc752ff24602 libsdl-1.2.7-r1.ebuild 2750 +MD5 5074715fa2ad4fbd78e35864ff07248a libsdl-1.2.7.ebuild 2486 +MD5 90fe3281a63d2d5ebb14099e3e30d819 libsdl-1.2.7-r2.ebuild 2751 MD5 803844293dc7df2bb7d2323c03977b71 files/1.2.7-libcaca.patch 23266 +MD5 2e9d99f7ab858b5a64d124abea4565b9 files/digest-libsdl-1.2.7-r1 62 +MD5 0c2020ec3ce37ea0612064c52d1014b1 files/1.2.6-alsa-1.0.0.patch 557 +MD5 2e9d99f7ab858b5a64d124abea4565b9 files/digest-libsdl-1.2.7 62 +MD5 206ddd08dd3e33819d03245d11af3014 files/1.2.7-gcc34.patch 8196 +MD5 e71ab5ce20cb7c70631a59f9d209cce1 files/1.2.7-joystick.patch 1317 +MD5 b66ce90b8939cef871c1c9b065fc0658 files/digest-libsdl-1.2.6-r3 62 MD5 419d8c241f85b4deba895c615faa5612 files/libsdl-1.2.6-fullscreen.patch 1094 MD5 4f1ce33c931d461bed06277f60341085 files/1.2.6-nobuggy-X.patch 568 -MD5 e71ab5ce20cb7c70631a59f9d209cce1 files/1.2.7-joystick.patch 1317 -MD5 2e9d99f7ab858b5a64d124abea4565b9 files/digest-libsdl-1.2.7 62 MD5 4f1ce33c931d461bed06277f60341085 files/1.2.7-nobuggy-X.patch 568 -MD5 b66ce90b8939cef871c1c9b065fc0658 files/digest-libsdl-1.2.6-r3 62 -MD5 2e9d99f7ab858b5a64d124abea4565b9 files/digest-libsdl-1.2.7-r1 62 +MD5 abf0c6fe9d93e5b0cc9a4dbb6d93ad87 files/1.2.7-joystick2.patch 16196 +MD5 2e9d99f7ab858b5a64d124abea4565b9 files/digest-libsdl-1.2.7-r2 62 diff --git a/media-libs/libsdl/files/1.2.7-joystick2.patch b/media-libs/libsdl/files/1.2.7-joystick2.patch new file mode 100644 index 000000000000..ad6eda329156 --- /dev/null +++ b/media-libs/libsdl/files/1.2.7-joystick2.patch @@ -0,0 +1,567 @@ +--- src/joystick/linux/SDL_sysjoystick.c.orig 2004-07-13 04:20:48.000000000 -0700 ++++ src/joystick/linux/SDL_sysjoystick.c 2004-07-13 04:20:53.000000000 -0700 +@@ -67,11 +67,102 @@ + { "Saitek Saitek X45", 6, 1, 0 } + }; + ++#ifndef NO_LOGICAL_JOYSTICKS ++ ++static struct joystick_logical_values { ++ int njoy; ++ int nthing; ++} joystick_logical_values[] = { ++ ++/* +0 */ ++ /* MP-8800 axes map - map to {logical joystick #, logical axis #} */ ++ {0,0},{0,1},{0,2},{1,0},{1,1},{0,3},{1,2},{1,3},{2,0},{2,1},{2,2},{2,3}, ++ {3,0},{3,1},{3,2},{3,3},{0,4},{1,4},{2,4}, ++ ++/* +19 */ ++ /* MP-8800 hat map - map to {logical joystick #, logical hat #} */ ++ {0,0},{1,0},{2,0},{3,0}, ++ ++/* +23 */ ++ /* MP-8800 button map - map to {logical joystick #, logical button #} */ ++ {0,0},{0,1},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},{0,8},{0,9},{0,10},{0,11}, ++ {1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},{1,10},{1,11}, ++ {2,0},{2,1},{2,2},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},{2,10},{2,11}, ++ {3,0},{3,1},{3,2},{3,3},{3,4},{3,5},{3,6},{3,7},{3,8},{3,9},{3,10},{3,11} ++}; ++ ++static struct joystick_logical_layout { ++ int naxes; ++ int nhats; ++ int nballs; ++ int nbuttons; ++} joystick_logical_layout[] = { ++ /* MP-8800 logical layout */ ++ {5, 1, 0, 12}, ++ {5, 1, 0, 12}, ++ {5, 1, 0, 12}, ++ {4, 1, 0, 12} ++}; ++ ++/* ++ Some USB HIDs show up as a single joystick even though they actually ++ control 2 or more joysticks. This array sets up a means of mapping ++ a single physical joystick to multiple logical joysticks. (djm) ++ ++ njoys ++ the number of logical joysticks ++ ++ layouts ++ an array of layout structures, one to describe each logical joystick ++ ++ axes, hats, balls, buttons ++ arrays that map a physical thingy to a logical thingy ++ */ ++static struct joystick_logicalmap { ++ const char *name; ++ int njoys; ++ struct joystick_logical_layout *layouts; ++ struct joystick_logical_values *axes; ++ struct joystick_logical_values *hats; ++ struct joystick_logical_values *balls; ++ struct joystick_logical_values *buttons; ++ ++} joystick_logicalmap[] = { ++ {"WiseGroup.,Ltd MP-8800 Quad USB Joypad", 4, joystick_logical_layout, ++ joystick_logical_values, joystick_logical_values+19, NULL, ++ joystick_logical_values+23} ++}; ++ ++/* find the head of a linked list, given a point in it ++ */ ++#define SDL_joylist_head(i, start)\ ++ for(i = start; SDL_joylist[i].fname == NULL;) i = SDL_joylist[i].prev; ++ ++#define SDL_logical_joydecl(d) d ++ ++ ++#else ++ ++#define SDL_logical_joydecl(d) ++ ++#endif /* USE_LOGICAL_JOYSTICKS */ ++ + /* The maximum number of joysticks we'll detect */ + #define MAX_JOYSTICKS 32 + + /* A list of available joysticks */ +-static char *SDL_joylist[MAX_JOYSTICKS]; ++static struct ++{ ++ char* fname; ++#ifndef NO_LOGICAL_JOYSTICKS ++ SDL_Joystick* joy; ++ struct joystick_logicalmap* map; ++ int prev; ++ int next; ++ int logicalno; ++#endif /* USE_LOGICAL_JOYSTICKS */ ++} SDL_joylist[MAX_JOYSTICKS]; ++ + + /* The private structure used to keep track of a joystick */ + struct joystick_hwdata { +@@ -108,6 +199,73 @@ + return(newstring); + } + ++ ++#ifndef NO_LOGICAL_JOYSTICKS ++ ++static int CountLogicalJoysticks(int max) ++{ ++ register int i, j, k, ret, prev; ++ const char* name; ++ ++ ret = 0; ++ ++ for(i = 0; i < max; i++) { ++ name = SDL_SYS_JoystickName(i); ++ ++ if (name) { ++ for(j = 0; j < SDL_TABLESIZE(joystick_logicalmap); j++) { ++ if (!strcmp(name, joystick_logicalmap[j].name)) { ++ ++ prev = i; ++ SDL_joylist[prev].map = joystick_logicalmap+j; ++ ++ for(k = 1; k < joystick_logicalmap[j].njoys; k++) { ++ SDL_joylist[prev].next = max + ret; ++ ++ if (prev != i) ++ SDL_joylist[max+ret].prev = prev; ++ ++ prev = max + ret; ++ SDL_joylist[prev].logicalno = k; ++ SDL_joylist[prev].map = joystick_logicalmap+j; ++ ret++; ++ } ++ ++ break; ++ } ++ } ++ } ++ } ++ ++ return ret; ++} ++ ++static void LogicalSuffix(int logicalno, char* namebuf, int len) ++{ ++ register int slen; ++ const static char suffixs[] = ++ "01020304050607080910111213141516171819" ++ "20212223242526272829303132"; ++ const char* suffix; ++ ++ slen = strlen(namebuf); ++ ++ suffix = NULL; ++ ++ if (logicalno*2<sizeof(suffixs)) ++ suffix = suffixs + (logicalno*2); ++ ++ if (slen + 4 < len && suffix) { ++ namebuf[slen++] = ' '; ++ namebuf[slen++] = '#'; ++ namebuf[slen++] = suffix[0]; ++ namebuf[slen++] = suffix[1]; ++ namebuf[slen++] = 0; ++ } ++} ++ ++#endif /* USE_LOGICAL_JOYSTICKS */ ++ + #ifdef USE_INPUT_EVENTS + #define test_bit(nr, addr) \ + (((1UL << ((nr) & 31)) & (((const unsigned int *) addr)[(nr) >> 5])) != 0) +@@ -160,8 +318,8 @@ + fd = open(path, O_RDONLY, 0); + if ( fd >= 0 ) { + /* Assume the user knows what they're doing. */ +- SDL_joylist[numjoysticks] = mystrdup(path); +- if ( SDL_joylist[numjoysticks] ) { ++ SDL_joylist[numjoysticks].fname =mystrdup(path); ++ if ( SDL_joylist[numjoysticks].fname ) { + dev_nums[numjoysticks] = sb.st_rdev; + ++numjoysticks; + } +@@ -208,8 +366,8 @@ + close(fd); + + /* We're fine, add this joystick */ +- SDL_joylist[numjoysticks] = mystrdup(path); +- if ( SDL_joylist[numjoysticks] ) { ++ SDL_joylist[numjoysticks].fname =mystrdup(path); ++ if ( SDL_joylist[numjoysticks].fname ) { + dev_nums[numjoysticks] = sb.st_rdev; + ++numjoysticks; + } +@@ -229,6 +387,9 @@ + break; + #endif + } ++#ifndef NO_LOGICAL_JOYSTICKS ++ numjoysticks += CountLogicalJoysticks(numjoysticks); ++#endif + + return(numjoysticks); + } +@@ -239,20 +400,29 @@ + int fd; + static char namebuf[128]; + char *name; ++ SDL_logical_joydecl(int oindex = index); + ++#ifndef NO_LOGICAL_JOYSTICKS ++ SDL_joylist_head(index, index); ++#endif + name = NULL; +- fd = open(SDL_joylist[index], O_RDONLY, 0); ++ fd = open(SDL_joylist[index].fname, O_RDONLY, 0); + if ( fd >= 0 ) { + if ( + #ifdef USE_INPUT_EVENTS + (ioctl(fd, EVIOCGNAME(sizeof(namebuf)), namebuf) <= 0) && + #endif + (ioctl(fd, JSIOCGNAME(sizeof(namebuf)), namebuf) <= 0) ) { +- name = SDL_joylist[index]; ++ name = SDL_joylist[index].fname; + } else { + name = namebuf; + } + close(fd); ++ ++#ifndef NO_LOGICAL_JOYSTICKS ++ if (SDL_joylist[oindex].prev || SDL_joylist[oindex].next) ++ LogicalSuffix(SDL_joylist[oindex].logicalno, namebuf, 128); ++#endif + } + return name; + } +@@ -383,7 +553,7 @@ + + static SDL_bool EV_ConfigJoystick(SDL_Joystick *joystick, int fd) + { +- int i; ++ int i, t; + unsigned long keybit[40]; + unsigned long absbit[40]; + unsigned long relbit[40]; +@@ -424,7 +594,8 @@ + if ( test_bit(i, absbit) ) { + int values[5]; + +- ioctl(fd, EVIOCGABS(i), values); ++ if ( ioctl(fd, EVIOCGABS(i), values) < 0 ) ++ continue; + #ifdef DEBUG_INPUT_EVENTS + printf("Joystick has absolute axis: %x\n", i); + printf("Values = { %d, %d, %d, %d, %d }\n", +@@ -440,8 +611,12 @@ + (values[2] + values[1]) / 2 - values[4]; + joystick->hwdata->abs_correct[i].coef[1] = + (values[2] + values[1]) / 2 + values[4]; +- joystick->hwdata->abs_correct[i].coef[2] = +- (1 << 29) / ((values[2] - values[1]) / 2 - 2 * values[4]); ++ t = ((values[2] - values[1]) / 2 - 2 * values[4]); ++ if ( t != 0 ) { ++ joystick->hwdata->abs_correct[i].coef[2] = (1 << 29) / t; ++ } else { ++ joystick->hwdata->abs_correct[i].coef[2] = 0; ++ } + } + ++joystick->naxes; + } +@@ -475,6 +650,22 @@ + + #endif /* USE_INPUT_EVENTS */ + ++#ifndef NO_LOGICAL_JOYSTICKS ++static void ConfigLogicalJoystick(SDL_Joystick *joystick) ++{ ++ struct joystick_logical_layout* layout; ++ ++ layout = SDL_joylist[joystick->index].map->layouts + ++ SDL_joylist[joystick->index].logicalno; ++ ++ joystick->nbuttons = layout->nbuttons; ++ joystick->nhats = layout->nhats; ++ joystick->naxes = layout->naxes; ++ joystick->nballs = layout->nballs; ++} ++#endif ++ ++ + /* Function to open a joystick for use. + The joystick to open is specified by the index field of the joystick. + This should fill the nbuttons and naxes fields of the joystick structure. +@@ -483,9 +674,28 @@ + int SDL_SYS_JoystickOpen(SDL_Joystick *joystick) + { + int fd; ++ SDL_logical_joydecl(int realindex); ++ SDL_logical_joydecl(SDL_Joystick *realjoy = NULL); + + /* Open the joystick and set the joystick file descriptor */ +- fd = open(SDL_joylist[joystick->index], O_RDONLY, 0); ++#ifndef NO_LOGICAL_JOYSTICKS ++ if (SDL_joylist[joystick->index].fname == NULL) { ++ SDL_joylist_head(realindex, joystick->index); ++ realjoy = SDL_JoystickOpen(realindex); ++ ++ if (realjoy == NULL) ++ return(-1); ++ ++ fd = realjoy->hwdata->fd; ++ ++ } else { ++ fd = open(SDL_joylist[joystick->index].fname, O_RDONLY, 0); ++ } ++ SDL_joylist[joystick->index].joy = joystick; ++#else ++ fd = open(SDL_joylist[joystick->index].fname, O_RDONLY, 0); ++#endif ++ + if ( fd < 0 ) { + SDL_SetError("Unable to open %s\n", + SDL_joylist[joystick->index]); +@@ -505,6 +715,11 @@ + fcntl(fd, F_SETFL, O_NONBLOCK); + + /* Get the number of buttons and axes on the joystick */ ++#ifndef NO_LOGICAL_JOYSTICKS ++ if (realjoy) ++ ConfigLogicalJoystick(joystick); ++ else ++#endif + #ifdef USE_INPUT_EVENTS + if ( ! EV_ConfigJoystick(joystick, fd) ) + #endif +@@ -513,6 +728,84 @@ + return(0); + } + ++#ifndef NO_LOGICAL_JOYSTICKS ++ ++static SDL_Joystick* FindLogicalJoystick( ++ SDL_Joystick *joystick, struct joystick_logical_values* v) ++{ ++ SDL_Joystick *logicaljoy; ++ register int i; ++ ++ i = joystick->index; ++ logicaljoy = NULL; ++ ++ /* get the fake joystick that will receive the event ++ */ ++ for(;;) { ++ ++ if (SDL_joylist[i].logicalno == v->njoy) { ++ logicaljoy = SDL_joylist[i].joy; ++ break; ++ } ++ ++ if (SDL_joylist[i].next == 0) ++ break; ++ ++ i = SDL_joylist[i].next; ++ ++ } ++ ++ return logicaljoy; ++} ++ ++static int LogicalJoystickButton( ++ SDL_Joystick *joystick, Uint8 button, Uint8 state){ ++ struct joystick_logical_values* buttons; ++ SDL_Joystick *logicaljoy = NULL; ++ ++ /* if there's no map then this is just a regular joystick ++ */ ++ if (SDL_joylist[joystick->index].map == NULL) ++ return 0; ++ ++ /* get the logical joystick that will receive the event ++ */ ++ buttons = SDL_joylist[joystick->index].map->buttons+button; ++ logicaljoy = FindLogicalJoystick(joystick, buttons); ++ ++ if (logicaljoy == NULL) ++ return 1; ++ ++ SDL_PrivateJoystickButton(logicaljoy, buttons->nthing, state); ++ ++ return 1; ++} ++ ++static int LogicalJoystickAxis( ++ SDL_Joystick *joystick, Uint8 axis, Sint16 value) ++{ ++ struct joystick_logical_values* axes; ++ SDL_Joystick *logicaljoy = NULL; ++ ++ /* if there's no map then this is just a regular joystick ++ */ ++ if (SDL_joylist[joystick->index].map == NULL) ++ return 0; ++ ++ /* get the logical joystick that will receive the event ++ */ ++ axes = SDL_joylist[joystick->index].map->axes+axis; ++ logicaljoy = FindLogicalJoystick(joystick, axes); ++ ++ if (logicaljoy == NULL) ++ return 1; ++ ++ SDL_PrivateJoystickAxis(logicaljoy, axes->nthing, value); ++ ++ return 1; ++} ++#endif /* USE_LOGICAL_JOYSTICKS */ ++ + static __inline__ + void HandleHat(SDL_Joystick *stick, Uint8 hat, int axis, int value) + { +@@ -522,6 +815,8 @@ + { SDL_HAT_LEFT, SDL_HAT_CENTERED, SDL_HAT_RIGHT }, + { SDL_HAT_LEFTDOWN, SDL_HAT_DOWN, SDL_HAT_RIGHTDOWN } + }; ++ SDL_logical_joydecl(SDL_Joystick *logicaljoy = NULL); ++ SDL_logical_joydecl(struct joystick_logical_values* hats = NULL); + + the_hat = &stick->hwdata->hats[hat]; + if ( value < 0 ) { +@@ -535,6 +830,24 @@ + } + if ( value != the_hat->axis[axis] ) { + the_hat->axis[axis] = value; ++ ++#ifndef NO_LOGICAL_JOYSTICKS ++ /* if there's no map then this is just a regular joystick ++ */ ++ if (SDL_joylist[stick->index].map != NULL) { ++ ++ /* get the fake joystick that will receive the event ++ */ ++ hats = SDL_joylist[stick->index].map->hats+hat; ++ logicaljoy = FindLogicalJoystick(stick, hats); ++ } ++ ++ if (logicaljoy) { ++ stick = logicaljoy; ++ hat = hats->nthing; ++ } ++#endif /* USE_LOGICAL_JOYSTICKS */ ++ + SDL_PrivateJoystickHat(stick, hat, + position_map[the_hat->axis[1]][the_hat->axis[0]]); + } +@@ -557,12 +870,23 @@ + int i, len; + Uint8 other_axis; + ++#ifndef NO_LOGICAL_JOYSTICKS ++ if (SDL_joylist[joystick->index].fname == NULL) { ++ SDL_joylist_head(i, joystick->index); ++ return JS_HandleEvents(SDL_joylist[i].joy); ++ } ++#endif ++ + while ((len=read(joystick->hwdata->fd, events, (sizeof events))) > 0) { + len /= sizeof(events[0]); + for ( i=0; i<len; ++i ) { + switch (events[i].type & ~JS_EVENT_INIT) { + case JS_EVENT_AXIS: + if ( events[i].number < joystick->naxes ) { ++#ifndef NO_LOGICAL_JOYSTICKS ++ if (!LogicalJoystickAxis(joystick, ++ events[i].number, events[i].value)) ++#endif + SDL_PrivateJoystickAxis(joystick, + events[i].number, events[i].value); + break; +@@ -585,6 +909,10 @@ + } + break; + case JS_EVENT_BUTTON: ++#ifndef NO_LOGICAL_JOYSTICKS ++ if (!LogicalJoystickButton(joystick, ++ events[i].number, events[i].value)) ++#endif + SDL_PrivateJoystickButton(joystick, + events[i].number, events[i].value); + break; +@@ -627,6 +955,13 @@ + int i, len; + int code; + ++#ifndef NO_LOGICAL_JOYSTICKS ++ if (SDL_joylist[joystick->index].fname == NULL) { ++ SDL_joylist_head(i, joystick->index); ++ return EV_HandleEvents(SDL_joylist[i].joy); ++ } ++#endif ++ + while ((len=read(joystick->hwdata->fd, events, (sizeof events))) > 0) { + len /= sizeof(events[0]); + for ( i=0; i<len; ++i ) { +@@ -635,6 +970,11 @@ + case EV_KEY: + if ( code >= BTN_MISC ) { + code -= BTN_MISC; ++#ifndef NO_LOGICAL_JOYSTICKS ++ if (!LogicalJoystickButton(joystick, ++ joystick->hwdata->key_map[code], ++ events[i].value)) ++#endif + SDL_PrivateJoystickButton(joystick, + joystick->hwdata->key_map[code], + events[i].value); +@@ -656,6 +996,11 @@ + break; + default: + events[i].value = EV_AxisCorrect(joystick, code, events[i].value); ++#ifndef NO_LOGICAL_JOYSTICKS ++ if (!LogicalJoystickAxis(joystick, ++ joystick->hwdata->abs_map[code], ++ events[i].value)) ++#endif + SDL_PrivateJoystickAxis(joystick, + joystick->hwdata->abs_map[code], + events[i].value); +@@ -710,7 +1055,18 @@ + /* Function to close a joystick after use */ + void SDL_SYS_JoystickClose(SDL_Joystick *joystick) + { ++#ifndef NO_LOGICAL_JOYSTICKS ++ register int i; ++ if (SDL_joylist[joystick->index].fname == NULL) { ++ SDL_joylist_head(i, joystick->index); ++ SDL_JoystickClose(SDL_joylist[i].joy); ++ } ++#endif ++ + if ( joystick->hwdata ) { ++#ifndef NO_LOGICAL_JOYSTICKS ++ if (SDL_joylist[joystick->index].fname != NULL) ++#endif + close(joystick->hwdata->fd); + if ( joystick->hwdata->hats ) { + free(joystick->hwdata->hats); +@@ -728,9 +1084,9 @@ + { + int i; + +- for ( i=0; SDL_joylist[i]; ++i ) { +- free(SDL_joylist[i]); ++ for ( i=0; SDL_joylist[i].fname; ++i ) { ++ free(SDL_joylist[i].fname); + } +- SDL_joylist[0] = NULL; ++ SDL_joylist[0].fname = NULL; + } + diff --git a/media-libs/libsdl/files/digest-libsdl-1.2.7-r2 b/media-libs/libsdl/files/digest-libsdl-1.2.7-r2 new file mode 100644 index 000000000000..e52820076cbe --- /dev/null +++ b/media-libs/libsdl/files/digest-libsdl-1.2.7-r2 @@ -0,0 +1 @@ +MD5 d29b34b6ba3ed213893fc9d8d35e357a SDL-1.2.7.tar.gz 2470936 diff --git a/media-libs/libsdl/libsdl-1.2.7-r2.ebuild b/media-libs/libsdl/libsdl-1.2.7-r2.ebuild new file mode 100644 index 000000000000..ef1b7572e665 --- /dev/null +++ b/media-libs/libsdl/libsdl-1.2.7-r2.ebuild @@ -0,0 +1,97 @@ +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/media-libs/libsdl/libsdl-1.2.7-r2.ebuild,v 1.1 2004/07/14 00:17:25 mr_bones_ Exp $ + +inherit fixheadtails eutils + +DESCRIPTION="Simple Direct Media Layer" +HOMEPAGE="http://www.libsdl.org/" +SRC_URI="http://www.libsdl.org/release/SDL-${PV}.tar.gz" + +LICENSE="LGPL-2" +SLOT="0" +KEYWORDS="~x86 ~ppc ~sparc ~alpha ~hppa ~amd64 ~ia64" +IUSE="oss alsa esd arts nas X dga xv xinerama fbcon directfb ggi svga aalib opengl libcaca noaudio novideo nojoystick" +# if you disable audio/video/joystick and something breaks, you pick up the pieces + +RDEPEND=">=media-libs/audiofile-0.1.9 + alsa? ( media-libs/alsa-lib ) + esd? ( >=media-sound/esound-0.2.19 ) + arts? ( kde-base/arts ) + nas? ( media-libs/nas virtual/x11 ) + X? ( virtual/x11 ) + directfb? ( >=dev-libs/DirectFB-0.9.19 ) + ggi? ( >=media-libs/libggi-2.0_beta3 ) + svga? ( >=media-libs/svgalib-1.4.2 ) + aalib? ( media-libs/aalib ) + libcaca? ( media-libs/libcaca ) + opengl? ( virtual/opengl )" +DEPEND="${RDEPEND} + x86? ( dev-lang/nasm )" + +S=${WORKDIR}/SDL-${PV} + +src_unpack() { + unpack ${A} + cd ${S} + + epatch ${FILESDIR}/${PV}-nobuggy-X.patch #30089 + epatch ${FILESDIR}/${PV}-libcaca.patch #40224 + epatch ${FILESDIR}/${PV}-gcc34.patch #48947 + epatch ${FILESDIR}/${PV}-joystick2.patch #52833 + + ht_fix_file configure.in + + if use nas && ! use X ; then #32447 + sed -i \ + -e 's:-laudio:-laudio -L/usr/X11R6/lib:' \ + configure.in || die "nas sed hack failed" + fi + + ./autogen.sh || die "autogen failed" +} + +src_compile() { + local myconf="" + use noaudio && myconf="${myconf} --disable-audio" + use novideo \ + && myconf="${myconf} --disable-video" \ + || myconf="${myconf} --enable-video-dummy" + use nojoystick && myconf="${myconf} --disable-joystick" + + econf \ + --enable-events \ + --enable-cdrom \ + --enable-threads \ + --enable-timers \ + --enable-endian \ + --enable-file \ + `use_enable oss` \ + `use_enable alsa` \ + `use_enable esd` \ + `use_enable arts` \ + `use_enable nas` \ + `use_enable x86 nasm` \ + `use_enable X video-x11` \ + `use_enable dga` \ + `use_enable xv video-x11-xv` \ + `use_enable xinerama video-x11-xinerama` \ + `use_enable dga video-dga` \ + `use_enable fbcon video-fbcon` \ + `use_enable directfb video-directfb` \ + `use_enable ggi video-ggi` \ + `use_enable svga video-svga` \ + `use_enable aalib video-aalib` \ + `use_enable libcaca video-caca` \ + `use_enable opengl video-opengl` \ + ${myconf} || die + emake || die "emake failed" +} + +src_install() { + make DESTDIR=${D} install || die "make install failed" + preplib + dosed "s:-pthread::g" /usr/lib/libSDL.la # Bug 34804 + dodoc BUGS CREDITS README README-SDL.txt README.CVS TODO WhatsNew + dohtml -r ./ +} |