summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2017-08-01 18:30:33 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2017-08-02 16:37:48 +0000
commitf54f7d847099db448223fd630c5416b6fbd84c9e (patch)
treebb3969221b65a426b89020875ff5e16a8c5247e7 /src
parent90588d57d71e1eedf6becd3ebf505f3bd67b592b (diff)
configure: Add a feature to write tests in the .json file
We're adding a lot of unnecessary files that end up later as cargo-cult, for at most a handful of lines. So instead move the testcases directly into the .json file. The following sources were not inlined, because multiple tests share them, and the inlining infra does not support that (yet): - avx512 - openssl - gnu-libiconv/sun-libiconv (there is also a command line option to select the exact variant, which makes it hard/impossible to properly coalesce the library sources) The following sources were not inlined because of "complications": - verifyspec contains a lengthy function in the project file - stl contains lots of code in the source file - xlocalescanprint includes a private header from the source tree via a relative path, which we can't do, as the test's physical location is variable. - corewlan uses objective c++, which the inline system doesn't support reduce_relocs and reduce_exports now create libraries with main(), which is weird enough, but doesn't hurt. Done-with: Oswald Buddenhagen <oswald.buddenhagen@qt.io> Change-Id: Ic3a088f9f08a4fd7ae91fffd14ce8a262021cca0 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/configure.json220
-rw-r--r--src/gui/configure.json484
-rw-r--r--src/network/configure.json58
-rw-r--r--src/plugins/sqldrivers/configure.json56
-rw-r--r--src/printsupport/configure.json5
5 files changed, 743 insertions, 80 deletions
diff --git a/src/corelib/configure.json b/src/corelib/configure.json
index 67a1a2ad4b..5596280250 100644
--- a/src/corelib/configure.json
+++ b/src/corelib/configure.json
@@ -22,14 +22,26 @@
"libraries": {
"doubleconversion": {
"label": "DoubleConversion",
- "test": "unix/doubleconversion",
+ "test": {
+ "include": "double-conversion/double-conversion.h",
+ "main": "(void) double_conversion::StringToDoubleConverter::NO_FLAGS;"
+ },
"sources": [
"-ldouble-conversion"
]
},
"glib": {
"label": "GLib",
- "test": "unix/glib",
+ "test": {
+ "head": "typedef struct _GMainContext GMainContext;",
+ "include": "glib.h",
+ "main": [
+ "g_thread_init(NULL);",
+ "(void) g_main_context_default();",
+ "(void) g_source_new(0, 0);",
+ "g_source_add_poll(NULL, NULL);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "glib-2.0 gthread-2.0" }
]
@@ -44,7 +56,22 @@
},
"icu": {
"label": "ICU",
- "test": "unix/icu",
+ "test": {
+ "include": [ "unicode/utypes.h", "unicode/ucol.h", "unicode/ustring.h" ],
+ "main": [
+ "UErrorCode status = U_ZERO_ERROR;",
+ "UCollator *collator = ucol_open(\"ru_RU\", &status);",
+ "if (!U_FAILURE(status))",
+ " ucol_close(collator);"
+ ],
+ "qmake": [
+ "CONFIG += build_all",
+ "CONFIG(debug, debug|release): \\",
+ " LIBS += $$LIBS_DEBUG",
+ "else: \\",
+ " LIBS += $$LIBS_RELEASE"
+ ]
+ },
"sources": [
{
"builds": {
@@ -62,7 +89,10 @@
},
"journald": {
"label": "journald",
- "test": "unix/journald",
+ "test": {
+ "include": [ "systemd/sd-journal.h", "syslog.h" ],
+ "main": "sd_journal_send(\"PRIORITY=%i\", LOG_INFO, NULL);"
+ },
"sources": [
{ "type": "pkgConfig", "args": "libsystemd" },
{ "type": "pkgConfig", "args": "libsystemd-journal" }
@@ -70,7 +100,26 @@
},
"libatomic": {
"label": "64 bit atomics",
- "test": "common/atomic64",
+ "test": {
+ "include": [ "atomic", "cstdint" ],
+ "tail": [
+ "void test(volatile std::atomic<std::int64_t> &a)",
+ "{",
+ " std::int64_t v = a.load(std::memory_order_acquire);",
+ " while (!a.compare_exchange_strong(v, v + 1,",
+ " std::memory_order_acq_rel,",
+ " std::memory_order_acquire)) {",
+ " v = a.exchange(v - 1);",
+ " }",
+ " a.store(v + 1, std::memory_order_release);",
+ "}"
+ ],
+ "main": [
+ "void *ptr = (void*)0xffffffc0; // any random pointer",
+ "test(*reinterpret_cast<std::atomic<std::int64_t> *>(ptr));"
+ ],
+ "qmake": "CONFIG += c++11"
+ },
"sources": [
"",
"-latomic"
@@ -78,7 +127,10 @@
},
"libdl": {
"label": "dlopen()",
- "test": "unix/dlopen",
+ "test": {
+ "include": "dlfcn.h",
+ "main": "dlopen(0, 0);"
+ },
"sources": [
"",
"-ldl"
@@ -86,7 +138,10 @@
},
"librt": {
"label": "clock_gettime()",
- "test": "unix/clock-gettime",
+ "test": {
+ "include": [ "unistd.h", "time.h" ],
+ "main": "timespec ts; clock_gettime(CLOCK_REALTIME, &ts);"
+ },
"sources": [
"",
"-lrt"
@@ -94,21 +149,38 @@
},
"pcre2": {
"label": "PCRE2",
- "test": "unix/pcre2",
+ "test": {
+ "head": "#define PCRE2_CODE_UNIT_WIDTH 16",
+ "include": "pcre2.h",
+ "tail": [
+ "#if (PCRE2_MAJOR < 10) || ((PCRE2_MAJOR == 10) && (PCRE2_MINOR < 20))",
+ "# error This PCRE version is not supported",
+ "#endif"
+ ]
+ },
"sources": [
"-lpcre2-16"
]
},
"pps": {
"label": "PPS",
- "test": "unix/pps",
+ "test": {
+ "include": "sys/pps.h",
+ "main": [
+ "pps_decoder_t decoder;",
+ "pps_decoder_initialize(&decoder, NULL);"
+ ]
+ },
"sources": [
"-lpps"
]
},
"slog2": {
"label": "slog2",
- "test": "unix/slog2",
+ "test": {
+ "include": "slog2.h",
+ "main": "slog2_set_default_buffer((slog2_buffer_t)-1);"
+ },
"export": "",
"sources": [
"-lslog2"
@@ -120,23 +192,77 @@
"atomicfptr": {
"label": "working std::atomic for function pointers",
"type": "compile",
- "test": "common/atomicfptr"
+ "test": {
+ "include": "atomic",
+ "tail": [
+ "typedef void (*fptr)(int);",
+ "typedef std::atomic<fptr> atomicfptr;",
+ "void testfunction(int) { }",
+ "void test(volatile atomicfptr &a)",
+ "{",
+ " fptr v = a.load(std::memory_order_acquire);",
+ " while (!a.compare_exchange_strong(v, &testfunction,",
+ " std::memory_order_acq_rel,",
+ " std::memory_order_acquire)) {",
+ " v = a.exchange(&testfunction);",
+ " }",
+ " a.store(&testfunction, std::memory_order_release);",
+ "}"
+ ],
+ "main": [
+ "atomicfptr fptr(testfunction);",
+ "test(fptr);"
+ ],
+ "qmake": "CONFIG += c++11"
+ }
},
"clock-monotonic": {
"label": "POSIX monotonic clock",
"type": "compile",
- "test": "unix/clock-monotonic",
+ "test": {
+ "include": [ "unistd.h", "time.h" ],
+ "main": [
+ "#if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK-0 >= 0)",
+ "timespec ts;",
+ "clock_gettime(CLOCK_MONOTONIC, &ts);",
+ "#else",
+ "# error Feature _POSIX_MONOTONIC_CLOCK not available",
+ "#endif"
+ ]
+ },
"use": "librt"
},
"cloexec": {
"label": "O_CLOEXEC",
"type": "compile",
- "test": "unix/cloexec"
+ "test": {
+ "head": "#define _GNU_SOURCE 1",
+ "include": [ "sys/types.h", "sys/socket.h", "fcntl.h", "unistd.h" ],
+ "main": [
+ "int pipes[2];",
+ "(void) pipe2(pipes, O_CLOEXEC | O_NONBLOCK);",
+ "(void) fcntl(0, F_DUPFD_CLOEXEC, 0);",
+ "(void) dup3(0, 3, O_CLOEXEC);",
+ "#if defined(__NetBSD__)",
+ "(void) paccept(0, 0, 0, NULL, SOCK_CLOEXEC | SOCK_NONBLOCK);",
+ "#else",
+ "(void) accept4(0, 0, 0, SOCK_CLOEXEC | SOCK_NONBLOCK);",
+ "#endif"
+ ]
+ }
},
"eventfd": {
"label": "eventfd",
"type": "compile",
- "test": "unix/eventfd"
+ "test": {
+ "include": "sys/eventfd.h",
+ "main": [
+ "eventfd_t value;",
+ "int fd = eventfd(0, EFD_CLOEXEC);",
+ "eventfd_read(fd, &value);",
+ "eventfd_write(fd, value);"
+ ]
+ }
},
"posix-iconv": {
"label": "POSIX iconv",
@@ -151,37 +277,89 @@
"inotify": {
"label": "inotify",
"type": "compile",
- "test": "unix/inotify"
+ "test": {
+ "include": "sys/inotify.h",
+ "main": [
+ "inotify_init();",
+ "inotify_add_watch(0, \"foobar\", IN_ACCESS);",
+ "inotify_rm_watch(0, 1);"
+ ]
+ }
},
"ipc_sysv": {
"label": "SysV IPC",
"type": "compile",
- "test": "unix/ipc_sysv"
+ "test": {
+ "include": [ "sys/types.h", "sys/ipc.h", "sys/sem.h", "sys/shm.h", "fcntl.h" ],
+ "main": [
+ "key_t unix_key = ftok(\"test\", 'Q');",
+ "semctl(semget(unix_key, 1, 0666 | IPC_CREAT | IPC_EXCL), 0, IPC_RMID, 0);",
+ "shmget(unix_key, 0, 0666 | IPC_CREAT | IPC_EXCL);",
+ "shmctl(0, 0, (struct shmid_ds *)(0));"
+ ]
+ }
},
"ipc_posix": {
"label": "POSIX IPC",
"type": "compile",
- "test": "unix/ipc_posix"
+ "test": {
+ "include": [ "sys/types.h", "sys/mman.h", "semaphore.h", "fcntl.h" ],
+ "main": [
+ "sem_close(sem_open(\"test\", O_CREAT | O_EXCL, 0666, 0));",
+ "shm_open(\"test\", O_RDWR | O_CREAT | O_EXCL, 0666);",
+ "shm_unlink(\"test\");"
+ ],
+ "qmake": "linux: LIBS += -lpthread -lrt"
+ }
},
"ppoll": {
"label": "ppoll()",
"type": "compile",
- "test": "unix/ppoll"
+ "test": {
+ "include": [ "signal.h", "poll.h" ],
+ "main": [
+ "struct pollfd pfd;",
+ "struct timespec ts;",
+ "sigset_t sig;",
+ "ppoll(&pfd, 1, &ts, &sig);"
+ ]
+ }
},
"pollts": {
"label": "pollts()",
"type": "compile",
- "test": "unix/pollts"
+ "test": {
+ "include": [ "poll.h", "signal.h", "time.h" ],
+ "main": [
+ "struct pollfd pfd;",
+ "struct timespec ts;",
+ "sigset_t sig;",
+ "pollts(&pfd, 1, &ts, &sig);"
+ ]
+ }
},
"poll": {
"label": "poll()",
"type": "compile",
- "test": "unix/poll"
+ "test": {
+ "include": "poll.h",
+ "main": [
+ "struct pollfd pfd;",
+ "poll(&pfd, 1, 0);"
+ ]
+ }
},
"syslog": {
"label": "syslog",
"type": "compile",
- "test": "unix/syslog"
+ "test": {
+ "include": "syslog.h",
+ "main": [
+ "openlog(\"qt\", 0, LOG_USER);",
+ "syslog(LOG_INFO, \"configure\");",
+ "closelog();"
+ ]
+ }
},
"xlocalescanprint": {
"label": "xlocale.h (or equivalents)",
diff --git a/src/gui/configure.json b/src/gui/configure.json
index a51557e6cd..062171606e 100644
--- a/src/gui/configure.json
+++ b/src/gui/configure.json
@@ -66,14 +66,30 @@
"direct2d": {
"label": "Direct 2D",
"export": "",
- "test": "qpa/direct2d",
+ "test": {
+ "include": [ "d3d11_1.h", "d2d1_1.h", "d2d1_1helper.h", "dxgi1_2.h", "wrl.h", "dwrite.h" ],
+ "tail": "using Microsoft::WRL::ComPtr;",
+ "main": [
+ "ComPtr<ID2D1Factory1> d2dFactory;",
+ "D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, d2dFactory.ReleaseAndGetAddressOf());",
+ "ComPtr<IDXGISurface1> surface;",
+ "(void) surface;"
+ ]
+ },
"sources": [
"-ld2d1 -ldwrite -ld3d11"
]
},
"directfb": {
"label": "DirectFB",
- "test": "qpa/directfb",
+ "test": {
+ "include": "directfb.h",
+ "tail": [
+ "#ifdef __typeof__",
+ "# error DirectFB headers are unclean and cannot compile",
+ "#endif"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "directfb" }
]
@@ -81,14 +97,30 @@
"directwrite": {
"label": "DirectWrite",
"export": "",
- "test": "win/directwrite",
+ "test": {
+ "include": [ "dwrite.h", "d2d1.h" ],
+ "main": [
+ "IDWriteFactory *factory = 0;",
+ "DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory),",
+ " (IUnknown **)(&factory));"
+ ]
+ },
"sources": [
"-ldwrite"
]
},
"drm": {
"label": "KMS",
- "test": "qpa/kms",
+ "test": {
+ "include": [ "stdlib.h", "stdint.h" ],
+ "tail": [
+ "extern \"C\" {",
+ "#include <xf86drmMode.h>",
+ "#include <xf86drm.h>",
+ "}"
+ ],
+ "main": "(void) drmModeGetCrtc(0, 0);"
+ },
"sources": [
{ "type": "pkgConfig", "args": "libdrm" },
{ "libs": "-ldrm", "condition": "!config.integrity" },
@@ -97,7 +129,13 @@
},
"egl": {
"label": "EGL",
- "test": "qpa/egl",
+ "test": {
+ "include": "EGL/egl.h",
+ "main": [
+ "EGLint x = 0; EGLDisplay dpy = 0; EGLContext ctx = 0;",
+ "eglDestroyContext(dpy, ctx);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "egl" },
{ "type": "makeSpec", "spec": "EGL" }
@@ -105,7 +143,18 @@
},
"freetype": {
"label": "FreeType",
- "test": "unix/freetype",
+ "test": {
+ "head": [
+ "#include <ft2build.h>",
+ "#include FT_FREETYPE_H",
+ "#if ((FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) < 20200)",
+ "# error This version of freetype is too old.",
+ "#endif"
+ ],
+ "main": [
+ "FT_Face face = 0;"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "freetype2" },
{ "type": "freetype", "libs": "-lfreetype" }
@@ -113,7 +162,23 @@
},
"fontconfig": {
"label": "Fontconfig",
- "test": "unix/fontconfig",
+ "test": {
+ "head": [
+ "#include <ft2build.h>",
+ "#include FT_FREETYPE_H",
+ "#include <fontconfig/fontconfig.h>",
+ "#ifndef FC_RGBA_UNKNOWN",
+ "# error This version of fontconfig is tool old, it is missing the FC_RGBA_UNKNOWN define",
+ "#endif",
+ "#if ((FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) < 20110)",
+ "# error This version of freetype is too old.",
+ "#endif"
+ ],
+ "main": [
+ "FT_Face face = 0;",
+ "FcPattern *pattern = 0;"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "fontconfig freetype2" },
{ "type": "freetype", "libs": "-lfontconfig -lfreetype" }
@@ -121,14 +186,37 @@
},
"gbm": {
"label": "GBM",
- "test": "qpa/gbm",
+ "test": {
+ "include": [ "stdlib.h", "stdint.h" ],
+ "tail": [
+ "extern \"C\" {",
+ "#include <gbm.h>",
+ "}"
+ ],
+ "main": "gbm_surface *surface = 0;"
+ },
"sources": [
{ "type": "pkgConfig", "args": "gbm" }
]
},
"harfbuzz": {
"label": "HarfBuzz",
- "test": "unix/harfbuzz",
+ "test": {
+ "include": "harfbuzz/hb.h",
+ "tail": [
+ "#if !HB_VERSION_ATLEAST(0, 9, 42)",
+ "# error This version of harfbuzz is too old.",
+ "#endif"
+ ],
+ "main": [
+ "hb_buffer_t *buffer = hb_buffer_create();",
+ "const uint16_t string[] = { 'A', 'b', 'c' };",
+ "hb_buffer_add_utf16(buffer, string, 3, 0, 3);",
+ "hb_buffer_guess_segment_properties(buffer);",
+ "hb_buffer_set_flags(buffer, hb_buffer_flags_t(HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES));",
+ "hb_buffer_destroy(buffer);"
+ ]
+ },
"sources": [
"-lharfbuzz"
]
@@ -136,35 +224,62 @@
"imf": {
"label": "IMF",
"export": "",
- "test": "unix/qqnx_imf",
+ "test": {
+ "include": "imf/imf_client.h",
+ "main": "imf_client_init();"
+ },
"sources": [
"-linput_client"
]
},
"lgmon": {
"label": "lgmon",
- "test": "unix/lgmon",
+ "test": {
+ "include": "lgmon.h",
+ "main": "lgmon_supported(getpid());"
+ },
"sources": [
"-llgmon"
]
},
"libinput": {
"label": "libinput",
- "test": "unix/libinput",
+ "test": {
+ "include": "libinput.h",
+ "main": "libinput_udev_create_context(NULL, NULL, NULL);"
+ },
"sources": [
{ "type": "pkgConfig", "args": "libinput" }
]
},
"integrityhid": {
"label": "integrityhid",
- "test": "qpa/integrityhid",
+ "test": {
+ "include": [ "stdlib.h", "stdint.h", "device/hiddriver.h" ],
+ "main": [
+ "HIDDriver *driver;",
+ "uintptr_t devicecontext;",
+ "uint32_t device_id;",
+ "gh_hid_enum_devices(driver, &device_id, &devicecontext);"
+ ]
+ },
"sources": [
{ "libs": "-lhiddev -lusbhid -lusb" }
]
},
"libjpeg": {
"label": "libjpeg",
- "test": "unix/libjpeg",
+ "test": {
+ "include": [ "sys/types.h", "stdio.h" ],
+ "tail": [
+ "extern \"C\" {",
+ "#include <jpeglib.h>",
+ "}",
+ "",
+ "j_compress_ptr cinfo;"
+ ],
+ "main": "jpeg_create_compress(cinfo);"
+ },
"sources": [
{ "libs": "-llibjpeg", "condition": "config.msvc" },
{ "libs": "-ljpeg", "condition": "!config.msvc" }
@@ -172,7 +287,10 @@
},
"libpng": {
"label": "libpng",
- "test": "unix/libpng",
+ "test": {
+ "include": "png.h",
+ "main": "(void) png_create_read_struct(PNG_LIBPNG_VER_STRING,0,0,0);"
+ },
"sources": [
{ "type": "pkgConfig", "args": "libpng" },
{ "libs": "-llibpng", "condition": "config.msvc" },
@@ -184,21 +302,50 @@
},
"mirclient": {
"label": "Mir client libraries",
- "test": "qpa/mirclient",
+ "test": {
+ "include": [ "mir_toolkit/mir_client_library.h", "ubuntu/application/lifecycle_delegate.h", "EGL/egl.h" ],
+ "tail": "static void surfaceCreateCallback(MirSurface*, void*) {}",
+ "main": [
+ "u_application_lifecycle_delegate_new();",
+ "mir_surface_create(0, surfaceCreateCallback, 0);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "egl mirclient ubuntu-platform-api libcontent-hub >= 0.2.0" }
]
},
"mtdev": {
"label": "mtdev",
- "test": "unix/mtdev",
+ "test": {
+ "include": "mtdev.h",
+ "main": [
+ "mtdev m;",
+ "mtdev_open(&m, 0);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "mtdev" }
]
},
"opengl": {
"label": "Desktop OpenGL",
- "test": "unix/opengldesktop",
+ "test": {
+ "head": [
+ "#ifdef __APPLE__",
+ "# include <OpenGL/gl.h>",
+ "#else",
+ "# define GL_GLEXT_PROTOTYPES",
+ "# include <GL/gl.h>",
+ "#endif"
+ ],
+ "main": [
+ "glBegin(GL_TRIANGLES);",
+ " glVertex2f(20.0f, 10.0f);",
+ " glVertex2f(10.0f, 30.0f);",
+ " glVertex2f(20.0f, 50.0f);",
+ "glEnd();"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "gl", "condition": "!config.darwin" },
{ "type": "makeSpec", "spec": "OPENGL" }
@@ -206,7 +353,20 @@
},
"opengl_es2": {
"label": "OpenGL ES 2.0",
- "test": "unix/opengles2",
+ "test": {
+ "head": [
+ "#ifdef __APPLE__",
+ "# include <OpenGLES/ES2/gl.h>",
+ "#else",
+ "# define GL_GLEXT_PROTOTYPES",
+ "# include <GLES2/gl2.h>",
+ "#endif"
+ ],
+ "main": [
+ "glUniform1f(1, GLfloat(1.0));",
+ "glClear(GL_COLOR_BUFFER_BIT);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "glesv2", "condition": "!config.darwin" },
{ "type": "makeSpec", "spec": "OPENGL_ES2" }
@@ -214,7 +374,10 @@
},
"openvg": {
"label": "OpenVG",
- "test": "unix/openvg",
+ "test": {
+ "include": "VG/openvg.h",
+ "main": "VGint i = 2; vgFlush();"
+ },
"sources": [
{ "type": "pkgConfig", "args": "vg" },
{ "type": "makeSpec", "spec": "OPENVG" }
@@ -222,14 +385,20 @@
},
"tslib": {
"label": "tslib",
- "test": "unix/tslib",
+ "test": {
+ "include": "tslib.h",
+ "main": "ts_open(\"foo\", 0);"
+ },
"sources": [
"-lts"
]
},
"wayland_server": {
"label": "Wayland Server",
- "test": "qpa/wayland-server",
+ "test": {
+ "include": "wayland-server.h",
+ "main": "wl_display_create();"
+ },
"sources": [
{ "type": "pkgConfig", "args": "wayland-server" }
]
@@ -242,7 +411,15 @@
},
"xcb": {
"label": "XCB >= 1.5 (core)",
- "test": "qpa/xcb",
+ "test": {
+ "include": "xcb/xcb.h",
+ "main": [
+ "int primaryScreen = 0;",
+ "(void)xcb_connect(\"\", &primaryScreen);",
+ "// This won't compile unless libxcb >= 1.5 which defines XCB_ATOM_PRIMARY.",
+ "int xcbAtomPrimary = XCB_ATOM_PRIMARY;"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "xcb >= 1.5" },
"-lxcb"
@@ -250,7 +427,27 @@
},
"xcb_syslibs": {
"label": "XCB (extensions)",
- "test": "qpa/xcb-syslibs",
+ "test": {
+ "include": [
+ "xcb/xcb.h",
+ "xcb/xfixes.h",
+ "xcb/xcb_image.h",
+ "xcb/xcb_keysyms.h",
+ "xcb/sync.h",
+ "xcb/randr.h",
+ "xcb/shm.h"
+ ],
+ "tail": [
+ "// This workaround can be removed for xcb-icccm > 3.8",
+ "#define class class_name",
+ "#include <xcb/xcb_icccm.h>",
+ "#undef class"
+ ],
+ "main": [
+ "int primaryScreen = 0;",
+ "(void) xcb_connect(\"\", &primaryScreen);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig",
"args": "xcb xcb-shm xcb-sync xcb-xfixes xcb-randr xcb-image xcb-keysyms xcb-icccm xcb-shape" },
@@ -259,7 +456,13 @@
},
"xcb_xlib": {
"label": "XCB Xlib",
- "test": "qpa/xcb-xlib",
+ "test": {
+ "include": [ "xcb/xcb.h", "X11/Xlib.h", "X11/Xlib-xcb.h" ],
+ "main": [
+ "Display *dpy = XOpenDisplay(\"\");",
+ "(void) XGetXCBConnection(dpy);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "x11-xcb x11 xcb" },
"-lxcb -lX11 -lX11-xcb"
@@ -267,7 +470,18 @@
},
"xcb_xkb": {
"label": "XCB XKB >= 1.10",
- "test": "qpa/xcb-xkb",
+ "test": {
+ "head": [
+ "// xkb.h is using a variable called 'explicit', which is a reserved keyword in C++",
+ "#define explicit dont_use_cxx_explicit"
+ ],
+ "include": "xcb/xkb.h",
+ "tail": "#undef explicit",
+ "main": [
+ "// This takes more arguments in xcb-xkb < 1.10.",
+ "xcb_xkb_get_kbd_by_name_unchecked(NULL, 0, 0, 0, 0);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "xcb-xkb >= 1.10 xcb" },
"-lxcb-xkb -lxcb"
@@ -275,7 +489,30 @@
},
"xcb_render": {
"label": "XCB XRender",
- "test": "qpa/xcb-render",
+ "test": {
+ "include": [ "xcb/xcb.h", "xcb/render.h" ],
+ "tail": [
+ "// 'template' is used as a function argument name in xcb_renderutil.h",
+ "#define template template_param",
+ "// extern \"C\" is missing, too",
+ "extern \"C\" {",
+ "#include <xcb/xcb_renderutil.h>",
+ "}",
+ "#undef template"
+ ],
+ "main": [
+ "int primaryScreen = 0;",
+ "xcb_generic_error_t *error = 0;",
+ "xcb_connection_t *connection = xcb_connect(\"\", &primaryScreen);",
+ "xcb_render_query_pict_formats_cookie_t formatsCookie =",
+ " xcb_render_query_pict_formats(connection);",
+ "xcb_render_query_pict_formats_reply_t *formatsReply =",
+ " xcb_render_query_pict_formats_reply(",
+ " connection, formatsCookie, &error);",
+ "xcb_render_util_find_standard_format(",
+ " formatsReply, XCB_PICT_STANDARD_ARGB_32);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "xcb-renderutil xcb-render xcb" },
"-lxcb-render-util -lxcb-render -lxcb"
@@ -283,7 +520,17 @@
},
"xcb_glx": {
"label": "XCB GLX",
- "test": "qpa/xcb-glx",
+ "test": {
+ "include": [ "xcb/xcb.h", "xcb/glx.h" ],
+ "main": [
+ "int primaryScreen = 0;",
+ "xcb_connection_t *connection = xcb_connect(\"\", &primaryScreen);",
+ "xcb_generic_error_t *error = 0;",
+ "xcb_glx_query_version_cookie_t xglx_query_cookie = xcb_glx_query_version(",
+ " connection, XCB_GLX_MAJOR_VERSION, XCB_GLX_MINOR_VERSION);",
+ "xcb_glx_query_version_reply(connection, xglx_query_cookie, &error);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "xcb-glx xcb" },
"-lxcb-glx -lxcb"
@@ -291,7 +538,28 @@
},
"xinput2": {
"label": "Xinput2",
- "test": "x11/xinput2",
+ "test": {
+ "include": [ "X11/Xlib.h", "X11/extensions/XInput2.h", "X11/extensions/Xge.h" ],
+ "tail": [
+ "#ifndef XInput_2_0",
+ "# error Missing XInput_2_0 #define",
+ "#endif"
+ ],
+ "main": [
+ "// need XGenericEventCookie for XInput2 to work",
+ "Display *dpy = 0;",
+ "XEvent xevent;",
+ "XIEvent *xievent = 0;",
+ "XIDeviceEvent *xideviceevent = 0;",
+ "XIHierarchyEvent *xihierarchyevent = 0;",
+ "int deviceid = 0;",
+ "int len = 0;",
+ "(void) XGetEventData(dpy, &xevent.xcookie);",
+ "XFreeEventData(dpy, &xevent.xcookie);",
+ "(void) XIListProperties(dpy, deviceid, &len);"
+ ],
+ "qmake": "CONFIG += x11"
+ },
"sources": [
{ "type": "pkgConfig", "args": "xi" },
"-lXi"
@@ -300,7 +568,10 @@
"xkbcommon": {
"label": "xkbcommon",
"export": "xkbcommon_evdev",
- "test": "unix/xkbcommon",
+ "test": {
+ "include": [ "xkbcommon/xkbcommon.h", "xkbcommon/xkbcommon-keysyms.h", "xkbcommon/xkbcommon-names.h" ],
+ "main": "xkb_context_new(XKB_CONTEXT_NO_FLAGS);"
+ },
"sources": [
{ "type": "pkgConfig", "args": "xkbcommon" }
]
@@ -323,7 +594,15 @@
"directwrite2": {
"label": "DirectWrite 2",
"type": "compile",
- "test": "win/directwrite2",
+ "test": {
+ "include": [ "dwrite_2.h", "d2d1.h" ],
+ "main": [
+ "IUnknown *factory = 0;",
+ "(void)(size_t(DWRITE_E_NOCOLOR) + sizeof(IDWriteFontFace2));",
+ "DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory2),",
+ " &factory);"
+ ]
+ },
"use": "directwrite"
},
"directx": {
@@ -338,70 +617,180 @@
"egl-x11": {
"label": "EGL on X11",
"type": "compile",
- "test": "qpa/egl-x11",
+ "test": {
+ "head": [
+ "// Check if EGL is compatible with X. Some EGL implementations, typically on",
+ "// embedded devices, are not intended to be used together with X. EGL support",
+ "// has to be disabled in plugins like xcb in this case since the native display,",
+ "// window and pixmap types will be different than what an X-based platform",
+ "// plugin would expect."
+ ],
+ "include": [ "EGL/egl.h", "xcb/xcb.h", "X11/Xlib.h", "X11/Xlib-xcb.h" ],
+ "main": [
+ "Display *dpy = EGL_DEFAULT_DISPLAY;",
+ "EGLNativeDisplayType egldpy = XOpenDisplay(\"\");",
+ "dpy = egldpy;",
+ "EGLNativeWindowType w = XCreateWindow(dpy, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);",
+ "XDestroyWindow(dpy, w);",
+ "XCloseDisplay(dpy);"
+ ]
+ },
"use": "egl xcb_xlib"
},
"egl-brcm": {
"label": "Broadcom EGL (Raspberry Pi)",
"type": "compile",
- "test": "qpa/eglfs-brcm",
+ "test": {
+ "include": [ "EGL/egl.h", "bcm_host.h" ],
+ "main": "vc_dispmanx_display_open(0);"
+ },
"use": "egl bcm_host"
},
"egl-egldevice": {
"label": "EGLDevice",
"type": "compile",
- "test": "qpa/eglfs-egldevice",
+ "test": {
+ "include": [ "EGL/egl.h", "EGL/eglext.h" ],
+ "main": [
+ "EGLDeviceEXT device = 0;",
+ "EGLStreamKHR stream = 0;",
+ "EGLOutputLayerEXT layer = 0;",
+ "(void) EGL_DRM_CRTC_EXT;"
+ ]
+ },
"use": "egl"
},
"egl-mali": {
"label": "Mali EGL",
"type": "compile",
- "test": "qpa/eglfs-mali",
+ "test": {
+ "include": [ "EGL/fbdev_window.h", "EGL/egl.h", "GLES2/gl2.h" ],
+ "main": "fbdev_window *w = 0;"
+ },
"use": "egl"
},
"egl-mali-2": {
"label": "Mali 2 EGL",
"type": "compile",
- "test": "qpa/eglfs-mali-2",
+ "test": {
+ "include": [ "EGL/egl.h", "GLES2/gl2.h" ],
+ "main": "mali_native_window *w = 0;"
+ },
"use": "egl"
},
"egl-viv": {
"label": "i.Mx6 EGL",
"type": "compile",
- "test": "qpa/eglfs-viv",
+ "test": {
+ "include": [ "EGL/egl.h", "EGL/eglvivante.h" ],
+ "main": [
+ "#ifdef __INTEGRITY",
+ "fbGetDisplay();",
+ "#else",
+ "// Do not rely on fbGetDisplay(), since the signature has changed over time.",
+ "// Stick to fbGetDisplayByIndex().",
+ "fbGetDisplayByIndex(0);",
+ "#endif"
+ ],
+ "qmake": [
+ "DEFINES += EGL_API_FB=1",
+ "!integrity: DEFINES += LINUX=1"
+ ]
+ },
"use": "egl"
},
"evdev": {
"label": "evdev",
"type": "compile",
- "test": "unix/evdev"
+ "test": {
+ "head": [
+ "#if defined(__FreeBSD__)",
+ "# include <dev/evdev/input.h>",
+ "#else",
+ "# include <linux/input.h>",
+ "# include <linux/kd.h>",
+ "#endif",
+ "enum {",
+ " e1 = ABS_PRESSURE,",
+ " e2 = ABS_X,",
+ " e3 = REL_X,",
+ " e4 = SYN_REPORT,",
+ "};"
+ ],
+ "main": [
+ "input_event buf[32];",
+ "(void) buf;"
+ ]
+ }
},
"integrityfb": {
"label": "INTEGRITY framebuffer",
"type": "compile",
- "test": "qpa/integrityfb"
+ "test": {
+ "include": "device/fbdriver.h",
+ "main": "FBDriver *driver = 0;"
+ }
},
"libinput_axis_api": {
"label": "axis API in libinput",
"type": "compile",
- "test": "unix/libinput_axis_api",
+ "test": {
+ "include": "libinput.h",
+ "main": "libinput_event_pointer_has_axis(nullptr, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL);"
+ },
"use": "libinput"
},
"linuxfb": {
"label": "LinuxFB",
"type": "compile",
- "test": "qpa/linuxfb"
+ "test": {
+ "include": [ "linux/fb.h", "sys/kd.h", "sys/ioctl.h" ],
+ "main": [
+ "fb_fix_screeninfo finfo;",
+ "fb_var_screeninfo vinfo;",
+ "int fd = 3;",
+ "ioctl(fd, FBIOGET_FSCREENINFO, &finfo);",
+ "ioctl(fd, FBIOGET_VSCREENINFO, &vinfo);"
+ ]
+ }
},
"opengles3": {
"label": "OpenGL ES 3.0",
"type": "compile",
- "test": "unix/opengles3",
+ "test": {
+ "head": [
+ "#ifdef __APPLE__",
+ "# include <OpenGLES/ES3/gl.h>",
+ "#else",
+ "# define GL_GLEXT_PROTOTYPES",
+ "# include <GLES3/gl3.h>",
+ "#endif"
+ ],
+ "main": [
+ "static GLfloat f[6];",
+ "glGetStringi(GL_EXTENSIONS, 0);",
+ "glReadBuffer(GL_COLOR_ATTACHMENT1);",
+ "glUniformMatrix2x3fv(0, 0, GL_FALSE, f);",
+ "glMapBufferRange(GL_ARRAY_BUFFER, 0, 0, GL_MAP_READ_BIT);"
+ ]
+ },
+ "comment": [
+ "The library is expected to be the same as in ES 2.0 (libGLESv2).",
+ "The difference is the header and the presence of the functions in",
+ "the library."
+ ],
"use": "opengl_es2"
},
"opengles31": {
"label": "OpenGL ES 3.1",
"type": "compile",
- "test": "unix/opengles31",
+ "test": {
+ "include": "GLES3/gl31.h",
+ "main": [
+ "glDispatchCompute(1, 1, 1);",
+ "glProgramUniform1i(0, 0, 0);"
+ ]
+ },
"use": "opengl_es2"
},
"qpa_default_platform": {
@@ -427,7 +816,14 @@
"xlib": {
"label": "XLib",
"type": "compile",
- "test": "x11/xlib"
+ "test": {
+ "include": "X11/Xlib.h",
+ "main": [
+ "Display *d = XOpenDisplay(NULL);",
+ "XCloseDisplay(d);"
+ ],
+ "qmake": "CONFIG += x11"
+ }
}
},
diff --git a/src/network/configure.json b/src/network/configure.json
index d35dda99bc..c77004d4ba 100644
--- a/src/network/configure.json
+++ b/src/network/configure.json
@@ -38,7 +38,14 @@
},
"libproxy": {
"label": "libproxy",
- "test": "common/libproxy",
+ "test": {
+ "include": [ "proxy.h" ],
+ "main": [
+ "pxProxyFactory *factory = px_proxy_factory_new();",
+ "px_proxy_factory_get_proxies(factory, \"http://qt-project.org\");",
+ "px_proxy_factory_free(factory);"
+ ]
+ },
"sources": [
"-lproxy"
]
@@ -85,25 +92,66 @@
"getaddrinfo": {
"label": "getaddrinfo()",
"type": "compile",
- "test": "unix/getaddrinfo",
+ "test": {
+ "head": [
+ "#include <stdio.h>",
+ "#include <stdlib.h>",
+ "#ifdef __MINGW32__",
+ "# include <winsock2.h>",
+ "# include <ws2tcpip.h>",
+ "#else",
+ "# include <sys/types.h>",
+ "# include <sys/socket.h>",
+ "# include <netdb.h>",
+ "#endif"
+ ],
+ "main": [
+ "addrinfo *res = 0;",
+ "(void) getaddrinfo(\"foo\", 0, 0, &res);",
+ "freeaddrinfo(res);",
+ "gai_strerror(0);"
+ ]
+ },
"use": "network"
},
"getifaddrs": {
"label": "getifaddrs()",
"type": "compile",
- "test": "unix/getifaddrs",
+ "test": {
+ "include": [ "sys/types.h", "sys/socket.h", "net/if.h", "ifaddrs.h" ],
+ "main": [
+ "ifaddrs *list;",
+ "getifaddrs(&list);",
+ "freeifaddrs(list);"
+ ]
+ },
"use": "network"
},
"ipv6ifname": {
"label": "IPv6 ifname",
"type": "compile",
- "test": "unix/ipv6ifname",
+ "test": {
+ "include": [ "sys/types.h", "sys/socket.h", "net/if.h" ],
+ "main": [
+ "char buf[IFNAMSIZ];",
+ "if_nametoindex(\"eth0\");",
+ "if_indextoname(1, buf);"
+ ]
+ },
"use": "network"
},
"sctp": {
"label": "SCTP support",
"type": "compile",
- "test": "unix/sctp",
+ "test": {
+ "include": [ "sys/types.h", "sys/socket.h", "netinet/in.h", "netinet/sctp.h" ],
+ "main": [
+ "sctp_initmsg sctpInitMsg;",
+ "socklen_t sctpInitMsgSize = sizeof(sctpInitMsg);",
+ "(void) socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP);",
+ "(void) getsockopt(-1, SOL_SCTP, SCTP_INITMSG, &sctpInitMsg, &sctpInitMsgSize);"
+ ]
+ },
"use": "network"
}
},
diff --git a/src/plugins/sqldrivers/configure.json b/src/plugins/sqldrivers/configure.json
index 5603ceb37b..234f880579 100644
--- a/src/plugins/sqldrivers/configure.json
+++ b/src/plugins/sqldrivers/configure.json
@@ -39,7 +39,9 @@
"libraries": {
"db2": {
"label": "DB2 (IBM)",
- "test": "unix/db2",
+ "test": {
+ "include": [ "sqlcli.h", "sqlcli1.h" ]
+ },
"sources": [
{ "libs": "-ldb2cli", "condition": "config.win32" },
{ "libs": "-ldb2", "condition": "!config.win32" }
@@ -47,7 +49,9 @@
},
"ibase": {
"label": "InterBase",
- "test": "unix/ibase",
+ "test": {
+ "include": "ibase.h"
+ },
"sources": [
{ "libs": "-lgds32_ms", "condition": "config.win32" },
{ "libs": "-lgds", "condition": "!config.win32" }
@@ -55,7 +59,15 @@
},
"mysql": {
"label": "MySQL",
- "test": "unix/mysql",
+ "test": {
+ "head": [
+ "#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(WIN64) || defined(_WIN64) || defined(__WIN64__)",
+ "# include <windows.h>",
+ "#endif"
+ ],
+ "include": "mysql.h",
+ "main": "mysql_get_client_version();"
+ },
"sources": [
{ "type": "mysqlConfig", "query": "--libs_r", "cleanlibs": true },
{ "type": "mysqlConfig", "query": "--libs", "cleanlibs": true },
@@ -68,7 +80,13 @@
},
"psql": {
"label": "PostgreSQL",
- "test": "unix/psql",
+ "test": {
+ "include": "libpq-fe.h",
+ "main": [
+ "PQescapeBytea(0, 0, 0);",
+ "PQunescapeBytea(0, 0);"
+ ]
+ },
"sources": [
{ "type": "pkgConfig", "args": "libpq" },
{ "type": "psqlConfig" },
@@ -78,7 +96,9 @@
},
"tds": {
"label": "TDS (Sybase)",
- "test": "unix/tds",
+ "test": {
+ "include": [ "sybfront.h", "sybdb.h" ]
+ },
"sources": [
{ "type": "sybaseEnv", "libs": "-lNTWDBLIB", "condition": "config.win32" },
{ "type": "sybaseEnv", "libs": "-lsybdb", "condition": "!config.win32" }
@@ -86,7 +106,9 @@
},
"oci": {
"label": "OCI (Oracle)",
- "test": "unix/oci",
+ "test": {
+ "include": "oci.h"
+ },
"sources": [
{ "libs": "-loci", "condition": "config.win32" },
{ "libs": "-lclntsh", "condition": "!config.win32" }
@@ -94,7 +116,18 @@
},
"odbc": {
"label": "ODBC",
- "test": "unix/odbc",
+ "test": {
+ "head": [
+ "#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(WIN64) || defined(_WIN64) || defined(__WIN64__)",
+ "# include <windows.h>",
+ "#endif"
+ ],
+ "include": [ "sql.h", "sqlext.h" ],
+ "main": [
+ "SQLHANDLE env;",
+ "SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);"
+ ]
+ },
"sources": [
{ "libs": "-lodbc32", "condition": "config.win32" },
{ "libs": "-liodbc", "condition": "config.darwin" },
@@ -103,7 +136,9 @@
},
"sqlite2": {
"label": "SQLite (version 2)",
- "test": "unix/sqlite2",
+ "test": {
+ "include": "sqlite.h"
+ },
"sources": [
"-lsqlite"
]
@@ -111,7 +146,10 @@
"sqlite3": {
"label": "SQLite (version 3)",
"export": "sqlite",
- "test": "unix/sqlite",
+ "test": {
+ "include": "sqlite3.h",
+ "main": "sqlite3_open_v2(0, 0, 0, 0);"
+ },
"sources": [
{ "type": "pkgConfig", "args": "sqlite3" },
"-lsqlite3"
diff --git a/src/printsupport/configure.json b/src/printsupport/configure.json
index ad38281145..e8cec22c09 100644
--- a/src/printsupport/configure.json
+++ b/src/printsupport/configure.json
@@ -16,7 +16,10 @@
"libraries": {
"cups": {
"label": "CUPS",
- "test": "unix/cups",
+ "test": {
+ "include": "cups/cups.h",
+ "main": "cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL); // CUPS 1.4 test"
+ },
"sources": [
"-lcups"
]