21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_DRIVER_WAYLAND
25 #define DEBUG_DYNAMIC_WAYLAND 0
29 #if DEBUG_DYNAMIC_WAYLAND
33 #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
44 #ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL
45 #define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL NULL
47 #ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR
48 #define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR NULL
50 #ifndef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON
51 #define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON NULL
54 static waylanddynlib waylandlibs[] = {
55 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC},
56 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL},
57 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR},
58 {
NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON}
62 WAYLAND_GetSym(
const char *fnname,
int *pHasModule)
67 if (waylandlibs[
i].lib !=
NULL) {
74 #if DEBUG_DYNAMIC_WAYLAND
76 SDL_Log(
"WAYLAND: Found '%s' in %s (%p)\n", fnname, waylandlibs[
i].libname, fn);
78 SDL_Log(
"WAYLAND: Symbol '%s' NOT FOUND!\n", fnname);
90 #define SDL_WAYLAND_MODULE(modname) int SDL_WAYLAND_HAVE_##modname = 0;
91 #define SDL_WAYLAND_SYM(rc,fn,params) SDL_DYNWAYLANDFN_##fn WAYLAND_##fn = NULL;
92 #define SDL_WAYLAND_INTERFACE(iface) const struct wl_interface *WAYLAND_##iface = NULL;
95 static int wayland_load_refcount = 0;
101 if (wayland_load_refcount > 0) {
102 if (--wayland_load_refcount == 0) {
103 #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
108 #define SDL_WAYLAND_MODULE(modname) SDL_WAYLAND_HAVE_##modname = 0;
109 #define SDL_WAYLAND_SYM(rc,fn,params) WAYLAND_##fn = NULL;
110 #define SDL_WAYLAND_INTERFACE(iface) WAYLAND_##iface = NULL;
114 #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
116 if (waylandlibs[
i].lib !=
NULL) {
118 waylandlibs[
i].lib =
NULL;
133 if (wayland_load_refcount++ == 0) {
134 #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC
138 if (waylandlibs[
i].libname !=
NULL) {
143 #define SDL_WAYLAND_MODULE(modname) SDL_WAYLAND_HAVE_##modname = 1;
146 #define SDL_WAYLAND_MODULE(modname) thismod = &SDL_WAYLAND_HAVE_##modname;
147 #define SDL_WAYLAND_SYM(rc,fn,params) WAYLAND_##fn = (SDL_DYNWAYLANDFN_##fn) WAYLAND_GetSym(#fn,thismod);
148 #define SDL_WAYLAND_INTERFACE(iface) WAYLAND_##iface = (struct wl_interface *) WAYLAND_GetSym(#iface,thismod);
151 if (SDL_WAYLAND_HAVE_WAYLAND_CLIENT) {
162 #define SDL_WAYLAND_MODULE(modname) SDL_WAYLAND_HAVE_##modname = 1;
163 #define SDL_WAYLAND_SYM(rc,fn,params) WAYLAND_##fn = fn;
164 #define SDL_WAYLAND_INTERFACE(iface) WAYLAND_##iface = &iface;