main.c 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. #ifdef HAVE_X11_ICE
  2. # include <X11/ICE/ICElib.h>
  3. static Status test_ICE(void)
  4. {
  5. return IceInitThreads();
  6. }
  7. #endif
  8. #ifdef HAVE_X11_SM
  9. # include <X11/SM/SMlib.h>
  10. # include <stdlib.h>
  11. static void test_SM(void)
  12. {
  13. SmcProtocolVersion(NULL);
  14. }
  15. #endif
  16. #ifdef HAVE_X11_X11
  17. # include <X11/Xlib.h>
  18. static Status test_X11(void)
  19. {
  20. return XInitThreads();
  21. }
  22. #endif
  23. #ifdef HAVE_X11_Xau
  24. # include <X11/Xauth.h>
  25. static char* test_Xau(void)
  26. {
  27. return XauFileName();
  28. }
  29. #endif
  30. #ifdef HAVE_X11_Xcomposite
  31. # include <X11/extensions/Xcomposite.h>
  32. static int test_Xcomposite(void)
  33. {
  34. return XCompositeVersion();
  35. }
  36. #endif
  37. #ifdef HAVE_X11_Xdamage
  38. # include <X11/extensions/Xdamage.h>
  39. static Bool test_Xdamage(void)
  40. {
  41. Display* dpy = XOpenDisplay(NULL);
  42. int ev_base;
  43. int err_base;
  44. Bool ret = XDamageQueryExtension(dpy, &ev_base, &err_base);
  45. XCloseDisplay(dpy);
  46. return ret;
  47. }
  48. #endif
  49. #ifdef HAVE_X11_Xdmcp
  50. # include <X11/Xdmcp.h>
  51. static int test_Xdmcp(void)
  52. {
  53. BYTE data[1024];
  54. XdmcpBuffer buf = { data, sizeof(data), 0, 0 };
  55. return XdmcpReadRemaining(&buf);
  56. }
  57. #endif
  58. #ifdef HAVE_X11_Xext
  59. # include <X11/Xlib.h>
  60. # include <X11/extensions/Xext.h>
  61. static int test_Xext(void)
  62. {
  63. Display* dpy = XOpenDisplay(NULL);
  64. int ret = XMissingExtension(dpy, "cmake");
  65. XCloseDisplay(dpy);
  66. return ret;
  67. }
  68. #endif
  69. #ifdef HAVE_X11_Xxf86misc
  70. # include <X11/Xlib.h>
  71. # include <X11/extensions/xf86misc.h>
  72. static Bool test_Xxf86misc(void)
  73. {
  74. Display* dpy = XOpenDisplay(NULL);
  75. Bool ret = XF86MiscSetClientVersion(dpy);
  76. XCloseDisplay(dpy);
  77. return ret;
  78. }
  79. #endif
  80. #ifdef HAVE_X11_Xxf86vm
  81. # include <X11/Xlib.h>
  82. # include <X11/extensions/xf86vmode.h>
  83. static Bool test_Xxf86vm(void)
  84. {
  85. Display* dpy = XOpenDisplay(NULL);
  86. Bool ret = XF86VidModeSetClientVersion(dpy);
  87. XCloseDisplay(dpy);
  88. return ret;
  89. }
  90. #endif
  91. #ifdef HAVE_X11_Xfixes
  92. # include <X11/extensions/Xfixes.h>
  93. static Bool test_Xfixes(void)
  94. {
  95. Display* dpy = XOpenDisplay(NULL);
  96. int ev_base;
  97. int err_base;
  98. Bool ret = XFixesQueryExtension(dpy, &ev_base, &err_base);
  99. XCloseDisplay(dpy);
  100. return ret;
  101. }
  102. #endif
  103. #ifdef HAVE_X11_Xft
  104. # include <X11/Xft/Xft.h>
  105. static FcBool test_Xft(void)
  106. {
  107. return XftInitFtLibrary();
  108. }
  109. #endif
  110. #ifdef HAVE_X11_Xi
  111. # include <X11/extensions/XInput.h>
  112. static XExtensionVersion* test_Xi(void)
  113. {
  114. Display* dpy = XOpenDisplay(NULL);
  115. XExtensionVersion* ret = XGetExtensionVersion(dpy, "cmake");
  116. XCloseDisplay(dpy);
  117. return ret;
  118. }
  119. #endif
  120. #ifdef HAVE_X11_Xinerama
  121. # include <X11/extensions/Xinerama.h>
  122. static Bool test_Xinerama(void)
  123. {
  124. Display* dpy = XOpenDisplay(NULL);
  125. int ev_base;
  126. int err_base;
  127. Bool ret = XineramaQueryExtension(dpy, &ev_base, &err_base);
  128. XCloseDisplay(dpy);
  129. return ret;
  130. }
  131. #endif
  132. #ifdef HAVE_X11_Xkb
  133. # include <X11/XKBlib.h>
  134. static Bool test_Xkb(void)
  135. {
  136. return XkbIgnoreExtension(0);
  137. }
  138. #endif
  139. #ifdef HAVE_X11_xkbfile
  140. // clang-format off
  141. # include <stdio.h>
  142. # include <X11/XKBlib.h>
  143. # include <X11/extensions/XKBfile.h>
  144. # include <stdlib.h>
  145. // clang-format on
  146. static void test_xkbfile(void)
  147. {
  148. Display* dpy = XOpenDisplay(NULL);
  149. XkbInitAtoms(dpy);
  150. XCloseDisplay(dpy);
  151. }
  152. #endif
  153. #ifdef HAVE_X11_Xmu
  154. # include <X11/Xmu/Xmu.h>
  155. # include <stdlib.h>
  156. static Bool test_Xmu(void)
  157. {
  158. return XmuValidArea(NULL);
  159. }
  160. #endif
  161. #ifdef HAVE_X11_Xpm
  162. # include <X11/xpm.h>
  163. static int test_Xpm(void)
  164. {
  165. return XpmAttributesSize();
  166. }
  167. #endif
  168. #ifdef HAVE_X11_Xtst
  169. # include <X11/extensions/XTest.h>
  170. static Status test_Xtst(void)
  171. {
  172. Display* dpy = XOpenDisplay(NULL);
  173. Status ret = XTestDiscard(dpy);
  174. XCloseDisplay(dpy);
  175. return ret;
  176. }
  177. #endif
  178. #ifdef HAVE_X11_Xrandr
  179. # include <X11/extensions/Xrandr.h>
  180. static Bool test_Xrandr(void)
  181. {
  182. Display* dpy = XOpenDisplay(NULL);
  183. int ev_base;
  184. int err_base;
  185. Bool ret = XRRQueryExtension(dpy, &ev_base, &err_base);
  186. XCloseDisplay(dpy);
  187. return ret;
  188. }
  189. #endif
  190. #ifdef HAVE_X11_Xrender
  191. # include <X11/extensions/Xrender.h>
  192. static Bool test_Xrender(void)
  193. {
  194. Display* dpy = XOpenDisplay(NULL);
  195. int ev_base;
  196. int err_base;
  197. Bool ret = XRenderQueryExtension(dpy, &ev_base, &err_base);
  198. XCloseDisplay(dpy);
  199. return ret;
  200. }
  201. #endif
  202. #ifdef HAVE_X11_XRes
  203. # include <X11/Xlib.h>
  204. # include <X11/extensions/XRes.h>
  205. static Bool test_XRes(void)
  206. {
  207. Display* dpy = XOpenDisplay(NULL);
  208. int ev_base;
  209. int err_base;
  210. Bool ret = XResQueryExtension(dpy, &ev_base, &err_base);
  211. XCloseDisplay(dpy);
  212. return ret;
  213. }
  214. #endif
  215. #ifdef HAVE_X11_Xss
  216. # include <X11/extensions/scrnsaver.h>
  217. static Bool test_Xss(void)
  218. {
  219. Display* dpy = XOpenDisplay(NULL);
  220. int ev_base;
  221. int err_base;
  222. Bool ret = XScreenSaverQueryExtension(dpy, &ev_base, &err_base);
  223. XCloseDisplay(dpy);
  224. return ret;
  225. }
  226. #endif
  227. #ifdef HAVE_X11_Xt
  228. # include <X11/Intrinsic.h>
  229. static void test_Xt(void)
  230. {
  231. return XtToolkitInitialize();
  232. }
  233. #endif
  234. #ifdef HAVE_X11_Xutil
  235. # include <X11/Xutil.h>
  236. static int test_Xutil(void)
  237. {
  238. Region r = XCreateRegion();
  239. return XDestroyRegion(r);
  240. }
  241. #endif
  242. #ifdef HAVE_X11_Xv
  243. # include <X11/Xlib.h>
  244. # include <X11/extensions/Xvlib.h>
  245. static int test_Xv(void)
  246. {
  247. Display* dpy = XOpenDisplay(NULL);
  248. unsigned int version;
  249. unsigned int revision;
  250. unsigned int req_base;
  251. unsigned int ev_base;
  252. unsigned int err_base;
  253. int ret =
  254. XvQueryExtension(dpy, &version, &revision, &req_base, &ev_base, &err_base);
  255. XCloseDisplay(dpy);
  256. return ret;
  257. }
  258. #endif
  259. #ifdef HAVE_X11_Xaw
  260. # include <X11/Intrinsic.h>
  261. # include <X11/Xaw/Box.h>
  262. static void test_Xaw(void)
  263. {
  264. XrmOptionDescRec opt_table[] = { { NULL } };
  265. Widget toplevel;
  266. toplevel =
  267. XtInitialize("test", "test", opt_table, XtNumber(opt_table), NULL, NULL);
  268. Widget box =
  269. XtCreateManagedWidget("testbox", boxWidgetClass, toplevel, NULL, 0);
  270. return;
  271. }
  272. #endif
  273. #ifdef HAVE_xcb
  274. # include <xcb/xcb.h>
  275. static void test_xcb(void)
  276. {
  277. int screen_nbr;
  278. xcb_connection_t* connection = xcb_connect(NULL, &screen_nbr);
  279. xcb_disconnect(connection);
  280. }
  281. # ifdef HAVE_xcb_util
  282. # include <xcb/xcb_aux.h>
  283. static void test_xcb_util(void)
  284. {
  285. int screen_nbr;
  286. xcb_connection_t* connection = xcb_connect(NULL, &screen_nbr);
  287. xcb_screen_t* screen = xcb_aux_get_screen(connection, screen_nbr);
  288. xcb_disconnect(connection);
  289. }
  290. # endif
  291. # ifdef HAVE_xcb_xfixes
  292. # include <xcb/xcb_xfixes.h>
  293. static void test_xcb_xfixes(void)
  294. {
  295. int screen_nbr;
  296. xcb_connection_t* connection = xcb_connect(NULL, &screen_nbr);
  297. xcb_xfixes_query_version(connection, 1, 0);
  298. xcb_disconnect(connection);
  299. }
  300. # endif
  301. #endif
  302. #include <stddef.h>
  303. int main(int argc, char* argv[])
  304. {
  305. (void)argv;
  306. void* fptrs[] = {
  307. #ifdef HAVE_X11_ICE
  308. test_ICE,
  309. #endif
  310. #ifdef HAVE_X11_SM
  311. test_SM,
  312. #endif
  313. #ifdef HAVE_X11_X11
  314. test_X11,
  315. #endif
  316. #ifdef HAVE_X11_Xau
  317. test_Xau,
  318. #endif
  319. #ifdef HAVE_X11_Xcomposite
  320. test_Xcomposite,
  321. #endif
  322. #ifdef HAVE_X11_Xdamage
  323. test_Xdamage,
  324. #endif
  325. #ifdef HAVE_X11_Xdmcp
  326. test_Xdmcp,
  327. #endif
  328. #ifdef HAVE_X11_Xext
  329. test_Xext,
  330. #endif
  331. #ifdef HAVE_X11_Xxf86misc
  332. test_Xxf86misc,
  333. #endif
  334. #ifdef HAVE_X11_Xxf86vm
  335. test_Xxf86vm,
  336. #endif
  337. #ifdef HAVE_X11_Xfixes
  338. test_Xfixes,
  339. #endif
  340. #ifdef HAVE_X11_Xft
  341. test_Xft,
  342. #endif
  343. #ifdef HAVE_X11_Xi
  344. test_Xi,
  345. #endif
  346. #ifdef HAVE_X11_Xinerama
  347. test_Xinerama,
  348. #endif
  349. #ifdef HAVE_X11_Xkb
  350. test_Xkb,
  351. #endif
  352. #ifdef HAVE_X11_xkbfile
  353. test_xkbfile,
  354. #endif
  355. #ifdef HAVE_X11_Xmu
  356. test_Xmu,
  357. #endif
  358. #ifdef HAVE_X11_Xpm
  359. test_Xpm,
  360. #endif
  361. #ifdef HAVE_X11_Xtst
  362. test_Xtst,
  363. #endif
  364. #ifdef HAVE_X11_Xrandr
  365. test_Xrandr,
  366. #endif
  367. #ifdef HAVE_X11_Xrender
  368. test_Xrender,
  369. #endif
  370. #ifdef HAVE_X11_XRes
  371. test_XRes,
  372. #endif
  373. #ifdef HAVE_X11_Xss
  374. test_Xss,
  375. #endif
  376. #ifdef HAVE_X11_Xt
  377. test_Xt,
  378. #endif
  379. #ifdef HAVE_X11_Xutil
  380. test_Xutil,
  381. #endif
  382. #ifdef HAVE_X11_Xv
  383. test_Xv,
  384. #endif
  385. #ifdef HAVE_X11_Xaw
  386. test_Xaw,
  387. #endif
  388. #ifdef HAVE_xcb
  389. test_xcb,
  390. #endif
  391. #ifdef HAVE_xcb_util
  392. test_xcb_util,
  393. #endif
  394. #ifdef HAVE_xcb_xfixes
  395. test_xcb_xfixes,
  396. #endif
  397. NULL,
  398. };
  399. // The code here is to convince the compiler to keep the static functions but
  400. // without calling them. This ends up always being "0" because `argc` is
  401. // always 1 in the test harness which always returns the sentinel at the end
  402. // of the array. The array logic is there to ensure that the contents of
  403. // `fptrs` is not optimized out.
  404. return (int)fptrs[(sizeof(fptrs) / sizeof(*fptrs)) - argc];
  405. }