Mercurial > sdl-ios-xcode
annotate src/video/x11/SDL_x11dyn.c @ 3958:85b6fb6a5e3c SDL-1.2
Actually, this is a better fix...clear the error state once if everything we
need loaded; it's more efficient, and works even if the last unnecessary
xrandr symbol failed to load. Otherwise, leave the original loadso error, so
the end user can find out what symbol failed.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Wed, 13 Jun 2007 08:00:10 +0000 |
parents | b1d5b56aa549 |
children | b966761fef6c |
rev | line source |
---|---|
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
1 /* |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
3 Copyright (C) 1997-2004 Sam Lantinga |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
4 |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Library General Public |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
8 version 2 of the License, or (at your option) any later version. |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
9 |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
13 Library General Public License for more details. |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
14 |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Library General Public |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
18 |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
19 Sam Lantinga |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
21 */ |
1402
d910939febfa
Use consistent identifiers for the various platforms we support.
Sam Lantinga <slouken@libsdl.org>
parents:
1361
diff
changeset
|
22 #include "SDL_config.h" |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
23 |
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1587
diff
changeset
|
24 #define DEBUG_DYNAMIC_X11 0 |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
25 |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
26 #include "SDL_x11dyn.h" |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
27 |
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1587
diff
changeset
|
28 #if DEBUG_DYNAMIC_X11 |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
29 #include <stdio.h> |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
30 #endif |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
31 |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1245
diff
changeset
|
32 #ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC |
1593
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
33 |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
34 #include "SDL_name.h" |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
35 #include "SDL_loadso.h" |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
36 |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
37 typedef struct |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
38 { |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
39 void *lib; |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
40 const char *libname; |
1593
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
41 } x11dynlib; |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
42 |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
43 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
44 #define SDL_VIDEO_DRIVER_X11_DYNAMIC NULL |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
45 #endif |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
46 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
47 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT NULL |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
48 #endif |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
49 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
50 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER NULL |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
51 #endif |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
52 #ifndef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
53 #define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR NULL |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
54 #endif |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
55 |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
56 static x11dynlib x11libs[] = |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
57 { |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
58 { NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC }, |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
59 { NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT }, |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
60 { NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XRENDER }, |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
61 { NULL, SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR }, |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
62 }; |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
63 |
1842
fea140a964b3
Patch from Ryan to fix compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
1648
diff
changeset
|
64 static void X11_GetSym(const char *fnname, int *rc, void **fn) |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
65 { |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
66 int i; |
1593
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
67 for (i = 0; i < SDL_TABLESIZE(x11libs); i++) { |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
68 if (x11libs[i].lib != NULL) |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
69 { |
1842
fea140a964b3
Patch from Ryan to fix compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
1648
diff
changeset
|
70 *fn = SDL_LoadFunction(x11libs[i].lib, fnname); |
fea140a964b3
Patch from Ryan to fix compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
1648
diff
changeset
|
71 if (*fn != NULL) |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
72 break; |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
73 } |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
74 } |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
75 |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
76 #if DEBUG_DYNAMIC_X11 |
1842
fea140a964b3
Patch from Ryan to fix compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
1648
diff
changeset
|
77 if (*fn != NULL) |
fea140a964b3
Patch from Ryan to fix compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
1648
diff
changeset
|
78 printf("X11: Found '%s' in %s (%p)\n", fnname, x11libs[i].libname, *fn); |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
79 else |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
80 printf("X11: Symbol '%s' NOT FOUND!\n", fnname); |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
81 #endif |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
82 |
1842
fea140a964b3
Patch from Ryan to fix compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
1648
diff
changeset
|
83 if (*fn == NULL) |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
84 *rc = 0; /* kill this module. */ |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
85 } |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
86 |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
87 |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
88 /* Define all the function pointers and wrappers... */ |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
89 #define SDL_X11_MODULE(modname) |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
90 #define SDL_X11_SYM(rc,fn,params,args,ret) \ |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
91 static rc (*p##fn) params = NULL; \ |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
92 rc fn params { ret p##fn args ; } |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
93 #include "SDL_x11sym.h" |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
94 #undef SDL_X11_MODULE |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
95 #undef SDL_X11_SYM |
1361
19418e4422cb
New configure-based build system. Still work in progress, but much improved
Sam Lantinga <slouken@libsdl.org>
parents:
1245
diff
changeset
|
96 #endif /* SDL_VIDEO_DRIVER_X11_DYNAMIC */ |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
97 |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
98 /* Annoying varargs entry point... */ |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
99 #ifdef X_HAVE_UTF8_STRING |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
100 XIC (*pXCreateIC)(XIM,...) = NULL; |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
101 #endif |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
102 |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
103 /* These SDL_X11_HAVE_* flags are here whether you have dynamic X11 or not. */ |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
104 #define SDL_X11_MODULE(modname) int SDL_X11_HAVE_##modname = 1; |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
105 #define SDL_X11_SYM(rc,fn,params,args,ret) |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
106 #include "SDL_x11sym.h" |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
107 #undef SDL_X11_MODULE |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
108 #undef SDL_X11_SYM |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
109 |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
110 |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
111 static int x11_load_refcount = 0; |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
112 |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
113 void SDL_X11_UnloadSymbols(void) |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
114 { |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
115 #ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
116 /* Don't actually unload if more than one module is using the libs... */ |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
117 if (x11_load_refcount > 0) { |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
118 if (--x11_load_refcount == 0) { |
1593
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
119 int i; |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
120 |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
121 /* set all the function pointers to NULL. */ |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
122 #define SDL_X11_MODULE(modname) SDL_X11_HAVE_##modname = 1; |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
123 #define SDL_X11_SYM(rc,fn,params,args,ret) p##fn = NULL; |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
124 #include "SDL_x11sym.h" |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
125 #undef SDL_X11_MODULE |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
126 #undef SDL_X11_SYM |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
127 |
1593
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
128 #ifdef X_HAVE_UTF8_STRING |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
129 pXCreateIC = NULL; |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
130 #endif |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
131 |
1593
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
132 for (i = 0; i < SDL_TABLESIZE(x11libs); i++) { |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
133 if (x11libs[i].lib != NULL) { |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
134 SDL_UnloadObject(x11libs[i].lib); |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
135 x11libs[i].lib = NULL; |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
136 } |
1589
34cca785be57
Xrandr support in the X11 target.
Ryan C. Gordon <icculus@icculus.org>
parents:
1587
diff
changeset
|
137 } |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
138 } |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
139 } |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
140 #endif |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
141 } |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
142 |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
143 /* returns non-zero if all needed symbols were loaded. */ |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
144 int SDL_X11_LoadSymbols(void) |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
145 { |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
146 int rc = 1; /* always succeed if not using Dynamic X11 stuff. */ |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
147 |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
148 #ifdef SDL_VIDEO_DRIVER_X11_DYNAMIC |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
149 /* deal with multiple modules (dga, x11, etc) needing these symbols... */ |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
150 if (x11_load_refcount++ == 0) { |
1593
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
151 int i; |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
152 int *thismod = NULL; |
1593
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
153 for (i = 0; i < SDL_TABLESIZE(x11libs); i++) { |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
154 if (x11libs[i].libname != NULL) { |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
155 x11libs[i].lib = SDL_LoadObject(x11libs[i].libname); |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
156 } |
5115439d67b1
Consolidate all the X11 libraries, so you don't have to update 12 different
Ryan C. Gordon <icculus@icculus.org>
parents:
1589
diff
changeset
|
157 } |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
158 #define SDL_X11_MODULE(modname) thismod = &SDL_X11_HAVE_##modname; |
1842
fea140a964b3
Patch from Ryan to fix compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
1648
diff
changeset
|
159 #define SDL_X11_SYM(a,fn,x,y,z) X11_GetSym(#fn,thismod,(void**)&p##fn); |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
160 #include "SDL_x11sym.h" |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
161 #undef SDL_X11_MODULE |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
162 #undef SDL_X11_SYM |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
163 |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
164 #ifdef X_HAVE_UTF8_STRING |
1842
fea140a964b3
Patch from Ryan to fix compiler warnings
Sam Lantinga <slouken@libsdl.org>
parents:
1648
diff
changeset
|
165 X11_GetSym("XCreateIC",&SDL_X11_HAVE_UTF8,(void **)&pXCreateIC); |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
166 #endif |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
167 |
3958
85b6fb6a5e3c
Actually, this is a better fix...clear the error state once if everything we
Ryan C. Gordon <icculus@icculus.org>
parents:
3957
diff
changeset
|
168 if (SDL_X11_HAVE_BASEXLIB) { /* all required symbols loaded. */ |
85b6fb6a5e3c
Actually, this is a better fix...clear the error state once if everything we
Ryan C. Gordon <icculus@icculus.org>
parents:
3957
diff
changeset
|
169 SDL_ClearError(); |
85b6fb6a5e3c
Actually, this is a better fix...clear the error state once if everything we
Ryan C. Gordon <icculus@icculus.org>
parents:
3957
diff
changeset
|
170 } else { |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
171 SDL_X11_UnloadSymbols(); /* in case something got loaded... */ |
1610
a1ee5944412b
SDL_X11_LoadSymbols() was reporting success when required symbols weren't
Ryan C. Gordon <icculus@icculus.org>
parents:
1593
diff
changeset
|
172 rc = 0; |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
173 } |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
174 } |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
175 #else |
1874
9e85b267f8f3
Minor bit of sanity-checking debug info in dynamic X11 code.
Ryan C. Gordon <icculus@icculus.org>
parents:
1842
diff
changeset
|
176 #if DEBUG_DYNAMIC_X11 |
9e85b267f8f3
Minor bit of sanity-checking debug info in dynamic X11 code.
Ryan C. Gordon <icculus@icculus.org>
parents:
1842
diff
changeset
|
177 printf("X11: No dynamic X11 support in this build of SDL.\n"); |
9e85b267f8f3
Minor bit of sanity-checking debug info in dynamic X11 code.
Ryan C. Gordon <icculus@icculus.org>
parents:
1842
diff
changeset
|
178 #endif |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
179 #ifdef X_HAVE_UTF8_STRING |
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
180 pXCreateIC = XCreateIC; |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
181 #endif |
1575
3ba88cb7eb1b
Updated dynamic X11 code. See details in Bugzilla #170.
Ryan C. Gordon <icculus@icculus.org>
parents:
1402
diff
changeset
|
182 #endif |
1168
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
183 |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
184 return rc; |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
185 } |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
186 |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
187 /* end of SDL_x11dyn.c ... */ |
045f186426e1
Dynamically load X11 libraries like we currently do for alsa, esd, etc.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff
changeset
|
188 |