mirror of
https://github.com/reactos/CMake.git
synced 2025-01-23 12:15:20 +00:00
Tests/FindX11: add a test
This commit is contained in:
parent
a7d2ffb232
commit
bced9d5e56
@ -1485,6 +1485,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
|
||||
add_subdirectory(FindVulkan)
|
||||
endif()
|
||||
|
||||
if(CMake_TEST_FindX11)
|
||||
add_subdirectory(FindX11)
|
||||
endif()
|
||||
|
||||
if(CMake_TEST_FindXalanC)
|
||||
add_subdirectory(FindXalanC)
|
||||
endif()
|
||||
|
10
Tests/FindX11/CMakeLists.txt
Normal file
10
Tests/FindX11/CMakeLists.txt
Normal file
@ -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>
|
||||
)
|
89
Tests/FindX11/Test/CMakeLists.txt
Normal file
89
Tests/FindX11/Test/CMakeLists.txt
Normal file
@ -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)
|
405
Tests/FindX11/Test/main.c
Normal file
405
Tests/FindX11/Test/main.c
Normal file
@ -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];
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user