From 704e3435c6919ab2c0cde06343e358d068604a2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C3=ABl=20PORTAY?= <gael.portay@savoirfairelinux.com>
Date: Tue, 15 Aug 2017 16:38:53 -0400
Subject: [PATCH] qt5webengine: new package
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch is based on works [1] and [2].

With this patch, one can run the Qt5 WebEngine quicknanobrowser sample
with the following options.

	BR2_TOOLCHAIN_BUILDROOT_LIBC="glibc" and
	BR2_TOOLCHAIN_BUILDROOT_CXX (Qt 5 needs a toolchain w/ wchar, NPTL, C++,
	dynamic library; for now it builds only with glibc)
	BR2_PACKAGE_LIBERATION (Qt needs at least one font)
	BR2_PACKAGE_QT5BASE_EXAMPLES (to install quicknanobrowser sample)
	BR2_PACKAGE_QT5BASE_GIF (do display gif)
	BR2_PACKAGE_QT5BASE_JPEG (do display jpeg)
	BR2_PACKAGE_QT5BASE_PNG (do display png)
	BR2_PACKAGE_QT5QUICKCONTROLS (needed by webengine)
	BR2_PACKAGE_QT5QUICKCONTROLS2 (needed by webengine)
	BR2_PACKAGE_QT5WEBENGINE (because it is what we want)

Qt WebEngine requires an Open(E)GL-capable backend. As an example, the
package rpi-userland must be enabled to build for a rpi.

	BR2_PACKAGE_RPI_USERLAND (to enable OpenGL ES backend)

To browse for HTTPS websites, please consider adding the following
options as well for SSL/TLS.

	BR2_PACKAGE_CA_CERT (for certificates)
	BR2_PACKAGE_NTPD (to sync date for certificates)

Since version 5.9, chromium requires udev at runtime (see note 4).

	BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV (input backend)

To run quicknanobrowser

	# cd /usr/lib/qt/examples/webengine/quicknanobrowser/
	# ./quicknanobrowser https://www.buildroot.org/

Note: The chromium.inc has been generated using the following command.

	( echo 'CHROMIUM_LICENSE_FILES = \' &&
	  cd output/build/qt5webengine-5.9.1/ && \
	  find "src/3rdparty/chromium/" -type f -iname "*LICENSE*" -o -iname "*COPYING*" -o -iname "*GPL*" | \
	  sed -e '/\.asm$/d' \
	      -e '/\.h$/d' \
	      -e '/\.c$/d' \
	      -e '/\.cc$/d' \
	      -e '/\.cpp$/d' \
	      -e '/\.pyc\?$/d' \
	      -e '/\.pl$/d' \
	      -e '/\.sha1$/d' \
	      -e '/\.patch$/d' \
	      -e '/licensecheck/d' \
	      -e 's,^,\t,' \
	      -e 's,$, \\,' | \
	  sort && \
	  echo '' ) >package/qt5/qt5webengine/chromium.inc

Note 2: Since 5.9.1, the chromium's copy of opus fails with neon [3].
Qt WebEngine can uses buildroot ffmpeg copy which compiles fine (using
qmake flag WEBENGINE_CONFIG+=use_system_ffmpeg). It implies selecting
the following options.

	BR2_PACKAGE_FFMPEG
	BR2_PACKAGE_OPUS
	BR2_PACKAGE_LIBVPX
	BR2_PACKAGE_WEBP
	BR2_PACKAGE_WEBP_DEMUX

	In file included from ../../3rdparty/chromium/third_party/opus/src/silk/arm/NSQ_neon.c:31:0:
	/home/gportay/src/buildroot/output-rpi3-qt5.9/host/lib/gcc/arm-buildroot-linux-gnueabihf/6.4.0/include/arm_neon.h:8997:1: error: inlining failed in call to always_inline ‘vld1q_s32’: target specific option mismatch
	 vld1q_s32 (const int32_t * __a)
	 ^~~~~~~~~
	../../3rdparty/chromium/third_party/opus/src/silk/arm/NSQ_neon.c:40:15: note: called from here
	     int32x4_t coef0 = vld1q_s32(coef32);
		       ^~~~~
	../../3rdparty/chromium/third_party/opus/src/silk/arm/NSQ_neon.c: At top level:
	cc1: warning: unrecognized command line option ‘-Wno-#pragma-messages’

Note 3: Version 5.6.2 causes a build issue while building chromium. The
build against this version is disabled until the release 5.6.3 is out.

Note 4: Here is trace when udev does not run

	# cd /usr/lib/qt/examples/webengine/quicknanobrowser
	# ./quicknanobrowser
	QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
	Unable to query physical screen size, defaulting to 100 dpi.
	To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
	[0101/000248.161973:WARNING:resource_bundle_qt.cpp(114)] locale_file_path.empty() for locale
	[0101/000248.384693:WARNING:resource_bundle_qt.cpp(114)] locale_file_path.empty() for locale
	[202:223:0101/000248.484954:FATAL:udev_loader.cc(38)] Check failed: false.
	#0 0x0000742b93de <unknown>
	#1 0x0000742c3c38 <unknown>
	#2 0x000073e1e1aa <unknown>
	#3 0x000073e1d96e <unknown>
	#4 0x000073e1defa <unknown>
	#5 0x000074af6364 <unknown>
	#6 0x000074302878 <unknown>
	#7 0x0000742c8fee <unknown>
	#8 0x0000742c9f44 <unknown>
	#9 0x0000742ca21e <unknown>
	#10 0x0000742cac4c <unknown>
	#11 0x0000742c87b2 <unknown>
	#12 0x0000742da4f6 <unknown>
	#13 0x000073ed9d38 <unknown>
	#14 0x000073eda03c <unknown>
	#15 0x0000742e9aec <unknown>
	#16 0x0000742e71dc <unknown>

	Aborted

Note 5: On rpi and depending on what is insinde the .config, more GPU
memory should be allocated to run properly qt samples.

	#0 0x0000742c63de <unknown>
	#1 0x0000742d0c38 <unknown>
	#2 0x0000749d7bde <unknown>
	#3 0x0000749e3c70 <unknown>
	#4 0x00007530227c <unknown>
	#5 0x000075302480 <unknown>
	#6 0x0000752fb1e4 <unknown>
	#7 0x00007430f878 <unknown>
	#8 0x0000742d5fee <unknown>
	#9 0x0000742d6f44 <unknown>
	#10 0x0000742d721e <unknown>
	#11 0x0000742d7ad6 <unknown>
	#12 0x0000742d57b2 <unknown>
	#13 0x0000742e74f6 <unknown>
	#14 0x0000742f6a74 <unknown>
	#15 0x0000742f41dc <unknown>

	Received signal 6
	#0 0x0000742c63de <unknown>
	#1 0x0000742c66a0 <unknown>
	#2 0x0000725b5d10 <unknown>
	[end of stack trace]
	qml: Render process exited with code 256 (abnormal exit)

	# mount /dev/mmcblk0p1 /mnt
	# sed '/^gpu_mem_/s,=.*,=200,' -i /mnt/config.txt
	# umount /mnt

Note 6: The first patch fixes a build issue when samples are compiled
without the support of printing [4]. This patch is already merged in
branch 5.9 [5] and concerns only 5.9.1.

	085c2c52 Always compile QWebEnginePage::print

It fixes the error below.

	.obj/browsermainwindow.o: In function `BrowserMainWindow::printRequested(QWebEnginePage*)': browsermainwindow.cpp:(.text+0x2cc0): undefined reference to `QWebEnginePage::print(QPrinter*, QWebEngineCallback<bool> const&)'

The second patch loads both libEGL and libGLESv2 symbols implicitly
instead of loading them with explicitly using hard-coded locations. It
fixes a bug when providers of lib*GL does not create libraries named
libEGL.so.1 and libGLESv2.s2 [6]. This patch is already merged in branch
5.9 [7].

	d4c621f6 Load libEGL and libGLES2 symbols implicitly

It fixes the error below.

	[327:347:1221/085837:ERROR:surface_factory_qt.cpp(68)] Failed to load /usr/lib/libGLESv2.so.2: /usr/lib/libGLESv2.so.2: cannot open shared object file: No such file or directory

