commit 9b7e0788ecc59dd99bdbcc65afab090bb6b1c38c
Author: Rex Dieter <rdieter(a)gmail.com>
Date: Mon Mar 30 10:23:20 2020 -0500
5.14.1
sync changes/patches from fedora
.gitignore | 1 +
qt5-qtwebengine-freeworld.spec | 41 +-
qtwebengine-5.14-1-QT_DEPRECATED_VERSION.patch | 17 +
...d-clock_nanosleep-in-Linux-sandbox-manual.patch | 129 -----
...ne-everywhere-5.13.2-fix-chromium-headers.patch | 539 ---------------------
...rywhere-5.13.2-missing-semicolon-in-blink.patch | 13 -
qtwebengine-everywhere-5.14.1-gcc10.patch | 35 ++
qtwebengine-everywhere-src-5.10.0-linux-pri.patch | 6 +-
...ne-opensource-src-5.12.4-fix-extractcflag.patch | 6 +-
qtwebengine-opensource-src-5.9.0-no-neon.patch | 6 +-
sources | 2 +-
11 files changed, 87 insertions(+), 708 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 0ae7a17..2a6e8e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/qtwebengine-everywhere-src-5.12.5.tar.xz
/qtwebengine-everywhere-src-5.12.6.tar.xz
/qtwebengine-everywhere-src-5.13.2.tar.xz
+/qtwebengine-everywhere-src-5.14.1.tar.xz
diff --git a/qt5-qtwebengine-freeworld.spec b/qt5-qtwebengine-freeworld.spec
index 460e68c..3f0b2bc 100644
--- a/qt5-qtwebengine-freeworld.spec
+++ b/qt5-qtwebengine-freeworld.spec
@@ -19,6 +19,11 @@
%global use_system_ffmpeg 1
%endif
+%if 0%{?fedora} > 31
+# need libicu >= 64, only currently available on f32+
+%global use_system_libicu 1
+%endif
+
# NEON support on ARM (detected at runtime) - disable this if you are hitting
# FTBFS due to e.g. GCC bug
https://bugzilla.redhat.com/show_bug.cgi?id=1282495
#global arm_neon 1
@@ -41,8 +46,8 @@
Summary: Qt5 - QtWebEngine components (freeworld version)
Name: qt5-qtwebengine-freeworld
-Version: 5.13.2
-Release: 3%{?dist}
+Version: 5.14.1
+Release: 1%{?dist}
%global major_minor %(echo %{version} | cut -d. -f-2)
%global major %(echo %{version} | cut -d. -f1)
@@ -72,25 +77,20 @@ Patch2: qtwebengine-opensource-src-5.12.4-fix-extractcflag.patch
Patch3: qtwebengine-opensource-src-5.9.0-no-neon.patch
# workaround FTBFS against kernel-headers-5.2.0+
Patch4: qtwebengine-SIOCGSTAMP.patch
+# fix build when using qt < 5.14
+Patch5: qtwebengine-5.14-1-QT_DEPRECATED_VERSION.patch
# remove Android dependencies from openmax_dl ARM NEON detection (detect.c)
Patch10: qtwebengine-opensource-src-5.9.0-openmax-dl-neon.patch
# Force verbose output from the GN bootstrap process
Patch21: qtwebengine-everywhere-src-5.12.0-gn-bootstrap-verbose.patch
# Fix/workaround FTBFS on aarch64 with newer glibc
Patch24: qtwebengine-everywhere-src-5.11.3-aarch64-new-stat.patch
-# Fix missing semicolon in Blink
-Patch25: qtwebengine-everywhere-5.13.2-missing-semicolon-in-blink.patch
# Use Python2
Patch26: qtwebengine-everywhere-5.13.2-use-python2.patch
# Fix missing include in chromium
Patch27: qtwebengine-everywhere-5.13.2-fix-chromium-headers.patch
-# Fix for clock_nanosleep
-#
https://bugreports.qt.io/browse/QTBUG-81313
-#
https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/292352
-# Qt:
https://codereview.qt-project.org/gitweb?p=qt/qtwebengine-chromium.git;a=...
-# Chromium:
https://chromium.googlesource.com/chromium/src/+/54407b422a9cbf775a68c1d5...
-# Didn't apply cleanly, manually ported
-Patch28:
qtwebengine-everywhere-5.13.2-allow-restricted-clock_nanosleep-in-Linux-sandbox-manual.patch
+# Fix gcc10 FTBFS
+Patch29: qtwebengine-everywhere-5.14.1-gcc10.patch
## Upstream patches:
# qtwebengine-chromium
@@ -124,7 +124,9 @@ BuildRequires: libstdc++-static
BuildRequires: git-core
BuildRequires: gperf
BuildRequires: krb5-devel
-BuildRequires: libicu-devel
+%if 0%{?use_system_libicu}
+BuildRequires: libicu-devel >= 64
+%endif
BuildRequires: libjpeg-devel
BuildRequires: re2-devel
BuildRequires: snappy-devel
@@ -336,25 +338,25 @@ pushd src/3rdparty/chromium
popd
%patch0 -p1 -b .linux-pri
+%if 0%{?use_system_libicu}
%patch1 -p1 -b .no-icudtl-dat
+%endif
%patch2 -p1 -b .fix-extractcflag
%if !0%{?arm_neon}
%patch3 -p1 -b .no-neon
%endif
%patch4 -p1 -b .SIOCGSTAMP
+%patch5 -p1 -b .QT_DEPRECATED_VERSION
## upstream patches
-%patch10 -p1 -b .openmax-dl-neon
+#patch10 -p1 -b .openmax-dl-neon
## NEEDSWORK
#patch21 -p1 -b .gn-bootstrap-verbose
%patch24 -p1 -b .aarch64-new-stat
-%patch25 -p1 -b .missing-semicolon-in-blink
%patch26 -p1 -b .use-python2
%patch27 -p1 -b .fix-chromium
-%patch28 -p0 -b .allow-clock_nanosleep
-
# the xkbcommon config/feature was renamed in 5.12, so need to adjust QT_CONFIG
references
# when building on older Qt releases
%if "%{_qt5_version}" < "5.12.0"
@@ -415,7 +417,7 @@ export NINJA_PATH=%{__ninja}
CONFIG+="link_pulseaudio" \
%{?system_ffmpeg_flag:QMAKE_EXTRA_ARGS+="%{?system_ffmpeg_flag}"} \
QMAKE_EXTRA_ARGS+="-proprietary-codecs" \
- QMAKE_EXTRA_ARGS+="-system-webengine-icu" \
+ %{?use_system_libicu:QMAKE_EXTRA_ARGS+="-system-webengine-icu"} \
QMAKE_EXTRA_ARGS+="-webengine-kerberos" \
.
@@ -438,6 +440,7 @@ mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d
echo "%{_libdir}/%{name}" \
%{buildroot}%{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf
+
%ldconfig_scriptlets
%files
@@ -445,7 +448,11 @@ echo "%{_libdir}/%{name}" \
%{_libdir}/%{name}/
%config(noreplace) %{_sysconfdir}/ld.so.conf.d/%{name}-%{_arch}.conf
+
%changelog
+* Mon Mar 30 2020 Rex Dieter <rdieter(a)fedoraproject.org> - 5.14.1-1
+- 5.14.1
+
* Wed Mar 25 2020 Rex Dieter <rdieter(a)fedoraproject.org> - 5.13.2-3
- sync patches from fedora
diff --git a/qtwebengine-5.14-1-QT_DEPRECATED_VERSION.patch
b/qtwebengine-5.14-1-QT_DEPRECATED_VERSION.patch
new file mode 100644
index 0000000..69b1bbf
--- /dev/null
+++ b/qtwebengine-5.14-1-QT_DEPRECATED_VERSION.patch
@@ -0,0 +1,17 @@
+diff -up
qtwebengine-everywhere-src-5.14.1.orig/src/webenginewidgets/api/qwebenginedownloaditem.h.QT_DEPRECATED
qtwebengine-everywhere-src-5.14.1.orig/src/webenginewidgets/api/qwebenginedownloaditem.h
+---
qtwebengine-everywhere-src-5.14.1.orig/src/webenginewidgets/api/qwebenginedownloaditem.h.QT_DEPRECATED 2020-01-20
05:17:16.000000000 -0600
++++
qtwebengine-everywhere-src-5.14.1.orig/src/webenginewidgets/api/qwebenginedownloaditem.h 2020-03-24
15:42:03.558394148 -0500
+@@ -119,9 +119,13 @@ public:
+ QUrl url() const;
+ QString mimeType() const;
+ #if QT_DEPRECATED_SINCE(5, 14)
++#if QT_VERSION >= QT_VERSION_CHECK(5,14,0)
+ QT_DEPRECATED_VERSION_X(5, 14, "Use downloadDirectory() and downloadFileName()
instead")
++#endif
+ QString path() const;
++#if QT_VERSION >= QT_VERSION_CHECK(5,14,0)
+ QT_DEPRECATED_VERSION_X(5, 14, "Use setDownloadDirectory() and
setDownloadFileName() instead")
++#endif
+ void setPath(QString path);
+ #endif
+ bool isFinished() const;
diff --git a/qtwebengine-everywhere-5.13.2-fix-chromium-headers.patch
b/qtwebengine-everywhere-5.13.2-fix-chromium-headers.patch
index d14f1e0..e887fa3 100644
--- a/qtwebengine-everywhere-5.13.2-fix-chromium-headers.patch
+++ b/qtwebengine-everywhere-5.13.2-fix-chromium-headers.patch
@@ -10,545 +10,6 @@ Subject: [PATCH] fix chromium headers
.../modules/video_coding/decoding_state.h | 1 +
4 files changed, 256 insertions(+), 250 deletions(-)
-diff --git a/src/3rdparty/chromium/cc/base/list_container_helper.cc
b/src/3rdparty/chromium/cc/base/list_container_helper.cc
-index 380ad3dd1..c4a9245d9 100644
---- a/src/3rdparty/chromium/cc/base/list_container_helper.cc
-+++ b/src/3rdparty/chromium/cc/base/list_container_helper.cc
-@@ -13,258 +13,8 @@
- #include "base/macros.h"
- #include "base/memory/aligned_memory.h"
-
--namespace {
--const size_t kDefaultNumElementTypesToReserve = 32;
--} // namespace
--
- namespace cc {
-
--// CharAllocator
--////////////////////////////////////////////////////
--// This class deals only with char* and void*. It does allocation and passing
--// out raw pointers, as well as memory deallocation when being destroyed.
--class ListContainerHelper::CharAllocator {
-- public:
-- // CharAllocator::InnerList
-- /////////////////////////////////////////////
-- // This class holds the raw memory chunk, as well as information about its
-- // size and availability.
-- struct InnerList {
-- std::unique_ptr<char[], base::AlignedFreeDeleter> data;
-- // The number of elements in total the memory can hold. The difference
-- // between capacity and size is the how many more elements this list can
-- // hold.
-- size_t capacity;
-- // The number of elements have been put into this list.
-- size_t size;
-- // The size of each element is in bytes. This is used to move from between
-- // elements' memory locations.
-- size_t step;
--
-- InnerList() : capacity(0), size(0), step(0) {}
--
-- void Erase(char* position) {
-- // Confident that destructor is called by caller of this function. Since
-- // CharAllocator does not handle construction after
-- // allocation, it doesn't handle desctrution before deallocation.
-- DCHECK_LE(position, LastElement());
-- DCHECK_GE(position, Begin());
-- char* start = position + step;
-- std::copy(start, End(), position);
--
-- --size;
-- // Decrease capacity to avoid creating not full not last InnerList.
-- --capacity;
-- }
--
-- void InsertBefore(size_t alignment, char** position, size_t count) {
-- DCHECK_LE(*position, LastElement() + step);
-- DCHECK_GE(*position, Begin());
--
-- // Adjust the size and capacity
-- size_t old_size = size;
-- size += count;
-- capacity = size;
--
-- // Allocate the new data and update the iterator's pointer.
-- std::unique_ptr<char[], base::AlignedFreeDeleter> new_data(
-- static_cast<char*>(base::AlignedAlloc(size * step, alignment)));
-- size_t position_offset = *position - Begin();
-- *position = new_data.get() + position_offset;
--
-- // Copy the data before the inserted segment
-- memcpy(new_data.get(), data.get(), position_offset);
-- // Copy the data after the inserted segment.
-- memcpy(new_data.get() + position_offset + count * step,
-- data.get() + position_offset, old_size * step - position_offset);
-- data = std::move(new_data);
-- }
--
-- bool IsEmpty() const { return !size; }
-- bool IsFull() { return capacity == size; }
-- size_t NumElementsAvailable() const { return capacity - size; }
--
-- void* AddElement() {
-- DCHECK_LT(size, capacity);
-- ++size;
-- return LastElement();
-- }
--
-- void RemoveLast() {
-- DCHECK(!IsEmpty());
-- --size;
-- }
--
-- char* Begin() const { return data.get(); }
-- char* End() const { return data.get() + size * step; }
-- char* LastElement() const { return data.get() + (size - 1) * step; }
-- char* ElementAt(size_t index) const { return data.get() + index * step; }
--
-- private:
-- DISALLOW_COPY_AND_ASSIGN(InnerList);
-- };
--
-- CharAllocator(size_t alignment, size_t element_size, size_t element_count)
-- // base::AlignedAlloc does not accept alignment less than sizeof(void*).
-- : alignment_(std::max(sizeof(void*), alignment)),
-- element_size_(element_size),
-- size_(0),
-- last_list_index_(0),
-- last_list_(nullptr) {
-- // If this fails, then alignment of elements after the first could be wrong,
-- // and we need to pad sizes to fix that.
-- DCHECK_EQ(element_size % alignment, 0u);
-- AllocateNewList(element_count > 0 ? element_count
-- : kDefaultNumElementTypesToReserve);
-- last_list_ = storage_[last_list_index_].get();
-- }
--
-- ~CharAllocator() = default;
--
-- void* Allocate() {
-- if (last_list_->IsFull()) {
-- // Only allocate a new list if there isn't a spare one still there from
-- // previous usage.
-- if (last_list_index_ + 1 >= storage_.size())
-- AllocateNewList(last_list_->capacity * 2);
--
-- ++last_list_index_;
-- last_list_ = storage_[last_list_index_].get();
-- }
--
-- ++size_;
-- return last_list_->AddElement();
-- }
--
-- size_t alignment() const { return alignment_; }
-- size_t element_size() const { return element_size_; }
-- size_t list_count() const { return storage_.size(); }
-- size_t size() const { return size_; }
-- bool IsEmpty() const { return size() == 0; }
--
-- size_t Capacity() const {
-- size_t capacity_sum = 0;
-- for (const auto& inner_list : storage_)
-- capacity_sum += inner_list->capacity;
-- return capacity_sum;
-- }
--
-- void Clear() {
-- // Remove all except for the first InnerList.
-- DCHECK(!storage_.empty());
-- storage_.erase(storage_.begin() + 1, storage_.end());
-- last_list_index_ = 0;
-- last_list_ = storage_[0].get();
-- last_list_->size = 0;
-- size_ = 0;
-- }
--
-- void RemoveLast() {
-- DCHECK(!IsEmpty());
-- last_list_->RemoveLast();
-- if (last_list_->IsEmpty() && last_list_index_ > 0) {
-- --last_list_index_;
-- last_list_ = storage_[last_list_index_].get();
--
-- // If there are now two empty inner lists, free one of them.
-- if (last_list_index_ + 2 < storage_.size())
-- storage_.pop_back();
-- }
-- --size_;
-- }
--
-- void Erase(PositionInCharAllocator* position) {
-- DCHECK_EQ(this, position->ptr_to_container);
--
-- // Update |position| to point to the element after the erased element.
-- InnerList* list = storage_[position->vector_index].get();
-- char* item_iterator = position->item_iterator;
-- if (item_iterator == list->LastElement())
-- position->Increment();
--
-- list->Erase(item_iterator);
-- // TODO(weiliangc): Free the InnerList if it is empty.
-- --size_;
-- }
--
-- void InsertBefore(ListContainerHelper::Iterator* position, size_t count) {
-- if (!count)
-- return;
--
-- // If |position| is End(), then append |count| elements at the end. This
-- // will happen to not invalidate any iterators or memory.
-- if (!position->item_iterator) {
-- // Set |position| to be the first inserted element.
-- Allocate();
-- position->vector_index = storage_.size() - 1;
-- position->item_iterator =
storage_[position->vector_index]->LastElement();
-- // Allocate the rest.
-- for (size_t i = 1; i < count; ++i)
-- Allocate();
-- } else {
-- storage_[position->vector_index]->InsertBefore(
-- alignment_, &position->item_iterator, count);
-- size_ += count;
-- }
-- }
--
-- InnerList* InnerListById(size_t id) const {
-- DCHECK_LT(id, storage_.size());
-- return storage_[id].get();
-- }
--
-- size_t FirstInnerListId() const {
-- // |size_| > 0 means that at least one vector in |storage_| will be
-- // non-empty.
-- DCHECK_GT(size_, 0u);
-- size_t id = 0;
-- while (storage_[id]->size == 0)
-- ++id;
-- return id;
-- }
--
-- size_t LastInnerListId() const {
-- // |size_| > 0 means that at least one vector in |storage_| will be
-- // non-empty.
-- DCHECK_GT(size_, 0u);
-- size_t id = storage_.size() - 1;
-- while (storage_[id]->size == 0)
-- --id;
-- return id;
-- }
--
-- size_t NumAvailableElementsInLastList() const {
-- return last_list_->NumElementsAvailable();
-- }
--
-- private:
-- void AllocateNewList(size_t list_size) {
-- std::unique_ptr<InnerList> new_list(new InnerList);
-- new_list->capacity = list_size;
-- new_list->size = 0;
-- new_list->step = element_size_;
-- new_list->data.reset(static_cast<char*>(
-- base::AlignedAlloc(list_size * element_size_, alignment_)));
-- storage_.push_back(std::move(new_list));
-- }
--
-- std::vector<std::unique_ptr<InnerList>> storage_;
-- const size_t alignment_;
-- const size_t element_size_;
--
-- // The number of elements in the list.
-- size_t size_;
--
-- // The index of the last list to have had elements added to it, or the only
-- // list if the container has not had elements added since being cleared.
-- size_t last_list_index_;
--
-- // This is equivalent to |storage_[last_list_index_]|.
-- InnerList* last_list_;
--
-- DISALLOW_COPY_AND_ASSIGN(CharAllocator);
--};
--
- // PositionInCharAllocator
- //////////////////////////////////////////////////////
- ListContainerHelper::PositionInCharAllocator::PositionInCharAllocator(
-diff --git a/src/3rdparty/chromium/cc/base/list_container_helper.h
b/src/3rdparty/chromium/cc/base/list_container_helper.h
-index c79cf1f18..a44ecb4de 100644
---- a/src/3rdparty/chromium/cc/base/list_container_helper.h
-+++ b/src/3rdparty/chromium/cc/base/list_container_helper.h
-@@ -8,10 +8,18 @@
- #include <stddef.h>
-
- #include <memory>
-+#include <algorithm>
-+#include <vector>
-
-+#include "base/logging.h"
- #include "base/macros.h"
-+#include "base/memory/aligned_memory.h"
- #include "cc/base/base_export.h"
-
-+namespace {
-+const size_t kDefaultNumElementTypesToReserve = 32;
-+} // namespace
-+
- namespace cc {
-
- // Helper class for ListContainer non-templated logic. All methods are private,
-@@ -174,6 +182,252 @@ class CC_BASE_EXPORT ListContainerHelper final {
- DISALLOW_COPY_AND_ASSIGN(ListContainerHelper);
- };
-
-+// CharAllocator
-+////////////////////////////////////////////////////
-+// This class deals only with char* and void*. It does allocation and passing
-+// out raw pointers, as well as memory deallocation when being destroyed.
-+class ListContainerHelper::CharAllocator {
-+ public:
-+ // CharAllocator::InnerList
-+ /////////////////////////////////////////////
-+ // This class holds the raw memory chunk, as well as information about its
-+ // size and availability.
-+ struct InnerList {
-+ std::unique_ptr<char[], base::AlignedFreeDeleter> data;
-+ // The number of elements in total the memory can hold. The difference
-+ // between capacity and size is the how many more elements this list can
-+ // hold.
-+ size_t capacity;
-+ // The number of elements have been put into this list.
-+ size_t size;
-+ // The size of each element is in bytes. This is used to move from between
-+ // elements' memory locations.
-+ size_t step;
-+
-+ InnerList() : capacity(0), size(0), step(0) {}
-+
-+ void Erase(char* position) {
-+ // Confident that destructor is called by caller of this function. Since
-+ // CharAllocator does not handle construction after
-+ // allocation, it doesn't handle desctrution before deallocation.
-+ DCHECK_LE(position, LastElement());
-+ DCHECK_GE(position, Begin());
-+ char* start = position + step;
-+ std::copy(start, End(), position);
-+
-+ --size;
-+ // Decrease capacity to avoid creating not full not last InnerList.
-+ --capacity;
-+ }
-+
-+ void InsertBefore(size_t alignment, char** position, size_t count) {
-+ DCHECK_LE(*position, LastElement() + step);
-+ DCHECK_GE(*position, Begin());
-+
-+ // Adjust the size and capacity
-+ size_t old_size = size;
-+ size += count;
-+ capacity = size;
-+
-+ // Allocate the new data and update the iterator's pointer.
-+ std::unique_ptr<char[], base::AlignedFreeDeleter> new_data(
-+ static_cast<char*>(base::AlignedAlloc(size * step, alignment)));
-+ size_t position_offset = *position - Begin();
-+ *position = new_data.get() + position_offset;
-+
-+ // Copy the data before the inserted segment
-+ memcpy(new_data.get(), data.get(), position_offset);
-+ // Copy the data after the inserted segment.
-+ memcpy(new_data.get() + position_offset + count * step,
-+ data.get() + position_offset, old_size * step - position_offset);
-+ data = std::move(new_data);
-+ }
-+
-+ bool IsEmpty() const { return !size; }
-+ bool IsFull() { return capacity == size; }
-+ size_t NumElementsAvailable() const { return capacity - size; }
-+
-+ void* AddElement() {
-+ DCHECK_LT(size, capacity);
-+ ++size;
-+ return LastElement();
-+ }
-+
-+ void RemoveLast() {
-+ DCHECK(!IsEmpty());
-+ --size;
-+ }
-+
-+ char* Begin() const { return data.get(); }
-+ char* End() const { return data.get() + size * step; }
-+ char* LastElement() const { return data.get() + (size - 1) * step; }
-+ char* ElementAt(size_t index) const { return data.get() + index * step; }
-+
-+ private:
-+ DISALLOW_COPY_AND_ASSIGN(InnerList);
-+ };
-+
-+ CharAllocator(size_t alignment, size_t element_size, size_t element_count)
-+ // base::AlignedAlloc does not accept alignment less than sizeof(void*).
-+ : alignment_(std::max(sizeof(void*), alignment)),
-+ element_size_(element_size),
-+ size_(0),
-+ last_list_index_(0),
-+ last_list_(nullptr) {
-+ // If this fails, then alignment of elements after the first could be wrong,
-+ // and we need to pad sizes to fix that.
-+ DCHECK_EQ(element_size % alignment, 0u);
-+ AllocateNewList(element_count > 0 ? element_count
-+ : kDefaultNumElementTypesToReserve);
-+ last_list_ = storage_[last_list_index_].get();
-+ }
-+
-+ ~CharAllocator() = default;
-+
-+ void* Allocate() {
-+ if (last_list_->IsFull()) {
-+ // Only allocate a new list if there isn't a spare one still there from
-+ // previous usage.
-+ if (last_list_index_ + 1 >= storage_.size())
-+ AllocateNewList(last_list_->capacity * 2);
-+
-+ ++last_list_index_;
-+ last_list_ = storage_[last_list_index_].get();
-+ }
-+
-+ ++size_;
-+ return last_list_->AddElement();
-+ }
-+
-+ size_t alignment() const { return alignment_; }
-+ size_t element_size() const { return element_size_; }
-+ size_t list_count() const { return storage_.size(); }
-+ size_t size() const { return size_; }
-+ bool IsEmpty() const { return size() == 0; }
-+
-+ size_t Capacity() const {
-+ size_t capacity_sum = 0;
-+ for (const auto& inner_list : storage_)
-+ capacity_sum += inner_list->capacity;
-+ return capacity_sum;
-+ }
-+
-+ void Clear() {
-+ // Remove all except for the first InnerList.
-+ DCHECK(!storage_.empty());
-+ storage_.erase(storage_.begin() + 1, storage_.end());
-+ last_list_index_ = 0;
-+ last_list_ = storage_[0].get();
-+ last_list_->size = 0;
-+ size_ = 0;
-+ }
-+
-+ void RemoveLast() {
-+ DCHECK(!IsEmpty());
-+ last_list_->RemoveLast();
-+ if (last_list_->IsEmpty() && last_list_index_ > 0) {
-+ --last_list_index_;
-+ last_list_ = storage_[last_list_index_].get();
-+
-+ // If there are now two empty inner lists, free one of them.
-+ if (last_list_index_ + 2 < storage_.size())
-+ storage_.pop_back();
-+ }
-+ --size_;
-+ }
-+
-+ void Erase(PositionInCharAllocator* position) {
-+ DCHECK_EQ(this, position->ptr_to_container);
-+
-+ // Update |position| to point to the element after the erased element.
-+ InnerList* list = storage_[position->vector_index].get();
-+ char* item_iterator = position->item_iterator;
-+ if (item_iterator == list->LastElement())
-+ position->Increment();
-+
-+ list->Erase(item_iterator);
-+ // TODO(weiliangc): Free the InnerList if it is empty.
-+ --size_;
-+ }
-+
-+ void InsertBefore(ListContainerHelper::Iterator* position, size_t count) {
-+ if (!count)
-+ return;
-+
-+ // If |position| is End(), then append |count| elements at the end. This
-+ // will happen to not invalidate any iterators or memory.
-+ if (!position->item_iterator) {
-+ // Set |position| to be the first inserted element.
-+ Allocate();
-+ position->vector_index = storage_.size() - 1;
-+ position->item_iterator =
storage_[position->vector_index]->LastElement();
-+ // Allocate the rest.
-+ for (size_t i = 1; i < count; ++i)
-+ Allocate();
-+ } else {
-+ storage_[position->vector_index]->InsertBefore(
-+ alignment_, &position->item_iterator, count);
-+ size_ += count;
-+ }
-+ }
-+
-+ InnerList* InnerListById(size_t id) const {
-+ DCHECK_LT(id, storage_.size());
-+ return storage_[id].get();
-+ }
-+
-+ size_t FirstInnerListId() const {
-+ // |size_| > 0 means that at least one vector in |storage_| will be
-+ // non-empty.
-+ DCHECK_GT(size_, 0u);
-+ size_t id = 0;
-+ while (storage_[id]->size == 0)
-+ ++id;
-+ return id;
-+ }
-+
-+ size_t LastInnerListId() const {
-+ // |size_| > 0 means that at least one vector in |storage_| will be
-+ // non-empty.
-+ DCHECK_GT(size_, 0u);
-+ size_t id = storage_.size() - 1;
-+ while (storage_[id]->size == 0)
-+ --id;
-+ return id;
-+ }
-+
-+ size_t NumAvailableElementsInLastList() const {
-+ return last_list_->NumElementsAvailable();
-+ }
-+
-+ private:
-+ void AllocateNewList(size_t list_size) {
-+ std::unique_ptr<InnerList> new_list(new InnerList);
-+ new_list->capacity = list_size;
-+ new_list->size = 0;
-+ new_list->step = element_size_;
-+ new_list->data.reset(static_cast<char*>(
-+ base::AlignedAlloc(list_size * element_size_, alignment_)));
-+ storage_.push_back(std::move(new_list));
-+ }
-+
-+ std::vector<std::unique_ptr<InnerList>> storage_;
-+ const size_t alignment_;
-+ const size_t element_size_;
-+
-+ // The number of elements in the list.
-+ size_t size_;
-+
-+ // The index of the last list to have had elements added to it, or the only
-+ // list if the container has not had elements added since being cleared.
-+ size_t last_list_index_;
-+
-+ // This is equivalent to |storage_[last_list_index_]|.
-+ InnerList* last_list_;
-+
-+ DISALLOW_COPY_AND_ASSIGN(CharAllocator);
-+};
-+
- } // namespace cc
-
- #endif // CC_BASE_LIST_CONTAINER_HELPER_H_
diff --git
a/src/3rdparty/chromium/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
b/src/3rdparty/chromium/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
index 22528c948..69e624e8b 100644
---
a/src/3rdparty/chromium/third_party/webrtc/modules/audio_processing/aec3/clockdrift_detector.h
diff --git a/qtwebengine-everywhere-5.14.1-gcc10.patch
b/qtwebengine-everywhere-5.14.1-gcc10.patch
new file mode 100644
index 0000000..be17f15
--- /dev/null
+++ b/qtwebengine-everywhere-5.14.1-gcc10.patch
@@ -0,0 +1,35 @@
+diff -up
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/media/cdm/supported_cdm_versions.cc.gcc10
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/media/cdm/supported_cdm_versions.cc
+diff -up
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/media/cdm/supported_cdm_versions.h.gcc10
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/media/cdm/supported_cdm_versions.h
+---
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/media/cdm/supported_cdm_versions.h.gcc10 2020-01-20
04:37:42.000000000 -0600
++++
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/media/cdm/supported_cdm_versions.h 2020-03-25
08:19:35.628534572 -0500
+@@ -6,6 +6,7 @@
+ #define MEDIA_CDM_SUPPORTED_CDM_VERSIONS_H_
+
+ #include <array>
++#include <cstdlib>
+
+ #include "media/base/media_export.h"
+ #include "media/cdm/api/content_decryption_module.h"
+diff -up
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/third_party/perfetto/include/perfetto/base/task_runner.h.gcc10
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/third_party/perfetto/include/perfetto/base/task_runner.h
+---
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/third_party/perfetto/include/perfetto/base/task_runner.h.gcc10 2020-01-20
04:37:42.000000000 -0600
++++
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/third_party/perfetto/include/perfetto/base/task_runner.h 2020-03-17
16:59:11.432193734 -0500
+@@ -18,6 +18,7 @@
+ #define INCLUDE_PERFETTO_BASE_TASK_RUNNER_H_
+
+ #include <functional>
++#include <cstdint>
+
+ #include "perfetto/base/export.h"
+
+diff -up
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/third_party/webrtc/call/rtx_receive_stream.h.gcc10
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/third_party/webrtc/call/rtx_receive_stream.h
+---
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/third_party/webrtc/call/rtx_receive_stream.h.gcc10 2020-01-20
04:37:42.000000000 -0600
++++
qtwebengine-everywhere-src-5.14.1.orig/src/3rdparty/chromium/third_party/webrtc/call/rtx_receive_stream.h 2020-03-25
09:37:13.373280961 -0500
+@@ -11,6 +11,8 @@
+ #ifndef CALL_RTX_RECEIVE_STREAM_H_
+ #define CALL_RTX_RECEIVE_STREAM_H_
+
++#include <cstdlib>
++#include <cstdint>
+ #include <map>
+
+ #include "call/rtp_packet_sink_interface.h"
diff --git a/qtwebengine-everywhere-src-5.10.0-linux-pri.patch
b/qtwebengine-everywhere-src-5.10.0-linux-pri.patch
index 4bcd376..995db84 100644
--- a/qtwebengine-everywhere-src-5.10.0-linux-pri.patch
+++ b/qtwebengine-everywhere-src-5.10.0-linux-pri.patch
@@ -1,6 +1,6 @@
-diff -ur qtwebengine-everywhere-src-5.10.0/src/core/config/linux.pri
qtwebengine-everywhere-src-5.10.0-linux-pri/src/core/config/linux.pri
---- qtwebengine-everywhere-src-5.10.0/src/core/config/linux.pri 2017-11-29
09:42:29.000000000 +0100
-+++ qtwebengine-everywhere-src-5.10.0-linux-pri/src/core/config/linux.pri 2017-12-25
12:07:40.262411459 +0100
+diff -ur qtwebengine-everywhere-src-5.10.0/src/buildtools/config/linux.pri
qtwebengine-everywhere-src-5.10.0-linux-pri/src/buildtools/config/linux.pri
+--- qtwebengine-everywhere-src-5.10.0/src/buildtools/config/linux.pri 2017-11-29
09:42:29.000000000 +0100
++++
qtwebengine-everywhere-src-5.10.0-linux-pri/src/buildtools/config/linux.pri 2017-12-25
12:07:40.262411459 +0100
@@ -157,3 +157,19 @@
#qtConfig(webengine-system-jsoncpp): gn_args += use_system_jsoncpp=true
#qtConfig(webengine-system-libsrtp: gn_args += use_system_libsrtp=true
diff --git a/qtwebengine-opensource-src-5.12.4-fix-extractcflag.patch
b/qtwebengine-opensource-src-5.12.4-fix-extractcflag.patch
index fbbf6fc..fcbc6b5 100644
--- a/qtwebengine-opensource-src-5.12.4-fix-extractcflag.patch
+++ b/qtwebengine-opensource-src-5.12.4-fix-extractcflag.patch
@@ -1,7 +1,7 @@
-diff --git a/src/core/config/functions.pri b/src/core/config/functions.pri
+diff --git a/src/buildtools/config/functions.pri b/src/buildtools/config/functions.pri
index 8c11faa16..191d3d623 100644
---- a/src/core/config/functions.pri
-+++ b/src/core/config/functions.pri
+--- a/src/buildtools/config/functions.pri
++++ b/src/buildrools/config/functions.pri
@@ -1,5 +1,5 @@
defineReplace(qtwebengine_extractCFlag) {
- CFLAGS = $$QMAKE_CC $$QMAKE_CFLAGS
diff --git a/qtwebengine-opensource-src-5.9.0-no-neon.patch
b/qtwebengine-opensource-src-5.9.0-no-neon.patch
index dd24ee2..308c5bc 100644
--- a/qtwebengine-opensource-src-5.9.0-no-neon.patch
+++ b/qtwebengine-opensource-src-5.9.0-no-neon.patch
@@ -1,7 +1,7 @@
-diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri
+diff --git a/src/buildtools/config/linux.pri b/src/buildtools/config/linux.pri
index f45c418fe..f6c7b714e 100644
---- a/src/core/config/linux.pri
-+++ b/src/core/config/linux.pri
+--- a/src/buildtools/config/linux.pri
++++ b/src/buildtools/config/linux.pri
@@ -87,7 +87,9 @@ contains(QT_ARCH, "arm") {
gn_args += arm_use_neon=false
# If the toolchain does not explicitly specify to use NEON instructions
diff --git a/sources b/sources
index 62bfd1e..898c5fc 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (qtwebengine-everywhere-src-5.13.2.tar.xz) =
10ae5cca36230069ef117cae15b84e29124c43e4864dbfa7a1f99879764b871355281edcb1942e86ec3a4cac12bbfd2749577745c8c7e736eb6a9909876554d0
SHA512 (pulseaudio-12.2-headers.tar.gz) =
a5a9bcbb16030b3bc83cc0cc8f5e7f90e0723d3e83258a5c77eacb32eaa267118a73fa7814fbcc99a24e4907916a2b371ebb6dedc4f45541c3acf6c834fd35be
+SHA512 (qtwebengine-everywhere-src-5.14.1.tar.xz) =
fafa2fbc789941e837e35945857a6da00e73bd2abe512290674b9957719b998d8b8b95a35c709a171c9d0d111e6f418cec630dfcdbe47ecbae25a3b94e4c99f9