diff options
-rw-r--r-- | .SRCINFO | 48 | ||||
-rw-r--r-- | PKGBUILD | 70 | ||||
-rw-r--r-- | QTBUG-64925.diff | 13 | ||||
-rw-r--r-- | QTBUG-76963.diff | 13 | ||||
-rw-r--r-- | QTBUG-77037.diff | 65 | ||||
-rw-r--r-- | WEBRTC-7857.diff | 12 | ||||
-rw-r--r-- | fix-building-with-system-icu.diff | 11 | ||||
-rw-r--r-- | qtwebengine-ffmpeg4.patch | 83 |
8 files changed, 315 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..d5a7b972f053 --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,48 @@ +pkgbase = qt5-webengine-595 + pkgdesc = Provides support for web applications using the Chromium browser project (v5.9.5) + pkgver = 5.9.5 + pkgrel = 1 + url = http://qt-project.org/ + arch = i686 + arch = x86_64 + license = LGPL3 + license = LGPL2.1 + license = BSD + makedepends = python2 + makedepends = git + makedepends = gperf + makedepends = jsoncpp + makedepends = ninja + depends = qt5-webchannel-595 + depends = qt5-location-595 + depends = libxcomposite + depends = libxrandr + depends = pciutils + depends = libxss + depends = libvpx + depends = libevent + depends = libsrtp + depends = snappy + depends = nss + depends = protobuf + depends = libxslt + depends = libxdamage + depends = minizip + depends = ffmpeg + source = http://download.qt.io/official_releases/qt/5.9/5.9.5/submodules/qtwebengine-opensource-src-5.9.5.tar.xz + source = QTBUG-76963.diff + source = QTBUG-64925.diff + source = QTBUG-77037.diff + source = WEBRTC-7857.diff + source = qtwebengine-ffmpeg4.patch + source = fix-building-with-system-icu.diff + sha256sums = 70d26db4e7944291c5f843b875916fb95ceec0f0a8fea3daea8004990199fc07 + sha256sums = ae6b783f6dc8a6b6b97e44101a685aeca858bd5948e083ce442821b5d8db8c74 + sha256sums = 3510f53302c6147882f43855da448b4f08cbdb10297b91474849ddbd359d5e9d + sha256sums = 5f1b988568f57bff1b64341d0a447d1e43189215a7c0689540f45bedcf969119 + sha256sums = ddd8d8b64fb2f81bbc5acd3d77cc6aeb79df44db451c3fed94f0e05b73c7b078 + sha256sums = 0be352f23946a41cddae941ecedfe1bceb62b23e2a1225dd5469e77e251ccf42 + sha256sums = cef22eeef1dedd484dec4cf94bb0aed2881ea7b2ee6d563e6940f4362e26604f + +pkgname = qt5-webengine-595 + diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..da01566f6c17 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,70 @@ +# Maintainer: Cian McGovern <cian@cianmcgovern.com> +# Contributor: Felix Yan <felixonmars@archlinux.org> +# Contributor: Andrea Scarpino <andrea@archlinux.org> + +pkgname=qt5-webengine-595 +_qtver=5.9.5 +pkgver=${_qtver/-/} +pkgrel=1 +arch=('i686' 'x86_64') +url='http://qt-project.org/' +license=('LGPL3' 'LGPL2.1' 'BSD') +pkgdesc='Provides support for web applications using the Chromium browser project (v5.9.5)' +depends=('qt5-webchannel-595' 'qt5-location-595' 'libxcomposite' 'libxrandr' 'pciutils' 'libxss' 'libvpx' + 'libevent' 'libsrtp' 'snappy' 'nss' 'protobuf' 'libxslt' 'libxdamage' 'minizip' 'ffmpeg') + # namcap note: libxdamage is needed for nvidia users +makedepends=('python2' 'git' 'gperf' 'jsoncpp' 'ninja') +_pkgfqn="qtwebengine-opensource-src-${_qtver}" +source=("http://download.qt.io/official_releases/qt/${pkgver%.*}/${_qtver}/submodules/${_pkgfqn}.tar.xz" + "QTBUG-76963.diff" + "QTBUG-64925.diff" + "QTBUG-77037.diff" + "WEBRTC-7857.diff" + "qtwebengine-ffmpeg4.patch" + "fix-building-with-system-icu.diff") +sha256sums=('70d26db4e7944291c5f843b875916fb95ceec0f0a8fea3daea8004990199fc07' + 'ae6b783f6dc8a6b6b97e44101a685aeca858bd5948e083ce442821b5d8db8c74' + '3510f53302c6147882f43855da448b4f08cbdb10297b91474849ddbd359d5e9d' + '5f1b988568f57bff1b64341d0a447d1e43189215a7c0689540f45bedcf969119' + 'ddd8d8b64fb2f81bbc5acd3d77cc6aeb79df44db451c3fed94f0e05b73c7b078' + '0be352f23946a41cddae941ecedfe1bceb62b23e2a1225dd5469e77e251ccf42' + 'cef22eeef1dedd484dec4cf94bb0aed2881ea7b2ee6d563e6940f4362e26604f') + +prepare() { + mkdir -p build + + # Hack to force using python2 + mkdir -p bin + ln -s /usr/bin/python2 bin/python + + cd ${_pkgfqn} + + patch -p1 -i ../QTBUG-76963.diff + patch -p1 -i ../QTBUG-64925.diff + patch -p1 -i ../QTBUG-77037.diff + patch -p1 -i ../WEBRTC-7857.diff + patch -p1 -i ../qtwebengine-ffmpeg4.patch + patch -p1 -i ../fix-building-with-system-icu.diff +} + +build() { + QT_BASE_DIR=/opt/qt595 + export QTDIR=$QT_BASE_DIR + export PATH=$QT_BASE_DIR/bin:$PATH + cd build + + export PATH="$srcdir/bin:$PATH" + qmake CONFIG+="proprietary-codecs" WEBENGINE_CONFIG+="use_proprietary_codecs use_system_ffmpeg use_system_icu" ../${_pkgfqn} + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/opt/qt595/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + install -Dm644 "$srcdir"/${_pkgfqn}/src/3rdparty/chromium/LICENSE "$pkgdir"/opt/qt595/share/licenses/${pkgname}/LICENSE.chromium +} diff --git a/QTBUG-64925.diff b/QTBUG-64925.diff new file mode 100644 index 000000000000..8ddd98c8b873 --- /dev/null +++ b/QTBUG-64925.diff @@ -0,0 +1,13 @@ +diff --git a/chromium/components/url_formatter/url_formatter.cc b/chromium/components/url_formatter/url_formatter.cc +index 1b50ada2085..ca252040a30 100644 +--- a/src/3rdparty/chromium/components/url_formatter/url_formatter.cc ++++ b/src/3rdparty/chromium/components/url_formatter/url_formatter.cc +@@ -485,7 +485,7 @@ void IDNSpoofChecker::SetAllowedUnicodeSet(UErrorCode* status) { + // are added to the allowed set. The list has to be updated when a new + // version of Unicode is released. The current version is 9.0.0 and ICU 60 + // will have Unicode 10.0 data. +-#if U_ICU_VERSION_MAJOR_NUM < 60 ++#if U_ICU_VERSION_MAJOR_NUM < 60 || defined(TOOLKIT_QT) + const icu::UnicodeSet aspirational_scripts( + icu::UnicodeString( + // Unified Canadian Syllabics
\ No newline at end of file diff --git a/QTBUG-76963.diff b/QTBUG-76963.diff new file mode 100644 index 000000000000..ede6cacc7a82 --- /dev/null +++ b/QTBUG-76963.diff @@ -0,0 +1,13 @@ +--- a/src/3rdparty/chromium/third_party/webrtc/base/physicalsocketserver.cc ++++ b/src/3rdparty/chromium/third_party/webrtc/base/physicalsocketserver.cc +@@ -52,6 +52,10 @@ + #include "rtc_base/timeutils.h" + #include "rtc_base/win32socketinit.h" + ++#if defined(WEBRTC_LINUX) ++#include <linux/sockios.h> ++#endif ++ + #if defined(WEBRTC_WIN) + #define LAST_SYSTEM_ERROR (::GetLastError()) + #elif defined(__native_client__) && __native_client__
\ No newline at end of file diff --git a/QTBUG-77037.diff b/QTBUG-77037.diff new file mode 100644 index 000000000000..60c29b02a42b --- /dev/null +++ b/QTBUG-77037.diff @@ -0,0 +1,65 @@ +--- a/src/3rdparty/chromium/media/audio/pulse/pulse.sigs ++++ b/src/3rdparty/chromium/media/audio/pulse/pulse.sigs +@@ -22,12 +22,12 @@ void pa_context_disconnect(pa_context* c); + pa_operation* pa_context_get_server_info(pa_context* c, pa_server_info_cb_t cb, void* userdata); + pa_operation* pa_context_get_source_info_by_index(pa_context* c, uint32_t idx, pa_source_info_cb_t cb, void* userdata); + pa_operation* pa_context_get_source_info_list(pa_context* c, pa_source_info_cb_t cb, void* userdata); +-pa_operation* pa_context_get_sink_info_list(pa_context* c, pa_sink_info_cb_t cb, void* userdata); +-pa_context_state_t pa_context_get_state(pa_context* c); ++pa_operation* pa_context_get_sink_info_list(pa_context* c, pa_sink_info_cb_t cb, void* userdata); ++pa_context_state_t pa_context_get_state(const_pa_context_ptr c); + pa_context* pa_context_new(pa_mainloop_api* mainloop, const char* name); + pa_operation* pa_context_set_source_volume_by_index(pa_context* c, uint32_t idx, const pa_cvolume* volume, pa_context_success_cb_t cb, void* userdata); + void pa_context_set_state_callback(pa_context* c, pa_context_notify_cb_t cb, void* userdata); +-pa_operation_state_t pa_operation_get_state(pa_operation* o); ++pa_operation_state_t pa_operation_get_state(const_pa_operation_ptr o); + void pa_context_unref(pa_context* c); + void pa_operation_unref(pa_operation* o); + int pa_stream_begin_write(pa_stream* p, void** data, size_t* nbytes); +@@ -37,21 +37,23 @@ pa_operation* pa_stream_cork(pa_stream* s, int b, pa_stream_success_cb_t cb, voi + int pa_stream_disconnect(pa_stream* s); + int pa_stream_drop(pa_stream *p); + pa_operation* pa_stream_flush(pa_stream* s, pa_stream_success_cb_t cb, void* userdata); +-uint32_t pa_stream_get_device_index(pa_stream* s); ++uint32_t pa_stream_get_device_index(const_pa_stream_ptr s); + int pa_stream_get_latency(pa_stream* s, pa_usec_t* r_usec, int* negative); +-pa_stream_state_t pa_stream_get_state(pa_stream* p); ++pa_stream_state_t pa_stream_get_state(const_pa_stream_ptr p); + pa_stream* pa_stream_new(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map * map); + pa_stream* pa_stream_new_with_proplist(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map* map, pa_proplist* p); + pa_proplist* pa_proplist_new(void); ++int pa_proplist_contains(const_pa_proplist_ptr p, const char* key); + void pa_proplist_free(pa_proplist* p); ++const char* pa_proplist_gets(const_pa_proplist_ptr p, const char* key); + int pa_proplist_sets(pa_proplist* p, const char* key, const char* value); +-size_t pa_stream_readable_size(pa_stream *p); ++size_t pa_stream_readable_size(const_pa_stream_ptr p); + int pa_stream_peek(pa_stream* p, const void** data, size_t* nbytes); + void pa_stream_set_read_callback(pa_stream* p, pa_stream_request_cb_t cb, void* userdata); + void pa_stream_set_state_callback(pa_stream* s, pa_stream_notify_cb_t cb, void* userdata); + int pa_stream_write(pa_stream* p, const void* data, size_t nbytes, pa_free_cb_t free_cb, int64_t offset, pa_seek_mode_t seek); + void pa_stream_set_write_callback(pa_stream *p, pa_stream_request_cb_t cb, void *userdata); + void pa_stream_unref(pa_stream* s); +-int pa_context_errno(pa_context *c); ++int pa_context_errno(const_pa_context_ptr c); + const char* pa_strerror(int error); + pa_cvolume* pa_cvolume_set(pa_cvolume* a, unsigned channels, pa_volume_t v); + +--- a/src/3rdparty/chromium/media/audio/pulse/pulse_stub_header.fragment ++++ b/src/3rdparty/chromium/media/audio/pulse/pulse_stub_header.fragment +@@ -5,4 +5,15 @@ extern "C" { + + #include <pulse/pulseaudio.h> + ++#if PA_MAJOR > 12 ++typedef const pa_context* const_pa_context_ptr; ++typedef const pa_operation* const_pa_operation_ptr; ++typedef const pa_proplist* const_pa_proplist_ptr; ++typedef const pa_stream* const_pa_stream_ptr; ++#else ++typedef pa_context* const_pa_context_ptr; ++typedef pa_operation* const_pa_operation_ptr; ++typedef pa_proplist* const_pa_proplist_ptr; ++typedef pa_stream* const_pa_stream_ptr; ++#endif + } diff --git a/WEBRTC-7857.diff b/WEBRTC-7857.diff new file mode 100644 index 000000000000..b1f5f0459ddd --- /dev/null +++ b/WEBRTC-7857.diff @@ -0,0 +1,12 @@ +--- a/src/3rdparty/chromium/third_party/webrtc/common_audio/vad/vad_core.c ++++ b/src/3rdparty/chromium/third_party/webrtc/common_audio/vad/vad_core.c +@@ -115,8 +115,8 @@ static int32_t WeightedAverage(int16_t* data, int16_t offset, + // undefined behavior, so not a good idea; this just makes UBSan ignore the + // violation, so that our old code can continue to do what it's always been + // doing.) +-static inline int32_t OverflowingMulS16ByS32ToS32(int16_t a, int32_t b) +- RTC_NO_SANITIZE("signed-integer-overflow") { ++static inline int32_t RTC_NO_SANITIZE("signed-integer-overflow") ++ OverflowingMulS16ByS32ToS32(int16_t a, int32_t b) { + return a * b; + }
\ No newline at end of file diff --git a/fix-building-with-system-icu.diff b/fix-building-with-system-icu.diff new file mode 100644 index 000000000000..ed49460222b8 --- /dev/null +++ b/fix-building-with-system-icu.diff @@ -0,0 +1,11 @@ +--- a/src/3rdparty/chromium/third_party/WebKit/Source/core/dom/Document.cpp ++++ b/src/3rdparty/chromium/third_party/WebKit/Source/core/dom/Document.cpp +@@ -4667,7 +4667,7 @@ + + for (unsigned i = 0; i < length;) { + UChar32 c; +- U16_NEXT(characters, i, length, c) ++ U16_NEXT(characters, i, length, c); + if (c == ':') { + if (sawColon) + return ParseQualifiedNameResult(QNMultipleColons); diff --git a/qtwebengine-ffmpeg4.patch b/qtwebengine-ffmpeg4.patch new file mode 100644 index 000000000000..df3221345479 --- /dev/null +++ b/qtwebengine-ffmpeg4.patch @@ -0,0 +1,83 @@ +--- a/src/3rdparty/chromium/media/base/decoder_buffer.h ++++ b/src/3rdparty/chromium/media/base/decoder_buffer.h +@@ -37,7 +37,7 @@ class MEDIA_EXPORT DecoderBuffer + : public base::RefCountedThreadSafe<DecoderBuffer> { + public: + enum { +- kPaddingSize = 32, ++ kPaddingSize = 64, + #if defined(ARCH_CPU_ARM_FAMILY) + kAlignmentSize = 16 + #else + +--- a/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc ++++ b/src/3rdparty/chromium/media/ffmpeg/ffmpeg_common.cc +@@ -30,10 +30,10 @@ EncryptionScheme GetEncryptionScheme(const AVStream* stream) { + + } // namespace + +-// Why FF_INPUT_BUFFER_PADDING_SIZE? FFmpeg assumes all input buffers are ++// Why AV_INPUT_BUFFER_PADDING_SIZE? FFmpeg assumes all input buffers are + // padded. Check here to ensure FFmpeg only receives data padded to its + // specifications. +-static_assert(DecoderBuffer::kPaddingSize >= FF_INPUT_BUFFER_PADDING_SIZE, ++static_assert(DecoderBuffer::kPaddingSize >= AV_INPUT_BUFFER_PADDING_SIZE, + "DecoderBuffer padding size does not fit ffmpeg requirement"); + + // Alignment requirement by FFmpeg for input and output buffers. This need to +@@ -444,11 +444,11 @@ void AudioDecoderConfigToAVCodecContext(const AudioDecoderConfig& config, + } else { + codec_context->extradata_size = config.extra_data().size(); + codec_context->extradata = reinterpret_cast<uint8_t*>( +- av_malloc(config.extra_data().size() + FF_INPUT_BUFFER_PADDING_SIZE)); ++ av_malloc(config.extra_data().size() + AV_INPUT_BUFFER_PADDING_SIZE)); + memcpy(codec_context->extradata, &config.extra_data()[0], + config.extra_data().size()); + memset(codec_context->extradata + config.extra_data().size(), '\0', +- FF_INPUT_BUFFER_PADDING_SIZE); ++ AV_INPUT_BUFFER_PADDING_SIZE); + } + } + +@@ -585,11 +585,11 @@ void VideoDecoderConfigToAVCodecContext( + } else { + codec_context->extradata_size = config.extra_data().size(); + codec_context->extradata = reinterpret_cast<uint8_t*>( +- av_malloc(config.extra_data().size() + FF_INPUT_BUFFER_PADDING_SIZE)); ++ av_malloc(config.extra_data().size() + AV_INPUT_BUFFER_PADDING_SIZE)); + memcpy(codec_context->extradata, &config.extra_data()[0], + config.extra_data().size()); + memset(codec_context->extradata + config.extra_data().size(), '\0', +- FF_INPUT_BUFFER_PADDING_SIZE); ++ AV_INPUT_BUFFER_PADDING_SIZE); + } + } + +--- a/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc ++++ b/src/3rdparty/chromium/media/filters/ffmpeg_audio_decoder.cc +@@ -53,7 +53,7 @@ + // AVCodecContext.opaque to get the object reference in order to call + // GetAudioBuffer() to do the actual allocation. + static int GetAudioBuffer(struct AVCodecContext* s, AVFrame* frame, int flags) { +- DCHECK(s->codec->capabilities & CODEC_CAP_DR1); ++ DCHECK(s->codec->capabilities & AV_CODEC_CAP_DR1); + DCHECK_EQ(s->codec_type, AVMEDIA_TYPE_AUDIO); + + // Since this routine is called by FFmpeg when a buffer is required for audio + +--- a/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc ++++ b/src/3rdparty/chromium/media/filters/ffmpeg_video_decoder.cc +@@ -427,12 +427,11 @@ bool FFmpegVideoDecoder::ConfigureDecoder(const VideoDecoderConfig& config, + codec_context_->thread_type = + FF_THREAD_SLICE | (low_delay ? 0 : FF_THREAD_FRAME); + codec_context_->opaque = this; +- codec_context_->flags |= CODEC_FLAG_EMU_EDGE; + codec_context_->get_buffer2 = GetVideoBufferImpl; + codec_context_->refcounted_frames = 1; + + if (decode_nalus_) +- codec_context_->flags2 |= CODEC_FLAG2_CHUNKS; ++ codec_context_->flags2 |= AV_CODEC_FLAG2_CHUNKS; + + AVCodec* codec = avcodec_find_decoder(codec_context_->codec_id); + if (!codec || avcodec_open2(codec_context_.get(), codec, NULL) < 0) { |