{
    "module": "gui",
    "depends": [
        "core-private",
        "network"
    ],
    "testDir": "../../config.tests",

    "commandline": {
        "options": {
            "accessibility": "boolean",
            "angle": "boolean",
            "combined-angle-lib": "boolean",
            "direct2d": "boolean",
            "directfb": "boolean",
            "directwrite": "boolean",
            "egl": "boolean",
            "eglfs": "boolean",
            "evdev": "boolean",
            "fontconfig": "boolean",
            "freetype": { "type": "enum", "values": [ "no", "qt", "system" ] },
            "gbm": "boolean",
            "gif": "boolean",
            "harfbuzz": { "type": "enum", "values": [ "no", "qt", "system" ] },
            "ico": "boolean",
            "imf": { "type": "boolean", "name": "qqnx_imf" },
            "kms": "boolean",
            "lgmon": "boolean",
            "libinput": "boolean",
            "libjpeg": { "type": "enum", "values": [ "no", "qt", "system" ] },
            "libmd4c": { "type": "enum", "values": [ "no", "qt", "system" ] },
            "libpng": { "type": "enum", "values": [ "no", "qt", "system" ] },
            "linuxfb": "boolean",
            "mtdev": "boolean",
            "opengl": { "type": "optionalString", "values": [ "no", "yes", "desktop", "es2", "dynamic" ] },
            "opengl-es-2": { "type": "void", "name": "opengl", "value": "es2" },
            "opengles3": "boolean",
            "openvg": "boolean",
            "qpa": { "type": "string", "name": "qpa_default_platform" },
            "qpa-platform-guard": "boolean",
            "sm": { "type": "boolean", "name": "sessionmanager" },
            "tslib": "boolean",
            "vulkan": "boolean",
            "xcb": "boolean",
            "bundled-xcb-xinput": "boolean",
            "xcb-native-painting": "boolean",
            "xcb-xlib": "boolean",
            "xkbcommon": "boolean"
        }
    },

    "libraries": {
        "atspi": {
            "label": "atspi",
            "sources": [
                { "type": "pkgConfig", "args": "atspi-2" }
            ]
        },
        "bcm_host": {
            "export": "",
            "headers": ["bcm_host.h"],
            "sources": [
                { "type": "pkgConfig", "args": "bcm_host" },
                { "type": "makeSpec", "spec": "BCM_HOST" }
            ]
        },
        "dxguid": {
            "label": "DirectX GUID",
            "sources": [
                "-ldxguid"
            ]
        },
        "dxgi": {
            "label": "DirectX GI",
            "headers": "dxgi.h",
            "sources": [
                "-ldxgi"
            ]
        },
        "dxgi1_2": {
            "label": "DirectX GI 1.2",
            "test": {
                "main": [
                    "// fails with mingw-w64 5.4.0 - declaration is missing from header",
                    "IDXGISurface1 *surface;",
                    "(void) surface;"
                ]
            },
            "headers": "dxgi1_2.h",
            "sources": [
                "-ldxgi"
            ]
        },
        "d3d9": {
            "label": "Direct3D 9",
            "headers": "d3d9.h",
            "sources": [
                "-ld3d9"
            ]
        },
        "d3d11": {
            "label": "Direct3D 11",
            "headers": "d3d11.h",
            "sources": [
                "-ld3d11"
            ]
        },
        "d3d11_1": {
            "label": "Direct3D 11.1",
            "headers": "d3d11_1.h",
            "sources": [
                "-ld3d11"
            ]
        },
        "d3dcompiler": {
            "label": "Direct3D Shader Compiler Library",
            "headers": "d3dcompiler.h",
            "sources": [
                "-ld3dcompiler"
            ]
        },
        "d2d1": {
            "label": "Direct2D 1",
            "headers": [ "d2d1.h", "d2d1helper.h" ],
            "sources": [
                "-ld2d1"
            ]
        },
        "d2d1_1": {
            "label": "Direct2D 1.1",
            "test": {
                "main": [
                    "ID2D1Factory1 *d2dFactory;",
                    "D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &d2dFactory);"
                ]
            },
            "headers": [ "d2d1_1.h", "d2d1_1helper.h" ],
            "sources": [
                "-ld2d1"
            ]
        },
        "directfb": {
            "label": "DirectFB",
            "test": {
                "tail": [
                    "#ifdef __typeof__",
                    "#  error DirectFB headers are unclean and cannot compile",
                    "#endif"
                ]
            },
            "headers": "directfb.h",
            "sources": [
                { "type": "pkgConfig", "args": "directfb" }
            ]
        },
        "dwrite": {
            "label": "DirectWrite",
            "test": {
                "main": [
                    "IDWriteFactory *factory = 0;",
                    "DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory),",
                    "                    (IUnknown **)(&factory));"
                ]
            },
            "headers": "dwrite.h",
            "sources": [
                "-ldwrite"
            ]
        },
        "dwrite_1": {
            "label": "DirectWrite 1",
            "headers": "dwrite_1.h",
            "sources": [
                "-ldwrite"
            ]
        },
        "dwrite_2": {
            "label": "DirectWrite 2",
            "test": {
                "main": [
                    "IUnknown *factory = 0;",
                    "(void)(size_t(DWRITE_E_NOCOLOR) + sizeof(IDWriteFontFace2));",
                    "DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory2),",
                    "                    &factory);"
                ]
            },
            "headers": "dwrite_2.h",
            "sources": [
                "-ldwrite"
            ]
        },
        "drm": {
            "label": "KMS",
            "test": {
                "head": [
                    "#include <stdlib.h>",
                    "#include <stdint.h>",
                    "extern \"C\" {"
                ],
                "tail": [
                    "}"
                ],
                "main": "(void) drmModeGetCrtc(0, 0);"
            },
            "headers": [ "xf86drmMode.h", "xf86drm.h" ],
            "sources": [
                { "type": "pkgConfig", "args": "libdrm" },
                { "libs": "-ldrm", "condition": "!config.integrity" },
                { "libs": "-ldrm-nvdc -lposix -livfs -lnvll -lnvdc -lnvrm -lnvrm_graphics -lnvos -lnvtegrahv", "condition": "config.integrity" }
            ]
        },
        "egl": {
            "label": "EGL",
            "test": {
                "main": [
                    "EGLint x = 0; EGLDisplay dpy = 0; EGLContext ctx = 0;",
                    "eglDestroyContext(dpy, ctx);"
                ]
            },
            "headers": "EGL/egl.h",
            "sources": [
                { "type": "pkgConfig", "args": "egl" },
                { "type": "makeSpec", "spec": "EGL" }
            ]
        },
        "freetype": {
            "label": "FreeType",
            "test": {
                "tail": [
                    "#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;"
                ]
            },
            "headers": "ft2build.h",
            "sources": [
                { "type": "pkgConfig", "args": "freetype2" },
                { "type": "freetype", "libs": "-lfreetype", "condition": "!config.wasm" },
                { "libs": "-s USE_FREETYPE=1", "condition": "config.wasm" },
                { "libs": "-lfreetype" }
            ],
            "use": [
                { "lib": "zlib", "condition": "features.system-zlib" }
            ]
        },
        "fontconfig": {
            "label": "Fontconfig",
            "test": {
                "tail": [
                    "#ifndef FC_RGBA_UNKNOWN",
                    "#  error This version of fontconfig is too old, it is missing the FC_RGBA_UNKNOWN define",
                    "#endif"
                ],
                "main": [
                    "FcPattern *pattern = 0;"
                ]
            },
            "headers": "fontconfig/fontconfig.h",
            "sources": [
                { "type": "pkgConfig", "args": "fontconfig" },
                { "type": "freetype", "libs": "-lfontconfig" }
            ],
            "use": "freetype"
        },
        "gbm": {
            "label": "GBM",
            "test": {
                "head": [
                    "#include <stdlib.h>",
                    "#include <stdint.h>",
                    "extern \"C\" {"
                ],
                "tail": [
                    "}"
                ],
                "main": "gbm_surface *surface = 0;"
            },
            "headers": "gbm.h",
            "sources": [
                { "type": "pkgConfig", "args": "gbm" }
            ]
        },
        "harfbuzz": {
            "label": "HarfBuzz",
            "test": {
                "tail": [
                    "#if !HB_VERSION_ATLEAST(1, 6, 0)",
                    "#  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);"
                ]
            },
            "headers": "harfbuzz/hb.h",
            "sources": [
                "-lharfbuzz"
            ]
        },
        "imf": {
            "label": "IMF",
            "export": "",
            "test": {
                "main": "imf_client_init();"
            },
            "headers": "imf/imf_client.h",
            "sources": [
                "-linput_client"
            ]
        },
        "lgmon": {
            "label": "lgmon",
            "test": {
                "main": "lgmon_supported(getpid());"
            },
            "headers": "lgmon.h",
            "sources": [
                "-llgmon"
            ]
        },
        "libinput": {
            "label": "libinput",
            "test": {
                "main": "libinput_udev_create_context(NULL, NULL, NULL);"
            },
            "headers": "libinput.h",
            "sources": [
                { "type": "pkgConfig", "args": "libinput" }
            ]
        },
        "integrityhid": {
            "label": "integrityhid",
            "test": {
                "head": [
                    "#include <stdlib.h>",
                    "#include <stdint.h>"
                ],
                "main": [
                    "HIDDriver *driver;",
                    "uintptr_t devicecontext;",
                    "uint32_t device_id;",
                    "gh_hid_enum_devices(driver, &device_id, &devicecontext);"
                ]
            },
            "headers": "device/hiddriver.h",
            "sources": [
                { "libs": "-lhiddev -lusbhid -lusb" }
            ]
        },
        "libjpeg": {
            "label": "libjpeg",
            "test": {
                "head": [
                    "#include <sys/types.h>",
                    "#include <stdio.h>",
                    "extern \"C\" {"
                ],
                "tail": [
                    "}",
                    "",
                    "j_compress_ptr cinfo;"
                ],
                "main": "jpeg_create_compress(cinfo);"
            },
            "headers": "jpeglib.h",
            "sources": [
                { "type": "pkgConfig", "args": "libjpeg" },
                { "libs": "-llibjpeg", "condition": "config.msvc" },
                "-ljpeg"
            ]
        },
        "libmd4c": {
            "label": "libmd4c",
            "test": {
                "main": "md_parse(\"hello\", 5, nullptr, nullptr);"
            },
            "headers": "md4c.h",
            "sources": [
                { "type": "pkgConfig", "args": "md4c" },
                { "libs": "-lmd4c" }
            ]
        },
        "libpng": {
            "label": "libpng",
            "test": {
                "main": "(void) png_create_read_struct(PNG_LIBPNG_VER_STRING,0,0,0);"
            },
            "headers": "png.h",
            "sources": [
                { "type": "pkgConfig", "args": "libpng" },
                { "libs": "-llibpng16", "condition": "config.msvc" },
                { "libs": "-llibpng", "condition": "config.msvc" },
                { "libs": "-lpng16", "condition": "!config.msvc" },
                { "libs": "-lpng", "condition": "!config.msvc" },
                { "libs": "-s USE_LIBPNG=1", "condition": "config.wasm" }
            ],
            "use": [
                { "lib": "zlib", "condition": "features.system-zlib" }
            ]
        },
        "mtdev": {
            "label": "mtdev",
            "test": {
                "main": [
                    "mtdev m;",
                    "mtdev_open(&m, 0);"
                ]
            },
            "headers": "mtdev.h",
            "sources": [
                { "type": "pkgConfig", "args": "mtdev" }
            ]
        },
        "opengl": {
            "label": "Desktop OpenGL",
            "test": {
                "head": [
                    "#ifdef __APPLE__",
                    "#  include <OpenGL/gl.h>",
                    "#else",
                    "#  define GL_GLEXT_PROTOTYPES",
                    "#endif"
                ],
                "main": [
                    "glBegin(GL_TRIANGLES);",
                    "    glVertex2f(20.0f, 10.0f);",
                    "    glVertex2f(10.0f, 30.0f);",
                    "    glVertex2f(20.0f, 50.0f);",
                    "glEnd();"
                ]
            },
            "headers": [
                {
                    "condition": "!config.darwin",
                    "headers": "GL/gl.h"
                }
            ],
            "sources": [
                { "type": "pkgConfig", "args": "gl", "condition": "!config.darwin" },
                { "type": "makeSpec", "spec": "OPENGL" }
            ]
        },
        "opengl_es2": {
            "label": "OpenGL ES 2.0",
            "test": {
                "head": [
                    "#ifdef __APPLE__",
                    "#  include <OpenGLES/ES2/gl.h>",
                    "#else",
                    "#  define GL_GLEXT_PROTOTYPES",
                    "#endif"
                ],
                "main": [
                    "glUniform1f(1, GLfloat(1.0));",
                    "glClear(GL_COLOR_BUFFER_BIT);"
                ]
            },
            "headers": [
                {
                    "condition": "!config.darwin",
                    "headers": "GLES2/gl2.h"
                }
            ],
            "sources": [
                { "type": "pkgConfig", "args": "glesv2", "condition": "!config.darwin" },
                { "type": "makeSpec", "spec": "OPENGL_ES2" }
            ]
        },
        "openvg": {
            "label": "OpenVG",
            "test": {
                "main": "VGint i = 2; vgFlush();"
            },
            "headers": "VG/openvg.h",
            "sources": [
                { "type": "pkgConfig", "args": "vg" },
                { "type": "makeSpec", "spec": "OPENVG" }
            ]
        },
        "tslib": {
            "label": "tslib",
            "test": {
                "main": "ts_setup(nullptr, 0);"
            },
            "headers": "tslib.h",
            "sources": [
                "-lts"
            ]
        },
        "v4l2": {
            "label": "V4L2",
            "test": {
                "head": [
                    "#include <cstddef>",
                    "extern \"C\" {"
                ],
                "tail": [
                    "}"
                ],
                "main": [
                    "v4l2_format fmt;",
                    "media_pad *pad = nullptr;",
                    "media_device *device = media_device_new(\"/dev/media\");",
                    "v4l2_subdev_set_format(nullptr, nullptr, 0, V4L2_SUBDEV_FORMAT_ACTIVE);"
                ]
            },
            "headers": [ "mediactl/mediactl.h", "mediactl/v4l2subdev.h" ],
            "sources": [
                { "type": "pkgConfig", "args": "libv4l2 libmediactl" },
                "-lmediactl -lv4l2 -lv4l2subdev"
            ]
        },
        "vulkan": {
            "label": "Vulkan",
            "test": {
                "comment": "Note: Qt does not rely on linking to a Vulkan library directly.",
                "tail": [
                    "// The pData parameter has changed from uint32_t* to void* at some point.",
                    "// Ensure the headers have the updated one to prevent compile errors later on.",
                    "PFN_vkCmdUpdateBuffer cmdUpdBuf;",
                    "void testUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData)",
                    "{",
                    "    cmdUpdBuf(commandBuffer, dstBuffer, dstOffset, dataSize, pData);",
                    "}"
                ],
                "main": [
                    "VkInstanceCreateInfo info;",
                    "testUpdateBuffer(0, 0, 0, 0, 0);"
                ]
            },
            "headers": "vulkan/vulkan.h",
            "sources": [
                { "type": "pkgConfig", "args": "vulkan" },
                { "type": "makeSpec", "spec": "VULKAN" }
            ]
        },
        "wayland_server": {
            "label": "Wayland Server",
            "test": {
                "main": "wl_display_create();"
            },
            "headers": "wayland-server.h",
            "sources": [
                { "type": "pkgConfig", "args": "wayland-server" }
            ]
        },
        "xlib": {
            "label": "XLib",
            "test": {
                "main": [
                    "Display *d = XOpenDisplay(NULL);",
                    "XCloseDisplay(d);"
                ]
            },
            "headers": "X11/Xlib.h",
            "sources": [
                { "type": "makeSpec", "spec": "X11" }
            ]
        },
        "x11sm": {
            "label": "X11 session management",
            "sources": [
                { "type": "pkgConfig", "args": "sm ice" }
            ]
        },
        "xcb": {
            "label": "XCB >= 1.11",
            "test": {
                "main": [
                    "int primaryScreen = 0;",
                    "(void)xcb_connect(\"\", &primaryScreen);",
                    "/* XCB_PACKED define was added in libxcb 1.11 */",
                    "#ifdef XCB_PACKED",
                    "    return 0;",
                    "#else",
                    "    return -1;",
                    "#endif"
                ]
            },
            "headers": "xcb/xcb.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb >= 1.11" },
                "-lxcb"
            ]
        },
        "xcb_icccm": {
            "label": "XCB ICCCM >= 0.3.9",
            "headers": "xcb/xcb_icccm.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-icccm >= 0.3.9" },
                "-lxcb-icccm"
            ],
            "use": "xcb"
        },
        "xcb_util": {
            "label": "XCB Util >= 0.3.9",
            "headers": "xcb/xcb_util.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-util >= 0.3.9" },
                "-lxcb-util"
            ],
            "use": "xcb"
        },
        "xcb_image": {
            "label": "XCB Image >= 0.3.9",
            "headers": "xcb/xcb_image.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-image >= 0.3.9" },
                "-lxcb-image"
            ],
            "use": "xcb_shm xcb_util xcb"
        },
        "xcb_keysyms": {
            "label": "XCB Keysyms >= 0.3.9",
            "headers": "xcb/xcb_keysyms.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-keysyms >= 0.3.9" },
                "-lxcb-keysyms"
            ],
            "use": "xcb"
        },
        "xcb_renderutil": {
            "label": "XCB Renderutil >= 0.3.9",
            "headers": "xcb/xcb_renderutil.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-renderutil >= 0.3.9" },
                "-lxcb-render-util"
            ],
            "use": "xcb xcb_render"
        },
        "xcb_randr": {
            "label": "XCB RandR",
            "headers": "xcb/randr.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-randr" },
                "-lxcb-randr"
            ],
            "use": "xcb"
        },
        "xcb_shape": {
            "label": "XCB Shape",
            "headers": "xcb/shape.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-shape" },
                "-lxcb-shape"
            ],
            "use": "xcb"
        },
        "xcb_shm": {
            "label": "XCB SHM",
            "headers": "xcb/shm.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-shm" },
                "-lxcb-shm"
            ],
            "use": "xcb"
        },
        "xcb_sync": {
            "label": "XCB Sync",
            "headers": "xcb/sync.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-sync" },
                "-lxcb-sync"
            ],
            "use": "xcb"
        },
        "xcb_xfixes": {
            "label": "XCB Xfixes",
            "headers": "xcb/xfixes.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-xfixes" },
                "-lxcb-xfixes"
            ],
            "use": "xcb"
        },
        "xcb_xinerama": {
            "label": "XCB Xinerama",
            "headers": "xcb/xinerama.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-xinerama" },
                "-lxcb-xinerama"
            ],
            "use": "xcb"
        },
        "xcb_xlib": {
            "label": "XCB Xlib",
            "test": {
                "main": "(void) XGetXCBConnection((Display *)0);"
            },
            "headers": "X11/Xlib-xcb.h",
            "sources": [
                { "type": "pkgConfig", "args": "x11-xcb" },
                "-lX11-xcb"
            ],
            "use": "xcb xlib"
        },
        "xcb_xkb": {
            "label": "XCB XKB",
            "headers": "xcb/xkb.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-xkb" },
                "-lxcb-xkb"
            ],
            "use": "xcb"
        },
        "xcb_render": {
            "label": "XCB XRender",
            "headers": "xcb/render.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-render" },
                "-lxcb-render"
            ],
            "use": "xcb"
        },
        "xcb_glx": {
            "label": "XCB GLX",
            "test": {
                "main": [
                    "xcb_connection_t *connection = 0;",
                    "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);"
                ]
            },
            "headers": "xcb/glx.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-glx" },
                "-lxcb-glx"
            ],
            "use": "xcb"
        },
        "xcb_xinput": {
            "label": "XCB XInput",
            "test": {
                "main": [
                    "xcb_connection_t *connection = 0;",
                    "xcb_generic_error_t *error = 0;",
                    "xcb_input_xi_query_version_cookie_t xinput_query_cookie = xcb_input_xi_query_version(",
                    "        connection, XCB_INPUT_MAJOR_VERSION, XCB_INPUT_MINOR_VERSION);",
                    "xcb_input_xi_query_version_reply(connection, xinput_query_cookie, &error);"
                ]
            },
            "headers": "xcb/xinput.h",
            "sources": [
                { "type": "pkgConfig", "args": "xcb-xinput >= 1.12" },
                "-lxcb-xinput"
            ],
            "use": "xcb"
        },
        "xkbcommon": {
            "label": "xkbcommon >= 0.5.0",
            "test": {
                "main": "xkb_context_new(XKB_CONTEXT_NO_FLAGS);"
            },
            "headers": [ "xkbcommon/xkbcommon.h" ],
            "sources": [
                { "type": "pkgConfig", "args": "xkbcommon >= 0.5.0" },
                "-lxkbcommon"
            ]
        },
        "xkbcommon_x11": {
            "label": "xkbcommon-x11",
            "test": {
                "main": "xkb_x11_setup_xkb_extension_flags flag = XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS;"
            },
            "headers": [ "xkbcommon/xkbcommon-x11.h" ],
            "sources": [
                { "type": "pkgConfig", "args": "xkbcommon-x11" },
                "-lxkbcommon -lxkbcommon-x11"
            ]
        },
        "xrender": {
            "label": "XRender for native painting",
            "test": {
                "tail": [
                    "#if RENDER_MAJOR == 0 && RENDER_MINOR < 5",
                    "#  error Required Xrender version 0.6 not found.",
                    "#endif"
                ],
                "main": "XRenderPictFormat *format = 0;"
            },
            "headers": "X11/extensions/Xrender.h",
            "sources": [
                "-lXrender"
            ],
            "use": "xlib"
        }
    },

    "tests": {
        "angle_d3d11_qdtd": {
            "label": "D3D11_QUERY_DATA_TIMESTAMP_DISJOINT",
            "type": "compile",
            "test": {
                "include": "d3d11.h",
                "main": [
                    "D3D11_QUERY_DATA_TIMESTAMP_DISJOINT qdtd;",
                    "(void) qdtd;"
                ]
            }
        },
        "fxc": {
            "label": "Direct3D Shader Compiler",
            "type": "fxc",
            "log": "value"
        },
        "drm_atomic": {
            "label": "DRM Atomic API",
            "type": "compile",
            "test": {
                "head": [
                    "#include <stdlib.h>",
                    "#include <stdint.h>",
                    "extern \"C\" {"
                ],
                "include": [
                    "xf86drmMode.h",
                    "xf86drm.h"
                ],
                "tail": [
                    "}"
                ],
                "main": "drmModeAtomicReq *request;"
            },
            "use": "drm"
        },
        "egl-x11": {
            "label": "EGL on X11",
            "type": "compile",
            "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", "X11/Xlib.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 xlib"
        },
        "egl-brcm": {
            "label": "Broadcom EGL (Raspberry Pi)",
            "type": "compile",
            "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": {
                "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": {
                "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": {
                "include": [ "EGL/egl.h", "GLES2/gl2.h" ],
                "main": "mali_native_window *w = 0;"
            },
            "use": "egl"
        },
        "egl-viv": {
            "label": "i.Mx6 EGL",
            "type": "compile",
            "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"
        },
        "egl-openwfd": {
            "label": "OpenWFD EGL",
            "type": "compile",
            "test": {
                "include": [ "wfd.h" ],
                "main": [
                    "wfdEnumerateDevices(nullptr, 0, nullptr);"
                ]
            },
            "use": "egl"
        },
        "egl-rcar": {
            "label": "RCAR EGL",
            "type": "compile",
            "test": {
                "include": [ "EGL/egl.h" ],
                "tail": [
                    "extern \"C\" {",
                    "extern unsigned long PVRGrfxServerInit(void);",
                    "}"
                ],
                "main": [
                    "PVRGrfxServerInit();"
                ]
            },
            "use": "egl opengl_es2"
        },
        "evdev": {
            "label": "evdev",
            "type": "compile",
            "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": {
                "include": "device/fbdriver.h",
                "main": "FBDriver *driver = 0;"
            }
        },
        "libinput_axis_api": {
            "label": "axis API in libinput",
            "type": "compile",
            "test": {
                "include": "libinput.h",
                "main": "libinput_event_pointer_has_axis(nullptr, LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL);"
            },
            "use": "libinput"
        },
        "linuxfb": {
            "label": "LinuxFB",
            "type": "compile",
            "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": {
                "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": {
                "include": "GLES3/gl31.h",
                "main": [
                    "glDispatchCompute(1, 1, 1);",
                    "glProgramUniform1i(0, 0, 0);"
                ]
            },
            "use": "opengl_es2"
        },
        "opengles32": {
            "label": "OpenGL ES 3.2",
            "type": "compile",
            "test": {
                "include": "GLES3/gl32.h",
                "main": "glFramebufferTexture(GL_TEXTURE_2D, GL_DEPTH_STENCIL_ATTACHMENT, 1, 0);"
            },
            "use": "opengl_es2"
        },
        "qpa_default_platform": {
            "label": "default QPA platform",
            "type": "qpaDefaultPlatform",
            "log": "value"
        },
        "xcb_syslibs": {
            "label": "XCB (extensions)",
            "type": "compile",
            "test": {
                "head": [
                    "// xkb.h is using a variable called 'explicit', which is a reserved keyword in C++",
                    "#define explicit dont_use_cxx_explicit"
                ],
                "tail": "#undef explicit",
                "include": [
                    "xcb/xcb.h",
                    "xcb/xcb_util.h",
                    "xcb/xcb_image.h",
                    "xcb/xcb_keysyms.h",
                    "xcb/randr.h",
                    "xcb/render.h",
                    "xcb/shape.h",
                    "xcb/shm.h",
                    "xcb/sync.h",
                    "xcb/xfixes.h",
                    "xcb/xinerama.h",
                    "xcb/xcb_icccm.h",
                    "xcb/xcb_renderutil.h",
                    "xcb/xkb.h"
                ],
                "main": [
                    "int primaryScreen = 0;",
                    "xcb_connection_t *c = xcb_connect(\"\", &primaryScreen);",

                    "/* RENDER */",
                    "xcb_generic_error_t *error = nullptr;",
                    "xcb_render_query_pict_formats_cookie_t formatsCookie =",
                    "    xcb_render_query_pict_formats(c);",
                    "xcb_render_query_pict_formats_reply_t *formatsReply =",
                    "    xcb_render_query_pict_formats_reply(c, formatsCookie, &error);",

                    "/* RENDERUTIL: xcb_renderutil.h include won't compile unless version >= 0.3.9 */",
                    "xcb_render_util_find_standard_format(nullptr, XCB_PICT_STANDARD_ARGB_32);",

                    "/* XKB: This takes more arguments in xcb-xkb < 1.11 */",
                    "xcb_xkb_get_kbd_by_name_replies_key_names_value_list_sizeof(nullptr, 0, 0, 0, 0, 0, 0, 0, 0);"
                ]
            },
            "use": "xcb_icccm xcb_util xcb_image xcb_keysyms xcb_randr xcb_render xcb_renderutil xcb_shape xcb_shm xcb_sync xcb_xfixes xcb_xinerama xcb_xkb xcb"
        },
        "x11prefix": {
            "label": "X11 prefix",
            "type": "getPkgConfigVariable",
            "pkg-config-args": "x11",
            "pkg-config-variable": "prefix",
            "value": "/usr",
            "log": "value"
        }
     },

    "features": {
        "accessibility-atspi-bridge": {
            "label": "ATSPI Bridge",
            "condition": "features.accessibility && features.xcb && features.dbus && libs.atspi",
            "output": [ "privateFeature", "feature" ]
        },
        "angle": {
            "label": "ANGLE",
            "autoDetect": "features.opengles2 || features.opengl-dynamic",
            "condition": "!features.opengl-desktop && features.dxguid && tests.fxc && (features.direct3d9 || (config.winrt && features.direct3d11 && libs.d3dcompiler))",
            "output": [
                "publicFeature",
                { "type": "define", "name": "QT_OPENGL_ES_2_ANGLE" },
                { "type": "varAssign", "name": "QMAKE_FXC_LOCATION", "value": "tests.fxc.value" }
            ]
        },
        "angle_d3d11_qdtd": {
            "label": "D3D11_QUERY_DATA_TIMESTAMP_DISJOINT",
            "condition": "features.angle && tests.angle_d3d11_qdtd",
            "output": [ "privateFeature" ]
        },
        "combined-angle-lib": {
            "label": "Combined ANGLE Library",
            "autoDetect": false,
            "condition": "features.angle",
            "output": [ "publicFeature" ]
        },
        "directfb": {
            "label": "DirectFB",
            "section": "Platform plugins",
            "autoDetect": false,
            "condition": "libs.directfb",
            "output": [ "privateFeature" ]
        },
        "directwrite": {
            "label": "DirectWrite",
            "emitIf": "config.win32",
            "condition": "libs.dwrite",
            "output": [ "privateFeature" ]
        },
        "directwrite1": {
            "label": "DirectWrite 1",
            "emitIf": "config.win32",
            "condition": "libs.dwrite_1",
            "output": [ "privateFeature" ]
        },
        "directwrite2": {
            "label": "DirectWrite 2",
            "emitIf": "config.win32",
            "condition": "features.directwrite1 && libs.dwrite_2",
            "output": [ "privateFeature" ]
        },
        "dxguid": {
            "label": "DirectX GUID",
            "condition": "config.win32 && libs.dxguid",
            "output": [ "privateFeature" ]
        },
        "direct3d9": {
            "label": "Direct 3D 9",
            "condition": "config.win32 && !config.winrt && libs.d3d9",
            "output": [ "privateFeature" ]
        },
        "dxgi": {
            "label": "DirectX GI",
            "condition": "config.win32 && libs.dxgi",
            "output": [ "privateFeature" ]
        },
        "dxgi1_2": {
            "label": "DirectX GI 1.2",
            "condition": "features.dxgi && libs.dxgi1_2",
            "output": [ "privateFeature" ]
        },
        "direct3d11": {
            "label": "Direct 3D 11",
            "condition": "features.dxgi && libs.d3d11",
            "output": [ "privateFeature" ]
        },
        "direct3d11_1": {
            "label": "Direct 3D 11.1",
            "condition": "features.direct3d11 && features.dxgi1_2 && libs.d3d11_1",
            "output": [ "privateFeature" ]
        },
        "direct2d": {
            "label": "Direct 2D",
            "condition": "config.win32 && !config.winrt && features.direct3d11 && libs.d2d1",
            "output": [ "privateFeature" ]
        },
        "direct2d1_1": {
            "label": "Direct 2D 1.1",
            "condition": "features.direct2d && libs.d2d1_1",
            "output": [ "privateFeature" ]
        },
        "evdev": {
            "label": "evdev",
            "condition": "features.thread && tests.evdev",
            "output": [ "privateFeature" ]
        },
        "freetype": {
            "label": "FreeType",
            "purpose": "Supports the FreeType 2 font engine (and its supported font formats).",
            "section": "Fonts",
            "output": [ "privateFeature", "feature" ]
        },
        "system-freetype": {
            "label": "  Using system FreeType",
            "enable": "input.freetype == 'system'",
            "disable": "input.freetype == 'qt'",
            "autoDetect": "!config.msvc",
            "condition": "features.freetype && libs.freetype",
            "output": [ "privateFeature" ]
        },
        "fontconfig": {
            "label": "Fontconfig",
            "autoDetect": "!config.darwin",
            "condition": "!config.msvc && features.system-freetype && libs.fontconfig",
            "output": [ "privateFeature", "feature" ]
        },
        "gbm": {
            "label": "GBM",
            "condition": "libs.gbm",
            "output": [ "publicQtConfig" ]
        },
        "harfbuzz": {
            "label": "HarfBuzz",
            "output": [ "privateFeature", "feature" ]
        },
        "system-harfbuzz": {
            "label": "  Using system HarfBuzz",
            "enable": "input.harfbuzz == 'system'",
            "disable": "input.harfbuzz == 'qt'",
            "autoDetect": "!config.darwin && !config.win32",
            "condition": "features.harfbuzz && libs.harfbuzz",
            "output": [ "privateFeature" ]
        },
        "qqnx_imf": {
            "label": "IMF",
            "emitIf": "config.qnx",
            "condition": "libs.imf",
            "output": [ "privateFeature" ]
        },
        "integrityfb": {
            "label": "INTEGRITY framebuffer",
            "section": "Platform plugins",
            "condition": "config.integrity && tests.integrityfb",
            "output": [ "privateFeature" ]
        },
        "kms": {
            "label": "KMS",
            "condition": "libs.drm",
            "output": [ "publicQtConfig", "privateFeature" ]
        },
        "drm_atomic": {
            "label": "DRM Atomic API",
            "condition": "libs.drm && tests.drm_atomic",
            "output": [ "privateFeature" ]
        },
        "libinput": {
            "label": "libinput",
            "condition": "features.libudev && libs.libinput",
            "output": [ "privateFeature" ]
        },
        "integrityhid": {
            "label": "INTEGRITY HID",
            "condition": "config.integrity && libs.integrityhid",
            "output": [ "privateFeature" ]
        },
        "libinput-axis-api": {
            "label": "axis API in libinput",
            "condition": "features.libinput && tests.libinput_axis_api",
            "output": [ "privateFeature" ]
        },
        "lgmon": {
            "label": "lgmon",
            "emitIf": "config.qnx",
            "condition": "libs.lgmon",
            "output": [ "privateConfig" ]
        },
        "linuxfb": {
            "label": "LinuxFB",
            "section": "Platform plugins",
            "condition": "tests.linuxfb && features.regularexpression",
            "output": [ "privateFeature" ]
        },
        "vsp2": {
            "label": "VSP2",
            "condition": "libs.v4l2",
            "autoDetect": false,
            "output": [ "privateFeature" ]
        },
        "vnc": {
            "label": "VNC",
            "section": "Platform plugins",
            "condition": [
                "config.unix && !config.android && !config.darwin && !config.wasm",
                "features.regularexpression && features.network"
            ],
            "output": [ "privateFeature" ]
        },
        "mtdev": {
            "label": "mtdev",
            "condition": "libs.mtdev",
            "output": [ "privateFeature" ]
        },
        "opengles2": {
            "label": "OpenGL ES 2.0",
            "enable": "input.opengl == 'es2' || input.angle == 'yes'",
            "disable": "input.opengl == 'desktop' || input.opengl == 'dynamic' || input.opengl == 'no'",
            "condition": "(config.win32 && !features.opengl-dynamic) || (!config.watchos && !features.opengl-desktop && libs.opengl_es2)",
            "output": [
                "publicFeature",
                "publicQtConfig",
                { "type": "define", "name": "QT_OPENGL_ES" },
                { "type": "define", "name": "QT_OPENGL_ES_2" }
            ]
        },
        "opengles3": {
            "label": "OpenGL ES 3.0",
            "condition": "features.opengles2 && !features.angle && tests.opengles3",
            "output": [
                "publicFeature",
                { "type": "define", "name": "QT_OPENGL_ES_3" }
            ]
        },
        "opengles31": {
            "label": "OpenGL ES 3.1",
            "condition": "features.opengles3 && tests.opengles31",
            "output": [
                "publicFeature",
                { "type": "define", "name": "QT_OPENGL_ES_3_1" }
            ]
        },
        "opengles32": {
            "label": "OpenGL ES 3.2",
            "condition": "features.opengles31 && tests.opengles32",
            "output": [
                "publicFeature",
                { "type": "define", "name": "QT_OPENGL_ES_3_2" }
            ]
        },
        "opengl-desktop": {
            "label": "Desktop OpenGL",
            "autoDetect": "!config.win32",
            "enable": "input.opengl == 'desktop'",
            "disable": "input.opengl == 'es2' || input.opengl == 'dynamic' || input.opengl == 'no'",
            "condition": "(config.win32 && !config.winrt && !features.opengles2 && (config.msvc || libs.opengl))
                          || (!config.watchos && !config.win32 && !config.wasm && libs.opengl)"
        },
        "opengl-dynamic": {
            "label": "Dynamic OpenGL",
            "disable": "input.angle == 'yes' || input.opengl == 'no' || input.opengl == 'desktop'",
            "condition": "config.win32 && !config.winrt",
            "output": [
                { "type": "publicFeature", "name": "dynamicgl" },
                { "type": "define", "name": "QT_OPENGL_DYNAMIC" }
            ]
        },
        "opengl": {
            "label": "OpenGL",
            "condition": "features.opengl-desktop || features.opengl-dynamic || features.opengles2",
            "output": [ "publicFeature", "feature" ]
        },
        "vkgen": {
            "label": "vkgen",
            "condition": "features.xmlstreamreader",
            "output": [ "privateFeature" ]
        },
        "vulkan": {
            "label": "Vulkan",
            "condition": "features.vkgen && libs.vulkan",
            "output": [ "publicFeature" ]
        },
        "openvg": {
            "label": "OpenVG",
            "condition": "libs.openvg",
            "output": [ "publicFeature" ]
        },
        "egl": {
            "label": "EGL",
            "condition": "(features.opengl || features.openvg) && (features.angle || libs.egl) && (features.dlopen || !config.unix || config.integrity)",
            "output": [ "privateFeature", "feature" ]
        },
        "egl_x11": {
            "label": "EGL on X11",
            "condition": "features.thread && features.egl && tests.egl-x11",
            "output": [ "privateFeature" ]
        },
        "eglfs": {
            "label": "EGLFS",
            "section": "Platform plugins",
            "condition": "!config.android && !config.darwin && !config.win32 && !config.wasm && features.egl",
            "output": [ "privateFeature" ]
        },
        "eglfs_brcm": {
            "label": "EGLFS Raspberry Pi",
            "condition": "features.eglfs && tests.egl-brcm",
            "output": [ "privateFeature" ]
        },
        "eglfs_egldevice": {
            "label": "EGLFS EGLDevice",
            "condition": "features.eglfs && tests.egl-egldevice && features.kms",
            "output": [ "privateFeature" ]
        },
        "eglfs_gbm": {
            "label": "EGLFS GBM",
            "condition": "features.eglfs && features.gbm && features.kms",
            "output": [ "privateFeature" ]
        },
        "eglfs_vsp2": {
            "label": "EGLFS VSP2",
            "condition": "features.eglfs && features.gbm && features.kms && features.vsp2",
            "output": [ "privateFeature" ]
        },
        "eglfs_mali": {
            "label": "EGLFS Mali",
            "condition": "features.eglfs && (tests.egl-mali || tests.egl-mali-2)",
            "output": [ "privateFeature" ]
        },
        "eglfs_viv": {
            "label": "EGLFS i.Mx6",
            "condition": "features.eglfs && tests.egl-viv",
            "output": [ "privateFeature" ]
        },
        "eglfs_rcar": {
            "label": "EGLFS RCAR",
            "condition": "config.integrity && features.eglfs && tests.egl-rcar",
            "output": [ "privateFeature" ]
        },
        "eglfs_viv_wl": {
            "label": "EGLFS i.Mx6 Wayland",
            "condition": "features.eglfs_viv && libs.wayland_server",
            "output": [ "privateFeature" ]
        },
        "eglfs_openwfd": {
            "label": "EGLFS OpenWFD",
            "condition": "config.integrity && features.eglfs && tests.egl-openwfd",
            "output": [ "privateFeature" ]
        },
        "eglfs_x11": {
            "label": "EGLFS X11",
            "condition": "features.eglfs && features.xcb-xlib && features.egl_x11",
            "output": [ "privateFeature" ]
        },
        "gif": {
            "label": "GIF",
            "condition": "features.imageformatplugin",
            "output": [
                "privateFeature",
                { "type": "define", "negative": true, "name": "QT_NO_IMAGEFORMAT_GIF" }
            ]
        },
        "ico": {
            "label": "ICO",
            "condition": "features.imageformatplugin",
            "output": [ "privateFeature", "feature" ]
        },
        "jpeg": {
            "label": "JPEG",
            "disable": "input.libjpeg == 'no'",
            "condition": "features.imageformatplugin",
            "output": [
                "privateFeature",
                { "type": "define", "negative": true, "name": "QT_NO_IMAGEFORMAT_JPEG" }
            ]
        },
        "system-jpeg": {
            "label": "  Using system libjpeg",
            "disable": "input.libjpeg == 'qt'",
            "enable": "input.libjpeg == 'system'",
            "condition": "features.jpeg && libs.libjpeg",
            "output": [ "privateFeature" ]
        },
        "png": {
            "label": "PNG",
            "disable": "input.libpng == 'no'",
            "output": [
                "privateFeature",
                { "type": "define", "negative": true, "name": "QT_NO_IMAGEFORMAT_PNG" }
            ]
        },
        "system-png": {
            "label": "  Using system libpng",
            "disable": "input.libpng == 'qt'",
            "enable": "input.libpng == 'system'",
            "autoDetect": "features.system-zlib",
            "condition": "features.png && libs.libpng",
            "output": [ "privateFeature" ]
        },
        "qpa_default_platform": {
            "label": "QPA default platform",
            "condition": "features.gui",
            "output": [
                { "type": "define", "name": "QT_QPA_DEFAULT_PLATFORM_NAME", "value": "tests.qpa_default_platform.name" },
                { "type": "varAssign", "public": true, "name": "QT_DEFAULT_QPA_PLUGIN", "value": "tests.qpa_default_platform.plugin",
                  "condition": "!features.shared" }
            ]
        },
        "sessionmanager": {
            "label": "Session Management",
            "purpose": "Provides an interface to the windowing system's session management.",
            "section": "Kernel",
            "output": [ "publicFeature", "feature" ]
        },
        "tslib": {
            "label": "tslib",
            "condition": "libs.tslib",
            "output": [ "privateFeature" ]
        },
        "tuiotouch": {
            "label": "TuioTouch",
            "purpose": "Provides the TuioTouch input plugin.",
            "condition": "features.network && features.udpsocket",
            "output": [ "privateFeature" ]
        },
        "xcb": {
            "label": "XCB",
            "section": "Platform plugins",
            "autoDetect": "!config.darwin",
            "condition": "features.thread && libs.xcb && tests.xcb_syslibs && features.xkbcommon-x11",
            "output": [ "privateFeature" ]
        },
        "x11-prefix": {
            "label": "X11 prefix",
            "emitIf": "features.xcb",
            "output": [ { "type": "varAssign", "name": "QMAKE_X11_PREFIX", "value": "tests.x11prefix.value" } ]
        },
        "xcb-glx-plugin": {
            "label": "GLX Plugin",
            "emitIf": "features.xcb",
            "condition": "features.xcb-xlib && features.opengl && !features.opengles2",
            "output": [ "privateFeature" ]
        },
        "xcb-glx": {
            "label": "  XCB GLX",
            "emitIf": "features.xcb && features.xcb-glx-plugin",
            "condition": "libs.xcb_glx",
            "output": [ "privateFeature" ]
        },
        "xcb-egl-plugin": {
            "label": "EGL-X11 Plugin",
            "emitIf": "features.xcb",
            "condition": "features.egl_x11 && features.opengl",
            "output": [ "privateFeature" ]
        },
        "xcb-native-painting": {
            "label": "Native painting (experimental)",
            "autoDetect": false,
            "emitIf": "features.xcb",
            "condition": "features.xcb-xlib && features.fontconfig && libs.xrender",
            "output": [ "privateFeature" ]
        },
        "xrender": {
            "label": "XRender for native painting",
            "emitIf": "features.xcb && features.xcb-native-painting",
            "condition": "features.xcb-native-painting",
            "output": [ "privateFeature" ]
        },
        "xcb-xlib": {
            "label": "XCB Xlib",
            "condition": "features.xlib && libs.xcb_xlib",
            "output": [ "privateFeature" ]
        },
        "xcb-sm": {
            "label": "xcb-sm",
            "emitIf": "features.xcb",
            "condition": "features.sessionmanager && libs.x11sm",
            "output": [ "privateFeature" ]
        },
        "system-xcb-xinput": {
            "label": "Using system-provided xcb-xinput",
            "emitIf": "features.xcb",
            "disable": "input.bundled-xcb-xinput == 'yes'",
            "enable": "input.bundled-xcb-xinput == 'no'",
            "condition": "libs.xcb_xinput",
            "output": [ "privateFeature" ]
        },
        "xkbcommon": {
            "label": "xkbcommon",
            "condition": "libs.xkbcommon",
            "output": [ "privateFeature" ]
        },
        "xkbcommon-x11": {
            "label": "xkbcommon-x11",
            "condition": "features.xkbcommon && libs.xkbcommon_x11",
            "output": [ "privateFeature" ]
        },
        "xlib": {
            "label": "XLib",
            "autoDetect": "!config.darwin || features.xcb",
            "condition": "libs.xlib",
            "output": [ "privateFeature" ]
        },
        "texthtmlparser": {
            "label": "HtmlParser",
            "purpose": "Provides a parser for HTML.",
            "section": "Kernel",
            "output": [ "publicFeature", "feature" ]
        },
        "textmarkdownreader": {
            "label": "MarkdownReader",
            "disable": "input.libmd4c == 'no'",
            "enable": "input.libmd4c == 'system' || input.libmd4c == 'qt' || input.libmd4c == 'yes'",
            "purpose": "Provides a Markdown (CommonMark and GitHub) reader",
            "section": "Kernel",
            "output": [ "publicFeature" ]
        },
        "system-textmarkdownreader": {
            "label": "  Using system libmd4c",
            "disable": "input.libmd4c == 'qt'",
            "enable": "input.libmd4c == 'system'",
            "section": "Kernel",
            "condition": "libs.libmd4c",
            "output": [ "publicFeature" ]
        },
        "textmarkdownwriter": {
            "label": "MarkdownWriter",
            "purpose": "Provides a Markdown (CommonMark) writer",
            "section": "Kernel",
            "output": [ "publicFeature" ]
        },
        "textodfwriter": {
            "label": "OdfWriter",
            "purpose": "Provides an ODF writer.",
            "section": "Kernel",
            "condition": "features.xmlstreamwriter",
            "output": [ "publicFeature", "feature" ]
        },
        "cssparser": {
            "label": "CssParser",
            "purpose": "Provides a parser for Cascading Style Sheets.",
            "section": "Kernel",
            "output": [ "publicFeature", "feature" ]
        },
        "draganddrop": {
            "label": "Drag and Drop",
            "purpose": "Supports the drag and drop mechansim.",
            "section": "Kernel",
            "condition": "features.imageformat_xpm",
            "output": [ "publicFeature", "feature" ]
        },
        "shortcut": {
            "label": "QShortcut",
            "purpose": "Provides keyboard accelerators and shortcuts.",
            "section": "Kernel",
            "output": [ "publicFeature", "feature" ]
        },
        "action": {
            "label": "QAction",
            "purpose": "Provides widget actions.",
            "section": "Kernel",
            "output": [ "publicFeature", "feature" ]
        },
        "cursor": {
            "label": "QCursor",
            "purpose": "Provides mouse cursors.",
            "section": "Kernel",
            "output": [ "publicFeature", "feature" ]
        },
        "clipboard": {
            "label": "QClipboard",
            "purpose": "Provides cut and paste operations.",
            "section": "Kernel",
            "condition": "!config.integrity && !config.qnx && !config.rtems",
            "output": [ "publicFeature", "feature" ]
        },
        "wheelevent": {
            "label": "QWheelEvent",
            "purpose": "Supports wheel events.",
            "section": "Kernel",
            "output": [ "publicFeature", "feature" ]
        },
        "tabletevent": {
            "label": "QTabletEvent",
            "purpose": "Supports tablet events.",
            "section": "Kernel",
            "output": [ "publicFeature", "feature" ]
        },
        "im": {
            "label": "QInputContext",
            "purpose": "Provides complex input methods.",
            "section": "Kernel",
            "condition": "features.library",
            "output": [ "publicFeature", "feature" ]
        },
        "highdpiscaling": {
            "label": "High DPI Scaling",
            "purpose": "Provides automatic scaling of DPI-unaware applications on high-DPI displays.",
            "section": "Kernel",
            "output": [ "publicFeature", "feature" ]
        },
        "validator": {
            "label": "QValidator",
            "purpose": "Supports validation of input text.",
            "section": "Widgets",
            "output": [ "publicFeature", "feature" ]
        },
        "standarditemmodel": {
            "label": "QStandardItemModel",
            "purpose": "Provides a generic model for storing custom data.",
            "section": "ItemViews",
            "condition": "features.itemmodel",
            "output": [ "publicFeature", "feature" ]
        },
        "imageformatplugin": {
            "label": "QImageIOPlugin",
            "purpose": "Provides a base for writing a image format plugins.",
            "section": "Images",
            "output": [ "publicFeature", "feature" ]
        },
        "movie": {
            "label": "QMovie",
            "purpose": "Supports animated images.",
            "section": "Images",
            "output": [ "publicFeature", "feature" ]
        },
        "imageformat_bmp": {
            "label": "BMP Image Format",
            "purpose": "Supports Microsoft's Bitmap image file format.",
            "section": "Images",
            "output": [ "publicFeature", "feature" ]
        },
        "imageformat_ppm": {
            "label": "PPM Image Format",
            "purpose": "Supports the Portable Pixmap image file format.",
            "section": "Images",
            "output": [ "publicFeature", "feature" ]
        },
        "imageformat_xbm": {
            "label": "XBM Image Format",
            "purpose": "Supports the X11 Bitmap image file format.",
            "section": "Images",
            "output": [ "publicFeature", "feature" ]
        },
        "imageformat_xpm": {
            "label": "XPM Image Format",
            "purpose": "Supports the X11 Pixmap image file format.",
            "section": "Images",
            "output": [ "publicFeature", "feature" ]
        },
        "imageformat_png": {
            "label": "PNG Image Format",
            "purpose": "Supports the Portable Network Graphics image file format.",
            "section": "Images",
            "output": [ "publicFeature", "feature" ]
        },
        "imageformat_jpeg": {
            "label": "JPEG Image Format",
            "purpose": "Supports the Joint Photographic Experts Group image file format.",
            "section": "Images",
            "output": [ "publicFeature", "feature" ]
        },
        "image_heuristic_mask": {
            "label": "QImage::createHeuristicMask()",
            "purpose": "Supports creating a 1-bpp heuristic mask for images.",
            "section": "Images",
            "output": [ "publicFeature", "feature" ]
        },
        "image_text": {
            "label": "Image Text",
            "purpose": "Supports image file text strings.",
            "section": "Images",
            "output": [ "publicFeature", "feature" ]
        },
        "picture": {
            "label": "QPicture",
            "purpose": "Supports recording and replaying QPainter commands.",
            "section": "Painting",
            "output": [ "publicFeature", "feature" ]
        },
        "colornames": {
            "label": "Color Names",
            "purpose": "Supports color names such as \"red\", used by QColor and by some HTML documents.",
            "section": "Painting",
            "output": [ "publicFeature", "feature" ]
        },
        "pdf": {
            "label": "QPdf",
            "purpose": "Provides a PDF backend for QPainter.",
            "section": "Painting",
            "condition": "features.temporaryfile",
            "output": [ "publicFeature", "feature" ]
        },
        "desktopservices": {
            "label": "QDesktopServices",
            "purpose": "Provides methods for accessing common desktop services.",
            "section": "Utilities",
            "output": [ "publicFeature", "feature" ]
        },
        "systemtrayicon": {
            "label": "QSystemTrayIcon",
            "purpose": "Provides an icon for an application in the system tray.",
            "section": "Utilities",
            "condition": "features.temporaryfile",
            "output": [ "publicFeature", "feature" ]
        },
        "accessibility": {
            "label": "Accessibility",
            "purpose": "Provides accessibility support.",
            "section": "Utilities",
            "condition": "features.properties",
            "output": [ "publicFeature", "feature" ]
        },
        "multiprocess": {
            "label": "Multi process",
            "purpose": "Provides support for detecting the desktop environment, launching external processes and opening URLs.",
            "section": "Utilities",
            "condition": "!config.integrity && !config.rtems",
            "output": [ "privateFeature" ]
        },
        "whatsthis": {
            "label": "QWhatsThis",
            "purpose": "Supports displaying \"What's this\" help.",
            "section": "Widget Support",
            "output": [ "publicFeature", "feature" ]
        },
        "raster-64bit": {
            "label": "QPainter - 64 bit raster",
            "purpose": "Internal painting support for 64 bit (16 bpc) rasterization.",
            "section": "Painting",
            "output": [ "privateFeature" ]
        }
    },

    "earlyReport": [
        {
            "type": "error",
            "condition": "input.xcb != '' && input.xcb != 'no' && input.xkbcommon == 'no'",
            "message": "XCB plugin requires xkbcommon and xkbcommon-x11, but -no-xkbcommon was provided."
        }
    ],

    "report": [
        {
            "type": "note",
            "condition": "features.xcb && config.darwin",
            "message": "XCB support on macOS is minimal and untested. Some features will
not work properly or at all (e.g. OpenGL, desktop services or accessibility),
or may depend on your system and XQuartz setup."
        },
        {
            "type": "note",
            "condition": "features.accessibility && features.xcb && !features.accessibility-atspi-bridge",
            "message": "Disabling X11 Accessibility Bridge: D-Bus or AT-SPI is missing."
        },
        {
            "type": "warning",
            "condition": "input.qpa-platform-guard != ''",
            "message": "The [-no]-qpa-platform-guard argument is deprecated and has no effect."
        },
        {
            "type": "warning",
            "condition": "features.gui && config.linux && !config.android && !features.xcb && !features.eglfs && !features.directfb && !features.linuxfb",
            "message": "No QPA platform plugin enabled! This will
produce a Qt that cannot run GUI applications.
See \"Platform backends\" in the output of --help."
        },
        {
            "type": "warning",
            "condition": "config.win32 && (features.opengles2 || features.opengl-dynamic) && !features.angle",
            "message": "Using OpenGL ES 2.0 on Windows without ANGLE.
The build will most likely fail.
Specify -opengl desktop to use regular OpenGL."
        },
        {
            "type": "warning",
            "condition": "config.darwin && features.system-harfbuzz",
            "message": "On OS X, AAT is supported only with -qt-harfbuzz."
        },
        {
            "type": "error",
            "condition": "features.gui && !config.watchos && input.opengl != 'no' && !features.opengl-desktop && !features.opengles2 && !features.opengl-dynamic",
            "message": "The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform."
        },
        {
            "type": "warning",
            "condition": "!features.accessibility",
            "message": "Accessibility disabled. This configuration of Qt is unsupported."
        }
    ],

    "summary": [
        {
            "section": "Qt Gui",
            "entries": [
                "accessibility",
                "freetype",
                "system-freetype",
                "harfbuzz",
                "system-harfbuzz",
                "fontconfig",
                {
                    "section": "Image formats",
                    "entries": [
                        "gif", "ico", "jpeg", "system-jpeg", "png", "system-png"
                    ]
                },
                {
                    "section": "Text formats",
                    "entries": [
                        "texthtmlparser", "cssparser", "textodfwriter", "textmarkdownreader", "system-textmarkdownreader", "textmarkdownwriter"
                    ]
                },
                "egl",
                "openvg",
                {
                    "section": "OpenGL",
                    "entries": [
                        {
                            "type": "feature",
                            "args": "angle",
                            "condition": "config.win32"
                        },
                        {
                            "type": "feature",
                            "args": "combined-angle-lib",
                            "condition": "features.angle"
                        },
                        "opengl-desktop",
                        {
                            "type": "feature",
                            "args": "opengl-dynamic",
                            "condition": "config.win32"
                        },
                        "opengles2",
                        "opengles3",
                        "opengles31",
                        "opengles32"
                    ]
                },
                "vulkan",
                "sessionmanager"
            ]
        },
        {
            "section": "Features used by QPA backends",
            "entries": [
                "evdev",
                "libinput",
                "integrityhid",
                "mtdev",
                "tslib",
                "xkbcommon",
                {
                    "section": "X11 specific",
                    "entries": [
                        "xlib",
                        "xcb-xlib",
                        "egl_x11",
                        "xkbcommon-x11"
                    ]
                }
            ]
        },
        {
            "section": "QPA backends",
            "entries": [
                "directfb", "eglfs",
                {
                    "section": "EGLFS details",
                    "condition": "features.eglfs",
                    "entries": [
                        "eglfs_openwfd", "eglfs_viv", "eglfs_viv_wl", "eglfs_rcar", "eglfs_egldevice", "eglfs_gbm", "eglfs_vsp2", "eglfs_mali", "eglfs_brcm", "eglfs_x11"
                    ]
                },
                "linuxfb", "vnc",
                {
                    "type": "feature",
                    "condition": "config.integrity",
                    "args": "integrityfb"
                },
                {
                    "section": "QNX",
                    "condition": "config.qnx",
                    "entries": [
                        "lgmon", "qqnx_imf"
                    ]
                },
                {
                    "section": "XCB",
                    "condition": "features.xcb",
                    "entries": [
                        "system-xcb-xinput", "xcb-native-painting",
                        {
                            "section": "GL integrations",
                            "entries": [
                                "xcb-glx-plugin",
                                "xcb-glx",
                                "xcb-egl-plugin"
                            ]
                        }
                    ]
                },
                {
                    "section": "Windows",
                    "condition": "config.win32",
                    "entries": [
                        "direct2d", "directwrite", "directwrite2"
                    ]
                }
            ]
        }
    ]
}
