| #ifdef HAVE_X11_ICE |
| # include <X11/ICE/ICElib.h> |
| |
| static Status test_ICE(void) |
| { |
| return IceInitThreads(); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_SM |
| # include <X11/SM/SMlib.h> |
| # include <stdlib.h> |
| |
| static void test_SM(void) |
| { |
| SmcProtocolVersion(NULL); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_X11 |
| # include <X11/Xlib.h> |
| |
| static Status test_X11(void) |
| { |
| return XInitThreads(); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xau |
| # include <X11/Xauth.h> |
| |
| static char* test_Xau(void) |
| { |
| return XauFileName(); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xcomposite |
| # include <X11/extensions/Xcomposite.h> |
| |
| static int test_Xcomposite(void) |
| { |
| return XCompositeVersion(); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xdamage |
| # include <X11/extensions/Xdamage.h> |
| |
| static Bool test_Xdamage(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| int ev_base; |
| int err_base; |
| Bool ret = XDamageQueryExtension(dpy, &ev_base, &err_base); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xdmcp |
| # include <X11/Xdmcp.h> |
| |
| static int test_Xdmcp(void) |
| { |
| BYTE data[1024]; |
| XdmcpBuffer buf = { data, sizeof(data), 0, 0 }; |
| return XdmcpReadRemaining(&buf); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xext |
| # include <X11/Xlib.h> |
| # include <X11/extensions/Xext.h> |
| |
| static int test_Xext(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| int ret = XMissingExtension(dpy, "cmake"); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xxf86misc |
| # include <X11/Xlib.h> |
| # include <X11/extensions/xf86misc.h> |
| |
| static Bool test_Xxf86misc(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| Bool ret = XF86MiscSetClientVersion(dpy); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xxf86vm |
| # include <X11/Xlib.h> |
| # include <X11/extensions/xf86vmode.h> |
| |
| static Bool test_Xxf86vm(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| Bool ret = XF86VidModeSetClientVersion(dpy); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xfixes |
| # include <X11/extensions/Xfixes.h> |
| |
| static Bool test_Xfixes(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| int ev_base; |
| int err_base; |
| Bool ret = XFixesQueryExtension(dpy, &ev_base, &err_base); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xft |
| # include <X11/Xft/Xft.h> |
| |
| static FcBool test_Xft(void) |
| { |
| return XftInitFtLibrary(); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xi |
| # include <X11/extensions/XInput.h> |
| |
| static XExtensionVersion* test_Xi(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| XExtensionVersion* ret = XGetExtensionVersion(dpy, "cmake"); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xinerama |
| # include <X11/extensions/Xinerama.h> |
| |
| static Bool test_Xinerama(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| int ev_base; |
| int err_base; |
| Bool ret = XineramaQueryExtension(dpy, &ev_base, &err_base); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xkb |
| # include <X11/XKBlib.h> |
| |
| static Bool test_Xkb(void) |
| { |
| return XkbIgnoreExtension(0); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_xkbfile |
| // clang-format off |
| # include <stdio.h> |
| # include <X11/XKBlib.h> |
| # include <X11/extensions/XKBfile.h> |
| # include <stdlib.h> |
| // clang-format on |
| |
| static void test_xkbfile(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| XkbInitAtoms(dpy); |
| XCloseDisplay(dpy); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xmu |
| # include <X11/Xmu/Xmu.h> |
| # include <stdlib.h> |
| |
| static Bool test_Xmu(void) |
| { |
| return XmuValidArea(NULL); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xpm |
| # include <X11/xpm.h> |
| |
| static int test_Xpm(void) |
| { |
| return XpmAttributesSize(); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xtst |
| # include <X11/extensions/XTest.h> |
| |
| static Status test_Xtst(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| Status ret = XTestDiscard(dpy); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xrandr |
| # include <X11/extensions/Xrandr.h> |
| |
| static Bool test_Xrandr(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| int ev_base; |
| int err_base; |
| Bool ret = XRRQueryExtension(dpy, &ev_base, &err_base); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xrender |
| # include <X11/extensions/Xrender.h> |
| |
| static Bool test_Xrender(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| int ev_base; |
| int err_base; |
| Bool ret = XRenderQueryExtension(dpy, &ev_base, &err_base); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_XRes |
| # include <X11/Xlib.h> |
| # include <X11/extensions/XRes.h> |
| |
| static Bool test_XRes(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| int ev_base; |
| int err_base; |
| Bool ret = XResQueryExtension(dpy, &ev_base, &err_base); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xss |
| # include <X11/extensions/scrnsaver.h> |
| |
| static Bool test_Xss(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| int ev_base; |
| int err_base; |
| Bool ret = XScreenSaverQueryExtension(dpy, &ev_base, &err_base); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xt |
| # include <X11/Intrinsic.h> |
| |
| static void test_Xt(void) |
| { |
| return XtToolkitInitialize(); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xutil |
| # include <X11/Xutil.h> |
| |
| static int test_Xutil(void) |
| { |
| Region r = XCreateRegion(); |
| return XDestroyRegion(r); |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xv |
| # include <X11/Xlib.h> |
| # include <X11/extensions/Xvlib.h> |
| |
| static int test_Xv(void) |
| { |
| Display* dpy = XOpenDisplay(NULL); |
| unsigned int version; |
| unsigned int revision; |
| unsigned int req_base; |
| unsigned int ev_base; |
| unsigned int err_base; |
| int ret = |
| XvQueryExtension(dpy, &version, &revision, &req_base, &ev_base, &err_base); |
| XCloseDisplay(dpy); |
| return ret; |
| } |
| #endif |
| |
| #ifdef HAVE_X11_Xaw |
| # include <X11/Intrinsic.h> |
| # include <X11/Xaw/Box.h> |
| |
| static void test_Xaw(void) |
| { |
| XrmOptionDescRec opt_table[] = { { NULL } }; |
| |
| Widget toplevel; |
| toplevel = |
| XtInitialize("test", "test", opt_table, XtNumber(opt_table), NULL, NULL); |
| Widget box = |
| XtCreateManagedWidget("testbox", boxWidgetClass, toplevel, NULL, 0); |
| return; |
| } |
| |
| #endif |
| |
| #ifdef HAVE_xcb |
| # include <xcb/xcb.h> |
| |
| static void test_xcb(void) |
| { |
| int screen_nbr; |
| xcb_connection_t* connection = xcb_connect(NULL, &screen_nbr); |
| xcb_disconnect(connection); |
| } |
| |
| # ifdef HAVE_xcb_util |
| # include <xcb/xcb_aux.h> |
| |
| static void test_xcb_util(void) |
| { |
| int screen_nbr; |
| xcb_connection_t* connection = xcb_connect(NULL, &screen_nbr); |
| xcb_screen_t* screen = xcb_aux_get_screen(connection, screen_nbr); |
| xcb_disconnect(connection); |
| } |
| |
| # endif |
| |
| # ifdef HAVE_xcb_xfixes |
| # include <xcb/xcb_xfixes.h> |
| |
| static void test_xcb_xfixes(void) |
| { |
| int screen_nbr; |
| xcb_connection_t* connection = xcb_connect(NULL, &screen_nbr); |
| xcb_xfixes_query_version(connection, 1, 0); |
| xcb_disconnect(connection); |
| } |
| |
| # endif |
| |
| #endif |
| |
| #include <stddef.h> |
| |
| int main(int argc, char* argv[]) |
| { |
| (void)argv; |
| void* fptrs[] = { |
| #ifdef HAVE_X11_ICE |
| test_ICE, |
| #endif |
| #ifdef HAVE_X11_SM |
| test_SM, |
| #endif |
| #ifdef HAVE_X11_X11 |
| test_X11, |
| #endif |
| #ifdef HAVE_X11_Xau |
| test_Xau, |
| #endif |
| #ifdef HAVE_X11_Xcomposite |
| test_Xcomposite, |
| #endif |
| #ifdef HAVE_X11_Xdamage |
| test_Xdamage, |
| #endif |
| #ifdef HAVE_X11_Xdmcp |
| test_Xdmcp, |
| #endif |
| #ifdef HAVE_X11_Xext |
| test_Xext, |
| #endif |
| #ifdef HAVE_X11_Xxf86misc |
| test_Xxf86misc, |
| #endif |
| #ifdef HAVE_X11_Xxf86vm |
| test_Xxf86vm, |
| #endif |
| #ifdef HAVE_X11_Xfixes |
| test_Xfixes, |
| #endif |
| #ifdef HAVE_X11_Xft |
| test_Xft, |
| #endif |
| #ifdef HAVE_X11_Xi |
| test_Xi, |
| #endif |
| #ifdef HAVE_X11_Xinerama |
| test_Xinerama, |
| #endif |
| #ifdef HAVE_X11_Xkb |
| test_Xkb, |
| #endif |
| #ifdef HAVE_X11_xkbfile |
| test_xkbfile, |
| #endif |
| #ifdef HAVE_X11_Xmu |
| test_Xmu, |
| #endif |
| #ifdef HAVE_X11_Xpm |
| test_Xpm, |
| #endif |
| #ifdef HAVE_X11_Xtst |
| test_Xtst, |
| #endif |
| #ifdef HAVE_X11_Xrandr |
| test_Xrandr, |
| #endif |
| #ifdef HAVE_X11_Xrender |
| test_Xrender, |
| #endif |
| #ifdef HAVE_X11_XRes |
| test_XRes, |
| #endif |
| #ifdef HAVE_X11_Xss |
| test_Xss, |
| #endif |
| #ifdef HAVE_X11_Xt |
| test_Xt, |
| #endif |
| #ifdef HAVE_X11_Xutil |
| test_Xutil, |
| #endif |
| #ifdef HAVE_X11_Xv |
| test_Xv, |
| #endif |
| #ifdef HAVE_X11_Xaw |
| test_Xaw, |
| #endif |
| #ifdef HAVE_xcb |
| test_xcb, |
| #endif |
| #ifdef HAVE_xcb_util |
| test_xcb_util, |
| #endif |
| #ifdef HAVE_xcb_xfixes |
| test_xcb_xfixes, |
| #endif |
| |
| NULL, |
| }; |
| |
| // The code here is to convince the compiler to keep the static functions but |
| // without calling them. This ends up always being "0" because `argc` is |
| // always 1 in the test harness which always returns the sentinel at the end |
| // of the array. The array logic is there to ensure that the contents of |
| // `fptrs` is not optimized out. |
| return (int)fptrs[(sizeof(fptrs) / sizeof(*fptrs)) - argc]; |
| } |