Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
33cf5e2bae | ||
|
0eeacf60e1 | ||
|
b16256edb2 | ||
|
643e86280e | ||
|
caecc79beb | ||
|
b7e33e9b65 | ||
|
d27dc52b14 | ||
|
e91879d46c |
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,4 +1,3 @@
|
||||
/qtdeclarative-everywhere-src-5.11.3.tar.xz
|
||||
/qtdeclarative-everywhere-src-5.12.1.tar.xz
|
||||
/qtdeclarative-everywhere-src-5.12.3.tar.xz
|
||||
/qtdeclarative-everywhere-src-5.12.4.tar.xz
|
||||
/qtdeclarative-opensource-src-5.9.4.tar.xz
|
||||
/qtdeclarative-opensource-src-5.9.6.tar.xz
|
||||
/qtdeclarative-everywhere-src-5.11.0.tar.xz
|
||||
|
@ -0,0 +1,41 @@
|
||||
From 73e8321255d9f0e70529a58c10dbaf4790a9a659 Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Tue, 6 Mar 2018 10:56:23 +0000
|
||||
Subject: [PATCH 28/29] Rebuild property cache in QObjectWrapper::getProperty
|
||||
if deleted
|
||||
|
||||
QQmlData is shared between engines, but the relevant QObjectWrapper is
|
||||
not.
|
||||
|
||||
Since 749a7212e903d8e8c6f256edb1836b9449cc7fe1 when a QObjectWrapper is
|
||||
deleted it resets the shared QQmlData propertyCache.
|
||||
|
||||
ab5d4c78224c9ec79165e8890e5f8b8e838e0709 fixed this situation for
|
||||
bindings, however we would still hit effectively the same crash in the
|
||||
same situation if a function is evaluated before a binding.
|
||||
|
||||
Change-Id: I20cd91cd8e31fd0176d542822c67e81a790599ba
|
||||
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
|
||||
---
|
||||
src/qml/jsruntime/qv4qobjectwrapper.cpp | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/qml/jsruntime/qv4qobjectwrapper.cpp b/src/qml/jsruntime/qv4qobjectwrapper.cpp
|
||||
index 5ebd385cf..c1bbe2a33 100644
|
||||
--- a/src/qml/jsruntime/qv4qobjectwrapper.cpp
|
||||
+++ b/src/qml/jsruntime/qv4qobjectwrapper.cpp
|
||||
@@ -335,6 +335,11 @@ ReturnedValue QObjectWrapper::getProperty(ExecutionEngine *engine, QObject *obje
|
||||
if (!ddata)
|
||||
return QV4::Encode::undefined();
|
||||
|
||||
+ if (Q_UNLIKELY(!ddata->propertyCache)) {
|
||||
+ ddata->propertyCache = QQmlEnginePrivate::get(engine)->cache(object->metaObject());
|
||||
+ ddata->propertyCache->addref();
|
||||
+ }
|
||||
+
|
||||
QQmlPropertyCache *cache = ddata->propertyCache;
|
||||
Q_ASSERT(cache);
|
||||
QQmlPropertyData *property = cache->property(propertyIndex);
|
||||
--
|
||||
2.14.3
|
||||
|
168
0111-Fix-qml-cache-invalidation-when-changing-dependent-C.patch
Normal file
168
0111-Fix-qml-cache-invalidation-when-changing-dependent-C.patch
Normal file
@ -0,0 +1,168 @@
|
||||
From 98358715930739ca8de172d88c5ce6941c275ff3 Mon Sep 17 00:00:00 2001
|
||||
From: Simon Hausmann <simon.hausmann@qt.io>
|
||||
Date: Tue, 12 Sep 2017 15:13:33 +0200
|
||||
Subject: [PATCH 111/153] Fix qml cache invalidation when changing dependent
|
||||
C++ registered QML singletons
|
||||
|
||||
When a qml file uses a qml singleton, we need to reliably detect when
|
||||
the singleton changes and re-generate the cache of the qml file using
|
||||
it. This is a scenario covered and fixed by commit
|
||||
5b94de09cc738837d1539e28b3c0dccd17c18d29, with the exception that
|
||||
currently QML singletons registered via qmlRegisterSingleton were not
|
||||
added to the list of dependent singletons for a qml file. We can fix
|
||||
this by extending findCompositeSingletons() to also cover the singletons
|
||||
that do not originate from a qmldir file.
|
||||
|
||||
[ChangeLog][Qt][Qml] Fixed bug where sometimes changes to a qml
|
||||
singleton would not propagate to the users or cause crashes.
|
||||
|
||||
Task-number: QTBUG-62243
|
||||
Change-Id: I16c3d9ba65fd82e898a29b946c341907751135a9
|
||||
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
|
||||
---
|
||||
src/qml/qml/qqmlimport.cpp | 11 +++++
|
||||
src/qml/qml/qqmlmetatype.cpp | 12 +++++
|
||||
src/qml/qml/qqmlmetatype_p.h | 2 +
|
||||
tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp | 61 ++++++++++++++++++++++++
|
||||
4 files changed, 86 insertions(+)
|
||||
|
||||
diff --git a/src/qml/qml/qqmlimport.cpp b/src/qml/qml/qqmlimport.cpp
|
||||
index 0bd731747..ccd287e1b 100644
|
||||
--- a/src/qml/qml/qqmlimport.cpp
|
||||
+++ b/src/qml/qml/qqmlimport.cpp
|
||||
@@ -471,6 +471,17 @@ void findCompositeSingletons(const QQmlImportNamespace &set, QList<QQmlImports::
|
||||
resultList.append(ref);
|
||||
}
|
||||
}
|
||||
+
|
||||
+ if (QQmlTypeModule *module = QQmlMetaType::typeModule(import->uri, import->majversion)) {
|
||||
+ module->walkCompositeSingletons([&resultList, &set](const QQmlType &singleton) {
|
||||
+ QQmlImports::CompositeSingletonReference ref;
|
||||
+ ref.typeName = singleton.elementName();
|
||||
+ ref.prefix = set.prefix;
|
||||
+ ref.majorVersion = singleton.majorVersion();
|
||||
+ ref.minorVersion = singleton.minorVersion();
|
||||
+ resultList.append(ref);
|
||||
+ });
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/qml/qml/qqmlmetatype.cpp b/src/qml/qml/qqmlmetatype.cpp
|
||||
index 5bbc250d5..8f5d11a96 100644
|
||||
--- a/src/qml/qml/qqmlmetatype.cpp
|
||||
+++ b/src/qml/qml/qqmlmetatype.cpp
|
||||
@@ -1258,6 +1258,18 @@ QQmlType QQmlTypeModule::type(const QV4::String *name, int minor) const
|
||||
return QQmlType();
|
||||
}
|
||||
|
||||
+void QQmlTypeModule::walkCompositeSingletons(const std::function<void(const QQmlType &)> &callback) const
|
||||
+{
|
||||
+ QMutexLocker lock(metaTypeDataLock());
|
||||
+ for (auto typeCandidates = d->typeHash.begin(), end = d->typeHash.end();
|
||||
+ typeCandidates != end; ++typeCandidates) {
|
||||
+ for (auto type: typeCandidates.value()) {
|
||||
+ if (type->regType == QQmlType::CompositeSingletonType)
|
||||
+ callback(QQmlType(type));
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
QQmlTypeModuleVersion::QQmlTypeModuleVersion()
|
||||
: m_module(0), m_minor(0)
|
||||
{
|
||||
diff --git a/src/qml/qml/qqmlmetatype_p.h b/src/qml/qml/qqmlmetatype_p.h
|
||||
index ac2133ba3..9a7736ffc 100644
|
||||
--- a/src/qml/qml/qqmlmetatype_p.h
|
||||
+++ b/src/qml/qml/qqmlmetatype_p.h
|
||||
@@ -298,6 +298,8 @@ public:
|
||||
QQmlType type(const QHashedStringRef &, int) const;
|
||||
QQmlType type(const QV4::String *, int) const;
|
||||
|
||||
+ void walkCompositeSingletons(const std::function<void(const QQmlType &)> &callback) const;
|
||||
+
|
||||
QQmlTypeModulePrivate *priv() { return d; }
|
||||
private:
|
||||
//Used by register functions and creates the QQmlTypeModule for them
|
||||
diff --git a/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp b/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp
|
||||
index 6ab84774f..e75e51ed2 100644
|
||||
--- a/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp
|
||||
+++ b/tests/auto/qml/qmldiskcache/tst_qmldiskcache.cpp
|
||||
@@ -59,6 +59,7 @@ private slots:
|
||||
void cacheResources();
|
||||
void stableOrderOfDependentCompositeTypes();
|
||||
void singletonDependency();
|
||||
+ void cppRegisteredSingletonDependency();
|
||||
};
|
||||
|
||||
// A wrapper around QQmlComponent to ensure the temporary reference counts
|
||||
@@ -790,6 +791,66 @@ void tst_qmldiskcache::singletonDependency()
|
||||
}
|
||||
}
|
||||
|
||||
+void tst_qmldiskcache::cppRegisteredSingletonDependency()
|
||||
+{
|
||||
+ qmlClearTypeRegistrations();
|
||||
+ QScopedPointer<QQmlEngine> engine(new QQmlEngine);
|
||||
+
|
||||
+ QTemporaryDir tempDir;
|
||||
+ QVERIFY(tempDir.isValid());
|
||||
+
|
||||
+ const auto writeTempFile = [&tempDir](const QString &fileName, const char *contents) {
|
||||
+ QFile f(tempDir.path() + '/' + fileName);
|
||||
+ const bool ok = f.open(QIODevice::WriteOnly | QIODevice::Truncate);
|
||||
+ Q_ASSERT(ok);
|
||||
+ f.write(contents);
|
||||
+ return f.fileName();
|
||||
+ };
|
||||
+
|
||||
+ writeTempFile("MySingleton.qml", "import QtQml 2.0\npragma Singleton\nQtObject { property int value: 42 }");
|
||||
+
|
||||
+ qmlRegisterSingletonType(QUrl::fromLocalFile(tempDir.path() + QLatin1String("/MySingleton.qml")), "CppRegisteredSingletonDependency", 1, 0, "Singly");
|
||||
+
|
||||
+ const QString testFilePath = writeTempFile("main.qml", "import QtQml 2.0\nimport CppRegisteredSingletonDependency 1.0\nQtObject {\n"
|
||||
+ " function getValue() { return Singly.value; }\n"
|
||||
+ "}");
|
||||
+
|
||||
+ {
|
||||
+ CleanlyLoadingComponent component(engine.data(), QUrl::fromLocalFile(testFilePath));
|
||||
+ QScopedPointer<QObject> obj(component.create());
|
||||
+ QVERIFY(!obj.isNull());
|
||||
+ QVariant value;
|
||||
+ QVERIFY(QMetaObject::invokeMethod(obj.data(), "getValue", Q_RETURN_ARG(QVariant, value)));
|
||||
+ QCOMPARE(value.toInt(), 42);
|
||||
+ }
|
||||
+
|
||||
+ const QString testFileCachePath = testFilePath + QLatin1Char('c');
|
||||
+ QVERIFY(QFile::exists(testFileCachePath));
|
||||
+ QDateTime initialCacheTimeStamp = QFileInfo(testFileCachePath).lastModified();
|
||||
+
|
||||
+ engine.reset(new QQmlEngine);
|
||||
+ waitForFileSystem();
|
||||
+
|
||||
+ writeTempFile("MySingleton.qml", "import QtQml 2.0\npragma Singleton\nQtObject { property int value: 100 }");
|
||||
+ waitForFileSystem();
|
||||
+
|
||||
+ {
|
||||
+ CleanlyLoadingComponent component(engine.data(), QUrl::fromLocalFile(testFilePath));
|
||||
+ QScopedPointer<QObject> obj(component.create());
|
||||
+ QVERIFY(!obj.isNull());
|
||||
+
|
||||
+ {
|
||||
+ QVERIFY(QFile::exists(testFileCachePath));
|
||||
+ QDateTime newCacheTimeStamp = QFileInfo(testFileCachePath).lastModified();
|
||||
+ QVERIFY2(newCacheTimeStamp > initialCacheTimeStamp, qPrintable(newCacheTimeStamp.toString()));
|
||||
+ }
|
||||
+
|
||||
+ QVariant value;
|
||||
+ QVERIFY(QMetaObject::invokeMethod(obj.data(), "getValue", Q_RETURN_ARG(QVariant, value)));
|
||||
+ QCOMPARE(value.toInt(), 100);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
QTEST_MAIN(tst_qmldiskcache)
|
||||
|
||||
#include "tst_qmldiskcache.moc"
|
||||
--
|
||||
2.14.3
|
||||
|
122
Do-not-make-lack-of-SSE2-support-on-x86-32-fatal.patch
Normal file
122
Do-not-make-lack-of-SSE2-support-on-x86-32-fatal.patch
Normal file
@ -0,0 +1,122 @@
|
||||
From 4950c366b12265f1ea390a6feb8dbbd0d850d206 Mon Sep 17 00:00:00 2001
|
||||
From: Guillem Jover <guillem@hadrons.org>
|
||||
Date: Mon, 12 Oct 2015 01:45:37 +0200
|
||||
Subject: [PATCH v2] Do not make lack of SSE2 support on x86-32 fatal
|
||||
|
||||
When an x86-32 CPU does not have SSE2 support (which is the case for
|
||||
all AMD CPUs, and older Intel CPUs), fallback to use the interpreter,
|
||||
otherwise use the JIT engine.
|
||||
|
||||
Even then, make the lack of SSE2 support on x86-32 fatal when trying
|
||||
to instantiate a JIT engine, which does require it.
|
||||
|
||||
Refactor the required CPU support check into a new pair of privately
|
||||
exported functions to avoid duplicating the logic, and do so in
|
||||
functions instead of class members to avoid changing the class
|
||||
signatures.
|
||||
|
||||
Version: 5.7.x
|
||||
Bug-Debian: https://bugs.debian.org/792594
|
||||
---
|
||||
src/qml/jit/qv4isel_masm.cpp | 2 ++
|
||||
src/qml/jit/qv4isel_masm_p.h | 18 ++++++++++++++++++
|
||||
src/qml/jsruntime/qv4engine.cpp | 1 +
|
||||
src/qml/qml/v8/qv8engine.cpp | 7 -------
|
||||
tools/qmljs/qmljs.cpp | 7 +++----
|
||||
5 files changed, 24 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/src/qml/jit/qv4isel_masm.cpp
|
||||
+++ b/src/qml/jit/qv4isel_masm.cpp
|
||||
@@ -72,6 +72,8 @@ InstructionSelection<JITAssembler>::Inst
|
||||
, compilationUnit(new CompilationUnit)
|
||||
, qmlEngine(qmlEngine)
|
||||
{
|
||||
+ checkRequiredCpuSupport();
|
||||
+
|
||||
compilationUnit->codeRefs.resize(module->functions.size());
|
||||
module->unitFlags |= QV4::CompiledData::Unit::ContainsMachineCode;
|
||||
}
|
||||
--- a/src/qml/jit/qv4isel_masm_p.h
|
||||
+++ b/src/qml/jit/qv4isel_masm_p.h
|
||||
@@ -60,6 +60,7 @@
|
||||
|
||||
#include <QtCore/QHash>
|
||||
#include <QtCore/QStack>
|
||||
+#include <private/qsimd_p.h>
|
||||
#include <config.h>
|
||||
#include <wtf/Vector.h>
|
||||
|
||||
@@ -72,6 +73,23 @@ QT_BEGIN_NAMESPACE
|
||||
namespace QV4 {
|
||||
namespace JIT {
|
||||
|
||||
+Q_QML_PRIVATE_EXPORT inline bool hasRequiredCpuSupport()
|
||||
+{
|
||||
+#ifdef Q_PROCESSOR_X86_32
|
||||
+ return qCpuHasFeature(SSE2);
|
||||
+#else
|
||||
+ return true;
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
+Q_QML_PRIVATE_EXPORT inline void checkRequiredCpuSupport()
|
||||
+{
|
||||
+#ifdef Q_PROCESSOR_X86_32
|
||||
+ if (!qCpuHasFeature(SSE2))
|
||||
+ qFatal("This program requires an X86 processor that supports SSE2 extension, at least a Pentium 4 or newer");
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
template <typename JITAssembler = Assembler<DefaultAssemblerTargetConfiguration>>
|
||||
class Q_QML_EXPORT InstructionSelection:
|
||||
protected IR::IRDecoder,
|
||||
--- a/src/qml/jsruntime/qv4engine.cpp
|
||||
+++ b/src/qml/jsruntime/qv4engine.cpp
|
||||
@@ -165,6 +165,7 @@ ExecutionEngine::ExecutionEngine(EvalISe
|
||||
|
||||
#ifdef V4_ENABLE_JIT
|
||||
static const bool forceMoth = !qEnvironmentVariableIsEmpty("QV4_FORCE_INTERPRETER") ||
|
||||
+ !JIT::hasRequiredCpuSupport() ||
|
||||
!OSAllocator::canAllocateExecutableMemory();
|
||||
if (forceMoth) {
|
||||
factory = new Moth::ISelFactory;
|
||||
--- a/src/qml/qml/v8/qv8engine.cpp
|
||||
+++ b/src/qml/qml/v8/qv8engine.cpp
|
||||
@@ -64,7 +64,6 @@
|
||||
#include <QtCore/qjsonvalue.h>
|
||||
#include <QtCore/qdatetime.h>
|
||||
#include <QtCore/qdatastream.h>
|
||||
-#include <private/qsimd_p.h>
|
||||
|
||||
#include <private/qv4value_p.h>
|
||||
#include <private/qv4dateobject_p.h>
|
||||
@@ -129,12 +128,6 @@ QV8Engine::QV8Engine(QJSEngine* qq)
|
||||
, m_xmlHttpRequestData(0)
|
||||
, m_listModelData(0)
|
||||
{
|
||||
-#ifdef Q_PROCESSOR_X86_32
|
||||
- if (!qCpuHasFeature(SSE2)) {
|
||||
- qFatal("This program requires an X86 processor that supports SSE2 extension, at least a Pentium 4 or newer");
|
||||
- }
|
||||
-#endif
|
||||
-
|
||||
QML_MEMORY_SCOPE_STRING("QV8Engine::QV8Engine");
|
||||
qMetaTypeId<QJSValue>();
|
||||
qMetaTypeId<QList<int> >();
|
||||
--- a/tools/qmljs/qmljs.cpp
|
||||
+++ b/tools/qmljs/qmljs.cpp
|
||||
@@ -92,11 +92,10 @@ int main(int argc, char *argv[])
|
||||
enum {
|
||||
use_masm,
|
||||
use_moth
|
||||
- } mode;
|
||||
+ } mode = use_moth;
|
||||
#ifdef V4_ENABLE_JIT
|
||||
- mode = use_masm;
|
||||
-#else
|
||||
- mode = use_moth;
|
||||
+ if (QV4::JIT::hasRequiredCpuSupport())
|
||||
+ mode = use_masm;
|
||||
#endif
|
||||
|
||||
bool runAsQml = false;
|
@ -1,28 +1,59 @@
|
||||
%global qt_module qtdeclarative
|
||||
|
||||
%if 0
|
||||
#ifarch %{ix86}
|
||||
%global nosse2_hack 1
|
||||
## TODO:
|
||||
# * consider debian's approach of runtime detection instead:
|
||||
# https://codereview.qt-project.org/#/c/127354/
|
||||
%endif
|
||||
|
||||
# definition borrowed from qtbase
|
||||
%global multilib_archs x86_64 %{ix86} %{?mips} ppc64 ppc s390x s390 sparc64 sparcv9
|
||||
|
||||
#global bootstrap 1
|
||||
|
||||
Summary: Qt5 - QtDeclarative component
|
||||
Name: qt5-%{qt_module}
|
||||
Version: 5.12.4
|
||||
Release: 3%{?dist}
|
||||
Version: 5.9.6
|
||||
Release: 1%{?dist}
|
||||
|
||||
# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
|
||||
License: LGPLv2 with exceptions or GPLv3 with exceptions
|
||||
Url: http://www.qt.io
|
||||
%global majmin %(echo %{version} | cut -d. -f1-2)
|
||||
Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submodules/%{qt_module}-everywhere-src-%{version}.tar.xz
|
||||
Source0: https://download.qt.io/official_releases/qt/5.9/%{version}/submodules/%{qt_module}-opensource-src-%{version}.tar.xz
|
||||
|
||||
# header file to workaround multilib issue
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1441343
|
||||
Source5: qv4global_p-multilib.h
|
||||
|
||||
# support no_sse2 CONFIG (fedora i686 builds cannot assume -march=pentium4 -msse2 -mfpmath=sse flags, or the JIT that needs them)
|
||||
# https://codereview.qt-project.org/#change,73710
|
||||
Patch1: qtdeclarative-opensource-src-5.9.0-no_sse2.patch
|
||||
|
||||
# workaround for possible deadlock condition in QQuickShaderEffectSource
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1237269
|
||||
# https://bugs.kde.org/show_bug.cgi?id=348385
|
||||
Patch2: qtdeclarative-QQuickShaderEffectSource_deadlock.patch
|
||||
|
||||
## upstream patches
|
||||
# https://codereview.qt-project.org/#/c/224684/
|
||||
Patch100: qtdeclarative-leak.patch
|
||||
|
||||
# regression https://bugreports.qt.io/browse/QTBUG-64017
|
||||
# so revert this offending commit (for now)
|
||||
Patch111: 0111-Fix-qml-cache-invalidation-when-changing-dependent-C.patch
|
||||
|
||||
# 5.11 branch fixes
|
||||
Patch128: 0028-Rebuild-property-cache-in-QObjectWrapper-getProperty.patch
|
||||
|
||||
|
||||
## upstreamable patches
|
||||
# use system double-conversation
|
||||
# https://bugs.kde.org/show_bug.cgi?id=346118#c108
|
||||
Patch201: qtdeclarative-kdebug346118.patch
|
||||
|
||||
# https://codereview.qt-project.org/#/c/127354/
|
||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=792594
|
||||
Patch202: http://sources.debian.net/data/main/q/qtdeclarative-opensource-src/5.9.0~beta3-2/debian/patches/Do-not-make-lack-of-SSE2-support-on-x86-32-fatal.patch
|
||||
|
||||
# filter qml provides
|
||||
%global __provides_exclude_from ^%{_qt5_archdatadir}/qml/.*\\.so$
|
||||
@ -30,17 +61,11 @@ Source5: qv4global_p-multilib.h
|
||||
Obsoletes: qt5-qtjsbackend < 5.2.0
|
||||
Obsoletes: qt5-qtdeclarative-render2d < 5.7.1-10
|
||||
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: qt5-rpm-macros >= %{version}
|
||||
BuildRequires: qt5-qtbase-devel >= %{version}
|
||||
BuildRequires: qt5-qtbase-private-devel
|
||||
%{?_qt5:Requires: %{_qt5}%{?_isa} = %{_qt5_version}}
|
||||
BuildRequires: python%{python3_pkgversion}
|
||||
|
||||
%if 0%{?bootstrap}
|
||||
Obsoletes: %{name}-examples < %{version}-%{release}
|
||||
%global no_examples CONFIG-=compile_examples
|
||||
%endif
|
||||
BuildRequires: qt5-qtxmlpatterns-devel >= %{version}
|
||||
BuildRequires: python
|
||||
|
||||
%if 0%{?tests}
|
||||
BuildRequires: dbus-x11
|
||||
@ -49,6 +74,7 @@ BuildRequires: time
|
||||
BuildRequires: xorg-x11-server-Xvfb
|
||||
%endif
|
||||
|
||||
|
||||
%description
|
||||
%{summary}.
|
||||
|
||||
@ -76,22 +102,48 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
|
||||
|
||||
%prep
|
||||
%autosetup -n %{qt_module}-everywhere-src-%{version}
|
||||
%setup -q -n %{qt_module}-opensource-src-%{version}
|
||||
%if 0%{?nosse2_hack}
|
||||
%patch1 -p1 -b .no_sse2
|
||||
%endif
|
||||
%patch2 -p1 -b .QQuickShaderEffectSource_deadlock
|
||||
|
||||
%patch100 -p1 -b .memleak
|
||||
|
||||
## try 5.9.6 without reversing this patch and see -- rex
|
||||
#patch111 -p1 -R -b .0111
|
||||
|
||||
%patch128 -p1 -b .0028
|
||||
|
||||
%patch201 -p0 -b .kdebug346118
|
||||
%patch202 -p1 -b .no_sse2_non_fatal
|
||||
|
||||
|
||||
%build
|
||||
%if 0%{?nosse2_hack}
|
||||
# build libQt5Qml with no_sse2
|
||||
mkdir -p %{_target_platform}-no_sse2
|
||||
pushd %{_target_platform}-no_sse2
|
||||
%{qmake_qt5} -config no_sse2 ..
|
||||
make sub-src-clean
|
||||
%make_build -C src/qml
|
||||
popd
|
||||
%endif
|
||||
|
||||
# HACK so calls to "python" get what we want
|
||||
ln -s %{__python3} python
|
||||
export PATH=`pwd`:$PATH
|
||||
|
||||
%qmake_qt5
|
||||
# no shadow builds until fixed: https://bugreports.qt.io/browse/QTBUG-37417
|
||||
%{qmake_qt5}
|
||||
|
||||
%make_build
|
||||
|
||||
|
||||
%install
|
||||
%make_install INSTALL_ROOT=%{buildroot}
|
||||
make install INSTALL_ROOT=%{buildroot}
|
||||
|
||||
%if 0%{?nosse2_hack}
|
||||
mkdir -p %{buildroot}%{_qt5_libdir}/sse2
|
||||
mv %{buildroot}%{_qt5_libdir}/libQt5Qml.so.5* %{buildroot}%{_qt5_libdir}/sse2/
|
||||
make install INSTALL_ROOT=%{buildroot} -C %{_target_platform}-no_sse2/src/qml
|
||||
%endif
|
||||
|
||||
%ifarch %{multilib_archs}
|
||||
# multilib: qv4global_p.h
|
||||
@ -147,15 +199,18 @@ make check -k -C tests ||:
|
||||
%endif
|
||||
|
||||
|
||||
%ldconfig_scriptlets
|
||||
%post -p /sbin/ldconfig
|
||||
%postun -p /sbin/ldconfig
|
||||
|
||||
%files
|
||||
%license LICENSE.LGPL*
|
||||
%{_qt5_libdir}/libQt5Qml.so.5*
|
||||
%if 0%{?nosse2_hack}
|
||||
%{_qt5_libdir}/sse2/libQt5Qml.so.5*
|
||||
%endif
|
||||
%{_qt5_libdir}/libQt5Quick.so.5*
|
||||
%{_qt5_libdir}/libQt5QuickWidgets.so.5*
|
||||
%{_qt5_libdir}/libQt5QuickParticles.so.5*
|
||||
%{_qt5_libdir}/libQt5QuickShapes.so.5*
|
||||
%{_qt5_libdir}/libQt5QuickTest.so.5*
|
||||
%{_qt5_plugindir}/qmltooling/
|
||||
%{_qt5_archdatadir}/qml/
|
||||
@ -184,79 +239,22 @@ make check -k -C tests ||:
|
||||
%{_qt5_libdir}/libQt5QmlDebug.a
|
||||
%{_qt5_libdir}/libQt5QmlDebug.prl
|
||||
|
||||
%if ! 0%{?no_examples:1}
|
||||
%files examples
|
||||
%{_qt5_examplesdir}/
|
||||
%endif
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 5.12.4-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||
* Mon Jun 11 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.9.6-1
|
||||
- 5.9.6
|
||||
|
||||
* Tue Jul 16 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.4-2
|
||||
- build with python3
|
||||
* Thu Apr 19 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.9.4-3
|
||||
- backport qv4qobjectwrapper fixes
|
||||
|
||||
* Fri Jun 14 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.4-1
|
||||
- 5.12.4
|
||||
|
||||
* Tue Jun 04 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.3-1
|
||||
- 5.12.3
|
||||
|
||||
* Fri Mar 15 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.1-2
|
||||
- de-bootstrap
|
||||
|
||||
* Mon Feb 04 2019 Rex Dieter <rdieter@fedoraproject.org> - 5.12.1-1
|
||||
- 5.12.1
|
||||
- drop remants of sse2 hack support
|
||||
- add bootstrap support (examples)
|
||||
|
||||
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 5.11.3-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||
|
||||
* Fri Dec 07 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.3-1
|
||||
- 5.11.3
|
||||
|
||||
* Fri Sep 21 2018 Jan Grulich <jgrulich@redhat.com> - 5.11.2-1
|
||||
- 5.11.2
|
||||
|
||||
* Sun Jul 15 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.1-3
|
||||
- BR: /usr/bin/python
|
||||
|
||||
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 5.11.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||
|
||||
* Tue Jun 19 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.1-1
|
||||
- 5.11.1
|
||||
|
||||
* Mon Jun 18 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.0-2
|
||||
- %%ix86: nosse2_hack on < f29 only
|
||||
|
||||
* Wed May 23 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.11.0-1
|
||||
- 5.11.0
|
||||
- i686: use nosse2_hack again
|
||||
|
||||
* Tue Apr 03 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.1-5
|
||||
* Tue Apr 03 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.9.4-2
|
||||
- pull in candidate memleak fix (review#224684)
|
||||
|
||||
* Sun Mar 18 2018 Iryna Shcherbina <ishcherb@redhat.com> - 5.10.1-4
|
||||
- Update Python 2 dependency declarations to new packaging standards
|
||||
(See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
|
||||
|
||||
* Thu Mar 08 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.1-3
|
||||
- BR: qt5-rpm-macros
|
||||
|
||||
* Mon Mar 05 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.10.1-2
|
||||
- BR: gcc-c++, use %%make_build %%make_install %%ldconfig_scriptlets
|
||||
|
||||
* Tue Feb 13 2018 Jan Grulich <jgrulich@redhat.com> - 5.10.1-1
|
||||
- 5.10.1
|
||||
|
||||
* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 5.10.0-2
|
||||
- Escape macros in %%changelog
|
||||
|
||||
* Tue Dec 19 2017 Jan Grulich <jgrulich@redhat.com> - 5.10.0-1
|
||||
- 5.10.0
|
||||
* Wed Jan 24 2018 Rex Dieter <rdieter@fedoraproject.org> - 5.9.4-1
|
||||
- 5.9.4
|
||||
|
||||
* Thu Nov 23 2017 Jan Grulich <jgrulich@redhat.com> - 5.9.3-1
|
||||
- 5.9.3
|
||||
@ -296,7 +294,7 @@ make check -k -C tests ||:
|
||||
- Upstream Release Candidate 1
|
||||
|
||||
* Sun May 14 2017 Rex Dieter <rdieter@fedoraproject.org> - 5.9.0-0.5.beta3
|
||||
- Conflict in qt5-qtdeclarative-devel (#1441343), fix Release: 1%%{?dist}
|
||||
- Conflict in qt5-qtdeclarative-devel (#1441343), fix Release: 1%{?dist}
|
||||
|
||||
* Mon May 08 2017 Than Ngo <than@redhat.com> - 5.9.0-0.beta.4
|
||||
- drop useless qtdeclarative-opensource-src-5.9.0-v4bootstrap.patch,
|
||||
@ -409,7 +407,7 @@ make check -k -C tests ||:
|
||||
- use %%license
|
||||
|
||||
* Mon Dec 21 2015 Rex Dieter <rdieter@fedoraproject.org> 5.6.0-0.5.beta3
|
||||
- fix Source URL, Release: 1%%{?dist}
|
||||
- fix Source URL, Release: 1%{?dist}
|
||||
|
||||
* Mon Dec 21 2015 Helio Chissini de Castro <helio@kde.org> - 5.6.0-0.4
|
||||
- Update to final beta3 release
|
||||
|
15
qtdeclarative-QQuickShaderEffectSource_deadlock.patch
Normal file
15
qtdeclarative-QQuickShaderEffectSource_deadlock.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- qtdeclarative-opensource-src-5.4.2/src/quick/items/qquickshadereffectsource.cpp 2015-06-30 07:30:51.938794778 +0200
|
||||
+++ qtdeclarative-opensource-src-5.4.2/src/quick/items/qquickshadereffectsource.cpp.orig 2015-06-30 07:29:47.019163937 +0200
|
||||
@@ -632,8 +632,12 @@
|
||||
|
||||
const QSize minTextureSize = d->sceneGraphContext()->minimumFBOSize();
|
||||
// Keep power-of-two by doubling the size.
|
||||
+ if (textureSize.width() < 1)
|
||||
+ textureSize.rwidth() = 1;
|
||||
while (textureSize.width() < minTextureSize.width())
|
||||
textureSize.rwidth() *= 2;
|
||||
+ if (textureSize.height() < 1)
|
||||
+ textureSize.rheight() = 1;
|
||||
while (textureSize.height() < minTextureSize.height())
|
||||
textureSize.rheight() *= 2;
|
||||
|
19
qtdeclarative-kdebug346118.patch
Normal file
19
qtdeclarative-kdebug346118.patch
Normal file
@ -0,0 +1,19 @@
|
||||
--- src/qml/util/qqmladaptormodel.cpp.orig 2016-05-27 17:06:31.192332166 -0300
|
||||
+++ src/qml/util/qqmladaptormodel.cpp 2016-05-27 18:37:27.764552053 -0300
|
||||
@@ -163,8 +163,14 @@ public:
|
||||
signalIndexes.append(propertyId + signalOffset);
|
||||
}
|
||||
|
||||
- for (int i = 0, c = items.count(); i < c; ++i) {
|
||||
- QQmlDelegateModelItem *item = items.at(i);
|
||||
+ const QList<QQmlDelegateModelItem *> copy = items;
|
||||
+ for (int i = 0, c = copy.count(); i < c; ++i) {
|
||||
+ // Applying the same logic used in QQmlDelegateModel::_q_itemsRemoved().
|
||||
+ QQmlDelegateModelItem *item = copy.at(i);
|
||||
+ if (!items.contains(item)) {
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
const int idx = item->modelIndex();
|
||||
if (idx >= index && idx < index + count) {
|
||||
for (int i = 0; i < signalIndexes.count(); ++i)
|
22
qtdeclarative-leak.patch
Normal file
22
qtdeclarative-leak.patch
Normal file
@ -0,0 +1,22 @@
|
||||
diff -up qtdeclarative-everywhere-src-5.10.1/src/quick/scenegraph/qsgrenderloop.cpp.leak qtdeclarative-everywhere-src-5.10.1/src/quick/scenegraph/qsgrenderloop.cpp
|
||||
--- qtdeclarative-everywhere-src-5.10.1/src/quick/scenegraph/qsgrenderloop.cpp.leak 2018-04-03 11:14:09.975064043 -0500
|
||||
+++ qtdeclarative-everywhere-src-5.10.1/src/quick/scenegraph/qsgrenderloop.cpp 2018-04-03 11:15:29.347573091 -0500
|
||||
@@ -305,6 +305,8 @@ void QSGGuiThreadRenderLoop::hide(QQuick
|
||||
{
|
||||
QQuickWindowPrivate *cd = QQuickWindowPrivate::get(window);
|
||||
cd->fireAboutToStop();
|
||||
+ if (m_windows.contains(window))
|
||||
+ m_windows[window].updatePending = false;
|
||||
}
|
||||
|
||||
void QSGGuiThreadRenderLoop::windowDestroyed(QQuickWindow *window)
|
||||
@@ -494,7 +496,8 @@ QImage QSGGuiThreadRenderLoop::grab(QQui
|
||||
|
||||
void QSGGuiThreadRenderLoop::maybeUpdate(QQuickWindow *window)
|
||||
{
|
||||
- if (!m_windows.contains(window))
|
||||
+ QQuickWindowPrivate *cd = QQuickWindowPrivate::get(window);
|
||||
+ if (!cd->isRenderable() || !m_windows.contains(window))
|
||||
return;
|
||||
|
||||
m_windows[window].updatePending = true;
|
36
qtdeclarative-opensource-src-5.9.0-no_sse2.patch
Normal file
36
qtdeclarative-opensource-src-5.9.0-no_sse2.patch
Normal file
@ -0,0 +1,36 @@
|
||||
--- qtdeclarative-opensource-src-5.9.0-beta3/src/qml/jsruntime/qv4global_p.h 2017-04-21 20:34:05.000000000 +0200
|
||||
+++ qtdeclarative-opensource-src-5.9.0-beta3/src/qml/jsruntime/qv4global_p.h.new 2017-05-06 09:23:00.894049064 +0200
|
||||
@@ -95,7 +95,7 @@
|
||||
//
|
||||
// NOTE: This should match the logic in qv4targetplatform_p.h!
|
||||
|
||||
-#if defined(Q_PROCESSOR_X86) && (QT_POINTER_SIZE == 4) \
|
||||
+#if defined(Q_PROCESSOR_X86) && (QT_POINTER_SIZE == 4) && defined(__SSE2__) \
|
||||
&& (defined(Q_OS_WIN) || defined(Q_OS_LINUX) || defined(Q_OS_QNX) || defined(Q_OS_FREEBSD))
|
||||
# define V4_ENABLE_JIT
|
||||
#elif defined(Q_PROCESSOR_X86_64) && (QT_POINTER_SIZE == 8) \
|
||||
--- qtdeclarative-opensource-src-5.9.0-beta3/src/qml/jsruntime/jsruntime.pri 2017-04-21 20:34:05.000000000 +0200
|
||||
+++ qtdeclarative-opensource-src-5.9.0-beta3/src/qml/jsruntime/jsruntime.pri.new 2017-05-06 09:25:12.698437577 +0200
|
||||
@@ -115,6 +115,11 @@
|
||||
$$PWD/qv4value.cpp \
|
||||
$$PWD/qv4executableallocator.cpp
|
||||
|
||||
+linux-g++*:isEqual(QT_ARCH,i386):!no_sse2 {
|
||||
+ QMAKE_CFLAGS += -msse2 -mfpmath=sse
|
||||
+ QMAKE_CXXFLAGS += -msse2 -mfpmath=sse
|
||||
+}
|
||||
+
|
||||
valgrind {
|
||||
DEFINES += V4_USE_VALGRIND
|
||||
}
|
||||
--- qtdeclarative-opensource-src-5.9.0-beta3/src/qml/qml/v8/qv8engine.cpp 2017-04-21 20:34:05.000000000 +0200
|
||||
+++ qtdeclarative-opensource-src-5.9.0-beta3/src/qml/qml/v8/qv8engine.cpp.new 2017-05-06 09:27:19.373810971 +0200
|
||||
@@ -129,7 +129,7 @@
|
||||
, m_xmlHttpRequestData(0)
|
||||
, m_listModelData(0)
|
||||
{
|
||||
-#ifdef Q_PROCESSOR_X86_32
|
||||
+#if defined(Q_PROCESSOR_X86_32) && defined(__SSE2__)
|
||||
if (!qCpuHasFeature(SSE2)) {
|
||||
qFatal("This program requires an X86 processor that supports SSE2 extension, at least a Pentium 4 or newer");
|
||||
}
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (qtdeclarative-everywhere-src-5.12.4.tar.xz) = 953b0dac76b73a7a21b393ab88718da12d77dfc688dc07c55c96ea1658bc14acd9097bef60df4a95d2923d3fb1e02b46499c032aa53844d4fd344b0037514671
|
||||
SHA512 (qtdeclarative-opensource-src-5.9.6.tar.xz) = 1fc7a542c60e8c13ba9b791d7b83a916fc1ffb1d3ab505405055a13d597a2c406f29bbd9309603af5bf56492874efeee33ab0128af1fa44866d66d689147ac39
|
||||
|
Loading…
Reference in New Issue
Block a user