[1]: http://lists.busybox.net/pipermail/buildroot/2015-July/132010.html
[2]: https://patchwork.ozlabs.org/patch/640633/
[3]: https://patchwork.ozlabs.org/patch/791332/
[4]: https://bugreports.qt.io/browse/QTBUG-61510
[5]: https://codereview.qt-project.org/#/c/198041/
[6]: https://bugreports.qt.io/browse/QTBUG-57761
[7]: https://codereview.qt-project.org/#/c/199554/

Cc: Akihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>
Cc: Julien Corjon <corjon.j@ecagroup.com>
Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>
[Arnout:
 - move more dependencies to _ARCH_DEPENDS;
 - mention all toolchain dependencies in the comments]
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
---
 DEVELOPERS                                         |   1 +
 package/qt5/Config.in                              |   1 +
 .../0001-Always-compile-QWebEnginePage-print.patch | 246 ++++++++++++++++
 ...ad-libEGL-and-libGLES2-symbols-implicitly.patch |  89 ++++++
 package/qt5/qt5webengine/Config.in                 |  86 ++++++
 package/qt5/qt5webengine/chromium.inc              | 310 +++++++++++++++++++++
 package/qt5/qt5webengine/qt5webengine.hash         |   2 +
 package/qt5/qt5webengine/qt5webengine.mk           |  80 ++++++
 8 files changed, 815 insertions(+)
 create mode 100644 package/qt5/qt5webengine/5.9.1/0001-Always-compile-QWebEnginePage-print.patch
 create mode 100644 package/qt5/qt5webengine/5.9.1/0002-Load-libEGL-and-libGLES2-symbols-implicitly.patch
 create mode 100644 package/qt5/qt5webengine/Config.in
 create mode 100644 package/qt5/qt5webengine/chromium.inc
 create mode 100644 package/qt5/qt5webengine/qt5webengine.hash
 create mode 100644 package/qt5/qt5webengine/qt5webengine.mk

diff --git a/DEVELOPERS b/DEVELOPERS
index 0e16909..ac8a12e 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -630,6 +630,7 @@ F:	package/zxing-cpp/
 
 N:	Gaël Portay <gael.portay@savoirfairelinux.com>
 F:	package/qt5/qt5virtualkeyboard/
+F:	package/qt5/qt5webengine/
 
 N:	Gary Bisson <gary.bisson@boundarydevices.com>
 F:	board/boundarydevices/
diff --git a/package/qt5/Config.in b/package/qt5/Config.in
index 1802c86..8513c36 100644
--- a/package/qt5/Config.in
+++ b/package/qt5/Config.in
@@ -80,6 +80,7 @@ source "package/qt5/qt5virtualkeyboard/Config.in"
 source "package/qt5/qt5wayland/Config.in"
 source "package/qt5/qt5webchannel/Config.in"
 source "package/qt5/qt5webkit/Config.in"
+source "package/qt5/qt5webengine/Config.in"
 source "package/qt5/qt5websockets/Config.in"
 source "package/qt5/qt5x11extras/Config.in"
 source "package/qt5/qt5xmlpatterns/Config.in"
