configure: verify header presence against sources

in addition to the actual library resolution, also resolve the headers
belonging to the library, to validate the include path, and possibly
ensure that the right version of the library is present.

the "include" entries were moved out of the "test" objects, and renamed
to "headers". this cleanly permits libraries without compile tests.

the headers were not put into the sources, because the variance among
the includes is generally orthogonal to the variance among the
libraries.

note that this - like the library resolution - provides no support for
darwin frameworks. consequently, the opengl libraries are excluded from
the conversion on darwin.

similarly, wasm is excluded (centrally), because emcc is magic and would
need advanced wizardry to be dealt with.

Change-Id: Ib390c75371efa2badcfec9b74274047ce67c3e5a
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
bb10
Oswald Buddenhagen 2017-12-07 19:30:07 +01:00
parent a227ea5bd5
commit e80bf655e9
8 changed files with 125 additions and 82 deletions

View File

@ -152,13 +152,13 @@
"zlib": {
"label": "zlib",
"test": {
"include": "zlib.h",
"main": [
"z_streamp stream = 0;",
"(void) zlibVersion();",
"(void) compress2(0, 0, 0, 0, 1); // compress2 was added in zlib version 1.0.8"
]
},
"headers": "zlib.h",
"sources": [
{ "libs": "-lzdll", "condition": "config.msvc" },
{ "libs": "-lzlib", "condition": "config.msvc" },
@ -169,9 +169,9 @@
"dbus": {
"label": "D-Bus >= 1.2",
"test": {
"include": "dbus/dbus.h",
"main": "(void) dbus_bus_get_private(DBUS_BUS_SYSTEM, (DBusError *)NULL);"
},
"headers": "dbus/dbus.h",
"sources": [
{ "type": "pkgConfig", "args": "dbus-1 >= 1.2" },
{
@ -196,9 +196,9 @@
"libudev": {
"label": "udev",
"test": {
"include": "libudev.h",
"main": "udev_unref(udev_new());"
},
"headers": "libudev.h",
"sources": [
{ "type": "pkgConfig", "args": "libudev" },
"-ludev"

View File

@ -582,7 +582,33 @@ defineTest(qtConfResolvePathLibs) {
return($$ret)
}
# includes-var, includes
defineReplace(qtConfGetTestIncludes) {
defined($${1}._KEYS_, var) {
1st = $$first($${1}._KEYS_)
equals(1st, 0) {
# array; recurse for every element
ret =
for (k, $${1}._KEYS_): \
ret += $$qtConfGetTestIncludes($${1}.$$k)
return($$ret)
}
# object; try condition and recurse
!defined($${1}.headers, var):!defined($${1}.headers._KEYS_, var): \ # just plain broken without it
error("headers object '$$1' has no nested headers entry")
cond = $$eval($${1}.condition)
isEmpty(cond): \ # would be pointless otherwise
error("headers object '$$1' has no condition")
!$$qtConfEvaluate($$cond) {
qtLog("header entry '$$1' failed condition '$$cond'.")
return()
}
qtLog("header entry '$$1' passed condition.")
return($$qtConfGetTestIncludes($${1}.headers))
}
return($$eval($$1)) # plain string - or nothing (can happen for top-level call only)
}
# includes-var, in-paths, test-object-var
defineTest(qtConfResolvePathIncs) {
ret = true
for (incdir, 2) {
@ -594,6 +620,21 @@ defineTest(qtConfResolvePathIncs) {
2 -= $$QMAKE_DEFAULT_INCDIRS
$$1 = $$2
export($$1)
wasm {
# FIXME: emcc downloads pre-built libraries and adds their include
# path to the clang call dynamically. it would be possible to parse
# the emcc -s USE_xyz=1 --cflags output to populate xzy_INCDIR and
# thus make the code below work.
return($$ret)
}
hdrs = $$qtConfGetTestIncludes($${3}.headers)
for (hdr, hdrs) {
h = $$qtConfFindInPathList($$hdr, $$2 $$EXTRA_INCLUDEPATH $$QMAKE_DEFAULT_INCDIRS)
isEmpty(h) {
qtLog("$$hdr not found in [$$val_escape(2)] and global paths.")
ret = false
}
}
return($$ret)
}
@ -662,7 +703,7 @@ defineTest(qtConfLibrary_inline) {
!qtConfResolveAllLibs($$1): \
return(false)
!qtConfResolvePathIncs($${1}.includedir, $$includes): \
!qtConfResolvePathIncs($${1}.includedir, $$includes, $$2): \
return(false)
return(true)
@ -678,7 +719,7 @@ defineTest(qtConfLibrary_makeSpec) {
!qtConfResolvePathLibs($${1}.libs, $$eval(QMAKE_LIBDIR_$$spec), $$eval(QMAKE_LIBS_$$spec)): \
return(false)
!qtConfResolvePathIncs($${1}.includedir, $$eval(QMAKE_INCDIR_$$spec)): \
!qtConfResolvePathIncs($${1}.includedir, $$eval(QMAKE_INCDIR_$$spec), $$2): \
return(false)
# note that the object is re-exported, because we resolve the libraries.
@ -741,7 +782,7 @@ defineTest(qtConfLibrary_pkgConfig) {
}
!isEmpty(ignored): \
qtLog("Note: Dropped compiler flags '$$ignored'.")
!qtConfResolvePathIncs($${1}.includedir, $$includes): \
!qtConfResolvePathIncs($${1}.includedir, $$includes, $$2): \
return(false)
$${1}.defines = $$defines
@ -1054,7 +1095,7 @@ defineTest(qtConfTestPrepare_compile) {
}
defineTest(qtConfPrepareCompileTestSource) {
test_dir = $$2
test_dir = $$3
test_lang = $$eval($${1}.lang)
isEmpty(test_lang): test_lang = "c++"
@ -1071,7 +1112,10 @@ defineTest(qtConfPrepareCompileTestSource) {
for (ent, $$qtConfScalarOrList($${1}.head)): \
contents += $$ent
# Includes
for (ent, $$qtConfScalarOrList($${1}.include)): \
hdrs = $$qtConfGetTestIncludes($${1}.include)
isEmpty(hdrs): \
hdrs = $$qtConfGetTestIncludes($$2)
for (ent, hdrs): \
contents += "$${LITERAL_HASH}include <$$ent>"
# Custom code after includes
for (ent, $$qtConfScalarOrList($${1}.tail)): \
@ -1107,7 +1151,7 @@ defineTest(qtConfTest_compile) {
isEmpty(test) {
test_dir = $$test_base_out_dir/$$section(1, ".", -1)
test_out_dir = $$test_dir
qtConfPrepareCompileTestSource($${1}.test, $$test_dir)
qtConfPrepareCompileTestSource($${1}.test, $${1}.headers, $$test_dir)
} else {
test_dir = $$QMAKE_CONFIG_TESTS_DIR/$$test
test_out_dir = $$test_base_out_dir/$$test

View File

@ -24,9 +24,9 @@
"doubleconversion": {
"label": "DoubleConversion",
"test": {
"include": "double-conversion/double-conversion.h",
"main": "(void) double_conversion::StringToDoubleConverter::NO_FLAGS;"
},
"headers": "double-conversion/double-conversion.h",
"sources": [
"-ldouble-conversion"
]
@ -35,7 +35,6 @@
"label": "GLib",
"test": {
"head": "typedef struct _GMainContext GMainContext;",
"include": "glib.h",
"main": [
"g_thread_init(NULL);",
"(void) g_main_context_default();",
@ -43,6 +42,7 @@
"g_source_add_poll(NULL, NULL);"
]
},
"headers": "glib.h",
"sources": [
{ "type": "pkgConfig", "args": "glib-2.0 gthread-2.0" }
]
@ -58,7 +58,6 @@
"icu": {
"label": "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);",
@ -66,6 +65,7 @@
" ucol_close(collator);"
]
},
"headers": [ "unicode/utypes.h", "unicode/ucol.h", "unicode/ustring.h" ],
"sources": [
{
"builds": {
@ -84,9 +84,9 @@
"journald": {
"label": "journald",
"test": {
"include": [ "systemd/sd-journal.h", "syslog.h" ],
"main": "sd_journal_send(\"PRIORITY=%i\", LOG_INFO, NULL);"
},
"headers": [ "systemd/sd-journal.h", "syslog.h" ],
"sources": [
{ "type": "pkgConfig", "args": "libsystemd" },
{ "type": "pkgConfig", "args": "libsystemd-journal" }
@ -95,7 +95,6 @@
"libatomic": {
"label": "64 bit atomics",
"test": {
"include": [ "atomic", "cstdint" ],
"tail": [
"void test(volatile std::atomic<std::int64_t> &a)",
"{",
@ -114,6 +113,7 @@
],
"qmake": "CONFIG += c++11"
},
"headers": [ "atomic", "cstdint" ],
"sources": [
"",
"-latomic"
@ -122,13 +122,13 @@
"libdl": {
"label": "dlopen()",
"test": {
"include": "dlfcn.h",
"main": [
"dlclose(dlopen(0, 0));",
"dlsym(RTLD_DEFAULT, 0);",
"dlerror();"
]
},
"headers": "dlfcn.h",
"sources": [
"",
"-ldl"
@ -137,9 +137,9 @@
"librt": {
"label": "clock_gettime()",
"test": {
"include": [ "unistd.h", "time.h" ],
"main": "timespec ts; clock_gettime(CLOCK_REALTIME, &ts);"
},
"headers": [ "unistd.h", "time.h" ],
"sources": [
"",
"-lrt"
@ -148,9 +148,9 @@
"lttng-ust": {
"label": "lttng-ust",
"test": {
"include": "lttng/ust-events.h",
"main": "lttng_session_destroy(nullptr);"
},
"headers": "lttng/ust-events.h",
"sources": [
{ "type": "pkgConfig", "args": "lttng-ust" },
"-llttng-ust"
@ -161,13 +161,13 @@
"label": "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"
]
},
"headers": "pcre2.h",
"sources": [
{ "type": "pkgConfig", "args": "libpcre2-16" },
"-lpcre2-16"
@ -176,12 +176,12 @@
"pps": {
"label": "PPS",
"test": {
"include": "sys/pps.h",
"main": [
"pps_decoder_t decoder;",
"pps_decoder_initialize(&decoder, NULL);"
]
},
"headers": "sys/pps.h",
"sources": [
"-lpps"
]
@ -189,10 +189,10 @@
"slog2": {
"label": "slog2",
"test": {
"include": "sys/slog2.h",
"main": "slog2_set_default_buffer((slog2_buffer_t)-1);"
},
"export": "",
"headers": "sys/slog2.h",
"sources": [
"-lslog2"
]

View File

@ -67,7 +67,6 @@
"label": "Direct 2D",
"export": "",
"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;",
@ -76,6 +75,7 @@
"(void) surface;"
]
},
"headers": [ "d3d11_1.h", "d2d1_1.h", "d2d1_1helper.h", "dxgi1_2.h", "wrl.h", "dwrite.h" ],
"sources": [
"-ld2d1 -ldwrite -ld3d11"
]
@ -83,13 +83,13 @@
"directfb": {
"label": "DirectFB",
"test": {
"include": "directfb.h",
"tail": [
"#ifdef __typeof__",
"# error DirectFB headers are unclean and cannot compile",
"#endif"
]
},
"headers": "directfb.h",
"sources": [
{ "type": "pkgConfig", "args": "directfb" }
]
@ -98,13 +98,13 @@
"label": "DirectWrite",
"export": "",
"test": {
"include": [ "dwrite.h", "d2d1.h" ],
"main": [
"IDWriteFactory *factory = 0;",
"DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory),",
" (IUnknown **)(&factory));"
]
},
"headers": [ "dwrite.h", "d2d1.h" ],
"sources": [
"-ldwrite"
]
@ -117,15 +117,12 @@
"#include <stdint.h>",
"extern \"C\" {"
],
"include": [
"xf86drmMode.h",
"xf86drm.h"
],
"tail": [
"}"
],
"main": "(void) drmModeGetCrtc(0, 0);"
},
"headers": [ "xf86drmMode.h", "xf86drm.h" ],
"sources": [
{ "type": "pkgConfig", "args": "libdrm" },
{ "libs": "-ldrm", "condition": "!config.integrity" },
@ -135,12 +132,12 @@
"egl": {
"label": "EGL",
"test": {
"include": "EGL/egl.h",
"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" }
@ -149,7 +146,6 @@
"freetype": {
"label": "FreeType",
"test": {
"include": "ft2build.h",
"tail": [
"#include FT_FREETYPE_H",
"#if ((FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH) < 20200)",
@ -160,6 +156,7 @@
"FT_Face face = 0;"
]
},
"headers": "ft2build.h",
"sources": [
{ "type": "pkgConfig", "args": "freetype2" },
{ "type": "freetype", "libs": "-lfreetype", "condition": "!config.wasm" },
@ -172,7 +169,6 @@
"fontconfig": {
"label": "Fontconfig",
"test": {
"include": "fontconfig/fontconfig.h",
"tail": [
"#ifndef FC_RGBA_UNKNOWN",
"# error This version of fontconfig is tool old, it is missing the FC_RGBA_UNKNOWN define",
@ -182,6 +178,7 @@
"FcPattern *pattern = 0;"
]
},
"headers": "fontconfig/fontconfig.h",
"sources": [
{ "type": "pkgConfig", "args": "fontconfig" },
{ "type": "freetype", "libs": "-lfontconfig" }
@ -196,12 +193,12 @@
"#include <stdint.h>",
"extern \"C\" {"
],
"include": "gbm.h",
"tail": [
"}"
],
"main": "gbm_surface *surface = 0;"
},
"headers": "gbm.h",
"sources": [
{ "type": "pkgConfig", "args": "gbm" }
]
@ -209,7 +206,6 @@
"harfbuzz": {
"label": "HarfBuzz",
"test": {
"include": "harfbuzz/hb.h",
"tail": [
"#if !HB_VERSION_ATLEAST(1, 6, 0)",
"# error This version of harfbuzz is too old.",
@ -224,6 +220,7 @@
"hb_buffer_destroy(buffer);"
]
},
"headers": "harfbuzz/hb.h",
"sources": [
"-lharfbuzz"
]
@ -232,9 +229,9 @@
"label": "IMF",
"export": "",
"test": {
"include": "imf/imf_client.h",
"main": "imf_client_init();"
},
"headers": "imf/imf_client.h",
"sources": [
"-linput_client"
]
@ -242,9 +239,9 @@
"lgmon": {
"label": "lgmon",
"test": {
"include": "lgmon.h",
"main": "lgmon_supported(getpid());"
},
"headers": "lgmon.h",
"sources": [
"-llgmon"
]
@ -252,9 +249,9 @@
"libinput": {
"label": "libinput",
"test": {
"include": "libinput.h",
"main": "libinput_udev_create_context(NULL, NULL, NULL);"
},
"headers": "libinput.h",
"sources": [
{ "type": "pkgConfig", "args": "libinput" }
]
@ -266,7 +263,6 @@
"#include <stdlib.h>",
"#include <stdint.h>"
],
"include": "device/hiddriver.h",
"main": [
"HIDDriver *driver;",
"uintptr_t devicecontext;",
@ -274,6 +270,7 @@
"gh_hid_enum_devices(driver, &device_id, &devicecontext);"
]
},
"headers": "device/hiddriver.h",
"sources": [
{ "libs": "-lhiddev -lusbhid -lusb" }
]
@ -286,7 +283,6 @@
"#include <stdio.h>",
"extern \"C\" {"
],
"include": "jpeglib.h",
"tail": [
"}",
"",
@ -294,6 +290,7 @@
],
"main": "jpeg_create_compress(cinfo);"
},
"headers": "jpeglib.h",
"sources": [
{ "libs": "-llibjpeg", "condition": "config.msvc" },
"-ljpeg"
@ -302,9 +299,9 @@
"libpng": {
"label": "libpng",
"test": {
"include": "png.h",
"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" },
@ -320,13 +317,13 @@
"mirclient": {
"label": "Mir client libraries",
"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);"
]
},
"headers": [ "mir_toolkit/mir_client_library.h", "ubuntu/application/lifecycle_delegate.h", "EGL/egl.h" ],
"sources": [
{ "type": "pkgConfig", "args": "egl mirclient ubuntu-platform-api libcontent-hub >= 0.2.0" }
]
@ -334,12 +331,12 @@
"mtdev": {
"label": "mtdev",
"test": {
"include": "mtdev.h",
"main": [
"mtdev m;",
"mtdev_open(&m, 0);"
]
},
"headers": "mtdev.h",
"sources": [
{ "type": "pkgConfig", "args": "mtdev" }
]
@ -352,7 +349,6 @@
"# include <OpenGL/gl.h>",
"#else",
"# define GL_GLEXT_PROTOTYPES",
"# include <GL/gl.h>",
"#endif"
],
"main": [
@ -363,6 +359,12 @@
"glEnd();"
]
},
"headers": [
{
"condition": "!config.darwin",
"headers": "GL/gl.h"
}
],
"sources": [
{ "type": "pkgConfig", "args": "gl", "condition": "!config.darwin" },
{ "type": "makeSpec", "spec": "OPENGL" }
@ -376,7 +378,6 @@
"# include <OpenGLES/ES2/gl.h>",
"#else",
"# define GL_GLEXT_PROTOTYPES",
"# include <GLES2/gl2.h>",
"#endif"
],
"main": [
@ -384,6 +385,12 @@
"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" }
@ -392,9 +399,9 @@
"openvg": {
"label": "OpenVG",
"test": {
"include": "VG/openvg.h",
"main": "VGint i = 2; vgFlush();"
},
"headers": "VG/openvg.h",
"sources": [
{ "type": "pkgConfig", "args": "vg" },
{ "type": "makeSpec", "spec": "OPENVG" }
@ -403,9 +410,9 @@
"tslib": {
"label": "tslib",
"test": {
"include": "tslib.h",
"main": "ts_open(\"foo\", 0);"
},
"headers": "tslib.h",
"sources": [
"-lts"
]
@ -417,10 +424,6 @@
"#include <cstddef>",
"extern \"C\" {"
],
"include": [
"mediactl/mediactl.h",
"mediactl/v4l2subdev.h"
],
"tail": [
"}"
],
@ -431,6 +434,7 @@
"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"
@ -447,9 +451,9 @@
"wayland_server": {
"label": "Wayland Server",
"test": {
"include": "wayland-server.h",
"main": "wl_display_create();"
},
"headers": "wayland-server.h",
"sources": [
{ "type": "pkgConfig", "args": "wayland-server" }
]
@ -457,12 +461,12 @@
"xlib": {
"label": "XLib",
"test": {
"include": "X11/Xlib.h",
"main": [
"Display *d = XOpenDisplay(NULL);",
"XCloseDisplay(d);"
]
},
"headers": "X11/Xlib.h",
"sources": [
{ "type": "makeSpec", "spec": "X11" }
]
@ -476,7 +480,6 @@
"xcb": {
"label": "XCB >= 1.9 (core)",
"test": {
"include": "xcb/xcb.h",
"main": [
"int primaryScreen = 0;",
"(void)xcb_connect(\"\", &primaryScreen);",
@ -484,6 +487,7 @@
"int xcbScreenError = XCB_CONN_CLOSED_INVALID_SCREEN;"
]
},
"headers": "xcb/xcb.h",
"sources": [
{ "type": "pkgConfig", "args": "xcb >= 1.9" },
"-lxcb"
@ -517,9 +521,9 @@
"xcb_xlib": {
"label": "XCB Xlib",
"test": {
"include": "X11/Xlib-xcb.h",
"main": "(void) XGetXCBConnection((Display *)0);"
},
"headers": "X11/Xlib-xcb.h",
"sources": [
{ "type": "pkgConfig", "args": "x11-xcb" },
"-lX11-xcb"
@ -533,13 +537,13 @@
"// 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);"
]
},
"headers": "xcb/xkb.h",
"sources": [
{ "type": "pkgConfig", "args": "xcb-xkb >= 1.10" },
"-lxcb-xkb"
@ -549,7 +553,6 @@
"xcb_render": {
"label": "XCB XRender",
"test": {
"include": "xcb/render.h",
"tail": [
"// 'template' is used as a function argument name in xcb_renderutil.h",
"#define template template_param",
@ -572,6 +575,7 @@
" formatsReply, XCB_PICT_STANDARD_ARGB_32);"
]
},
"headers": "xcb/render.h",
"sources": [
{ "type": "pkgConfig", "args": "xcb-renderutil xcb-render" },
"-lxcb-render-util -lxcb-render"
@ -581,7 +585,6 @@
"xcb_glx": {
"label": "XCB GLX",
"test": {
"include": "xcb/glx.h",
"main": [
"int primaryScreen = 0;",
"xcb_connection_t *connection = 0;",
@ -591,6 +594,7 @@
"xcb_glx_query_version_reply(connection, xglx_query_cookie, &error);"
]
},
"headers": "xcb/glx.h",
"sources": [
{ "type": "pkgConfig", "args": "xcb-glx" },
"-lxcb-glx"
@ -600,7 +604,6 @@
"xcb_xinput": {
"label": "XCB XInput",
"test": {
"include": "xcb/xinput.h",
"main": [
"xcb_connection_t *connection = 0;",
"xcb_generic_error_t *error = 0;",
@ -609,6 +612,7 @@
"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"
@ -618,9 +622,9 @@
"xkbcommon": {
"label": "xkbcommon >= 0.5.0",
"test": {
"include": [ "xkbcommon/xkbcommon.h" ],
"main": "xkb_context_new(XKB_CONTEXT_NO_FLAGS);"
},
"headers": [ "xkbcommon/xkbcommon.h" ],
"sources": [
{ "type": "pkgConfig", "args": "xkbcommon >= 0.5.0" }
]
@ -628,9 +632,9 @@
"xkbcommon_x11": {
"label": "xkbcommon-x11",
"test": {
"include": [ "xkbcommon/xkbcommon-x11.h" ],
"main": "xkb_x11_get_core_keyboard_device_id(nullptr);"
},
"headers": [ "xkbcommon/xkbcommon-x11.h" ],
"sources": [
{ "type": "pkgConfig", "args": "xkbcommon-x11" }
]

View File

@ -39,13 +39,13 @@
"libproxy": {
"label": "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);"
]
},
"headers": "proxy.h",
"sources": [
"-lproxy"
]

View File

@ -39,9 +39,8 @@
"libraries": {
"db2": {
"label": "DB2 (IBM)",
"test": {
"include": [ "sqlcli.h", "sqlcli1.h" ]
},
"test": {},
"headers": [ "sqlcli.h", "sqlcli1.h" ],
"sources": [
{ "libs": "-ldb2cli", "condition": "config.win32" },
{ "libs": "-ldb2", "condition": "!config.win32" }
@ -49,9 +48,8 @@
},
"ibase": {
"label": "InterBase",
"test": {
"include": "ibase.h"
},
"test": {},
"headers": "ibase.h",
"sources": [
{ "libs": "-lgds32_ms", "condition": "config.win32" },
{ "libs": "-lgds", "condition": "!config.win32" }
@ -65,9 +63,9 @@
"# include <windows.h>",
"#endif"
],
"include": "mysql.h",
"main": "mysql_get_client_version();"
},
"headers": "mysql.h",
"sources": [
{ "type": "mysqlConfig", "query": "--libs_r", "cleanlibs": true },
{ "type": "mysqlConfig", "query": "--libs", "cleanlibs": true },
@ -81,12 +79,12 @@
"psql": {
"label": "PostgreSQL",
"test": {
"include": "libpq-fe.h",
"main": [
"PQescapeBytea(0, 0, 0);",
"PQunescapeBytea(0, 0);"
]
},
"headers": "libpq-fe.h",
"sources": [
{ "type": "pkgConfig", "args": "libpq" },
{ "type": "psqlConfig" },
@ -96,9 +94,8 @@
},
"tds": {
"label": "TDS (Sybase)",
"test": {
"include": [ "sybfront.h", "sybdb.h" ]
},
"test": {},
"headers": [ "sybfront.h", "sybdb.h" ],
"sources": [
{ "type": "sybaseEnv", "libs": "-lNTWDBLIB", "condition": "config.win32" },
{ "type": "sybaseEnv", "libs": "-lsybdb", "condition": "!config.win32" }
@ -106,9 +103,8 @@
},
"oci": {
"label": "OCI (Oracle)",
"test": {
"include": "oci.h"
},
"test": {},
"headers": "oci.h",
"sources": [
{ "libs": "-loci", "condition": "config.win32" },
{ "libs": "-lclntsh", "condition": "!config.win32" }
@ -122,12 +118,12 @@
"# include <windows.h>",
"#endif"
],
"include": [ "sql.h", "sqlext.h" ],
"main": [
"SQLHANDLE env;",
"SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);"
]
},
"headers": [ "sql.h", "sqlext.h" ],
"sources": [
{ "libs": "-lodbc32", "condition": "config.win32" },
{ "libs": "-liodbc", "condition": "config.darwin" },
@ -136,9 +132,8 @@
},
"sqlite2": {
"label": "SQLite (version 2)",
"test": {
"include": "sqlite.h"
},
"test": {},
"headers": "sqlite.h",
"sources": [
"-lsqlite"
]
@ -147,9 +142,9 @@
"label": "SQLite (version 3)",
"export": "sqlite",
"test": {
"include": "sqlite3.h",
"main": "sqlite3_open_v2(0, 0, 0, 0);"
},
"headers": "sqlite3.h",
"sources": [
{ "type": "pkgConfig", "args": "sqlite3" },
"-lsqlite3"

View File

@ -9,7 +9,7 @@ defineTest(qtConfLibrary_psqlConfig) {
!qtConfResolvePathLibs($${1}.libs, $$libdir, -lpq): \
return(false)
qtRunLoggedCommand("$$pg_config --includedir", includedir)|return(false)
!qtConfResolvePathIncs($${1}.includedir, $$includedir): \
!qtConfResolvePathIncs($${1}.includedir, $$includedir, $$2): \
return(false)
return(true)
}
@ -63,7 +63,7 @@ defineTest(qtConfLibrary_mysqlConfig) {
includedir =
for (id, rawincludedir): \
includedir += $$clean_path($$id)
!qtConfResolvePathIncs($${1}.includedir, $$includedir): \
!qtConfResolvePathIncs($${1}.includedir, $$includedir, $$2): \
return(false)
return(true)
}

View File

@ -17,9 +17,9 @@
"cups": {
"label": "CUPS",
"test": {
"include": "cups/cups.h",
"main": "cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL); // CUPS 1.4 test"
},
"headers": "cups/cups.h",
"sources": [
"-lcups"
]