#ifdef HAVE_X11_ICE # include static Status test_ICE(void) { return IceInitThreads(); } #endif #ifdef HAVE_X11_SM # include # include static void test_SM(void) { SmcProtocolVersion(NULL); } #endif #ifdef HAVE_X11_X11 # include static Status test_X11(void) { return XInitThreads(); } #endif #ifdef HAVE_X11_Xau # include static char* test_Xau(void) { return XauFileName(); } #endif #ifdef HAVE_X11_Xcomposite # include static int test_Xcomposite(void) { return XCompositeVersion(); } #endif #ifdef HAVE_X11_Xdamage # include 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 static int test_Xdmcp(void) { BYTE data[1024]; XdmcpBuffer buf = { data, sizeof(data), 0, 0 }; return XdmcpReadRemaining(&buf); } #endif #ifdef HAVE_X11_Xext # include # include static int test_Xext(void) { Display* dpy = XOpenDisplay(NULL); int ret = XMissingExtension(dpy, "cmake"); XCloseDisplay(dpy); return ret; } #endif #ifdef HAVE_X11_Xxf86misc # include # include static Bool test_Xxf86misc(void) { Display* dpy = XOpenDisplay(NULL); Bool ret = XF86MiscSetClientVersion(dpy); XCloseDisplay(dpy); return ret; } #endif #ifdef HAVE_X11_Xxf86vm # include # include static Bool test_Xxf86vm(void) { Display* dpy = XOpenDisplay(NULL); Bool ret = XF86VidModeSetClientVersion(dpy); XCloseDisplay(dpy); return ret; } #endif #ifdef HAVE_X11_Xfixes # include 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 static FcBool test_Xft(void) { return XftInitFtLibrary(); } #endif #ifdef HAVE_X11_Xi # include static XExtensionVersion* test_Xi(void) { Display* dpy = XOpenDisplay(NULL); XExtensionVersion* ret = XGetExtensionVersion(dpy, "cmake"); XCloseDisplay(dpy); return ret; } #endif #ifdef HAVE_X11_Xinerama # include 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 static Bool test_Xkb(void) { return XkbIgnoreExtension(0); } #endif #ifdef HAVE_X11_xkbfile // clang-format off # include # include # include # include // clang-format on static void test_xkbfile(void) { Display* dpy = XOpenDisplay(NULL); XkbInitAtoms(dpy); XCloseDisplay(dpy); } #endif #ifdef HAVE_X11_Xmu # include # include static Bool test_Xmu(void) { return XmuValidArea(NULL); } #endif #ifdef HAVE_X11_Xpm # include static int test_Xpm(void) { return XpmAttributesSize(); } #endif #ifdef HAVE_X11_Xtst # include static Status test_Xtst(void) { Display* dpy = XOpenDisplay(NULL); Status ret = XTestDiscard(dpy); XCloseDisplay(dpy); return ret; } #endif #ifdef HAVE_X11_Xrandr # include 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 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 # include 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 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 static void test_Xt(void) { return XtToolkitInitialize(); } #endif #ifdef HAVE_X11_Xutil # include static int test_Xutil(void) { Region r = XCreateRegion(); return XDestroyRegion(r); } #endif #ifdef HAVE_X11_Xv # include # include 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 # include 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 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 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 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 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]; }