diff --git a/clean_ffmpeg.sh b/clean_ffmpeg.sh new file mode 100755 index 0000000000000000000000000000000000000000..981ce6ee16853c3033260c83139ac59052fbde9e --- /dev/null +++ b/clean_ffmpeg.sh @@ -0,0 +1,355 @@ +#!/bin/bash +# Copyright 2013 Tomas Popela +# Copyright 2016-2017 Kevin Kofler +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +where=`pwd` + +generated_files=`./get_free_ffmpeg_source_files.py $1 0` +generated_files_headers="${generated_files//.c/.h}" +generated_files_headers="${generated_files_headers//.S/.h}" +generated_files_headers="${generated_files_headers//.asm/.h}" + +cd $1/third_party/ffmpeg + +header_files=" libavcodec/x86/inline_asm.h \ + libavcodec/x86/hpeldsp.h \ + libavcodec/x86/mathops.h \ + libavcodec/x86/vpx_arith.h \ + libavcodec/aarch64/vp8dsp.h \ + libavcodec/arm/vp8dsp.h \ + libavcodec/arm/vpx_arith.h \ + libavcodec/aac.h \ + libavcodec/aacps.h \ + libavcodec/aacpsdsp.h \ + libavcodec/aacsbrdata.h \ + libavcodec/aac_ac3_parser.h \ + libavcodec/aac_defines.h \ + libavcodec/ac3.h \ + libavcodec/ac3defs.h \ + libavcodec/ac3tab.h \ + libavcodec/adts_header.h \ + libavcodec/avcodec.h \ + libavcodec/blockdsp.h \ + libavcodec/bytestream.h \ + libavcodec/cbrt_data.h \ + libavcodec/cbrt_tablegen.h \ + libavcodec/codec.h \ + libavcodec/codec_id.h \ + libavcodec/codec_internal.h \ + libavcodec/codec_par.h \ + libavcodec/dct.h \ + libavcodec/dct32.h \ + libavcodec/defs.h \ + libavcodec/dv.h \ + libavcodec/error_resilience.h \ + libavcodec/fdctdsp.h \ + libavcodec/fft.h \ + libavcodec/fft-internal.h \ + libavcodec/fft_table.h \ + libavcodec/flac.h \ + libavcodec/flacdsp.h \ + libavcodec/flac_parse.h \ + libavcodec/frame_thread_encoder.h \ + libavcodec/get_bits.h \ + libavcodec/h263dsp.h \ + libavcodec/h264chroma.h \ + libavcodec/hevc.h \ + libavcodec/hpeldsp.h \ + libavcodec/hwaccels.h \ + libavcodec/hwconfig.h \ + libavcodec/idctdsp.h \ + libavcodec/internal.h \ + libavcodec/kbdwin.h \ + libavcodec/mathops.h \ + libavcodec/mdct15.c \ + libavcodec/mdct15.h \ + libavcodec/me_cmp.h \ + libavcodec/mlp_parse.h \ + libavcodec/motion_est.h \ + libavcodec/mpeg12.h \ + libavcodec/mpeg12data.h \ + libavcodec/mpeg12vlc.h \ + libavcodec/mpegaudio.h \ + libavcodec/mpegaudiodecheader.h \ + libavcodec/mpegaudiodec_common_tablegen.h \ + libavcodec/mpegaudiodsp.h \ + libavcodec/mpegaudio_tablegen.h \ + libavcodec/mpegpicture.h \ + libavcodec/mpegutils.h \ + libavcodec/mpegvideo.h \ + libavcodec/mpegvideodata.h \ + libavcodec/mpegvideoencdsp.h \ + libavcodec/options_table.h \ + libavcodec/opus.h \ + libavcodec/opusdsp.h \ + libavcodec/opus_celt.h \ + libavcodec/opus_pvq.h \ + libavcodec/opus_rc.h \ + libavcodec/packet.h \ + libavcodec/packet_internal.h \ + libavcodec/pcm_tablegen.h \ + libavcodec/pixblockdsp.h \ + libavcodec/pixels.h \ + libavcodec/png.h \ + libavcodec/pngdsp.h \ + libavcodec/put_bits.h \ + libavcodec/qpeldsp.h \ + libavcodec/ratecontrol.h \ + libavcodec/rectangle.h \ + libavcodec/rl.h \ + libavcodec/rnd_avg.h \ + libavcodec/sbr.h \ + libavcodec/sbrdsp.h \ + libavcodec/sinewin.h \ + libavcodec/sinewin_tablegen.h \ + libavcodec/startcode.h \ + libavcodec/thread.h \ + libavcodec/threadframe.h \ + libavcodec/unary.h \ + libavcodec/version.h \ + libavcodec/version_major.h \ + libavcodec/videodsp.h \ + libavcodec/vlc.h \ + libavcodec/vorbisdsp.h \ + libavcodec/vp3data.h \ + libavcodec/vp4data.h \ + libavcodec/vp3dsp.h \ + libavcodec/vp56.h \ + libavcodec/vp56dsp.h \ + libavcodec/vp8data.h \ + libavcodec/vp8dsp.h \ + libavcodec/vp89_rac.h \ + libavformat/apetag.h \ + libavformat/avformat.h \ + libavformat/dv.h \ + libavformat/img2.h \ + libavformat/internal.h \ + libavformat/mov_chan.h \ + libavformat/pcm.h \ + libavformat/rdt.h \ + libavformat/rtp.h \ + libavformat/rtpdec.h \ + libavformat/spdif.h \ + libavformat/srtp.h \ + libavformat/options_table.h \ + libavformat/version.h \ + libavformat/version_major.h \ + libavformat/w64.h \ + libavutil/aarch64/cpu.h \ + libavutil/x86/asm.h \ + libavutil/x86/bswap.h \ + libavutil/x86/cpu.h \ + libavutil/x86/emms.h + libavutil/x86/intreadwrite.h \ + libavutil/x86/intmath.h + libavutil/x86/timer.h \ + libavutil/attributes.h \ + libavutil/attributes_internal.h \ + libavutil/audio_fifo.h \ + libavutil/avassert.h \ + libavutil/avutil.h \ + libavutil/bswap.h \ + libavutil/common.h \ + libavutil/colorspace.h \ + libavutil/cpu.h \ + libavutil/cpu_internal.h \ + libavutil/dynarray.h \ + libavutil/ffmath.h \ + libavutil/fixed_dsp.h \ + libavutil/float_dsp.h \ + libavutil/imgutils.h \ + libavutil/imgutils_internal.h \ + libavutil/internal.h \ + libavutil/intfloat.h \ + libavutil/intreadwrite.h \ + libavutil/libm.h \ + libavutil/lls.h \ + libavutil/macros.h \ + libavutil/pixfmt.h \ + libavutil/qsort.h \ + libavutil/replaygain.h \ + libavutil/softfloat.h \ + libavutil/softfloat_tables.h \ + libavutil/thread.h \ + libavutil/timer.h \ + libavutil/timestamp.h \ + libavutil/tx_priv.h \ + libavutil/version.h \ + libswresample/swresample.h \ + libswresample/version.h \ + libswresample/version_major.h \ + compat/va_copy.h \ + compat/atomics/gcc/stdatomic.h " + +manual_files=" libavcodec/aarch64/fft_neon.S \ + libavcodec/aarch64/h264pred_neon.S \ + libavcodec/aarch64/hpeldsp_neon.S \ + libavcodec/aarch64/mdct_neon.S \ + libavcodec/aarch64/neon.S \ + libavcodec/aarch64/vorbisdsp_neon.S \ + libavcodec/aarch64/vorbisdsp_init.c \ + libavcodec/aarch64/vp8dsp_neon.S \ + libavcodec/x86/hpeldsp.asm \ + libavcodec/x86/hpeldsp_rnd_template.c \ + libavcodec/x86/mdct15.asm \ + libavcodec/x86/mdct15_init.c \ + libavcodec/x86/rnd_template.c \ + libavcodec/x86/videodsp.asm \ + libavcodec/x86/videodsp_init.c \ + libavcodec/x86/vorbisdsp_init.c \ + libavcodec/x86/vp3dsp.asm \ + libavcodec/x86/vp8dsp.asm \ + libavcodec/autorename_libavcodec_mdct15.c \ + libavcodec/bit_depth_template.c \ + libavcodec/fft_template.c \ + libavcodec/flacdec.c \ + libavcodec/flacdsp.c \ + libavcodec/flacdsp_template.c \ + libavcodec/flacdsp_lpc_template.c \ + libavcodec/h264pred_template.c \ + libavcodec/hpel_template.c \ + libavcodec/hpeldsp.c \ + libavcodec/mdct15.c \ + libavcodec/mdct_template.c \ + libavcodec/options.c \ + libavcodec/pcm.c \ + libavcodec/pel_template.c \ + libavcodec/utils.c \ + libavcodec/videodsp.c \ + libavcodec/videodsp_template.c \ + libavcodec/vorbisdsp.c \ + libavcodec/vp3dsp.c \ + libavcodec/vp8dsp.c \ + libavformat/flacdec.c \ + libavformat/options.c \ + libavformat/pcm.c \ + libavformat/utils.c \ + libavformat/version.c \ + libavutil/aarch64/asm.S \ + libavutil/aarch64/bswap.h \ + libavutil/aarch64/cpu.c \ + libavutil/aarch64/float_dsp_init.c \ + libavutil/aarch64/float_dsp_neon.S \ + libavutil/aarch64/timer.h \ + libavutil/cpu.c \ + libavutil/fixed_dsp.c \ + libavutil/float_dsp.c \ + libavutil/imgutils.c \ + libavutil/tx_float.c \ + libavutil/tx_template.c \ + libavutil/utils.c \ + libavutil/version.c \ + libavutil/x86/cpu.c \ + libavutil/x86/float_dsp_init.c \ + libavutil/x86/tx_float_init.c \ + libavutil/x86/x86inc.asm \ + libavutil/x86/x86util.asm " + +mp3_files=" libavcodec/aarch64/aacpsdsp_init_aarch64.c \ + libavcodec/aarch64/aacpsdsp_neon.S \ + libavcodec/aarch64/autorename_libavcodec_aarch64_aacpsdsp_neon.S \ + libavcodec/aarch64/autorename_libavcodec_aarch64_sbrdsp_neon.S \ + libavcodec/aarch64/mpegaudiodsp_init.c \ + libavcodec/aarch64/mpegaudiodsp_neon.S \ + libavcodec/aarch64/sbrdsp_init_aarch64.c \ + libavcodec/aarch64/sbrdsp_neon.S \ + libavcodec/aac_ac3_parser.c \ + libavcodec/aac_parser.c \ + libavcodec/aacps_float.c \ + libavcodec/aacpsdsp_float.c \ + libavcodec/aacsbr.c \ + libavcodec/aactab.c \ + libavcodec/ac3tab.c \ + libavcodec/autorename_libavcodec_mpegaudiodsp.c \ + libavcodec/autorename_libavcodec_sbrdsp.c \ + libavcodec/cbrt_data.c \ + libavcodec/dct.c \ + libavcodec/dct32_fixed.c \ + libavcodec/dct32_float.c \ + libavcodec/dct32_template.c \ + libavcodec/kbdwin.c \ + libavcodec/mpegaudio.c \ + libavcodec/mpegaudio_parser.c \ + libavcodec/mpegaudiodec_fixed.c \ + libavcodec/mpegaudiodec_template.c \ + libavcodec/mpegaudiodecheader.c \ + libavcodec/mpegaudiodsp.c \ + libavcodec/mpegaudiodsp_data.c \ + libavcodec/mpegaudiodsp_fixed.c \ + libavcodec/mpegaudiodsp_float.c \ + libavcodec/mpegaudiodsp_template.c \ + libavcodec/sbrdsp.c \ + libavcodec/sbrdsp_template.c \ + libavcodec/sinewin.c \ + libavcodec/x86/dct_init.c \ + libavcodec/x86/dct32.asm \ + libavcodec/x86/imdct36.asm \ + libavcodec/x86/mpegaudiodsp.c \ + libavcodec/x86/sbrdsp_init.c \ + libavcodec/x86/sbrdsp.asm \ + libavformat/aacdec.c \ + libavformat/apetag.c \ + libavformat/img2.c \ + libavformat/mov.c \ + libavformat/mov_chan.c \ + libavformat/mp3dec.c " + +other_files=" BUILD.gn \ + Changelog \ + COPYING.GPLv2 \ + COPYING.GPLv3 \ + COPYING.LGPLv2.1 \ + COPYING.LGPLv3 \ + CREDITS \ + CREDITS.chromium \ + ffmpeg_generated.gni \ + ffmpeg_options.gni \ + INSTALL.md \ + LICENSE.md \ + MAINTAINERS \ + OWNERS \ + README.chromium \ + README.md \ + RELEASE " + +files=$generated_files$manual_files$other_files$generated_files_headers$header_files + +for f in $files +do + dir_name=`dirname $f`/ + if [[ $dir_name == ./ ]]; then + dir_name= + else + mkdir -p ../tmp_ffmpeg/$dir_name + fi + + cp -p $f ../tmp_ffmpeg/$dir_name 2>/dev/null +done + +# whole directory +mkdir -p ../tmp_ffmpeg/chromium +cp -pr chromium/config ../tmp_ffmpeg/chromium/ + +cd .. +rm -rf ffmpeg +mv tmp_ffmpeg ffmpeg + +cd $where diff --git a/clean_qtwebengine.sh b/clean_qtwebengine.sh new file mode 100755 index 0000000000000000000000000000000000000000..be31c24a729aa8249daa52d84d655d90c0d8cb8c --- /dev/null +++ b/clean_qtwebengine.sh @@ -0,0 +1,70 @@ +#!/bin/bash +# Copyright 2015-2017 Kevin Kofler +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +if [ -z "$1" ] ; then + echo "usage: ./clean_qtwebengine.sh VERSION" + echo "e.g.: ./clean_qtwebengine.sh 6.5.0" + exit 1 +fi + +DIRNAME="qtwebengine-everywhere-src-$1" + +echo "removing $DIRNAME" +rm -rf "$DIRNAME" || exit $? + +if [ -f "$DIRNAME.tar.xz" ] ; then + echo "unpacking $DIRNAME.tar.xz" + XZ_OPT="-T 4" tar xJf "$DIRNAME.tar.xz" || exit $? +elif [ -f "$DIRNAME.tar.bz2" ] ; then + echo "unpacking $DIRNAME.tar.bz2" + tar xjf "$DIRNAME.tar.bz2" || exit $? +elif [ -f "$DIRNAME.tar.gz" ] ; then + echo "unpacking $DIRNAME.tar.gz" + tar xzf "$DIRNAME.tar.gz" || exit $? +elif [ -f "$DIRNAME.7z" ] ; then + echo "unpacking $DIRNAME.7z" + if type 7za >/dev/null 2>/dev/null ; then + 7za x "$DIRNAME.7z" || exit $? + elif type 7z >/dev/null 2>/dev/null ; then + 7z x "$DIRNAME.7z" || exit $? + else + echo "error: p7zip required" + exit 1 + fi +else + echo "error: no archive for $DIRNAME found" + exit 1 +fi + +echo "running clean_ffmpeg.sh" +./clean_ffmpeg.sh "$DIRNAME/src/3rdparty/chromium" || exit $? + +echo "ripping out openh264 sources, keeping just header files" +find "$DIRNAME/src/3rdparty/chromium/third_party/openh264/src" -type f -not -name '*.h' -delete || exit $? + +echo "repacking as $DIRNAME-clean.tar.xz" +XZ_OPT="-8 -T 2" tar cJf "$DIRNAME-clean.tar.xz" "$DIRNAME" || exit $? + +echo "removing $DIRNAME" +rm -rf "$DIRNAME" || exit $? + +echo "done" +exit 0 diff --git a/get_free_ffmpeg_source_files.py b/get_free_ffmpeg_source_files.py new file mode 100755 index 0000000000000000000000000000000000000000..390ee3f56a5023cfdb31849146506600ffebbbe7 --- /dev/null +++ b/get_free_ffmpeg_source_files.py @@ -0,0 +1,82 @@ +#!/usr/bin/python3 +# Copyright 2015 Tomas Popela +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +import sys +import re + +def append_sources (input_sources, output_sources): + + # Get the source files. + source_files = re.findall(r"\"(.*?)\"", input_sources) + output_sources += source_files + + +def parse_sources(input_sources, output_sources, arch_not_arm): + + # Get the type of sources in one group and sources itself in the other one. + blocks = re.findall(r"(ffmpeg[^\s]*).*?\[(.*?)]", input_sources, re.DOTALL) + for block in blocks: + if (arch_not_arm): + if not 'ffmpeg_gas_sources' in block[0]: + append_sources (block[1], output_sources) + else: + append_sources (block[1], output_sources) + + +def parse_ffmpeg_gyni_file(gyni_path, arch_not_arm): + + with open(gyni_path, "r") as input_file: + content = input_file.read().replace('\n', '') + + output_sources = [] + # Get all the sections. + sections = re.findall(r"if (.*?})", content, re.DOTALL) + for section in sections: + # Get all the conditions (first group) and sources (second group) for the + # current section. + blocks = re.findall(r"(\(.*?\))\s\{(.*?)\}", section, re.DOTALL) + for block in blocks: + conditions = re.findall(r"\(?\((.*?)\)", block[0]) + inserted = False + for condition in conditions: + if inserted: + break + limitations = ['ffmpeg_branding == "Chrome"', 'ffmpeg_branding == "ChromeOS"'] + if ('use_linux_config' in condition) and not any(limitation in condition for limitation in limitations): + if (arch_not_arm): + if ('x64' in condition) or ('x86' in condition): + parse_sources (block[1], output_sources, arch_not_arm) + inserted = True + else: + parse_sources (block[1], output_sources, arch_not_arm) + inserted = True + + if len(output_sources) == 0: + sys.stderr.write("Something went wrong, no sources parsed!\n") + sys.exit(1) + + print(' '.join(output_sources)) + + +if __name__ == "__main__": + + path = "%s/third_party/ffmpeg/ffmpeg_generated.gni" % sys.argv[1] + parse_ffmpeg_gyni_file (path, False if sys.argv[2] == "0" else True) diff --git a/macros.qt6-qtwebengine b/macros.qt6-qtwebengine new file mode 100644 index 0000000000000000000000000000000000000000..c2f9d82347294b2d47892102127d4675b5f58946 --- /dev/null +++ b/macros.qt6-qtwebengine @@ -0,0 +1,4 @@ +%_qt6_qtwebengine @@NAME@@ +%_qt6_qtwebengine_epoch @@EPOCH@@ +%_qt6_qtwebengine_version @@VERSION@@ +%_qt6_qtwebengine_evr @@EVR@@ diff --git a/pulseaudio-12.2-headers.tar.gz b/pulseaudio-12.2-headers.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..251e70e17ed15010f523ab92b0a997fecd389900 Binary files /dev/null and b/pulseaudio-12.2-headers.tar.gz differ diff --git a/qt6-qtwebengine.spec b/qt6-qtwebengine.spec new file mode 100644 index 0000000000000000000000000000000000000000..04c3f225bbad6c484b1f248b74dc63f47dd3c29c --- /dev/null +++ b/qt6-qtwebengine.spec @@ -0,0 +1,598 @@ +%global qt_module qtwebengine + +%global _hardened_build 1 + +# package-notes causes FTBFS (#2043178) +%undefine _package_note_file + +%global use_system_libwebp 1 +%global use_system_jsoncpp 1 +%global use_system_re2 1 + +%global use_system_libicu 1 + +# 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 + +# the QMake CONFIG flags to force debugging information to be produced in +# release builds, and for all parts of the code +%ifarch %{arm} aarch64 +# the ARM builder runs out of memory during linking with the full setting below, +# so omit debugging information for the parts upstream deems it dispensable for +# (webcore, v8base) +%global debug_config %{nil} +%else +%global debug_config force_debug_info +# webcore_debug v8base_debug +%endif + +# spellchecking dictionary directory +%global _qtwebengine_dictionaries_dir %{_qt6_datadir}/qtwebengine_dictionaries + +# exclude plugins +%global __provides_exclude ^lib.*plugin\\.so.*$ +# and designer plugins +%global __provides_exclude_from ^%{_qt6_plugindir}/.*\\.so$ + +Summary: Qt6 - QtWebEngine components +Name: qt6-qtwebengine +Version: 6.5.0 +Release: 1 + +# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details +# See also http://qt-project.org/doc/qt-5.0/qtdoc/licensing.html +# The other licenses are from Chromium and the code it bundles +License: (LGPLv2 with exceptions or GPLv3 with exceptions) and BSD and LGPLv2+ and ASL 2.0 and IJG and MIT and GPLv2+ and ISC and OpenSSL and (MPLv1.1 or GPLv2 or LGPLv2) +URL: http://www.qt.io +# cleaned tarball with patent-encumbered codecs removed from the bundled FFmpeg +# ./qtwebengine-release.sh +# ./clean_qtwebengine.sh 6.4.1 +Source0: qtwebengine-everywhere-src-%{version}-clean.tar.xz +Source100: qtwebengine-everywhere-src-%{version}-clean.tar.xz.0 +Source101: qtwebengine-everywhere-src-%{version}-clean.tar.xz.1 + +# cleanup scripts used above +Source2: clean_qtwebengine.sh +Source3: clean_ffmpeg.sh +Source4: get_free_ffmpeg_source_files.py +# macros +Source10: macros.qt6-qtwebengine + +# pulseaudio headers +Source20: pulseaudio-12.2-headers.tar.gz + +# workaround FTBFS against kernel-headers-5.2.0+ +Patch1: qtwebengine-SIOCGSTAMP.patch +Patch2: qtwebengine-link-pipewire.patch +# Fix/workaround FTBFS on aarch64 with newer glibc +Patch3: qtwebengine-aarch64-new-stat.patch +Patch4: qtwebengine-ffmpeg-first_dts.patch + +# FTBS warning: elaborated-type-specifier for a scoped enum must not +# use the 'class' keyword +Patch50: qtwebengine-fix-build.patch + +## Upstream patches: +# https://webrtc-review.googlesource.com/c/src/+/285464 +Patch100: qtwebengine-webrtc-dlopen-h264.patch + +## Upstreamable patches: +Patch110: qtwebengine-blink-dlopen-h264.patch + +# handled by qt6-srpm-macros, which defines %%qt6_qtwebengine_arches +# FIXME use/update qt6_qtwebengine_arches +# 32-bit arches not supported (https://bugreports.qt.io/browse/QTBUG-102143) +ExclusiveArch: aarch64 x86_64 + +BuildRequires: cmake +BuildRequires: make +BuildRequires: qt6-srpm-macros +BuildRequires: qt6-qtbase-devel +BuildRequires: qt6-qtbase-private-devel +# TODO: check of = is really needed or if >= would be good enough -- rex +%{?_qt6:Requires: %{_qt6}%{?_isa} = %{_qt6_version}} +BuildRequires: qt6-qtdeclarative-devel +BuildRequires: qt6-qtlocation-devel +BuildRequires: qt6-qtsensors-devel +BuildRequires: qt6-qtsvg-devel +BuildRequires: qt6-qttools-static +BuildRequires: qt6-qtquickcontrols2-devel +BuildRequires: qt6-qtwebchannel-devel +# for examples? +BuildRequires: ninja-build +BuildRequires: cmake +BuildRequires: bison +BuildRequires: flex +BuildRequires: gcc-c++ +# gn links statically (for now) +BuildRequires: libstdc++-static +BuildRequires: git-core +BuildRequires: gperf +BuildRequires: krb5-devel +%if 0%{?use_system_libicu} +BuildRequires: libicu-devel >= 65 +%endif +BuildRequires: libjpeg-devel +BuildRequires: nodejs +%if 0%{?use_system_re2} +BuildRequires: re2-devel +%endif +BuildRequires: snappy-devel +BuildConflicts: minizip-devel +Provides: bundled(minizip) = 2.8.1 +BuildRequires: pkgconfig(alsa) +BuildRequires: pkgconfig(dbus-1) +BuildRequires: pkgconfig(egl) +BuildRequires: pkgconfig(epoxy) +BuildRequires: pkgconfig(expat) +BuildRequires: pkgconfig(fontconfig) +BuildRequires: pkgconfig(freetype2) +BuildRequires: pkgconfig(gbm) +BuildRequires: pkgconfig(gio-2.0) +BuildRequires: pkgconfig(gl) +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(gobject-2.0) +BuildRequires: pkgconfig(harfbuzz) +%if 0%{?use_system_jsoncpp} +BuildRequires: pkgconfig(jsoncpp) +%endif +BuildRequires: pkgconfig(lcms2) +BuildRequires: pkgconfig(libcap) +BuildRequires: pkgconfig(libdrm) +BuildRequires: pkgconfig(libevent) +BuildRequires: pkgconfig(libpci) +BuildRequires: pkgconfig(libpipewire-0.3) +BuildRequires: pkgconfig(libpng) +BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(libudev) +%if 0%{?use_system_libwebp} +BuildRequires: pkgconfig(libwebp) >= 0.6.0 +%endif +BuildRequires: pkgconfig(nss) +BuildRequires: pkgconfig(opus) +BuildRequires: pkgconfig(poppler-cpp) +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xcomposite) +BuildRequires: pkgconfig(xcursor) +BuildRequires: pkgconfig(xdamage) +BuildRequires: pkgconfig(xext) +BuildRequires: pkgconfig(xfixes) +BuildRequires: pkgconfig(xi) +BuildRequires: pkgconfig(xkbcommon) +BuildRequires: pkgconfig(xkbfile) +BuildRequires: pkgconfig(xrandr) +BuildRequires: pkgconfig(xrender) +BuildRequires: pkgconfig(xscrnsaver) +BuildRequires: pkgconfig(xshmfence) +BuildRequires: pkgconfig(xtst) +BuildRequires: pkgconfig(zlib) +## https://bugreports.qt.io/browse/QTBUG-59094 +## requires libxml2 built with icu support +#BuildRequires: pkgconfig(libxslt) pkgconfig(libxml-2.0) +BuildRequires: perl-interpreter +BuildRequires: python3-devel +BuildRequires: python3-html5lib +BuildRequires: pkgconfig(vpx) >= 1.8.0 +BuildRequires: pkgconfig(libavcodec) +BuildRequires: pkgconfig(libavformat) +BuildRequires: pkgconfig(libavutil) + +# extra (non-upstream) functions needed, see +# src/3rdparty/chromium/third_party/sqlite/README.chromium for details +#BuildRequires: pkgconfig(sqlite3) + +## Various bundled libraries that Chromium does not support unbundling :-( +## Only the parts actually built are listed. +## Query for candidates: +## grep third_party/ build.log | sed 's!third_party/!\nthird_party/!g' | \ +## grep third_party/ | sed 's!^third_party/!!g' | sed 's!/.*$!!g' | \ +## sed 's/\;.*$//g' | sed 's/ .*$//g' | sort | uniq | less +## some false positives where only shim headers are generated for some reason +## some false positives with dummy placeholder dirs (swiftshader, widevine) +## some false negatives where a header-only library is bundled (e.g. x86inc) +## Spot's chromium.spec also has a list that I checked. + +# Of course, Chromium itself is bundled. It cannot be unbundled because it is +# not a library, but forked (modified) application code. +Provides: bundled(chromium) = 102.0.5005.177 + +# Bundled in src/3rdparty/chromium/third_party: +# Check src/3rdparty/chromium/third_party/*/README.chromium for version numbers, +# except where specified otherwise. +# Note that many of those libraries are git snapshots, so version numbers are +# necessarily approximate. +# Also note that the list is probably not complete anymore due to Chromium +# adding more and more bundled stuff at every release, some of which (but not +# all) is actually built in QtWebEngine. +# src/3rdparty/chromium/third_party/angle/doc/ChoosingANGLEBranch.md points to +# http://omahaproxy.appspot.com/deps.json?version=87.0.4280.144 chromium_branch +Provides: bundled(angle) +# Google's fork of OpenSSL +# We cannot build against NSS instead because it no longer works with NSS 3.21: +# HTTPS on, ironically, Google's sites (Google, YouTube, etc.) stops working +# completely and produces only ERR_SSL_PROTOCOL_ERROR errors: +# http://kaosx.us/phpBB3/viewtopic.php?t=1235 +# https://bugs.launchpad.net/ubuntu/+source/chromium-browser/+bug/1520568 +# So we have to do what Chromium now defaults to (since 47): a "chimera build", +# i.e., use the BoringSSL code and the system NSS certificates. +Provides: bundled(boringssl) +Provides: bundled(brotli) +# Don't get too excited. MPEG and other legally problematic stuff is stripped +# out. See clean_qtwebengine.sh, clean_ffmpeg.sh, and +# get_free_ffmpeg_source_files.py. +# see src/3rdparty/chromium/third_party/ffmpeg/Changelog for the version number +Provides: bundled(ffmpeg) = 5.1.2 +Provides: bundled(hunspell) = 1.6.0 +Provides: bundled(iccjpeg) +# bundled as "khronos", headers only +Provides: bundled(khronos_headers) +# bundled as "leveldatabase" +Provides: bundled(leveldb) = 1.23 +# bundled as "libjingle_xmpp" +Provides: bundled(libjingle) +# see src/3rdparty/chromium/third_party/libsrtp/CHANGES for the version number +Provides: bundled(libsrtp) = 2.4.0 +# bundled as "libxml" +# see src/3rdparty/chromium/third_party/libxml/linux/include/libxml/xmlversion.h +Provides: bundled(libxml2) = 2.9.13 +# see src/3rdparty/chromium/third_party/libxslt/linux/config.h for version +Provides: bundled(libxslt) = 1.1.3 +Provides: bundled(libyuv) = 1819 +Provides: bundled(modp_b64) +Provides: bundled(ots) +Provides: bundled(re2) +# see src/3rdparty/chromium/third_party/protobuf/CHANGES.txt for the version +Provides: bundled(protobuf) = 3.13.0.1 +Provides: bundled(qcms) = 4 +Provides: bundled(skia) +# bundled as "smhasher" +Provides: bundled(SMHasher) = 0-147 +Provides: bundled(sqlite) = 3.39.4 +Provides: bundled(usrsctp) +Provides: bundled(webrtc) = 90 + +%ifarch %{ix86} x86_64 +# bundled by ffmpeg and libvpx: +# header (for assembly) only +Provides: bundled(x86inc) +%endif + +# Bundled in src/3rdparty/chromium/base/third_party: +# Check src/3rdparty/chromium/third_party/base/*/README.chromium for version +# numbers, except where specified otherwise. +Provides: bundled(dynamic_annotations) = 4384 +Provides: bundled(superfasthash) = 0 +Provides: bundled(symbolize) +# bundled as "valgrind", headers only +Provides: bundled(valgrind.h) +# bundled as "xdg_mime" +Provides: bundled(xdg-mime) +# bundled as "xdg_user_dirs" +Provides: bundled(xdg-user-dirs) = 0.10 + +# Bundled in src/3rdparty/chromium/net/third_party: +# Check src/3rdparty/chromium/third_party/net/*/README.chromium for version +# numbers, except where specified otherwise. +Provides: bundled(mozilla_security_manager) = 1.9.2 + +# Bundled in src/3rdparty/chromium/url/third_party: +# Check src/3rdparty/chromium/third_party/url/*/README.chromium for version +# numbers, except where specified otherwise. +# bundled as "mozilla", file renamed and modified +Provides: bundled(nsURLParsers) + +# Bundled outside of third_party, apparently not considered as such by Chromium: +Provides: bundled(mojo) +# see src/3rdparty/chromium/v8/include/v8_version.h for the version number +Provides: bundled(v8) = 10.2.154.16 +# bundled by v8 (src/3rdparty/chromium/v8/src/base/ieee754.cc) +# The version number is 5.3, the last version that upstream released, years ago: +# http://www.netlib.org/fdlibm/readme +Provides: bundled(fdlibm) = 5.3 + +%{?_qt6_version:Requires: qt6-qtbase%{?_isa} = %{_qt6_version}} + +%description +%{summary}. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: qt6-qtbase-devel%{?_isa} +Requires: qt6-qtdeclarative-devel%{?_isa} +# not arch'd for now, see if can get away with avoiding multilib'ing -- rex +Requires: %{name}-devtools = %{version}-%{release} +%description devel +%{summary}. + +%package devtools +Summary: WebEngine devtools_resources +Requires: %{name}%{?_isa} = %{version}-%{release} +%description devtools +Support for remote debugging. + +%package examples +Summary: Example files for %{name} + +%description examples +%{summary}. + +%prep +cat %{SOURCE100} %{SOURCE101} > %{SOURCE0} +%setup -q -n %{qt_module}-everywhere-src-%{version} -a20 + +mv pulse src/3rdparty/chromium/ + +pushd src/3rdparty/chromium +popd + +%patch1 -p1 -b .SIOCGSTAMP +%patch2 -p1 -b .link-pipewire +%patch3 -p1 -b .aarch64-new-stat +%patch4 -p1 -b .qtwebengine-ffmpeg-first_dts + +%patch50 -p1 -b .fix-build.patch + +## upstream patches +%patch100 -p1 -b .webrtc-dlopen-h264 + +## upstreamable patches +%patch110 -p1 -b .blink-dlopen-h264 + +# delete all "toolprefix = " lines from build/toolchain/linux/BUILD.gn, as we +# never cross-compile in native Fedora RPMs, fixes ARM and aarch64 FTBFS +sed -i -e '/toolprefix = /d' -e 's/\${toolprefix}//g' \ + src/3rdparty/chromium/build/toolchain/linux/BUILD.gn + +%if 0%{?use_system_re2} +# http://bugzilla.redhat.com/1337585 +# can't just delete, but we'll overwrite with system headers to be on the safe side +cp -bv /usr/include/re2/*.h src/3rdparty/chromium/third_party/re2/src/re2/ +%endif + +# copy the Chromium license so it is installed with the appropriate name +cp -p src/3rdparty/chromium/LICENSE LICENSE.Chromium + +# consider doing this as part of the tarball creation step instead? rdieter +# fix/workaround +# fatal error: QtWebEngineCore/qtwebenginecoreglobal.h: No such file or directory +# if [ ! -f "./include/QtWebEngineCore/qtwebenginecoreglobal.h" ]; then +# {_qt6_libexecdir}/syncqt -version {version} +# fi +# +# # abort if this doesn't get created by syncqt.pl +# test -f "./include/QtWebEngineCore/qtwebenginecoreglobal.h" + + +%build +export STRIP=strip +export NINJAFLAGS="%{__ninja_common_opts}" +export NINJA_PATH=%{__ninja} + +%cmake_qt6 \ + -DCMAKE_TOOLCHAIN_FILE:STRING="%{_libdir}/cmake/Qt6/qt.toolchain.cmake" \ + -DFEATURE_qtpdf_build:BOOL=ON \ + -DFEATURE_webengine_developer_build:BOOL=OFF \ + -DFEATURE_webengine_embedded_build:BOOL=OFF \ + -DFEATURE_webengine_extensions:BOOL=ON \ + -DFEATURE_webengine_kerberos:BOOL=ON \ + -DFEATURE_webengine_native_spellchecker:BOOL=OFF \ + -DFEATURE_webengine_printing_and_pdf:BOOL=ON \ + -DFEATURE_webengine_proprietary_codecs:BOOL=ON \ + -DFEATURE_webengine_system_icu:BOOL=%{?use_system_libicu} \ + -DFEATURE_webengine_system_libevent:BOOL=ON \ + -DFEATURE_webengine_system_ffmpeg:BOOL=ON \ + -DFEATURE_webengine_webrtc:BOOL=ON \ + -DFEATURE_webengine_webrtc_pipewire:BOOL=ON \ + -DQT_BUILD_EXAMPLES:BOOL=ON + +cmake --build . %{?_smp_mflags} --verbose + + +%install +DESTDIR="%{buildroot}" cmake --install . + +# rpm macros +install -p -m644 -D %{SOURCE10} \ + %{buildroot}%{_rpmmacrodir}/macros.qt6-qtwebengine +sed -i \ + -e "s|@@NAME@@|%{name}|g" \ + -e "s|@@EPOCH@@|%{?epoch}%{!?epoch:0}|g" \ + -e "s|@@VERSION@@|%{version}|g" \ + -e "s|@@EVR@@|%{?epoch:%{epoch:}}%{version}-%{release}|g" \ + %{buildroot}%{_rpmmacrodir}/macros.qt6-qtwebengine + +# .prl/.la file love +# nuke .prl reference(s) to %%buildroot, excessive (.la-like) libs +pushd %{buildroot}%{_qt6_libdir} +for prl_file in libQt6*.prl ; do + sed -i -e "/^QMAKE_PRL_BUILD_DIR/d" ${prl_file} + if [ -f "$(basename ${prl_file} .prl).so" ]; then + rm -fv "$(basename ${prl_file} .prl).la" + sed -i -e "/^QMAKE_PRL_LIBS/d" ${prl_file} + fi +done +# explicitly omit, at least until there's a real library installed associated with it -- rex +rm -fv Qt6WebEngineCore.la +popd + +mkdir -p %{buildroot}%{_qtwebengine_dictionaries_dir} + +# adjust cmake dep(s) to allow for using the same Qt6 that was used to build it +# using the lesser of %%version, %%_qt6_version +%global lesser_version $(echo -e "%{version}\\n%{_qt6_version}" | sort -V | head -1) +sed -i -e "s|%{version} \${_Qt6WebEngine|%{lesser_version} \${_Qt6WebEngine|" \ + %{buildroot}%{_qt6_libdir}/cmake/Qt6WebEngine*/Qt6WebEngine*Config.cmake + + +#%filetriggerin -- %{_datadir}/myspell +%filetriggerin -- %{_datadir}/hunspell + +while read filename ; do + case "$filename" in + *.dic) + bdicname=%{_qtwebengine_dictionaries_dir}/`basename -s .dic "$filename"`.bdic + %{_qt6_libdir}/qt6/libexec/qwebengine_convert_dict "$filename" "$bdicname" &> /dev/null || : + ;; + esac +done + +%files +%license LICENSE.* +%if 0%{?docs} +%license src/webengine/doc/src/qtwebengine-3rdparty.qdoc +%endif +%{_qt6_libdir}/libQt6Pdf.so.* +%{_qt6_libdir}/libQt6PdfQuick.so.* +%{_qt6_libdir}/libQt6PdfWidgets.so.* +%{_qt6_libdir}/libQt6WebEngineCore.so.* +%{_qt6_libdir}/libQt6WebEngineQuick.so.* +%{_qt6_libdir}/libQt6WebEngineQuickDelegatesQml.so.* +%{_qt6_libdir}/libQt6WebEngineWidgets.so.* +%{_qt6_libdir}/qt6/libexec/gn +%{_qt6_libdir}/qt6/libexec/qwebengine_convert_dict +%{_qt6_libdir}/qt6/libexec/QtWebEngineProcess +%dir %{_qt6_libdir}/qt6/qml/QtQuick/Pdf +%{_qt6_libdir}/qt6/qml/QtQuick/Pdf/* +%dir %{_qt6_libdir}/qt6/qml/QtWebEngine +%{_qt6_libdir}/qt6/qml/QtWebEngine/* +#%{_qt6_plugindir}/designer/libqwebengineview.so +%{_qt6_plugindir}/imageformats/libqpdf.so +%dir %{_qt6_datadir}/resources/ +%{_qt6_datadir}/resources/qtwebengine_resources.pak +%{_qt6_datadir}/resources/qtwebengine_resources_100p.pak +%{_qt6_datadir}/resources/qtwebengine_resources_200p.pak +%dir %{_qtwebengine_dictionaries_dir} +%dir %{_qt6_translationdir}/qtwebengine_locales +%lang(am) %{_qt6_translationdir}/qtwebengine_locales/am.pak +%lang(ar) %{_qt6_translationdir}/qtwebengine_locales/ar.pak +%lang(bg) %{_qt6_translationdir}/qtwebengine_locales/bg.pak +%lang(bn) %{_qt6_translationdir}/qtwebengine_locales/bn.pak +%lang(ca) %{_qt6_translationdir}/qtwebengine_locales/ca.pak +%lang(cs) %{_qt6_translationdir}/qtwebengine_locales/cs.pak +%lang(da) %{_qt6_translationdir}/qtwebengine_locales/da.pak +%lang(de) %{_qt6_translationdir}/qtwebengine_locales/de.pak +%lang(el) %{_qt6_translationdir}/qtwebengine_locales/el.pak +%lang(en) %{_qt6_translationdir}/qtwebengine_locales/en-GB.pak +%lang(en) %{_qt6_translationdir}/qtwebengine_locales/en-US.pak +%lang(es) %{_qt6_translationdir}/qtwebengine_locales/es-419.pak +%lang(es) %{_qt6_translationdir}/qtwebengine_locales/es.pak +%lang(et) %{_qt6_translationdir}/qtwebengine_locales/et.pak +%lang(fa) %{_qt6_translationdir}/qtwebengine_locales/fa.pak +%lang(fi) %{_qt6_translationdir}/qtwebengine_locales/fi.pak +%lang(fil) %{_qt6_translationdir}/qtwebengine_locales/fil.pak +%lang(fr) %{_qt6_translationdir}/qtwebengine_locales/fr.pak +%lang(gu) %{_qt6_translationdir}/qtwebengine_locales/gu.pak +%lang(he) %{_qt6_translationdir}/qtwebengine_locales/he.pak +%lang(hi) %{_qt6_translationdir}/qtwebengine_locales/hi.pak +%lang(hr) %{_qt6_translationdir}/qtwebengine_locales/hr.pak +%lang(hu) %{_qt6_translationdir}/qtwebengine_locales/hu.pak +%lang(id) %{_qt6_translationdir}/qtwebengine_locales/id.pak +%lang(it) %{_qt6_translationdir}/qtwebengine_locales/it.pak +%lang(ja) %{_qt6_translationdir}/qtwebengine_locales/ja.pak +%lang(kn) %{_qt6_translationdir}/qtwebengine_locales/kn.pak +%lang(ko) %{_qt6_translationdir}/qtwebengine_locales/ko.pak +%lang(lt) %{_qt6_translationdir}/qtwebengine_locales/lt.pak +%lang(lv) %{_qt6_translationdir}/qtwebengine_locales/lv.pak +%lang(ml) %{_qt6_translationdir}/qtwebengine_locales/ml.pak +%lang(mr) %{_qt6_translationdir}/qtwebengine_locales/mr.pak +%lang(ms) %{_qt6_translationdir}/qtwebengine_locales/ms.pak +%lang(nb) %{_qt6_translationdir}/qtwebengine_locales/nb.pak +%lang(nl) %{_qt6_translationdir}/qtwebengine_locales/nl.pak +%lang(pl) %{_qt6_translationdir}/qtwebengine_locales/pl.pak +%lang(pt_BR) %{_qt6_translationdir}/qtwebengine_locales/pt-BR.pak +%lang(pt_PT) %{_qt6_translationdir}/qtwebengine_locales/pt-PT.pak +%lang(ro) %{_qt6_translationdir}/qtwebengine_locales/ro.pak +%lang(ru) %{_qt6_translationdir}/qtwebengine_locales/ru.pak +%lang(sk) %{_qt6_translationdir}/qtwebengine_locales/sk.pak +%lang(sl) %{_qt6_translationdir}/qtwebengine_locales/sl.pak +%lang(sr) %{_qt6_translationdir}/qtwebengine_locales/sr.pak +%lang(sv) %{_qt6_translationdir}/qtwebengine_locales/sv.pak +%lang(sw) %{_qt6_translationdir}/qtwebengine_locales/sw.pak +%lang(ta) %{_qt6_translationdir}/qtwebengine_locales/ta.pak +%lang(te) %{_qt6_translationdir}/qtwebengine_locales/te.pak +%lang(th) %{_qt6_translationdir}/qtwebengine_locales/th.pak +%lang(tr) %{_qt6_translationdir}/qtwebengine_locales/tr.pak +%lang(uk) %{_qt6_translationdir}/qtwebengine_locales/uk.pak +%lang(vi) %{_qt6_translationdir}/qtwebengine_locales/vi.pak +%lang(zh_CN) %{_qt6_translationdir}/qtwebengine_locales/zh-CN.pak +%lang(zh_TW) %{_qt6_translationdir}/qtwebengine_locales/zh-TW.pak + +%files devel +%{_rpmmacrodir}/macros.qt6-qtwebengine +%dir %{_qt6_headerdir}/QtPdf +%{_qt6_headerdir}/QtPdf/* +%dir %{_qt6_headerdir}/QtPdfQuick +%{_qt6_headerdir}/QtPdfQuick/* +%dir %{_qt6_headerdir}/QtPdfWidgets +%{_qt6_headerdir}/QtPdfWidgets/* +%dir %{_qt6_headerdir}/QtWebEngineCore +%{_qt6_headerdir}/QtWebEngineCore/* +%dir %{_qt6_headerdir}/QtWebEngineQuick +%{_qt6_headerdir}/QtWebEngineQuick/* +%dir %{_qt6_headerdir}/QtWebEngineWidgets +%{_qt6_headerdir}/QtWebEngineWidgets/* +%{_qt6_libdir}/qt6/metatypes/*.json +%{_qt6_libdir}/qt6/modules/*.json +%{_qt6_libdir}/libQt6Pdf.so +%{_qt6_libdir}/libQt6PdfQuick.so +%{_qt6_libdir}/libQt6PdfWidgets.so +%{_qt6_libdir}/libQt6WebEngineCore.so +%{_qt6_libdir}/libQt6WebEngineQuick.so +%{_qt6_libdir}/libQt6WebEngineQuickDelegatesQml.so +%{_qt6_libdir}/libQt6WebEngineWidgets.so +%{_qt6_libdir}/libQt6WebEngineCore.prl +%{_qt6_libdir}/libQt6Pdf.prl +%{_qt6_libdir}/libQt6PdfQuick.prl +%{_qt6_libdir}/libQt6PdfWidgets.prl +%{_qt6_libdir}/libQt6WebEngineQuick.prl +%{_qt6_libdir}/libQt6WebEngineQuickDelegatesQml.prl +%{_qt6_libdir}/libQt6WebEngineWidgets.prl +%{_qt6_libdir}/cmake/Qt6/*.cmake +%{_qt6_libdir}/cmake/Qt6BuildInternals/StandaloneTests +%{_qt6_libdir}/cmake/Qt6Gui/*.cmake +%{_qt6_libdir}/cmake/Qt6Qml/QmlPlugins/*.cmake +#%dir %{_qt6_libdir}/cmake/Qt6Designer +#%{_qt6_libdir}/cmake/Qt6Designer/*.cmake +%dir %{_qt6_libdir}/cmake/Qt6Pdf +%{_qt6_libdir}/cmake/Qt6Pdf/*.cmake +%dir %{_qt6_libdir}/cmake/Qt6PdfQuick +%{_qt6_libdir}/cmake/Qt6PdfQuick/*.cmake +%dir %{_qt6_libdir}/cmake/Qt6PdfWidgets +%{_qt6_libdir}/cmake/Qt6PdfWidgets/*.cmake +%dir %{_qt6_libdir}/cmake/Qt6WebEngineQuick +%{_qt6_libdir}/cmake/Qt6WebEngineQuick/*.cmake +%dir %{_qt6_libdir}/cmake/Qt6WebEngineWidgets +%{_qt6_libdir}/cmake/Qt6WebEngineWidgets/*.cmake +%dir %{_qt6_libdir}/cmake/Qt6WebEngineCore +%{_qt6_libdir}/cmake/Qt6WebEngineCore/*.cmake +%dir %{_qt6_libdir}/cmake/Qt6WebEngineCoreTools +%{_qt6_libdir}/cmake/Qt6WebEngineCoreTools/*.cmake +%dir %{_qt6_libdir}/cmake/Qt6WebEngineQuickDelegatesQml +%{_qt6_libdir}/cmake/Qt6WebEngineQuickDelegatesQml/*.cmake +%{_qt6_libdir}/pkgconfig/Qt6Pdf.pc +%{_qt6_libdir}/pkgconfig/Qt6PdfQuick.pc +%{_qt6_libdir}/pkgconfig/Qt6PdfWidgets.pc +%{_qt6_libdir}/pkgconfig/Qt6WebEngineCore.pc +%{_qt6_libdir}/pkgconfig/Qt6WebEngineQuick.pc +%{_qt6_libdir}/pkgconfig/Qt6WebEngineQuickDelegatesQml.pc +%{_qt6_libdir}/pkgconfig/Qt6WebEngineWidgets.pc +%{_qt6_archdatadir}/mkspecs/modules/*.pri + +%files devtools +%{_qt6_datadir}/resources/qtwebengine_devtools_resources.pak + +%files examples +%{_qt6_examplesdir}/ + +%if 0%{?docs} +%files doc +%{_qt6_docdir}/* +%endif + + +%changelog +* Wed Aug 02 2023 peijiankang - 6.5.0-1 +- Init Package 6.5.0 + diff --git a/qt6-qtwebengine.yaml b/qt6-qtwebengine.yaml new file mode 100644 index 0000000000000000000000000000000000000000..445c044e85fe50d68572e0cafa26e8e2c0374487 --- /dev/null +++ b/qt6-qtwebengine.yaml @@ -0,0 +1,4 @@ +version_control: git +src_repo: https://code.qt.io/qt/qtwebengine.git +tag_prefix: "^" +separator: "." diff --git a/qtwebengine-SIOCGSTAMP.patch b/qtwebengine-SIOCGSTAMP.patch new file mode 100644 index 0000000000000000000000000000000000000000..7609f8545a514786e6f400f910e6aaee97278b58 --- /dev/null +++ b/qtwebengine-SIOCGSTAMP.patch @@ -0,0 +1,16 @@ +diff --git a/src/3rdparty/chromium/third_party/webrtc/rtc_base/physical_socket_server.cc b/src/3rdparty/chromium/third_party/webrtc/rtc_base/physical_socket_server.cc +index c38d7fdfa..0a8b0fd8b 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/rtc_base/physical_socket_server.cc ++++ b/src/3rdparty/chromium/third_party/webrtc/rtc_base/physical_socket_server.cc +@@ -72,6 +72,11 @@ typedef void* SockOptArg; + + #if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(__native_client__) + ++// Seems that kernel 5.2.0 renames this define to SIOCGSTAMP_OLD ++#ifndef SIOCGSTAMP ++#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */ ++#endif ++ + int64_t GetSocketRecvTimestamp(int socket) { + struct timeval tv_ioctl; + int ret = ioctl(socket, SIOCGSTAMP, &tv_ioctl); diff --git a/qtwebengine-aarch64-new-stat.patch b/qtwebengine-aarch64-new-stat.patch new file mode 100644 index 0000000000000000000000000000000000000000..2b17be4dce221bcccd67e138cdb54c46aa45faae --- /dev/null +++ b/qtwebengine-aarch64-new-stat.patch @@ -0,0 +1,12 @@ +diff -up qtwebengine-everywhere-src-5.11.3/src/3rdparty/chromium/sandbox/linux/system_headers/arm64_linux_syscalls.h.aarch64-new-stat qtwebengine-everywhere-src-5.11.3/src/3rdparty/chromium/sandbox/linux/system_headers/arm64_linux_syscalls.h +--- qtwebengine-everywhere-src-5.11.3/src/3rdparty/chromium/sandbox/linux/system_headers/arm64_linux_syscalls.h.aarch64-new-stat 2018-11-19 12:55:45.000000000 -0600 ++++ qtwebengine-everywhere-src-5.11.3/src/3rdparty/chromium/sandbox/linux/system_headers/arm64_linux_syscalls.h 2018-12-08 21:16:39.931896244 -0600 +@@ -5,6 +5,8 @@ + #ifndef SANDBOX_LINUX_SYSTEM_HEADERS_ARM64_LINUX_SYSCALLS_H_ + #define SANDBOX_LINUX_SYSTEM_HEADERS_ARM64_LINUX_SYSCALLS_H_ + ++#define __ARCH_WANT_NEW_STAT ++ + #include + + #if !defined(__NR_io_setup) diff --git a/qtwebengine-blink-dlopen-h264.patch b/qtwebengine-blink-dlopen-h264.patch new file mode 100644 index 0000000000000000000000000000000000000000..5cf7cc470f40a83a16a575ead94ff808d3743a0e --- /dev/null +++ b/qtwebengine-blink-dlopen-h264.patch @@ -0,0 +1,154 @@ +From 828d03c76b3b108019b1cf66062b0e9679012207 Mon Sep 17 00:00:00 2001 +From: Jan Grulich +Date: Mon, 23 Jan 2023 11:04:00 +0100 +Subject: [Blink] mediarecorder: allow to dlopen openh264 + + +diff --git a/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/BUILD.gn b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/BUILD.gn +index cf6de49bef6b2..61e8879d6b97f 100644 +--- a/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/BUILD.gn ++++ b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/BUILD.gn +@@ -5,12 +5,23 @@ + import("//build/buildflag_header.gni") + import("//third_party/blink/renderer/modules/modules.gni") + import("//third_party/webrtc/webrtc.gni") ++import("//tools/generate_stubs/rules.gni") + + buildflag_header("buildflags") { + header = "buildflags.h" + flags = [ "RTC_USE_H264=$rtc_use_h264" ] + } + ++if (rtc_use_h264 && rtc_dlopen_openh264) { ++ # When OpenH264 is not directly linked, use stubs to allow for dlopening of ++ # the binary. ++ generate_stubs("openh264_stubs") { ++ extra_header = "openh264_stub_header.fragment" ++ output_name = "openh264_stubs" ++ sigs = [ "openh264.sigs" ] ++ } ++} ++ + blink_modules_sources("mediarecorder") { + sources = [ + "audio_track_encoder.cc", +@@ -56,6 +67,11 @@ blink_modules_sources("mediarecorder") { + "h264_encoder.h", + ] + +- deps += [ "//third_party/openh264:encoder" ] ++ if (rtc_dlopen_openh264) { ++ defines = [ "BLINK_DLOPEN_OPENH264" ] ++ deps += [ ":openh264_stubs" ] ++ } else { ++ deps += [ "//third_party/openh264:encoder" ] ++ } + } + } +diff --git a/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc +index c9aee6f3a..0f4ef593d 100644 +--- a/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc ++++ b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/h264_encoder.cc +@@ -24,10 +24,22 @@ + #include "third_party/openh264/src/codec/api/svc/codec_def.h" + #include "ui/gfx/geometry/size.h" + ++#if defined(BLINK_DLOPEN_OPENH264) ++#include "third_party/blink/renderer/modules/mediarecorder/openh264_stubs.h" ++#endif // defined(BLINK_DLOPEN_OPENH264) ++ + namespace blink { + + namespace { + ++#if defined(BLINK_DLOPEN_OPENH264) ++using third_party_blink_renderer_modules_mediarecorder::InitializeStubs; ++using third_party_blink_renderer_modules_mediarecorder::kModuleOpenh264; ++using third_party_blink_renderer_modules_mediarecorder::StubPathMap; ++ ++static constexpr char kOpenH264Lib[] = "libopenh264.so.7"; ++#endif ++ + absl::optional ToOpenH264Profile( + media::VideoCodecProfile profile) { + static const HashMap +@@ -98,6 +110,13 @@ H264Encoder::H264Encoder( + codec_profile_(codec_profile) { + DCHECK(encoding_thread_); + DCHECK_EQ(codec_profile_.codec_id, VideoTrackRecorder::CodecId::kH264); ++ ++#if defined(BLINK_DLOPEN_OPENH264) ++ StubPathMap paths; ++ paths[kModuleOpenh264].push_back(kOpenH264Lib); ++ ++ openh264_dlopened_ = InitializeStubs(paths); ++#endif + } + + H264Encoder::~H264Encoder() { +@@ -180,6 +199,14 @@ void H264Encoder::EncodeOnEncodingTaskRunner( + bool H264Encoder::ConfigureEncoderOnEncodingTaskRunner(const gfx::Size& size) { + TRACE_EVENT0("media", "H264Encoder::ConfigureEncoderOnEncodingTaskRunner"); + DCHECK(encoding_task_runner_->RunsTasksInCurrentSequence()); ++ ++#if defined(BLINK_DLOPEN_OPENH264) ++ if (!openh264_dlopened_) { ++ NOTREACHED() << "Failed to dlopen openh264"; ++ return false; ++ } ++#endif ++ + ISVCEncoder* temp_encoder = nullptr; + if (WelsCreateSVCEncoder(&temp_encoder) != 0) { + NOTREACHED() << "Failed to create OpenH264 encoder"; +diff --git a/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/h264_encoder.h b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/h264_encoder.h +index e7aa2c338..79e902f67 100644 +--- a/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/h264_encoder.h ++++ b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/h264_encoder.h +@@ -62,6 +62,8 @@ class MODULES_EXPORT H264Encoder final : public VideoTrackRecorder::Encoder { + // The |VideoFrame::timestamp()| of the first received frame. Only used on + // VideoTrackRecorder::Encoder::encoding_thread_. + base::TimeTicks first_frame_timestamp_; ++ ++ bool openh264_dlopened_ = false; + }; + + } // namespace blink + +diff --git a/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/openh264.sigs b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/openh264.sigs +new file mode 100644 +index 0000000000000..4924f8e9a17de +--- /dev/null ++++ b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/openh264.sigs +@@ -0,0 +1,14 @@ ++// Copyright 2022 The WebRTC project authors. All rights reserved. ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++//------------------------------------------------ ++// Functions from OpenH264. ++//------------------------------------------------ ++int WelsCreateSVCEncoder(ISVCEncoder **ppEncoder); ++void WelsDestroySVCEncoder(ISVCEncoder *pEncoder); ++int WelsGetDecoderCapability(SDecoderCapability *pDecCapability); ++long WelsCreateDecoder(ISVCDecoder **ppDecoder); ++void WelsDestroyDecoder(ISVCDecoder *pDecoder); ++OpenH264Version WelsGetCodecVersion(void); ++void WelsGetCodecVersionEx(OpenH264Version *pVersion); +diff --git a/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/openh264_stub_header.fragment b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/openh264_stub_header.fragment +new file mode 100644 +index 0000000000000..9bc0a7cbee038 +--- /dev/null ++++ b/src/3rdparty/chromium/third_party/blink/renderer/modules/mediarecorder/openh264_stub_header.fragment +@@ -0,0 +1,11 @@ ++// The extra include header needed in the generated stub file for defining ++// various OpenH264 types. ++ ++extern "C" { ++ ++#include "third_party/openh264/src/codec/api/svc/codec_api.h" ++#include "third_party/openh264/src/codec/api/svc/codec_app_def.h" ++#include "third_party/openh264/src/codec/api/svc/codec_def.h" ++#include "third_party/openh264/src/codec/api/svc/codec_ver.h" ++ ++} diff --git a/qtwebengine-everywhere-src-6.5.0-clean.tar.xz b/qtwebengine-everywhere-src-6.5.0-clean.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..efcb81650051270bcee1a9949a2de758d0aaebc5 Binary files /dev/null and b/qtwebengine-everywhere-src-6.5.0-clean.tar.xz differ diff --git a/qtwebengine-everywhere-src-6.5.0-clean.tar.xz.0 b/qtwebengine-everywhere-src-6.5.0-clean.tar.xz.0 new file mode 100644 index 0000000000000000000000000000000000000000..78365dc40bbc1d836c742a53781da133ac215465 Binary files /dev/null and b/qtwebengine-everywhere-src-6.5.0-clean.tar.xz.0 differ diff --git a/qtwebengine-everywhere-src-6.5.0-clean.tar.xz.1 b/qtwebengine-everywhere-src-6.5.0-clean.tar.xz.1 new file mode 100644 index 0000000000000000000000000000000000000000..2f791a7f917dfecd9434296d7cff6f45252069fa Binary files /dev/null and b/qtwebengine-everywhere-src-6.5.0-clean.tar.xz.1 differ diff --git a/qtwebengine-ffmpeg-first_dts.patch b/qtwebengine-ffmpeg-first_dts.patch new file mode 100644 index 0000000000000000000000000000000000000000..0d8a3e8b6a0bd2ee035321eec7b422045983f7e7 --- /dev/null +++ b/qtwebengine-ffmpeg-first_dts.patch @@ -0,0 +1,168 @@ +diff --git a/configure.cmake b/configure.cmake +index b20ab3b65..c41f66301 100644 +--- a/configure.cmake ++++ b/configure.cmake +@@ -203,25 +203,6 @@ int main(void){ + }" + ) + +-qt_config_compile_test(libavformat +- LABEL "libavformat" +- LIBRARIES +- PkgConfig::FFMPEG +- CODE +-" +-#include \"libavformat/version.h\" +-extern \"C\" { +-#include \"libavformat/avformat.h\" +-} +-int main(void) { +-#if LIBAVFORMAT_VERSION_MAJOR >= 59 +- AVStream stream; +- auto first_dts = av_stream_get_first_dts(&stream); +-#endif +- return 0; +-}" +-) +- + #### Features + + qt_feature("qtwebengine-build" PUBLIC +@@ -542,11 +523,6 @@ add_check_for_support( + CONDITION NOT LINUX OR DBUS_FOUND + MESSAGE "Build requires dbus." + ) +-add_check_for_support( +- MODULES QtWebEngine +- CONDITION NOT LINUX OR NOT QT_FEATURE_webengine_system_ffmpeg OR TEST_libavformat +- MESSAGE "Unmodified ffmpeg >= 5.0 is not supported." +-) + # FIXME: This prevents non XCB Linux builds from building: + set(xcbSupport X11 LIBDRM XCOMPOSITE XCURSOR XRANDR XI XPROTO XSHMFENCE XTST) + foreach(xs ${xcbSupport}) +diff --git a/src/3rdparty/chromium/AUTHORS b/src/3rdparty/chromium/AUTHORS +index 8d638184b..80e4a9b35 100644 +--- a/src/3rdparty/chromium/AUTHORS ++++ b/src/3rdparty/chromium/AUTHORS +@@ -94,6 +94,7 @@ Andra Paraschiv + Andras Tokodi + Andreas Nazlidis + Andreas Papacharalampous ++Andreas Schneider + Andrei Borza + Andrei Parvu + Andrei Parvu +diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc b/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc +index 7b709d70d..d97b6b4d0 100644 +--- a/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc ++++ b/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.cc +@@ -58,7 +58,7 @@ namespace media { + + namespace { + +-constexpr int64_t kInvalidPTSMarker = static_cast(0x8000000000000000); ++constexpr int64_t kRelativeTsBase = static_cast(0x7ffeffffffffffff); + + void SetAVStreamDiscard(AVStream* stream, AVDiscard discard) { + DCHECK(stream); +@@ -101,7 +101,7 @@ static base::TimeDelta FramesToTimeDelta(int frames, double sample_rate) { + sample_rate); + } + +-static base::TimeDelta ExtractStartTime(AVStream* stream) { ++static base::TimeDelta ExtractStartTime(AVStream* stream, int64_t first_dts) { + // The default start time is zero. + base::TimeDelta start_time; + +@@ -111,12 +111,12 @@ static base::TimeDelta ExtractStartTime(AVStream* stream) { + + // Next try to use the first DTS value, for codecs where we know PTS == DTS + // (excludes all H26x codecs). The start time must be returned in PTS. +- if (av_stream_get_first_dts(stream) != kInvalidPTSMarker && ++ if (first_dts != AV_NOPTS_VALUE && + stream->codecpar->codec_id != AV_CODEC_ID_HEVC && + stream->codecpar->codec_id != AV_CODEC_ID_H264 && + stream->codecpar->codec_id != AV_CODEC_ID_MPEG4) { + const base::TimeDelta first_pts = +- ConvertFromTimeBase(stream->time_base, av_stream_get_first_dts(stream)); ++ ConvertFromTimeBase(stream->time_base, first_dts); + if (first_pts < start_time) + start_time = first_pts; + } +@@ -285,6 +285,7 @@ FFmpegDemuxerStream::FFmpegDemuxerStream( + fixup_negative_timestamps_(false), + fixup_chained_ogg_(false), + num_discarded_packet_warnings_(0), ++ first_dts_(AV_NOPTS_VALUE), + last_packet_pos_(AV_NOPTS_VALUE), + last_packet_dts_(AV_NOPTS_VALUE) { + DCHECK(demuxer_); +@@ -351,6 +352,11 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) { + int64_t packet_dts = + packet->dts == AV_NOPTS_VALUE ? packet->pts : packet->dts; + ++ if (first_dts_ == AV_NOPTS_VALUE && packet->dts != AV_NOPTS_VALUE && ++ last_packet_dts_ != AV_NOPTS_VALUE) { ++ first_dts_ = packet->dts - (last_packet_dts_ + kRelativeTsBase); ++ } ++ + // Chained ogg files have non-monotonically increasing position and time stamp + // values, which prevents us from using them to determine if a packet should + // be dropped. Since chained ogg is only allowed on single track audio only +@@ -698,6 +704,7 @@ void FFmpegDemuxerStream::FlushBuffers(bool preserve_packet_position) { + ResetBitstreamConverter(); + + if (!preserve_packet_position) { ++ first_dts_ = AV_NOPTS_VALUE; + last_packet_pos_ = AV_NOPTS_VALUE; + last_packet_dts_ = AV_NOPTS_VALUE; + } +@@ -1449,7 +1456,8 @@ void FFmpegDemuxer::OnFindStreamInfoDone(int result) { + + max_duration = std::max(max_duration, streams_[i]->duration()); + +- base::TimeDelta start_time = ExtractStartTime(stream); ++ base::TimeDelta start_time = ++ ExtractStartTime(stream, streams_[i]->first_dts()); + + // Note: This value is used for seeking, so we must take the true value and + // not the one possibly clamped to zero below. +@@ -1606,7 +1614,7 @@ FFmpegDemuxerStream* FFmpegDemuxer::FindStreamWithLowestStartTimestamp( + for (const auto& stream : streams_) { + if (!stream || stream->IsEnabled() != enabled) + continue; +- if (av_stream_get_first_dts(stream->av_stream()) == kInvalidPTSMarker) ++ if (stream->first_dts() == AV_NOPTS_VALUE) + continue; + if (!lowest_start_time_stream || + stream->start_time() < lowest_start_time_stream->start_time()) { +@@ -1627,7 +1635,7 @@ FFmpegDemuxerStream* FFmpegDemuxer::FindPreferredStreamForSeeking( + if (stream->type() != DemuxerStream::VIDEO) + continue; + +- if (av_stream_get_first_dts(stream->av_stream()) == kInvalidPTSMarker) ++ if (stream->first_dts() == AV_NOPTS_VALUE) + continue; + + if (!stream->IsEnabled()) +diff --git a/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.h b/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.h +index 45ab0f348..6b093318f 100644 +--- a/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.h ++++ b/src/3rdparty/chromium/media/filters/ffmpeg_demuxer.h +@@ -152,6 +152,8 @@ class MEDIA_EXPORT FFmpegDemuxerStream : public DemuxerStream { + base::TimeDelta start_time() const { return start_time_; } + void set_start_time(base::TimeDelta time) { start_time_ = time; } + ++ int64_t first_dts() const { return first_dts_; } ++ + private: + friend class FFmpegDemuxerTest; + +@@ -209,6 +211,7 @@ class MEDIA_EXPORT FFmpegDemuxerStream : public DemuxerStream { + bool fixup_chained_ogg_; + + int num_discarded_packet_warnings_; ++ int64_t first_dts_; + int64_t last_packet_pos_; + int64_t last_packet_dts_; + }; diff --git a/qtwebengine-fix-build.patch b/qtwebengine-fix-build.patch new file mode 100644 index 0000000000000000000000000000000000000000..4ce1d039c49448ca198c09118d74727dac60b7ed --- /dev/null +++ b/qtwebengine-fix-build.patch @@ -0,0 +1,515 @@ +diff --git a/src/3rdparty/chromium/base/debug/profiler.h b/src/3rdparty/chromium/base/debug/profiler.h +index 5f0deadd5..803de8f2b 100644 +--- a/src/3rdparty/chromium/base/debug/profiler.h ++++ b/src/3rdparty/chromium/base/debug/profiler.h +@@ -5,6 +5,7 @@ + #ifndef BASE_DEBUG_PROFILER_H_ + #define BASE_DEBUG_PROFILER_H_ + ++#include + #include + + #include +diff --git a/src/3rdparty/chromium/cc/trees/target_property.cc b/src/3rdparty/chromium/cc/trees/target_property.cc +index f6e873a01..5f952c5ed 100644 +--- a/src/3rdparty/chromium/cc/trees/target_property.cc ++++ b/src/3rdparty/chromium/cc/trees/target_property.cc +@@ -6,6 +6,8 @@ + + #include "ui/gfx/animation/keyframe/target_property.h" + ++#include ++ + namespace cc { + + static_assert(TargetProperty::LAST_TARGET_PROPERTY < +diff --git a/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h b/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h +index b39a2d3dc..ca3d8aeda 100644 +--- a/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h ++++ b/src/3rdparty/chromium/components/viz/common/shared_element_resource_id.h +@@ -5,6 +5,7 @@ + #ifndef COMPONENTS_VIZ_COMMON_SHARED_ELEMENT_RESOURCE_ID_H_ + #define COMPONENTS_VIZ_COMMON_SHARED_ELEMENT_RESOURCE_ID_H_ + ++#include + #include + #include + +diff --git a/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h b/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h +index ee75332f0..c0168281e 100644 +--- a/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h ++++ b/src/3rdparty/chromium/content/public/browser/browsing_data_remover_delegate.h +@@ -5,6 +5,7 @@ + #ifndef CONTENT_PUBLIC_BROWSER_BROWSING_DATA_REMOVER_DELEGATE_H_ + #define CONTENT_PUBLIC_BROWSER_BROWSING_DATA_REMOVER_DELEGATE_H_ + ++#include + #include + #include + #include "base/callback_forward.h" +diff --git a/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc b/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc +index c62a00ee0..af54520b7 100644 +--- a/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc ++++ b/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc +@@ -6,6 +6,8 @@ + + #include "base/threading/platform_thread.h" + ++#include ++ + namespace device { + + OneWriterSeqLock::OneWriterSeqLock() : sequence_(0) {} +diff --git a/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h b/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h +index 528b6683c..e37a16b81 100644 +--- a/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h ++++ b/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.h +@@ -6,6 +6,7 @@ + #define DEVICE_BASE_SYNCHRONIZATION_ONE_WRITER_SEQLOCK_H_ + + #include ++#include + #include + + #include "base/atomicops.h" +diff --git a/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h b/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h +index 816d3405e..15c4004c0 100644 +--- a/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h ++++ b/src/3rdparty/chromium/device/bluetooth/public/cpp/bluetooth_uuid.h +@@ -5,6 +5,7 @@ + #ifndef DEVICE_BLUETOOTH_PUBLIC_CPP_BLUETOOTH_UUID_H_ + #define DEVICE_BLUETOOTH_PUBLIC_CPP_BLUETOOTH_UUID_H_ + ++#include + #include + #include + #include +diff --git a/src/3rdparty/chromium/extensions/common/constants.h b/src/3rdparty/chromium/extensions/common/constants.h +index bf6bac2b4..51c534509 100644 +--- a/src/3rdparty/chromium/extensions/common/constants.h ++++ b/src/3rdparty/chromium/extensions/common/constants.h +@@ -10,6 +10,8 @@ + #include "build/chromeos_buildflags.h" + #include "extensions/common/extensions_export.h" + ++#include ++ + namespace extensions { + + // Scheme we serve extension content from. +diff --git a/src/3rdparty/chromium/gpu/config/gpu_feature_info.h b/src/3rdparty/chromium/gpu/config/gpu_feature_info.h +index 1a7028e47..b9e951c0a 100644 +--- a/src/3rdparty/chromium/gpu/config/gpu_feature_info.h ++++ b/src/3rdparty/chromium/gpu/config/gpu_feature_info.h +@@ -5,6 +5,7 @@ + #ifndef GPU_CONFIG_GPU_FEATURE_INFO_H_ + #define GPU_CONFIG_GPU_FEATURE_INFO_H_ + ++#include + #include + #include + +diff --git a/src/3rdparty/chromium/gpu/config/gpu_util.h b/src/3rdparty/chromium/gpu/config/gpu_util.h +index 574aca1ff..fca32671c 100644 +--- a/src/3rdparty/chromium/gpu/config/gpu_util.h ++++ b/src/3rdparty/chromium/gpu/config/gpu_util.h +@@ -5,6 +5,8 @@ + #ifndef GPU_CONFIG_GPU_UTIL_H_ + #define GPU_CONFIG_GPU_UTIL_H_ + ++#include ++ + #include "build/build_config.h" + #include "gpu/config/gpu_feature_info.h" + #include "gpu/gpu_export.h" +diff --git a/src/3rdparty/chromium/net/base/parse_number.h b/src/3rdparty/chromium/net/base/parse_number.h +index d6adf388e..560e692aa 100644 +--- a/src/3rdparty/chromium/net/base/parse_number.h ++++ b/src/3rdparty/chromium/net/base/parse_number.h +@@ -8,6 +8,8 @@ + #include "base/strings/string_piece.h" + #include "net/base/net_export.h" + ++#include ++ + // This file contains utility functions for parsing numbers, in the context of + // network protocols. + // +diff --git a/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h b/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h +index 5f289ddcd..44f2f9eb1 100644 +--- a/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h ++++ b/src/3rdparty/chromium/net/cookies/cookie_inclusion_status.h +@@ -6,6 +6,7 @@ + #define NET_COOKIES_COOKIE_INCLUSION_STATUS_H_ + + #include ++#include + #include + #include + #include +diff --git a/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h b/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h +index 6a300ed0c..3e30f1cb0 100644 +--- a/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h ++++ b/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/crypto/quic_hkdf.h +@@ -5,6 +5,7 @@ + #ifndef QUICHE_QUIC_CORE_CRYPTO_QUIC_HKDF_H_ + #define QUICHE_QUIC_CORE_CRYPTO_QUIC_HKDF_H_ + ++#include + #include + + #include "absl/strings/string_view.h" +diff --git a/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h b/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h +index 52f150172..db4d31084 100644 +--- a/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h ++++ b/src/3rdparty/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id.h +@@ -5,6 +5,7 @@ + #ifndef QUICHE_QUIC_CORE_QUIC_CONNECTION_ID_H_ + #define QUICHE_QUIC_CORE_QUIC_CONNECTION_ID_H_ + ++#include + #include + #include + +diff --git a/src/3rdparty/chromium/pdf/document_attachment_info.h b/src/3rdparty/chromium/pdf/document_attachment_info.h +index e0fffc2ca..095463fcb 100644 +--- a/src/3rdparty/chromium/pdf/document_attachment_info.h ++++ b/src/3rdparty/chromium/pdf/document_attachment_info.h +@@ -5,6 +5,7 @@ + #ifndef PDF_DOCUMENT_ATTACHMENT_INFO_H_ + #define PDF_DOCUMENT_ATTACHMENT_INFO_H_ + ++#include + #include + + +diff --git a/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h b/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h +index 7c0dcdecb..97054d476 100644 +--- a/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h ++++ b/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h +@@ -38,6 +38,10 @@ namespace pp { + /// As a further optimization, we can add support for this later. + class ThreadSafeThreadTraits { + public: ++ ++ typedef pp::Lock Lock; ++ typedef pp::AutoLock AutoLock; ++ + class RefCount { + public: + /// Default constructor. In debug mode, this checks that the object is being +@@ -67,8 +71,6 @@ class ThreadSafeThreadTraits { + int32_t ref_; + }; + +- typedef pp::Lock Lock; +- typedef pp::AutoLock AutoLock; + }; + + /// The non-thread-safe version of thread traits. Using this class as the +diff --git a/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h b/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h +index b167ffb09..2347d5461 100644 +--- a/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h ++++ b/src/3rdparty/chromium/sandbox/linux/syscall_broker/broker_file_permission.h +@@ -6,6 +6,7 @@ + #define SANDBOX_LINUX_SYSCALL_BROKER_BROKER_FILE_PERMISSION_H_ + + #include ++#include + #include + + #include "sandbox/sandbox_export.h" +diff --git a/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h b/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h +index 4b76d33af..4db1902d1 100644 +--- a/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h ++++ b/src/3rdparty/chromium/third_party/angle/include/GLSLANG/ShaderVars.h +@@ -12,6 +12,7 @@ + + #include + #include ++#include + #include + #include + +diff --git a/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h b/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h +index c1b5f59f5..246200991 100644 +--- a/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h ++++ b/src/3rdparty/chromium/third_party/blink/public/common/origin_trials/origin_trial_public_key.h +@@ -6,6 +6,7 @@ + #define THIRD_PARTY_BLINK_PUBLIC_COMMON_ORIGIN_TRIALS_ORIGIN_TRIAL_PUBLIC_KEY_H_ + + #include ++#include + + namespace blink { + +diff --git a/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h b/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h +index e40a76207..bf5ef7f13 100644 +--- a/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h ++++ b/src/3rdparty/chromium/third_party/blink/renderer/platform/graphics/paint/effect_paint_property_node.h +@@ -122,7 +122,7 @@ class PLATFORM_EXPORT EffectPaintPropertyNode + + // An identifier for a document transition shared element. `id.valid()` + // returns true if this has been set, and false otherwise. +- DocumentTransitionSharedElementId document_transition_shared_element_id; ++ cc::DocumentTransitionSharedElementId document_transition_shared_element_id; + + // An identifier to tag shared element resources generated and cached in the + // Viz process. This generated resource can be used as content for other +@@ -291,7 +291,7 @@ class PLATFORM_EXPORT EffectPaintPropertyNode + return state_.compositor_element_id; + } + +- const blink::DocumentTransitionSharedElementId& ++ const cc::DocumentTransitionSharedElementId& + DocumentTransitionSharedElementId() const { + return state_.document_transition_shared_element_id; + } +diff --git a/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h b/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h +index c7e4f2b37..e491a1f68 100644 +--- a/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h ++++ b/src/3rdparty/chromium/third_party/breakpad/breakpad/src/client/linux/handler/minidump_descriptor.h +@@ -33,6 +33,7 @@ + #include + #include + ++#include + #include + + #include "client/linux/handler/microdump_extra_info.h" +diff --git a/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h b/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h +index 6cec3b6b8..541bba5b1 100644 +--- a/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h ++++ b/src/3rdparty/chromium/third_party/dawn/src/dawn/native/CacheKey.h +@@ -15,6 +15,7 @@ + #ifndef SRC_DAWN_NATIVE_CACHEKEY_H_ + #define SRC_DAWN_NATIVE_CACHEKEY_H_ + ++#include + #include + + #include "dawn/native/stream/ByteVectorSink.h" +diff --git a/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h b/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h +index 90077421d..f303f9e8b 100644 +--- a/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h ++++ b/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/entry_point_info.h +@@ -15,6 +15,7 @@ + #ifndef SRC_TINT_READER_SPIRV_ENTRY_POINT_INFO_H_ + #define SRC_TINT_READER_SPIRV_ENTRY_POINT_INFO_H_ + ++#include + #include + + #include "src/tint/ast/pipeline_stage.h" +diff --git a/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h b/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h +index 7a20e8738..655f69ce3 100644 +--- a/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h ++++ b/src/3rdparty/chromium/third_party/dawn/src/tint/reader/spirv/namer.h +@@ -15,6 +15,7 @@ + #ifndef SRC_TINT_READER_SPIRV_NAMER_H_ + #define SRC_TINT_READER_SPIRV_NAMER_H_ + ++#include + #include + #include + #include +diff --git a/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h b/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h +index 8e0306b6a..0fc0cc2b0 100644 +--- a/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h ++++ b/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/lexer.h +@@ -15,6 +15,7 @@ + #ifndef SRC_TINT_READER_WGSL_LEXER_H_ + #define SRC_TINT_READER_WGSL_LEXER_H_ + ++#include + #include + #include + +diff --git a/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h b/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h +index 4cf9aad1b..3fa13e216 100644 +--- a/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h ++++ b/src/3rdparty/chromium/third_party/dawn/src/tint/reader/wgsl/token.h +@@ -15,6 +15,7 @@ + #ifndef SRC_TINT_READER_WGSL_TOKEN_H_ + #define SRC_TINT_READER_WGSL_TOKEN_H_ + ++#include + #include + #include + #include +diff --git a/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h b/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h +index 0601ca068..ac9dde64e 100644 +--- a/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h ++++ b/src/3rdparty/chromium/third_party/dawn/src/tint/writer/spirv/operand.h +@@ -15,6 +15,7 @@ + #ifndef SRC_TINT_WRITER_SPIRV_OPERAND_H_ + #define SRC_TINT_WRITER_SPIRV_OPERAND_H_ + ++#include + #include + #include + #include +diff --git a/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc b/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc +index a3099e15d..2e6f0eea7 100644 +--- a/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc ++++ b/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + #include + #include + +diff --git a/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h b/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h +index d2731dac7..46bc87ef9 100644 +--- a/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h ++++ b/src/3rdparty/chromium/third_party/pdfium/constants/annotation_flags.h +@@ -5,6 +5,8 @@ + #ifndef CONSTANTS_ANNOTATION_FLAGS_H_ + #define CONSTANTS_ANNOTATION_FLAGS_H_ + ++#include ++ + namespace pdfium { + namespace annotation_flags { + +diff --git a/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h b/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h +index 1b4c53815..472042fab 100644 +--- a/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h ++++ b/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/base/uuid.h +@@ -18,6 +18,7 @@ + #define INCLUDE_PERFETTO_EXT_BASE_UUID_H_ + + #include ++#include + #include + + #include "perfetto/ext/base/optional.h" +diff --git a/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h b/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h +index d047de1bf..d7fc91a59 100644 +--- a/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h ++++ b/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h +@@ -21,6 +21,8 @@ + #include "perfetto/trace_processor/status.h" + #include "src/trace_processor/importers/common/trace_parser.h" + ++#include ++ + namespace perfetto { + + namespace protos { +diff --git a/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp b/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp +index 0101632c5..3f04a2dd2 100644 +--- a/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp ++++ b/src/3rdparty/chromium/third_party/skia/src/utils/SkParseColor.cpp +@@ -15,6 +15,10 @@ + #include + #include + ++#include ++#include ++#include ++ + static constexpr const char* gColorNames[] = { + "aliceblue", + "antiquewhite", +diff --git a/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h b/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h +index b7c586b80..d950214c3 100644 +--- a/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h ++++ b/src/3rdparty/chromium/third_party/vulkan_memory_allocator/include/vk_mem_alloc.h +@@ -105,6 +105,8 @@ Documentation of all members: vk_mem_alloc.h + - [Source repository on GitHub](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator) + */ + ++#include ++ + #ifdef __cplusplus + extern "C" { + #endif +diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h b/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h +index b70ac4aa5..7ba555564 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h ++++ b/src/3rdparty/chromium/third_party/webrtc/modules/desktop_capture/linux/wayland/xdg_session_details.h +@@ -13,6 +13,7 @@ + + #include + ++#include + #include + + namespace webrtc { +diff --git a/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h b/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h +index 4190a79dc..5a9285f00 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h ++++ b/src/3rdparty/chromium/third_party/webrtc/rtc_base/third_party/base64/base64.h +@@ -12,6 +12,7 @@ + #ifndef RTC_BASE_THIRD_PARTY_BASE64_BASE64_H_ + #define RTC_BASE_THIRD_PARTY_BASE64_BASE64_H_ + ++#include + #include + #include + +diff --git a/src/3rdparty/chromium/ui/events/gesture_event_details.h b/src/3rdparty/chromium/ui/events/gesture_event_details.h +index 41ff9906d..1864e9e21 100644 +--- a/src/3rdparty/chromium/ui/events/gesture_event_details.h ++++ b/src/3rdparty/chromium/ui/events/gesture_event_details.h +@@ -5,6 +5,7 @@ + #ifndef UI_EVENTS_GESTURE_EVENT_DETAILS_H_ + #define UI_EVENTS_GESTURE_EVENT_DETAILS_H_ + ++#include + #include + + #include "base/check_op.h" +diff --git a/src/3rdparty/chromium/ui/events/types/scroll_types.h b/src/3rdparty/chromium/ui/events/types/scroll_types.h +index be6b2779f..dbe2e5cf7 100644 +--- a/src/3rdparty/chromium/ui/events/types/scroll_types.h ++++ b/src/3rdparty/chromium/ui/events/types/scroll_types.h +@@ -5,6 +5,8 @@ + #ifndef UI_EVENTS_TYPES_SCROLL_TYPES_H_ + #define UI_EVENTS_TYPES_SCROLL_TYPES_H_ + ++#include ++ + namespace ui { + + enum class ScrollGranularity : uint8_t { +diff --git a/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h b/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h +index 65cd4cb07..210c4318e 100644 +--- a/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h ++++ b/src/3rdparty/chromium/ui/gfx/geometry/linear_gradient.h +@@ -5,6 +5,7 @@ + #ifndef UI_GFX_LINEAR_GRADIENT_H_ + #define UI_GFX_LINEAR_GRADIENT_H_ + ++#include + #include + #include + +diff --git a/src/3rdparty/chromium/v8/src/base/macros.h b/src/3rdparty/chromium/v8/src/base/macros.h +index cd5b91f74..a74c0021f 100644 +--- a/src/3rdparty/chromium/v8/src/base/macros.h ++++ b/src/3rdparty/chromium/v8/src/base/macros.h +@@ -5,6 +5,7 @@ + #ifndef V8_BASE_MACROS_H_ + #define V8_BASE_MACROS_H_ + ++#include + #include + #include + +diff --git a/src/core/browsing_data_remover_delegate_qt.h b/src/core/browsing_data_remover_delegate_qt.h +index 4e690ffb1..dfa884cd6 100644 +--- a/src/core/browsing_data_remover_delegate_qt.h ++++ b/src/core/browsing_data_remover_delegate_qt.h +@@ -6,6 +6,8 @@ + + #include "content/public/browser/browsing_data_remover_delegate.h" + ++#include ++ + namespace QtWebEngineCore { + + class BrowsingDataRemoverDelegateQt : public content::BrowsingDataRemoverDelegate { diff --git a/qtwebengine-link-pipewire.patch b/qtwebengine-link-pipewire.patch new file mode 100644 index 0000000000000000000000000000000000000000..e21f7286fb9e8121dc0727f9581a787f9aa7d79b --- /dev/null +++ b/qtwebengine-link-pipewire.patch @@ -0,0 +1,13 @@ +diff --git a/src/3rdparty/chromium/third_party/webrtc/webrtc.gni b/src/3rdparty/chromium/third_party/webrtc/webrtc.gni +index a5da76c..9c5d358 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/webrtc.gni ++++ b/src/3rdparty/chromium/third_party/webrtc/webrtc.gni +@@ -138,7 +138,7 @@ declare_args() { + rtc_use_pipewire = is_linux && use_sysroot + + # Set this to link PipeWire and required libraries directly instead of using the dlopen. +- rtc_link_pipewire = false ++ rtc_link_pipewire = true + + # Enable to use the Mozilla internal settings. + build_with_mozilla = false diff --git a/qtwebengine-webrtc-dlopen-h264.patch b/qtwebengine-webrtc-dlopen-h264.patch new file mode 100644 index 0000000000000000000000000000000000000000..3575b28701182e09c4e78c64fa2b7412c5d8100b --- /dev/null +++ b/qtwebengine-webrtc-dlopen-h264.patch @@ -0,0 +1,163 @@ +diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/BUILD.gn b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/BUILD.gn +index 640d6626d..3d1f62190 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/BUILD.gn ++++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/BUILD.gn +@@ -7,6 +7,7 @@ + # be found in the AUTHORS file in the root of the source tree. + + import("//third_party/libaom/options.gni") ++import("//tools/generate_stubs/rules.gni") + import("../../webrtc.gni") + + rtc_library("encoded_frame") { +@@ -499,6 +500,21 @@ rtc_library("video_coding_utility") { + ] + } + ++if (rtc_use_h264 && rtc_dlopen_openh264) { ++ # When OpenH264 is not directly linked, use stubs to allow for dlopening of ++ # the binary. ++ generate_stubs("openh264_stubs") { ++ configs = [ "../../:common_config" ] ++ deps = [ "../../rtc_base" ] ++ extra_header = "codecs/h264/openh264_stub_header.fragment" ++ logging_function = "RTC_LOG(LS_VERBOSE)" ++ logging_include = "rtc_base/logging.h" ++ output_name = "codecs/h264/openh264_stubs" ++ path_from_source = "modules/video_coding/codecs/h264" ++ sigs = [ "codecs/h264/openh264.sigs" ] ++ } ++} ++ + rtc_library("webrtc_h264") { + visibility = [ "*" ] + sources = [ +@@ -542,10 +558,15 @@ rtc_library("webrtc_h264") { + ] + + if (rtc_use_h264) { +- deps += [ +- "//third_party/ffmpeg", +- "//third_party/openh264:encoder", +- ] ++ deps += [ "//third_party/ffmpeg" ] ++ ++ if (rtc_dlopen_openh264) { ++ defines = [ "WEBRTC_DLOPEN_OPENH264" ] ++ deps += [ ":openh264_stubs" ] ++ } else { ++ deps += [ "//third_party/openh264:encoder" ] ++ } ++ + if (!build_with_mozilla) { + deps += [ "../../media:rtc_media_base" ] + } +diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.cc b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.cc +index fc3fd195f..48eedcefd 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.cc ++++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.cc +@@ -36,10 +36,22 @@ + #include "third_party/openh264/src/codec/api/svc/codec_def.h" + #include "third_party/openh264/src/codec/api/svc/codec_ver.h" + ++#if defined(WEBRTC_DLOPEN_OPENH264) ++#include "modules/video_coding/codecs/h264/openh264_stubs.h" ++#endif // defined(WEBRTC_DLOPEN_OPENH264) ++ + namespace webrtc { + + namespace { + ++#if defined(WEBRTC_DLOPEN_OPENH264) ++using modules_video_coding_codecs_h264::InitializeStubs; ++using modules_video_coding_codecs_h264::kModuleOpenh264; ++using modules_video_coding_codecs_h264::StubPathMap; ++ ++static constexpr char kOpenH264Lib[] = "libopenh264.so.7"; ++#endif ++ + const bool kOpenH264EncoderDetailedLogging = false; + + // QP scaling thresholds. +@@ -167,6 +179,15 @@ H264EncoderImpl::~H264EncoderImpl() { + + int32_t H264EncoderImpl::InitEncode(const VideoCodec* inst, + const VideoEncoder::Settings& settings) { ++#if defined(WEBRTC_DLOPEN_OPENH264) ++ StubPathMap paths; ++ paths[kModuleOpenh264].push_back(kOpenH264Lib); ++ ++ static bool result = InitializeStubs(paths); ++ if (!result) ++ return WEBRTC_VIDEO_CODEC_UNINITIALIZED; ++#endif ++ + ReportInit(); + if (!inst || inst->codecType != kVideoCodecH264) { + ReportError(); +diff --git a/src/3rdparty/chromium/third_party/webrtc/webrtc.gni b/src/3rdparty/chromium/third_party/webrtc/webrtc.gni +index df42a48d4..cb5de2fda 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/webrtc.gni ++++ b/src/3rdparty/chromium/third_party/webrtc/webrtc.gni +@@ -181,6 +181,10 @@ declare_args() { + rtc_use_h264 = + proprietary_codecs && !is_android && !is_ios && !(is_win && !is_clang) + ++ # Allow to use OpenH264 on systems where OpenH264 cannot be installed by ++ # default due to licensing, but can be installed later from other sources. ++ rtc_dlopen_openh264 = false ++ + # Enable this flag to make webrtc::Mutex be implemented by absl::Mutex. + rtc_use_absl_mutex = false + +diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt +index e1e551a3e..1a5f839a0 100644 +--- a/src/core/CMakeLists.txt ++++ b/src/core/CMakeLists.txt +@@ -401,6 +401,9 @@ foreach(arch ${archs}) + use_bluez=false + use_vaapi=false + use_udev=true ++ media_use_openh264=false ++ rtc_use_h264=true ++ rtc_dlopen_openh264=true + enable_session_service=false + is_cfi=false + use_ozone=true +diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/openh264.sigs b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/openh264.sigs +new file mode 100644 +index 000000000..4924f8e9a +--- /dev/null ++++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/openh264.sigs +@@ -0,0 +1,14 @@ ++// Copyright 2022 The WebRTC project authors. All rights reserved. ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++//------------------------------------------------ ++// Functions from OpenH264. ++//------------------------------------------------ ++int WelsCreateSVCEncoder(ISVCEncoder **ppEncoder); ++void WelsDestroySVCEncoder(ISVCEncoder *pEncoder); ++int WelsGetDecoderCapability(SDecoderCapability *pDecCapability); ++long WelsCreateDecoder(ISVCDecoder **ppDecoder); ++void WelsDestroyDecoder(ISVCDecoder *pDecoder); ++OpenH264Version WelsGetCodecVersion(void); ++void WelsGetCodecVersionEx(OpenH264Version *pVersion); +diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/openh264_stub_header.fragment b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/openh264_stub_header.fragment +new file mode 100644 +index 000000000..9bc0a7cbe +--- /dev/null ++++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/codecs/h264/openh264_stub_header.fragment +@@ -0,0 +1,11 @@ ++// The extra include header needed in the generated stub file for defining ++// various OpenH264 types. ++ ++extern "C" { ++ ++#include "third_party/openh264/src/codec/api/svc/codec_api.h" ++#include "third_party/openh264/src/codec/api/svc/codec_app_def.h" ++#include "third_party/openh264/src/codec/api/svc/codec_def.h" ++#include "third_party/openh264/src/codec/api/svc/codec_ver.h" ++ ++}