diff --git a/package/qt5/qt5webengine/5.9.1/0001-Always-compile-QWebEnginePage-print.patch b/package/qt5/qt5webengine/5.9.1/0001-Always-compile-QWebEnginePage-print.patch
new file mode 100644
index 0000000..5e86323
--- /dev/null
+++ b/package/qt5/qt5webengine/5.9.1/0001-Always-compile-QWebEnginePage-print.patch
@@ -0,0 +1,246 @@
+From 085c2c529473bbe9dd7c8c5698a45053520cc423 Mon Sep 17 00:00:00 2001
+From: =?utf-8?q?J=C3=BCri=20Valdmann?= <juri.valdmann@qt.io>
+Date: Tue, 20 Jun 2017 15:36:43 +0200
+Subject: [PATCH 1/1] Always compile QWebEnginePage::print
+
+- Remove two out of five layers of ifdefs around and inside this method.
+- Now always compiled but will yield an error if printing is disabled.
+- Remove printing-related ifdefs from demobrowser.
+
+Task-number: QTBUG-61510
+Change-Id: I79781189d3d3fb62db0a2216b2b989e3fa1d1f86
+Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
+Reviewed-by: Rolf Eike Beer <eb@emlix.com>
+Upstream-Status: Merged
+Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>
+---
+ examples/webenginewidgets/demobrowser/browsermainwindow.cpp | 12 ------------
+ examples/webenginewidgets/demobrowser/browsermainwindow.h   |  6 ------
+ examples/webenginewidgets/demobrowser/printtopdfdialog.cpp  |  7 -------
+ src/webenginewidgets/api/qwebenginepage.cpp                 | 10 ++--------
+ src/webenginewidgets/api/qwebenginepage.h                   |  8 --------
+ 5 files changed, 2 insertions(+), 41 deletions(-)
+
+diff --git a/examples/webenginewidgets/demobrowser/browsermainwindow.cpp b/examples/webenginewidgets/demobrowser/browsermainwindow.cpp
+index 327d7a9d..14d49f7f 100644
+--- a/examples/webenginewidgets/demobrowser/browsermainwindow.cpp
++++ b/examples/webenginewidgets/demobrowser/browsermainwindow.cpp
+@@ -109,9 +109,7 @@ BrowserMainWindow::BrowserMainWindow(QWidget *parent, Qt::WindowFlags flags)
+     , m_historyForward(0)
+     , m_stop(0)
+     , m_reload(0)
+-#ifndef QT_NO_PRINTER
+     , m_currentPrinter(nullptr)
+-#endif
+ {
+     setToolButtonStyle(Qt::ToolButtonFollowStyle);
+     setAttribute(Qt::WA_DeleteOnClose, true);
+@@ -312,9 +310,7 @@ void BrowserMainWindow::setupMenu()
+ #if defined(QWEBENGINEPAGE_PRINT)
+     fileMenu->addAction(tr("P&rint Preview..."), this, SLOT(slotFilePrintPreview()));
+ #endif
+-#ifndef QT_NO_PRINTER
+     fileMenu->addAction(tr("&Print..."), this, SLOT(slotFilePrint()), QKeySequence::Print);
+-#endif
+     fileMenu->addAction(tr("&Print to PDF..."), this, SLOT(slotFilePrintToPDF()));
+     fileMenu->addSeparator();
+ 
+@@ -702,23 +698,19 @@ void BrowserMainWindow::slotFileOpen()
+ 
+ void BrowserMainWindow::slotFilePrintPreview()
+ {
+-#ifndef QT_NO_PRINTPREVIEWDIALOG
+     if (!currentTab())
+         return;
+     QPrintPreviewDialog *dialog = new QPrintPreviewDialog(this);
+     connect(dialog, SIGNAL(paintRequested(QPrinter*)),
+             currentTab(), SLOT(print(QPrinter*)));
+     dialog->exec();
+-#endif
+ }
+ 
+ void BrowserMainWindow::slotFilePrint()
+ {
+-#ifndef QT_NO_PRINTER
+     if (!currentTab())
+         return;
+     printRequested(currentTab()->page());
+-#endif
+ }
+ 
+ void BrowserMainWindow::slotHandlePdfPrinted(const QByteArray& result)
+@@ -751,7 +743,6 @@ void BrowserMainWindow::slotFilePrintToPDF()
+     currentTab()->page()->printToPdf(invoke(this, &BrowserMainWindow::slotHandlePdfPrinted), dialog->pageLayout());
+ }
+ 
+-#ifndef QT_NO_PRINTER
+ void BrowserMainWindow::slotHandlePagePrinted(bool result)
+ {
+     Q_UNUSED(result);
+@@ -763,7 +754,6 @@ void BrowserMainWindow::slotHandlePagePrinted(bool result)
+ 
+ void BrowserMainWindow::printRequested(QWebEnginePage *page)
+ {
+-#ifndef QT_NO_PRINTDIALOG
+     if (m_currentPrinter)
+         return;
+     m_currentPrinter = new QPrinter();
+@@ -774,9 +764,7 @@ void BrowserMainWindow::printRequested(QWebEnginePage *page)
+         return;
+     }
+     page->print(m_currentPrinter, invoke(this, &BrowserMainWindow::slotHandlePagePrinted));
+-#endif
+ }
+-#endif
+ 
+ void BrowserMainWindow::slotPrivateBrowsing()
+ {
+diff --git a/examples/webenginewidgets/demobrowser/browsermainwindow.h b/examples/webenginewidgets/demobrowser/browsermainwindow.h
+index 91e1c1d2..5bbbb292 100644
+--- a/examples/webenginewidgets/demobrowser/browsermainwindow.h
++++ b/examples/webenginewidgets/demobrowser/browsermainwindow.h
+@@ -56,9 +56,7 @@
+ #include <QtCore/QUrl>
+ 
+ QT_BEGIN_NAMESPACE
+-#ifndef QT_NO_PRINTER
+ class QPrinter;
+-#endif
+ class QWebEnginePage;
+ QT_END_NAMESPACE
+ 
+@@ -142,10 +140,8 @@ private slots:
+     void slotSwapFocus();
+     void slotHandlePdfPrinted(const QByteArray&);
+ 
+-#ifndef QT_NO_PRINTER
+     void slotHandlePagePrinted(bool result);
+     void printRequested(QWebEnginePage *page);
+-#endif
+     void geometryChangeRequested(const QRect &geometry);
+     void updateToolbarActionText(bool visible);
+     void updateBookmarksToolbarActionText(bool visible);
+@@ -180,9 +176,7 @@ private:
+     QAction *m_restoreLastSession;
+     QAction *m_addBookmark;
+ 
+-#ifndef QT_NO_PRINTER
+     QPrinter *m_currentPrinter;
+-#endif
+ 
+     QIcon m_reloadIcon;
+     QIcon m_stopIcon;
+diff --git a/examples/webenginewidgets/demobrowser/printtopdfdialog.cpp b/examples/webenginewidgets/demobrowser/printtopdfdialog.cpp
+index 0f3b1765..50a8bb91 100644
+--- a/examples/webenginewidgets/demobrowser/printtopdfdialog.cpp
++++ b/examples/webenginewidgets/demobrowser/printtopdfdialog.cpp
+@@ -52,10 +52,8 @@
+ #include "ui_printtopdfdialog.h"
+ 
+ #include <QtCore/QDir>
+-#ifndef QT_NO_PRINTER
+ #include <QtPrintSupport/QPageSetupDialog>
+ #include <QtPrintSupport/QPrinter>
+-#endif // QT_NO_PRINTER
+ #include <QtWidgets/QFileDialog>
+ 
+ PrintToPdfDialog::PrintToPdfDialog(const QString &filePath, QWidget *parent) :
+@@ -66,11 +64,8 @@ PrintToPdfDialog::PrintToPdfDialog(const QString &filePath, QWidget *parent) :
+     ui->setupUi(this);
+     setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+     connect(ui->chooseFilePathButton, &QToolButton::clicked, this, &PrintToPdfDialog::onChooseFilePathButtonClicked);
+-#ifndef QT_NO_PRINTER
+     connect(ui->choosePageLayoutButton, &QToolButton::clicked, this, &PrintToPdfDialog::onChoosePageLayoutButtonClicked);
+-#else
+     ui->choosePageLayoutButton->hide();
+-#endif // QT_NO_PRINTER
+     updatePageLayoutLabel();
+     setFilePath(filePath);
+ }
+@@ -82,7 +77,6 @@ PrintToPdfDialog::~PrintToPdfDialog()
+ 
+ void PrintToPdfDialog::onChoosePageLayoutButtonClicked()
+ {
+-#ifndef QT_NO_PRINTER
+     QPrinter printer;
+     printer.setPageLayout(currentPageLayout);
+ 
+@@ -92,7 +86,6 @@ void PrintToPdfDialog::onChoosePageLayoutButtonClicked()
+     currentPageLayout.setPageSize(printer.pageLayout().pageSize());
+     currentPageLayout.setOrientation(printer.pageLayout().orientation());
+     updatePageLayoutLabel();
+-#endif // QT_NO_PRINTER
+ }
+ 
+ void PrintToPdfDialog::onChooseFilePathButtonClicked()
+diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
+index 2cdb0116..6042b9fd 100644
+--- a/src/webenginewidgets/api/qwebenginepage.cpp
++++ b/src/webenginewidgets/api/qwebenginepage.cpp
+@@ -80,11 +80,9 @@
+ #include <QMenu>
+ #include <QMessageBox>
+ #include <QMimeData>
+-#if defined(QT_PRINTSUPPORT_LIB)
+-#ifndef QT_NO_PRINTER
++#ifdef ENABLE_PRINTING
+ #include <QPrinter>
+-#endif //QT_NO_PRINTER
+-#endif //QT_PRINTSUPPORT_LIB
++#endif
+ #include <QStandardPaths>
+ #include <QStyle>
+ #include <QTimer>
+@@ -2051,8 +2049,6 @@ void QWebEnginePage::printToPdf(const QWebEngineCallback<const QByteArray&> &res
+ #endif // if defined(ENABLE_PDF)
+ }
+ 
+-#if defined(QT_PRINTSUPPORT_LIB)
+-#ifndef QT_NO_PRINTER
+ /*!
+     \fn void QWebEnginePage::print(QPrinter *printer, FunctorOrLambda resultCallback)
+     Renders the current content of the page into a temporary PDF document, then prints it using \a printer.
+@@ -2089,8 +2085,6 @@ void QWebEnginePage::print(QPrinter *printer, const QWebEngineCallback<bool> &re
+     d->m_callbacks.invokeDirectly(resultCallback, false);
+ #endif // if defined(ENABLE_PDF)
+ }
+-#endif // if defined(QT_NO_PRINTER)
+-#endif // if defined(QT_PRINTSUPPORT_LIB)
+ 
+ /*!
+     \since 5.7
+diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h
+index c7d5a19e..5619639c 100644
+--- a/src/webenginewidgets/api/qwebenginepage.h
++++ b/src/webenginewidgets/api/qwebenginepage.h
+@@ -55,11 +55,7 @@
+ 
+ QT_BEGIN_NAMESPACE
+ class QMenu;
+-#if defined(QT_PRINTSUPPORT_LIB)
+-#ifndef QT_NO_PRINTER
+ class QPrinter;
+-#endif // QT_NO_PRINTER
+-#endif // QT_PRINTSUPPORT_LIB
+ 
+ class QWebChannel;
+ class QWebEngineContextMenuData;
+@@ -294,15 +290,11 @@ public:
+     void printToPdf(const QWebEngineCallback<const QByteArray&> &resultCallback, const QPageLayout &layout = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF()));
+ #endif
+ 
+-#if defined(QT_PRINTSUPPORT_LIB)
+-#ifndef QT_NO_PRINTER
+ #ifdef Q_QDOC
+     void print(QPrinter *printer, FunctorOrLambda resultCallback);
+ #else
+     void print(QPrinter *printer, const QWebEngineCallback<bool> &resultCallback);
+ #endif // QDOC
+-#endif // QT_NO_PRINTER
+-#endif // QT_PRINTSUPPORT_LIB
+ 
+     const QWebEngineContextMenuData &contextMenuData() const;
+ 
+-- 
+2.13.2
+
diff --git a/package/qt5/qt5webengine/5.9.1/0002-Load-libEGL-and-libGLES2-symbols-implicitly.patch b/package/qt5/qt5webengine/5.9.1/0002-Load-libEGL-and-libGLES2-symbols-implicitly.patch
new file mode 100644
index 0000000..b8ef687
--- /dev/null
+++ b/package/qt5/qt5webengine/5.9.1/0002-Load-libEGL-and-libGLES2-symbols-implicitly.patch
@@ -0,0 +1,89 @@
+From d4c621f6a6b87f2a86069fa393b9f7c4f9e7b9ad Mon Sep 17 00:00:00 2001
+From: Viktor Engelmann <viktor.engelmann@qt.io>
+Date: Fri, 7 Jul 2017 12:56:19 +0200
+Subject: [PATCH] Load libEGL and libGLES2 symbols implicitly
+
+Instead of explicitly loading libraries from hard-coded locations,
+we now just call dlopen(NULL, RTLD_LAZY). This returns a handle to
+the host process'es context, which already contains the symbols of
+both these libraries, because we link against them.
+It was necessary to bypass LoadLibrary, because that expects a non-NULL
+file path, so we couldn't pass NULL through that interface.
+
+Task-number: QTBUG-57761
+Change-Id: I29f037dfe542222b5188a33c7727c81a464a87bb
+Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
+Reviewed-by: Michal Klocek <michal.klocek@qt.io>
+Upstream-Status: Merged
+Signed-off-by: Gaël PORTAY <gael.portay@savoirfairelinux.com>
+---
+ src/core/surface_factory_qt.cpp | 40 ++++++++--------------------------------
+ 1 file changed, 8 insertions(+), 32 deletions(-)
+
+diff --git a/src/core/surface_factory_qt.cpp b/src/core/surface_factory_qt.cpp
+index 36c05ec5..e8be8480 100644
+--- a/src/core/surface_factory_qt.cpp
++++ b/src/core/surface_factory_qt.cpp
+@@ -51,51 +51,27 @@
+ #if defined(USE_OZONE)
+ 
+ #include <EGL/egl.h>
+-
+-#ifndef QT_LIBDIR_EGL
+-#define QT_LIBDIR_EGL "/usr/lib"
+-#endif
+-#ifndef QT_LIBDIR_GLES2
+-#define QT_LIBDIR_GLES2 QT_LIBDIR_EGL
+-#endif
++#include <dlfcn.h>
+ 
+ namespace QtWebEngineCore {
+ 
+-base::NativeLibrary LoadLibrary(const base::FilePath& filename) {
+-    base::NativeLibraryLoadError error;
+-    base::NativeLibrary library = base::LoadNativeLibrary(filename, &error);
+-    if (!library) {
+-        LOG(ERROR) << "Failed to load " << filename.MaybeAsASCII() << ": " << error.ToString();
+-        return NULL;
+-    }
+-    return library;
+-}
+-
+ bool SurfaceFactoryQt::LoadEGLGLES2Bindings()
+ {
+-    base::FilePath libEGLPath = QtWebEngineCore::toFilePath(QT_LIBDIR_EGL);
+-    libEGLPath = libEGLPath.Append("libEGL.so.1");
+-    base::NativeLibrary eglLibrary = LoadLibrary(libEGLPath);
+-    if (!eglLibrary)
+-        return false;
+-
+-    base::FilePath libGLES2Path = QtWebEngineCore::toFilePath(QT_LIBDIR_GLES2);
+-    libGLES2Path = libGLES2Path.Append("libGLESv2.so.2");
+-    base::NativeLibrary gles2Library = LoadLibrary(libGLES2Path);
+-    if (!gles2Library)
++    base::NativeLibrary eglgles2Library = dlopen(NULL, RTLD_LAZY);
++    if (!eglgles2Library) {
++        LOG(ERROR) << "Failed to open EGL/GLES2 context " << dlerror();
+         return false;
++    }
+ 
+-    gl::GLGetProcAddressProc get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglLibrary, "eglGetProcAddress"));
++    gl::GLGetProcAddressProc get_proc_address = reinterpret_cast<gl::GLGetProcAddressProc>(base::GetFunctionPointerFromNativeLibrary(eglgles2Library, "eglGetProcAddress"));
+     if (!get_proc_address) {
+         LOG(ERROR) << "eglGetProcAddress not found.";
+-        base::UnloadNativeLibrary(eglLibrary);
+-        base::UnloadNativeLibrary(gles2Library);
++        base::UnloadNativeLibrary(eglgles2Library);
+         return false;
+     }
+ 
+     gl::SetGLGetProcAddressProc(get_proc_address);
+-    gl::AddGLNativeLibrary(eglLibrary);
+-    gl::AddGLNativeLibrary(gles2Library);
++    gl::AddGLNativeLibrary(eglgles2Library);
+     return true;
+ }
+ 
+-- 
+2.13.2
+
diff --git a/package/qt5/qt5webengine/Config.in b/package/qt5/qt5webengine/Config.in
new file mode 100644
index 0000000..6b68d1b
--- /dev/null
+++ b/package/qt5/qt5webengine/Config.in
@@ -0,0 +1,86 @@
+config BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS
+	bool
+	default y if BR2_aarch64 || BR2_arm || \
+		BR2_i386 || BR2_x86_64 || \
+		BR2_mips || BR2_mips64
+	depends on BR2_PACKAGE_QT5_JSCORE_AVAILABLE # qt5declarative
+	depends on !BR2_BINFMT_FLAT # qt5base-icu
+	depends on BR2_USE_MMU # libglib2, qt5base-dbus
+
+comment "qt5webengine needs udev /dev management and a glibc toolchain w/ gcc >= 4.8, host gcc >= 4.8, threads, wchar"
+	depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS
+	depends on !BR2_PACKAGE_HAS_UDEV || !BR2_TOOLCHAIN_USES_GLIBC || \
+		!BR2_HOST_GCC_AT_LEAST_4_8 || !BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 || \
+		!BR2_TOOLCHAIN_HAS_THREADS || !BR2_USE_WCHAR
+
+comment "qt5webengine needs an OpenGL and EGL-capable backend"
+	depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS
+	depends on !BR2_PACKAGE_QT5_GL_AVAILABLE || !BR2_PACKAGE_HAS_LIBEGL
+
+comment "qt5webengine is not available with Qt 5.6"
+	depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS
+	depends on BR2_PACKAGE_QT5_VERSION_5_6
+
+config BR2_PACKAGE_QT5WEBENGINE
+	bool "qt5webengine"
+	depends on BR2_PACKAGE_QT5WEBENGINE_ARCH_SUPPORTS
+	depends on BR2_TOOLCHAIN_USES_GLIBC # execinfo.h, mallinfo
+	depends on BR2_HOST_GCC_AT_LEAST_4_8 # qt5base-icu
+	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 # qt5base-icu
+	depends on BR2_TOOLCHAIN_HAS_THREADS # libglib2, libvpx, qt5base-dbus
+	depends on BR2_USE_WCHAR # libglib2
+	depends on BR2_PACKAGE_QT5_GL_AVAILABLE # qt5declarative, qt5base-eglfs
+	depends on BR2_PACKAGE_HAS_LIBEGL # qt5base-eglfs
+	depends on BR2_PACKAGE_HAS_UDEV
+	depends on !BR2_PACKAGE_QT5_VERSION_5_6
+	# v8 (a chromium 3rd-party) compiles its internal host-tools with the
+	# same word size as the target. For 32-bits targets, it adds the -m32
+	# flag (for 64-bits, it adds the -m64 flag).
+	# https://github.com/v8/v8/blob/5.6.326.55/gypfiles/toolchain.gypi#L1036-L1037
+	select BR2_HOSTARCH_NEEDS_IA32_COMPILER if !BR2_ARCH_IS_64 # v8/chromium
+	select BR2_PACKAGE_FFMPEG
+	select BR2_PACKAGE_LIBGLIB2
+	select BR2_PACKAGE_LIBVPX
+	select BR2_PACKAGE_OPUS
+	select BR2_PACKAGE_WEBP
+	select BR2_PACKAGE_WEBP_DEMUX
+	select BR2_PACKAGE_QT5BASE_DBUS
+	select BR2_PACKAGE_QT5BASE_EGLFS
+	select BR2_PACKAGE_QT5BASE_FONTCONFIG
+	select BR2_PACKAGE_QT5BASE_ICU
+	select BR2_PACKAGE_QT5BASE_GUI
+	select BR2_PACKAGE_QT5BASE_WIDGETS
+	select BR2_PACKAGE_QT5DECLARATIVE
+	select BR2_PACKAGE_QT5DECLARATIVE_QUICK
+	select BR2_PACKAGE_QT5QUICKCONTROLS
+	select BR2_PACKAGE_QT5QUICKCONTROLS2
+	select BR2_PACKAGE_QT5WEBCHANNEL
+	select BR2_PACKAGE_XLIB_LIBXCOMPOSITE if BR2_PACKAGE_QT5BASE_XCB
+	select BR2_PACKAGE_XLIB_LIBXCURSOR if BR2_PACKAGE_QT5BASE_XCB
+	select BR2_PACKAGE_XLIB_LIBXI if BR2_PACKAGE_QT5BASE_XCB
+	select BR2_PACKAGE_XLIB_LIBXRANDR if BR2_PACKAGE_QT5BASE_XCB
+	select BR2_PACKAGE_XLIB_LIBXSCRNSAVER if BR2_PACKAGE_QT5BASE_XCB
+	select BR2_PACKAGE_XLIB_LIBXTST if BR2_PACKAGE_QT5BASE_XCB
+	help
+	  The Qt WebEngine module provides a web browser engine that
+	  makes it easy to embed content from the World Wide Web into
+	  your Qt application.
+
+	  Qt WebEngine provides C++ classes and QML types for rendering
+	  HTML, XHTML, and SVG documents, styled using Cascading Style
+	  Sheets (CSS) and scripted with JavaScript. HTML documents can
+	  be made fully editable by the user through the use of the
+	  contenteditable attribute on HTML elements.
+
+	  http://doc.qt.io/qt-5/qtwebengine-index.html
+
+if BR2_PACKAGE_QT5WEBENGINE
+
+config BR2_PACKAGE_QT5WEBENGINE_PROPRIETARY_CODECS
+	bool "proprietary codecs"
+	help
+	  Qt WebEngine supports the MPEG-4 Part 14 (MP4) file format,
+	  which includes required proprietary audio and video codecs,
+	  such as H.264 and MPEG layer-3 (MP3).
+
+endif
diff --git a/package/qt5/qt5webengine/chromium.inc b/package/qt5/qt5webengine/chromium.inc
new file mode 100644
index 0000000..da709fd
--- /dev/null
+++ b/package/qt5/qt5webengine/chromium.inc
@@ -0,0 +1,310 @@
+CHROMIUM_LICENSE_FILES = \
+	src/3rdparty/chromium/base/third_party/dmg_fp/LICENSE \
+	src/3rdparty/chromium/base/third_party/dynamic_annotations/LICENSE \
+	src/3rdparty/chromium/base/third_party/icu/LICENSE \
+	src/3rdparty/chromium/base/third_party/libevent/LICENSE \
+	src/3rdparty/chromium/base/third_party/nspr/LICENSE \
+	src/3rdparty/chromium/base/third_party/superfasthash/LICENSE \
+	src/3rdparty/chromium/base/third_party/symbolize/LICENSE \
+	src/3rdparty/chromium/base/third_party/valgrind/LICENSE \
+	src/3rdparty/chromium/base/third_party/xdg_mime/LICENSE \
+	src/3rdparty/chromium/base/third_party/xdg_user_dirs/LICENSE \
+	src/3rdparty/chromium/buildtools/LICENSE \
+	src/3rdparty/chromium/buildtools/third_party/libc++abi/trunk/LICENSE.TXT \
+	src/3rdparty/chromium/buildtools/third_party/libc++/trunk/LICENSE.TXT \
+	src/3rdparty/chromium/chrome/third_party/chromevox/LICENSE \
+	src/3rdparty/chromium/chrome/third_party/chromevox/third_party/closure-library/LICENSE \
+	src/3rdparty/chromium/LICENSE \
+	src/3rdparty/chromium/LICENSE.chromium_os \
+	src/3rdparty/chromium/mojo/public/LICENSE \
+	src/3rdparty/chromium/net/third_party/mozilla_security_manager/LICENSE \
+	src/3rdparty/chromium/net/third_party/nss/LICENSE \
+	src/3rdparty/chromium/ppapi/LICENSE \
+	src/3rdparty/chromium/sdch/open-vcdiff/COPYING \
+	src/3rdparty/chromium/testing/gmock/LICENSE \
+	src/3rdparty/chromium/testing/gmock/scripts/generator/LICENSE \
+	src/3rdparty/chromium/testing/gtest/LICENSE \
+	src/3rdparty/chromium/third_party/accessibility_test_framework/LICENSE \
+	src/3rdparty/chromium/third_party/afl/src/docs/COPYING \
+	src/3rdparty/chromium/third_party/angle/LICENSE \
+	src/3rdparty/chromium/third_party/angle/src/third_party/compiler/LICENSE \
+	src/3rdparty/chromium/third_party/angle/src/third_party/libXNVCtrl/LICENSE \
+	src/3rdparty/chromium/third_party/angle/src/third_party/murmurhash/LICENSE \
+	src/3rdparty/chromium/third_party/apache-portable-runtime/LICENSE \
+	src/3rdparty/chromium/third_party/apache_velocity/LICENSE \
+	src/3rdparty/chromium/third_party/apple_apsl/LICENSE \
+	src/3rdparty/chromium/third_party/bintrees/LICENSE.txt \
+	src/3rdparty/chromium/third_party/blanketjs/LICENSE \
+	src/3rdparty/chromium/third_party/blimp_fonts/LICENSE \
+	src/3rdparty/chromium/third_party/blimp_fonts/LICENSE.Apache \
+	src/3rdparty/chromium/third_party/blimp_fonts/LICENSE.OFL \
+	src/3rdparty/chromium/third_party/boringssl/src/LICENSE \
+	src/3rdparty/chromium/third_party/boringssl/src/third_party/android-cmake/LICENSE \
+	src/3rdparty/chromium/third_party/bouncycastle/LICENSE \
+	src/3rdparty/chromium/third_party/brotli/LICENSE \
+	src/3rdparty/chromium/third_party/bspatch/LICENSE \
+	src/3rdparty/chromium/third_party/byte_buddy/LICENSE \
+	src/3rdparty/chromium/third_party/ced/LICENSE \
+	src/3rdparty/chromium/third_party/ced/src/LICENSE \
+	src/3rdparty/chromium/third_party/chaijs/LICENSE \
+	src/3rdparty/chromium/third_party/checkstyle/LICENSE \
+	src/3rdparty/chromium/third_party/checkstyle/LICENSE.apache20 \
+	src/3rdparty/chromium/third_party/cld_3/LICENSE \
+	src/3rdparty/chromium/third_party/cld_3/src/LICENSE \
+	src/3rdparty/chromium/third_party/cld/LICENSE \
+	src/3rdparty/chromium/third_party/closure_compiler/compiler/COPYING \
+	src/3rdparty/chromium/third_party/closure_compiler/LICENSE \
+	src/3rdparty/chromium/third_party/closure_linter/LICENSE \
+	src/3rdparty/chromium/third_party/crashpad/crashpad/LICENSE \
+	src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/apple_cctools/cctools/APPLE_LICENSE \
+	src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/apple_cf/APPLE_LICENSE \
+	src/3rdparty/chromium/third_party/crashpad/crashpad/third_party/getopt/LICENSE \
+	src/3rdparty/chromium/third_party/cros_system_api/LICENSE \
+	src/3rdparty/chromium/third_party/cros_system_api/MODULE_LICENSE_BSD \
+	src/3rdparty/chromium/third_party/custom_tabs_client/LICENSE \
+	src/3rdparty/chromium/third_party/d3/src/LICENSE \
+	src/3rdparty/chromium/third_party/decklink/LICENSE \
+	src/3rdparty/chromium/third_party/devscripts/COPYING \
+	src/3rdparty/chromium/third_party/dom_distiller_js/LICENSE \
+	src/3rdparty/chromium/third_party/dpkg-dev/LICENSE \
+	src/3rdparty/chromium/third_party/drmemory/LICENSE \
+	src/3rdparty/chromium/third_party/errorprone/LICENSE \
+	src/3rdparty/chromium/third_party/espresso/LICENSE \
+	src/3rdparty/chromium/third_party/expat/files/COPYING \
+	src/3rdparty/chromium/third_party/ffmpeg/chromium/scripts/license_texts/full_lgpl.txt \
+	src/3rdparty/chromium/third_party/ffmpeg/COPYING.GPLv2 \
+	src/3rdparty/chromium/third_party/ffmpeg/COPYING.GPLv3 \
+	src/3rdparty/chromium/third_party/ffmpeg/COPYING.LGPLv2.1 \
+	src/3rdparty/chromium/third_party/ffmpeg/COPYING.LGPLv3 \
+	src/3rdparty/chromium/third_party/ffmpeg/LICENSE.md \
+	src/3rdparty/chromium/third_party/fips181/COPYING \
+	src/3rdparty/chromium/third_party/flac/COPYING.FDL \
+	src/3rdparty/chromium/third_party/flac/COPYING.GPL \
+	src/3rdparty/chromium/third_party/flac/COPYING.LGPL \
+	src/3rdparty/chromium/third_party/flac/COPYING.Xiph \
+	src/3rdparty/chromium/third_party/flatbuffers/LICENSE \
+	src/3rdparty/chromium/third_party/flatbuffers/src/LICENSE.txt \
+	src/3rdparty/chromium/third_party/flot/LICENSE.txt \
+	src/3rdparty/chromium/third_party/fontconfig/LICENSE \
+	src/3rdparty/chromium/third_party/fontconfig/src/COPYING \
+	src/3rdparty/chromium/third_party/freetype2/src/docs/GPLv2.TXT \
+	src/3rdparty/chromium/third_party/freetype2/src/docs/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/gardiner_mod/LICENSE \
+	src/3rdparty/chromium/third_party/gif_player/LICENSE \
+	src/3rdparty/chromium/third_party/glslang/LICENSE \
+	src/3rdparty/chromium/third_party/grpc/LICENSE \
+	src/3rdparty/chromium/third_party/grpc/src/node/health_check/LICENSE \
+	src/3rdparty/chromium/third_party/grpc/src/php/ext/grpc/LICENSE \
+	src/3rdparty/chromium/third_party/grpc/third_party/nanopb/LICENSE.txt \
+	src/3rdparty/chromium/third_party/grpc/third_party/rake-compiler-dock/LICENSE.txt \
+	src/3rdparty/chromium/third_party/guava/LICENSE \
+	src/3rdparty/chromium/third_party/gvr-android-sdk/LICENSE \
+	src/3rdparty/chromium/third_party/haha/LICENSE \
+	src/3rdparty/chromium/third_party/hamcrest/LICENSE \
+	src/3rdparty/chromium/third_party/harfbuzz-ng/COPYING \
+	src/3rdparty/chromium/third_party/hunspell/COPYING \
+	src/3rdparty/chromium/third_party/hunspell/COPYING.LGPL \
+	src/3rdparty/chromium/third_party/hunspell/COPYING.MPL \
+	src/3rdparty/chromium/third_party/hunspell/src/hunspell/license.hunspell \
+	src/3rdparty/chromium/third_party/hunspell/src/hunspell/license.myspell \
+	src/3rdparty/chromium/third_party/hwcplus/LICENSE \
+	src/3rdparty/chromium/third_party/iaccessible2/LICENSE \
+	src/3rdparty/chromium/third_party/iccjpeg/LICENSE \
+	src/3rdparty/chromium/third_party/icu4j/LICENSE \
+	src/3rdparty/chromium/third_party/icu/LICENSE \
+	src/3rdparty/chromium/third_party/icu/license.html \
+	src/3rdparty/chromium/third_party/icu/scripts/LICENSE \
+	src/3rdparty/chromium/third_party/ijar/LICENSE \
+	src/3rdparty/chromium/third_party/inspector_protocol/LICENSE \
+	src/3rdparty/chromium/third_party/intellij/LICENSE \
+	src/3rdparty/chromium/third_party/isimpledom/LICENSE \
+	src/3rdparty/chromium/third_party/javax_inject/LICENSE \
+	src/3rdparty/chromium/third_party/jinja2/LICENSE \
+	src/3rdparty/chromium/third_party/jmake/LICENSE \
+	src/3rdparty/chromium/third_party/jsoncpp/LICENSE \
+	src/3rdparty/chromium/third_party/jstemplate/COPYING \
+	src/3rdparty/chromium/third_party/khronos/LICENSE \
+	src/3rdparty/chromium/third_party/leakcanary/LICENSE \
+	src/3rdparty/chromium/third_party/leveldatabase/src/LICENSE \
+	src/3rdparty/chromium/third_party/libaddressinput/LICENSE \
+	src/3rdparty/chromium/third_party/libaddressinput/src/cpp/LICENSE.chromium \
+	src/3rdparty/chromium/third_party/libaddressinput/src/LICENSE \
+	src/3rdparty/chromium/third_party/libFuzzer/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/libjpeg/LICENSE \
+	src/3rdparty/chromium/third_party/libjpeg_turbo/LICENSE.md \
+	src/3rdparty/chromium/third_party/libpng/LICENSE \
+	src/3rdparty/chromium/third_party/libsecret/LICENSE \
+	src/3rdparty/chromium/third_party/libsrtp/LICENSE \
+	src/3rdparty/chromium/third_party/libsync/LICENSE \
+	src/3rdparty/chromium/third_party/libudev/LICENSE \
+	src/3rdparty/chromium/third_party/libusb/src/COPYING \
+	src/3rdparty/chromium/third_party/libva/COPYING \
+	src/3rdparty/chromium/third_party/libvpx/source/libvpx/LICENSE \
+	src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/googletest/src/LICENSE \
+	src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/libwebm/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/libvpx/source/libvpx/third_party/x86inc/LICENSE \
+	src/3rdparty/chromium/third_party/libwebm/source/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/libwebp/LICENSE \
+	src/3rdparty/chromium/third_party/libxml/src/COPYING \
+	src/3rdparty/chromium/third_party/libXNVCtrl/LICENSE \
+	src/3rdparty/chromium/third_party/libxslt/linux/COPYING \
+	src/3rdparty/chromium/third_party/libyuv/LICENSE \
+	src/3rdparty/chromium/third_party/libyuv/LICENSE_THIRD_PARTY \
+	src/3rdparty/chromium/third_party/libyuv/third_party/gflags/LICENSE \
+	src/3rdparty/chromium/third_party/lzma_sdk/LICENSE \
+	src/3rdparty/chromium/third_party/mach_override/LICENSE \
+	src/3rdparty/chromium/third_party/markupsafe/LICENSE \
+	src/3rdparty/chromium/third_party/mesa/LICENSE \
+	src/3rdparty/chromium/third_party/mesa/src/docs/COPYING \
+	src/3rdparty/chromium/third_party/mesa/src/docs/license.html \
+	src/3rdparty/chromium/third_party/mesa/src/src/gallium/drivers/radeon/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/minigbm/LICENSE \
+	src/3rdparty/chromium/third_party/mocha/LICENSE \
+	src/3rdparty/chromium/third_party/mockito/LICENSE \
+	src/3rdparty/chromium/third_party/modp_b64/LICENSE \
+	src/3rdparty/chromium/third_party/molokocacao/LICENSE \
+	src/3rdparty/chromium/third_party/motemplate/LICENSE \
+	src/3rdparty/chromium/third_party/mozilla/LICENSE \
+	src/3rdparty/chromium/third_party/mt19937ar/LICENSE \
+	src/3rdparty/chromium/third_party/netty4/LICENSE \
+	src/3rdparty/chromium/third_party/netty-tcnative/LICENSE \
+	src/3rdparty/chromium/third_party/objenesis/LICENSE \
+	src/3rdparty/chromium/third_party/ocmock/License.txt \
+	src/3rdparty/chromium/third_party/openh264/src/LICENSE \
+	src/3rdparty/chromium/third_party/openmax_dl/LICENSE \
+	src/3rdparty/chromium/third_party/opus/src/COPYING \
+	src/3rdparty/chromium/third_party/ots/LICENSE \
+	src/3rdparty/chromium/third_party/ow2_asm/LICENSE \
+	src/3rdparty/chromium/third_party/pdfium/LICENSE \
+	src/3rdparty/chromium/third_party/pdfium/third_party/bigint/LICENSE \
+	src/3rdparty/chromium/third_party/pdfium/third_party/pymock/LICENSE.txt \
+	src/3rdparty/chromium/third_party/pexpect/LICENSE \
+	src/3rdparty/chromium/third_party/ply/LICENSE \
+	src/3rdparty/chromium/third_party/polymer/v1_0/components-chromium/polymer/LICENSE.txt \
+	src/3rdparty/chromium/third_party/proguard/LICENSE \
+	src/3rdparty/chromium/third_party/protobuf/LICENSE \
+	src/3rdparty/chromium/third_party/pycoverage/LICENSE \
+	src/3rdparty/chromium/third_party/pyelftools/elftools/construct/LICENSE \
+	src/3rdparty/chromium/third_party/pyelftools/LICENSE \
+	src/3rdparty/chromium/third_party/pyftpdlib/src/LICENSE \
+	src/3rdparty/chromium/third_party/pymock/LICENSE.txt \
+	src/3rdparty/chromium/third_party/python_gflags/COPYING \
+	src/3rdparty/chromium/third_party/Python-Markdown/LICENSE.md \
+	src/3rdparty/chromium/third_party/py_trace_event/src/LICENSE \
+	src/3rdparty/chromium/third_party/pywebsocket/src/LICENSE \
+	src/3rdparty/chromium/third_party/qcms/src/COPYING \
+	src/3rdparty/chromium/third_party/qunit/LICENSE \
+	src/3rdparty/chromium/third_party/re2/LICENSE \
+	src/3rdparty/chromium/third_party/re2/src/LICENSE \
+	src/3rdparty/chromium/third_party/requests/LICENSE \
+	src/3rdparty/chromium/third_party/robolectric/LICENSE \
+	src/3rdparty/chromium/third_party/robolectric/licenses/extreme.indiana.edu.license.txt \
+	src/3rdparty/chromium/third_party/robolectric/licenses/javolution.license.txt \
+	src/3rdparty/chromium/third_party/robolectric/licenses/pivotal.labs.license.txt \
+	src/3rdparty/chromium/third_party/sfntly/COPYING.txt \
+	src/3rdparty/chromium/third_party/sfntly/src/cpp/COPYING.txt \
+	src/3rdparty/chromium/third_party/sfntly/src/java/COPYING \
+	src/3rdparty/chromium/third_party/shaderc/LICENSE \
+	src/3rdparty/chromium/third_party/shaderc/src/LICENSE \
+	src/3rdparty/chromium/third_party/shaderc/src/third_party/LICENSE.glslang \
+	src/3rdparty/chromium/third_party/shaderc/src/third_party/LICENSE.spirv-tools \
+	src/3rdparty/chromium/third_party/simplejson/LICENSE.txt \
+	src/3rdparty/chromium/third_party/sinonjs/LICENSE \
+	src/3rdparty/chromium/third_party/skia/LICENSE \
+	src/3rdparty/chromium/third_party/skia/platform_tools/android/third_party/ashmem/LICENSE \
+	src/3rdparty/chromium/third_party/skia/third_party/etc1/LICENSE \
+	src/3rdparty/chromium/third_party/skia/third_party/gif/LICENSE \
+	src/3rdparty/chromium/third_party/skia/third_party/libpng/LICENSE \
+	src/3rdparty/chromium/third_party/smhasher/LICENSE \
+	src/3rdparty/chromium/third_party/snappy/src/COPYING \
+	src/3rdparty/chromium/third_party/SPIRV-Tools/LICENSE \
+	src/3rdparty/chromium/third_party/SPIRV-Tools/src/LICENSE \
+	src/3rdparty/chromium/third_party/sqlite4java/LICENSE \
+	src/3rdparty/chromium/third_party/sqlite/LICENSE \
+	src/3rdparty/chromium/third_party/sqlite/sqlite-src-3100200/autoconf/tea/license.terms \
+	src/3rdparty/chromium/third_party/sqlite/src/autoconf/tea/license.terms \
+	src/3rdparty/chromium/third_party/sudden_motion_sensor/LICENSE \
+	src/3rdparty/chromium/third_party/swiftshader/LICENSE.txt \
+	src/3rdparty/chromium/third_party/swiftshader/third_party/LLVM/autoconf/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/swiftshader/third_party/LLVM/include/llvm/Support/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/swiftshader/third_party/LLVM/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/swiftshader/third_party/LLVM/projects/sample/autoconf/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/swiftshader/third_party/llvm-subzero/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/swiftshader/third_party/LLVM/utils/unittest/googletest/LICENSE.TXT \
+	src/3rdparty/chromium/third_party/swiftshader/third_party/PowerVR_SDK/License.txt \
+	src/3rdparty/chromium/third_party/tcmalloc/LICENSE \
+	src/3rdparty/chromium/third_party/tcmalloc/vendor/COPYING \
+	src/3rdparty/chromium/third_party/tlslite/LICENSE \
+	src/3rdparty/chromium/third_party/typ/LICENSE \
+	src/3rdparty/chromium/third_party/ub-uiautomator/LICENSE \
+	src/3rdparty/chromium/third_party/usb_ids/LICENSE \
+	src/3rdparty/chromium/third_party/usrsctp/LICENSE \
+	src/3rdparty/chromium/third_party/usrsctp/usrsctplib/LICENSE.md \
+	src/3rdparty/chromium/third_party/v4l2capture/LICENSE \
+	src/3rdparty/chromium/third_party/v4l-utils/COPYING.libv4l \
+	src/3rdparty/chromium/third_party/visualmetrics/src/LICENSE \
+	src/3rdparty/chromium/third_party/vulkan/LICENSE \
+	src/3rdparty/chromium/third_party/wayland/LICENSE \
+	src/3rdparty/chromium/third_party/wayland-protocols/LICENSE \
+	src/3rdparty/chromium/third_party/wayland-protocols/src/COPYING \
+	src/3rdparty/chromium/third_party/wayland/src/COPYING \
+	src/3rdparty/chromium/third_party/wds/LICENSE \
+	src/3rdparty/chromium/third_party/wds/src/COPYING \
+	src/3rdparty/chromium/third_party/web-animations-js/LICENSE \
+	src/3rdparty/chromium/third_party/web-animations-js/sources/COPYING \
+	src/3rdparty/chromium/third_party/webdriver/COPYING \
+	src/3rdparty/chromium/third_party/webdriver/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/LICENSE_FOR_ABOUT_CREDITS \
+	src/3rdparty/chromium/third_party/WebKit/Source/core/LICENSE-APPLE \
+	src/3rdparty/chromium/third_party/WebKit/Source/core/LICENSE-LGPL-2 \
+	src/3rdparty/chromium/third_party/WebKit/Source/core/LICENSE-LGPL-2.1 \
+	src/3rdparty/chromium/third_party/WebKit/Source/devtools/front_end/audits2_worker/lighthouse/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/Source/devtools/front_end/cm/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/Source/devtools/front_end/cm/LICENSE_python \
+	src/3rdparty/chromium/third_party/WebKit/Source/devtools/front_end/cm_modes/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/Source/devtools/front_end/formatter_worker/acorn/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/Source/devtools/front_end/gonzales/MIT-LICENSE.txt \
+	src/3rdparty/chromium/third_party/WebKit/Source/devtools/front_end/terminal/xterm.js/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/Source/devtools/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/Source/devtools/scripts/closure/COPYING \
+	src/3rdparty/chromium/third_party/WebKit/Source/wtf/dtoa/COPYING \
+	src/3rdparty/chromium/third_party/WebKit/Source/wtf/dtoa/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/mod_pywebsocket/COPYING \
+	src/3rdparty/chromium/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/six/LICENSE \
+	src/3rdparty/chromium/third_party/WebKit/Tools/Scripts/webkitpy/thirdparty/wpt/wpt/tools/wptserve/LICENSE \
+	src/3rdparty/chromium/third_party/webpagereplay/COPYING \
+	src/3rdparty/chromium/third_party/webpagereplay/third_party/dns/LICENSE \
+	src/3rdparty/chromium/third_party/webpagereplay/third_party/ipaddr/COPYING \
+	src/3rdparty/chromium/third_party/webpagereplay/third_party/ipfw_win32/LICENSE \
+	src/3rdparty/chromium/third_party/webpagereplay/third_party/jsmin/LICENSE.txt \
+	src/3rdparty/chromium/third_party/webrtc/examples/androidapp/third_party/autobanh/LICENSE \
+	src/3rdparty/chromium/third_party/webrtc/examples/androidapp/third_party/autobanh/LICENSE.md \
+	src/3rdparty/chromium/third_party/webrtc/examples/objc/AppRTCMobile/third_party/SocketRocket/LICENSE \
+	src/3rdparty/chromium/third_party/webrtc/LICENSE \
+	src/3rdparty/chromium/third_party/webrtc/LICENSE_THIRD_PARTY \
+	src/3rdparty/chromium/third_party/webtreemap/src/COPYING \
+	src/3rdparty/chromium/third_party/woff2/LICENSE \
+	src/3rdparty/chromium/third_party/x86inc/LICENSE \
+	src/3rdparty/chromium/third_party/xdg-utils/LICENSE \
+	src/3rdparty/chromium/third_party/yasm/source/patched-yasm/COPYING \
+	src/3rdparty/chromium/third_party/yasm/source/patched-yasm/GNU_GPL-2.0 \
+	src/3rdparty/chromium/third_party/yasm/source/patched-yasm/GNU_LGPL-2.0 \
+	src/3rdparty/chromium/third_party/zlib/LICENSE \
+	src/3rdparty/chromium/tools/gn/out/Release/obj/third_party/widevine/cdm/widevine_test_license_server.ninja \
+	src/3rdparty/chromium/tools/gyp/LICENSE \
+	src/3rdparty/chromium/tools/origin_trials/third_party/ed25519/LICENSE \
+	src/3rdparty/chromium/tools/page_cycler/acid3/LICENSE \
+	src/3rdparty/chromium/tools/symsrc/COPYING-pefile \
+	src/3rdparty/chromium/tools/win/ChromeDebug/ChromeDebug/LICENSE \
+	src/3rdparty/chromium/url/third_party/mozilla/LICENSE.txt \
+	src/3rdparty/chromium/v8/LICENSE \
+	src/3rdparty/chromium/v8/LICENSE.fdlibm \
+	src/3rdparty/chromium/v8/LICENSE.strongtalk \
+	src/3rdparty/chromium/v8/LICENSE.v8 \
+	src/3rdparty/chromium/v8/LICENSE.valgrind \
+	src/3rdparty/chromium/v8/src/third_party/valgrind/LICENSE \
+	src/3rdparty/chromium/v8/src/third_party/vtune/LICENSE \
+	src/3rdparty/chromium/v8/third_party/inspector_protocol/LICENSE \
+
diff --git a/package/qt5/qt5webengine/qt5webengine.hash b/package/qt5/qt5webengine/qt5webengine.hash
new file mode 100644
index 0000000..d45500c
--- /dev/null
+++ b/package/qt5/qt5webengine/qt5webengine.hash
@@ -0,0 +1,2 @@
+# Hash from: http://download.qt.io/official_releases/qt/5.9/5.9.1/submodules/qtwebengine-opensource-src-5.9.1.tar.xz.mirrorlist
+sha256 f6a37eeb9188474a16d29ede498fce959396ab80329a0a83eaeb925251686401  qtwebengine-opensource-src-5.9.1.tar.xz
diff --git a/package/qt5/qt5webengine/qt5webengine.mk b/package/qt5/qt5webengine/qt5webengine.mk
new file mode 100644
index 0000000..96dd401
--- /dev/null
+++ b/package/qt5/qt5webengine/qt5webengine.mk
@@ -0,0 +1,80 @@
+################################################################################
+#
+# qt5webengine
+#
+################################################################################
+
+QT5WEBENGINE_VERSION = $(QT5_VERSION)
+QT5WEBENGINE_SITE = $(QT5_SITE)
+QT5WEBENGINE_SOURCE = qtwebengine-opensource-src-$(QT5WEBENGINE_VERSION).tar.xz
+QT5WEBENGINE_DEPENDENCIES = ffmpeg libglib2 libvpx opus webp qt5base \
+	qt5declarative qt5webchannel host-bison host-flex host-gperf \
+	host-pkgconf host-python
+QT5WEBENGINE_INSTALL_STAGING = YES
+
+include package/qt5/qt5webengine/chromium.inc
+QT5WEBENGINE_LICENSE = GPL-2.0 or LGPL-3.0 or GPL-3.0 or GPL-3.0 with exception
+QT5WEBENGINE_LICENSE_FILES = LICENSE.GPL2 LICENSE.GPL3 LICENSE.GPL3-EXCEPT \
+	LICENSE.GPLv3 LICENSE.LGPL3 $(CHROMIUM_LICENSE_FILES)
+
+ifeq ($(BR2_PACKAGE_QT5BASE_XCB),y)
+QT5WEBENGINE_DEPENDENCIES += xlib_libXScrnSaver xlib_libXcomposite \
+	xlib_libXcursor xlib_libXi xlib_libXrandr xlib_libXtst
+endif
+
+QT5WEBENGINE_QMAKEFLAGS += WEBENGINE_CONFIG+=use_system_ffmpeg
+
+ifeq ($(BR2_PACKAGE_QT5WEBENGINE_PROPRIETARY_CODECS),y)
+QT5WEBENGINE_QMAKEFLAGS += WEBENGINE_CONFIG+=use_proprietary_codecs
+endif
+
+# QtWebengine's build system uses python, but only supports python2. We work
+# around this by forcing python2 early in the PATH, via a python->python2
+# symlink.
+QT5WEBENGINE_ENV = PATH=$(@D)/host-bin:$(BR_PATH)
+define QT5WEBENGINE_PYTHON2_SYMLINK
+	mkdir -p $(@D)/host-bin
+	ln -sf $(HOST_DIR)/bin/python2 $(@D)/host-bin/python
+endef
+QT5WEBENGINE_PRE_CONFIGURE_HOOKS += QT5WEBENGINE_PYTHON2_SYMLINK
+
+define QT5WEBENGINE_CONFIGURE_CMDS
+	(cd $(@D); $(TARGET_MAKE_ENV) $(QT5WEBENGINE_ENV) $(HOST_DIR)/usr/bin/qmake $(QT5WEBENGINE_QMAKEFLAGS))
+endef
+
+define QT5WEBENGINE_BUILD_CMDS
+	$(TARGET_MAKE_ENV) $(QT5WEBENGINE_ENV) $(MAKE) -C $(@D)
+endef
+
+define QT5WEBENGINE_INSTALL_STAGING_CMDS
+	$(TARGET_MAKE_ENV) $(QT5WEBENGINE_ENV) $(MAKE) -C $(@D) install
+	$(QT5_LA_PRL_FILES_FIXUP)
+endef
+
+define QT5WEBENGINE_INSTALL_TARGET_QMLS
+	cp -dpfr $(STAGING_DIR)/usr/qml/QtWebEngine $(TARGET_DIR)/usr/qml/
+endef
+
+ifeq ($(BR2_PACKAGE_QT5BASE_EXAMPLES),y)
+define QT5WEBENGINE_INSTALL_TARGET_EXAMPLES
+	cp -dpfr $(STAGING_DIR)/usr/lib/qt/examples/webengine* $(TARGET_DIR)/usr/lib/qt/examples/
+endef
+endif
+
+ifneq ($(BR2_STATIC_LIBS),y)
+define QT5WEBENGINE_INSTALL_TARGET_LIBS
+	cp -dpf $(STAGING_DIR)/usr/lib/libQt5WebEngine*.so.* $(TARGET_DIR)/usr/lib
+	cp -dpf $(STAGING_DIR)/usr/libexec/QtWebEngineProcess $(TARGET_DIR)/usr/libexec/
+	cp -dpfr $(STAGING_DIR)/usr/resources/ $(TARGET_DIR)/usr/
+	mkdir -p $(TARGET_DIR)/usr/translations/qtwebengine_locales/
+	cp -dpfr $(STAGING_DIR)/usr/translations/qtwebengine_locales $(TARGET_DIR)/usr/translations/qtwebengine_locales/
+endef
+endif
+
+define QT5WEBENGINE_INSTALL_TARGET_CMDS
+	$(QT5WEBENGINE_INSTALL_TARGET_LIBS)
+	$(QT5WEBENGINE_INSTALL_TARGET_QMLS)
+	$(QT5WEBENGINE_INSTALL_TARGET_EXAMPLES)
+endef
+
+$(eval $(generic-package))
-- 
2.7.4

