mirror of https://github.com/Kitware/CMake.git
Browse Source
Merge topic 'findx11-imported-targets'
Merge topic 'findx11-imported-targets'
pull/324/headbced9d5e56
Tests/FindX11: add a testa7d2ffb232
FindX11: add imported targets40b3dba529
FindX11: require Freetype and Fontconfig for Xftcc96249e2e
FindX11: remove local variable from the advanced list99489d9f10
FindX11: find Xext.hb8b598061a
FindX11: match variables with library names6079a0d00f
FindX11: fix some formatting in the documentation3c54955d0d
FindX11: use `list(APPEND)` for clearer code ... Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !2604

committed by
Kitware Robot

6 changed files with 887 additions and 121 deletions
-
32Help/release/dev/FindX11-imported-targets.rst
-
468Modules/FindX11.cmake
-
4Tests/CMakeLists.txt
-
10Tests/FindX11/CMakeLists.txt
-
89Tests/FindX11/Test/CMakeLists.txt
-
405Tests/FindX11/Test/main.c
@ -0,0 +1,32 @@ |
|||
FindX11-imported-targets |
|||
------------------------ |
|||
|
|||
* The :module:`FindX11` had the following variables renamed in order to match |
|||
their library names rather than header names. The old variables are provided |
|||
for compatibility: |
|||
|
|||
- ``X11_Xxf86misc_INCLUDE_PATH`` instead of ``X11_xf86misc_INCLUDE_PATH`` |
|||
- ``X11_Xxf86misc_LIB`` instead of ``X11_xf86misc_LIB`` |
|||
- ``X11_Xxf86misc_FOUND`` instead of ``X11_xf86misc_FOUND`` |
|||
- ``X11_Xxf86vm_INCLUDE_PATH`` instead of ``X11_xf86vmode_INCLUDE_PATH`` |
|||
- ``X11_Xxf86vm_LIB`` instead of ``X11_xf86vmode_LIB`` |
|||
- ``X11_Xxf86vm_FOUND`` instead of ``X11_xf86vmode_FOUND`` |
|||
- ``X11_xkbfile_INCLUDE_PATH`` instead of ``X11_Xkbfile_INCLUDE_PATH`` |
|||
- ``X11_xkbfile_LIB`` instead of ``X11_Xkbfile_LIB`` |
|||
- ``X11_xkbfile_FOUND`` instead of ``X11_Xkbfile_FOUND`` |
|||
- ``X11_Xtst_INCLUDE_PATH`` instead of ``X11_XTest_INCLUDE_PATH`` |
|||
- ``X11_Xtst_LIB`` instead of ``X11_XTest_LIB`` |
|||
- ``X11_Xtst_FOUND`` instead of ``X11_XTest_FOUND`` |
|||
- ``X11_Xss_INCLUDE_PATH`` instead of ``X11_Xscreensaver_INCLUDE_PATH`` |
|||
- ``X11_Xss_LIB`` instead of ``X11_Xscreensaver_LIB`` |
|||
- ``X11_Xss_FOUND`` instead of ``X11_Xscreensaver_FOUND`` |
|||
|
|||
The following variables are deprecated completely since they were |
|||
essentially duplicates: |
|||
|
|||
- ``X11_Xinput_INCLUDE_PATH`` (use ``X11_Xi_INCLUDE_PATH``) |
|||
- ``X11_Xinput_LIB`` (use ``X11_Xi_LIB``) |
|||
- ``X11_Xinput_FOUND`` (use ``X11_Xi_FOUND``) |
|||
|
|||
* The :module:`FindX11` now provides ``X11_Xext_INCLUDE_PATH``. |
|||
* The :module:`FindX11` now provides imported targets. |
@ -0,0 +1,10 @@ |
|||
add_test(NAME FindX11.Test COMMAND |
|||
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> |
|||
--build-and-test |
|||
"${CMake_SOURCE_DIR}/Tests/FindX11/Test" |
|||
"${CMake_BINARY_DIR}/Tests/FindX11/Test" |
|||
${build_generator_args} |
|||
--build-project TestFindX11 |
|||
--build-options ${build_options} |
|||
--test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION> |
|||
) |
@ -0,0 +1,89 @@ |
|||
cmake_minimum_required(VERSION 3.10) |
|||
project(TestFindX11 C) |
|||
include(CTest) |
|||
|
|||
find_package(X11 REQUIRED) |
|||
|
|||
function (test_x11_component have_var component) |
|||
if (NOT X11_${component}_FOUND) |
|||
message("Skipping ${component} because it was not found.") |
|||
return () |
|||
endif () |
|||
|
|||
add_executable(test_tgt_${component} main.c) |
|||
target_link_libraries(test_tgt_${component} PRIVATE X11::${component}) |
|||
target_compile_definitions(test_tgt_${component} PRIVATE HAVE_X11_${component}) |
|||
add_test(NAME test_tgt_${component} COMMAND test_tgt_${component}) |
|||
|
|||
# Add to the list of components to test for the parent. |
|||
set(${have_var} |
|||
${${have_var}} |
|||
HAVE_X11_${component} |
|||
PARENT_SCOPE) |
|||
endfunction () |
|||
|
|||
set(x11_components) |
|||
test_x11_component(x11_components ICE) |
|||
test_x11_component(x11_components SM) |
|||
# Not a component; hack it up. |
|||
set(X11_X11_FOUND ${X11_FOUND}) |
|||
test_x11_component(x11_components X11) |
|||
test_x11_component(x11_components Xau) |
|||
test_x11_component(x11_components Xcomposite) |
|||
test_x11_component(x11_components Xdamage) |
|||
test_x11_component(x11_components Xdmcp) |
|||
test_x11_component(x11_components Xext) |
|||
test_x11_component(x11_components Xxf86misc) |
|||
test_x11_component(x11_components Xxf86vm) |
|||
test_x11_component(x11_components Xfixes) |
|||
# We ignore the Xft component because the variables do not provide the required |
|||
# dependency information (Freetype and Fontconfig). |
|||
test_x11_component(x11_components_ignore Xft) |
|||
test_x11_component(x11_components Xi) |
|||
test_x11_component(x11_components Xinerama) |
|||
test_x11_component(x11_components Xkb) |
|||
test_x11_component(x11_components xkbfile) |
|||
test_x11_component(x11_components Xmu) |
|||
test_x11_component(x11_components Xpm) |
|||
test_x11_component(x11_components Xtst) |
|||
test_x11_component(x11_components Xrandr) |
|||
test_x11_component(x11_components Xrender) |
|||
test_x11_component(x11_components XRes) |
|||
test_x11_component(x11_components Xss) |
|||
test_x11_component(x11_components Xt) |
|||
test_x11_component(x11_components Xutil) |
|||
test_x11_component(x11_components Xv) |
|||
|
|||
# The variables do not include dependency information. Just test "everything". |
|||
add_executable(test_var main.c) |
|||
target_include_directories(test_var PRIVATE ${X11_INCLUDE_DIRS}) |
|||
target_link_libraries(test_var PRIVATE ${X11_LIBRARIES}) |
|||
# Not included in X11_LIBRARIES. |
|||
foreach(lib |
|||
Xau |
|||
Xcomposite |
|||
Xdamage |
|||
Xdmcp |
|||
Xxf86misc |
|||
Xxf86vm |
|||
Xfixes |
|||
Xi |
|||
Xinerama |
|||
Xkb |
|||
xkbfile |
|||
Xmu |
|||
Xpm |
|||
Xtst |
|||
Xrandr |
|||
Xrender |
|||
XRes |
|||
Xss |
|||
Xt |
|||
Xv |
|||
) |
|||
if (X11_${lib}_FOUND) |
|||
target_link_libraries(test_var PRIVATE ${X11_${lib}_LIB}) |
|||
endif () |
|||
endforeach() |
|||
target_compile_definitions(test_var PRIVATE ${x11_components}) |
|||
add_test(NAME test_var COMMAND test_var) |
@ -0,0 +1,405 @@ |
|||
#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 |
|||
# include <stdio.h> |
|||
|
|||
# include <X11/XKBlib.h> |
|||
# include <X11/extensions/XKBfile.h> |
|||
|
|||
# include <stdlib.h> |
|||
|
|||
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 |
|||
|
|||
#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 |
|||
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]; |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue