aboutsummarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorDonald Carr2018-06-08 20:41:13 -0700
committerDonald Carr2018-06-08 20:49:47 -0700
commit7f0a7c4e4a0a07ee28d494e594856bd0daf70128 (patch)
treeab208c55c386514f06bf0705c505558721b715fd
parent5ad8062fd0f37a6e3135aa414d3ad6115556bff3 (diff)
downloadaur-7f0a7c4e4a0a07ee28d494e594856bd0daf70128.tar.gz
Move to Qt 5.11 release
-rw-r--r--0001-Fix-.import-within-.js-files-with-CONFIG-qtquickcomp.patch215
-rw-r--r--PKGBUILD9
2 files changed, 220 insertions, 4 deletions
diff --git a/0001-Fix-.import-within-.js-files-with-CONFIG-qtquickcomp.patch b/0001-Fix-.import-within-.js-files-with-CONFIG-qtquickcomp.patch
new file mode 100644
index 000000000000..f679fb1e13ea
--- /dev/null
+++ b/0001-Fix-.import-within-.js-files-with-CONFIG-qtquickcomp.patch
@@ -0,0 +1,215 @@
+From 0a2aaee61cfc2888bc71f54ac5b165d248cbf5e8 Mon Sep 17 00:00:00 2001
+From: Simon Hausmann <simon.hausmann@qt.io>
+Date: Fri, 11 May 2018 15:39:04 +0200
+Subject: [PATCH] Fix .import within .js files with CONFIG+=qtquickcompiler
+
+When loading a .js file without QQC, we scan the sources and use the
+ScriptDirectivesCollector to extract things like .pragma library or
+.import ahead of time. That information is passed on to the compilation
+unit generator for serialization. When compiling .js files ahead of
+time, we also used the same collector, but we forgot to save the data
+into the right location before serialization, so we essentially lost the
+imports. This patch fixes that by centralizing this code into the
+ScriptDirectivesCollector itself.
+
+[ChangeLog][QtQml] Fix regression with .import in .js files not working
+when using CONFIG+=qtquickcompiler.
+
+Change-Id: I5413c14b1b8bd3114a997011534fe55cdb7634aa
+Reviewed-by: Lars Knoll <lars.knoll@qt.io>
+---
+ src/qml/compiler/qqmlirbuilder.cpp | 14 +++++++-------
+ src/qml/compiler/qqmlirbuilder_p.h | 10 +++++-----
+ src/qml/qml/qqmltypeloader.cpp | 5 +----
+ tests/auto/qml/qmlcachegen/jsimport.qml | 6 ++++++
+ tests/auto/qml/qmlcachegen/library.js | 4 ++++
+ tests/auto/qml/qmlcachegen/qmlcachegen.pro | 2 ++
+ tests/auto/qml/qmlcachegen/script.js | 6 ++++++
+ tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp | 11 +++++++++++
+ tools/qmlcachegen/qmlcachegen.cpp | 2 +-
+ 9 files changed, 43 insertions(+), 17 deletions(-)
+ create mode 100644 tests/auto/qml/qmlcachegen/jsimport.qml
+ create mode 100644 tests/auto/qml/qmlcachegen/library.js
+ create mode 100644 tests/auto/qml/qmlcachegen/script.js
+
+diff --git a/src/qml/compiler/qqmlirbuilder.cpp b/src/qml/compiler/qqmlirbuilder.cpp
+index 4a1b27d7a..1b07fda1f 100644
+--- a/src/qml/compiler/qqmlirbuilder.cpp
++++ b/src/qml/compiler/qqmlirbuilder.cpp
+@@ -322,16 +322,16 @@ Document::Document(bool debugMode)
+ {
+ }
+
+-ScriptDirectivesCollector::ScriptDirectivesCollector(QQmlJS::Engine *engine, QV4::Compiler::JSUnitGenerator *unitGenerator)
+- : engine(engine)
+- , jsGenerator(unitGenerator)
+- , hasPragmaLibrary(false)
++ScriptDirectivesCollector::ScriptDirectivesCollector(Document *doc)
++ : document(doc)
++ , engine(&doc->jsParserEngine)
++ , jsGenerator(&doc->jsGenerator)
+ {
+ }
+
+ void ScriptDirectivesCollector::pragmaLibrary()
+ {
+- hasPragmaLibrary = true;
++ document->jsModule.unitFlags |= QV4::CompiledData::Unit::IsSharedLibrary;
+ }
+
+ void ScriptDirectivesCollector::importFile(const QString &jsfile, const QString &module, int lineNumber, int column)
+@@ -342,7 +342,7 @@ void ScriptDirectivesCollector::importFile(const QString &jsfile, const QString
+ import->qualifierIndex = jsGenerator->registerString(module);
+ import->location.line = lineNumber;
+ import->location.column = column;
+- imports << import;
++ document->imports << import;
+ }
+
+ void ScriptDirectivesCollector::importModule(const QString &uri, const QString &version, const QString &module, int lineNumber, int column)
+@@ -358,7 +358,7 @@ void ScriptDirectivesCollector::importModule(const QString &uri, const QString &
+ import->qualifierIndex = jsGenerator->registerString(module);
+ import->location.line = lineNumber;
+ import->location.column = column;
+- imports << import;
++ document->imports << import;
+ }
+
+ IRBuilder::IRBuilder(const QSet<QString> &illegalNames)
+diff --git a/src/qml/compiler/qqmlirbuilder_p.h b/src/qml/compiler/qqmlirbuilder_p.h
+index c2cf18e3c..689b232b1 100644
+--- a/src/qml/compiler/qqmlirbuilder_p.h
++++ b/src/qml/compiler/qqmlirbuilder_p.h
+@@ -462,14 +462,14 @@ struct Q_QML_PRIVATE_EXPORT Document
+ static void removeScriptPragmas(QString &script);
+ };
+
+-struct Q_QML_PRIVATE_EXPORT ScriptDirectivesCollector : public QQmlJS::Directives
++class Q_QML_PRIVATE_EXPORT ScriptDirectivesCollector : public QQmlJS::Directives
+ {
+- ScriptDirectivesCollector(QQmlJS::Engine *engine, QV4::Compiler::JSUnitGenerator *unitGenerator);
+-
++ QmlIR::Document *document;
+ QQmlJS::Engine *engine;
+ QV4::Compiler::JSUnitGenerator *jsGenerator;
+- QList<const QV4::CompiledData::Import *> imports;
+- bool hasPragmaLibrary;
++
++public:
++ ScriptDirectivesCollector(QmlIR::Document *doc);
+
+ void pragmaLibrary() override;
+ void importFile(const QString &jsfile, const QString &module, int lineNumber, int column) override;
+diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
+index 9856a0be8..d7bd88235 100644
+--- a/src/qml/qml/qqmltypeloader.cpp
++++ b/src/qml/qml/qqmltypeloader.cpp
+@@ -3021,7 +3021,7 @@ void QQmlScriptBlob::dataReceived(const SourceCodeData &data)
+ return;
+ }
+
+- QmlIR::ScriptDirectivesCollector collector(&irUnit.jsParserEngine, &irUnit.jsGenerator);
++ QmlIR::ScriptDirectivesCollector collector(&irUnit);
+
+ QList<QQmlError> errors;
+ QQmlRefPointer<QV4::CompiledData::CompilationUnit> unit = QV4::Script::precompile(
+@@ -3037,9 +3037,6 @@ void QQmlScriptBlob::dataReceived(const SourceCodeData &data)
+ unit.adopt(new QV4::CompiledData::CompilationUnit);
+ }
+ irUnit.javaScriptCompilationUnit = unit;
+- irUnit.imports = collector.imports;
+- if (collector.hasPragmaLibrary)
+- irUnit.jsModule.unitFlags |= QV4::CompiledData::Unit::IsSharedLibrary;
+
+ QmlIR::QmlUnitGenerator qmlGenerator;
+ QV4::CompiledData::Unit *unitData = qmlGenerator.generate(irUnit);
+diff --git a/tests/auto/qml/qmlcachegen/jsimport.qml b/tests/auto/qml/qmlcachegen/jsimport.qml
+new file mode 100644
+index 000000000..9c40878e6
+--- /dev/null
++++ b/tests/auto/qml/qmlcachegen/jsimport.qml
+@@ -0,0 +1,6 @@
++import QtQml 2.0
++import "script.js" as Script
++
++QtObject {
++ property int value: Script.getter()
++}
+diff --git a/tests/auto/qml/qmlcachegen/library.js b/tests/auto/qml/qmlcachegen/library.js
+new file mode 100644
+index 000000000..51fb41dc2
+--- /dev/null
++++ b/tests/auto/qml/qmlcachegen/library.js
+@@ -0,0 +1,4 @@
++
++function getter() {
++ return 42;
++}
+diff --git a/tests/auto/qml/qmlcachegen/qmlcachegen.pro b/tests/auto/qml/qmlcachegen/qmlcachegen.pro
+index a2f963e8c..f62b95084 100644
+--- a/tests/auto/qml/qmlcachegen/qmlcachegen.pro
++++ b/tests/auto/qml/qmlcachegen/qmlcachegen.pro
+@@ -12,4 +12,6 @@ RESOURCES += versionchecks.qml
+
+ RESOURCES += trickypaths.qrc
+
++RESOURCES += jsimport.qml script.js library.js
++
+ QT += core-private qml-private testlib
+diff --git a/tests/auto/qml/qmlcachegen/script.js b/tests/auto/qml/qmlcachegen/script.js
+new file mode 100644
+index 000000000..fa55f9069
+--- /dev/null
++++ b/tests/auto/qml/qmlcachegen/script.js
+@@ -0,0 +1,6 @@
++
++.import "library.js" as Library
++
++function getter() {
++ return Library.getter()
++}
+diff --git a/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp b/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp
+index 5c1692f08..c95a5a5d2 100644
+--- a/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp
++++ b/tests/auto/qml/qmlcachegen/tst_qmlcachegen.cpp
+@@ -54,6 +54,8 @@ private slots:
+ void workerScripts();
+
+ void trickyPaths();
++
++ void scriptImport();
+ };
+
+ // A wrapper around QQmlComponent to ensure the temporary reference counts
+@@ -416,6 +418,15 @@ void tst_qmlcachegen::trickyPaths()
+ QCOMPARE(obj->property("success").toInt(), 42);
+ }
+
++void tst_qmlcachegen::scriptImport()
++{
++ QQmlEngine engine;
++ CleanlyLoadingComponent component(&engine, QUrl("qrc:///jsimport.qml"));
++ QScopedPointer<QObject> obj(component.create());
++ QVERIFY(!obj.isNull());
++ QTRY_COMPARE(obj->property("value").toInt(), 42);
++}
++
+ QTEST_GUILESS_MAIN(tst_qmlcachegen)
+
+ #include "tst_qmlcachegen.moc"
+diff --git a/tools/qmlcachegen/qmlcachegen.cpp b/tools/qmlcachegen/qmlcachegen.cpp
+index 9c97ef769..adc9def59 100644
+--- a/tools/qmlcachegen/qmlcachegen.cpp
++++ b/tools/qmlcachegen/qmlcachegen.cpp
+@@ -261,7 +261,7 @@ static bool compileJSFile(const QString &inputFileName, const QString &inputFile
+ }
+
+ QQmlJS::Engine *engine = &irDocument.jsParserEngine;
+- QmlIR::ScriptDirectivesCollector directivesCollector(engine, &irDocument.jsGenerator);
++ QmlIR::ScriptDirectivesCollector directivesCollector(&irDocument);
+ QQmlJS::Directives *oldDirs = engine->directives();
+ engine->setDirectives(&directivesCollector);
+
+--
+2.17.1
+
diff --git a/PKGBUILD b/PKGBUILD
index 1ce60159ce92..deabbcc9c8e9 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -93,11 +93,11 @@ if $_testing; then
_dev_suffix="beta2"
pkgrel=4
else
- _pkgvermajmin="5.10"
+ _pkgvermajmin="5.11"
_pkgverpatch=".0"
# {alpha/beta/beta2/rc}
_dev_suffix=""
- pkgrel=4
+ pkgrel=5
fi
pkgver="${_pkgvermajmin}${_pkgverpatch}"
$_build_from_head && pkgver=6.6.6
@@ -300,7 +300,7 @@ _core_configure_options=" \
if $_testing; then
_tar_xz_sha256="9482538af151454f79def3df1f4f76fc9475372b96cc9ca8515d7b2112a7d8cf"
else
- _tar_xz_sha256="936d4cf5d577298f4f9fdb220e85b008ae321554a5fcd38072dc327a7296230e"
+ _tar_xz_sha256="67ddb8bf33bbfd19ebc641467ccce2e57fd0b80c6082457f1f5a76e8df83c865"
fi
if ! $_build_from_head; then
@@ -382,7 +382,8 @@ if $_uber_minimal; then
cat $_tmp_qtpro >> $_qtpro
fi
- cd ${_srcdir}
+ cd ${_srcdir}/qtdeclarative
+ patch -p1 < ${startdir}/0001-Fix-.import-within-.js-files-with-CONFIG-qtquickcomp.patch
# enable reduce relocations
sed -i '/error Symbolic function binding/d' ${_srcdir}/qtbase/configure.json