qt512.qtbase: Refresh patches
This commit is contained in:
parent
7aab7ed9ef
commit
ec9e7e4a0c
16 changed files with 1396 additions and 1992 deletions
|
@ -50,11 +50,21 @@ let
|
|||
};
|
||||
|
||||
patches = {
|
||||
qtbase = [
|
||||
./qtbase.patch
|
||||
./qtbase-fixguicmake.patch
|
||||
./qtbase-trayicons.patch # can be removed with 5.12.4 or 5.13
|
||||
];
|
||||
qtbase =
|
||||
optionals stdenv.isDarwin [
|
||||
./qtbase.patch.d/0001-qtbase-mkspecs-mac.patch
|
||||
./qtbase.patch.d/0002-qtbase-mac.patch
|
||||
]
|
||||
++ [
|
||||
./qtbase.patch.d/0003-qtbase-mkspecs.patch
|
||||
./qtbase.patch.d/0004-qtbase-cmake.patch
|
||||
./qtbase.patch.d/0005-qtbase-gtk3.patch
|
||||
./qtbase.patch.d/0006-qtbase-xcursor.patch
|
||||
./qtbase.patch.d/0007-qtbase-xcompose.patch
|
||||
./qtbase.patch.d/0008-qtbase-tzdir.patch
|
||||
./qtbase.patch.d/0009-qtbase-qtpluginpath.patch
|
||||
./qtbase.patch.d/0010-qtbase-assert.patch
|
||||
];
|
||||
qtdeclarative = [ ./qtdeclarative.patch ];
|
||||
qtscript = [ ./qtscript.patch ];
|
||||
qtserialport = [ ./qtserialport.patch ];
|
||||
|
@ -68,10 +78,6 @@ let
|
|||
./qtwebkit-darwin-no-qos-classes.patch
|
||||
];
|
||||
qttools = [ ./qttools.patch ];
|
||||
qtwayland = [
|
||||
./qtwayland-fix-webengine-freezeups-1.patch # can be removed with 5.12.4 or 5.13
|
||||
./qtwayland-fix-webengine-freezeups-2.patch # can be removed with 5.12.4 or 5.13
|
||||
];
|
||||
};
|
||||
|
||||
qtModule =
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
|
||||
index 0bbc871..3673634 100644
|
||||
--- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
|
||||
+++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
|
||||
@@ -286,7 +286,7 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
|
||||
macro(_populate_$${CMAKE_MODULE_NAME}_plugin_properties Plugin Configuration PLUGIN_LOCATION)
|
||||
set_property(TARGET Qt5::${Plugin} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
|
||||
|
||||
- set(imported_location \"$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\")
|
||||
+ set(imported_location \"${PLUGIN_LOCATION}\")
|
||||
_qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location})
|
||||
set_target_properties(Qt5::${Plugin} PROPERTIES
|
||||
\"IMPORTED_LOCATION_${Configuration}\" ${imported_location}
|
||||
diff --git a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in
|
||||
index 5baf0fd..3583745 100644
|
||||
--- a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in
|
||||
+++ b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in
|
||||
@@ -2,10 +2,10 @@
|
||||
add_library(Qt5::$$CMAKE_PLUGIN_NAME MODULE IMPORTED)
|
||||
|
||||
!!IF !isEmpty(CMAKE_RELEASE_TYPE)
|
||||
-_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME RELEASE \"$${CMAKE_PLUGIN_LOCATION_RELEASE}\")
|
||||
+_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME RELEASE \"$${CMAKE_PLUGIN_DIR}$${CMAKE_PLUGIN_LOCATION_RELEASE}\")
|
||||
!!ENDIF
|
||||
!!IF !isEmpty(CMAKE_DEBUG_TYPE)
|
||||
-_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME DEBUG \"$${CMAKE_PLUGIN_LOCATION_DEBUG}\")
|
||||
+_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME DEBUG \"$${CMAKE_PLUGIN_DIR}$${CMAKE_PLUGIN_LOCATION_DEBUG}\")
|
||||
!!ENDIF
|
||||
|
||||
list(APPEND Qt5$${CMAKE_MODULE_NAME}_PLUGINS Qt5::$$CMAKE_PLUGIN_NAME)
|
|
@ -1,175 +0,0 @@
|
|||
From 4d5e59c54a805ba4e7311fe58c9adc492ca1b35a Mon Sep 17 00:00:00 2001
|
||||
From: Alexander Volkov <a.volkov@rusbitech.ru>
|
||||
Date: Mon, 4 Feb 2019 18:42:35 +0300
|
||||
Subject: [PATCH] QSystemTrayIcon/X11: Create tray icon window when system tray
|
||||
appears
|
||||
|
||||
... and destroy it otherwise.
|
||||
|
||||
Fixes: QTBUG-61898
|
||||
Fixes: QTBUG-73459
|
||||
Done-with: Gatis Paeglis <gatis.paeglis@qt.io>
|
||||
Change-Id: I6bd8f397f7ccdb123f6a60d4fa466f7b0d760dfc
|
||||
---
|
||||
src/widgets/util/qsystemtrayicon_p.h | 4 ++
|
||||
src/widgets/util/qsystemtrayicon_x11.cpp | 75 ++++++++++++++++++++++----------
|
||||
2 files changed, 57 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/src/widgets/util/qsystemtrayicon_p.h b/src/widgets/util/qsystemtrayicon_p.h
|
||||
index 5bdf020a472..e31532ea193 100644
|
||||
--- a/src/widgets/util/qsystemtrayicon_p.h
|
||||
+++ b/src/widgets/util/qsystemtrayicon_p.h
|
||||
@@ -69,6 +69,7 @@
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class QSystemTrayIconSys;
|
||||
+class QSystemTrayWatcher;
|
||||
class QPlatformSystemTrayIcon;
|
||||
class QToolButton;
|
||||
class QLabel;
|
||||
@@ -90,6 +91,8 @@ public:
|
||||
void showMessage_sys(const QString &title, const QString &msg, const QIcon &icon,
|
||||
QSystemTrayIcon::MessageIcon msgIcon, int msecs);
|
||||
|
||||
+ void destroyIcon();
|
||||
+
|
||||
static bool isSystemTrayAvailable_sys();
|
||||
static bool supportsMessages_sys();
|
||||
|
||||
@@ -101,6 +104,7 @@ public:
|
||||
QSystemTrayIconSys *sys;
|
||||
QPlatformSystemTrayIcon *qpa_sys;
|
||||
bool visible;
|
||||
+ QSystemTrayWatcher *trayWatcher;
|
||||
|
||||
private:
|
||||
void install_sys_qpa();
|
||||
diff --git a/src/widgets/util/qsystemtrayicon_x11.cpp b/src/widgets/util/qsystemtrayicon_x11.cpp
|
||||
index 86532456c76..70e5f3678ea 100644
|
||||
--- a/src/widgets/util/qsystemtrayicon_x11.cpp
|
||||
+++ b/src/widgets/util/qsystemtrayicon_x11.cpp
|
||||
@@ -92,9 +92,6 @@ protected:
|
||||
virtual void resizeEvent(QResizeEvent *) override;
|
||||
virtual void moveEvent(QMoveEvent *) override;
|
||||
|
||||
-private slots:
|
||||
- void systemTrayWindowChanged(QScreen *screen);
|
||||
-
|
||||
private:
|
||||
QSystemTrayIcon *q;
|
||||
};
|
||||
@@ -116,15 +113,6 @@ QSystemTrayIconSys::QSystemTrayIconSys(QSystemTrayIcon *qIn)
|
||||
setMouseTracking(true);
|
||||
}
|
||||
|
||||
-void QSystemTrayIconSys::systemTrayWindowChanged(QScreen *)
|
||||
-{
|
||||
- if (!locateSystemTray()) {
|
||||
- QBalloonTip::hideBalloon();
|
||||
- hide(); // still no luck
|
||||
- destroy();
|
||||
- }
|
||||
-}
|
||||
-
|
||||
QRect QSystemTrayIconSys::globalGeometry() const
|
||||
{
|
||||
return QRect(mapToGlobal(QPoint(0, 0)), size());
|
||||
@@ -199,10 +187,41 @@ void QSystemTrayIconSys::resizeEvent(QResizeEvent *event)
|
||||
}
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
+class QSystemTrayWatcher: public QObject
|
||||
+{
|
||||
+ Q_OBJECT
|
||||
+public:
|
||||
+ QSystemTrayWatcher(QSystemTrayIcon *trayIcon)
|
||||
+ : QObject(trayIcon)
|
||||
+ , mTrayIcon(trayIcon)
|
||||
+ {
|
||||
+ // This code uses string-based syntax because we want to connect to a signal
|
||||
+ // which is defined in XCB plugin - QXcbNativeInterface::systemTrayWindowChanged().
|
||||
+ connect(qGuiApp->platformNativeInterface(), SIGNAL(systemTrayWindowChanged(QScreen*)),
|
||||
+ this, SLOT(systemTrayWindowChanged(QScreen*)));
|
||||
+ }
|
||||
+
|
||||
+private slots:
|
||||
+ void systemTrayWindowChanged(QScreen *)
|
||||
+ {
|
||||
+ auto icon = static_cast<QSystemTrayIconPrivate *>(QObjectPrivate::get(mTrayIcon));
|
||||
+ icon->destroyIcon();
|
||||
+ if (icon->visible && locateSystemTray()) {
|
||||
+ icon->sys = new QSystemTrayIconSys(mTrayIcon);
|
||||
+ icon->sys->show();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+private:
|
||||
+ QSystemTrayIcon *mTrayIcon = nullptr;
|
||||
+};
|
||||
+////////////////////////////////////////////////////////////////////////////
|
||||
+
|
||||
QSystemTrayIconPrivate::QSystemTrayIconPrivate()
|
||||
: sys(0),
|
||||
qpa_sys(QGuiApplicationPrivate::platformTheme()->createPlatformSystemTrayIcon()),
|
||||
- visible(false)
|
||||
+ visible(false),
|
||||
+ trayWatcher(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -213,16 +232,21 @@ QSystemTrayIconPrivate::~QSystemTrayIconPrivate()
|
||||
|
||||
void QSystemTrayIconPrivate::install_sys()
|
||||
{
|
||||
+ Q_Q(QSystemTrayIcon);
|
||||
+
|
||||
if (qpa_sys) {
|
||||
install_sys_qpa();
|
||||
return;
|
||||
}
|
||||
- Q_Q(QSystemTrayIcon);
|
||||
- if (!sys && locateSystemTray()) {
|
||||
- sys = new QSystemTrayIconSys(q);
|
||||
- QObject::connect(QGuiApplication::platformNativeInterface(), SIGNAL(systemTrayWindowChanged(QScreen*)),
|
||||
- sys, SLOT(systemTrayWindowChanged(QScreen*)));
|
||||
- sys->show();
|
||||
+
|
||||
+ if (!sys) {
|
||||
+ if (!trayWatcher)
|
||||
+ trayWatcher = new QSystemTrayWatcher(q);
|
||||
+
|
||||
+ if (locateSystemTray()) {
|
||||
+ sys = new QSystemTrayIconSys(q);
|
||||
+ sys->show();
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,14 +265,21 @@ void QSystemTrayIconPrivate::remove_sys()
|
||||
remove_sys_qpa();
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ destroyIcon();
|
||||
+}
|
||||
+
|
||||
+void QSystemTrayIconPrivate::destroyIcon()
|
||||
+{
|
||||
if (!sys)
|
||||
return;
|
||||
QBalloonTip::hideBalloon();
|
||||
- sys->hide(); // this should do the trick, but...
|
||||
- delete sys; // wm may resize system tray only for DestroyEvents
|
||||
- sys = 0;
|
||||
+ sys->hide();
|
||||
+ delete sys;
|
||||
+ sys = nullptr;
|
||||
}
|
||||
|
||||
+
|
||||
void QSystemTrayIconPrivate::updateIcon_sys()
|
||||
{
|
||||
if (qpa_sys) {
|
||||
--
|
||||
2.16.3
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,397 @@
|
|||
From 58d98b66da5d748d610f053053bd12e42c97d9e6 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Tuegel <ttuegel@mailbox.org>
|
||||
Date: Tue, 17 Sep 2019 05:34:00 -0500
|
||||
Subject: [PATCH 01/10] qtbase-mkspecs-mac
|
||||
|
||||
---
|
||||
mkspecs/common/mac.conf | 2 +-
|
||||
mkspecs/features/mac/default_post.prf | 196 --------------------------
|
||||
mkspecs/features/mac/default_pre.prf | 58 --------
|
||||
mkspecs/features/mac/sdk.mk | 25 ----
|
||||
mkspecs/features/mac/sdk.prf | 61 --------
|
||||
5 files changed, 1 insertion(+), 341 deletions(-)
|
||||
|
||||
diff --git a/mkspecs/common/mac.conf b/mkspecs/common/mac.conf
|
||||
index b77494ec..470c38e7 100644
|
||||
--- a/mkspecs/common/mac.conf
|
||||
+++ b/mkspecs/common/mac.conf
|
||||
@@ -24,7 +24,7 @@ QMAKE_INCDIR_OPENGL = \
|
||||
|
||||
QMAKE_FIX_RPATH = install_name_tool -id
|
||||
|
||||
-QMAKE_LFLAGS_RPATH = -Wl,-rpath,
|
||||
+QMAKE_LFLAGS_RPATH =
|
||||
QMAKE_LFLAGS_GCSECTIONS = -Wl,-dead_strip
|
||||
|
||||
QMAKE_LFLAGS_REL_RPATH =
|
||||
diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf
|
||||
index c46222de..18dcfbce 100644
|
||||
--- a/mkspecs/features/mac/default_post.prf
|
||||
+++ b/mkspecs/features/mac/default_post.prf
|
||||
@@ -64,202 +64,6 @@ qt {
|
||||
}
|
||||
}
|
||||
|
||||
-# Add the same default rpaths as Xcode does for new projects.
|
||||
-# This is especially important for iOS/tvOS/watchOS where no other option is possible.
|
||||
-!no_default_rpath {
|
||||
- QMAKE_RPATHDIR += @executable_path/../Frameworks
|
||||
- equals(TEMPLATE, lib):!plugin:lib_bundle: QMAKE_RPATHDIR += @loader_path/Frameworks
|
||||
-}
|
||||
-
|
||||
-# Don't pass -headerpad_max_install_names when using Bitcode.
|
||||
-# In that case the linker emits a warning stating that the flag is ignored when
|
||||
-# used with bitcode, for reasons that cannot be determined (rdar://problem/20748962).
|
||||
-# Using this flag is also unnecessary in practice on UIKit platforms since they
|
||||
-# are sandboxed, and only UIKit platforms support bitcode to begin with.
|
||||
-!bitcode: QMAKE_LFLAGS += $$QMAKE_LFLAGS_HEADERPAD
|
||||
-
|
||||
-app_extension_api_only {
|
||||
- QMAKE_CFLAGS += $$QMAKE_CFLAGS_APPLICATION_EXTENSION
|
||||
- QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_APPLICATION_EXTENSION
|
||||
- QMAKE_CXXFLAGS_PRECOMPILE += $$QMAKE_CFLAGS_APPLICATION_EXTENSION
|
||||
- QMAKE_LFLAGS += $$QMAKE_CFLAGS_APPLICATION_EXTENSION
|
||||
-}
|
||||
-
|
||||
-macx-xcode {
|
||||
- qmake_pkginfo_typeinfo.name = QMAKE_PKGINFO_TYPEINFO
|
||||
- !isEmpty(QMAKE_PKGINFO_TYPEINFO): \
|
||||
- qmake_pkginfo_typeinfo.value = $$QMAKE_PKGINFO_TYPEINFO
|
||||
- else: \
|
||||
- qmake_pkginfo_typeinfo.value = "????"
|
||||
- QMAKE_MAC_XCODE_SETTINGS += qmake_pkginfo_typeinfo
|
||||
-
|
||||
- !isEmpty(VERSION) {
|
||||
- l = $$split(VERSION, '.') 0 0 # make sure there are at least three
|
||||
- VER_MAJ = $$member(l, 0, 0)
|
||||
- VER_MIN = $$member(l, 1, 1)
|
||||
- VER_PAT = $$member(l, 2, 2)
|
||||
- unset(l)
|
||||
-
|
||||
- qmake_full_version.name = QMAKE_FULL_VERSION
|
||||
- qmake_full_version.value = $${VER_MAJ}.$${VER_MIN}.$${VER_PAT}
|
||||
- QMAKE_MAC_XCODE_SETTINGS += qmake_full_version
|
||||
-
|
||||
- qmake_short_version.name = QMAKE_SHORT_VERSION
|
||||
- qmake_short_version.value = $${VER_MAJ}.$${VER_MIN}
|
||||
- QMAKE_MAC_XCODE_SETTINGS += qmake_short_version
|
||||
- }
|
||||
-
|
||||
- !isEmpty(QMAKE_XCODE_DEBUG_INFORMATION_FORMAT) {
|
||||
- debug_information_format.name = DEBUG_INFORMATION_FORMAT
|
||||
- debug_information_format.value = $$QMAKE_XCODE_DEBUG_INFORMATION_FORMAT
|
||||
- debug_information_format.build = debug
|
||||
- QMAKE_MAC_XCODE_SETTINGS += debug_information_format
|
||||
- }
|
||||
-
|
||||
- QMAKE_XCODE_ARCHS =
|
||||
-
|
||||
- arch_device.name = "ARCHS[sdk=$${device.sdk}*]"
|
||||
- arch_device.value = $$QMAKE_APPLE_DEVICE_ARCHS
|
||||
- QMAKE_XCODE_ARCHS += $$QMAKE_APPLE_DEVICE_ARCHS
|
||||
- QMAKE_MAC_XCODE_SETTINGS += arch_device
|
||||
-
|
||||
- simulator {
|
||||
- arch_simulator.name = "ARCHS[sdk=$${simulator.sdk}*]"
|
||||
- arch_simulator.value = $$QMAKE_APPLE_SIMULATOR_ARCHS
|
||||
- QMAKE_XCODE_ARCHS += $$QMAKE_APPLE_SIMULATOR_ARCHS
|
||||
- QMAKE_MAC_XCODE_SETTINGS += arch_simulator
|
||||
- }
|
||||
-
|
||||
- only_active_arch.name = ONLY_ACTIVE_ARCH
|
||||
- only_active_arch.value = YES
|
||||
- only_active_arch.build = debug
|
||||
- QMAKE_MAC_XCODE_SETTINGS += only_active_arch
|
||||
-} else {
|
||||
- device|!simulator: VALID_DEVICE_ARCHS = $$QMAKE_APPLE_DEVICE_ARCHS
|
||||
- simulator: VALID_SIMULATOR_ARCHS = $$QMAKE_APPLE_SIMULATOR_ARCHS
|
||||
- VALID_ARCHS = $$VALID_DEVICE_ARCHS $$VALID_SIMULATOR_ARCHS
|
||||
-
|
||||
- isEmpty(VALID_ARCHS): \
|
||||
- error("QMAKE_APPLE_DEVICE_ARCHS or QMAKE_APPLE_SIMULATOR_ARCHS must contain at least one architecture")
|
||||
-
|
||||
- single_arch: VALID_ARCHS = $$first(VALID_ARCHS)
|
||||
-
|
||||
- ACTIVE_ARCHS = $(filter $(EXPORT_VALID_ARCHS), $(ARCHS))
|
||||
- ARCH_ARGS = $(foreach arch, $(if $(EXPORT_ACTIVE_ARCHS), $(EXPORT_ACTIVE_ARCHS), $(EXPORT_VALID_ARCHS)), -arch $(arch))
|
||||
-
|
||||
- QMAKE_EXTRA_VARIABLES += VALID_ARCHS ACTIVE_ARCHS ARCH_ARGS
|
||||
-
|
||||
- arch_flags = $(EXPORT_ARCH_ARGS)
|
||||
-
|
||||
- QMAKE_CFLAGS += $$arch_flags
|
||||
- QMAKE_CXXFLAGS += $$arch_flags
|
||||
- QMAKE_LFLAGS += $$arch_flags
|
||||
-
|
||||
- QMAKE_PCH_ARCHS = $$VALID_ARCHS
|
||||
-
|
||||
- macos: deployment_target = $$QMAKE_MACOSX_DEPLOYMENT_TARGET
|
||||
- ios: deployment_target = $$QMAKE_IOS_DEPLOYMENT_TARGET
|
||||
- tvos: deployment_target = $$QMAKE_TVOS_DEPLOYMENT_TARGET
|
||||
- watchos: deployment_target = $$QMAKE_WATCHOS_DEPLOYMENT_TARGET
|
||||
-
|
||||
- # If we're doing a simulator and device build, device and simulator
|
||||
- # architectures use different paths and flags for the sysroot and
|
||||
- # deployment target switch, so we must multiplex them across multiple
|
||||
- # architectures using -Xarch. Otherwise we fall back to the simple path.
|
||||
- # This is not strictly necessary, but results in cleaner command lines
|
||||
- # and makes it easier for people to override EXPORT_VALID_ARCHS to limit
|
||||
- # individual rules to a different set of architecture(s) from the overall
|
||||
- # build (such as machtest in QtCore).
|
||||
- simulator:device {
|
||||
- QMAKE_XARCH_CFLAGS =
|
||||
- QMAKE_XARCH_LFLAGS =
|
||||
- QMAKE_EXTRA_VARIABLES += QMAKE_XARCH_CFLAGS QMAKE_XARCH_LFLAGS
|
||||
-
|
||||
- for (arch, VALID_ARCHS) {
|
||||
- contains(VALID_SIMULATOR_ARCHS, $$arch) {
|
||||
- sdk = $$simulator.sdk
|
||||
- version_identifier = $$simulator.deployment_identifier
|
||||
- } else {
|
||||
- sdk = $$device.sdk
|
||||
- version_identifier = $$device.deployment_identifier
|
||||
- }
|
||||
-
|
||||
- version_min_flags = \
|
||||
- -Xarch_$${arch} \
|
||||
- -m$${version_identifier}-version-min=$$deployment_target
|
||||
- QMAKE_XARCH_CFLAGS_$${arch} = $$version_min_flags \
|
||||
- -Xarch_$${arch} \
|
||||
- -isysroot$$xcodeSDKInfo(Path, $$sdk)
|
||||
- QMAKE_XARCH_LFLAGS_$${arch} = $$version_min_flags \
|
||||
- -Xarch_$${arch} \
|
||||
- -Wl,-syslibroot,$$xcodeSDKInfo(Path, $$sdk)
|
||||
-
|
||||
- QMAKE_XARCH_CFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS_$${arch})
|
||||
- QMAKE_XARCH_LFLAGS += $(EXPORT_QMAKE_XARCH_LFLAGS_$${arch})
|
||||
-
|
||||
- QMAKE_EXTRA_VARIABLES += \
|
||||
- QMAKE_XARCH_CFLAGS_$${arch} \
|
||||
- QMAKE_XARCH_LFLAGS_$${arch}
|
||||
- }
|
||||
-
|
||||
- QMAKE_CFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS)
|
||||
- QMAKE_CXXFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS)
|
||||
- QMAKE_LFLAGS += $(EXPORT_QMAKE_XARCH_LFLAGS)
|
||||
- } else {
|
||||
- simulator: \
|
||||
- version_identifier = $$simulator.deployment_identifier
|
||||
- else: \
|
||||
- version_identifier = $$device.deployment_identifier
|
||||
- version_min_flag = -m$${version_identifier}-version-min=$$deployment_target
|
||||
- QMAKE_CFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH $$version_min_flag
|
||||
- QMAKE_CXXFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH $$version_min_flag
|
||||
- QMAKE_LFLAGS += -Wl,-syslibroot,$$QMAKE_MAC_SDK_PATH $$version_min_flag
|
||||
- }
|
||||
-
|
||||
- # Enable precompiled headers for multiple architectures
|
||||
- QMAKE_CFLAGS_USE_PRECOMPILE =
|
||||
- for (arch, VALID_ARCHS) {
|
||||
- icc_pch_style: \
|
||||
- use_flag = "-pch-use "
|
||||
- else: \
|
||||
- use_flag = -include
|
||||
-
|
||||
- # Only use Xarch with multi-arch, as the option confuses ccache
|
||||
- count(VALID_ARCHS, 1, greaterThan): \
|
||||
- QMAKE_CFLAGS_USE_PRECOMPILE += \
|
||||
- -Xarch_$${arch}
|
||||
-
|
||||
- QMAKE_CFLAGS_USE_PRECOMPILE += \
|
||||
- $${use_flag}${QMAKE_PCH_OUTPUT_$${arch}}
|
||||
- }
|
||||
- icc_pch_style {
|
||||
- QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE -include ${QMAKE_PCH_INPUT}
|
||||
- QMAKE_CFLAGS_USE_PRECOMPILE =
|
||||
- } else {
|
||||
- QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
||||
- QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
||||
- QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
|
||||
- }
|
||||
-
|
||||
- QMAKE_PCH_OUTPUT_EXT = _${QMAKE_PCH_ARCH}$${QMAKE_PCH_OUTPUT_EXT}
|
||||
-}
|
||||
-
|
||||
-cache(QMAKE_XCODE_DEVELOPER_PATH, stash)
|
||||
-!isEmpty(QMAKE_XCODE_VERSION): \
|
||||
- cache(QMAKE_XCODE_VERSION, stash)
|
||||
-
|
||||
-QMAKE_XCODE_LIBRARY_SUFFIX = $$qtPlatformTargetSuffix()
|
||||
-
|
||||
-xcode_product_bundle_identifier_setting.name = PRODUCT_BUNDLE_IDENTIFIER
|
||||
-xcode_product_bundle_identifier_setting.value = $$QMAKE_TARGET_BUNDLE_PREFIX
|
||||
-isEmpty(xcode_product_bundle_identifier_setting.value): \
|
||||
- xcode_product_bundle_identifier_setting.value = "com.yourcompany"
|
||||
-xcode_product_bundle_target = $$QMAKE_BUNDLE
|
||||
-isEmpty(xcode_product_bundle_target): \
|
||||
- xcode_product_bundle_target = ${PRODUCT_NAME:rfc1034identifier}
|
||||
-xcode_product_bundle_identifier_setting.value = "$${xcode_product_bundle_identifier_setting.value}.$${xcode_product_bundle_target}"
|
||||
-QMAKE_MAC_XCODE_SETTINGS += xcode_product_bundle_identifier_setting
|
||||
-
|
||||
!macx-xcode {
|
||||
generate_xcode_project.commands = @$(QMAKE) -spec macx-xcode $(EXPORT__PRO_FILE_)
|
||||
generate_xcode_project.target = xcodeproj
|
||||
diff --git a/mkspecs/features/mac/default_pre.prf b/mkspecs/features/mac/default_pre.prf
|
||||
index e3534561..3b01424e 100644
|
||||
--- a/mkspecs/features/mac/default_pre.prf
|
||||
+++ b/mkspecs/features/mac/default_pre.prf
|
||||
@@ -1,60 +1,2 @@
|
||||
CONFIG = asset_catalogs rez $$CONFIG
|
||||
load(default_pre)
|
||||
-
|
||||
-isEmpty(QMAKE_XCODE_DEVELOPER_PATH) {
|
||||
- # Get path of Xcode's Developer directory
|
||||
- QMAKE_XCODE_DEVELOPER_PATH = $$system("/usr/bin/xcode-select --print-path 2>/dev/null")
|
||||
- isEmpty(QMAKE_XCODE_DEVELOPER_PATH): \
|
||||
- error("Xcode path is not set. Please use xcode-select to choose Xcode installation path.")
|
||||
-
|
||||
- # Make sure Xcode path is valid
|
||||
- !exists($$QMAKE_XCODE_DEVELOPER_PATH): \
|
||||
- error("Xcode is not installed in $${QMAKE_XCODE_DEVELOPER_PATH}. Please use xcode-select to choose Xcode installation path.")
|
||||
-}
|
||||
-
|
||||
-isEmpty(QMAKE_XCODEBUILD_PATH): \
|
||||
- QMAKE_XCODEBUILD_PATH = $$system("/usr/bin/xcrun -find xcodebuild 2>/dev/null")
|
||||
-
|
||||
-!isEmpty(QMAKE_XCODEBUILD_PATH) {
|
||||
- # Make sure Xcode is set up properly
|
||||
- !system("/usr/bin/xcrun xcodebuild -license check 2>/dev/null"): \
|
||||
- error("Xcode not set up properly. You need to confirm the license agreement by running 'sudo xcrun xcodebuild -license accept'.")
|
||||
-
|
||||
- isEmpty(QMAKE_XCODE_VERSION) {
|
||||
- # Extract Xcode version using xcodebuild
|
||||
- xcode_version = $$system("/usr/bin/xcrun xcodebuild -version")
|
||||
- QMAKE_XCODE_VERSION = $$member(xcode_version, 1)
|
||||
- isEmpty(QMAKE_XCODE_VERSION): error("Could not resolve Xcode version.")
|
||||
- unset(xcode_version)
|
||||
- }
|
||||
-}
|
||||
-
|
||||
-isEmpty(QMAKE_TARGET_BUNDLE_PREFIX) {
|
||||
- QMAKE_XCODE_PREFERENCES_FILE = $$(HOME)/Library/Preferences/com.apple.dt.Xcode.plist
|
||||
- exists($$QMAKE_XCODE_PREFERENCES_FILE): \
|
||||
- QMAKE_TARGET_BUNDLE_PREFIX = $$system("/usr/libexec/PlistBuddy -c 'print IDETemplateOptions:bundleIdentifierPrefix' $$QMAKE_XCODE_PREFERENCES_FILE 2>/dev/null")
|
||||
-
|
||||
- !isEmpty(_QMAKE_CACHE_):!isEmpty(QMAKE_TARGET_BUNDLE_PREFIX): \
|
||||
- cache(QMAKE_TARGET_BUNDLE_PREFIX)
|
||||
-}
|
||||
-
|
||||
-QMAKE_ASSET_CATALOGS_APP_ICON = AppIcon
|
||||
-
|
||||
-# Make the default debug info format for static debug builds
|
||||
-# DWARF instead of DWARF with dSYM. This cuts down build times
|
||||
-# for application debug builds significantly, as Xcode doesn't
|
||||
-# have to pull out all the DWARF info from the Qt static libs
|
||||
-# and put it into a dSYM file. We don't need that dSYM file in
|
||||
-# the first place, since the information is available in the
|
||||
-# object files inside the archives (static libraries).
|
||||
-macx-xcode:qtConfig(static): \
|
||||
- QMAKE_XCODE_DEBUG_INFORMATION_FORMAT = dwarf
|
||||
-
|
||||
-# This variable is used by the xcode_dynamic_library_suffix
|
||||
-# feature, which allows Xcode to choose the Qt libraries to link to
|
||||
-# at build time, depending on the current Xcode SDK and configuration.
|
||||
-QMAKE_XCODE_LIBRARY_SUFFIX_SETTING = QT_LIBRARY_SUFFIX
|
||||
-
|
||||
-xcode_copy_phase_strip_setting.name = COPY_PHASE_STRIP
|
||||
-xcode_copy_phase_strip_setting.value = NO
|
||||
-QMAKE_MAC_XCODE_SETTINGS += xcode_copy_phase_strip_setting
|
||||
diff --git a/mkspecs/features/mac/sdk.mk b/mkspecs/features/mac/sdk.mk
|
||||
index c40f58c9..e69de29b 100644
|
||||
--- a/mkspecs/features/mac/sdk.mk
|
||||
+++ b/mkspecs/features/mac/sdk.mk
|
||||
@@ -1,25 +0,0 @@
|
||||
-
|
||||
-ifeq ($(QT_MAC_SDK_NO_VERSION_CHECK),)
|
||||
- CHECK_SDK_COMMAND = /usr/bin/xcrun --sdk $(EXPORT_QMAKE_MAC_SDK) -show-sdk-version 2>&1
|
||||
- CURRENT_MAC_SDK_VERSION := $(shell DEVELOPER_DIR=$(EXPORT_QMAKE_XCODE_DEVELOPER_PATH) $(CHECK_SDK_COMMAND))
|
||||
- ifneq ($(CURRENT_MAC_SDK_VERSION),$(EXPORT_QMAKE_MAC_SDK_VERSION))
|
||||
- # We don't want to complain about out of date SDK unless the target needs to be remade.
|
||||
- # This covers use-cases such as running 'make check' after moving the build to a
|
||||
- # computer without Xcode or with a different Xcode version.
|
||||
- TARGET_UP_TO_DATE := $(shell QT_MAC_SDK_NO_VERSION_CHECK=1 $(MAKE) --question $(QMAKE_TARGET) && echo 1 || echo 0)
|
||||
- ifeq ($(TARGET_UP_TO_DATE),0)
|
||||
- ifneq ($(findstring missing DEVELOPER_DIR path,$(CURRENT_MAC_SDK_VERSION)),)
|
||||
- $(info The developer dir $(EXPORT_QMAKE_XCODE_DEVELOPER_PATH) is no longer valid.)
|
||||
- else ifneq ($(findstring SDK "$(EXPORT_QMAKE_MAC_SDK)" cannot be located,$(CURRENT_MAC_SDK_VERSION)),)
|
||||
- $(info The developer dir $(EXPORT_QMAKE_XCODE_DEVELOPER_PATH) no longer contains the $(EXPORT_QMAKE_MAC_SDK_VERSION) platform SDK.)
|
||||
- else ifneq ($(CURRENT_MAC_SDK_VERSION),)
|
||||
- $(info The platform SDK has been changed from version $(EXPORT_QMAKE_MAC_SDK_VERSION) to version $(CURRENT_MAC_SDK_VERSION).)
|
||||
- else
|
||||
- $(info Unknown error resolving current platform SDK version.)
|
||||
- endif
|
||||
- $(info This requires a fresh build. Please wipe the build directory completely,)
|
||||
- $(info including any .qmake.stash and .qmake.cache files generated by qmake.)
|
||||
- $(error ^)
|
||||
- endif
|
||||
- endif
|
||||
-endif
|
||||
diff --git a/mkspecs/features/mac/sdk.prf b/mkspecs/features/mac/sdk.prf
|
||||
index 3a9c2778..e69de29b 100644
|
||||
--- a/mkspecs/features/mac/sdk.prf
|
||||
+++ b/mkspecs/features/mac/sdk.prf
|
||||
@@ -1,61 +0,0 @@
|
||||
-
|
||||
-isEmpty(QMAKE_MAC_SDK): \
|
||||
- error("QMAKE_MAC_SDK must be set when using CONFIG += sdk.")
|
||||
-
|
||||
-contains(QMAKE_MAC_SDK, .*/.*): \
|
||||
- error("QMAKE_MAC_SDK can only contain short-form SDK names (eg. macosx, iphoneos)")
|
||||
-
|
||||
-defineReplace(xcodeSDKInfo) {
|
||||
- info = $$1
|
||||
- equals(info, "Path"): \
|
||||
- infoarg = --show-sdk-path
|
||||
- equals(info, "PlatformPath"): \
|
||||
- infoarg = --show-sdk-platform-path
|
||||
- equals(info, "SDKVersion"): \
|
||||
- infoarg = --show-sdk-version
|
||||
- sdk = $$2
|
||||
- isEmpty(sdk): \
|
||||
- sdk = $$QMAKE_MAC_SDK
|
||||
-
|
||||
- isEmpty(QMAKE_MAC_SDK.$${sdk}.$${info}) {
|
||||
- QMAKE_MAC_SDK.$${sdk}.$${info} = $$system("/usr/bin/xcrun --sdk $$sdk $$infoarg 2>/dev/null")
|
||||
- # --show-sdk-platform-path won't work for Command Line Tools; this is fine
|
||||
- # only used by the XCTest backend to testlib
|
||||
- isEmpty(QMAKE_MAC_SDK.$${sdk}.$${info}):if(!isEmpty(QMAKE_XCODEBUILD_PATH)|!equals(infoarg, "--show-sdk-platform-path")): \
|
||||
- error("Could not resolve SDK $$info for \'$$sdk\' using $$infoarg")
|
||||
- cache(QMAKE_MAC_SDK.$${sdk}.$${info}, set stash, QMAKE_MAC_SDK.$${sdk}.$${info})
|
||||
- }
|
||||
-
|
||||
- return($$eval(QMAKE_MAC_SDK.$${sdk}.$${info}))
|
||||
-}
|
||||
-
|
||||
-QMAKE_MAC_SDK_PATH = $$xcodeSDKInfo(Path)
|
||||
-QMAKE_MAC_SDK_PLATFORM_PATH = $$xcodeSDKInfo(PlatformPath)
|
||||
-QMAKE_MAC_SDK_VERSION = $$xcodeSDKInfo(SDKVersion)
|
||||
-
|
||||
-isEmpty(QMAKE_EXPORT_INCDIR_OPENGL) {
|
||||
- QMAKE_EXPORT_INCDIR_OPENGL = $$QMAKE_INCDIR_OPENGL
|
||||
- sysrootified =
|
||||
- for(val, QMAKE_INCDIR_OPENGL): sysrootified += $${QMAKE_MAC_SDK_PATH}$$val
|
||||
- QMAKE_INCDIR_OPENGL = $$sysrootified
|
||||
-}
|
||||
-
|
||||
-QMAKESPEC_NAME = $$basename(QMAKESPEC)
|
||||
-
|
||||
-# Resolve SDK version of various tools
|
||||
-for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_LINK QMAKE_LINK_SHLIB QMAKE_ACTOOL QMAKE_LINK_C QMAKE_LINK_C_SHLIB)) {
|
||||
- tool_variable = QMAKE_MAC_SDK.$${QMAKESPEC_NAME}.$${QMAKE_MAC_SDK}.$${tool}
|
||||
- !isEmpty($$tool_variable) {
|
||||
- $$tool = $$eval($$tool_variable)
|
||||
- next()
|
||||
- }
|
||||
-
|
||||
- value = $$eval($$tool)
|
||||
- isEmpty(value): next()
|
||||
-
|
||||
- sysrooted = $$system("/usr/bin/xcrun -sdk $$QMAKE_MAC_SDK -find $$first(value) 2>/dev/null")
|
||||
- isEmpty(sysrooted): next()
|
||||
-
|
||||
- $$tool = $$sysrooted $$member(value, 1, -1)
|
||||
- cache($$tool_variable, set stash, $$tool)
|
||||
-}
|
||||
--
|
||||
2.22.1
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
From 1dbf4dd6dc4cc30a3e705a12117f1764201a8402 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Tuegel <ttuegel@mailbox.org>
|
||||
Date: Tue, 17 Sep 2019 05:37:15 -0500
|
||||
Subject: [PATCH 02/10] qtbase-mac
|
||||
|
||||
---
|
||||
src/corelib/kernel/qcore_mac_p.h | 16 ++++++++++++++--
|
||||
src/testlib/qappletestlogger.cpp | 2 +-
|
||||
2 files changed, 15 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h
|
||||
index f96e7358..650946b7 100644
|
||||
--- a/src/corelib/kernel/qcore_mac_p.h
|
||||
+++ b/src/corelib/kernel/qcore_mac_p.h
|
||||
@@ -212,7 +212,7 @@ private:
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
||||
-#if !defined(QT_BOOTSTRAPPED)
|
||||
+#if 0
|
||||
|
||||
QT_END_NAMESPACE
|
||||
#include <os/activity.h>
|
||||
@@ -290,7 +290,19 @@ QT_MAC_WEAK_IMPORT(_os_activity_current);
|
||||
|
||||
#define QT_APPLE_SCOPED_LOG_ACTIVITY(...) QAppleLogActivity scopedLogActivity = QT_APPLE_LOG_ACTIVITY(__VA_ARGS__).enter();
|
||||
|
||||
-#endif // !defined(QT_BOOTSTRAPPED)
|
||||
+#else // !defined(QT_BOOTSTRAPPED)
|
||||
+
|
||||
+#define QT_APPLE_LOG_ACTIVITY_WITH_PARENT3(...)
|
||||
+#define QT_APPLE_LOG_ACTIVITY_WITH_PARENT2(...)
|
||||
+#define QT_APPLE_LOG_ACTIVITY_WITH_PARENT(...)
|
||||
+
|
||||
+#define QT_APPLE_LOG_ACTIVITY2(...)
|
||||
+#define QT_APPLE_LOG_ACTIVITY1(...)
|
||||
+#define QT_APPLE_LOG_ACTIVITY(...)
|
||||
+
|
||||
+#define QT_APPLE_SCOPED_LOG_ACTIVITY(...)
|
||||
+
|
||||
+#endif
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
diff --git a/src/testlib/qappletestlogger.cpp b/src/testlib/qappletestlogger.cpp
|
||||
index dfeadebd..2a74330c 100644
|
||||
--- a/src/testlib/qappletestlogger.cpp
|
||||
+++ b/src/testlib/qappletestlogger.cpp
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
-#if defined(QT_USE_APPLE_UNIFIED_LOGGING)
|
||||
+#if defined(QT_USE_APPLE_UNIFIED_LOGGING) && 0
|
||||
|
||||
using namespace QTestPrivate;
|
||||
|
||||
--
|
||||
2.22.1
|
||||
|
|
@ -0,0 +1,508 @@
|
|||
From cfcd1f6e1ac53bfbd7d35f0e1aefbdbaa1726f4d Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Tuegel <ttuegel@mailbox.org>
|
||||
Date: Tue, 17 Sep 2019 05:32:35 -0500
|
||||
Subject: [PATCH 03/10] qtbase-mkspecs
|
||||
|
||||
---
|
||||
mkspecs/features/create_cmake.prf | 53 ++++--------
|
||||
.../data/cmake/Qt5BasicConfig.cmake.in | 80 +------------------
|
||||
mkspecs/features/qml_module.prf | 2 +-
|
||||
mkspecs/features/qml_plugin.prf | 2 +-
|
||||
mkspecs/features/qt_app.prf | 2 +-
|
||||
mkspecs/features/qt_build_paths.prf | 4 +-
|
||||
mkspecs/features/qt_common.prf | 31 -------
|
||||
mkspecs/features/qt_docs.prf | 10 +--
|
||||
mkspecs/features/qt_example_installs.prf | 2 +-
|
||||
mkspecs/features/qt_functions.prf | 2 +-
|
||||
mkspecs/features/qt_installs.prf | 22 ++---
|
||||
mkspecs/features/qt_plugin.prf | 2 +-
|
||||
12 files changed, 39 insertions(+), 173 deletions(-)
|
||||
|
||||
diff --git a/mkspecs/features/create_cmake.prf b/mkspecs/features/create_cmake.prf
|
||||
index c9910dda..e9bc8076 100644
|
||||
--- a/mkspecs/features/create_cmake.prf
|
||||
+++ b/mkspecs/features/create_cmake.prf
|
||||
@@ -21,7 +21,7 @@ load(cmake_functions)
|
||||
# at cmake time whether package has been found via a symlink, and correct
|
||||
# that to an absolute path. This is only done for installations to
|
||||
# the /usr or / prefix.
|
||||
-CMAKE_INSTALL_LIBS_DIR = $$cmakeTargetPath($$[QT_INSTALL_LIBS])
|
||||
+CMAKE_INSTALL_LIBS_DIR = $$cmakeTargetPath($$NIX_OUTPUT_OUT/lib/)
|
||||
contains(CMAKE_INSTALL_LIBS_DIR, ^(/usr)?/lib(64)?.*): CMAKE_USR_MOVE_WORKAROUND = $$CMAKE_INSTALL_LIBS_DIR
|
||||
|
||||
CMAKE_OUT_DIR = $$MODULE_BASE_OUTDIR/lib/cmake
|
||||
@@ -60,45 +60,20 @@ split_incpath {
|
||||
$$cmake_extra_source_includes.output
|
||||
}
|
||||
|
||||
-CMAKE_INCLUDE_DIR = $$cmakeRelativePath($$[QT_INSTALL_HEADERS], $$[QT_INSTALL_PREFIX])
|
||||
-contains(CMAKE_INCLUDE_DIR, "^\\.\\./.*") {
|
||||
- CMAKE_INCLUDE_DIR = $$[QT_INSTALL_HEADERS]/
|
||||
- CMAKE_INCLUDE_DIR_IS_ABSOLUTE = True
|
||||
-}
|
||||
+CMAKE_INCLUDE_DIR = $$NIX_OUTPUT_DEV/include/
|
||||
+CMAKE_INCLUDE_DIR_IS_ABSOLUTE = True
|
||||
|
||||
-CMAKE_LIB_DIR = $$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])
|
||||
-contains(CMAKE_LIB_DIR,"^\\.\\./.*") {
|
||||
- CMAKE_LIB_DIR = $$[QT_INSTALL_LIBS]/
|
||||
- CMAKE_LIB_DIR_IS_ABSOLUTE = True
|
||||
-} else {
|
||||
- CMAKE_RELATIVE_INSTALL_LIBS_DIR = $$cmakeRelativePath($$[QT_INSTALL_PREFIX], $$[QT_INSTALL_LIBS])
|
||||
- # We need to go up another two levels because the CMake files are
|
||||
- # installed in $${CMAKE_LIB_DIR}/cmake/Qt5$${CMAKE_MODULE_NAME}
|
||||
- CMAKE_RELATIVE_INSTALL_DIR = "$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}../../"
|
||||
-}
|
||||
+CMAKE_BIN_DIR = $$NIX_OUTPUT_BIN/bin/
|
||||
+CMAKE_BIN_DIR_IS_ABSOLUTE = True
|
||||
|
||||
-CMAKE_BIN_DIR = $$cmakeRelativePath($$[QT_HOST_BINS], $$[QT_INSTALL_PREFIX])
|
||||
-contains(CMAKE_BIN_DIR, "^\\.\\./.*") {
|
||||
- CMAKE_BIN_DIR = $$[QT_HOST_BINS]/
|
||||
- CMAKE_BIN_DIR_IS_ABSOLUTE = True
|
||||
-}
|
||||
+CMAKE_LIB_DIR = $$NIX_OUTPUT_OUT/lib/
|
||||
+CMAKE_LIB_DIR_IS_ABSOLUTE = True
|
||||
|
||||
-CMAKE_PLUGIN_DIR = $$cmakeRelativePath($$[QT_INSTALL_PLUGINS], $$[QT_INSTALL_PREFIX])
|
||||
-contains(CMAKE_PLUGIN_DIR, "^\\.\\./.*") {
|
||||
- CMAKE_PLUGIN_DIR = $$[QT_INSTALL_PLUGINS]/
|
||||
- CMAKE_PLUGIN_DIR_IS_ABSOLUTE = True
|
||||
-}
|
||||
-
|
||||
-win32:!static:!staticlib {
|
||||
- CMAKE_DLL_DIR = $$cmakeRelativePath($$[QT_INSTALL_BINS], $$[QT_INSTALL_PREFIX])
|
||||
- contains(CMAKE_DLL_DIR, "^\\.\\./.*") {
|
||||
- CMAKE_DLL_DIR = $$[QT_INSTALL_BINS]/
|
||||
- CMAKE_DLL_DIR_IS_ABSOLUTE = True
|
||||
- }
|
||||
-} else {
|
||||
- CMAKE_DLL_DIR = $$CMAKE_LIB_DIR
|
||||
- CMAKE_DLL_DIR_IS_ABSOLUTE = $$CMAKE_LIB_DIR_IS_ABSOLUTE
|
||||
-}
|
||||
+CMAKE_PLUGIN_DIR = $$NIX_OUTPUT_PLUGIN/
|
||||
+CMAKE_PLUGIN_DIR_IS_ABSOLUTE = True
|
||||
+
|
||||
+CMAKE_DLL_DIR = $$NIX_OUTPUT_OUT/lib/
|
||||
+CMAKE_DLL_DIR_IS_ABSOLUTE = True
|
||||
|
||||
static|staticlib:CMAKE_STATIC_TYPE = true
|
||||
|
||||
@@ -178,7 +153,7 @@ contains(CONFIG, plugin) {
|
||||
cmake_target_file
|
||||
|
||||
cmake_qt5_plugin_file.files = $$cmake_target_file.output
|
||||
- cmake_qt5_plugin_file.path = $$[QT_INSTALL_LIBS]/cmake/Qt5$${CMAKE_MODULE_NAME}
|
||||
+ cmake_qt5_plugin_file.path = $$NIX_OUTPUT_OUT/lib/cmake/Qt5$${CMAKE_MODULE_NAME}
|
||||
INSTALLS += cmake_qt5_plugin_file
|
||||
|
||||
return()
|
||||
@@ -323,7 +298,7 @@ exists($$cmake_macros_file.input) {
|
||||
cmake_qt5_module_files.files += $$cmake_macros_file.output
|
||||
}
|
||||
|
||||
-cmake_qt5_module_files.path = $$[QT_INSTALL_LIBS]/cmake/Qt5$${CMAKE_MODULE_NAME}
|
||||
+cmake_qt5_module_files.path = $$NIX_OUTPUT_OUT/lib/cmake/Qt5$${CMAKE_MODULE_NAME}
|
||||
|
||||
# We are generating cmake files. Most developers of Qt are not aware of cmake,
|
||||
# so we require automatic tests to be available. The only module which should
|
||||
diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
|
||||
index c7298928..c60ef16e 100644
|
||||
--- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
|
||||
+++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
|
||||
@@ -3,30 +3,6 @@ if (CMAKE_VERSION VERSION_LESS 3.1.0)
|
||||
message(FATAL_ERROR \"Qt 5 $${CMAKE_MODULE_NAME} module requires at least CMake version 3.1.0\")
|
||||
endif()
|
||||
|
||||
-!!IF !isEmpty(CMAKE_USR_MOVE_WORKAROUND)
|
||||
-!!IF !isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||
-set(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"$$[QT_INSTALL_PREFIX]\")
|
||||
-!!ELSE
|
||||
-get_filename_component(_IMPORT_PREFIX \"${CMAKE_CURRENT_LIST_FILE}\" PATH)
|
||||
-# Use original install prefix when loaded through a
|
||||
-# cross-prefix symbolic link such as /lib -> /usr/lib.
|
||||
-get_filename_component(_realCurr \"${_IMPORT_PREFIX}\" REALPATH)
|
||||
-get_filename_component(_realOrig \"$$CMAKE_INSTALL_LIBS_DIR/cmake/Qt5$${CMAKE_MODULE_NAME}\" REALPATH)
|
||||
-if(_realCurr STREQUAL _realOrig)
|
||||
- get_filename_component(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"$$CMAKE_INSTALL_LIBS_DIR/$${CMAKE_RELATIVE_INSTALL_LIBS_DIR}\" ABSOLUTE)
|
||||
-else()
|
||||
- get_filename_component(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
|
||||
-endif()
|
||||
-unset(_realOrig)
|
||||
-unset(_realCurr)
|
||||
-unset(_IMPORT_PREFIX)
|
||||
-!!ENDIF
|
||||
-!!ELIF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||
-get_filename_component(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"${CMAKE_CURRENT_LIST_DIR}/$${CMAKE_RELATIVE_INSTALL_DIR}\" ABSOLUTE)
|
||||
-!!ELSE
|
||||
-set(_qt5$${CMAKE_MODULE_NAME}_install_prefix \"$$[QT_INSTALL_PREFIX]\")
|
||||
-!!ENDIF
|
||||
-
|
||||
!!IF !equals(TEMPLATE, aux)
|
||||
# For backwards compatibility only. Use Qt5$${CMAKE_MODULE_NAME}_VERSION instead.
|
||||
set(Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING "$$eval(QT.$${MODULE}.VERSION)")
|
||||
@@ -52,11 +28,7 @@ endmacro()
|
||||
macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATION IMPLIB_LOCATION)
|
||||
set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
|
||||
|
||||
-!!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
|
||||
-!!ELSE
|
||||
set(imported_location \"$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
|
||||
-!!ENDIF
|
||||
_qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location})
|
||||
set_target_properties(Qt5::$${CMAKE_MODULE_NAME} PROPERTIES
|
||||
\"INTERFACE_LINK_LIBRARIES\" \"${_Qt5$${CMAKE_MODULE_NAME}_LIB_DEPENDENCIES}\"
|
||||
@@ -69,11 +41,7 @@ macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATI
|
||||
)
|
||||
|
||||
!!IF !isEmpty(CMAKE_WINDOWS_BUILD)
|
||||
-!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||
- set(imported_implib \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
|
||||
-!!ELSE
|
||||
set(imported_implib \"IMPORTED_IMPLIB_${Configuration}\" \"$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
|
||||
-!!ENDIF
|
||||
_qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_implib})
|
||||
if(NOT \"${IMPLIB_LOCATION}\" STREQUAL \"\")
|
||||
set_target_properties(Qt5::$${CMAKE_MODULE_NAME} PROPERTIES
|
||||
@@ -89,24 +57,13 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
|
||||
!!IF !no_module_headers
|
||||
!!IF !isEmpty(CMAKE_BUILD_IS_FRAMEWORK)
|
||||
set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS
|
||||
- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework\"
|
||||
- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework/Headers\"
|
||||
+ \"$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework\"
|
||||
+ \"$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework/Headers\"
|
||||
)
|
||||
!!IF isEmpty(CMAKE_NO_PRIVATE_INCLUDES)
|
||||
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS
|
||||
- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/\"
|
||||
- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/$${MODULE_INCNAME}\"
|
||||
- )
|
||||
-!!ELSE
|
||||
- set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS \"\")
|
||||
-!!ENDIF
|
||||
-!!ELSE
|
||||
-!!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE)
|
||||
- set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR\" \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}\")
|
||||
-!!IF isEmpty(CMAKE_NO_PRIVATE_INCLUDES)
|
||||
- set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS
|
||||
- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/$$VERSION\"
|
||||
- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/$$VERSION/$${MODULE_INCNAME}\"
|
||||
+ \"$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/\"
|
||||
+ \"$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/$${MODULE_INCNAME}\"
|
||||
)
|
||||
!!ELSE
|
||||
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS \"\")
|
||||
@@ -122,7 +79,6 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
|
||||
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS \"\")
|
||||
!!ENDIF
|
||||
!!ENDIF
|
||||
-!!ENDIF
|
||||
!!IF !isEmpty(CMAKE_ADD_SOURCE_INCLUDE_DIRS)
|
||||
include(\"${CMAKE_CURRENT_LIST_DIR}/ExtraSourceIncludes.cmake\" OPTIONAL)
|
||||
!!ENDIF
|
||||
@@ -272,25 +228,13 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
|
||||
!!IF !isEmpty(CMAKE_FIND_OTHER_LIBRARY_BUILD)
|
||||
!!IF isEmpty(CMAKE_DEBUG_TYPE)
|
||||
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
|
||||
-!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||
- if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
|
||||
-!!ELSE // CMAKE_LIB_DIR_IS_ABSOLUTE
|
||||
if (EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
|
||||
-!!ENDIF // CMAKE_LIB_DIR_IS_ABSOLUTE
|
||||
_populate_$${CMAKE_MODULE_NAME}_target_properties(DEBUG \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" \"\" )
|
||||
!!ELSE // CMAKE_STATIC_WINDOWS_BUILD
|
||||
if (EXISTS
|
||||
-!!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
|
||||
- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}$${CMAKE_LIB_FILE_LOCATION_DEBUG}\"
|
||||
-!!ELSE
|
||||
\"$${CMAKE_LIB_FILE_LOCATION_DEBUG}\"
|
||||
-!!ENDIF
|
||||
AND EXISTS
|
||||
-!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||
- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
|
||||
-!!ELSE
|
||||
\"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
|
||||
-!!ENDIF
|
||||
_populate_$${CMAKE_MODULE_NAME}_target_properties(DEBUG \"$${CMAKE_LIB_FILE_LOCATION_DEBUG}\" \"$${CMAKE_IMPLIB_FILE_LOCATION_DEBUG}\" )
|
||||
!!ENDIF // CMAKE_STATIC_WINDOWS_BUILD
|
||||
endif()
|
||||
@@ -309,25 +253,13 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
|
||||
!!IF !isEmpty(CMAKE_FIND_OTHER_LIBRARY_BUILD)
|
||||
!!IF isEmpty(CMAKE_RELEASE_TYPE)
|
||||
!!IF !isEmpty(CMAKE_STATIC_WINDOWS_BUILD)
|
||||
-!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||
- if (EXISTS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
|
||||
-!!ELSE // CMAKE_LIB_DIR_IS_ABSOLUTE
|
||||
if (EXISTS \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
|
||||
-!!ENDIF // CMAKE_LIB_DIR_IS_ABSOLUTE
|
||||
_populate_$${CMAKE_MODULE_NAME}_target_properties(RELEASE \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" \"\" )
|
||||
!!ELSE // CMAKE_STATIC_WINDOWS_BUILD
|
||||
if (EXISTS
|
||||
-!!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
|
||||
- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_DLL_DIR}$${CMAKE_LIB_FILE_LOCATION_RELEASE}\"
|
||||
-!!ELSE
|
||||
\"$${CMAKE_LIB_FILE_LOCATION_RELEASE}\"
|
||||
-!!ENDIF
|
||||
AND EXISTS
|
||||
-!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||
- \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
|
||||
-!!ELSE
|
||||
\"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
|
||||
-!!ENDIF
|
||||
_populate_$${CMAKE_MODULE_NAME}_target_properties(RELEASE \"$${CMAKE_LIB_FILE_LOCATION_RELEASE}\" \"$${CMAKE_IMPLIB_FILE_LOCATION_RELEASE}\" )
|
||||
!!ENDIF // CMAKE_STATIC_WINDOWS_BUILD
|
||||
endif()
|
||||
@@ -346,11 +278,7 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
|
||||
macro(_populate_$${CMAKE_MODULE_NAME}_plugin_properties Plugin Configuration PLUGIN_LOCATION)
|
||||
set_property(TARGET Qt5::${Plugin} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
|
||||
|
||||
-!!IF isEmpty(CMAKE_PLUGIN_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\")
|
||||
-!!ELSE
|
||||
set(imported_location \"$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\")
|
||||
-!!ENDIF
|
||||
_qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location})
|
||||
set_target_properties(Qt5::${Plugin} PROPERTIES
|
||||
\"IMPORTED_LOCATION_${Configuration}\" ${imported_location}
|
||||
diff --git a/mkspecs/features/qml_module.prf b/mkspecs/features/qml_module.prf
|
||||
index 57cfec78..5cbd7c52 100644
|
||||
--- a/mkspecs/features/qml_module.prf
|
||||
+++ b/mkspecs/features/qml_module.prf
|
||||
@@ -51,7 +51,7 @@ builtin_resources {
|
||||
# Install rules
|
||||
qmldir.base = $$qmldir_path
|
||||
qmldir.files = $$qmldir_file
|
||||
-qmldir.path = $$[QT_INSTALL_QML]/$$TARGETPATH
|
||||
+qmldir.path = $$NIX_OUTPUT_QML/$$TARGETPATH
|
||||
INSTALLS += qmldir
|
||||
|
||||
qmlfiles.base = $$_PRO_FILE_PWD_
|
||||
diff --git a/mkspecs/features/qml_plugin.prf b/mkspecs/features/qml_plugin.prf
|
||||
index ad8ecdf5..804634b2 100644
|
||||
--- a/mkspecs/features/qml_plugin.prf
|
||||
+++ b/mkspecs/features/qml_plugin.prf
|
||||
@@ -50,7 +50,7 @@ load(qt_build_paths)
|
||||
|
||||
DESTDIR = $$MODULE_BASE_OUTDIR/qml/$$TARGETPATH
|
||||
|
||||
-target.path = $$[QT_INSTALL_QML]/$$TARGETPATH
|
||||
+target.path = $$NIX_OUTPUT_QML/$$TARGETPATH
|
||||
INSTALLS += target
|
||||
|
||||
# Some final setup
|
||||
diff --git a/mkspecs/features/qt_app.prf b/mkspecs/features/qt_app.prf
|
||||
index 8354f30e..62028fef 100644
|
||||
--- a/mkspecs/features/qt_app.prf
|
||||
+++ b/mkspecs/features/qt_app.prf
|
||||
@@ -30,7 +30,7 @@ host_build:force_bootstrap {
|
||||
target.path = $$[QT_HOST_BINS]
|
||||
} else {
|
||||
!build_pass:qtConfig(debug_and_release): CONFIG += release
|
||||
- target.path = $$[QT_INSTALL_BINS]
|
||||
+ target.path = $$NIX_OUTPUT_BIN/bin
|
||||
CONFIG += relative_qt_rpath # Qt's tools and apps should be relocatable
|
||||
}
|
||||
INSTALLS += target
|
||||
diff --git a/mkspecs/features/qt_build_paths.prf b/mkspecs/features/qt_build_paths.prf
|
||||
index 3bb3823a..655b7b7d 100644
|
||||
--- a/mkspecs/features/qt_build_paths.prf
|
||||
+++ b/mkspecs/features/qt_build_paths.prf
|
||||
@@ -24,6 +24,6 @@ exists($$MODULE_BASE_INDIR/.git): \
|
||||
!force_independent {
|
||||
# If the module is not built independently, everything ends up in qtbase.
|
||||
# This is the case in non-prefix builds, except for selected modules.
|
||||
- MODULE_BASE_OUTDIR = $$[QT_HOST_PREFIX]
|
||||
- MODULE_QMAKE_OUTDIR = $$[QT_HOST_PREFIX]
|
||||
+ MODULE_BASE_OUTDIR = $$NIX_OUTPUT_OUT
|
||||
+ MODULE_QMAKE_OUTDIR = $$NIX_OUTPUT_OUT
|
||||
}
|
||||
diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf
|
||||
index caecb68a..dc5c2178 100644
|
||||
--- a/mkspecs/features/qt_common.prf
|
||||
+++ b/mkspecs/features/qt_common.prf
|
||||
@@ -25,37 +25,6 @@ contains(TEMPLATE, .*lib) {
|
||||
if(!host_build|!cross_compile):qtConfig(reduce_exports): CONFIG += hide_symbols
|
||||
unix:qtConfig(reduce_relocations): CONFIG += bsymbolic_functions
|
||||
qtConfig(separate_debug_info): CONFIG += separate_debug_info
|
||||
-
|
||||
- !isEmpty(_QMAKE_SUPER_CACHE_): \
|
||||
- rplbase = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*
|
||||
- else: \
|
||||
- rplbase = $$MODULE_BASE_OUTDIR
|
||||
- host_build {
|
||||
- qqt_libdir = \$\$\$\$[QT_HOST_LIBS]
|
||||
- qt_libdir = $$[QT_HOST_LIBS]
|
||||
- } else {
|
||||
- qqt_libdir = \$\$\$\$[QT_INSTALL_LIBS]
|
||||
- qt_libdir = $$[QT_INSTALL_LIBS]
|
||||
- }
|
||||
- contains(QMAKE_DEFAULT_LIBDIRS, $$qt_libdir) {
|
||||
- lib_replace0.match = $$rplbase/lib/
|
||||
- lib_replace0.replace = $$qqt_libdir/
|
||||
- lib_replace0.CONFIG = path
|
||||
- QMAKE_PRL_INSTALL_REPLACE += lib_replace0
|
||||
- lib_replace.match = "[^ ']*$$rplbase/lib"
|
||||
- lib_replace.replace =
|
||||
- } else {
|
||||
- lib_replace.match = $$rplbase/lib
|
||||
- lib_replace.replace = $$qqt_libdir
|
||||
- }
|
||||
- lib_replace.CONFIG = path
|
||||
- QMAKE_PRL_INSTALL_REPLACE += lib_replace
|
||||
- !equals(qt_libdir, $$rplbase/lib) {
|
||||
- qtlibdir_replace.match = $$qt_libdir
|
||||
- qtlibdir_replace.replace = $$qqt_libdir
|
||||
- qtlibdir_replace.CONFIG = path
|
||||
- QMAKE_PRL_INSTALL_REPLACE += qtlibdir_replace
|
||||
- }
|
||||
}
|
||||
|
||||
# The remainder of this file must not apply to host tools/libraries,
|
||||
diff --git a/mkspecs/features/qt_docs.prf b/mkspecs/features/qt_docs.prf
|
||||
index 3b74cd4d..6bfbbe6e 100644
|
||||
--- a/mkspecs/features/qt_docs.prf
|
||||
+++ b/mkspecs/features/qt_docs.prf
|
||||
@@ -45,7 +45,7 @@ QMAKE_DOCS_OUTPUTDIR = $$QMAKE_DOCS_BASE_OUTDIR/$$QMAKE_DOCS_TARGETDIR
|
||||
|
||||
QDOC += -outputdir $$shell_quote($$QMAKE_DOCS_OUTPUTDIR)
|
||||
!build_online_docs: \
|
||||
- QDOC += -installdir $$shell_quote($$[QT_INSTALL_DOCS])
|
||||
+ QDOC += -installdir $$shell_quote($$NIX_OUTPUT_DOC)
|
||||
PREP_DOC_INDEXES =
|
||||
DOC_INDEXES =
|
||||
!isEmpty(QTREPOS) {
|
||||
@@ -64,8 +64,8 @@ DOC_INDEXES =
|
||||
DOC_INDEXES += -indexdir $$shell_quote($$qrep/doc)
|
||||
} else {
|
||||
prepare_docs: \
|
||||
- PREP_DOC_INDEXES += -indexdir $$shell_quote($$[QT_INSTALL_DOCS/get])
|
||||
- DOC_INDEXES += -indexdir $$shell_quote($$[QT_INSTALL_DOCS/get])
|
||||
+ PREP_DOC_INDEXES += -indexdir $$shell_quote($$NIX_OUTPUT_DOC)
|
||||
+ DOC_INDEXES += -indexdir $$shell_quote($$NIX_OUTPUT_DOC)
|
||||
}
|
||||
|
||||
qtattributionsscanner.target = qtattributionsscanner
|
||||
@@ -88,12 +88,12 @@ prepare_docs {
|
||||
qch_docs.commands = $$QHELPGENERATOR $$shell_quote($$QMAKE_DOCS_OUTPUTDIR/$${QMAKE_DOCS_TARGET}.qhp) -o $$shell_quote($$QMAKE_DOCS_BASE_OUTDIR/$${QMAKE_DOCS_TARGET}.qch)
|
||||
|
||||
inst_html_docs.files = $$QMAKE_DOCS_OUTPUTDIR
|
||||
- inst_html_docs.path = $$[QT_INSTALL_DOCS]
|
||||
+ inst_html_docs.path = $$NIX_OUTPUT_DOC
|
||||
inst_html_docs.CONFIG += no_check_exist directory no_default_install no_build
|
||||
INSTALLS += inst_html_docs
|
||||
|
||||
inst_qch_docs.files = $$QMAKE_DOCS_BASE_OUTDIR/$${QMAKE_DOCS_TARGET}.qch
|
||||
- inst_qch_docs.path = $$[QT_INSTALL_DOCS]
|
||||
+ inst_qch_docs.path = $$NIX_OUTPUT_DOC
|
||||
inst_qch_docs.CONFIG += no_check_exist no_default_install no_build
|
||||
INSTALLS += inst_qch_docs
|
||||
|
||||
diff --git a/mkspecs/features/qt_example_installs.prf b/mkspecs/features/qt_example_installs.prf
|
||||
index 43b58817..e635b8f6 100644
|
||||
--- a/mkspecs/features/qt_example_installs.prf
|
||||
+++ b/mkspecs/features/qt_example_installs.prf
|
||||
@@ -88,7 +88,7 @@ sourcefiles += \
|
||||
$$SOURCES $$HEADERS $$FORMS $$RESOURCES $$TRANSLATIONS \
|
||||
$$DBUS_ADAPTORS $$DBUS_INTERFACES
|
||||
addInstallFiles(sources.files, $$sourcefiles)
|
||||
-sources.path = $$[QT_INSTALL_EXAMPLES]/$$probase
|
||||
+sources.path = $$NIX_OUTPUT_DEV/share/examples/$$probase
|
||||
INSTALLS += sources
|
||||
|
||||
check_examples {
|
||||
diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf
|
||||
index 1903e509..ae7b5859 100644
|
||||
--- a/mkspecs/features/qt_functions.prf
|
||||
+++ b/mkspecs/features/qt_functions.prf
|
||||
@@ -69,7 +69,7 @@ defineTest(qtHaveModule) {
|
||||
defineTest(qtPrepareTool) {
|
||||
cmd = $$eval(QT_TOOL.$${2}.binary)
|
||||
isEmpty(cmd) {
|
||||
- cmd = $$[QT_HOST_BINS]/$$2
|
||||
+ cmd = $$system("command -v $$2")
|
||||
exists($${cmd}.pl) {
|
||||
$${1}_EXE = $${cmd}.pl
|
||||
cmd = perl -w $$system_path($${cmd}.pl)
|
||||
diff --git a/mkspecs/features/qt_installs.prf b/mkspecs/features/qt_installs.prf
|
||||
index 1ebca173..b784441d 100644
|
||||
--- a/mkspecs/features/qt_installs.prf
|
||||
+++ b/mkspecs/features/qt_installs.prf
|
||||
@@ -12,16 +12,10 @@
|
||||
#library
|
||||
!qt_no_install_library {
|
||||
win32 {
|
||||
- host_build: \
|
||||
- dlltarget.path = $$[QT_HOST_BINS]
|
||||
- else: \
|
||||
- dlltarget.path = $$[QT_INSTALL_BINS]
|
||||
+ dlltarget.path = $$NIX_OUTPUT_BIN/bin
|
||||
INSTALLS += dlltarget
|
||||
}
|
||||
- host_build: \
|
||||
- target.path = $$[QT_HOST_LIBS]
|
||||
- else: \
|
||||
- target.path = $$[QT_INSTALL_LIBS]
|
||||
+ target.path = $$NIX_OUTPUT_OUT/lib
|
||||
!static: target.CONFIG = no_dll
|
||||
INSTALLS += target
|
||||
}
|
||||
@@ -29,35 +23,35 @@
|
||||
#headers
|
||||
qt_install_headers {
|
||||
gen_headers.files = $$SYNCQT.GENERATED_HEADER_FILES
|
||||
- gen_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME
|
||||
+ gen_headers.path = $$NIX_OUTPUT_DEV/include/$$MODULE_INCNAME
|
||||
INSTALLS += gen_headers
|
||||
|
||||
targ_headers.files = $$SYNCQT.HEADER_FILES $$SYNCQT.INJECTED_HEADER_FILES
|
||||
- targ_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME
|
||||
+ targ_headers.path = $$NIX_OUTPUT_DEV/include/$$MODULE_INCNAME
|
||||
INSTALLS += targ_headers
|
||||
|
||||
private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.INJECTED_PRIVATE_HEADER_FILES
|
||||
- private_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/private
|
||||
+ private_headers.path = $$NIX_OUTPUT_DEV/include/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/private
|
||||
generated_privates: \
|
||||
private_headers.CONFIG += no_check_exist
|
||||
INSTALLS += private_headers
|
||||
|
||||
qpa_headers.files = $$SYNCQT.QPA_HEADER_FILES
|
||||
- qpa_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/qpa
|
||||
+ qpa_headers.path = $$NIX_OUTPUT_DEV/include/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/qpa
|
||||
INSTALLS += qpa_headers
|
||||
}
|
||||
|
||||
#module
|
||||
qt_install_module {
|
||||
!isEmpty(MODULE_PRI) {
|
||||
- pritarget.path = $$[QT_HOST_DATA]/mkspecs/modules
|
||||
+ pritarget.path = $$NIX_OUTPUT_DEV/mkspecs/modules
|
||||
pritarget.files = $$MODULE_PRI
|
||||
INSTALLS += pritarget
|
||||
} else: isEmpty(MODULE_PRIVATE_PRI) {
|
||||
warning("Project $$basename(_PRO_FILE_) is a module, but has not defined MODULE_PRI, which is required for Qt to expose the module to other projects.")
|
||||
}
|
||||
!isEmpty(MODULE_PRIVATE_PRI) {
|
||||
- privpritarget.path = $$[QT_HOST_DATA]/mkspecs/modules
|
||||
+ privpritarget.path = $$NIX_OUTPUT_DEV/mkspecs/modules
|
||||
privpritarget.files = $$MODULE_PRIVATE_PRI
|
||||
INSTALLS += privpritarget
|
||||
}
|
||||
diff --git a/mkspecs/features/qt_plugin.prf b/mkspecs/features/qt_plugin.prf
|
||||
index 40528a65..903f7952 100644
|
||||
--- a/mkspecs/features/qt_plugin.prf
|
||||
+++ b/mkspecs/features/qt_plugin.prf
|
||||
@@ -88,7 +88,7 @@ CONFIG(static, static|shared)|prefix_build {
|
||||
}
|
||||
}
|
||||
|
||||
-target.path = $$[QT_INSTALL_PLUGINS]/$$PLUGIN_TYPE
|
||||
+target.path = $$NIX_OUTPUT_PLUGIN/$$PLUGIN_TYPE
|
||||
INSTALLS += target
|
||||
|
||||
TARGET = $$qt5LibraryTarget($$TARGET)
|
||||
--
|
||||
2.22.1
|
||||
|
|
@ -0,0 +1,194 @@
|
|||
From 689670949eac83e1ba76425a1fc17efeb920eff1 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Tuegel <ttuegel@mailbox.org>
|
||||
Date: Tue, 17 Sep 2019 05:34:28 -0500
|
||||
Subject: [PATCH 04/10] qtbase-cmake
|
||||
|
||||
---
|
||||
mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in | 2 +-
|
||||
mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in | 4 ++--
|
||||
src/corelib/Qt5CoreConfigExtras.cmake.in | 10 +++++-----
|
||||
src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in | 2 +-
|
||||
.../Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in | 2 +-
|
||||
src/dbus/Qt5DBusConfigExtras.cmake.in | 12 ++----------
|
||||
src/gui/Qt5GuiConfigExtras.cmake.in | 6 +++---
|
||||
src/widgets/Qt5WidgetsConfigExtras.cmake.in | 2 +-
|
||||
8 files changed, 16 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
|
||||
index c60ef16e..e354ab91 100644
|
||||
--- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
|
||||
+++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
|
||||
@@ -278,7 +278,7 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
|
||||
macro(_populate_$${CMAKE_MODULE_NAME}_plugin_properties Plugin Configuration PLUGIN_LOCATION)
|
||||
set_property(TARGET Qt5::${Plugin} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
|
||||
|
||||
- set(imported_location \"$${CMAKE_PLUGIN_DIR}${PLUGIN_LOCATION}\")
|
||||
+ set(imported_location \"${PLUGIN_LOCATION}\")
|
||||
_qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location})
|
||||
set_target_properties(Qt5::${Plugin} PROPERTIES
|
||||
\"IMPORTED_LOCATION_${Configuration}\" ${imported_location}
|
||||
diff --git a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in
|
||||
index 5baf0fdb..3583745a 100644
|
||||
--- a/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in
|
||||
+++ b/mkspecs/features/data/cmake/Qt5PluginTarget.cmake.in
|
||||
@@ -2,10 +2,10 @@
|
||||
add_library(Qt5::$$CMAKE_PLUGIN_NAME MODULE IMPORTED)
|
||||
|
||||
!!IF !isEmpty(CMAKE_RELEASE_TYPE)
|
||||
-_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME RELEASE \"$${CMAKE_PLUGIN_LOCATION_RELEASE}\")
|
||||
+_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME RELEASE \"$${CMAKE_PLUGIN_DIR}$${CMAKE_PLUGIN_LOCATION_RELEASE}\")
|
||||
!!ENDIF
|
||||
!!IF !isEmpty(CMAKE_DEBUG_TYPE)
|
||||
-_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME DEBUG \"$${CMAKE_PLUGIN_LOCATION_DEBUG}\")
|
||||
+_populate_$${CMAKE_MODULE_NAME}_plugin_properties($$CMAKE_PLUGIN_NAME DEBUG \"$${CMAKE_PLUGIN_DIR}$${CMAKE_PLUGIN_LOCATION_DEBUG}\")
|
||||
!!ENDIF
|
||||
|
||||
list(APPEND Qt5$${CMAKE_MODULE_NAME}_PLUGINS Qt5::$$CMAKE_PLUGIN_NAME)
|
||||
diff --git a/src/corelib/Qt5CoreConfigExtras.cmake.in b/src/corelib/Qt5CoreConfigExtras.cmake.in
|
||||
index e0652fdc..450b2a2d 100644
|
||||
--- a/src/corelib/Qt5CoreConfigExtras.cmake.in
|
||||
+++ b/src/corelib/Qt5CoreConfigExtras.cmake.in
|
||||
@@ -3,7 +3,7 @@ if (NOT TARGET Qt5::qmake)
|
||||
add_executable(Qt5::qmake IMPORTED)
|
||||
|
||||
!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5Core_install_prefix}/$${CMAKE_BIN_DIR}qmake$$CMAKE_BIN_SUFFIX\")
|
||||
+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_BIN_DIR}qmake$$CMAKE_BIN_SUFFIX\")
|
||||
!!ELSE
|
||||
set(imported_location \"$${CMAKE_BIN_DIR}qmake$$CMAKE_BIN_SUFFIX\")
|
||||
!!ENDIF
|
||||
@@ -18,7 +18,7 @@ if (NOT TARGET Qt5::moc)
|
||||
add_executable(Qt5::moc IMPORTED)
|
||||
|
||||
!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5Core_install_prefix}/$${CMAKE_BIN_DIR}moc$$CMAKE_BIN_SUFFIX\")
|
||||
+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_BIN_DIR}moc$$CMAKE_BIN_SUFFIX\")
|
||||
!!ELSE
|
||||
set(imported_location \"$${CMAKE_BIN_DIR}moc$$CMAKE_BIN_SUFFIX\")
|
||||
!!ENDIF
|
||||
@@ -35,7 +35,7 @@ if (NOT TARGET Qt5::rcc)
|
||||
add_executable(Qt5::rcc IMPORTED)
|
||||
|
||||
!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5Core_install_prefix}/$${CMAKE_BIN_DIR}rcc$$CMAKE_BIN_SUFFIX\")
|
||||
+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_BIN_DIR}rcc$$CMAKE_BIN_SUFFIX\")
|
||||
!!ELSE
|
||||
set(imported_location \"$${CMAKE_BIN_DIR}rcc$$CMAKE_BIN_SUFFIX\")
|
||||
!!ENDIF
|
||||
@@ -116,7 +116,7 @@ if (NOT TARGET Qt5::WinMain)
|
||||
!!IF !isEmpty(CMAKE_RELEASE_TYPE)
|
||||
set_property(TARGET Qt5::WinMain APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
|
||||
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5Core_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_RELEASE}\")
|
||||
+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_RELEASE}\")
|
||||
!!ELSE
|
||||
set(imported_location \"$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_RELEASE}\")
|
||||
!!ENDIF
|
||||
@@ -130,7 +130,7 @@ if (NOT TARGET Qt5::WinMain)
|
||||
set_property(TARGET Qt5::WinMain APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
|
||||
|
||||
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5Core_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_DEBUG}\")
|
||||
+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_DEBUG}\")
|
||||
!!ELSE
|
||||
set(imported_location \"$${CMAKE_LIB_DIR}$${CMAKE_WINMAIN_FILE_LOCATION_DEBUG}\")
|
||||
!!ENDIF
|
||||
diff --git a/src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in b/src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in
|
||||
index c357237d..6f0c75de 100644
|
||||
--- a/src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in
|
||||
+++ b/src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
!!IF isEmpty(CMAKE_HOST_DATA_DIR_IS_ABSOLUTE)
|
||||
-set(_qt5_corelib_extra_includes \"${_qt5Core_install_prefix}/$${CMAKE_HOST_DATA_DIR}/mkspecs/$${CMAKE_MKSPEC}\")
|
||||
+set(_qt5_corelib_extra_includes \"$$NIX_OUTPUT_DEV/$${CMAKE_HOST_DATA_DIR}/mkspecs/$${CMAKE_MKSPEC}\")
|
||||
!!ELSE
|
||||
set(_qt5_corelib_extra_includes \"$${CMAKE_HOST_DATA_DIR}mkspecs/$${CMAKE_MKSPEC}\")
|
||||
!!ENDIF
|
||||
diff --git a/src/corelib/Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in b/src/corelib/Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in
|
||||
index 706304cf..546420f6 100644
|
||||
--- a/src/corelib/Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in
|
||||
+++ b/src/corelib/Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
!!IF isEmpty(CMAKE_INSTALL_DATA_DIR_IS_ABSOLUTE)
|
||||
-set(_qt5_corelib_extra_includes \"${_qt5Core_install_prefix}/$${CMAKE_INSTALL_DATA_DIR}/mkspecs/$${CMAKE_MKSPEC}\")
|
||||
+set(_qt5_corelib_extra_includes \"$$NIX_OUTPUT_DEV/$${CMAKE_INSTALL_DATA_DIR}/mkspecs/$${CMAKE_MKSPEC}\")
|
||||
!!ELSE
|
||||
set(_qt5_corelib_extra_includes \"$${CMAKE_INSTALL_DATA_DIR}mkspecs/$${CMAKE_MKSPEC}\")
|
||||
!!ENDIF
|
||||
diff --git a/src/dbus/Qt5DBusConfigExtras.cmake.in b/src/dbus/Qt5DBusConfigExtras.cmake.in
|
||||
index 1d947159..b36865fc 100644
|
||||
--- a/src/dbus/Qt5DBusConfigExtras.cmake.in
|
||||
+++ b/src/dbus/Qt5DBusConfigExtras.cmake.in
|
||||
@@ -2,11 +2,7 @@
|
||||
if (NOT TARGET Qt5::qdbuscpp2xml)
|
||||
add_executable(Qt5::qdbuscpp2xml IMPORTED)
|
||||
|
||||
-!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5DBus_install_prefix}/$${CMAKE_BIN_DIR}qdbuscpp2xml$$CMAKE_BIN_SUFFIX\")
|
||||
-!!ELSE
|
||||
- set(imported_location \"$${CMAKE_BIN_DIR}qdbuscpp2xml$$CMAKE_BIN_SUFFIX\")
|
||||
-!!ENDIF
|
||||
+ set(imported_location \"$$NIX_OUTPUT_DEV/bin/qdbuscpp2xml$$CMAKE_BIN_SUFFIX\")
|
||||
_qt5_DBus_check_file_exists(${imported_location})
|
||||
|
||||
set_target_properties(Qt5::qdbuscpp2xml PROPERTIES
|
||||
@@ -17,11 +13,7 @@ endif()
|
||||
if (NOT TARGET Qt5::qdbusxml2cpp)
|
||||
add_executable(Qt5::qdbusxml2cpp IMPORTED)
|
||||
|
||||
-!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5DBus_install_prefix}/$${CMAKE_BIN_DIR}qdbusxml2cpp$$CMAKE_BIN_SUFFIX\")
|
||||
-!!ELSE
|
||||
- set(imported_location \"$${CMAKE_BIN_DIR}qdbusxml2cpp$$CMAKE_BIN_SUFFIX\")
|
||||
-!!ENDIF
|
||||
+ set(imported_location \"$$NIX_OUTPUT_DEV/bin/qdbusxml2cpp$$CMAKE_BIN_SUFFIX\")
|
||||
_qt5_DBus_check_file_exists(${imported_location})
|
||||
|
||||
set_target_properties(Qt5::qdbusxml2cpp PROPERTIES
|
||||
diff --git a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
index 84dbbfeb..8ad0720c 100644
|
||||
--- a/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
+++ b/src/gui/Qt5GuiConfigExtras.cmake.in
|
||||
@@ -2,7 +2,7 @@
|
||||
!!IF !isEmpty(CMAKE_ANGLE_EGL_DLL_RELEASE)
|
||||
|
||||
!!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE)
|
||||
-set(Qt5Gui_EGL_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR/QtANGLE\")
|
||||
+set(Qt5Gui_EGL_INCLUDE_DIRS \"$$NIX_OUTPUT_DEV/$$CMAKE_INCLUDE_DIR/QtANGLE\")
|
||||
!!ELSE
|
||||
set(Qt5Gui_EGL_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR/QtANGLE\")
|
||||
!!ENDIF
|
||||
@@ -17,13 +17,13 @@ macro(_populate_qt5gui_gl_target_properties TargetName Configuration LIB_LOCATIO
|
||||
set_property(TARGET Qt5::${TargetName} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
|
||||
|
||||
!!IF isEmpty(CMAKE_DLL_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5Gui_install_prefix}/$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
|
||||
+ set(imported_location \"$$NIX_OUTPUT_OUT/$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
|
||||
!!ELSE
|
||||
set(imported_location \"$${CMAKE_DLL_DIR}${LIB_LOCATION}\")
|
||||
!!ENDIF
|
||||
|
||||
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||
- set(imported_implib \"${_qt5Gui_install_prefix}/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
|
||||
+ set(imported_implib \"$$NIX_OUTPUT_OUT/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
|
||||
!!ELSE
|
||||
set(imported_implib \"$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
|
||||
!!ENDIF
|
||||
diff --git a/src/widgets/Qt5WidgetsConfigExtras.cmake.in b/src/widgets/Qt5WidgetsConfigExtras.cmake.in
|
||||
index 99d87e2e..a4eab2aa 100644
|
||||
--- a/src/widgets/Qt5WidgetsConfigExtras.cmake.in
|
||||
+++ b/src/widgets/Qt5WidgetsConfigExtras.cmake.in
|
||||
@@ -3,7 +3,7 @@ if (NOT TARGET Qt5::uic)
|
||||
add_executable(Qt5::uic IMPORTED)
|
||||
|
||||
!!IF isEmpty(CMAKE_BIN_DIR_IS_ABSOLUTE)
|
||||
- set(imported_location \"${_qt5Widgets_install_prefix}/$${CMAKE_BIN_DIR}uic$$CMAKE_BIN_SUFFIX\")
|
||||
+ set(imported_location \"$$NIX_OUTPUT_DEV/$${CMAKE_BIN_DIR}uic$$CMAKE_BIN_SUFFIX\")
|
||||
!!ELSE
|
||||
set(imported_location \"$${CMAKE_BIN_DIR}uic$$CMAKE_BIN_SUFFIX\")
|
||||
!!ENDIF
|
||||
--
|
||||
2.22.1
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
From b4542d244adc118e8a84ee4ae1d737b5205da1e3 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Tuegel <ttuegel@mailbox.org>
|
||||
Date: Tue, 17 Sep 2019 05:35:33 -0500
|
||||
Subject: [PATCH 05/10] qtbase-gtk3
|
||||
|
||||
---
|
||||
src/plugins/platformthemes/gtk3/main.cpp | 17 ++++++++++++++++-
|
||||
1 file changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/plugins/platformthemes/gtk3/main.cpp b/src/plugins/platformthemes/gtk3/main.cpp
|
||||
index fb1c425d..bb8bab97 100644
|
||||
--- a/src/plugins/platformthemes/gtk3/main.cpp
|
||||
+++ b/src/plugins/platformthemes/gtk3/main.cpp
|
||||
@@ -39,6 +39,7 @@
|
||||
|
||||
#include <qpa/qplatformthemeplugin.h>
|
||||
#include "qgtk3theme.h"
|
||||
+#include <QFile>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
@@ -54,8 +55,22 @@ public:
|
||||
QPlatformTheme *QGtk3ThemePlugin::create(const QString &key, const QStringList ¶ms)
|
||||
{
|
||||
Q_UNUSED(params);
|
||||
- if (!key.compare(QLatin1String(QGtk3Theme::name), Qt::CaseInsensitive))
|
||||
+ if (!key.compare(QLatin1String(QGtk3Theme::name), Qt::CaseInsensitive)) {
|
||||
+
|
||||
+#ifdef NIXPKGS_QGTK3_XDG_DATA_DIRS
|
||||
+ QStringList XDG_DATA_DIRS = QFile::decodeName(qgetenv("XDG_DATA_DIRS")).split(':');
|
||||
+ XDG_DATA_DIRS << QLatin1String(NIXPKGS_QGTK3_XDG_DATA_DIRS);
|
||||
+ qputenv("XDG_DATA_DIRS", QFile::encodeName(XDG_DATA_DIRS.join(':')));
|
||||
+#endif
|
||||
+
|
||||
+#ifdef NIXPKGS_QGTK3_GIO_EXTRA_MODULES
|
||||
+ QStringList GIO_EXTRA_MODULES = QFile::decodeName(qgetenv("GIO_EXTRA_MODULES")).split(':');
|
||||
+ GIO_EXTRA_MODULES << QLatin1String(NIXPKGS_QGTK3_GIO_EXTRA_MODULES);
|
||||
+ qputenv("GIO_EXTRA_MODULES", QFile::encodeName(GIO_EXTRA_MODULES.join(':')));
|
||||
+#endif
|
||||
+
|
||||
return new QGtk3Theme;
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.22.1
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
From 6dfdf2044bc8a0212b14414c4b9d9c1bfa5c1e6b Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Tuegel <ttuegel@mailbox.org>
|
||||
Date: Tue, 17 Sep 2019 05:35:58 -0500
|
||||
Subject: [PATCH 06/10] qtbase-xcursor
|
||||
|
||||
---
|
||||
src/plugins/platforms/xcb/qxcbcursor.cpp | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/platforms/xcb/qxcbcursor.cpp b/src/plugins/platforms/xcb/qxcbcursor.cpp
|
||||
index fbadab4d..c83ce0af 100644
|
||||
--- a/src/plugins/platforms/xcb/qxcbcursor.cpp
|
||||
+++ b/src/plugins/platforms/xcb/qxcbcursor.cpp
|
||||
@@ -317,10 +317,10 @@ QXcbCursor::QXcbCursor(QXcbConnection *conn, QXcbScreen *screen)
|
||||
#if QT_CONFIG(xcb_xlib) && QT_CONFIG(library)
|
||||
static bool function_ptrs_not_initialized = true;
|
||||
if (function_ptrs_not_initialized) {
|
||||
- QLibrary xcursorLib(QLatin1String("Xcursor"), 1);
|
||||
+ QLibrary xcursorLib(QLatin1String(NIXPKGS_LIBXCURSOR), 1);
|
||||
bool xcursorFound = xcursorLib.load();
|
||||
if (!xcursorFound) { // try without the version number
|
||||
- xcursorLib.setFileName(QLatin1String("Xcursor"));
|
||||
+ xcursorLib.setFileName(QLatin1String(NIXPKGS_LIBXCURSOR));
|
||||
xcursorFound = xcursorLib.load();
|
||||
}
|
||||
if (xcursorFound) {
|
||||
--
|
||||
2.22.1
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
From 7211024a1d54232f9a6f91f7aac467e0e8893691 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Tuegel <ttuegel@mailbox.org>
|
||||
Date: Tue, 17 Sep 2019 05:36:10 -0500
|
||||
Subject: [PATCH 07/10] qtbase-xcompose
|
||||
|
||||
---
|
||||
.../compose/generator/qtablegenerator.cpp | 5 +----
|
||||
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
|
||||
index b5a0a5bb..6c20305f 100644
|
||||
--- a/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
|
||||
+++ b/src/plugins/platforminputcontexts/compose/generator/qtablegenerator.cpp
|
||||
@@ -265,12 +265,9 @@ void TableGenerator::initPossibleLocations()
|
||||
m_possibleLocations.reserve(7);
|
||||
if (qEnvironmentVariableIsSet("QTCOMPOSE"))
|
||||
m_possibleLocations.append(QString::fromLocal8Bit(qgetenv("QTCOMPOSE")));
|
||||
- m_possibleLocations.append(QStringLiteral("/usr/share/X11/locale"));
|
||||
- m_possibleLocations.append(QStringLiteral("/usr/local/share/X11/locale"));
|
||||
- m_possibleLocations.append(QStringLiteral("/usr/lib/X11/locale"));
|
||||
- m_possibleLocations.append(QStringLiteral("/usr/local/lib/X11/locale"));
|
||||
m_possibleLocations.append(QStringLiteral(X11_PREFIX "/share/X11/locale"));
|
||||
m_possibleLocations.append(QStringLiteral(X11_PREFIX "/lib/X11/locale"));
|
||||
+ m_possibleLocations.append(QLatin1String(NIXPKGS_QTCOMPOSE));
|
||||
}
|
||||
|
||||
QString TableGenerator::findComposeFile()
|
||||
--
|
||||
2.22.1
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
From f24621e540d5511802013aa8e8972c9e060c953a Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Tuegel <ttuegel@mailbox.org>
|
||||
Date: Tue, 17 Sep 2019 05:36:25 -0500
|
||||
Subject: [PATCH 08/10] qtbase-tzdir
|
||||
|
||||
---
|
||||
src/corelib/tools/qtimezoneprivate_tz.cpp | 20 ++++++++++++++------
|
||||
1 file changed, 14 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/corelib/tools/qtimezoneprivate_tz.cpp b/src/corelib/tools/qtimezoneprivate_tz.cpp
|
||||
index 7d85bc07..c13d99b8 100644
|
||||
--- a/src/corelib/tools/qtimezoneprivate_tz.cpp
|
||||
+++ b/src/corelib/tools/qtimezoneprivate_tz.cpp
|
||||
@@ -71,7 +71,11 @@ typedef QHash<QByteArray, QTzTimeZone> QTzTimeZoneHash;
|
||||
// Parse zone.tab table, assume lists all installed zones, if not will need to read directories
|
||||
static QTzTimeZoneHash loadTzTimeZones()
|
||||
{
|
||||
- QString path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
|
||||
+ // Try TZDIR first, in case we're running on NixOS.
|
||||
+ QString path = QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/zone.tab");
|
||||
+ // Fallback to traditional paths in case we are not on NixOS.
|
||||
+ if (!QFile::exists(path))
|
||||
+ path = QStringLiteral("/usr/share/zoneinfo/zone.tab");
|
||||
if (!QFile::exists(path))
|
||||
path = QStringLiteral("/usr/lib/zoneinfo/zone.tab");
|
||||
|
||||
@@ -650,12 +654,16 @@ void QTzTimeZonePrivate::init(const QByteArray &ianaId)
|
||||
if (!tzif.open(QIODevice::ReadOnly))
|
||||
return;
|
||||
} else {
|
||||
- // Open named tz, try modern path first, if fails try legacy path
|
||||
- tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
|
||||
+ // Try TZDIR first, in case we're running on NixOS
|
||||
+ tzif.setFileName(QFile::decodeName(qgetenv("TZDIR")) + QStringLiteral("/") + QString::fromLocal8Bit(ianaId));
|
||||
if (!tzif.open(QIODevice::ReadOnly)) {
|
||||
- tzif.setFileName(QLatin1String("/usr/lib/zoneinfo/") + QString::fromLocal8Bit(ianaId));
|
||||
- if (!tzif.open(QIODevice::ReadOnly))
|
||||
- return;
|
||||
+ // Open named tz, try modern path first, if fails try legacy path
|
||||
+ tzif.setFileName(QLatin1String("/usr/share/zoneinfo/") + QString::fromLocal8Bit(ianaId));
|
||||
+ if (!tzif.open(QIODevice::ReadOnly)) {
|
||||
+ tzif.setFileName(QLatin1String("/usr/lib/zoneinfo/") + QString::fromLocal8Bit(ianaId));
|
||||
+ if (!tzif.open(QIODevice::ReadOnly))
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.22.1
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
From 40616bf4afacadca360083d7d365914f8f8573e5 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Tuegel <ttuegel@mailbox.org>
|
||||
Date: Tue, 17 Sep 2019 05:36:41 -0500
|
||||
Subject: [PATCH 09/10] qtbase-qtpluginpath
|
||||
|
||||
---
|
||||
src/corelib/kernel/qcoreapplication.cpp | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
|
||||
index 8652c456..74562272 100644
|
||||
--- a/src/corelib/kernel/qcoreapplication.cpp
|
||||
+++ b/src/corelib/kernel/qcoreapplication.cpp
|
||||
@@ -2690,6 +2690,15 @@ QStringList QCoreApplication::libraryPaths()
|
||||
QStringList *app_libpaths = new QStringList;
|
||||
coreappdata()->app_libpaths.reset(app_libpaths);
|
||||
|
||||
+ // Add library paths derived from PATH
|
||||
+ const QStringList paths = QFile::decodeName(qgetenv("PATH")).split(':');
|
||||
+ const QString plugindir = QStringLiteral("../" NIXPKGS_QT_PLUGIN_PREFIX);
|
||||
+ for (const QString &path: paths) {
|
||||
+ if (!path.isEmpty()) {
|
||||
+ app_libpaths->append(QDir::cleanPath(path + QDir::separator() + plugindir));
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
QString libPathEnv = qEnvironmentVariable("QT_PLUGIN_PATH");
|
||||
if (!libPathEnv.isEmpty()) {
|
||||
QStringList paths = libPathEnv.split(QDir::listSeparator(), QString::SkipEmptyParts);
|
||||
--
|
||||
2.22.1
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
From 60a2d764708234a06828c76d91db77565e08d872 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Tuegel <ttuegel@mailbox.org>
|
||||
Date: Tue, 17 Sep 2019 05:37:04 -0500
|
||||
Subject: [PATCH 10/10] qtbase-assert
|
||||
|
||||
---
|
||||
src/testlib/qtestassert.h | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/testlib/qtestassert.h b/src/testlib/qtestassert.h
|
||||
index 6498ea84..d821ced7 100644
|
||||
--- a/src/testlib/qtestassert.h
|
||||
+++ b/src/testlib/qtestassert.h
|
||||
@@ -44,10 +44,13 @@
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
-
|
||||
+#if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS)
|
||||
+#define QTEST_ASSERT(cond) do { } while ((false) && (cond))
|
||||
+#define QTEST_ASSERT_X(cond, where, what) do { } while ((false) && (cond))
|
||||
+#else
|
||||
#define QTEST_ASSERT(cond) do { if (!(cond)) qt_assert(#cond,__FILE__,__LINE__); } while (false)
|
||||
-
|
||||
#define QTEST_ASSERT_X(cond, where, what) do { if (!(cond)) qt_assert_x(where, what,__FILE__,__LINE__); } while (false)
|
||||
+#endif
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
--
|
||||
2.22.1
|
||||
|
|
@ -1,139 +0,0 @@
|
|||
From 9aced4f9571e74cc57b853598aa4b3f38d66363d Mon Sep 17 00:00:00 2001
|
||||
From: Johan Klokkhammer Helsing <johan.helsing@qt.io>
|
||||
Date: Thu, 1 Nov 2018 13:48:52 +0100
|
||||
Subject: [PATCH 1/2] Client: Don't be exposed if we want to create a sub or
|
||||
shell surface
|
||||
|
||||
Because some shells don't allow attaching buffers before configure, we need to
|
||||
not be exposed until we know that we don't want a shell surface.
|
||||
|
||||
Change-Id: Ida7101a99f953d02cf6401e4ea8d28cfabd6e102
|
||||
Reviewed-by: Giulio Camuffo <giulio.camuffo@kdab.com>
|
||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
---
|
||||
src/client/qwaylanddisplay.cpp | 13 ++++++-------
|
||||
src/client/qwaylanddisplay_p.h | 6 +++---
|
||||
src/client/qwaylandwindow.cpp | 18 +++++++++++++++---
|
||||
3 files changed, 24 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
|
||||
index a2957e0d..f2bd3160 100644
|
||||
--- a/src/client/qwaylanddisplay.cpp
|
||||
+++ b/src/client/qwaylanddisplay.cpp
|
||||
@@ -88,13 +88,6 @@ struct wl_surface *QWaylandDisplay::createSurface(void *handle)
|
||||
return surface;
|
||||
}
|
||||
|
||||
-QWaylandShellSurface *QWaylandDisplay::createShellSurface(QWaylandWindow *window)
|
||||
-{
|
||||
- if (!mWaylandIntegration->shellIntegration())
|
||||
- return nullptr;
|
||||
- return mWaylandIntegration->shellIntegration()->createShellSurface(window);
|
||||
-}
|
||||
-
|
||||
struct ::wl_region *QWaylandDisplay::createRegion(const QRegion &qregion)
|
||||
{
|
||||
struct ::wl_region *region = mCompositor.create_region();
|
||||
@@ -108,12 +101,18 @@ struct ::wl_region *QWaylandDisplay::createRegion(const QRegion &qregion)
|
||||
::wl_subsurface *QWaylandDisplay::createSubSurface(QWaylandWindow *window, QWaylandWindow *parent)
|
||||
{
|
||||
if (!mSubCompositor) {
|
||||
+ qCWarning(lcQpaWayland) << "Can't create subsurface, not supported by the compositor.";
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return mSubCompositor->get_subsurface(window->object(), parent->object());
|
||||
}
|
||||
|
||||
+QWaylandShellIntegration *QWaylandDisplay::shellIntegration() const
|
||||
+{
|
||||
+ return mWaylandIntegration->shellIntegration();
|
||||
+}
|
||||
+
|
||||
QWaylandClientBufferIntegration * QWaylandDisplay::clientBufferIntegration() const
|
||||
{
|
||||
return mWaylandIntegration->clientBufferIntegration();
|
||||
diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h
|
||||
index 0dd8d7af..cc6a0a72 100644
|
||||
--- a/src/client/qwaylanddisplay_p.h
|
||||
+++ b/src/client/qwaylanddisplay_p.h
|
||||
@@ -94,7 +94,7 @@ class QWaylandQtKeyExtension;
|
||||
class QWaylandWindow;
|
||||
class QWaylandIntegration;
|
||||
class QWaylandHardwareIntegration;
|
||||
-class QWaylandShellSurface;
|
||||
+class QWaylandShellIntegration;
|
||||
class QWaylandCursorTheme;
|
||||
|
||||
typedef void (*RegistryListener)(void *data,
|
||||
@@ -115,13 +115,13 @@ public:
|
||||
QWaylandScreen *screenForOutput(struct wl_output *output) const;
|
||||
|
||||
struct wl_surface *createSurface(void *handle);
|
||||
- QWaylandShellSurface *createShellSurface(QWaylandWindow *window);
|
||||
struct ::wl_region *createRegion(const QRegion &qregion);
|
||||
struct ::wl_subsurface *createSubSurface(QWaylandWindow *window, QWaylandWindow *parent);
|
||||
|
||||
+ QWaylandShellIntegration *shellIntegration() const;
|
||||
QWaylandClientBufferIntegration *clientBufferIntegration() const;
|
||||
-
|
||||
QWaylandWindowManagerIntegration *windowManagerIntegration() const;
|
||||
+
|
||||
#if QT_CONFIG(cursor)
|
||||
void setCursor(struct wl_buffer *buffer, struct wl_cursor_image *image, qreal dpr);
|
||||
void setCursor(const QSharedPointer<QWaylandBuffer> &buffer, const QPoint &hotSpot, qreal dpr);
|
||||
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
||||
index 4ac2ca51..600ea1df 100644
|
||||
--- a/src/client/qwaylandwindow.cpp
|
||||
+++ b/src/client/qwaylandwindow.cpp
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "qwaylandnativeinterface_p.h"
|
||||
#include "qwaylanddecorationfactory_p.h"
|
||||
#include "qwaylandshmbackingstore_p.h"
|
||||
+#include "qwaylandshellintegration_p.h"
|
||||
|
||||
#if QT_CONFIG(wayland_datadevice)
|
||||
#include "qwaylanddatadevice_p.h"
|
||||
@@ -138,8 +139,9 @@ void QWaylandWindow::initWindow()
|
||||
}
|
||||
} else if (shouldCreateShellSurface()) {
|
||||
Q_ASSERT(!mShellSurface);
|
||||
+ Q_ASSERT(mDisplay->shellIntegration());
|
||||
|
||||
- mShellSurface = mDisplay->createShellSurface(this);
|
||||
+ mShellSurface = mDisplay->shellIntegration()->createShellSurface(this);
|
||||
if (mShellSurface) {
|
||||
// Set initial surface title
|
||||
setWindowTitle(window()->title());
|
||||
@@ -211,6 +213,9 @@ void QWaylandWindow::initializeWlSurface()
|
||||
|
||||
bool QWaylandWindow::shouldCreateShellSurface() const
|
||||
{
|
||||
+ if (!mDisplay->shellIntegration())
|
||||
+ return false;
|
||||
+
|
||||
if (shouldCreateSubSurface())
|
||||
return false;
|
||||
|
||||
@@ -963,9 +968,16 @@ void QWaylandWindow::unfocus()
|
||||
|
||||
bool QWaylandWindow::isExposed() const
|
||||
{
|
||||
+ if (!window()->isVisible())
|
||||
+ return false;
|
||||
+
|
||||
if (mShellSurface)
|
||||
- return window()->isVisible() && mShellSurface->isExposed();
|
||||
- return QPlatformWindow::isExposed();
|
||||
+ return mShellSurface->isExposed();
|
||||
+
|
||||
+ if (mSubSurfaceWindow)
|
||||
+ return mSubSurfaceWindow->parent()->isExposed();
|
||||
+
|
||||
+ return !(shouldCreateShellSurface() || shouldCreateSubSurface());
|
||||
}
|
||||
|
||||
bool QWaylandWindow::isActive() const
|
||||
--
|
||||
2.22.0
|
||||
|
|
@ -1,493 +0,0 @@
|
|||
From d85beeb65820d6e5733f88af63b15f77d03aa6ba Mon Sep 17 00:00:00 2001
|
||||
From: Johan Klokkhammer Helsing <johan.helsing@qt.io>
|
||||
Date: Mon, 28 Jan 2019 09:48:26 +0100
|
||||
Subject: [PATCH 2/2] Client: Full implementation for frame callbacks (second
|
||||
try)
|
||||
|
||||
The Wayland plugin now takes full control over delivering update request and
|
||||
implement frame callbacks for both egl and shm.
|
||||
|
||||
[ChangeLog][QPA plugin] The non-blocking version of eglSwapBuffers is now used, if
|
||||
supported. This fixed a bug where minimized windows would block the event loop.
|
||||
|
||||
[ChangeLog][QPA plugin] Windows that don't get frame callbacks from the
|
||||
compositor within 100 ms are now set as not exposed. This should stop most
|
||||
clients from rendering unnecessary frames to minimized or hidden windows.
|
||||
|
||||
Also, when we relied on the QPA version of requestUpdate, we would sometimes
|
||||
deliver one update request while we were waiting for a frame callback. When we
|
||||
implement the fallback timer ourselves we can make sure we only deliver the
|
||||
fallback if there are no pending frame callbacks.
|
||||
|
||||
QtQuick and other applications often depend on blocking swapBuffers to throttle
|
||||
animations. If the context's surface format has a non-zero swapInterval, try to
|
||||
emulate a blocking swap.
|
||||
|
||||
Fixes: QTBUG-69077
|
||||
Change-Id: I3c6964f31a16e9aff70b8ec3c5340e640a30fef2
|
||||
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
||||
---
|
||||
src/client/qwaylanddisplay.cpp | 38 +++-
|
||||
src/client/qwaylanddisplay_p.h | 3 +
|
||||
src/client/qwaylandwindow.cpp | 180 +++++++++++++++---
|
||||
src/client/qwaylandwindow_p.h | 17 +-
|
||||
.../client/wayland-egl/qwaylandglcontext.cpp | 25 ++-
|
||||
.../qwaylandxcompositeeglcontext.cpp | 2 +-
|
||||
.../qwaylandxcompositeglxcontext.cpp | 2 +-
|
||||
7 files changed, 218 insertions(+), 49 deletions(-)
|
||||
|
||||
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
|
||||
index f2bd3160..82003a30 100644
|
||||
--- a/src/client/qwaylanddisplay.cpp
|
||||
+++ b/src/client/qwaylanddisplay.cpp
|
||||
@@ -68,6 +68,8 @@
|
||||
|
||||
#include <QtWaylandClient/private/qwayland-text-input-unstable-v2.h>
|
||||
|
||||
+#include <QtCore/private/qcore_unix_p.h>
|
||||
+
|
||||
#include <QtCore/QAbstractEventDispatcher>
|
||||
#include <QtGui/private/qguiapplication_p.h>
|
||||
|
||||
@@ -190,7 +192,6 @@ void QWaylandDisplay::flushRequests()
|
||||
wl_display_flush(mDisplay);
|
||||
}
|
||||
|
||||
-
|
||||
void QWaylandDisplay::blockingReadEvents()
|
||||
{
|
||||
if (wl_display_dispatch(mDisplay) < 0) {
|
||||
@@ -204,6 +205,41 @@ void QWaylandDisplay::exitWithError()
|
||||
::exit(1);
|
||||
}
|
||||
|
||||
+wl_event_queue *QWaylandDisplay::createEventQueue()
|
||||
+{
|
||||
+ return wl_display_create_queue(mDisplay);
|
||||
+}
|
||||
+
|
||||
+void QWaylandDisplay::dispatchQueueWhile(wl_event_queue *queue, std::function<bool ()> condition, int timeout)
|
||||
+{
|
||||
+ if (!condition())
|
||||
+ return;
|
||||
+
|
||||
+ QElapsedTimer timer;
|
||||
+ timer.start();
|
||||
+ struct pollfd pFd = qt_make_pollfd(wl_display_get_fd(mDisplay), POLLIN);
|
||||
+ while (timeout == -1 || timer.elapsed() < timeout) {
|
||||
+ while (wl_display_prepare_read_queue(mDisplay, queue) != 0)
|
||||
+ wl_display_dispatch_queue_pending(mDisplay, queue);
|
||||
+
|
||||
+ wl_display_flush(mDisplay);
|
||||
+
|
||||
+ const int remaining = qMax(timeout - timer.elapsed(), 0ll);
|
||||
+ const int pollTimeout = timeout == -1 ? -1 : remaining;
|
||||
+ if (qt_poll_msecs(&pFd, 1, pollTimeout) > 0)
|
||||
+ wl_display_read_events(mDisplay);
|
||||
+ else
|
||||
+ wl_display_cancel_read(mDisplay);
|
||||
+
|
||||
+ if (wl_display_dispatch_queue_pending(mDisplay, queue) < 0) {
|
||||
+ checkError();
|
||||
+ exitWithError();
|
||||
+ }
|
||||
+ if (!condition())
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
QWaylandScreen *QWaylandDisplay::screenForOutput(struct wl_output *output) const
|
||||
{
|
||||
for (int i = 0; i < mScreens.size(); ++i) {
|
||||
diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h
|
||||
index cc6a0a72..fa8b4c3f 100644
|
||||
--- a/src/client/qwaylanddisplay_p.h
|
||||
+++ b/src/client/qwaylanddisplay_p.h
|
||||
@@ -182,6 +182,9 @@ public:
|
||||
void handleKeyboardFocusChanged(QWaylandInputDevice *inputDevice);
|
||||
void handleWindowDestroyed(QWaylandWindow *window);
|
||||
|
||||
+ wl_event_queue *createEventQueue();
|
||||
+ void dispatchQueueWhile(wl_event_queue *queue, std::function<bool()> condition, int timeout = -1);
|
||||
+
|
||||
public slots:
|
||||
void blockingReadEvents();
|
||||
void flushRequests();
|
||||
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
||||
index 600ea1df..4d399f8f 100644
|
||||
--- a/src/client/qwaylandwindow.cpp
|
||||
+++ b/src/client/qwaylandwindow.cpp
|
||||
@@ -67,6 +67,7 @@
|
||||
#include <QtGui/private/qwindow_p.h>
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
+#include <QtCore/QThread>
|
||||
|
||||
#include <wayland-client.h>
|
||||
|
||||
@@ -81,6 +82,7 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr;
|
||||
QWaylandWindow::QWaylandWindow(QWindow *window)
|
||||
: QPlatformWindow(window)
|
||||
, mDisplay(waylandScreen()->display())
|
||||
+ , mFrameQueue(mDisplay->createEventQueue())
|
||||
, mResizeAfterSwap(qEnvironmentVariableIsSet("QT_WAYLAND_RESIZE_AFTER_SWAP"))
|
||||
{
|
||||
static WId id = 1;
|
||||
@@ -363,6 +365,8 @@ void QWaylandWindow::sendExposeEvent(const QRect &rect)
|
||||
{
|
||||
if (!(mShellSurface && mShellSurface->handleExpose(rect)))
|
||||
QWindowSystemInterface::handleExposeEvent(window(), rect);
|
||||
+ else
|
||||
+ qCDebug(lcQpaWayland) << "sendExposeEvent: intercepted by shell extension, not sending";
|
||||
mLastExposeGeometry = rect;
|
||||
}
|
||||
|
||||
@@ -547,18 +551,11 @@ void QWaylandWindow::handleScreenRemoved(QScreen *qScreen)
|
||||
void QWaylandWindow::attach(QWaylandBuffer *buffer, int x, int y)
|
||||
{
|
||||
Q_ASSERT(!buffer->committed());
|
||||
- if (mFrameCallback) {
|
||||
- wl_callback_destroy(mFrameCallback);
|
||||
- mFrameCallback = nullptr;
|
||||
- }
|
||||
-
|
||||
if (buffer) {
|
||||
- mFrameCallback = frame();
|
||||
- wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this);
|
||||
- mWaitingForFrameSync = true;
|
||||
+ handleUpdate();
|
||||
buffer->setBusy();
|
||||
|
||||
- attach(buffer->buffer(), x, y);
|
||||
+ QtWayland::wl_surface::attach(buffer->buffer(), x, y);
|
||||
} else {
|
||||
QtWayland::wl_surface::attach(nullptr, 0, 0);
|
||||
}
|
||||
@@ -614,32 +611,61 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage)
|
||||
}
|
||||
|
||||
const wl_callback_listener QWaylandWindow::callbackListener = {
|
||||
- QWaylandWindow::frameCallback
|
||||
+ [](void *data, wl_callback *callback, uint32_t time) {
|
||||
+ Q_UNUSED(callback);
|
||||
+ Q_UNUSED(time);
|
||||
+ auto *window = static_cast<QWaylandWindow*>(data);
|
||||
+ if (window->thread() != QThread::currentThread())
|
||||
+ QMetaObject::invokeMethod(window, [=] { window->handleFrameCallback(); }, Qt::QueuedConnection);
|
||||
+ else
|
||||
+ window->handleFrameCallback();
|
||||
+ }
|
||||
};
|
||||
|
||||
-void QWaylandWindow::frameCallback(void *data, struct wl_callback *callback, uint32_t time)
|
||||
+void QWaylandWindow::handleFrameCallback()
|
||||
{
|
||||
- Q_UNUSED(time);
|
||||
- Q_UNUSED(callback);
|
||||
- QWaylandWindow *self = static_cast<QWaylandWindow*>(data);
|
||||
+ bool wasExposed = isExposed();
|
||||
|
||||
- self->mWaitingForFrameSync = false;
|
||||
- if (self->mUpdateRequested) {
|
||||
- self->mUpdateRequested = false;
|
||||
- self->deliverUpdateRequest();
|
||||
+ if (mFrameCallbackTimerId != -1) {
|
||||
+ killTimer(mFrameCallbackTimerId);
|
||||
+ mFrameCallbackTimerId = -1;
|
||||
}
|
||||
+
|
||||
+ mWaitingForFrameCallback = false;
|
||||
+ mFrameCallbackTimedOut = false;
|
||||
+
|
||||
+ if (!wasExposed && isExposed())
|
||||
+ sendExposeEvent(QRect(QPoint(), geometry().size()));
|
||||
+ if (wasExposed && hasPendingUpdateRequest())
|
||||
+ deliverUpdateRequest();
|
||||
}
|
||||
|
||||
QMutex QWaylandWindow::mFrameSyncMutex;
|
||||
|
||||
-void QWaylandWindow::waitForFrameSync()
|
||||
+bool QWaylandWindow::waitForFrameSync(int timeout)
|
||||
{
|
||||
QMutexLocker locker(&mFrameSyncMutex);
|
||||
- if (!mWaitingForFrameSync)
|
||||
- return;
|
||||
- mDisplay->flushRequests();
|
||||
- while (mWaitingForFrameSync)
|
||||
- mDisplay->blockingReadEvents();
|
||||
+ if (!mWaitingForFrameCallback)
|
||||
+ return true;
|
||||
+
|
||||
+ wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(mFrameCallback), mFrameQueue);
|
||||
+ mDisplay->dispatchQueueWhile(mFrameQueue, [&]() { return mWaitingForFrameCallback; }, timeout);
|
||||
+
|
||||
+ if (mWaitingForFrameCallback) {
|
||||
+ qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed";
|
||||
+ mFrameCallbackTimedOut = true;
|
||||
+ mWaitingForUpdate = false;
|
||||
+ sendExposeEvent(QRect());
|
||||
+ }
|
||||
+
|
||||
+ // Stop current frame timer if any, can't use killTimer directly, because we might be on a diffent thread
|
||||
+ if (mFrameCallbackTimerId != -1) {
|
||||
+ int id = mFrameCallbackTimerId;
|
||||
+ mFrameCallbackTimerId = -1;
|
||||
+ QMetaObject::invokeMethod(this, [=] { killTimer(id); }, Qt::QueuedConnection);
|
||||
+ }
|
||||
+
|
||||
+ return !mWaitingForFrameCallback;
|
||||
}
|
||||
|
||||
QMargins QWaylandWindow::frameMargins() const
|
||||
@@ -971,6 +997,9 @@ bool QWaylandWindow::isExposed() const
|
||||
if (!window()->isVisible())
|
||||
return false;
|
||||
|
||||
+ if (mFrameCallbackTimedOut)
|
||||
+ return false;
|
||||
+
|
||||
if (mShellSurface)
|
||||
return mShellSurface->isExposed();
|
||||
|
||||
@@ -1046,12 +1075,107 @@ QVariant QWaylandWindow::property(const QString &name, const QVariant &defaultVa
|
||||
return m_properties.value(name, defaultValue);
|
||||
}
|
||||
|
||||
+void QWaylandWindow::timerEvent(QTimerEvent *event)
|
||||
+{
|
||||
+ if (event->timerId() == mFallbackUpdateTimerId) {
|
||||
+ killTimer(mFallbackUpdateTimerId);
|
||||
+ mFallbackUpdateTimerId = -1;
|
||||
+ qCDebug(lcWaylandBackingstore) << "mFallbackUpdateTimer timed out";
|
||||
+
|
||||
+ if (!isExposed()) {
|
||||
+ qCDebug(lcWaylandBackingstore) << "Fallback update timer: Window not exposed,"
|
||||
+ << "not delivering update request.";
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (mWaitingForUpdate && hasPendingUpdateRequest() && !mWaitingForFrameCallback) {
|
||||
+ qCWarning(lcWaylandBackingstore) << "Delivering update request through fallback timer,"
|
||||
+ << "may not be in sync with display";
|
||||
+ deliverUpdateRequest();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (event->timerId() == mFrameCallbackTimerId) {
|
||||
+ killTimer(mFrameCallbackTimerId);
|
||||
+ mFrameCallbackTimerId = -1;
|
||||
+ qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed";
|
||||
+ mFrameCallbackTimedOut = true;
|
||||
+ mWaitingForUpdate = false;
|
||||
+ sendExposeEvent(QRect());
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
void QWaylandWindow::requestUpdate()
|
||||
{
|
||||
- if (!mWaitingForFrameSync)
|
||||
- QPlatformWindow::requestUpdate();
|
||||
- else
|
||||
- mUpdateRequested = true;
|
||||
+ Q_ASSERT(hasPendingUpdateRequest()); // should be set by QPA
|
||||
+
|
||||
+ // If we have a frame callback all is good and will be taken care of there
|
||||
+ if (mWaitingForFrameCallback)
|
||||
+ return;
|
||||
+
|
||||
+ // If we've already called deliverUpdateRequest(), but haven't seen any attach+commit/swap yet
|
||||
+ if (mWaitingForUpdate) {
|
||||
+ // Ideally, we should just have returned here, but we're not guaranteed that the client
|
||||
+ // will actually update, so start this timer to deliver another request update after a while
|
||||
+ // *IF* the client doesn't update.
|
||||
+ int fallbackTimeout = 100;
|
||||
+ mFallbackUpdateTimerId = startTimer(fallbackTimeout);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ // Some applications (such as Qt Quick) depend on updates being delivered asynchronously,
|
||||
+ // so use invokeMethod to delay the delivery a bit.
|
||||
+ QMetaObject::invokeMethod(this, [this] {
|
||||
+ // Things might have changed in the meantime
|
||||
+ if (hasPendingUpdateRequest() && !mWaitingForUpdate && !mWaitingForFrameCallback)
|
||||
+ deliverUpdateRequest();
|
||||
+ }, Qt::QueuedConnection);
|
||||
+}
|
||||
+
|
||||
+// Should be called whenever we commit a buffer (directly through wl_surface.commit or indirectly
|
||||
+// with eglSwapBuffers) to know when it's time to commit the next one.
|
||||
+// Can be called from the render thread (without locking anything) so make sure to not make races in this method.
|
||||
+void QWaylandWindow::handleUpdate()
|
||||
+{
|
||||
+ // TODO: Should sync subsurfaces avoid requesting frame callbacks?
|
||||
+
|
||||
+ if (mFrameCallback) {
|
||||
+ wl_callback_destroy(mFrameCallback);
|
||||
+ mFrameCallback = nullptr;
|
||||
+ }
|
||||
+
|
||||
+ if (mFallbackUpdateTimerId != -1) {
|
||||
+ // Ideally, we would stop the fallback timer here, but since we're on another thread,
|
||||
+ // it's not allowed. Instead we set mFallbackUpdateTimer to -1 here, so we'll just
|
||||
+ // ignore it if it times out before it's cleaned up by the invokeMethod call.
|
||||
+ int id = mFallbackUpdateTimerId;
|
||||
+ mFallbackUpdateTimerId = -1;
|
||||
+ QMetaObject::invokeMethod(this, [=] { killTimer(id); }, Qt::QueuedConnection);
|
||||
+ }
|
||||
+
|
||||
+ mFrameCallback = frame();
|
||||
+ wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this);
|
||||
+ mWaitingForFrameCallback = true;
|
||||
+ mWaitingForUpdate = false;
|
||||
+
|
||||
+ // Stop current frame timer if any, can't use killTimer directly, see comment above.
|
||||
+ if (mFrameCallbackTimerId != -1) {
|
||||
+ int id = mFrameCallbackTimerId;
|
||||
+ mFrameCallbackTimerId = -1;
|
||||
+ QMetaObject::invokeMethod(this, [=] { killTimer(id); }, Qt::QueuedConnection);
|
||||
+ }
|
||||
+
|
||||
+ // Start a timer for handling the case when the compositor stops sending frame callbacks.
|
||||
+ QMetaObject::invokeMethod(this, [=] { // Again; can't do it directly
|
||||
+ if (mWaitingForFrameCallback)
|
||||
+ mFrameCallbackTimerId = startTimer(100);
|
||||
+ }, Qt::QueuedConnection);
|
||||
+}
|
||||
+
|
||||
+void QWaylandWindow::deliverUpdateRequest()
|
||||
+{
|
||||
+ mWaitingForUpdate = true;
|
||||
+ QPlatformWindow::deliverUpdateRequest();
|
||||
}
|
||||
|
||||
void QWaylandWindow::addAttachOffset(const QPoint point)
|
||||
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
|
||||
index 56ebd3cc..c47123dc 100644
|
||||
--- a/src/client/qwaylandwindow_p.h
|
||||
+++ b/src/client/qwaylandwindow_p.h
|
||||
@@ -120,7 +120,7 @@ public:
|
||||
void handleExpose(const QRegion ®ion);
|
||||
void commit(QWaylandBuffer *buffer, const QRegion &damage);
|
||||
|
||||
- void waitForFrameSync();
|
||||
+ bool waitForFrameSync(int timeout);
|
||||
|
||||
QMargins frameMargins() const override;
|
||||
|
||||
@@ -191,7 +191,10 @@ public:
|
||||
|
||||
bool startSystemMove(const QPoint &pos) override;
|
||||
|
||||
+ void timerEvent(QTimerEvent *event) override;
|
||||
void requestUpdate() override;
|
||||
+ void handleUpdate();
|
||||
+ void deliverUpdateRequest() override;
|
||||
|
||||
public slots:
|
||||
void applyConfigure();
|
||||
@@ -211,10 +214,17 @@ protected:
|
||||
Qt::MouseButtons mMousePressedInContentArea = Qt::NoButton;
|
||||
|
||||
WId mWindowId;
|
||||
- bool mWaitingForFrameSync = false;
|
||||
+ bool mWaitingForFrameCallback = false;
|
||||
+ bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out
|
||||
+ int mFrameCallbackTimerId = -1; // Started on commit, reset on frame callback
|
||||
struct ::wl_callback *mFrameCallback = nullptr;
|
||||
+ struct ::wl_event_queue *mFrameQueue = nullptr;
|
||||
QWaitCondition mFrameSyncWait;
|
||||
|
||||
+ // True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer
|
||||
+ bool mWaitingForUpdate = false;
|
||||
+ int mFallbackUpdateTimerId = -1; // Started when waiting for app to commit
|
||||
+
|
||||
QMutex mResizeLock;
|
||||
bool mWaitingToApplyConfigure = false;
|
||||
bool mCanResize = true;
|
||||
@@ -253,11 +263,10 @@ private:
|
||||
void handleMouseEventWithDecoration(QWaylandInputDevice *inputDevice, const QWaylandPointerEvent &e);
|
||||
void handleScreenChanged();
|
||||
|
||||
- bool mUpdateRequested = false;
|
||||
QRect mLastExposeGeometry;
|
||||
|
||||
static const wl_callback_listener callbackListener;
|
||||
- static void frameCallback(void *data, struct wl_callback *wl_callback, uint32_t time);
|
||||
+ void handleFrameCallback();
|
||||
|
||||
static QMutex mFrameSyncMutex;
|
||||
static QWaylandWindow *mMouseGrab;
|
||||
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
|
||||
index e58403ad..30dab408 100644
|
||||
--- a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
|
||||
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
|
||||
@@ -315,7 +315,9 @@ QWaylandGLContext::QWaylandGLContext(EGLDisplay eglDisplay, QWaylandDisplay *dis
|
||||
mSupportNonBlockingSwap = false;
|
||||
}
|
||||
if (!mSupportNonBlockingSwap) {
|
||||
- qWarning() << "Non-blocking swap buffers not supported. Subsurface rendering can be affected.";
|
||||
+ qWarning(lcQpaWayland) << "Non-blocking swap buffers not supported."
|
||||
+ << "Subsurface rendering can be affected."
|
||||
+ << "It may also cause the event loop to freeze in some situations";
|
||||
}
|
||||
|
||||
updateGLFormat();
|
||||
@@ -550,20 +552,15 @@ void QWaylandGLContext::swapBuffers(QPlatformSurface *surface)
|
||||
m_blitter->blit(window);
|
||||
}
|
||||
|
||||
-
|
||||
- QWaylandSubSurface *sub = window->subSurfaceWindow();
|
||||
- if (sub) {
|
||||
- QMutexLocker l(sub->syncMutex());
|
||||
-
|
||||
- int si = (sub->isSync() && mSupportNonBlockingSwap) ? 0 : m_format.swapInterval();
|
||||
-
|
||||
- eglSwapInterval(m_eglDisplay, si);
|
||||
- eglSwapBuffers(m_eglDisplay, eglSurface);
|
||||
- } else {
|
||||
- eglSwapInterval(m_eglDisplay, m_format.swapInterval());
|
||||
- eglSwapBuffers(m_eglDisplay, eglSurface);
|
||||
+ int swapInterval = mSupportNonBlockingSwap ? 0 : m_format.swapInterval();
|
||||
+ eglSwapInterval(m_eglDisplay, swapInterval);
|
||||
+ if (swapInterval == 0 && m_format.swapInterval() > 0) {
|
||||
+ // Emulating a blocking swap
|
||||
+ glFlush(); // Flush before waiting so we can swap more quickly when the frame event arrives
|
||||
+ window->waitForFrameSync(100);
|
||||
}
|
||||
-
|
||||
+ window->handleUpdate();
|
||||
+ eglSwapBuffers(m_eglDisplay, eglSurface);
|
||||
|
||||
window->setCanResize(true);
|
||||
}
|
||||
diff --git a/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglcontext.cpp b/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglcontext.cpp
|
||||
index c07ad534..a6fead95 100644
|
||||
--- a/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglcontext.cpp
|
||||
+++ b/src/hardwareintegration/client/xcomposite-egl/qwaylandxcompositeeglcontext.cpp
|
||||
@@ -65,7 +65,7 @@ void QWaylandXCompositeEGLContext::swapBuffers(QPlatformSurface *surface)
|
||||
QSize size = w->geometry().size();
|
||||
|
||||
w->commit(w->buffer(), QRegion(0, 0, size.width(), size.height()));
|
||||
- w->waitForFrameSync();
|
||||
+ w->waitForFrameSync(100);
|
||||
}
|
||||
|
||||
EGLSurface QWaylandXCompositeEGLContext::eglSurfaceForPlatformSurface(QPlatformSurface *surface)
|
||||
diff --git a/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxcontext.cpp b/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxcontext.cpp
|
||||
index 33ae2e03..35188741 100644
|
||||
--- a/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxcontext.cpp
|
||||
+++ b/src/hardwareintegration/client/xcomposite-glx/qwaylandxcompositeglxcontext.cpp
|
||||
@@ -93,7 +93,7 @@ void QWaylandXCompositeGLXContext::swapBuffers(QPlatformSurface *surface)
|
||||
glXSwapBuffers(m_display, w->xWindow());
|
||||
|
||||
w->commit(w->buffer(), QRegion(0, 0, size.width(), size.height()));
|
||||
- w->waitForFrameSync();
|
||||
+ w->waitForFrameSync(100);
|
||||
}
|
||||
|
||||
QFunctionPointer QWaylandXCompositeGLXContext::getProcAddress(const char *procName)
|
||||
--
|
||||
2.22.0
|
||||
|
Loading…
Reference in a new issue