a310319a04
Rename FindWrapDoubleConversion.cmake into FindWrapSystemDoubleConversion.cmake. Merge contents of Finddouble-conversion.cmake into the one above. This allows users to provide their own Finddouble-conversion.cmake file (Conan can do it). Don't mark the system package as required, because we have a bundled one too. Add link to upstream. Make sure to show either Config file or library path when one is found. Pick-to: 6.2 6.3 6.4 Fixes: QTBUG-104541 Change-Id: I9ea2330697c6fc280328849ca11522291c4073d8 Reviewed-by: Jörg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
863 lines
34 KiB
Python
863 lines
34 KiB
Python
# Copyright (C) 2021 The Qt Company Ltd.
|
|
# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
|
|
|
import re
|
|
import typing
|
|
|
|
|
|
class LibraryMapping:
|
|
def __init__(
|
|
self,
|
|
soName: str,
|
|
packageName: typing.Optional[str],
|
|
targetName: typing.Optional[str],
|
|
*,
|
|
resultVariable: typing.Optional[str] = None,
|
|
extra: typing.List[str] = [],
|
|
components: typing.Optional[typing.List[str]] = None,
|
|
appendFoundSuffix: bool = True,
|
|
emit_if: str = "",
|
|
is_bundled_with_qt: bool = False,
|
|
test_library_overwrite: str = "",
|
|
run_library_test: bool = False,
|
|
no_link_so_name: str = "",
|
|
) -> None:
|
|
self.soName = soName
|
|
self.packageName = packageName
|
|
self.resultVariable = resultVariable
|
|
self.appendFoundSuffix = appendFoundSuffix
|
|
# Allows passing addiitonal arguments to the generated find_package call.
|
|
self.extra = extra
|
|
self.components = components
|
|
self.targetName = targetName
|
|
|
|
# True if qt bundles the library sources as part of Qt.
|
|
self.is_bundled_with_qt = is_bundled_with_qt
|
|
|
|
# if emit_if is non-empty, the generated find_package call
|
|
# for a library will be surrounded by this condition.
|
|
self.emit_if = emit_if
|
|
|
|
# Allow overwriting library name when used with tests. E.g.: _nolink
|
|
# targets do not exist when used during compile tests
|
|
self.test_library_overwrite = test_library_overwrite
|
|
|
|
# Run the library compile test of configure.json
|
|
self.run_library_test = run_library_test
|
|
|
|
# The custom nolink library mapping associated with this one.
|
|
self.no_link_so_name = no_link_so_name
|
|
|
|
def is_qt(self) -> bool:
|
|
return self.packageName == "Qt" or self.packageName == "Qt5" or self.packageName == "Qt6"
|
|
|
|
|
|
_qt_library_map = [
|
|
# Qt:
|
|
LibraryMapping("androidextras", "Qt6", "Qt::AndroidExtras", components=["AndroidExtras"]),
|
|
LibraryMapping("3danimation", "Qt6", "Qt::3DAnimation", components=["3DAnimation"]),
|
|
LibraryMapping("3dcore", "Qt6", "Qt::3DCore", components=["3DCore"]),
|
|
LibraryMapping("3dcoretest", "Qt6", "Qt::3DCoreTest", components=["3DCoreTest"]),
|
|
LibraryMapping("3dextras", "Qt6", "Qt::3DExtras", components=["3DExtras"]),
|
|
LibraryMapping("3dinput", "Qt6", "Qt::3DInput", components=["3DInput"]),
|
|
LibraryMapping("3dlogic", "Qt6", "Qt::3DLogic", components=["3DLogic"]),
|
|
LibraryMapping("3dquick", "Qt6", "Qt::3DQuick", components=["3DQuick"]),
|
|
LibraryMapping("3dquickextras", "Qt6", "Qt::3DQuickExtras", components=["3DQuickExtras"]),
|
|
LibraryMapping("3dquickinput", "Qt6", "Qt::3DQuickInput", components=["3DQuickInput"]),
|
|
LibraryMapping("3dquickrender", "Qt6", "Qt::3DQuickRender", components=["3DQuickRender"]),
|
|
LibraryMapping("3drender", "Qt6", "Qt::3DRender", components=["3DRender"]),
|
|
LibraryMapping(
|
|
"application-lib", "Qt6", "Qt::AppManApplication", components=["AppManApplication"]
|
|
),
|
|
LibraryMapping("axbase", "Qt6", "Qt::AxBasePrivate", components=["AxBasePrivate"]),
|
|
LibraryMapping("axcontainer", "Qt6", "Qt::AxContainer", components=["AxContainer"]),
|
|
LibraryMapping("axserver", "Qt6", "Qt::AxServer", components=["AxServer"]),
|
|
LibraryMapping("bluetooth", "Qt6", "Qt::Bluetooth", components=["Bluetooth"]),
|
|
LibraryMapping("bootstrap", "Qt6", "Qt::Bootstrap", components=["Bootstrap"]),
|
|
# bootstrap-dbus: Not needed in Qt6!
|
|
LibraryMapping("client", "Qt6", "Qt::WaylandClient", components=["WaylandClient"]),
|
|
LibraryMapping("coap", "Qt6", "Qt::Coap", components=["Coap"]),
|
|
LibraryMapping("common-lib", "Qt6", "Qt::AppManCommon", components=["AppManCommon"]),
|
|
LibraryMapping("compositor", "Qt6", "Qt::WaylandCompositor", components=["WaylandCompositor"]),
|
|
LibraryMapping("concurrent", "Qt6", "Qt::Concurrent", components=["Concurrent"]),
|
|
LibraryMapping("container", "Qt6", "Qt::AxContainer", components=["AxContainer"]),
|
|
LibraryMapping("control", "Qt6", "Qt::AxServer", components=["AxServer"]),
|
|
LibraryMapping("core_headers", "Qt6", "Qt::WebEngineCore", components=["WebEngineCore"]),
|
|
LibraryMapping("core", "Qt6", "Qt::Core", components=["Core"]),
|
|
LibraryMapping("crypto-lib", "Qt6", "Qt::AppManCrypto", components=["AppManCrypto"]),
|
|
LibraryMapping("dbus", "Qt6", "Qt::DBus", components=["DBus"]),
|
|
LibraryMapping("designer", "Qt6", "Qt::Designer", components=["Designer"]),
|
|
LibraryMapping(
|
|
"designercomponents",
|
|
"Qt6",
|
|
"Qt::DesignerComponentsPrivate",
|
|
components=["DesignerComponentsPrivate"],
|
|
),
|
|
LibraryMapping(
|
|
"devicediscovery",
|
|
"Qt6",
|
|
"Qt::DeviceDiscoverySupportPrivate",
|
|
components=["DeviceDiscoverySupportPrivate"],
|
|
),
|
|
LibraryMapping(
|
|
"devicediscovery_support",
|
|
"Qt6",
|
|
"Qt::DeviceDiscoverySupportPrivate",
|
|
components=["DeviceDiscoverySupportPrivate"],
|
|
),
|
|
LibraryMapping("edid", "Qt6", "Qt::EdidSupport", components=["EdidSupport"]),
|
|
LibraryMapping("edid_support", "Qt6", "Qt::EdidSupport", components=["EdidSupport"]),
|
|
LibraryMapping("eglconvenience", "Qt6", "Qt::EglSupport", components=["EglSupport"]),
|
|
LibraryMapping(
|
|
"eglfsdeviceintegration",
|
|
"Qt6",
|
|
"Qt::EglFSDeviceIntegrationPrivate",
|
|
components=["EglFSDeviceIntegrationPrivate"],
|
|
),
|
|
LibraryMapping(
|
|
"eglfs_kms_support",
|
|
"Qt6",
|
|
"Qt::EglFsKmsSupportPrivate",
|
|
components=["EglFsKmsSupportPrivate"],
|
|
),
|
|
LibraryMapping(
|
|
"eglfs_kms_gbm_support",
|
|
"Qt6",
|
|
"Qt::EglFsKmsGbmSupportPrivate",
|
|
components=["EglFsKmsGbmSupportPrivate"],
|
|
),
|
|
LibraryMapping("egl_support", "Qt6", "Qt::EglSupport", components=["EglSupport"]),
|
|
# enginio: Not needed in Qt6!
|
|
LibraryMapping(
|
|
"eventdispatchers",
|
|
"Qt6",
|
|
"Qt::EventDispatcherSupport",
|
|
components=["EventDispatcherSupport"],
|
|
),
|
|
LibraryMapping(
|
|
"eventdispatcher_support",
|
|
"Qt6",
|
|
"Qt::EventDispatcherSupport",
|
|
components=["EventDispatcherSupport"],
|
|
),
|
|
LibraryMapping("fbconvenience", "Qt6", "Qt::FbSupportPrivate", components=["FbSupportPrivate"]),
|
|
LibraryMapping("fb_support", "Qt6", "Qt::FbSupportPrivate", components=["FbSupportPrivate"]),
|
|
LibraryMapping(
|
|
"fontdatabase_support",
|
|
"Qt6",
|
|
"Qt::FontDatabaseSupport",
|
|
components=["FontDatabaseSupport"],
|
|
),
|
|
LibraryMapping("gamepad", "Qt6", "Qt::Gamepad", components=["Gamepad"]),
|
|
LibraryMapping("geniviextras", "Qt6", "Qt::GeniviExtras", components=["GeniviExtras"]),
|
|
LibraryMapping("global", "Qt6", "Qt::Core", components=["Core"]), # manually added special case
|
|
LibraryMapping("glx_support", "Qt6", "Qt::GlxSupport", components=["GlxSupport"]),
|
|
LibraryMapping("gsttools", "Qt6", "Qt::MultimediaGstTools", components=["MultimediaGstTools"]),
|
|
LibraryMapping("gui", "Qt6", "Qt::Gui", components=["Gui"]),
|
|
LibraryMapping("help", "Qt6", "Qt::Help", components=["Help"]),
|
|
LibraryMapping(
|
|
"hunspellinputmethod",
|
|
"Qt6",
|
|
"Qt::HunspellInputMethodPrivate",
|
|
components=["HunspellInputMethodPrivate"],
|
|
),
|
|
LibraryMapping("input", "Qt6", "Qt::InputSupportPrivate", components=["InputSupportPrivate"]),
|
|
LibraryMapping(
|
|
"input_support",
|
|
"Qt6",
|
|
"Qt::InputSupportPrivate",
|
|
components=["InputSupportPrivate"],
|
|
),
|
|
LibraryMapping("installer-lib", "Qt6", "Qt::AppManInstaller", components=["AppManInstaller"]),
|
|
LibraryMapping("ivi", "Qt6", "Qt::Ivi", components=["Ivi"]),
|
|
LibraryMapping("ivicore", "Qt6", "Qt::IviCore", components=["IviCore"]),
|
|
LibraryMapping("ivimedia", "Qt6", "Qt::IviMedia", components=["IviMedia"]),
|
|
LibraryMapping("knx", "Qt6", "Qt::Knx", components=["Knx"]),
|
|
LibraryMapping(
|
|
"kmsconvenience", "Qt6", "Qt::KmsSupportPrivate", components=["KmsSupportPrivate"]
|
|
),
|
|
LibraryMapping("kms_support", "Qt6", "Qt::KmsSupportPrivate", components=["KmsSupportPrivate"]),
|
|
LibraryMapping("launcher-lib", "Qt6", "Qt::AppManLauncher", components=["AppManLauncher"]),
|
|
LibraryMapping("lib", "Qt6", "Qt::Designer", components=["Designer"]),
|
|
LibraryMapping(
|
|
"linuxaccessibility_support",
|
|
"Qt6",
|
|
"Qt::LinuxAccessibilitySupport",
|
|
components=["LinuxAccessibilitySupport"],
|
|
),
|
|
LibraryMapping("location", "Qt6", "Qt::Location", components=["Location"]),
|
|
LibraryMapping("macextras", "Qt6", "Qt::MacExtras", components=["MacExtras"]),
|
|
LibraryMapping("main-lib", "Qt6", "Qt::AppManMain", components=["AppManMain"]),
|
|
LibraryMapping("manager-lib", "Qt6", "Qt::AppManManager", components=["AppManManager"]),
|
|
LibraryMapping("monitor-lib", "Qt6", "Qt::AppManMonitor", components=["AppManMonitor"]),
|
|
LibraryMapping("mqtt", "Qt6", "Qt::Mqtt", components=["Mqtt"]),
|
|
LibraryMapping("multimedia", "Qt6", "Qt::Multimedia", components=["Multimedia"]),
|
|
LibraryMapping(
|
|
"multimediawidgets",
|
|
"Qt6",
|
|
"Qt::MultimediaWidgets",
|
|
components=["MultimediaWidgets"],
|
|
),
|
|
LibraryMapping("network", "Qt6", "Qt::Network", components=["Network"]),
|
|
LibraryMapping("networkauth", "Qt6", "Qt::NetworkAuth", components=["NetworkAuth"]),
|
|
LibraryMapping("nfc", "Qt6", "Qt::Nfc", components=["Nfc"]),
|
|
LibraryMapping("oauth", "Qt6", "Qt::NetworkAuth", components=["NetworkAuth"]),
|
|
LibraryMapping("opcua", "Qt6", "Qt::OpcUa", components=["OpcUa"]),
|
|
LibraryMapping("opcua_private", "Qt6", "Qt::OpcUaPrivate", components=["OpcUaPrivate"]),
|
|
LibraryMapping("opengl", "Qt6", "Qt::OpenGL", components=["OpenGL"]),
|
|
LibraryMapping("openglwidgets", "Qt6", "Qt::OpenGLWidgets", components=["OpenGLWidgets"]),
|
|
LibraryMapping("package-lib", "Qt6", "Qt::AppManPackage", components=["AppManPackage"]),
|
|
LibraryMapping(
|
|
"packetprotocol",
|
|
"Qt6",
|
|
"Qt::PacketProtocolPrivate",
|
|
components=["PacketProtocolPrivate"],
|
|
),
|
|
LibraryMapping(
|
|
"particles",
|
|
"Qt6",
|
|
"Qt::QuickParticlesPrivate",
|
|
components=["QuickParticlesPrivate"],
|
|
),
|
|
LibraryMapping(
|
|
"plugin-interfaces",
|
|
"Qt6",
|
|
"Qt::AppManPluginInterfaces",
|
|
components=["AppManPluginInterfaces"],
|
|
),
|
|
LibraryMapping("positioning", "Qt6", "Qt::Positioning", components=["Positioning"]),
|
|
LibraryMapping(
|
|
"positioningquick", "Qt6", "Qt::PositioningQuick", components=["PositioningQuick"]
|
|
),
|
|
LibraryMapping("printsupport", "Qt6", "Qt::PrintSupport", components=["PrintSupport"]),
|
|
LibraryMapping("purchasing", "Qt6", "Qt::Purchasing", components=["Purchasing"]),
|
|
LibraryMapping("qmldebug", "Qt6", "Qt::QmlDebugPrivate", components=["QmlDebugPrivate"]),
|
|
LibraryMapping(
|
|
"qmldevtools", "Qt6", "Qt::QmlDevToolsPrivate", components=["QmlDevToolsPrivate"]
|
|
),
|
|
LibraryMapping(
|
|
"qmlcompiler", "Qt6", "Qt::QmlCompilerPrivate", components=["QmlCompilerPrivate"]
|
|
),
|
|
LibraryMapping("qml", "Qt6", "Qt::Qml", components=["Qml"]),
|
|
LibraryMapping("qmldom", "Qt6", "Qt::QmlDomPrivate", components=["QmlDomPrivate"]),
|
|
LibraryMapping("qmlmodels", "Qt6", "Qt::QmlModels", components=["QmlModels"]),
|
|
LibraryMapping("qmltest", "Qt6", "Qt::QuickTest", components=["QuickTest"]),
|
|
LibraryMapping(
|
|
"qtmultimediaquicktools",
|
|
"Qt6",
|
|
"Qt::MultimediaQuickPrivate",
|
|
components=["MultimediaQuickPrivate"],
|
|
),
|
|
LibraryMapping(
|
|
"quick3dassetimport",
|
|
"Qt6",
|
|
"Qt::Quick3DAssetImport",
|
|
components=["Quick3DAssetImport"],
|
|
),
|
|
LibraryMapping("core5compat", "Qt6", "Qt::Core5Compat", components=["Core5Compat"]),
|
|
LibraryMapping("quick3d", "Qt6", "Qt::Quick3D", components=["Quick3D"]),
|
|
LibraryMapping("quick3drender", "Qt6", "Qt::Quick3DRender", components=["Quick3DRender"]),
|
|
LibraryMapping(
|
|
"quick3druntimerender",
|
|
"Qt6",
|
|
"Qt::Quick3DRuntimeRender",
|
|
components=["Quick3DRuntimeRender"],
|
|
),
|
|
LibraryMapping("quick3dutils", "Qt6", "Qt::Quick3DUtils", components=["Quick3DUtils"]),
|
|
LibraryMapping("quickcontrols2", "Qt6", "Qt::QuickControls2", components=["QuickControls2"]),
|
|
LibraryMapping(
|
|
"quickcontrols2impl",
|
|
"Qt6",
|
|
"Qt::QuickControls2Impl",
|
|
components=["QuickControls2Impl"],
|
|
),
|
|
LibraryMapping("quick", "Qt6", "Qt::Quick", components=["Quick"]),
|
|
LibraryMapping(
|
|
"quickshapes", "Qt6", "Qt::QuickShapesPrivate", components=["QuickShapesPrivate"]
|
|
),
|
|
LibraryMapping("quicktemplates2", "Qt6", "Qt::QuickTemplates2", components=["QuickTemplates2"]),
|
|
LibraryMapping("quickwidgets", "Qt6", "Qt::QuickWidgets", components=["QuickWidgets"]),
|
|
LibraryMapping("remoteobjects", "Qt6", "Qt::RemoteObjects", components=["RemoteObjects"]),
|
|
LibraryMapping("script", "Qt6", "Qt::Script", components=["Script"]),
|
|
LibraryMapping("scripttools", "Qt6", "Qt::ScriptTools", components=["ScriptTools"]),
|
|
LibraryMapping("scxml", "Qt6", "Qt::Scxml", components=["Scxml"]),
|
|
LibraryMapping("sensors", "Qt6", "Qt::Sensors", components=["Sensors"]),
|
|
LibraryMapping("serialport", "Qt6", "Qt::SerialPort", components=["SerialPort"]),
|
|
LibraryMapping("serialbus", "Qt6", "Qt::SerialBus", components=["SerialBus"]),
|
|
LibraryMapping("services", "Qt6", "Qt::ServiceSupport", components=["ServiceSupport"]),
|
|
LibraryMapping("service_support", "Qt6", "Qt::ServiceSupport", components=["ServiceSupport"]),
|
|
LibraryMapping("shadertools", "Qt6", "Qt::ShaderTools", components=["ShaderTools"]),
|
|
LibraryMapping("statemachine", "Qt6", "Qt::StateMachine", components=["StateMachine"]),
|
|
LibraryMapping("sql", "Qt6", "Qt::Sql", components=["Sql"]),
|
|
LibraryMapping("svg", "Qt6", "Qt::Svg", components=["Svg"]),
|
|
LibraryMapping("svgwidgets", "Qt6", "Qt::SvgWidgets", components=["SvgWidgets"]),
|
|
LibraryMapping("charts", "Qt6", "Qt::Charts", components=["Charts"]),
|
|
LibraryMapping("testlib", "Qt6", "Qt::Test", components=["Test"]),
|
|
LibraryMapping("texttospeech", "Qt6", "Qt::TextToSpeech", components=["TextToSpeech"]),
|
|
LibraryMapping("theme_support", "Qt6", "Qt::ThemeSupport", components=["ThemeSupport"]),
|
|
LibraryMapping("tts", "Qt6", "Qt::TextToSpeech", components=["TextToSpeech"]),
|
|
LibraryMapping("uiplugin", "Qt6", "Qt::UiPlugin", components=["UiPlugin"]),
|
|
LibraryMapping("uitools", "Qt6", "Qt::UiTools", components=["UiTools"]),
|
|
LibraryMapping("virtualkeyboard", "Qt6", "Qt::VirtualKeyboard", components=["VirtualKeyboard"]),
|
|
LibraryMapping("waylandclient", "Qt6", "Qt::WaylandClient", components=["WaylandClient"]),
|
|
LibraryMapping(
|
|
"waylandcompositor",
|
|
"Qt6",
|
|
"Qt::WaylandCompositor",
|
|
components=["WaylandCompositor"],
|
|
),
|
|
LibraryMapping("webchannel", "Qt6", "Qt::WebChannel", components=["WebChannel"]),
|
|
LibraryMapping("webengine", "Qt6", "Qt::WebEngine", components=["WebEngine"]),
|
|
LibraryMapping(
|
|
"webenginewidgets", "Qt6", "Qt::WebEngineWidgets", components=["WebEngineWidgets"]
|
|
),
|
|
LibraryMapping("websockets", "Qt6", "Qt::WebSockets", components=["WebSockets"]),
|
|
LibraryMapping("webview", "Qt6", "Qt::WebView", components=["WebView"]),
|
|
LibraryMapping("widgets", "Qt6", "Qt::Widgets", components=["Widgets"]),
|
|
LibraryMapping("window-lib", "Qt6", "Qt::AppManWindow", components=["AppManWindow"]),
|
|
LibraryMapping("winextras", "Qt6", "Qt::WinExtras", components=["WinExtras"]),
|
|
LibraryMapping("x11extras", "Qt6", "Qt::X11Extras", components=["X11Extras"]),
|
|
LibraryMapping("xcb_qpa_lib", "Qt6", "Qt::XcbQpaPrivate", components=["XcbQpaPrivate"]),
|
|
LibraryMapping(
|
|
"xkbcommon_support", "Qt6", "Qt::XkbCommonSupport", components=["XkbCommonSupport"]
|
|
),
|
|
LibraryMapping("xmlpatterns", "Qt6", "Qt::XmlPatterns", components=["XmlPatterns"]),
|
|
LibraryMapping("xml", "Qt6", "Qt::Xml", components=["Xml"]),
|
|
LibraryMapping("qmlworkerscript", "Qt6", "Qt::QmlWorkerScript", components=["QmlWorkerScript"]),
|
|
LibraryMapping(
|
|
"quickparticles",
|
|
"Qt6",
|
|
"Qt::QuickParticlesPrivate",
|
|
components=["QuickParticlesPrivate"],
|
|
),
|
|
LibraryMapping(
|
|
"linuxofono_support",
|
|
"Qt6",
|
|
"Qt::LinuxOfonoSupport",
|
|
components=["LinuxOfonoSupport"],
|
|
),
|
|
LibraryMapping(
|
|
"linuxofono_support_private",
|
|
"Qt6",
|
|
"Qt::LinuxOfonoSupportPrivate",
|
|
components=["LinuxOfonoSupportPrivate"],
|
|
),
|
|
LibraryMapping("tools", "Qt6", "Qt::Tools", components=["Tools"]),
|
|
LibraryMapping("axcontainer", "Qt6", "Qt::AxContainer", components=["AxContainer"]),
|
|
LibraryMapping("webkitwidgets", "Qt6", "Qt::WebKitWidgets", components=["WebKitWidgets"]),
|
|
LibraryMapping("zlib", "Qt6", "Qt::Zlib", components=["Zlib"]),
|
|
LibraryMapping("httpserver", "Qt6", "Qt::HttpServer", components=["HttpServer"]),
|
|
LibraryMapping("sslserver", "Qt6", "Qt::SslServer", components=["HttpServer"]),
|
|
]
|
|
|
|
# Note that the library map is adjusted dynamically further down.
|
|
_library_map = [
|
|
# 3rd party:
|
|
LibraryMapping("atspi", "ATSPI2", "PkgConfig::ATSPI2"),
|
|
LibraryMapping(
|
|
"backtrace", "WrapBacktrace", "WrapBacktrace::WrapBacktrace", emit_if="config.unix"
|
|
),
|
|
LibraryMapping("bluez", "BlueZ", "PkgConfig::BlueZ"),
|
|
LibraryMapping("brotli", "WrapBrotli", "WrapBrotli::WrapBrotliDec"),
|
|
LibraryMapping("corewlan", None, None),
|
|
LibraryMapping("cups", "Cups", "Cups::Cups"),
|
|
LibraryMapping("directfb", "DirectFB", "PkgConfig::DirectFB"),
|
|
LibraryMapping("db2", "DB2", "DB2::DB2"),
|
|
LibraryMapping("dbus", "WrapDBus1", "dbus-1", resultVariable="DBus1", extra=["1.2"]),
|
|
LibraryMapping(
|
|
"doubleconversion", "WrapSystemDoubleConversion",
|
|
"WrapSystemDoubleConversion::WrapSystemDoubleConversion"
|
|
),
|
|
LibraryMapping("dlt", "DLT", "DLT::DLT"),
|
|
LibraryMapping("drm", "Libdrm", "Libdrm::Libdrm"),
|
|
LibraryMapping("egl", "EGL", "EGL::EGL"),
|
|
LibraryMapping("flite", "Flite", "Flite::Flite"),
|
|
LibraryMapping("flite_alsa", "ALSA", "ALSA::ALSA"),
|
|
LibraryMapping(
|
|
"fontconfig", "Fontconfig", "Fontconfig::Fontconfig", resultVariable="FONTCONFIG"
|
|
),
|
|
LibraryMapping(
|
|
"freetype",
|
|
"WrapFreetype",
|
|
"WrapFreetype::WrapFreetype",
|
|
extra=["2.2.0", "REQUIRED"],
|
|
is_bundled_with_qt=True,
|
|
),
|
|
LibraryMapping("gbm", "gbm", "gbm::gbm"),
|
|
LibraryMapping("glib", "GLIB2", "GLIB2::GLIB2"),
|
|
LibraryMapping("iconv", "WrapIconv", "WrapIconv::WrapIconv"),
|
|
LibraryMapping("gtk3", "GTK3", "PkgConfig::GTK3", extra=["3.6"]),
|
|
LibraryMapping("gssapi", "GSSAPI", "GSSAPI::GSSAPI"),
|
|
LibraryMapping(
|
|
"harfbuzz",
|
|
"WrapHarfbuzz",
|
|
"WrapHarfbuzz::WrapHarfbuzz",
|
|
is_bundled_with_qt=True,
|
|
extra=["2.6.0"],
|
|
),
|
|
LibraryMapping("host_dbus", None, None),
|
|
LibraryMapping("icu", "ICU", "ICU::i18n ICU::uc ICU::data", components=["i18n", "uc", "data"]),
|
|
LibraryMapping("journald", "Libsystemd", "PkgConfig::Libsystemd"),
|
|
LibraryMapping("jpeg", "JPEG", "JPEG::JPEG"), # see also libjpeg
|
|
LibraryMapping("libatomic", "WrapAtomic", "WrapAtomic::WrapAtomic"),
|
|
LibraryMapping("libb2", "Libb2", "Libb2::Libb2"),
|
|
LibraryMapping("libclang", "WrapLibClang", "WrapLibClang::WrapLibClang"),
|
|
LibraryMapping("libdl", None, "${CMAKE_DL_LIBS}"),
|
|
LibraryMapping("libinput", "Libinput", "Libinput::Libinput"),
|
|
LibraryMapping("libjpeg", "JPEG", "JPEG::JPEG"), # see also jpeg
|
|
LibraryMapping("libpng", "WrapPNG", "WrapPNG::WrapPNG", is_bundled_with_qt=True),
|
|
LibraryMapping("libproxy", "Libproxy", "PkgConfig::Libproxy"),
|
|
LibraryMapping("librt", "WrapRt", "WrapRt::WrapRt"),
|
|
LibraryMapping("libudev", "Libudev", "PkgConfig::Libudev"),
|
|
LibraryMapping("lttng-ust", "LTTngUST", "LTTng::UST", resultVariable="LTTNGUST"),
|
|
LibraryMapping("libmd4c", "WrapMd4c", "WrapMd4c::WrapMd4c", is_bundled_with_qt=True),
|
|
LibraryMapping("mtdev", "Mtdev", "PkgConfig::Mtdev"),
|
|
LibraryMapping("mysql", "MySQL", "MySQL::MySQL"),
|
|
LibraryMapping("odbc", "ODBC", "ODBC::ODBC"),
|
|
LibraryMapping("opengl_es2", "GLESv2", "GLESv2::GLESv2"),
|
|
LibraryMapping("opengl", "WrapOpenGL", "WrapOpenGL::WrapOpenGL", resultVariable="WrapOpenGL"),
|
|
LibraryMapping(
|
|
"openssl_headers",
|
|
"WrapOpenSSLHeaders",
|
|
"WrapOpenSSLHeaders::WrapOpenSSLHeaders",
|
|
resultVariable="TEST_openssl_headers",
|
|
appendFoundSuffix=False,
|
|
test_library_overwrite="WrapOpenSSLHeaders::WrapOpenSSLHeaders",
|
|
run_library_test=True,
|
|
),
|
|
LibraryMapping(
|
|
"openssl",
|
|
"WrapOpenSSL",
|
|
"WrapOpenSSL::WrapOpenSSL",
|
|
resultVariable="TEST_openssl",
|
|
appendFoundSuffix=False,
|
|
run_library_test=True,
|
|
no_link_so_name="openssl_headers",
|
|
),
|
|
LibraryMapping("oci", "Oracle", "Oracle::OCI"),
|
|
LibraryMapping(
|
|
"pcre2",
|
|
"WrapPCRE2",
|
|
"WrapPCRE2::WrapPCRE2",
|
|
extra=["10.20", "REQUIRED"],
|
|
is_bundled_with_qt=True,
|
|
),
|
|
LibraryMapping("pps", "PPS", "PPS::PPS"),
|
|
LibraryMapping("psql", "PostgreSQL", "PostgreSQL::PostgreSQL"),
|
|
LibraryMapping("slog2", "Slog2", "Slog2::Slog2"),
|
|
LibraryMapping("speechd", "SpeechDispatcher", "SpeechDispatcher::SpeechDispatcher"),
|
|
LibraryMapping("sqlite2", None, None), # No more sqlite2 support in Qt6!
|
|
LibraryMapping("sqlite3", "SQLite3", "SQLite::SQLite3"),
|
|
LibraryMapping("sqlite", "SQLite3", "SQLite::SQLite3"),
|
|
LibraryMapping(
|
|
"taglib", "WrapTagLib", "WrapTagLib::WrapTagLib", is_bundled_with_qt=True
|
|
), # used in qtivi
|
|
LibraryMapping("tslib", "Tslib", "PkgConfig::Tslib"),
|
|
LibraryMapping("udev", "Libudev", "PkgConfig::Libudev"),
|
|
LibraryMapping("udev", "Libudev", "PkgConfig::Libudev"), # see also libudev!
|
|
LibraryMapping("vulkan", "WrapVulkanHeaders", "WrapVulkanHeaders::WrapVulkanHeaders"),
|
|
LibraryMapping("wayland_server", "Wayland", "Wayland::Server"), # used in qtbase/src/gui
|
|
LibraryMapping("wayland-server", "Wayland", "Wayland::Server"), # used in qtwayland
|
|
LibraryMapping("wayland-client", "Wayland", "Wayland::Client"),
|
|
LibraryMapping("wayland-cursor", "Wayland", "Wayland::Cursor"),
|
|
LibraryMapping("wayland-egl", "Wayland", "Wayland::Egl"),
|
|
LibraryMapping(
|
|
"wayland-kms", "Waylandkms", "PkgConfig::Waylandkms"
|
|
), # TODO: check if this actually works
|
|
LibraryMapping("x11", "X11", "X11::X11"),
|
|
LibraryMapping("x11sm", "X11", "${X11_SM_LIB} ${X11_ICE_LIB}", resultVariable="X11_SM"),
|
|
LibraryMapping(
|
|
"xcb",
|
|
"XCB",
|
|
"XCB::XCB",
|
|
extra=["1.11"],
|
|
resultVariable="TARGET XCB::XCB",
|
|
appendFoundSuffix=False,
|
|
),
|
|
LibraryMapping("xcb_glx", "XCB", "XCB::GLX", components=["GLX"], resultVariable="XCB_GLX"),
|
|
LibraryMapping(
|
|
"xcb_icccm",
|
|
"XCB",
|
|
"XCB::ICCCM",
|
|
extra=["0.3.9"],
|
|
components=["ICCCM"],
|
|
resultVariable="XCB_ICCCM",
|
|
),
|
|
LibraryMapping(
|
|
"xcb_image",
|
|
"XCB",
|
|
"XCB::IMAGE",
|
|
extra=["0.3.9"],
|
|
components=["IMAGE"],
|
|
resultVariable="XCB_IMAGE",
|
|
),
|
|
LibraryMapping(
|
|
"xcb_keysyms",
|
|
"XCB",
|
|
"XCB::KEYSYMS",
|
|
extra=["0.3.9"],
|
|
components=["KEYSYMS"],
|
|
resultVariable="XCB_KEYSYMS",
|
|
),
|
|
LibraryMapping(
|
|
"xcb_randr", "XCB", "XCB::RANDR", components=["RANDR"], resultVariable="XCB_RANDR"
|
|
),
|
|
LibraryMapping(
|
|
"xcb_render",
|
|
"XCB",
|
|
"XCB::RENDER",
|
|
components=["RENDER"],
|
|
resultVariable="XCB_RENDER",
|
|
),
|
|
LibraryMapping(
|
|
"xcb_renderutil",
|
|
"XCB",
|
|
"XCB::RENDERUTIL",
|
|
extra=["0.3.9"],
|
|
components=["RENDERUTIL"],
|
|
resultVariable="XCB_RENDERUTIL",
|
|
),
|
|
LibraryMapping(
|
|
"xcb_shape", "XCB", "XCB::SHAPE", components=["SHAPE"], resultVariable="XCB_SHAPE"
|
|
),
|
|
LibraryMapping("xcb_shm", "XCB", "XCB::SHM", components=["SHM"], resultVariable="XCB_SHM"),
|
|
LibraryMapping("xcb_sync", "XCB", "XCB::SYNC", components=["SYNC"], resultVariable="XCB_SYNC"),
|
|
LibraryMapping(
|
|
"xcb_xfixes",
|
|
"XCB",
|
|
"XCB::XFIXES",
|
|
components=["XFIXES"],
|
|
resultVariable="TARGET XCB::XFIXES",
|
|
appendFoundSuffix=False,
|
|
),
|
|
LibraryMapping(
|
|
"xcb-xfixes",
|
|
"XCB",
|
|
"XCB::XFIXES",
|
|
components=["XFIXES"],
|
|
resultVariable="TARGET XCB::XFIXES",
|
|
appendFoundSuffix=False,
|
|
),
|
|
LibraryMapping(
|
|
"xcb_xinput",
|
|
"XCB",
|
|
"XCB::XINPUT",
|
|
extra=["1.12"],
|
|
components=["XINPUT"],
|
|
resultVariable="XCB_XINPUT",
|
|
),
|
|
LibraryMapping("xcb_xkb", "XCB", "XCB::XKB", components=["XKB"], resultVariable="XCB_XKB"),
|
|
LibraryMapping("xcb_xlib", "X11_XCB", "X11::XCB"),
|
|
LibraryMapping("xcomposite", "XComposite", "PkgConfig::XComposite"),
|
|
LibraryMapping("xkbcommon_evdev", "XKB", "XKB::XKB", extra=["0.5.0"]), # see also xkbcommon
|
|
LibraryMapping("xkbcommon_x11", "XKB_COMMON_X11", "PkgConfig::XKB_COMMON_X11", extra=["0.5.0"]),
|
|
LibraryMapping("xkbcommon", "XKB", "XKB::XKB", extra=["0.5.0"]),
|
|
LibraryMapping("xlib", "X11", "X11::X11"),
|
|
LibraryMapping("xrender", "XRender", "PkgConfig::XRender", extra=["0.6"]),
|
|
LibraryMapping("zlib", "WrapZLIB", "WrapZLIB::WrapZLIB", extra=["1.0.8"]),
|
|
LibraryMapping("zstd", "WrapZSTD", "WrapZSTD::WrapZSTD", extra=["1.3"]),
|
|
LibraryMapping("tiff", "TIFF", "TIFF::TIFF"),
|
|
LibraryMapping("webp", "WrapWebP", "WrapWebP::WrapWebP"),
|
|
LibraryMapping("jasper", "WrapJasper", "WrapJasper::WrapJasper"),
|
|
LibraryMapping("mng", "Libmng", "Libmng::Libmng"),
|
|
LibraryMapping("sdl2", "WrapSDL2", "WrapSDL2::WrapSDL2"),
|
|
LibraryMapping("hunspell", "Hunspell", "Hunspell::Hunspell"),
|
|
LibraryMapping(
|
|
"qt3d-assimp",
|
|
"WrapQt3DAssimp",
|
|
"WrapQt3DAssimp::WrapQt3DAssimp",
|
|
extra=["5"],
|
|
run_library_test=True,
|
|
resultVariable="TEST_assimp",
|
|
appendFoundSuffix=False,
|
|
),
|
|
LibraryMapping(
|
|
"quick3d_assimp",
|
|
"WrapQuick3DAssimp",
|
|
"WrapQuick3DAssimp::WrapQuick3DAssimp",
|
|
extra=["5"],
|
|
run_library_test=True,
|
|
resultVariable="TEST_quick3d_assimp",
|
|
appendFoundSuffix=False,
|
|
),
|
|
]
|
|
|
|
|
|
def _adjust_library_map():
|
|
# Assign a Linux condition on all wayland related packages.
|
|
# Assign platforms that have X11 condition on all X11 related packages.
|
|
# We don't want to get pages of package not found messages on
|
|
# Windows and macOS, and this also improves configure time on
|
|
# those platforms.
|
|
linux_package_prefixes = ["wayland"]
|
|
x11_package_prefixes = ["xcb", "x11", "xkb", "xrender", "xlib"]
|
|
for i, _ in enumerate(_library_map):
|
|
if any([_library_map[i].soName.startswith(p) for p in linux_package_prefixes]):
|
|
_library_map[i].emit_if = "config.linux"
|
|
if any([_library_map[i].soName.startswith(p) for p in x11_package_prefixes]):
|
|
_library_map[i].emit_if = "X11_SUPPORTED"
|
|
|
|
|
|
_adjust_library_map()
|
|
|
|
|
|
def find_3rd_party_library_mapping(soName: str) -> typing.Optional[LibraryMapping]:
|
|
for i in _library_map:
|
|
if i.soName == soName:
|
|
return i
|
|
return None
|
|
|
|
|
|
def find_qt_library_mapping(soName: str) -> typing.Optional[LibraryMapping]:
|
|
for i in _qt_library_map:
|
|
if i.soName == soName:
|
|
return i
|
|
return None
|
|
|
|
|
|
def find_library_info_for_target(targetName: str) -> typing.Optional[LibraryMapping]:
|
|
qt_target = targetName
|
|
if targetName.endswith("Private"):
|
|
qt_target = qt_target[:-7]
|
|
|
|
for i in _qt_library_map:
|
|
if i.targetName == qt_target:
|
|
return i
|
|
|
|
for i in _library_map:
|
|
if i.targetName == targetName:
|
|
return i
|
|
|
|
return None
|
|
|
|
|
|
# For a given qmake library (e.g. 'openssl_headers'), check whether this is a fake library used
|
|
# for the /nolink annotation, and return the actual annotated qmake library ('openssl/nolink').
|
|
def find_annotated_qmake_lib_name(lib: str) -> str:
|
|
for entry in _library_map:
|
|
if entry.no_link_so_name == lib:
|
|
return entry.soName + "/nolink"
|
|
return lib
|
|
|
|
|
|
def featureName(name: str) -> str:
|
|
replacement_char = "_"
|
|
if name.startswith("c++"):
|
|
replacement_char = "x"
|
|
return re.sub(r"[^a-zA-Z0-9_]", replacement_char, name)
|
|
|
|
|
|
def map_qt_library(lib: str) -> str:
|
|
private = False
|
|
if lib.endswith("-private"):
|
|
private = True
|
|
lib = lib[:-8]
|
|
mapped = find_qt_library_mapping(lib)
|
|
qt_name = lib
|
|
if mapped:
|
|
assert mapped.targetName # Qt libs must have a target name set
|
|
qt_name = mapped.targetName
|
|
if private:
|
|
qt_name += "Private"
|
|
return qt_name
|
|
|
|
|
|
platform_mapping = {
|
|
"win32": "WIN32",
|
|
"win": "WIN32",
|
|
"unix": "UNIX",
|
|
"darwin": "APPLE",
|
|
"linux": "LINUX",
|
|
"integrity": "INTEGRITY",
|
|
"qnx": "QNX",
|
|
"vxworks": "VXWORKS",
|
|
"hpux": "HPUX",
|
|
"nacl": "NACL",
|
|
"android": "ANDROID",
|
|
"uikit": "UIKIT",
|
|
"tvos": "TVOS",
|
|
"watchos": "WATCHOS",
|
|
"winrt": "WINRT",
|
|
"wasm": "WASM",
|
|
"emscripten": "EMSCRIPTEN",
|
|
"msvc": "MSVC",
|
|
"clang": "CLANG",
|
|
"gcc": "GCC",
|
|
"icc": "ICC",
|
|
"intel_icc": "ICC",
|
|
"osx": "MACOS",
|
|
"ios": "IOS",
|
|
"freebsd": "FREEBSD",
|
|
"openbsd": "OPENBSD",
|
|
"mingw": "MINGW",
|
|
"netbsd": "NETBSD",
|
|
"haiku": "HAIKU",
|
|
"mac": "APPLE",
|
|
"macx": "MACOS",
|
|
"macos": "MACOS",
|
|
"macx-icc": "(MACOS AND ICC)",
|
|
}
|
|
|
|
|
|
def map_platform(platform: str) -> str:
|
|
"""Return the qmake platform as cmake platform or the unchanged string."""
|
|
return platform_mapping.get(platform, platform)
|
|
|
|
|
|
def is_known_3rd_party_library(lib: str) -> bool:
|
|
handling_no_link = False
|
|
if lib.endswith("/nolink") or lib.endswith("_nolink"):
|
|
lib = lib[:-7]
|
|
handling_no_link = True
|
|
mapping = find_3rd_party_library_mapping(lib)
|
|
if handling_no_link and mapping and mapping.no_link_so_name:
|
|
no_link_mapping = find_3rd_party_library_mapping(mapping.no_link_so_name)
|
|
if no_link_mapping:
|
|
mapping = no_link_mapping
|
|
|
|
return mapping is not None
|
|
|
|
|
|
def map_3rd_party_library(lib: str) -> str:
|
|
handling_no_link = False
|
|
libpostfix = ""
|
|
if lib.endswith("/nolink"):
|
|
lib = lib[:-7]
|
|
libpostfix = "_nolink"
|
|
handling_no_link = True
|
|
|
|
mapping = find_3rd_party_library_mapping(lib)
|
|
|
|
if handling_no_link and mapping and mapping.no_link_so_name:
|
|
no_link_mapping = find_3rd_party_library_mapping(mapping.no_link_so_name)
|
|
if no_link_mapping:
|
|
mapping = no_link_mapping
|
|
libpostfix = ""
|
|
|
|
if not mapping or not mapping.targetName:
|
|
return lib
|
|
|
|
return mapping.targetName + libpostfix
|
|
|
|
|
|
compile_test_dependent_library_mapping = {
|
|
"dtls": {"openssl": "openssl_headers"},
|
|
"ocsp": {"openssl": "openssl_headers"},
|
|
}
|
|
|
|
|
|
def get_compile_test_dependent_library_mapping(compile_test_name: str, dependency_name: str):
|
|
if compile_test_name in compile_test_dependent_library_mapping:
|
|
mapping = compile_test_dependent_library_mapping[compile_test_name]
|
|
if dependency_name in mapping:
|
|
return mapping[dependency_name]
|
|
|
|
return dependency_name
|
|
|
|
|
|
def generate_find_package_info(
|
|
lib: LibraryMapping,
|
|
use_qt_find_package: bool = True,
|
|
*,
|
|
indent: int = 0,
|
|
emit_if: str = "",
|
|
use_system_package_name: bool = False,
|
|
remove_REQUIRED_from_extra: bool = True,
|
|
components_required: bool = True,
|
|
module: str = "",
|
|
) -> str:
|
|
isRequired = False
|
|
|
|
extra = lib.extra.copy()
|
|
if lib.components:
|
|
extra.append("COMPONENTS" if components_required else "OPTIONAL_COMPONENTS")
|
|
extra += lib.components
|
|
|
|
if "REQUIRED" in extra and use_qt_find_package:
|
|
isRequired = True
|
|
if remove_REQUIRED_from_extra:
|
|
extra.remove("REQUIRED")
|
|
|
|
cmake_target_name = lib.targetName
|
|
assert cmake_target_name
|
|
|
|
# _nolink or not does not matter at this point:
|
|
if cmake_target_name.endswith("_nolink") or cmake_target_name.endswith("/nolink"):
|
|
cmake_target_name = cmake_target_name[:-7]
|
|
|
|
initial_package_name: str = lib.packageName if lib.packageName else ""
|
|
package_name: str = initial_package_name
|
|
if use_system_package_name:
|
|
replace_args = ["Wrap", "WrapSystem"]
|
|
package_name = package_name.replace(*replace_args) # type: ignore
|
|
cmake_target_name = cmake_target_name.replace(*replace_args) # type: ignore
|
|
|
|
if use_qt_find_package:
|
|
if cmake_target_name:
|
|
extra += ["PROVIDED_TARGETS", cmake_target_name]
|
|
if module:
|
|
extra += ["MODULE_NAME", module]
|
|
extra += ["QMAKE_LIB", find_annotated_qmake_lib_name(lib.soName)]
|
|
|
|
result = ""
|
|
one_ind = " "
|
|
ind = one_ind * indent
|
|
|
|
if use_qt_find_package:
|
|
if extra:
|
|
result = f"{ind}qt_find_package({package_name} {' '.join(extra)})\n"
|
|
else:
|
|
result = f"{ind}qt_find_package({package_name})\n"
|
|
|
|
if isRequired:
|
|
result += (
|
|
f"{ind}set_package_properties({initial_package_name} PROPERTIES TYPE REQUIRED)\n"
|
|
)
|
|
else:
|
|
if extra:
|
|
result = f"{ind}find_package({package_name} {' '.join(extra)})\n"
|
|
else:
|
|
result = f"{ind}find_package({package_name})\n"
|
|
|
|
# If a package should be found only in certain conditions, wrap
|
|
# the find_package call within that condition.
|
|
if emit_if:
|
|
result = f"if(({emit_if}) OR QT_FIND_ALL_PACKAGES_ALWAYS)\n{one_ind}{result}endif()\n"
|
|
|
|
return result
|
|
|
|
|
|
def _set_up_py_parsing_nicer_debug_output(pp):
|
|
indent = -1
|
|
|
|
def increase_indent(fn):
|
|
def wrapper_function(*args):
|
|
nonlocal indent
|
|
indent += 1
|
|
print("> " * indent, end="")
|
|
return fn(*args)
|
|
|
|
return wrapper_function
|
|
|
|
def decrease_indent(fn):
|
|
def wrapper_function(*args):
|
|
nonlocal indent
|
|
print("> " * indent, end="")
|
|
indent -= 1
|
|
return fn(*args)
|
|
|
|
return wrapper_function
|
|
|
|
if hasattr(pp, "_defaultStartDebugAction"):
|
|
pp._defaultStartDebugAction = increase_indent(pp._defaultStartDebugAction)
|
|
pp._defaultSuccessDebugAction = decrease_indent(pp._defaultSuccessDebugAction)
|
|
pp._defaultExceptionDebugAction = decrease_indent(pp._defaultExceptionDebugAction)
|
|
elif hasattr(pp.core, "_default_start_debug_action"):
|
|
pp.core._default_start_debug_action = increase_indent(pp.core._default_start_debug_action)
|
|
pp.core._default_success_debug_action = decrease_indent(
|
|
pp.core._default_success_debug_action
|
|
)
|
|
pp.core._default_exception_debug_action = decrease_indent(
|
|
pp.core._default_exception_debug_action
|
|
)
|