510 lines
19 KiB
JSON
510 lines
19 KiB
JSON
{
|
|
"module": "network",
|
|
"depends": [
|
|
"core"
|
|
],
|
|
"testDir": "../../config.tests",
|
|
|
|
"commandline": {
|
|
"assignments": {
|
|
"OPENSSL_PATH": "openssl.prefix"
|
|
},
|
|
"options": {
|
|
"libproxy": "boolean",
|
|
"openssl": { "type": "optionalString", "values": [ "no", "yes", "linked", "runtime" ] },
|
|
"openssl-linked": { "type": "void", "name": "openssl", "value": "linked" },
|
|
"openssl-runtime": { "type": "void", "name": "openssl", "value": "runtime" },
|
|
"dtls": "boolean",
|
|
"ocsp": "boolean",
|
|
"sctp": "boolean",
|
|
"securetransport": "boolean",
|
|
"schannel": "boolean",
|
|
"ssl": "boolean",
|
|
"system-proxies": "boolean"
|
|
}
|
|
},
|
|
|
|
"libraries": {
|
|
"brotli": {
|
|
"label": "Brotli Decompression",
|
|
"test": {
|
|
"main": [
|
|
"BrotliDecoderState *state = BrotliDecoderCreateInstance(nullptr, nullptr, nullptr);"
|
|
]
|
|
},
|
|
"headers": [
|
|
"brotli/decode.h"
|
|
],
|
|
"sources": [
|
|
{ "type": "pkgConfig", "args": "libbrotlidec" },
|
|
"-lbrotlidec"
|
|
]
|
|
},
|
|
"corewlan": {
|
|
"label": "CoreWLan",
|
|
"export": "",
|
|
"test": {
|
|
"lang": "objc++",
|
|
"include": [ "CoreWLAN/CoreWLAN.h", "CoreWLAN/CWInterface.h" ],
|
|
"main": "[CWInterface interfaceWithName:@\"en2\"];"
|
|
},
|
|
"sources": [
|
|
"-framework CoreWLAN -framework Foundation"
|
|
]
|
|
},
|
|
"network": {
|
|
"sources": [
|
|
{ "type": "makeSpec", "spec": "NETWORK" }
|
|
]
|
|
},
|
|
"libproxy": {
|
|
"label": "libproxy",
|
|
"test": {
|
|
"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"
|
|
]
|
|
},
|
|
"openssl_headers": {
|
|
"label": "OpenSSL Headers",
|
|
"export": "openssl",
|
|
"test": {
|
|
"tail": [
|
|
"#if !defined(OPENSSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER-0 < 0x10101000L",
|
|
"# error OpenSSL >= 1.1.1 is required",
|
|
"#endif",
|
|
"#if !defined(OPENSSL_NO_EC) && !defined(SSL_CTRL_SET_CURVES)",
|
|
"# error OpenSSL was reported as >= 1.1.1 but is missing required features, possibly it is libressl which is unsupported",
|
|
"#endif"
|
|
]
|
|
},
|
|
"headers": [ "openssl/ssl.h", "openssl/opensslv.h" ],
|
|
"sources": [
|
|
{
|
|
"comment": "placeholder for OPENSSL_PATH",
|
|
"libs": ""
|
|
}
|
|
]
|
|
},
|
|
"openssl": {
|
|
"label": "OpenSSL",
|
|
"test": {
|
|
"inherit": "openssl_headers",
|
|
"main": "SSL_free(SSL_new(0));"
|
|
},
|
|
"sources": [
|
|
{ "type": "openssl" },
|
|
{
|
|
"libs": "-lssleay32 -llibeay32 -lUser32 -lWs2_32 -lAdvapi32 -lGdi32",
|
|
"condition": "config.win32"
|
|
},
|
|
{
|
|
"libs": "-llibssl -llibcrypto -lUser32 -lWs2_32 -lAdvapi32 -lCrypt32",
|
|
"condition": "config.msvc"
|
|
},
|
|
{
|
|
"libs": "-lssl_arm64-v8a -lcrypto_arm64-v8a",
|
|
"condition": "config.android"
|
|
},
|
|
{
|
|
"libs": "-lssl -lcrypto",
|
|
"condition": "!config.msvc"
|
|
}
|
|
]
|
|
},
|
|
"gssapi": {
|
|
"label": "KRB5 GSSAPI Support",
|
|
"test": {
|
|
"head": [
|
|
"#if defined(__APPLE__) && (defined(__GNUC__) || defined(__xlC__) || defined(__xlc__))",
|
|
"# include <TargetConditionals.h>",
|
|
"# if defined(TARGET_OS_MAC) && TARGET_OS_MAC",
|
|
"# include <GSS/GSS.h>",
|
|
"# endif",
|
|
"#else",
|
|
"# include <gssapi/gssapi.h>",
|
|
"#endif"
|
|
],
|
|
"main": [
|
|
"gss_ctx_id_t ctx;",
|
|
"gss_context_time(nullptr, ctx, nullptr);"
|
|
]
|
|
},
|
|
"sources": [
|
|
{ "libs": "-framework GSS", "condition": "config.darwin" },
|
|
{ "type": "pkgConfig", "args": "krb5-gssapi" },
|
|
"-lgssapi_krb5"
|
|
]
|
|
}
|
|
},
|
|
|
|
"tests": {
|
|
"getifaddrs": {
|
|
"label": "getifaddrs()",
|
|
"type": "compile",
|
|
"test": {
|
|
"include": [ "sys/types.h", "sys/socket.h", "net/if.h", "ifaddrs.h" ],
|
|
"main": [
|
|
"ifaddrs *list;",
|
|
"getifaddrs(&list);",
|
|
"freeifaddrs(list);"
|
|
]
|
|
},
|
|
"use": "network"
|
|
},
|
|
"ipv6ifname": {
|
|
"label": "IPv6 ifname",
|
|
"type": "compile",
|
|
"test": {
|
|
"include": [ "sys/types.h", "sys/socket.h", "net/if.h" ],
|
|
"main": [
|
|
"char buf[IFNAMSIZ];",
|
|
"if_nametoindex(\"eth0\");",
|
|
"if_indextoname(1, buf);",
|
|
"if_freenameindex(if_nameindex());"
|
|
]
|
|
},
|
|
"use": "network"
|
|
},
|
|
"linux-netlink": {
|
|
"label": "Linux AF_NETLINK sockets",
|
|
"type": "compile",
|
|
"test": {
|
|
"include": [ "asm/types.h", "linux/netlink.h", "linux/rtnetlink.h", "sys/socket.h" ],
|
|
"main": [
|
|
"struct rtattr rta = { };",
|
|
"struct ifinfomsg ifi = {};",
|
|
"struct ifaddrmsg ifa = {};",
|
|
"struct ifa_cacheinfo ci;",
|
|
"ci.ifa_prefered = ci.ifa_valid = 0;",
|
|
"(void)RTM_NEWLINK; (void)RTM_NEWADDR;",
|
|
"(void)IFLA_ADDRESS; (void)IFLA_IFNAME;",
|
|
"(void)IFA_ADDRESS; (void)IFA_LABEL; (void)IFA_CACHEINFO;",
|
|
"(void)(IFA_F_SECONDARY | IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_MANAGETEMPADDR);"
|
|
]
|
|
}
|
|
},
|
|
"sctp": {
|
|
"label": "SCTP support",
|
|
"type": "compile",
|
|
"test": {
|
|
"include": [ "sys/types.h", "sys/socket.h", "netinet/in.h", "netinet/sctp.h" ],
|
|
"main": [
|
|
"sctp_initmsg sctpInitMsg;",
|
|
"socklen_t sctpInitMsgSize = sizeof(sctpInitMsg);",
|
|
"(void) socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP);",
|
|
"(void) getsockopt(-1, SOL_SCTP, SCTP_INITMSG, &sctpInitMsg, &sctpInitMsgSize);"
|
|
]
|
|
},
|
|
"use": "network"
|
|
},
|
|
"dtls": {
|
|
"label": "DTLS support in OpenSSL",
|
|
"type": "compile",
|
|
"test": {
|
|
"include": "openssl/ssl.h",
|
|
"tail": [
|
|
"#if defined(OPENSSL_NO_DTLS) || !defined(DTLS1_2_VERSION)",
|
|
"# error OpenSSL without DTLS support",
|
|
"#endif"
|
|
]
|
|
},
|
|
"use": "openssl"
|
|
},
|
|
"ocsp": {
|
|
"label": "OCSP stapling support in OpenSSL",
|
|
"type": "compile",
|
|
"test": {
|
|
"include": ["openssl/ssl.h", "openssl/ocsp.h"],
|
|
"tail": [
|
|
"#if defined(OPENSSL_NO_OCSP) || defined(OPENSSL_NO_TLSEXT)",
|
|
"# error OpenSSL without OCSP stapling",
|
|
"#endif"
|
|
]
|
|
},
|
|
"use": "openssl"
|
|
},
|
|
"netlistmgr": {
|
|
"label": "Network List Manager",
|
|
"type": "compile",
|
|
"test": {
|
|
"include": [ "netlistmgr.h", "wrl/client.h" ],
|
|
"main": [
|
|
"using namespace Microsoft::WRL;",
|
|
"ComPtr<INetworkListManager> networkListManager;",
|
|
"ComPtr<IConnectionPoint> connectionPoint;",
|
|
"ComPtr<IConnectionPointContainer> connectionPointContainer;",
|
|
"networkListManager.As(&connectionPointContainer);",
|
|
"connectionPointContainer->FindConnectionPoint(IID_INetworkConnectionEvents, &connectionPoint);"
|
|
],
|
|
"qmake": "LIBS += -lOle32"
|
|
}
|
|
}
|
|
},
|
|
|
|
"features": {
|
|
"corewlan": {
|
|
"label": "CoreWLan",
|
|
"condition": "libs.corewlan",
|
|
"emitIf": "config.darwin",
|
|
"output": [ "feature", "privateFeature" ]
|
|
},
|
|
"getifaddrs": {
|
|
"label": "getifaddrs()",
|
|
"condition": "tests.getifaddrs",
|
|
"output": [ "feature" ]
|
|
},
|
|
"ipv6ifname": {
|
|
"label": "IPv6 ifname",
|
|
"condition": "tests.ipv6ifname",
|
|
"output": [ "feature" ]
|
|
},
|
|
"libproxy": {
|
|
"label": "libproxy",
|
|
"autoDetect": false,
|
|
"condition": "libs.libproxy",
|
|
"output": [ "privateFeature" ]
|
|
},
|
|
"linux-netlink": {
|
|
"label": "Linux AF_NETLINK",
|
|
"condition": "config.linux && tests.linux-netlink",
|
|
"output": [ "privateFeature" ]
|
|
},
|
|
"openssl": {
|
|
"label": "OpenSSL",
|
|
"enable": "false",
|
|
"condition": "features.openssl-runtime || features.openssl-linked",
|
|
"output": [
|
|
"privateFeature",
|
|
{ "type": "publicQtConfig", "condition": "!features.openssl-linked" },
|
|
{ "type": "define", "negative": true, "name": "QT_NO_OPENSSL" }
|
|
]
|
|
},
|
|
"openssl-runtime": {
|
|
"autoDetect": "!config.wasm",
|
|
"enable": "input.openssl == 'yes' || input.openssl == 'runtime'",
|
|
"disable": "input.openssl == 'no' || input.openssl == 'linked' || input.ssl == 'no'",
|
|
"condition": "!features.securetransport && !features.schannel && libs.openssl_headers"
|
|
},
|
|
"openssl-linked": {
|
|
"label": " Qt directly linked to OpenSSL",
|
|
"autoDetect": false,
|
|
"enable": "input.openssl == 'linked'",
|
|
"condition": "!features.securetransport && !features.schannel && libs.openssl",
|
|
"output": [
|
|
"privateFeature",
|
|
{ "type": "define", "name": "QT_LINKED_OPENSSL" }
|
|
]
|
|
},
|
|
"securetransport": {
|
|
"label": "SecureTransport",
|
|
"disable": "input.securetransport == 'no' || input.ssl == 'no'",
|
|
"condition": "config.darwin && (input.openssl == '' || input.openssl == 'no')",
|
|
"output": [
|
|
"publicFeature",
|
|
{ "type": "define", "name": "QT_SECURETRANSPORT" }
|
|
]
|
|
},
|
|
"schannel": {
|
|
"label": "Schannel",
|
|
"disable": "input.schannel == 'no' || input.ssl == 'no'",
|
|
"condition": "input.schannel == 'yes' && config.win32 && (input.openssl == '' || input.openssl == 'no')",
|
|
"output": [
|
|
"publicFeature",
|
|
{ "type": "define", "name": "QT_SCHANNEL" }
|
|
]
|
|
},
|
|
"ssl": {
|
|
"label": "SSL",
|
|
"condition": "features.securetransport || features.openssl || features.schannel",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"dtls": {
|
|
"label": "DTLS",
|
|
"purpose": "Provides a DTLS implementation",
|
|
"section": "Networking",
|
|
"condition": "features.openssl && features.udpsocket && tests.dtls",
|
|
"output": [ "publicFeature" ]
|
|
},
|
|
"ocsp": {
|
|
"label": "OCSP-stapling",
|
|
"purpose": "Provides OCSP stapling support",
|
|
"section": "Networking",
|
|
"condition": "features.opensslv11 && tests.ocsp",
|
|
"output": [ "publicFeature" ]
|
|
},
|
|
"opensslv11": {
|
|
"label": "OpenSSL 1.1",
|
|
"condition": "features.openssl",
|
|
"output": [ "publicFeature" ]
|
|
},
|
|
"sctp": {
|
|
"label": "SCTP",
|
|
"autoDetect": false,
|
|
"condition": "tests.sctp",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"system-proxies": {
|
|
"label": "Use system proxies",
|
|
"output": [ "privateFeature" ]
|
|
},
|
|
"ftp": {
|
|
"label": "FTP",
|
|
"purpose": "Provides support for the File Transfer Protocol in QNetworkAccessManager.",
|
|
"section": "Networking",
|
|
"autoDetect": false,
|
|
"condition": "features.textdate && features.regularexpression",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"http": {
|
|
"label": "HTTP",
|
|
"purpose": "Provides support for the Hypertext Transfer Protocol in QNetworkAccessManager.",
|
|
"section": "Networking",
|
|
"condition": "features.thread",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"udpsocket": {
|
|
"label": "QUdpSocket",
|
|
"purpose": "Provides access to UDP sockets.",
|
|
"section": "Networking",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"networkproxy": {
|
|
"label": "QNetworkProxy",
|
|
"purpose": "Provides network proxy support.",
|
|
"section": "Networking",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"socks5": {
|
|
"label": "SOCKS5",
|
|
"purpose": "Provides SOCKS5 support in QNetworkProxy.",
|
|
"section": "Networking",
|
|
"condition": "features.networkproxy",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"networkinterface": {
|
|
"label": "QNetworkInterface",
|
|
"purpose": "Supports enumerating a host's IP addresses and network interfaces.",
|
|
"condition": "!config.wasm",
|
|
"section": "Networking",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"networkdiskcache": {
|
|
"label": "QNetworkDiskCache",
|
|
"purpose": "Provides a disk cache for network resources.",
|
|
"section": "Networking",
|
|
"condition": "features.temporaryfile",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"brotli": {
|
|
"label": "Brotli Decompression Support",
|
|
"purpose": "Support for downloading and decompressing resources compressed with Brotli through QNetworkAccessManager.",
|
|
"section": "Networking",
|
|
"condition": "libs.brotli",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"localserver": {
|
|
"label": "QLocalServer",
|
|
"purpose": "Provides a local socket based server.",
|
|
"section": "Networking",
|
|
"condition": "features.temporaryfile",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"dnslookup": {
|
|
"label": "QDnsLookup",
|
|
"purpose": "Provides API for DNS lookups.",
|
|
"section": "Networking",
|
|
"output": [ "publicFeature" ]
|
|
},
|
|
"gssapi": {
|
|
"label": "GSSAPI",
|
|
"purpose": "Enable SPNEGO authentication through GSSAPI",
|
|
"section": "Networking",
|
|
"condition": "!config.win32 && libs.gssapi",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"sspi": {
|
|
"label": "SSPI",
|
|
"purpose": "Enable NTLM/SPNEGO authentication through SSPI",
|
|
"section": "Networking",
|
|
"condition": "config.win32",
|
|
"output": [ "publicFeature", "feature" ]
|
|
},
|
|
"netlistmgr": {
|
|
"label": "Network List Manager",
|
|
"purpose": "Use Network List Manager to keep track of network connectivity",
|
|
"section": "Networking",
|
|
"condition": "config.win32 && tests.netlistmgr",
|
|
"output": [ "privateFeature" ]
|
|
},
|
|
"topleveldomain": {
|
|
"label": "qTopLevelDomain()",
|
|
"purpose": "Provides support for extracting the top level domain from URLs. If enabled, a binary dump of the Public Suffix List (http://www.publicsuffix.org, Mozilla License) is included. The data is then also used in QNetworkCookieJar::validateCookie.",
|
|
"section": "Networking",
|
|
"output": [ "publicFeature" ]
|
|
}
|
|
},
|
|
|
|
"report": [
|
|
{
|
|
"type": "note",
|
|
"condition": "!config.android && features.openssl-linked && libs.openssl.source != 0
|
|
&& input.openssl.prefix == '' && input.openssl.libs == '' && input.openssl.libs.debug == ''",
|
|
"message": "When linking against OpenSSL, you can override the default
|
|
library names through OPENSSL_LIBS.
|
|
For example:
|
|
OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked"
|
|
},
|
|
{
|
|
"type": "warning",
|
|
"condition": "features.libproxy && input.qt_namespace == ''",
|
|
"message": "Some of libproxy's plugins may use incompatible Qt versions. Some platforms and distributions ship libproxy with plugins, such as config_kde4.so, that are linked against old versions of Qt; and libproxy loads these plugins automatically when initialized. If Qt is not in a namespace, that loading causes a crash. Even if the systems on which you build and test have no such plugins, your users' systems may have them. We therefore recommend that you combine -libproxy with -qtnamespace when configuring Qt."
|
|
}
|
|
],
|
|
|
|
"summary": [
|
|
{
|
|
"section": "Qt Network",
|
|
"entries": [
|
|
{
|
|
"type": "feature",
|
|
"args": "corewlan",
|
|
"condition": "config.darwin"
|
|
},
|
|
"getifaddrs", "ipv6ifname", "libproxy",
|
|
{
|
|
"type": "feature",
|
|
"args": "linux-netlink",
|
|
"condition": "config.linux"
|
|
},
|
|
{
|
|
"type": "feature",
|
|
"args": "securetransport",
|
|
"condition": "config.darwin"
|
|
},
|
|
{
|
|
"type": "feature",
|
|
"args": "schannel",
|
|
"condition": "config.win32"
|
|
},
|
|
"openssl",
|
|
"openssl-linked",
|
|
"opensslv11",
|
|
"dtls",
|
|
"ocsp",
|
|
"ftp",
|
|
"sctp",
|
|
"system-proxies",
|
|
"gssapi",
|
|
"brotli"
|
|
]
|
|
}
|
|
]
|
|
}
|