summaryrefslogtreecommitdiffstats
path: root/util/cmake/helper.py
diff options
context:
space:
mode:
Diffstat (limited to 'util/cmake/helper.py')
-rw-r--r--util/cmake/helper.py740
1 files changed, 740 insertions, 0 deletions
diff --git a/util/cmake/helper.py b/util/cmake/helper.py
new file mode 100644
index 0000000000..091b619201
--- /dev/null
+++ b/util/cmake/helper.py
@@ -0,0 +1,740 @@
+#############################################################################
+##
+## Copyright (C) 2018 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the plugins of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:GPL-EXCEPT$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 3 as published by the Free Software
+## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+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] = [],
+ appendFoundSuffix: bool = True,
+ emit_if: str = "",
+ ) -> None:
+ self.soName = soName
+ self.packageName = packageName
+ self.resultVariable = resultVariable
+ self.appendFoundSuffix = appendFoundSuffix
+ self.extra = extra
+ self.targetName = targetName
+
+ # 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
+
+ def is_qt(self) -> bool:
+ return self.packageName == "Qt" or self.packageName == "Qt5" or self.packageName == "Qt6"
+
+
+_qt_library_map = [
+ # Qt:
+ LibraryMapping(
+ "accessibility_support",
+ "Qt6",
+ "Qt::AccessibilitySupport",
+ extra=["COMPONENTS", "AccessibilitySupport"],
+ ),
+ LibraryMapping(
+ "androidextras", "Qt6", "Qt::AndroidExtras", extra=["COMPONENTS", "AndroidExtras"]
+ ),
+ LibraryMapping("animation", "Qt6", "Qt::3DAnimation", extra=["COMPONENTS", "3DAnimation"]),
+ LibraryMapping(
+ "application-lib", "Qt6", "Qt::AppManApplication", extra=["COMPONENTS", "AppManApplication"]
+ ),
+ LibraryMapping("bluetooth", "Qt6", "Qt::Bluetooth", extra=["COMPONENTS", "Bluetooth"]),
+ LibraryMapping("bootstrap", "Qt6", "Qt::Bootstrap", extra=["COMPONENTS", "Bootstrap"]),
+ # bootstrap-dbus: Not needed in Qt6!
+ LibraryMapping("client", "Qt6", "Qt::WaylandClient", extra=["COMPONENTS", "WaylandClient"]),
+ LibraryMapping(
+ "clipboard_support", "Qt6", "Qt::ClipboardSupport", extra=["COMPONENTS", "ClipboardSupport"]
+ ),
+ LibraryMapping("coap", "Qt6", "Qt::Coap", extra=["COMPONENTS", "Coap"]),
+ LibraryMapping("common-lib", "Qt6", "Qt::AppManCommon", extra=["COMPONENTS", "AppManCommon"]),
+ LibraryMapping(
+ "compositor", "Qt6", "Qt::WaylandCompositor", extra=["COMPONENTS", "WaylandCompositor"]
+ ),
+ LibraryMapping("concurrent", "Qt6", "Qt::Concurrent", extra=["COMPONENTS", "Concurrent"]),
+ LibraryMapping("container", "Qt6", "Qt::AxContainer", extra=["COMPONENTS", "AxContainer"]),
+ LibraryMapping("control", "Qt6", "Qt::AxServer", extra=["COMPONENTS", "AxServer"]),
+ LibraryMapping(
+ "core_headers", "Qt6", "Qt::WebEngineCore", extra=["COMPONENTS", "WebEngineCore"]
+ ),
+ LibraryMapping("core", "Qt6", "Qt::Core", extra=["COMPONENTS", "Core"]),
+ LibraryMapping("coretest", "Qt6", "Qt::3DCoreTest", extra=["COMPONENTS", "3DCoreTest"]),
+ LibraryMapping("crypto-lib", "Qt6", "Qt::AppManCrypto", extra=["COMPONENTS", "AppManCrypto"]),
+ LibraryMapping("dbus", "Qt6", "Qt::DBus", extra=["COMPONENTS", "DBus"]),
+ LibraryMapping("designer", "Qt6", "Qt::Designer", extra=["COMPONENTS", "Designer"]),
+ LibraryMapping(
+ "designercomponents",
+ "Qt6",
+ "Qt::DesignerComponents",
+ extra=["COMPONENTS", "DesignerComponents"],
+ ),
+ LibraryMapping(
+ "devicediscovery",
+ "Qt6",
+ "Qt::DeviceDiscoverySupport",
+ extra=["COMPONENTS", "DeviceDiscoverySupport"],
+ ),
+ LibraryMapping(
+ "devicediscovery_support",
+ "Qt6",
+ "Qt::DeviceDiscoverySupport",
+ extra=["COMPONENTS", "DeviceDiscoverySupport"],
+ ),
+ LibraryMapping("edid", "Qt6", "Qt::EdidSupport", extra=["COMPONENTS", "EdidSupport"]),
+ LibraryMapping("edid_support", "Qt6", "Qt::EdidSupport", extra=["COMPONENTS", "EdidSupport"]),
+ LibraryMapping("eglconvenience", "Qt6", "Qt::EglSupport", extra=["COMPONENTS", "EglSupport"]),
+ LibraryMapping(
+ "eglfsdeviceintegration",
+ "Qt6",
+ "Qt::EglFSDeviceIntegration",
+ extra=["COMPONENTS", "EglFSDeviceIntegration"],
+ ),
+ LibraryMapping(
+ "eglfs_kms_support", "Qt6", "Qt::EglFsKmsSupport", extra=["COMPONENTS", "EglFsKmsSupport"]
+ ),
+ LibraryMapping("egl_support", "Qt6", "Qt::EglSupport", extra=["COMPONENTS", "EglSupport"]),
+ # enginio: Not needed in Qt6!
+ LibraryMapping(
+ "eventdispatchers",
+ "Qt6",
+ "Qt::EventDispatcherSupport",
+ extra=["COMPONENTS", "EventDispatcherSupport"],
+ ),
+ LibraryMapping(
+ "eventdispatcher_support",
+ "Qt6",
+ "Qt::EventDispatcherSupport",
+ extra=["COMPONENTS", "EventDispatcherSupport"],
+ ),
+ LibraryMapping("extras", "Qt6", "Qt::3DExtras", extra=["COMPONENTS", "3DExtras"]),
+ LibraryMapping("fbconvenience", "Qt6", "Qt::FbSupport", extra=["COMPONENTS", "FbSupport"]),
+ LibraryMapping("fb_support", "Qt6", "Qt::FbSupport", extra=["COMPONENTS", "FbSupport"]),
+ LibraryMapping(
+ "fontdatabase_support",
+ "Qt6",
+ "Qt::FontDatabaseSupport",
+ extra=["COMPONENTS", "FontDatabaseSupport"],
+ ),
+ LibraryMapping("gamepad", "Qt6", "Qt::Gamepad", extra=["COMPONENTS", "Gamepad"]),
+ LibraryMapping(
+ "global", "Qt6", "Qt::Core", extra=["COMPONENTS", "Core"]
+ ), # manually added special case
+ LibraryMapping("glx_support", "Qt6", "Qt::GlxSupport", extra=["COMPONENTS", "GlxSupport"]),
+ LibraryMapping(
+ "graphics_support", "Qt6", "Qt::GraphicsSupport", extra=["COMPONENTS", "GraphicsSupport"]
+ ),
+ LibraryMapping(
+ "gsttools", "Qt6", "Qt::MultimediaGstTools", extra=["COMPONENTS", "MultimediaGstTools"]
+ ),
+ LibraryMapping("gui", "Qt6", "Qt::Gui", extra=["COMPONENTS", "Gui"]),
+ LibraryMapping("help", "Qt6", "Qt::Help", extra=["COMPONENTS", "Help"]),
+ LibraryMapping(
+ "hunspellinputmethod",
+ "Qt6",
+ "Qt::HunspellInputMethod",
+ extra=["COMPONENTS", "HunspellInputMethod"],
+ ),
+ LibraryMapping("input", "Qt6", "Qt::InputSupport", extra=["COMPONENTS", "InputSupport"]),
+ LibraryMapping(
+ "input_support", "Qt6", "Qt::InputSupport", extra=["COMPONENTS", "InputSupport"]
+ ),
+ LibraryMapping(
+ "installer-lib", "Qt6", "Qt::AppManInstaller", extra=["COMPONENTS", "AppManInstaller"]
+ ),
+ LibraryMapping("knx", "Qt6", "Qt::Knx", extra=["COMPONENTS", "Knx"]),
+ LibraryMapping("kmsconvenience", "Qt6", "Qt::KmsSupport", extra=["COMPONENTS", "KmsSupport"]),
+ LibraryMapping("kms_support", "Qt6", "Qt::KmsSupport", extra=["COMPONENTS", "KmsSupport"]),
+ LibraryMapping(
+ "launcher-lib", "Qt6", "Qt::AppManLauncher", extra=["COMPONENTS", "AppManLauncher"]
+ ),
+ LibraryMapping("lib", "Qt6", "Qt::Designer", extra=["COMPONENTS", "Designer"]),
+ LibraryMapping(
+ "linuxaccessibility_support",
+ "Qt6",
+ "Qt::LinuxAccessibilitySupport",
+ extra=["COMPONENTS", "LinuxAccessibilitySupport"],
+ ),
+ LibraryMapping("location", "Qt6", "Qt::Location", extra=["COMPONENTS", "Location"]),
+ LibraryMapping("logic", "Qt6", "Qt::3DLogic", extra=["COMPONENTS", "3DLogic"]),
+ LibraryMapping("macextras", "Qt6", "Qt::MacExtras", extra=["COMPONENTS", "MacExtras"]),
+ LibraryMapping("main-lib", "Qt6", "Qt::AppManMain", extra=["COMPONENTS", "AppManMain"]),
+ LibraryMapping(
+ "manager-lib", "Qt6", "Qt::AppManManager", extra=["COMPONENTS", "AppManManager"]
+ ),
+ LibraryMapping(
+ "monitor-lib", "Qt6", "Qt::AppManMonitor", extra=["COMPONENTS", "AppManMonitor"]
+ ),
+ LibraryMapping("mqtt", "Qt6", "Qt::Mqtt", extra=["COMPONENTS", "Mqtt"]),
+ LibraryMapping("multimedia", "Qt6", "Qt::Multimedia", extra=["COMPONENTS", "Multimedia"]),
+ LibraryMapping(
+ "multimediawidgets",
+ "Qt6",
+ "Qt::MultimediaWidgets",
+ extra=["COMPONENTS", "MultimediaWidgets"],
+ ),
+ LibraryMapping("network", "Qt6", "Qt::Network", extra=["COMPONENTS", "Network"]),
+ LibraryMapping("networkauth", "Qt6", "Qt::NetworkAuth", extra=["COMPONENTS", "NetworkAuth"]),
+ LibraryMapping("nfc", "Qt6", "Qt::Nfc", extra=["COMPONENTS", "Nfc"]),
+ LibraryMapping("oauth", "Qt6", "Qt::NetworkAuth", extra=["COMPONENTS", "NetworkAuth"]),
+ LibraryMapping(
+ "openglextensions", "Qt6", "Qt::OpenGLExtensions", extra=["COMPONENTS", "OpenGLExtensions"]
+ ),
+ LibraryMapping("opengl", "Qt6", "Qt::OpenGL", extra=["COMPONENTS", "OpenGL"]),
+ LibraryMapping(
+ "package-lib", "Qt6", "Qt::AppManPackage", extra=["COMPONENTS", "AppManPackage"]
+ ),
+ LibraryMapping(
+ "packetprotocol", "Qt6", "Qt::PacketProtocol", extra=["COMPONENTS", "PacketProtocol"]
+ ),
+ LibraryMapping(
+ "particles", "Qt6", "Qt::QuickParticles", extra=["COMPONENTS", "QuickParticles"]
+ ),
+ LibraryMapping(
+ "platformcompositor",
+ "Qt6",
+ "Qt::PlatformCompositorSupport",
+ extra=["COMPONENTS", "PlatformCompositorSupport"],
+ ),
+ LibraryMapping(
+ "platformcompositor_support",
+ "Qt6",
+ "Qt::PlatformCompositorSupport",
+ extra=["COMPONENTS", "PlatformCompositorSupport"],
+ ),
+ LibraryMapping(
+ "plugin-interfaces",
+ "Qt6",
+ "Qt::AppManPluginInterfaces",
+ extra=["COMPONENTS", "AppManPluginInterfaces"],
+ ),
+ LibraryMapping("positioning", "Qt6", "Qt::Positioning", extra=["COMPONENTS", "Positioning"]),
+ LibraryMapping(
+ "positioningquick", "Qt6", "Qt::PositioningQuick", extra=["COMPONENTS", "PositioningQuick"]
+ ),
+ LibraryMapping("printsupport", "Qt6", "Qt::PrintSupport", extra=["COMPONENTS", "PrintSupport"]),
+ LibraryMapping("purchasing", "Qt6", "Qt::Purchasing", extra=["COMPONENTS", "Purchasing"]),
+ LibraryMapping("qmldebug", "Qt6", "Qt::QmlDebug", extra=["COMPONENTS", "QmlDebug"]),
+ LibraryMapping("qmldevtools", "Qt6", "Qt::QmlDevTools", extra=["COMPONENTS", "QmlDevTools"]),
+ LibraryMapping("qml", "Qt6", "Qt::Qml", extra=["COMPONENTS", "Qml"]),
+ LibraryMapping("qmlmodels", "Qt6", "Qt::QmlModels", extra=["COMPONENTS", "QmlModels"]),
+ LibraryMapping("qmltest", "Qt6", "Qt::QuickTest", extra=["COMPONENTS", "QuickTest"]),
+ LibraryMapping(
+ "qtmultimediaquicktools",
+ "Qt6",
+ "Qt::MultimediaQuick",
+ extra=["COMPONENTS", "MultimediaQuick"],
+ ),
+ LibraryMapping(
+ "quick3dassetimport",
+ "Qt6",
+ "Qt::Quick3DAssetImport",
+ extra=["COMPONENTS", "Quick3DAssetImport"],
+ ),
+ LibraryMapping("quick3d", "Qt6", "Qt::Quick3D", extra=["COMPONENTS", "Quick3D"]),
+ LibraryMapping(
+ "quick3drender", "Qt6", "Qt::Quick3DRender", extra=["COMPONENTS", "Quick3DRender"]
+ ),
+ LibraryMapping(
+ "quick3druntimerender",
+ "Qt6",
+ "Qt::Quick3DRuntimeRender",
+ extra=["COMPONENTS", "Quick3DRuntimeRender"],
+ ),
+ LibraryMapping("quick3dutils", "Qt6", "Qt::Quick3DUtils", extra=["COMPONENTS", "Quick3DUtils"]),
+ LibraryMapping(
+ "quickcontrols2", "Qt6", "Qt::QuickControls2", extra=["COMPONENTS", "QuickControls2"]
+ ),
+ LibraryMapping("quick", "Qt6", "Qt::Quick", extra=["COMPONENTS", "Quick"]),
+ LibraryMapping("quickshapes", "Qt6", "Qt::QuickShapes", extra=["COMPONENTS", "QuickShapes"]),
+ LibraryMapping(
+ "quicktemplates2", "Qt6", "Qt::QuickTemplates2", extra=["COMPONENTS", "QuickTemplates2"]
+ ),
+ LibraryMapping("quickwidgets", "Qt6", "Qt::QuickWidgets", extra=["COMPONENTS", "QuickWidgets"]),
+ LibraryMapping("render", "Qt6", "Qt::3DRender", extra=["COMPONENTS", "3DRender"]),
+ LibraryMapping(
+ "remoteobjects", "Qt6", "Qt::RemoteObjects", extra=["COMPONENTS", "RemoteObjects"]
+ ),
+ LibraryMapping("script", "Qt6", "Qt::Script", extra=["COMPONENTS", "Script"]),
+ LibraryMapping("scripttools", "Qt6", "Qt::ScriptTools", extra=["COMPONENTS", "ScriptTools"]),
+ LibraryMapping("scxml", "Qt6", "Qt::Scxml", extra=["COMPONENTS", "Scxml"]),
+ LibraryMapping("sensors", "Qt6", "Qt::Sensors", extra=["COMPONENTS", "Sensors"]),
+ LibraryMapping("serialport", "Qt6", "Qt::SerialPort", extra=["COMPONENTS", "SerialPort"]),
+ LibraryMapping("serialbus", "Qt6", "Qt::SerialBus", extra=["COMPONENTS", "SerialBus"]),
+ LibraryMapping("services", "Qt6", "Qt::ServiceSupport", extra=["COMPONENTS", "ServiceSupport"]),
+ LibraryMapping(
+ "service_support", "Qt6", "Qt::ServiceSupport", extra=["COMPONENTS", "ServiceSupport"]
+ ),
+ LibraryMapping("sql", "Qt6", "Qt::Sql", extra=["COMPONENTS", "Sql"]),
+ LibraryMapping("svg", "Qt6", "Qt::Svg", extra=["COMPONENTS", "Svg"]),
+ LibraryMapping("testlib", "Qt6", "Qt::Test", extra=["COMPONENTS", "Test"]),
+ LibraryMapping("texttospeech", "Qt6", "Qt::TextToSpeech", extra=["COMPONENTS", "TextToSpeech"]),
+ LibraryMapping(
+ "theme_support", "Qt6", "Qt::ThemeSupport", extra=["COMPONENTS", "ThemeSupport"]
+ ),
+ LibraryMapping("tts", "Qt6", "Qt::TextToSpeech", extra=["COMPONENTS", "TextToSpeech"]),
+ LibraryMapping("uiplugin", "Qt6", "Qt::UiPlugin", extra=["COMPONENTS", "UiPlugin"]),
+ LibraryMapping("uitools", "Qt6", "Qt::UiTools", extra=["COMPONENTS", "UiTools"]),
+ LibraryMapping(
+ "virtualkeyboard", "Qt6", "Qt::VirtualKeyboard", extra=["COMPONENTS", "VirtualKeyboard"]
+ ),
+ LibraryMapping(
+ "vulkan_support", "Qt6", "Qt::VulkanSupport", extra=["COMPONENTS", "VulkanSupport"]
+ ),
+ LibraryMapping(
+ "waylandclient", "Qt6", "Qt::WaylandClient", extra=["COMPONENTS", "WaylandClient"]
+ ),
+ LibraryMapping(
+ "waylandcompositor",
+ "Qt6",
+ "Qt::WaylandCompositor",
+ extra=["COMPONENTS", "WaylandCompositor"],
+ ),
+ LibraryMapping("webchannel", "Qt6", "Qt::WebChannel", extra=["COMPONENTS", "WebChannel"]),
+ LibraryMapping("webengine", "Qt6", "Qt::WebEngine", extra=["COMPONENTS", "WebEngine"]),
+ LibraryMapping(
+ "webenginewidgets", "Qt6", "Qt::WebEngineWidgets", extra=["COMPONENTS", "WebEngineWidgets"]
+ ),
+ LibraryMapping("websockets", "Qt6", "Qt::WebSockets", extra=["COMPONENTS", "WebSockets"]),
+ LibraryMapping("webview", "Qt6", "Qt::WebView", extra=["COMPONENTS", "WebView"]),
+ LibraryMapping("widgets", "Qt6", "Qt::Widgets", extra=["COMPONENTS", "Widgets"]),
+ LibraryMapping("window-lib", "Qt6", "Qt::AppManWindow", extra=["COMPONENTS", "AppManWindow"]),
+ LibraryMapping(
+ "windowsuiautomation_support",
+ "Qt6",
+ "Qt::WindowsUIAutomationSupport",
+ extra=["COMPONENTS", "WindowsUIAutomationSupport"],
+ ),
+ LibraryMapping("winextras", "Qt6", "Qt::WinExtras", extra=["COMPONENTS", "WinExtras"]),
+ LibraryMapping("x11extras", "Qt6", "Qt::X11Extras", extra=["COMPONENTS", "X11Extras"]),
+ LibraryMapping("xcb_qpa_lib", "Qt6", "Qt::XcbQpa", extra=["COMPONENTS", "XcbQpa"]),
+ LibraryMapping(
+ "xkbcommon_support", "Qt6", "Qt::XkbCommonSupport", extra=["COMPONENTS", "XkbCommonSupport"]
+ ),
+ LibraryMapping("xmlpatterns", "Qt6", "Qt::XmlPatterns", extra=["COMPONENTS", "XmlPatterns"]),
+ LibraryMapping("xml", "Qt6", "Qt::Xml", extra=["COMPONENTS", "Xml"]),
+ LibraryMapping(
+ "qmlworkerscript", "Qt6", "Qt::QmlWorkerScript", extra=["COMPONENTS", "QmlWorkerScript"]
+ ),
+ LibraryMapping(
+ "quickparticles", "Qt6", "Qt::QuickParticles", extra=["COMPONENTS", "QuickParticles"]
+ ),
+ LibraryMapping(
+ "linuxofono_support",
+ "Qt6",
+ "Qt::LinuxOfonoSupport",
+ extra=["COMPONENTS", "LinuxOfonoSupport"],
+ ),
+ LibraryMapping(
+ "linuxofono_support_private",
+ "Qt6",
+ "Qt::LinuxOfonoSupportPrivate",
+ extra=["COMPONENTS", "LinuxOfonoSupportPrivate"],
+ ),
+ LibraryMapping("tools", "Qt6", "Qt::Tools", extra=["COMPONENTS", "Tools"]),
+ LibraryMapping("axcontainer", "Qt6", "Qt::AxContainer", extra=["COMPONENTS", "AxContainer"]),
+ LibraryMapping(
+ "webkitwidgets", "Qt6", "Qt::WebKitWidgets", extra=["COMPONENTS", "WebKitWidgets"]
+ )
+ # qtzlib: No longer supported.
+]
+
+# Note that the library map is adjusted dynamically further down.
+_library_map = [
+ # 3rd party:
+ LibraryMapping("atspi", "ATSPI2", "PkgConfig::ATSPI2"),
+ LibraryMapping("bluez", "BlueZ", "PkgConfig::BlueZ"),
+ 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"),
+ LibraryMapping("doubleconversion", None, None),
+ 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=["REQUIRED"]),
+ LibraryMapping("gbm", "gbm", "gbm::gbm"),
+ LibraryMapping("glib", "GLIB2", "GLIB2::GLIB2"),
+ LibraryMapping("gnu_iconv", None, None),
+ LibraryMapping("gtk3", "GTK3", "PkgConfig::GTK3"),
+ LibraryMapping("gssapi", "GSSAPI", "GSSAPI::GSSAPI"),
+ LibraryMapping("harfbuzz", "WrapHarfbuzz", "WrapHarfbuzz::WrapHarfbuzz"),
+ LibraryMapping("host_dbus", None, None),
+ LibraryMapping(
+ "icu", "ICU", "ICU::i18n ICU::uc ICU::data", extra=["COMPONENTS", "i18n", "uc", "data"]
+ ),
+ LibraryMapping("journald", "Libsystemd", "PkgConfig::Libsystemd"),
+ LibraryMapping("jpeg", "JPEG", "JPEG::JPEG"), # see also libjpeg
+ LibraryMapping("libatomic", "Atomic", "Atomic"),
+ 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", "PNG", "PNG::PNG"),
+ LibraryMapping("libproxy", "Libproxy", "PkgConfig::Libproxy"),
+ LibraryMapping("librt", "WrapRt", "WrapRt"),
+ LibraryMapping("libudev", "Libudev", "PkgConfig::Libudev"),
+ LibraryMapping("lttng-ust", "LTTngUST", "LTTng::UST", resultVariable="LTTNGUST"),
+ LibraryMapping("mtdev", "Mtdev", "PkgConfig::Mtdev"),
+ LibraryMapping("mysql", "MySQL", "MySQL::MySQL"),
+ LibraryMapping("odbc", "ODBC", "ODBC::ODBC"),
+ LibraryMapping("opengl_es2", "GLESv2", "GLESv2::GLESv2"),
+ LibraryMapping("opengl", "OpenGL", "OpenGL::GL", resultVariable="OpenGL_OpenGL"),
+ LibraryMapping(
+ "openssl_headers",
+ "OpenSSL",
+ "OpenSSL::SSL_nolink",
+ resultVariable="OPENSSL_INCLUDE_DIR",
+ appendFoundSuffix=False,
+ ),
+ LibraryMapping("openssl", "OpenSSL", "OpenSSL::SSL"),
+ LibraryMapping("oci", "Oracle", "Oracle::OCI"),
+ LibraryMapping("pcre2", "WrapPCRE2", "WrapPCRE2::WrapPCRE2", extra=["REQUIRED"]),
+ LibraryMapping("posix_iconv", None, None),
+ 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("sun_iconv", None, None),
+ LibraryMapping("tslib", "Tslib", "PkgConfig::Tslib"),
+ LibraryMapping("udev", "Libudev", "PkgConfig::Libudev"),
+ LibraryMapping("udev", "Libudev", "PkgConfig::Libudev"), # see also libudev!
+ LibraryMapping("vulkan", "Vulkan", "Vulkan::Vulkan"),
+ 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.9"],
+ resultVariable="TARGET XCB::XCB",
+ appendFoundSuffix=False,
+ ),
+ LibraryMapping(
+ "xcb_glx", "XCB", "XCB::GLX", extra=["COMPONENTS", "GLX"], resultVariable="XCB_GLX"
+ ),
+ LibraryMapping(
+ "xcb_icccm", "XCB", "XCB::ICCCM", extra=["COMPONENTS", "ICCCM"], resultVariable="XCB_ICCCM"
+ ),
+ LibraryMapping(
+ "xcb_image", "XCB", "XCB::IMAGE", extra=["COMPONENTS", "IMAGE"], resultVariable="XCB_IMAGE"
+ ),
+ LibraryMapping(
+ "xcb_keysyms",
+ "XCB",
+ "XCB::KEYSYMS",
+ extra=["COMPONENTS", "KEYSYMS"],
+ resultVariable="XCB_KEYSYMS",
+ ),
+ LibraryMapping(
+ "xcb_randr", "XCB", "XCB::RANDR", extra=["COMPONENTS", "RANDR"], resultVariable="XCB_RANDR"
+ ),
+ LibraryMapping(
+ "xcb_render",
+ "XCB",
+ "XCB::RENDER",
+ extra=["COMPONENTS", "RENDER"],
+ resultVariable="XCB_RENDER",
+ ),
+ LibraryMapping(
+ "xcb_renderutil",
+ "XCB",
+ "XCB::RENDERUTIL",
+ extra=["COMPONENTS", "RENDERUTIL"],
+ resultVariable="XCB_RENDERUTIL",
+ ),
+ LibraryMapping(
+ "xcb_shape", "XCB", "XCB::SHAPE", extra=["COMPONENTS", "SHAPE"], resultVariable="XCB_SHAPE"
+ ),
+ LibraryMapping(
+ "xcb_shm", "XCB", "XCB::SHM", extra=["COMPONENTS", "SHM"], resultVariable="XCB_SHM"
+ ),
+ LibraryMapping(
+ "xcb_sync", "XCB", "XCB::SYNC", extra=["COMPONENTS", "SYNC"], resultVariable="XCB_SYNC"
+ ),
+ LibraryMapping(
+ "xcb_xfixes",
+ "XCB",
+ "XCB::XFIXES",
+ extra=["COMPONENTS", "XFIXES"],
+ resultVariable="XCB_XFIXES",
+ ),
+ LibraryMapping(
+ "xcb_xinerama",
+ "XCB",
+ "XCB::XINERAMA",
+ extra=["COMPONENTS", "XINERAMA"],
+ resultVariable="XCB_XINERAMA",
+ ),
+ LibraryMapping(
+ "xcb_xinput",
+ "XCB",
+ "XCB::XINPUT",
+ extra=["COMPONENTS", "XINPUT"],
+ resultVariable="XCB_XINPUT",
+ ),
+ LibraryMapping(
+ "xcb_xkb", "XCB", "XCB::XKB", extra=["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.4.1"]), # see also xkbcommon
+ LibraryMapping("xkbcommon_x11", "XKB", "XKB::XKB", extra=["0.4.1"]), # see also xkbcommon
+ LibraryMapping("xkbcommon", "XKB", "XKB::XKB", extra=["0.4.1"]),
+ LibraryMapping("xlib", "X11", "X11::XCB"), # FIXME: Is this correct?
+ LibraryMapping("xrender", "XRender", "PkgConfig::XRender"),
+ LibraryMapping("zlib", "ZLIB", "ZLIB::ZLIB", extra=["REQUIRED"]),
+ LibraryMapping("zstd", "ZSTD", "ZSTD::ZSTD"),
+ LibraryMapping("tiff", "TIFF", "TIFF::TIFF"),
+ LibraryMapping("webp", "WrapWebP", "WrapWebP::WrapWebP"),
+ LibraryMapping("jasper", "WrapJasper", "WrapJasper::WrapJasper"),
+ LibraryMapping("sdl2", "WrapSDL2", "WrapSDL2::WrapSDL2"),
+]
+
+
+def _adjust_library_map():
+ # Assign a Linux condition on all x and wayland 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 = ["xcb", "x11", "xkb", "xrender", "xlib", "wayland"]
+ 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"
+
+
+_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
+
+
+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",
+ "android-embedded": "ANDROID_EMBEDDED",
+ "uikit": "APPLE_UIKIT",
+ "tvos": "APPLE_TVOS",
+ "watchos": "APPLE_WATCHOS",
+ "winrt": "WINRT",
+ "wasm": "WASM",
+ "emscripten": "EMSCRIPTEN",
+ "msvc": "MSVC",
+ "clang": "CLANG",
+ "gcc": "GCC",
+ "icc": "ICC",
+ "intel_icc": "ICC",
+ "osx": "APPLE_OSX",
+ "ios": "APPLE_IOS",
+ "freebsd": "FREEBSD",
+ "openbsd": "OPENBSD",
+ "netbsd": "NETBSD",
+ "haiku": "HAIKU",
+ "netbsd": "NETBSD",
+ "mac": "APPLE",
+ "macx": "APPLE_OSX",
+ "macos": "APPLE_OSX",
+ "macx-icc": "(APPLE_OSX 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:
+ if lib.endswith("/nolink") or lib.endswith("_nolink"):
+ lib = lib[:-7]
+ mapping = find_3rd_party_library_mapping(lib)
+
+ return mapping is not None
+
+
+def map_3rd_party_library(lib: str) -> str:
+ libpostfix = ""
+ if lib.endswith("/nolink"):
+ lib = lib[:-7]
+ libpostfix = "_nolink"
+ mapping = find_3rd_party_library_mapping(lib)
+ if not mapping or not mapping.targetName:
+ return lib
+ return mapping.targetName + libpostfix
+
+
+def generate_find_package_info(
+ lib: LibraryMapping, use_qt_find_package: bool = True, *, indent: int = 0, emit_if: str = ""
+) -> str:
+ isRequired = False
+
+ extra = lib.extra.copy()
+
+ if "REQUIRED" in extra and use_qt_find_package:
+ isRequired = True
+ 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]
+
+ if cmake_target_name and use_qt_find_package:
+ extra += ["PROVIDED_TARGETS", cmake_target_name]
+
+ result = ""
+ one_ind = " "
+ ind = one_ind * indent
+
+ if use_qt_find_package:
+ if extra:
+ result = f"{ind}qt_find_package({lib.packageName} {' '.join(extra)})\n"
+ else:
+ result = f"{ind}qt_find_package({lib.packageName})\n"
+
+ if isRequired:
+ result += f"{ind}set_package_properties({lib.packageName} PROPERTIES TYPE REQUIRED)\n"
+ else:
+ if extra:
+ result = f"{ind}find_package({lib.packageName} {' '.join(extra)})\n"
+ else:
+ result = f"{ind}find_package({lib.packageName})\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
+
+ pp._defaultStartDebugAction = increase_indent(pp._defaultStartDebugAction)
+ pp._defaultSuccessDebugAction = decrease_indent(pp._defaultSuccessDebugAction)
+ pp._defaultExceptionDebugAction = decrease_indent(pp._defaultExceptionDebugAction)