From 80d4c17873efdaa270b86d01fd0c5b348d6a6d65 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 3 Mar 2019 14:08:46 +0100 Subject: [PATCH 001/473] Mozilla release 60.5.2 --- .gitignore | 1 + icecat.spec | 13 +++++++++++-- sources | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 6de5154..0b2d2f9 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,4 @@ /icecat-60.4.0-gnu1.tar.bz2 /icecat-60.5.0-gnu1.tar.bz2 /icecat-60.5.1-gnu1.tar.bz2 +/icecat-60.5.2-gnu1.tar.bz2 diff --git a/icecat.spec b/icecat.spec index 5bbce05..4170ec7 100644 --- a/icecat.spec +++ b/icecat.spec @@ -80,7 +80,7 @@ %global hardened_build 1 Name: icecat -Version: 60.5.1 +Version: 60.5.2 Release: 1%{?dist} Summary: GNU version of Firefox browser @@ -98,7 +98,7 @@ Source2: %{name}.png Source3: %{name}-mozconfig-common ##Language files downloaded by source7 script -%if 0%{build_langpacks} +%if 0%{?build_langpacks} Source4: %{name}-%{version}-langpacks.tar.gz %endif @@ -503,7 +503,12 @@ MOZ_OPT_FLAGS=$(echo "%{optflags}" | %{__sed} -e 's/-Wall//') # for some sources # Explicitly force the hardening flags for Firefox so it passes the checksec test; # See also https://fedoraproject.org/wiki/Changes/Harden_All_Packages +%if 0%{?fedora} < 30 MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -Wformat-security -Wformat -Werror=format-security" +%else +# Workaround for mozbz#1531309 +MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-Werror=format-security//') +%endif # Disable null pointer gcc6 optimization in gcc6 (rhbz#1328045) MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fno-delete-null-pointer-checks" # Use hardened build? @@ -734,6 +739,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Sun Mar 03 2019 Antonio Trande - 60.5.2-1 +- Mozilla release 60.5.2 +- Disable Werror-format-security flags + * Thu Feb 14 2019 Antonio Trande - 60.5.1-1 - Mozilla release 60.5.1 - Conditional macro for libvpx support diff --git a/sources b/sources index 9ffec47..dec668d 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (icecat-60.5.1-gnu1.tar.bz2) = 6867681f5b4d65f78160a7686530975861d08c99a1f5e8d79448c2add3d9886144d3daefdb4d732dbda8ea14870086a41749a4de5e991b06199b66b3a0e6b677 +SHA512 (icecat-60.5.2-gnu1.tar.bz2) = c4c12506f2f270d9e3bcc2007870583cac9e23219c7e0524e90aafde414ec7d4b61fe397d268d35ad480f9217316cae0e83e8c1a8179dbb8184da4131700594a SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From d13ed8c5d3d34ed28e2e497d6663fd87736d5358 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 3 Mar 2019 17:40:46 +0100 Subject: [PATCH 002/473] Add -fpermissive for building on f31 --- icecat.spec | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/icecat.spec b/icecat.spec index 4170ec7..d335604 100644 --- a/icecat.spec +++ b/icecat.spec @@ -490,13 +490,6 @@ echo "Generate big endian version of config/external/icu/data/icud58l.dat" # Update the various config.guess to upstream release for aarch64 support find ./ -name config.guess -exec cp /usr/lib/rpm/config.guess {} ';' -# -fpermissive is needed to build with gcc 4.6+ which has become stricter -# -# Mozilla builds with -Wall with exception of a few warnings which show up -# everywhere in the code; so, don't override that. -# -# Disable C++ exceptions since Mozilla code is not exception-safe -# MOZ_OPT_FLAGS=$(echo "%{optflags}" | %{__sed} -e 's/-Wall//') #rhbz#1037063 # -Werror=format-security causes build failures when -Wno-format is explicitly given @@ -509,8 +502,12 @@ MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -Wformat-security -Wformat -Werror=format-security # Workaround for mozbz#1531309 MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-Werror=format-security//') %endif -# Disable null pointer gcc6 optimization in gcc6 (rhbz#1328045) -MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fno-delete-null-pointer-checks" +# Add -fpermissive for building on f31: +# In file included from /builddir/build/BUILD/icecat-60.5.2/tools/profiler/core/shared-libraries-linux.cc:17: +# /icecat-60.5.2/tools/profiler/core/platform.h:50:21: error: 'pid_t gettid()' was declared 'extern' and later 'static' [-fpermissive] +%if 0%{?fedora} > 30 +MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fpermissive" +%endif # Use hardened build? MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fPIC -Wl,-z,relro -Wl,-z,now" From 365f306ca5cec7df3e10292e560d8d81ebf1edc4 Mon Sep 17 00:00:00 2001 From: sagitter Date: Mon, 4 Mar 2019 11:45:38 +0100 Subject: [PATCH 003/473] Try to fix libevent LD path --- icecat.spec | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/icecat.spec b/icecat.spec index d335604..681d51a 100644 --- a/icecat.spec +++ b/icecat.spec @@ -405,7 +405,7 @@ echo "ac_add_options --disable-system-sqlite" >> .mozconfig %endif echo "ac_add_options --with-system-zlib" >> .mozconfig echo "ac_add_options --with-system-bz2" >> .mozconfig -echo "ac_add_options --with-system-libevent=%{_prefix}" >> .mozconfig +echo "ac_add_options --with-system-libevent=%{_prefix}/../%{_lib}" >> .mozconfig echo "ac_add_options --enable-llvm-hacks" >> .mozconfig %if %{?with_vpx} echo "ac_add_options --with-system-libvpx" >> .mozconfig @@ -450,6 +450,9 @@ echo 'ac_add_options --enable-optimize' >> .mozconfig %endif echo "ac_add_options --disable-debug" >> .mozconfig %endif +%ifarch %{arm} +echo "ac_add_options --enable-linker=gold" >> .mozconfig +%endif echo "ac_add_options --disable-strip" >> .mozconfig echo "ac_add_options --disable-install-strip" >> .mozconfig @@ -521,10 +524,10 @@ MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-g/-g1/' -e 's/-O2/-O1/') # (OOM when linking, rhbz#1238225) export MOZ_DEBUG_FLAGS=" " %endif -%ifarch s390x %{arm} %{power64} aarch64 %{arm} %{ix86} +%ifarch s390x %{arm} %{power64} aarch64 %{ix86} MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads" %endif -%ifarch %{arm} +%ifarch %{arm} %{ix86} export RUSTFLAGS="-Cdebuginfo=0" %endif export CFLAGS=$MOZ_OPT_FLAGS @@ -739,6 +742,8 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Sun Mar 03 2019 Antonio Trande - 60.5.2-1 - Mozilla release 60.5.2 - Disable Werror-format-security flags +- Enable linker=gold on ARM +- Try to fix libevent LD path * Thu Feb 14 2019 Antonio Trande - 60.5.1-1 - Mozilla release 60.5.1 From 1eff813f6802426ae002e8af521dd3d7119f892a Mon Sep 17 00:00:00 2001 From: sagitter Date: Mon, 4 Mar 2019 12:19:30 +0100 Subject: [PATCH 004/473] Set CXXFLAGS --- icecat.spec | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/icecat.spec b/icecat.spec index 681d51a..be17988 100644 --- a/icecat.spec +++ b/icecat.spec @@ -128,6 +128,7 @@ Source15: %{name}-x11.sh.in Source16: %{name}-x11.desktop # Build patches +Patch2: %{name}-libevent_linkflag.patch Patch3: mozilla-build-arm.patch # Unrecognized file? @@ -322,6 +323,7 @@ tar -xf %{SOURCE5} ##Prevent HTTPS-everywhere addon's installation sed '/https-everywhere/d' -i ./browser/installer/package-manifest.in +%patch2 -p0 -b .libevent_linkflag %patch3 -p1 -b .arm %patch7 -p0 %patch8 -p0 @@ -405,7 +407,7 @@ echo "ac_add_options --disable-system-sqlite" >> .mozconfig %endif echo "ac_add_options --with-system-zlib" >> .mozconfig echo "ac_add_options --with-system-bz2" >> .mozconfig -echo "ac_add_options --with-system-libevent=%{_prefix}/../%{_lib}" >> .mozconfig +echo "ac_add_options --with-system-libevent=%{_prefix}" >> .mozconfig echo "ac_add_options --enable-llvm-hacks" >> .mozconfig %if %{?with_vpx} echo "ac_add_options --with-system-libvpx" >> .mozconfig @@ -505,12 +507,6 @@ MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -Wformat-security -Wformat -Werror=format-security # Workaround for mozbz#1531309 MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-Werror=format-security//') %endif -# Add -fpermissive for building on f31: -# In file included from /builddir/build/BUILD/icecat-60.5.2/tools/profiler/core/shared-libraries-linux.cc:17: -# /icecat-60.5.2/tools/profiler/core/platform.h:50:21: error: 'pid_t gettid()' was declared 'extern' and later 'static' [-fpermissive] -%if 0%{?fedora} > 30 -MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fpermissive" -%endif # Use hardened build? MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fPIC -Wl,-z,relro -Wl,-z,now" @@ -531,7 +527,16 @@ MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads" export RUSTFLAGS="-Cdebuginfo=0" %endif export CFLAGS=$MOZ_OPT_FLAGS -export CXXFLAGS=$MOZ_OPT_FLAGS + +# Add -fpermissive for building on f31: +# In file included from /builddir/build/BUILD/icecat-60.5.2/tools/profiler/core/shared-libraries-linux.cc:17: +# /icecat-60.5.2/tools/profiler/core/platform.h:50:21: error: 'pid_t gettid()' was declared 'extern' and later 'static' [-fpermissive] +%if 0%{?fedora} > 30 +export CXXFLAGS="$MOZ_OPT_FLAGS -fpermissive" +%else +export CXXFLAGS="$MOZ_OPT_FLAGS" +%endif + export LDFLAGS=$MOZ_LINK_FLAGS export PREFIX='%{_prefix}' From 39f7d271b43d5b5b5e2e4467648c6e70902e068b Mon Sep 17 00:00:00 2001 From: sagitter Date: Mon, 4 Mar 2019 12:20:35 +0100 Subject: [PATCH 005/473] Add libevent link patch --- icecat-libevent_linkflag.patch | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 icecat-libevent_linkflag.patch diff --git a/icecat-libevent_linkflag.patch b/icecat-libevent_linkflag.patch new file mode 100644 index 0000000..918c7e4 --- /dev/null +++ b/icecat-libevent_linkflag.patch @@ -0,0 +1,20 @@ +--- old-configure.orig.in 2019-03-02 21:49:16.000000000 +0100 ++++ old-configure.in 2019-03-04 12:14:23.842685662 +0100 +@@ -1715,7 +1715,7 @@ + MOZ_SYSTEM_LIBEVENT= + elif test -z "$MOZ_SYSTEM_LIBEVENT"; then + CFLAGS="-I${LIBEVENT_DIR}/include $CFLAGS" +- LDFLAGS="-L${LIBEVENT_DIR}/lib $LDFLAGS" ++ LDFLAGS="-L${LIBDIR} $LDFLAGS" + MOZ_CHECK_HEADER(event.h, + [if test ! -f "${LIBEVENT_DIR}/include/event.h"; then + AC_MSG_ERROR([event.h found, but is not in ${LIBEVENT_DIR}/include]) +@@ -1724,7 +1724,7 @@ + AC_CHECK_LIB(event, event_init, + [MOZ_SYSTEM_LIBEVENT=1 + MOZ_LIBEVENT_CFLAGS="-I${LIBEVENT_DIR}/include" +- MOZ_LIBEVENT_LIBS="-L${LIBEVENT_DIR}/lib -levent"], ++ MOZ_LIBEVENT_LIBS="-L${LIBDIR} -levent"], + [MOZ_SYSTEM_LIBEVENT= MOZ_LIBEVENT_CFLAGS= MOZ_LIBEVENT_LIBS=]) + fi + CFLAGS=$_SAVE_CFLAGS From 2a63573f46c9d8d085cc37721c826a9e308893a0 Mon Sep 17 00:00:00 2001 From: sagitter Date: Mon, 4 Mar 2019 18:07:47 +0100 Subject: [PATCH 006/473] Fix gold linker flag on ARM --- icecat.spec | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/icecat.spec b/icecat.spec index be17988..c7ad70d 100644 --- a/icecat.spec +++ b/icecat.spec @@ -520,23 +520,17 @@ MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-g/-g1/' -e 's/-O2/-O1/') # (OOM when linking, rhbz#1238225) export MOZ_DEBUG_FLAGS=" " %endif -%ifarch s390x %{arm} %{power64} aarch64 %{ix86} +%ifarch s390x %{power64} aarch64 %{ix86} MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads" %endif +%ifarch %{arm} +MOZ_LINK_FLAGS="-Wl,--no-keep-memory" +%endif %ifarch %{arm} %{ix86} export RUSTFLAGS="-Cdebuginfo=0" %endif export CFLAGS=$MOZ_OPT_FLAGS - -# Add -fpermissive for building on f31: -# In file included from /builddir/build/BUILD/icecat-60.5.2/tools/profiler/core/shared-libraries-linux.cc:17: -# /icecat-60.5.2/tools/profiler/core/platform.h:50:21: error: 'pid_t gettid()' was declared 'extern' and later 'static' [-fpermissive] -%if 0%{?fedora} > 30 -export CXXFLAGS="$MOZ_OPT_FLAGS -fpermissive" -%else export CXXFLAGS="$MOZ_OPT_FLAGS" -%endif - export LDFLAGS=$MOZ_LINK_FLAGS export PREFIX='%{_prefix}' From a0ff91c47931399cef1d40064611cf824f1b67cf Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 19 Mar 2019 15:55:11 +0100 Subject: [PATCH 007/473] Mozilla release 60.6.0 --- .gitignore | 2 ++ icecat-lang_download.sh | 20 ++++++++++++-------- icecat.spec | 9 ++++++--- sources | 3 ++- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 0b2d2f9..42e32d5 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,5 @@ /icecat-60.5.0-gnu1.tar.bz2 /icecat-60.5.1-gnu1.tar.bz2 /icecat-60.5.2-gnu1.tar.bz2 +/icecat-60.6.0-gnu1.tar.bz2 +/icecat-60.6.0-langpacks.tar.gz diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 6319089..1d3aa9d 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,18 +1,22 @@ #!/bin/bash -VERSION=60.2.0 -URL=http://alpha.gnu.org/gnu/gnuzilla/$VERSION/langpacks/ +VERSION=60.6.0 +URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do -mkdir -p langpacks && cd langpacks -wget -erobots=off -c -r -l1 -nd -nc -A.xpi -U langpacks $u -rm -f icecat-$VERSION.ja-JP-mac.langpack.xpi icecat-$VERSION.compare-locales.langpack.xpi + mkdir -p langpacks && pushd langpacks + wget -erobots=off -c -r -l1 -nd -nc -A.xpi -U langpacks $u +popd +done +pushd langpacks +for u in `ls *.xpi`; do + mv $u icecat-${VERSION}.$u done find . -type f -name '*.xpi' | while read FILE ; do - newfile="$(echo ${FILE} |sed -e 's/60.2.0.//g' -e 's/icecat-//g')" ; + newfile="$(echo ${FILE} |sed -e 's/.xpi/.langpack.xpi/g')" ; mv "${FILE}" "${newfile}" ; done -cd .. -tar -zcvf icecat-$VERSION-langpacks.tar.gz langpacks +popd +tar -zcvf icecat-${VERSION}-langpacks.tar.gz langpacks rm -rf langpacks exit 0 diff --git a/icecat.spec b/icecat.spec index c7ad70d..e35f010 100644 --- a/icecat.spec +++ b/icecat.spec @@ -11,7 +11,7 @@ # ##Active/Deactive language files handling -%global build_langpacks 0 +%global build_langpacks 1 %define default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html @@ -80,7 +80,7 @@ %global hardened_build 1 Name: icecat -Version: 60.5.2 +Version: 60.6.0 Release: 1%{?dist} Summary: GNU version of Firefox browser @@ -92,7 +92,6 @@ URL: http://www.gnu.org/software/gnuzilla/ ## Modified files are hosted in a dedicated fork repository: ## https://fedorapeople.org/cgit/sagitter/public_git/icecat.git/ Source0: https://sagitter.fedorapeople.org/icecat/v%{version}/%{name}-%{version}-gnu1.tar.bz2 -#Source0: http://alpha.gnu.org/gnu/gnuzilla/%%{version}/icecat-%%{version}-gnu1.tar.bz2 Source2: %{name}.png Source3: %{name}-mozconfig-common @@ -738,6 +737,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Tue Mar 19 2019 Antonio Trande - 60.6.0-1 +- Mozilla release 60.6.0 +- Enable languages + * Sun Mar 03 2019 Antonio Trande - 60.5.2-1 - Mozilla release 60.5.2 - Disable Werror-format-security flags diff --git a/sources b/sources index dec668d..95e7be1 100644 --- a/sources +++ b/sources @@ -1,2 +1,3 @@ -SHA512 (icecat-60.5.2-gnu1.tar.bz2) = c4c12506f2f270d9e3bcc2007870583cac9e23219c7e0524e90aafde414ec7d4b61fe397d268d35ad480f9217316cae0e83e8c1a8179dbb8184da4131700594a +SHA512 (icecat-60.6.0-gnu1.tar.bz2) = a31ee52e0f8c69542a141fa432411f23225d40226f9e976b074cdf9f36b57c48984dfc7cf177d1f12de40c4250161232768e5b673be348623a8b7f5b33819dd3 +SHA512 (icecat-60.6.0-langpacks.tar.gz) = c8949951e3333110c1a0762bd6e9accb15111bb4d7c454d842d99416789e2d74e904f08bcc5a0bd6f255875fe78d80b7d2ab284ea267041edee5d83337af121f SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 498a6e2a85fc99cfaeca5bc67853027d488979dc Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 19 Mar 2019 20:40:03 +0100 Subject: [PATCH 008/473] Patched for building with newer glibc (2.29.9000-4) (mozilla #1533969) --- icecat-60.6.0-mozilla-1533969.patch | 32 +++++++++++++++++++++++++++++ icecat.spec | 10 ++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 icecat-60.6.0-mozilla-1533969.patch diff --git a/icecat-60.6.0-mozilla-1533969.patch b/icecat-60.6.0-mozilla-1533969.patch new file mode 100644 index 0000000..cdf62c5 --- /dev/null +++ b/icecat-60.6.0-mozilla-1533969.patch @@ -0,0 +1,32 @@ +--- a/js/src/util/NativeStack.cpp ++++ b/js/src/util/NativeStack.cpp +@@ -16,6 +16,7 @@ + #if defined(ANDROID) && !defined(__aarch64__) + #include + #include ++# define gettid() static_cast(syscall(__NR_gettid)) + #endif + #else + #error "Unsupported platform" +--- a/tools/profiler/core/platform.h ++++ b/tools/profiler/core/platform.h +@@ -42,16 +42,16 @@ + #include "PlatformMacros.h" + #include + +-// We need a definition of gettid(), but glibc doesn't provide a ++// We need a definition of gettid(), but old glibc versions don't provide a + // wrapper for it. + #if defined(__GLIBC__) + #include + #include +-static inline pid_t gettid() { return (pid_t)syscall(SYS_gettid); } ++# define gettid() static_cast(syscall(SYS_gettid)) + #elif defined(GP_OS_darwin) + #include + #include +-static inline pid_t gettid() { return (pid_t)syscall(SYS_thread_selfid); } ++# define gettid() static_cast(syscall(SYS_thread_selfid)) + #elif defined(GP_OS_android) + #include + #elif defined(GP_OS_windows) diff --git a/icecat.spec b/icecat.spec index e35f010..c81cd4e 100644 --- a/icecat.spec +++ b/icecat.spec @@ -81,7 +81,7 @@ Name: icecat Version: 60.6.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -164,6 +164,7 @@ Patch417: bug1375074-save-restore-x28.patch Patch418: mozilla-1436242.patch Patch420: %{name}-disable-dbus-remote.patch Patch421: %{name}-bz1445383.patch +Patch422: %{name}-%{version}-mozilla-1533969.patch # Wayland specific upstream patches Patch565: firefox-pipewire.patch @@ -357,6 +358,10 @@ sed '/https-everywhere/d' -i ./browser/installer/package-manifest.in %patch420 -p1 -b .%{name}-disable-dbus-remote %patch421 -p1 -b .%{name}-update-ccache-stats-parser +%if 0%{?fedora} > 30 +%patch422 -p1 -b .%{name}-%{version}-mozilla-1533969 +%endif + # Wayland specific upstream patches dos2unix %{PATCH565} %patch565 -p1 -b .firefox-pipewire @@ -737,6 +742,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Tue Mar 19 2019 Antonio Trande - 60.6.0-2 +- Patched for building with newer glibc (2.29.9000-4) (mozilla #1533969) + * Tue Mar 19 2019 Antonio Trande - 60.6.0-1 - Mozilla release 60.6.0 - Enable languages From 034aedacb4ba4b1e1a0a5f99d5b34cdfbc5710de Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 20 Mar 2019 12:41:49 +0100 Subject: [PATCH 009/473] Patched for building on ARM (rhbz #1658940) --- ...--fix-mozillaSignalTrampoline-to-work.patch | 12 ++++++++++++ icecat-lang_download.sh | 18 +++++++++--------- icecat.spec | 16 ++++++++++++---- sources | 2 +- 4 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 Bug-1238661-2---fix-mozillaSignalTrampoline-to-work.patch diff --git a/Bug-1238661-2---fix-mozillaSignalTrampoline-to-work.patch b/Bug-1238661-2---fix-mozillaSignalTrampoline-to-work.patch new file mode 100644 index 0000000..ccec54a --- /dev/null +++ b/Bug-1238661-2---fix-mozillaSignalTrampoline-to-work.patch @@ -0,0 +1,12 @@ +diff -up firefox-60.0/mfbt/LinuxSignal.h.mozilla-1238661 firefox-60.0/mfbt/LinuxSignal.h +--- firefox-60.0/mfbt/LinuxSignal.h.mozilla-1238661 2018-04-27 08:55:38.848241768 +0200 ++++ firefox-60.0/mfbt/LinuxSignal.h 2018-04-27 09:06:47.946769859 +0200 +@@ -22,7 +22,7 @@ + void* aContext) { + asm volatile("nop; nop; nop; nop" : : : "memory"); + +- asm volatile("b %0" : : "X"(H) : "memory"); ++ H(aSignal, aInfo, aContext); + } + + #define MOZ_SIGNAL_TRAMPOLINE(h) (mozilla::SignalTrampoline) diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 1d3aa9d..767e093 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -8,15 +8,15 @@ for u in $URL; do wget -erobots=off -c -r -l1 -nd -nc -A.xpi -U langpacks $u popd done -pushd langpacks -for u in `ls *.xpi`; do - mv $u icecat-${VERSION}.$u -done -find . -type f -name '*.xpi' | while read FILE ; do - newfile="$(echo ${FILE} |sed -e 's/.xpi/.langpack.xpi/g')" ; - mv "${FILE}" "${newfile}" ; -done -popd +#pushd langpacks +#for u in `ls *.xpi`; do +# mv $u icecat-${VERSION}.$u +#done +#find . -type f -name '*.xpi' | while read FILE ; do +# newfile="$(echo ${FILE} |sed -e 's/.xpi/.langpack.xpi/g')" ; +# mv "${FILE}" "${newfile}" ; +#done +#popd tar -zcvf icecat-${VERSION}-langpacks.tar.gz langpacks rm -rf langpacks exit 0 diff --git a/icecat.spec b/icecat.spec index c81cd4e..a42940f 100644 --- a/icecat.spec +++ b/icecat.spec @@ -158,7 +158,8 @@ Patch226: rhbz-1354671.patch # Upstream patches Patch406: mozilla-256180.patch Patch413: mozilla-1353817.patch -Patch415: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch +Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch +Patch415: Bug-1238661-2---fix-mozillaSignalTrampoline-to-work.patch Patch416: mozilla-1424422.patch Patch417: bug1375074-save-restore-x28.patch Patch418: mozilla-1436242.patch @@ -342,7 +343,8 @@ sed '/https-everywhere/d' -i ./browser/installer/package-manifest.in %patch406 -p0 -b .256180 %patch413 -p1 -b .1353817 %ifarch %{arm} -%patch415 -p1 -b .mozilla-1238661 +#%%patch414 -p1 -b .Bug-1238661---fix-mozillaSignalTrampoline-to-work +%patch415 -p1 -b .Bug-1238661-2---fix-mozillaSignalTrampoline-to-work %endif %patch416 -p1 -b .1424422 %patch417 -p1 -b .bug1375074-save-restore-x28 @@ -458,6 +460,9 @@ echo "ac_add_options --disable-debug" >> .mozconfig %endif %ifarch %{arm} echo "ac_add_options --enable-linker=gold" >> .mozconfig + +# See https://bugzilla.redhat.com/show_bug.cgi?id=1658940#c19 +sed -i -e "s/MOZILLA_MAY_SUPPORT_NEON/MOZILLA_MAY_SUPPORT_NEONXXXX/g" gfx/ycbcr/* %endif echo "ac_add_options --disable-strip" >> .mozconfig @@ -528,10 +533,11 @@ export MOZ_DEBUG_FLAGS=" " MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads" %endif %ifarch %{arm} -MOZ_LINK_FLAGS="-Wl,--no-keep-memory" +MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--no-keep-files-mapped -Wl,--no-map-whole-files -Wl,--no-mmap-output-file" %endif %ifarch %{arm} %{ix86} export RUSTFLAGS="-Cdebuginfo=0" +export MOZ_RUST_DEFAULT_FLAGS="-Cdebuginfo=0 -Copt-level=0" %endif export CFLAGS=$MOZ_OPT_FLAGS export CXXFLAGS="$MOZ_OPT_FLAGS" @@ -742,8 +748,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog -* Tue Mar 19 2019 Antonio Trande - 60.6.0-2 +* Wed Mar 20 2019 Antonio Trande - 60.6.0-2 - Patched for building with newer glibc (2.29.9000-4) (mozilla #1533969) +- Patched for building on ARM (rhbz #1658940) +- Language files re-based * Tue Mar 19 2019 Antonio Trande - 60.6.0-1 - Mozilla release 60.6.0 diff --git a/sources b/sources index 95e7be1..b3a3d08 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (icecat-60.6.0-gnu1.tar.bz2) = a31ee52e0f8c69542a141fa432411f23225d40226f9e976b074cdf9f36b57c48984dfc7cf177d1f12de40c4250161232768e5b673be348623a8b7f5b33819dd3 -SHA512 (icecat-60.6.0-langpacks.tar.gz) = c8949951e3333110c1a0762bd6e9accb15111bb4d7c454d842d99416789e2d74e904f08bcc5a0bd6f255875fe78d80b7d2ab284ea267041edee5d83337af121f +SHA512 (icecat-60.6.0-langpacks.tar.gz) = e694a1d587af77adb2c7f1d91f7a3f51b90d18fef1fd3247ad837022901b81e879369fb6025a45acfa07544ba356901fc80f9a5f93dfc9b7b09613a1cee8ab41 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From f865a4ca1061decd3159c074fdaaca16ec34d8d4 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 20 Mar 2019 13:10:17 +0100 Subject: [PATCH 010/473] Change LD flags --- icecat.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/icecat.spec b/icecat.spec index a42940f..278563f 100644 --- a/icecat.spec +++ b/icecat.spec @@ -530,10 +530,10 @@ MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-g/-g1/' -e 's/-O2/-O1/') export MOZ_DEBUG_FLAGS=" " %endif %ifarch s390x %{power64} aarch64 %{ix86} -MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads" +MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads -Wl,--print-memory-usage" %endif %ifarch %{arm} -MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--no-keep-files-mapped -Wl,--no-map-whole-files -Wl,--no-mmap-output-file" +MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--no-map-whole-files -Wl,--no-mmap-output-file -Wl,--print-memory-usage" %endif %ifarch %{arm} %{ix86} export RUSTFLAGS="-Cdebuginfo=0" From 8ed873edc4144f9a5f3334517947c8c4873e1372 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 20 Mar 2019 14:20:09 +0100 Subject: [PATCH 011/473] Use -Wl,-fuse-ld=gold on ARM --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 278563f..2b4b46c 100644 --- a/icecat.spec +++ b/icecat.spec @@ -533,7 +533,7 @@ export MOZ_DEBUG_FLAGS=" " MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads -Wl,--print-memory-usage" %endif %ifarch %{arm} -MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--no-map-whole-files -Wl,--no-mmap-output-file -Wl,--print-memory-usage" +MOZ_LINK_FLAGS="-Wl,-fuse-ld=gold -Wl,--no-keep-memory -Wl,--no-map-whole-files -Wl,--no-mmap-output-file -Wl,--print-memory-usage" %endif %ifarch %{arm} %{ix86} export RUSTFLAGS="-Cdebuginfo=0" From 7dd2a2a88187e9b909a2cf6df93c01a02b1afeda Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 20 Mar 2019 16:05:51 +0100 Subject: [PATCH 012/473] Remove -Wl,--print-memory-usage option --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 2b4b46c..8a87a8d 100644 --- a/icecat.spec +++ b/icecat.spec @@ -533,7 +533,7 @@ export MOZ_DEBUG_FLAGS=" " MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads -Wl,--print-memory-usage" %endif %ifarch %{arm} -MOZ_LINK_FLAGS="-Wl,-fuse-ld=gold -Wl,--no-keep-memory -Wl,--no-map-whole-files -Wl,--no-mmap-output-file -Wl,--print-memory-usage" +MOZ_LINK_FLAGS="-Wl,-fuse-ld=gold -Wl,--no-keep-memory -Wl,--no-map-whole-files -Wl,--no-mmap-output-file" %endif %ifarch %{arm} %{ix86} export RUSTFLAGS="-Cdebuginfo=0" From 715b11c212427a42e7b44a1edcaa7094a4ba94cd Mon Sep 17 00:00:00 2001 From: sagitter Date: Thu, 21 Mar 2019 10:54:49 +0100 Subject: [PATCH 013/473] Undo latest changes for ARM | Exclude ARM builds --- icecat.spec | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/icecat.spec b/icecat.spec index 8a87a8d..d53d707 100644 --- a/icecat.spec +++ b/icecat.spec @@ -79,6 +79,9 @@ # Use mozilla hardening option? %global hardened_build 1 +# Exclude ARM builds for rhbz #1658940 +ExcludeArch: %{arm} + Name: icecat Version: 60.6.0 Release: 2%{?dist} @@ -159,7 +162,6 @@ Patch226: rhbz-1354671.patch Patch406: mozilla-256180.patch Patch413: mozilla-1353817.patch Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch -Patch415: Bug-1238661-2---fix-mozillaSignalTrampoline-to-work.patch Patch416: mozilla-1424422.patch Patch417: bug1375074-save-restore-x28.patch Patch418: mozilla-1436242.patch @@ -343,8 +345,7 @@ sed '/https-everywhere/d' -i ./browser/installer/package-manifest.in %patch406 -p0 -b .256180 %patch413 -p1 -b .1353817 %ifarch %{arm} -#%%patch414 -p1 -b .Bug-1238661---fix-mozillaSignalTrampoline-to-work -%patch415 -p1 -b .Bug-1238661-2---fix-mozillaSignalTrampoline-to-work +%patch414 -p1 -b .Bug-1238661---fix-mozillaSignalTrampoline-to-work %endif %patch416 -p1 -b .1424422 %patch417 -p1 -b .bug1375074-save-restore-x28 @@ -460,9 +461,6 @@ echo "ac_add_options --disable-debug" >> .mozconfig %endif %ifarch %{arm} echo "ac_add_options --enable-linker=gold" >> .mozconfig - -# See https://bugzilla.redhat.com/show_bug.cgi?id=1658940#c19 -sed -i -e "s/MOZILLA_MAY_SUPPORT_NEON/MOZILLA_MAY_SUPPORT_NEONXXXX/g" gfx/ycbcr/* %endif echo "ac_add_options --disable-strip" >> .mozconfig @@ -748,9 +746,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog -* Wed Mar 20 2019 Antonio Trande - 60.6.0-2 +* Thu Mar 21 2019 Antonio Trande - 60.6.0-2 - Patched for building with newer glibc (2.29.9000-4) (mozilla #1533969) -- Patched for building on ARM (rhbz #1658940) +- Excluded on ARM (rhbz #1658940) - Language files re-based * Tue Mar 19 2019 Antonio Trande - 60.6.0-1 From dc2b379d3c7d9a31155af82fc09518b280ddfbc0 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 23 Mar 2019 18:23:43 +0100 Subject: [PATCH 014/473] Mozilla release 60.6.1 --- .gitignore | 2 ++ ...61-2---fix-mozillaSignalTrampoline-to-work.patch | 12 ------------ ...969.patch => icecat-60.6.1-mozilla-1533969.patch | 0 icecat-lang_download.sh | 2 +- icecat.spec | 13 ++++++++++--- sources | 4 ++-- 6 files changed, 15 insertions(+), 18 deletions(-) delete mode 100644 Bug-1238661-2---fix-mozillaSignalTrampoline-to-work.patch rename icecat-60.6.0-mozilla-1533969.patch => icecat-60.6.1-mozilla-1533969.patch (100%) diff --git a/.gitignore b/.gitignore index 42e32d5..afea17a 100644 --- a/.gitignore +++ b/.gitignore @@ -67,3 +67,5 @@ /icecat-60.5.2-gnu1.tar.bz2 /icecat-60.6.0-gnu1.tar.bz2 /icecat-60.6.0-langpacks.tar.gz +/icecat-60.6.1-gnu1.tar.bz2 +/icecat-60.6.1-langpacks.tar.gz diff --git a/Bug-1238661-2---fix-mozillaSignalTrampoline-to-work.patch b/Bug-1238661-2---fix-mozillaSignalTrampoline-to-work.patch deleted file mode 100644 index ccec54a..0000000 --- a/Bug-1238661-2---fix-mozillaSignalTrampoline-to-work.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up firefox-60.0/mfbt/LinuxSignal.h.mozilla-1238661 firefox-60.0/mfbt/LinuxSignal.h ---- firefox-60.0/mfbt/LinuxSignal.h.mozilla-1238661 2018-04-27 08:55:38.848241768 +0200 -+++ firefox-60.0/mfbt/LinuxSignal.h 2018-04-27 09:06:47.946769859 +0200 -@@ -22,7 +22,7 @@ - void* aContext) { - asm volatile("nop; nop; nop; nop" : : : "memory"); - -- asm volatile("b %0" : : "X"(H) : "memory"); -+ H(aSignal, aInfo, aContext); - } - - #define MOZ_SIGNAL_TRAMPOLINE(h) (mozilla::SignalTrampoline) diff --git a/icecat-60.6.0-mozilla-1533969.patch b/icecat-60.6.1-mozilla-1533969.patch similarity index 100% rename from icecat-60.6.0-mozilla-1533969.patch rename to icecat-60.6.1-mozilla-1533969.patch diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 767e093..9dd3738 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=60.6.0 +VERSION=60.6.1 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.spec b/icecat.spec index d53d707..d15fd6e 100644 --- a/icecat.spec +++ b/icecat.spec @@ -70,12 +70,15 @@ %bcond_without jack %if 0%{?fedora} > 29 -%global wayland_backend_default 1 %global with_vpx 0 %else %global with_vpx 1 %endif +%if 0%{?fedora} > 30 +%global wayland_backend_default 1 +%endif + # Use mozilla hardening option? %global hardened_build 1 @@ -83,8 +86,8 @@ ExcludeArch: %{arm} Name: icecat -Version: 60.6.0 -Release: 2%{?dist} +Version: 60.6.1 +Release: 1%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -746,6 +749,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Fri Mar 22 2019 Antonio Trande - 60.6.1-1 +- Mozilla release 60.6.1 +- Wayland backend made default starting from Fedora 31 (rhbz#1691852) + * Thu Mar 21 2019 Antonio Trande - 60.6.0-2 - Patched for building with newer glibc (2.29.9000-4) (mozilla #1533969) - Excluded on ARM (rhbz #1658940) diff --git a/sources b/sources index b3a3d08..d8ad96b 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.6.0-gnu1.tar.bz2) = a31ee52e0f8c69542a141fa432411f23225d40226f9e976b074cdf9f36b57c48984dfc7cf177d1f12de40c4250161232768e5b673be348623a8b7f5b33819dd3 -SHA512 (icecat-60.6.0-langpacks.tar.gz) = e694a1d587af77adb2c7f1d91f7a3f51b90d18fef1fd3247ad837022901b81e879369fb6025a45acfa07544ba356901fc80f9a5f93dfc9b7b09613a1cee8ab41 +SHA512 (icecat-60.6.1-gnu1.tar.bz2) = 7b07d752c31f28ed0f7b3d35dbc23c878fa9a8262174a5b5396e0a9eb9a64b9ba224707f1d466d484534441e5a60931825d47b501f1bcc26c8adffd1c43360cf +SHA512 (icecat-60.6.1-langpacks.tar.gz) = 1acaac68119381df7fd25189ec53786b2f962781157a9e3399bbe130cd6accb7db062345c7da2380df08a119acd22ab1a1b79eae3a7c8903a94723f34371071a SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 7dd67032d5be1533cdfc95d73e4a23e8efe39791 Mon Sep 17 00:00:00 2001 From: sagitter Date: Thu, 28 Mar 2019 17:55:46 +0100 Subject: [PATCH 015/473] Test-1 for using locale files correctly --- icecat.spec | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/icecat.spec b/icecat.spec index d15fd6e..30becc0 100644 --- a/icecat.spec +++ b/icecat.spec @@ -87,7 +87,7 @@ ExcludeArch: %{arm} Name: icecat Version: 60.6.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -469,7 +469,7 @@ echo "ac_add_options --enable-linker=gold" >> .mozconfig echo "ac_add_options --disable-strip" >> .mozconfig echo "ac_add_options --disable-install-strip" >> .mozconfig echo "ac_add_options --disable-tests" >> .mozconfig -echo "ac_add_options --with-l10n-base=$PWD/l10n" >> .mozconfig +#echo "ac_add_options --with-l10n-base=" >> .mozconfig echo "ac_add_options --disable-rust-tests" >> .mozconfig echo "ac_add_options --disable-gtest-in-build" >> .mozconfig @@ -613,9 +613,10 @@ mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1 install -p -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{_mandir}/man1/ ##Make sure locale works for langpacks -cat > objdir/dist/bin/browser/defaults/preferences/icecat-l10n.js << EOF -pref("general.useragent.locale", "chrome://global/locale/intl.properties"); -EOF +tree -L 4 objdir/dist/bin/browser/chrome/ +#cat > objdir/dist/bin/browser/chrome/defaults/preferences/icecat-l10n.js << EOF +#pref("general.useragent.locale", "chrome://global/locale/intl.properties"); +#EOF ##Extract langpacks, make any mods needed, repack the langpack, and install it. %if 0%{?build_langpacks} @@ -749,6 +750,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Thu Mar 28 2019 Antonio Trande - 60.6.1-2 +- Test-1 for using locale files correctly + * Fri Mar 22 2019 Antonio Trande - 60.6.1-1 - Mozilla release 60.6.1 - Wayland backend made default starting from Fedora 31 (rhbz#1691852) From 3986e2a985648f39cb526e57e5c0e191afaa3ff0 Mon Sep 17 00:00:00 2001 From: sagitter Date: Thu, 28 Mar 2019 19:53:18 +0100 Subject: [PATCH 016/473] Add tree --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 30becc0..94e29d7 100644 --- a/icecat.spec +++ b/icecat.spec @@ -248,7 +248,7 @@ BuildRequires: pulseaudio-libs-devel %if %{with jack} BuildRequires: jack-audio-connection-kit-devel %endif -BuildRequires: yasm +BuildRequires: yasm, tree BuildRequires: llvm BuildRequires: llvm-devel BuildRequires: clang From 24238bac1de0f218ce8369a249a558f7124790f8 Mon Sep 17 00:00:00 2001 From: sagitter Date: Thu, 28 Mar 2019 20:51:59 +0100 Subject: [PATCH 017/473] Test-2 for using locale files correctly --- icecat.spec | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/icecat.spec b/icecat.spec index 94e29d7..a9c3a16 100644 --- a/icecat.spec +++ b/icecat.spec @@ -248,7 +248,7 @@ BuildRequires: pulseaudio-libs-devel %if %{with jack} BuildRequires: jack-audio-connection-kit-devel %endif -BuildRequires: yasm, tree +BuildRequires: yasm BuildRequires: llvm BuildRequires: llvm-devel BuildRequires: clang @@ -613,10 +613,9 @@ mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1 install -p -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{_mandir}/man1/ ##Make sure locale works for langpacks -tree -L 4 objdir/dist/bin/browser/chrome/ -#cat > objdir/dist/bin/browser/chrome/defaults/preferences/icecat-l10n.js << EOF -#pref("general.useragent.locale", "chrome://global/locale/intl.properties"); -#EOF +cat > objdir/dist/bin/browser/chrome/en-US/locale/browser/preferences/icecat-l10n.js << EOF +pref("general.useragent.locale", "chrome://en-US/locale/en-US/global-platform/unix/intl.properties"); +EOF ##Extract langpacks, make any mods needed, repack the langpack, and install it. %if 0%{?build_langpacks} From 2608d61ffe2057f5d43ba7786df5261d70b7aaa3 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 30 Mar 2019 17:19:36 +0100 Subject: [PATCH 018/473] Test-2 for using locale files correctly --- icecat.spec | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/icecat.spec b/icecat.spec index a9c3a16..ac1fe98 100644 --- a/icecat.spec +++ b/icecat.spec @@ -469,7 +469,12 @@ echo "ac_add_options --enable-linker=gold" >> .mozconfig echo "ac_add_options --disable-strip" >> .mozconfig echo "ac_add_options --disable-install-strip" >> .mozconfig echo "ac_add_options --disable-tests" >> .mozconfig -#echo "ac_add_options --with-l10n-base=" >> .mozconfig + +# Localization +%if 0%{?build_langpacks} +echo "ac_add_options --enable-ui-locale=ISOcode" >> .mozconfig +echo "ac_add_options --with-l10n-base=$PWD/l10n" >> .mozconfig +%endif echo "ac_add_options --disable-rust-tests" >> .mozconfig echo "ac_add_options --disable-gtest-in-build" >> .mozconfig @@ -612,11 +617,6 @@ chmod 755 %{buildroot}%{_bindir}/%{name}-wayland mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1 install -p -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{_mandir}/man1/ -##Make sure locale works for langpacks -cat > objdir/dist/bin/browser/chrome/en-US/locale/browser/preferences/icecat-l10n.js << EOF -pref("general.useragent.locale", "chrome://en-US/locale/en-US/global-platform/unix/intl.properties"); -EOF - ##Extract langpacks, make any mods needed, repack the langpack, and install it. %if 0%{?build_langpacks} echo > %{name}.lang From 39dd1233801b86e58598c1e4611f0fcd03643088 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 30 Mar 2019 19:11:04 +0100 Subject: [PATCH 019/473] Test-3 for using locale files correctly --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index ac1fe98..f92d9a8 100644 --- a/icecat.spec +++ b/icecat.spec @@ -472,7 +472,7 @@ echo "ac_add_options --disable-tests" >> .mozconfig # Localization %if 0%{?build_langpacks} -echo "ac_add_options --enable-ui-locale=ISOcode" >> .mozconfig +echo "ac_add_options --enable-ui-locale="ach af an ar ast as az be bg bn-BD bn-IN br bs cak ca cs cy da de dsb el en-GB en-US en-ZA eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM ia id is it ja kab ka kk km kn ko lij lt lv mai mk ml mr ms my nb-NO ne-NP nl nn-NO oc or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq sr sv-SE ta te th tr uk ur uz vi xh zh-CN zh-TW" >> .mozconfig echo "ac_add_options --with-l10n-base=$PWD/l10n" >> .mozconfig %endif From c8d3f6d3b960b7cb3103430418a3aa083457c73f Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 30 Mar 2019 19:22:55 +0100 Subject: [PATCH 020/473] Fix typo --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index f92d9a8..9d40e76 100644 --- a/icecat.spec +++ b/icecat.spec @@ -472,7 +472,7 @@ echo "ac_add_options --disable-tests" >> .mozconfig # Localization %if 0%{?build_langpacks} -echo "ac_add_options --enable-ui-locale="ach af an ar ast as az be bg bn-BD bn-IN br bs cak ca cs cy da de dsb el en-GB en-US en-ZA eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM ia id is it ja kab ka kk km kn ko lij lt lv mai mk ml mr ms my nb-NO ne-NP nl nn-NO oc or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq sr sv-SE ta te th tr uk ur uz vi xh zh-CN zh-TW" >> .mozconfig +echo "ac_add_options --enable-ui-locale="ach af an ar ast as az be bg bn-BD bn-IN br bs cak ca cs cy da de dsb el en-GB en-US en-ZA eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM ia id is it ja kab ka kk km kn ko lij lt lv mai mk ml mr ms my nb-NO ne-NP nl nn-NO oc or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq sr sv-SE ta te th tr uk ur uz vi xh zh-CN zh-TW"" >> .mozconfig echo "ac_add_options --with-l10n-base=$PWD/l10n" >> .mozconfig %endif From 22cd89f4bc5a5a174ad963eaf8575d3f271fc3e2 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 30 Mar 2019 20:09:19 +0100 Subject: [PATCH 021/473] Undo last chenages --- icecat.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 9d40e76..1c60aec 100644 --- a/icecat.spec +++ b/icecat.spec @@ -472,7 +472,6 @@ echo "ac_add_options --disable-tests" >> .mozconfig # Localization %if 0%{?build_langpacks} -echo "ac_add_options --enable-ui-locale="ach af an ar ast as az be bg bn-BD bn-IN br bs cak ca cs cy da de dsb el en-GB en-US en-ZA eo es-AR es-CL es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM ia id is it ja kab ka kk km kn ko lij lt lv mai mk ml mr ms my nb-NO ne-NP nl nn-NO oc or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq sr sv-SE ta te th tr uk ur uz vi xh zh-CN zh-TW"" >> .mozconfig echo "ac_add_options --with-l10n-base=$PWD/l10n" >> .mozconfig %endif From d628ecf467614a4ccee9d2ede248ed025b8765e6 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 6 Apr 2019 21:20:41 +0200 Subject: [PATCH 022/473] Release 60.6.1-gnu2 --- .gitignore | 1 + icecat-wayland.sh.in | 4 ++-- icecat-x11.sh.in | 4 ++-- icecat.sh.in | 13 +++++----- icecat.spec | 56 +++++++++++++++++++++++++------------------- sources | 2 +- 6 files changed, 45 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index afea17a..eed362d 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,4 @@ /icecat-60.6.0-langpacks.tar.gz /icecat-60.6.1-gnu1.tar.bz2 /icecat-60.6.1-langpacks.tar.gz +/icecat-60.6.1-gnu2.tar.bz2 diff --git a/icecat-wayland.sh.in b/icecat-wayland.sh.in index 5c6c9d7..d04465c 100644 --- a/icecat-wayland.sh.in +++ b/icecat-wayland.sh.in @@ -3,5 +3,5 @@ # Run GNU IceCat under Wayland # -export GDK_BACKEND=wayland -exec /usr/bin/icecat "$@" +export MOZ_ENABLE_WAYLAND=1 +exec /__PREFIX__/bin/icecat "$@" diff --git a/icecat-x11.sh.in b/icecat-x11.sh.in index f7173e5..e80fad2 100644 --- a/icecat-x11.sh.in +++ b/icecat-x11.sh.in @@ -3,5 +3,5 @@ # Run GNU IceCat on X11 backend # -export GDK_BACKEND=x11 -exec /usr/bin/icecat "$@" +export MOZ_DISABLE_WAYLAND=1 +exec /__PREFIX__/bin/icecat "$@" diff --git a/icecat.sh.in b/icecat.sh.in index 704cccc..e4c1a24 100644 --- a/icecat.sh.in +++ b/icecat.sh.in @@ -69,10 +69,10 @@ MOZ_LAUNCHER="$MOZ_DIST_BIN/run-icecat.sh" ## ## Enable X11 backend by default? ## -if __DEFAULT_X11__; then - if ! [ "$GDK_BACKEND" ]; then - export GDK_BACKEND=x11 - fi +if __DEFAULT_WAYLAND__ && ! [ $MOZ_DISABLE_WAYLAND ]; then + if [ "$XDG_CURRENT_DESKTOP" == "GNOME" ]; then + export MOZ_ENABLE_WAYLAND=1 + fi fi ## @@ -107,7 +107,8 @@ export MOZ_PLUGIN_PATH ## ## Set MOZ_APP_LAUNCHER for gnome-session ## -export MOZ_APP_LAUNCHER="/usr/bin/icecat" +export MOZ_APP_LAUNCHER="/__PREFIX__/bin/icecat" + ## ## Set FONTCONFIG_PATH for Xft/fontconfig @@ -148,7 +149,7 @@ export MOZ_USE_XINPUT2=1 ## -## To disable the use of Firefox localization, set MOZ_DISABLE_LANGPACKS=1 +## To disable the use of IceCat localization, set MOZ_DISABLE_LANGPACKS=1 ## in your environment before launching Firefox. ## # diff --git a/icecat.spec b/icecat.spec index 1c60aec..26292c4 100644 --- a/icecat.spec +++ b/icecat.spec @@ -18,6 +18,7 @@ ##Define installation directories %global icecatappdir %{_libdir}/%{name} %global icecat_ver %{name}-%{version} +%global gnu_ver gnu2 %global icecat_devel %{name}-devel-%{version} ##Define language files directory @@ -45,11 +46,7 @@ %endif # Use system libicu? -%if 0%{?fedora} > 28 %global system_libicu 1 -%else -%global system_libicu 0 -%endif # Use system nspr/nss? %global system_nss 1 @@ -87,7 +84,7 @@ ExcludeArch: %{arm} Name: icecat Version: 60.6.1 -Release: 2%{?dist} +Release: 2.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -97,7 +94,7 @@ URL: http://www.gnu.org/software/gnuzilla/ ## Source archive created by scripts based on Gnuzilla files. ## Modified files are hosted in a dedicated fork repository: ## https://fedorapeople.org/cgit/sagitter/public_git/icecat.git/ -Source0: https://sagitter.fedorapeople.org/icecat/v%{version}/%{name}-%{version}-gnu1.tar.bz2 +Source0: https://sagitter.fedorapeople.org/icecat/v%{version}/%{name}-%{version}-gnu2.tar.bz2 Source2: %{name}.png Source3: %{name}-mozconfig-common @@ -270,10 +267,10 @@ Requires: nspr >= %{nspr_build_version} Requires: nss >= %{nss_build_version} %endif Requires: fedora-bookmarks -Suggests: mozilla-https-everywhere Suggests: mozilla-ublock-origin Provides: webclient +Provides: mozilla-https-everywhere = 20190131 %description GNUZilla Icecat is a fully-free fork of Mozilla Firefox ESR. @@ -326,9 +323,6 @@ find . -type f -name "*.c" -exec chmod 0644 '{}' \; ##Copy license files tar -xf %{SOURCE5} -##Prevent HTTPS-everywhere addon's installation -sed '/https-everywhere/d' -i ./browser/installer/package-manifest.in - %patch2 -p0 -b .libevent_linkflag %patch3 -p1 -b .arm %patch7 -p0 @@ -586,29 +580,26 @@ done mkdir -p $RPM_BUILD_ROOT%{_datadir}/applications desktop-file-install --dir $RPM_BUILD_ROOT%{_datadir}/applications %{SOURCE14} +# set up the IceCat start script %if 0%{?wayland_backend_default} -desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE16} +%global wayland_default true %else -desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE9} -%endif - -# set up the firefox start script -%if 0%{?wayland_backend_default} -%global x11_state false -%else -%global x11_state true +%global wayland_default false %endif rm -rf $RPM_BUILD_ROOT%{_bindir}/%{name} -sed -e 's/__DEFAULT_X11__/%{x11_state}/' %{SOURCE13} > %{buildroot}%{_bindir}/%{name} +%{__sed} -e 's/__DEFAULT_WAYLAND__/%{wayland_default}/' \ + -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE13} > %{buildroot}%{_bindir}/%{name} chmod 755 %{buildroot}%{_bindir}/%{name} %if 0%{?wayland_backend_default} -cat %{SOURCE15} > %{buildroot}%{_bindir}/%{name}-x11 +%{__sed} -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE15} > %{buildroot}%{_bindir}/%{name}-x11 chmod 755 %{buildroot}%{_bindir}/%{name}-x11 +desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE16} %else -cat %{SOURCE12} > %{buildroot}%{_bindir}/%{name}-wayland +%{__sed} -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE12} > %{buildroot}%{_bindir}/%{name}-wayland chmod 755 %{buildroot}%{_bindir}/%{name}-wayland +desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE9} %endif # @@ -647,6 +638,21 @@ ln -s langpack-$language_long@icecat.mozilla.org.xpi langpack-$language_short@ic cd - echo "%%lang($language_short) %{langpackdir}/langpack-$language_short@icecat.mozilla.org.xpi" >> %{name}.lang } + +# Table of fallbacks for each language +create_default_langpack "bn-IN" "bn" +create_default_langpack "es-AR" "es" +create_default_langpack "fy-NL" "fy" +create_default_langpack "ga-IE" "ga" +create_default_langpack "gu-IN" "gu" +create_default_langpack "hi-IN" "hi" +create_default_langpack "hy-AM" "hy" +create_default_langpack "nb-NO" "nb" +create_default_langpack "nn-NO" "nn" +create_default_langpack "pa-IN" "pa" +create_default_langpack "pt-PT" "pt" +create_default_langpack "sv-SE" "sv" +create_default_langpack "zh-TW" "zh" %endif # Remove copied libraries to speed up build @@ -748,8 +754,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog -* Thu Mar 28 2019 Antonio Trande - 60.6.1-2 -- Test-1 for using locale files correctly +* Sat Apr 06 2019 Antonio Trande - 60.6.1-2.gnu2 +- Source archive rebuilt (gnu2) +- Update extensions +- Use bundled https-everywhere extension * Fri Mar 22 2019 Antonio Trande - 60.6.1-1 - Mozilla release 60.6.1 diff --git a/sources b/sources index d8ad96b..1d13a07 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.6.1-gnu1.tar.bz2) = 7b07d752c31f28ed0f7b3d35dbc23c878fa9a8262174a5b5396e0a9eb9a64b9ba224707f1d466d484534441e5a60931825d47b501f1bcc26c8adffd1c43360cf +SHA512 (icecat-60.6.1-gnu2.tar.bz2) = cea5f60eb1d6ca27b9482331fe57f6ea982adcc9ea0c4e2f1fc7dab902c40e2b219c9fb3fa12931c020c3496229df07b727567745b085486e663a33192928518 SHA512 (icecat-60.6.1-langpacks.tar.gz) = 1acaac68119381df7fd25189ec53786b2f962781157a9e3399bbe130cd6accb7db062345c7da2380df08a119acd22ab1a1b79eae3a7c8903a94723f34371071a SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 7053f56d1a1307044ebb83ff16dbc8fd1f74b6d3 Mon Sep 17 00:00:00 2001 From: sagitter Date: Mon, 6 May 2019 12:11:18 +0200 Subject: [PATCH 023/473] Mozilla release 60.6.2 (bugfix mozb #1549061) --- .gitignore | 1 + icecat-lang_download.sh | 2 +- icecat.spec | 17 +++++++++-------- sources | 2 +- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index eed362d..6667793 100644 --- a/.gitignore +++ b/.gitignore @@ -70,3 +70,4 @@ /icecat-60.6.1-gnu1.tar.bz2 /icecat-60.6.1-langpacks.tar.gz /icecat-60.6.1-gnu2.tar.bz2 +/icecat-60.6.2-gnu1.tar.bz2 diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 9dd3738..8f457a4 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=60.6.1 +VERSION=60.6.2 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.spec b/icecat.spec index 26292c4..751bb35 100644 --- a/icecat.spec +++ b/icecat.spec @@ -18,7 +18,7 @@ ##Define installation directories %global icecatappdir %{_libdir}/%{name} %global icecat_ver %{name}-%{version} -%global gnu_ver gnu2 +%global gnu_ver gnu1 %global icecat_devel %{name}-devel-%{version} ##Define language files directory @@ -83,8 +83,8 @@ ExcludeArch: %{arm} Name: icecat -Version: 60.6.1 -Release: 2.%{gnu_ver}%{?dist} +Version: 60.6.2 +Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -94,14 +94,14 @@ URL: http://www.gnu.org/software/gnuzilla/ ## Source archive created by scripts based on Gnuzilla files. ## Modified files are hosted in a dedicated fork repository: ## https://fedorapeople.org/cgit/sagitter/public_git/icecat.git/ -Source0: https://sagitter.fedorapeople.org/icecat/v%{version}/%{name}-%{version}-gnu2.tar.bz2 +Source0: https://sagitter.fedorapeople.org/icecat/v%{version}/%{name}-%{version}-gnu1.tar.bz2 Source2: %{name}.png Source3: %{name}-mozconfig-common ##Language files downloaded by source7 script %if 0%{?build_langpacks} -Source4: %{name}-%{version}-langpacks.tar.gz +Source4: %{name}-60.6.1-langpacks.tar.gz %endif ##All license files @@ -167,7 +167,7 @@ Patch417: bug1375074-save-restore-x28.patch Patch418: mozilla-1436242.patch Patch420: %{name}-disable-dbus-remote.patch Patch421: %{name}-bz1445383.patch -Patch422: %{name}-%{version}-mozilla-1533969.patch +Patch422: %{name}-60.6.1-mozilla-1533969.patch # Wayland specific upstream patches Patch565: firefox-pipewire.patch @@ -194,8 +194,6 @@ BuildRequires: pkgconfig(gtk+-3.0) %endif BuildRequires: gstreamer1-devel BuildRequires: gstreamer1-plugins-base-devel -BuildRequires: gstreamer-devel -BuildRequires: gstreamer-plugins-base-devel BuildRequires: hunspell-devel BuildRequires: ImageMagick, autotrace BuildRequires: java-1.8.0-openjdk-headless @@ -754,6 +752,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Mon May 06 2019 Antonio Trande - 60.6.2-1 +- Mozilla release 60.6.2 (bugfix mozb #1549061) + * Sat Apr 06 2019 Antonio Trande - 60.6.1-2.gnu2 - Source archive rebuilt (gnu2) - Update extensions diff --git a/sources b/sources index 1d13a07..ce2a089 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.6.1-gnu2.tar.bz2) = cea5f60eb1d6ca27b9482331fe57f6ea982adcc9ea0c4e2f1fc7dab902c40e2b219c9fb3fa12931c020c3496229df07b727567745b085486e663a33192928518 SHA512 (icecat-60.6.1-langpacks.tar.gz) = 1acaac68119381df7fd25189ec53786b2f962781157a9e3399bbe130cd6accb7db062345c7da2380df08a119acd22ab1a1b79eae3a7c8903a94723f34371071a +SHA512 (icecat-60.6.2-gnu1.tar.bz2) = a7497ff83b77218e696095d14dce68d3f4c9661fd6540c7cda00ec3f44e119be4dfb86c7e9041f36d15eb5444c593303c5312a94c46f94f2a487ff40dd6ffe59 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From d2194b6f84b8765c3e84034e4ff5e0b1dc34de01 Mon Sep 17 00:00:00 2001 From: sagitter Date: Thu, 9 May 2019 19:40:04 +0200 Subject: [PATCH 024/473] Mozilla release 60.6.3 (bugfix mozb #1549249) --- .gitignore | 2 ++ icecat-lang_download.sh | 2 +- icecat.spec | 17 ++++++++++------- sources | 4 ++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 6667793..5aca4d1 100644 --- a/.gitignore +++ b/.gitignore @@ -71,3 +71,5 @@ /icecat-60.6.1-langpacks.tar.gz /icecat-60.6.1-gnu2.tar.bz2 /icecat-60.6.2-gnu1.tar.bz2 +/icecat-60.6.3-gnu1.tar.bz2 +/icecat-60.6.3-langpacks.tar.gz diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 8f457a4..04a9585 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=60.6.2 +VERSION=60.6.3 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.spec b/icecat.spec index 751bb35..bea73c5 100644 --- a/icecat.spec +++ b/icecat.spec @@ -83,7 +83,7 @@ ExcludeArch: %{arm} Name: icecat -Version: 60.6.2 +Version: 60.6.3 Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser @@ -101,7 +101,7 @@ Source3: %{name}-mozconfig-common ##Language files downloaded by source7 script %if 0%{?build_langpacks} -Source4: %{name}-60.6.1-langpacks.tar.gz +Source4: %{name}-%{version}-langpacks.tar.gz %endif ##All license files @@ -277,14 +277,14 @@ Extensions included to this version of IceCat: * AboutIceCat Adds a custom "about:icecat" homepage with links to information about the free software and privacy features in IceCat, and check-boxes to enable - and disable the ones more prone to break websites. + and disable the ones more prone to break websites * LibreJS GNU LibreJS aims to address the JavaScript problem described in Richard - Stallman's article The JavaScript Trap. + Stallman's article The JavaScript Trap - * HTML5-video-everywhere - Uses the native video player to play embedded videos from different sources + * HTTPS Everywhere + HTTPS Everywhere is an extension that encrypts your communications with many major websites, making your browsing more secure * Tor™ Browser Button Simple TOR network integration @@ -752,7 +752,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog -* Mon May 06 2019 Antonio Trande - 60.6.2-1 +* Thu May 09 2019 Antonio Trande - 60.6.3-1.gnu1 +- Mozilla release 60.6.3 (bugfix mozb #1549249) + +* Mon May 06 2019 Antonio Trande - 60.6.2-1.gnu1 - Mozilla release 60.6.2 (bugfix mozb #1549061) * Sat Apr 06 2019 Antonio Trande - 60.6.1-2.gnu2 diff --git a/sources b/sources index ce2a089..5e245db 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.6.1-langpacks.tar.gz) = 1acaac68119381df7fd25189ec53786b2f962781157a9e3399bbe130cd6accb7db062345c7da2380df08a119acd22ab1a1b79eae3a7c8903a94723f34371071a -SHA512 (icecat-60.6.2-gnu1.tar.bz2) = a7497ff83b77218e696095d14dce68d3f4c9661fd6540c7cda00ec3f44e119be4dfb86c7e9041f36d15eb5444c593303c5312a94c46f94f2a487ff40dd6ffe59 +SHA512 (icecat-60.6.3-gnu1.tar.bz2) = bf3172dbf8cac6c5ec399171e9e5e321c6931423d7d8352e628418d450f8694cbab5b46a129ea225646f1b63d7bd9410142040108fdfd36c89f24c0d1762517e +SHA512 (icecat-60.6.3-langpacks.tar.gz) = 3aced9e73a1a7198c50e9ccddfdc7b72fe41ced88d0b1a62976135ebb42ad1e36f0c4470dda0b8b0bea8d94ecc25a31d93071dcc00fa896e3f09646a11ef9f9e SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 77083c2bf61183835fc0653a742b4698497a59cf Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 11 May 2019 18:48:53 +0200 Subject: [PATCH 025/473] New source archive --- icecat.spec | 2 +- sources | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/icecat.spec b/icecat.spec index bea73c5..0f305f7 100644 --- a/icecat.spec +++ b/icecat.spec @@ -324,7 +324,7 @@ tar -xf %{SOURCE5} %patch2 -p0 -b .libevent_linkflag %patch3 -p1 -b .arm %patch7 -p0 -%patch8 -p0 +%patch8 -p0 -b .fix_installer %patch37 -p1 -b .jit-atomic-lucky diff --git a/sources b/sources index 5e245db..99cd8c3 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.6.3-gnu1.tar.bz2) = bf3172dbf8cac6c5ec399171e9e5e321c6931423d7d8352e628418d450f8694cbab5b46a129ea225646f1b63d7bd9410142040108fdfd36c89f24c0d1762517e +SHA512 (icecat-60.6.3-gnu1.tar.bz2) = 66bfaad3131c6c9bbbade8a52c94bc77056b8bc02b384ead49f028e85e5d5878e46ede2f9f23a700c80dfeeb5be0aa4dbdd31ee57150d2b47dbb70e655655284 SHA512 (icecat-60.6.3-langpacks.tar.gz) = 3aced9e73a1a7198c50e9ccddfdc7b72fe41ced88d0b1a62976135ebb42ad1e36f0c4470dda0b8b0bea8d94ecc25a31d93071dcc00fa896e3f09646a11ef9f9e SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 4ea503fe7038df0a51959984aacdfeca4b4d96a3 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 12 May 2019 15:54:22 +0200 Subject: [PATCH 026/473] Build release 60.6.3-gnu2 --- .gitignore | 1 + icecat.appdata.xml | 4 ++-- icecat.spec | 11 +++++++---- sources | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 5aca4d1..d18befc 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,4 @@ /icecat-60.6.2-gnu1.tar.bz2 /icecat-60.6.3-gnu1.tar.bz2 /icecat-60.6.3-langpacks.tar.gz +/icecat-60.6.3-gnu2.tar.bz2 diff --git a/icecat.appdata.xml b/icecat.appdata.xml index e30c55f..69d0ec2 100644 --- a/icecat.appdata.xml +++ b/icecat.appdata.xml @@ -34,8 +34,8 @@ and disable the ones more prone to break websites.

- HTML5-video-everywhere - Uses the native video player to play embedded videos from different sources + HTTPS Everywhere + HTTPS Everywhere is an extension that encrypts your communications with many major websites, making your browsing more secure

A set of companion extensions for LibreJS by Nathan Nichols (https://addons.mozilla.org/en-US/firefox/user/NateN1222/) diff --git a/icecat.spec b/icecat.spec index 0f305f7..f26ae2b 100644 --- a/icecat.spec +++ b/icecat.spec @@ -18,7 +18,7 @@ ##Define installation directories %global icecatappdir %{_libdir}/%{name} %global icecat_ver %{name}-%{version} -%global gnu_ver gnu1 +%global gnu_ver gnu2 %global icecat_devel %{name}-devel-%{version} ##Define language files directory @@ -84,7 +84,7 @@ ExcludeArch: %{arm} Name: icecat Version: 60.6.3 -Release: 1.%{gnu_ver}%{?dist} +Release: 2.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -93,8 +93,8 @@ URL: http://www.gnu.org/software/gnuzilla/ ## Source archive created by scripts based on Gnuzilla files. ## Modified files are hosted in a dedicated fork repository: -## https://fedorapeople.org/cgit/sagitter/public_git/icecat.git/ -Source0: https://sagitter.fedorapeople.org/icecat/v%{version}/%{name}-%{version}-gnu1.tar.bz2 +## https://gitlab.com/anto.trande/icecat +Source0: https://sagitter.fedorapeople.org/%{name}/v%{version}/%{name}-%{version}-%{gnu_ver}.tar.bz2 Source2: %{name}.png Source3: %{name}-mozconfig-common @@ -752,6 +752,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Sun May 12 2019 Antonio Trande - 60.6.3-1.gnu2 +- Build release 60.6.3-gnu2 + * Thu May 09 2019 Antonio Trande - 60.6.3-1.gnu1 - Mozilla release 60.6.3 (bugfix mozb #1549249) diff --git a/sources b/sources index 99cd8c3..91f0349 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.6.3-gnu1.tar.bz2) = 66bfaad3131c6c9bbbade8a52c94bc77056b8bc02b384ead49f028e85e5d5878e46ede2f9f23a700c80dfeeb5be0aa4dbdd31ee57150d2b47dbb70e655655284 +SHA512 (icecat-60.6.3-gnu2.tar.bz2) = 5a925a1de91ec09eda9dd9c0d3825cf6f6997f3ba0c4887f464549e5cc6846d5f9ac3106141c138aa5309d4aafb2729794a668920128b6cd35297792fdc1f777 SHA512 (icecat-60.6.3-langpacks.tar.gz) = 3aced9e73a1a7198c50e9ccddfdc7b72fe41ced88d0b1a62976135ebb42ad1e36f0c4470dda0b8b0bea8d94ecc25a31d93071dcc00fa896e3f09646a11ef9f9e SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 29641326f07474b4c86776d5a41fb7e820b62960 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 12 May 2019 16:12:30 +0200 Subject: [PATCH 027/473] Fix Changelog entry --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index f26ae2b..9456319 100644 --- a/icecat.spec +++ b/icecat.spec @@ -752,7 +752,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog -* Sun May 12 2019 Antonio Trande - 60.6.3-1.gnu2 +* Sun May 12 2019 Antonio Trande - 60.6.3-2.gnu2 - Build release 60.6.3-gnu2 * Thu May 09 2019 Antonio Trande - 60.6.3-1.gnu1 From 1710db4a34a16bf8ad361e3e66744fcb77ad8d54 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 21 May 2019 18:06:08 +0200 Subject: [PATCH 028/473] Mozilla release 60.7.0 --- .gitignore | 2 ++ icecat-lang_download.sh | 2 +- icecat.spec | 12 ++++++++---- sources | 4 ++-- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index d18befc..1d905dc 100644 --- a/.gitignore +++ b/.gitignore @@ -74,3 +74,5 @@ /icecat-60.6.3-gnu1.tar.bz2 /icecat-60.6.3-langpacks.tar.gz /icecat-60.6.3-gnu2.tar.bz2 +/icecat-60.7.0-gnu1.tar.bz2 +/icecat-60.7.0-langpacks.tar.gz diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 04a9585..0ce70cd 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=60.6.3 +VERSION=60.7.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.spec b/icecat.spec index 9456319..fe2e753 100644 --- a/icecat.spec +++ b/icecat.spec @@ -18,7 +18,7 @@ ##Define installation directories %global icecatappdir %{_libdir}/%{name} %global icecat_ver %{name}-%{version} -%global gnu_ver gnu2 +%global gnu_ver gnu1 %global icecat_devel %{name}-devel-%{version} ##Define language files directory @@ -83,8 +83,8 @@ ExcludeArch: %{arm} Name: icecat -Version: 60.6.3 -Release: 2.%{gnu_ver}%{?dist} +Version: 60.7.0 +Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -284,7 +284,8 @@ Extensions included to this version of IceCat: Stallman's article The JavaScript Trap * HTTPS Everywhere - HTTPS Everywhere is an extension that encrypts your communications with many major websites, making your browsing more secure + HTTPS Everywhere is an extension that encrypts your communications with many major websites, + making your browsing more secure * Tor™ Browser Button Simple TOR network integration @@ -752,6 +753,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Mon May 20 2019 Antonio Trande - 60.7.0-1.gnu1 +- Mozilla release 60.7.0 + * Sun May 12 2019 Antonio Trande - 60.6.3-2.gnu2 - Build release 60.6.3-gnu2 diff --git a/sources b/sources index 91f0349..2106d99 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.6.3-gnu2.tar.bz2) = 5a925a1de91ec09eda9dd9c0d3825cf6f6997f3ba0c4887f464549e5cc6846d5f9ac3106141c138aa5309d4aafb2729794a668920128b6cd35297792fdc1f777 -SHA512 (icecat-60.6.3-langpacks.tar.gz) = 3aced9e73a1a7198c50e9ccddfdc7b72fe41ced88d0b1a62976135ebb42ad1e36f0c4470dda0b8b0bea8d94ecc25a31d93071dcc00fa896e3f09646a11ef9f9e +SHA512 (icecat-60.7.0-gnu1.tar.bz2) = 4269de3b02ed2c7a97b197e3df23499e650e7c1d7e45a5749f03a7bac00f3a80a89f90e395a81ad3d0a224500312e69dbe51922dc2f5a3e96fd13918e0f5da7e +SHA512 (icecat-60.7.0-langpacks.tar.gz) = 8bb509ebae69eb8b97c664960e0798f322b02a9d4da747e68898ace3ae92e02d00ba928489bddf908f5df36b910e7dc4e562b80a906d013d234119f9f1b83242 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From d121f1ecfed2095b3040ffd049819d807a707742 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 28 May 2019 21:47:44 +0200 Subject: [PATCH 029/473] Build release 60.7.0-gnu2 --- .gitignore | 1 + icecat-wayland.desktop | 4 ++-- icecat.appdata.xml | 34 ++++++++++++++++++++++------------ icecat.spec | 12 ++++++++++-- sources | 2 +- 5 files changed, 36 insertions(+), 17 deletions(-) diff --git a/.gitignore b/.gitignore index 1d905dc..bf4f378 100644 --- a/.gitignore +++ b/.gitignore @@ -76,3 +76,4 @@ /icecat-60.6.3-gnu2.tar.bz2 /icecat-60.7.0-gnu1.tar.bz2 /icecat-60.7.0-langpacks.tar.gz +/icecat-60.7.0-gnu2.tar.bz2 diff --git a/icecat-wayland.desktop b/icecat-wayland.desktop index 411d7da..44e6c47 100644 --- a/icecat-wayland.desktop +++ b/icecat-wayland.desktop @@ -1,6 +1,6 @@ [Desktop Entry] Version=1.0 -Name=GNU IceCat\n on Wayland +Name=GNU IceCat on Wayland Comment=Browse the World Wide Web GenericName=Web Browser Keywords=Internet;WWW;Browser;Web;Explorer; @@ -11,7 +11,7 @@ Type=Application MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;x-scheme-handler/chrome;video/webm;application/x-xpinstall; Categories=Network;WebBrowser; StartupNotify=true -Name[en_US]=GNU IceCat\n on Wayland +Name[en_US]=GNU IceCat on Wayland Actions=new-window;new-private-window; [Desktop Action new-window] diff --git a/icecat.appdata.xml b/icecat.appdata.xml index 69d0ec2..686c9e7 100644 --- a/icecat.appdata.xml +++ b/icecat.appdata.xml @@ -22,35 +22,45 @@

Extensions included to this version of IceCat:

-

+

    +
  • LibreJS GNU LibreJS aims to address the JavaScript problem described in Richard Stallman's article The JavaScript Trap. -

    -

    +

  • +
  • AboutIceCat Adds a custom "about:icecat" homepage with links to information about the free software and privacy features in IceCat, and check-boxes to enable and disable the ones more prone to break websites. -

    -

    +

  • +
  • HTTPS Everywhere HTTPS Everywhere is an extension that encrypts your communications with many major websites, making your browsing more secure -

    -

    +

  • +
  • A set of companion extensions for LibreJS by Nathan Nichols (https://addons.mozilla.org/en-US/firefox/user/NateN1222/) are pre-installed, and provide workarounds to use some services at USPS, RSF.org, SumOfUs.org, pay.gov, McDonald's, goteo.org and Google Docs without using nonfree JavaScript. -

    -

    +

  • +
  • A series of configuration changes and tweaks were applied to ensure that IceCat does not initiate network connections that the user has not explicitly requested. This implies not downloading feeds, updates, blacklists or any other similar data needed during startup. -

    -

    +

  • +
  • Tor™ Browser Button Simple TOR network integration (requires running TOR separately at the operating system level) -

    +
  • +
  • + Searxes + Third-party Request Blocker +
  • +
  • + View Tube + Watch videos from video sharing websites with extra options +
  • +
http://www.gnu.org/software/gnuzilla/ diff --git a/icecat.spec b/icecat.spec index fe2e753..23f9123 100644 --- a/icecat.spec +++ b/icecat.spec @@ -18,7 +18,6 @@ ##Define installation directories %global icecatappdir %{_libdir}/%{name} %global icecat_ver %{name}-%{version} -%global gnu_ver gnu1 %global icecat_devel %{name}-devel-%{version} ##Define language files directory @@ -82,9 +81,12 @@ # Exclude ARM builds for rhbz #1658940 ExcludeArch: %{arm} +# Set new source-code build version +%global gnu_ver gnu2 + Name: icecat Version: 60.7.0 -Release: 1.%{gnu_ver}%{?dist} +Release: 2.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -294,6 +296,9 @@ Extensions included to this version of IceCat: * Searxes Third-party Request Blocker + * View Tube + Watch videos from video sharing websites with extra options + %if 0%{?wayland_backend_default} %package x11 Summary: GNU IceCat X11 launcher @@ -753,6 +758,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Tue May 28 2019 Antonio Trande - 60.7.0-2.gnu2 +- Build release 60.7.0-gnu2 + * Mon May 20 2019 Antonio Trande - 60.7.0-1.gnu1 - Mozilla release 60.7.0 diff --git a/sources b/sources index 2106d99..d9d2a9d 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.7.0-gnu1.tar.bz2) = 4269de3b02ed2c7a97b197e3df23499e650e7c1d7e45a5749f03a7bac00f3a80a89f90e395a81ad3d0a224500312e69dbe51922dc2f5a3e96fd13918e0f5da7e +SHA512 (icecat-60.7.0-gnu2.tar.bz2) = 1c13e3715f3131fb44346cc2c0418ddeeb7ae6e9bd83d0f11ba2504e014f33aeff2484768dc508ab5e7aec18bc6025a84bde11aac12274eba559fbf9864bf478 SHA512 (icecat-60.7.0-langpacks.tar.gz) = 8bb509ebae69eb8b97c664960e0798f322b02a9d4da747e68898ace3ae92e02d00ba928489bddf908f5df36b910e7dc4e562b80a906d013d234119f9f1b83242 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 0a24cb56658553189e5954cbea174232d16ea847 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 19 Jun 2019 15:02:08 +0200 Subject: [PATCH 030/473] Mozilla release 60.7.1 --- .gitignore | 2 ++ icecat-lang_download.sh | 2 +- icecat.rpmlintrc | 38 -------------------------------------- icecat.spec | 14 +++++++------- sources | 4 ++-- 5 files changed, 12 insertions(+), 48 deletions(-) delete mode 100644 icecat.rpmlintrc diff --git a/.gitignore b/.gitignore index bf4f378..a220e0e 100644 --- a/.gitignore +++ b/.gitignore @@ -77,3 +77,5 @@ /icecat-60.7.0-gnu1.tar.bz2 /icecat-60.7.0-langpacks.tar.gz /icecat-60.7.0-gnu2.tar.bz2 +/icecat-60.7.1-gnu1.tar.bz2 +/icecat-60.7.1-langpacks.tar.gz diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 0ce70cd..08d9a1f 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=60.7.0 +VERSION=60.7.1 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc deleted file mode 100644 index 22effff..0000000 --- a/icecat.rpmlintrc +++ /dev/null @@ -1,38 +0,0 @@ -# Edited by sagitter (sagitter AT fedoraproject dot org) - -# KNOWN BUGS: -# - -# TESTS: -##### SRPMs ##### - -# ifarch applied patches are okay -# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support -addFilter(r'(%ifarch-applied-patch) Patch*') - -# ERRORS: -##### RPMs ##### - -# chroot function (??) -addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') -addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') - -# Expected on FF browser -# https://support.mozilla.org/en-US/questions/1045418 -addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') -addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') - -# False positive -addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') -addFilter(r'(unversioned-explicit-provides) webclient') - -# WARNINGS: -##### RPMs ##### - -addFilter(r'(no-manual-page-for-binary) icecat-wayland') - -##### SRPMs ##### -# Different file size due to the signature of the source code tarbz archive -addFilter(r'file-size-mismatch') - -addFilter(r'(invalid-url) Source*') diff --git a/icecat.spec b/icecat.spec index 23f9123..ccbd697 100644 --- a/icecat.spec +++ b/icecat.spec @@ -82,11 +82,11 @@ ExcludeArch: %{arm} # Set new source-code build version -%global gnu_ver gnu2 +%global gnu_ver gnu1 Name: icecat -Version: 60.7.0 -Release: 2.%{gnu_ver}%{?dist} +Version: 60.7.1 +Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -117,10 +117,6 @@ Source6: %{name}.1 Source7: %{name}-lang_download.sh -# Whitelisting errors -# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist -Source8: %{name}.rpmlintrc - # Desktop files Source9: %{name}-wayland.desktop Source10: %{name}.appdata.xml @@ -758,6 +754,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Wed Jun 19 2019 Antonio Trande - 60.7.1-1.gnu1 +- Mozilla release 60.7.1 +- Do not list Git-tracked COPASI.rpmlintrc as source + * Tue May 28 2019 Antonio Trande - 60.7.0-2.gnu2 - Build release 60.7.0-gnu2 diff --git a/sources b/sources index d9d2a9d..00f8554 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.7.0-gnu2.tar.bz2) = 1c13e3715f3131fb44346cc2c0418ddeeb7ae6e9bd83d0f11ba2504e014f33aeff2484768dc508ab5e7aec18bc6025a84bde11aac12274eba559fbf9864bf478 -SHA512 (icecat-60.7.0-langpacks.tar.gz) = 8bb509ebae69eb8b97c664960e0798f322b02a9d4da747e68898ace3ae92e02d00ba928489bddf908f5df36b910e7dc4e562b80a906d013d234119f9f1b83242 +SHA512 (icecat-60.7.1-gnu1.tar.bz2) = d556774544b8eae1184724a61afeb41bd063108ea37fd541dc92dc1de6b313c4904a9272c0281035f21d9ff63394653ae744282c9b6499ed5993fa9ec6469004 +SHA512 (icecat-60.7.1-langpacks.tar.gz) = 36f620450b203cca812229b9fcd5cf1676cc0a791c7ac895f7ca9027bd4170aff8a6cb5f88cc4ed0e695e1064b2cfce0013ae4ab782833859793a7b8b6e06969 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 9e28db2e7b17f139dd9066c964c681e68523a63c Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 19 Jun 2019 15:05:13 +0200 Subject: [PATCH 031/473] Push icecat.rpmlintrc --- icecat.rpmlintrc | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 icecat.rpmlintrc diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc new file mode 100644 index 0000000..c2c8f6f --- /dev/null +++ b/icecat.rpmlintrc @@ -0,0 +1,40 @@ +# Whitelisting errors +# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist +# Edited by sagitter (sagitter AT fedoraproject dot org) + +# KNOWN BUGS: +# + +# TESTS: +##### SRPMs ##### + +# ifarch applied patches are okay +# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support +addFilter(r'(%ifarch-applied-patch) Patch*') + +# ERRORS: +##### RPMs ##### + +# chroot function (??) +addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') + +# Expected on FF browser +# https://support.mozilla.org/en-US/questions/1045418 +addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') +addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') + +# False positive +addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') +addFilter(r'(unversioned-explicit-provides) webclient') + +# WARNINGS: +##### RPMs ##### + +addFilter(r'(no-manual-page-for-binary) icecat-wayland') + +##### SRPMs ##### +# Different file size due to the signature of the source code tarbz archive +addFilter(r'file-size-mismatch') + +addFilter(r'(invalid-url) Source*') From 6c6066e05458325e9258199fee0d3b8bec3e9087 Mon Sep 17 00:00:00 2001 From: sagitter Date: Thu, 20 Jun 2019 11:35:56 +0200 Subject: [PATCH 032/473] Fix Changelog --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index ccbd697..0a2a9f3 100644 --- a/icecat.spec +++ b/icecat.spec @@ -756,7 +756,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %changelog * Wed Jun 19 2019 Antonio Trande - 60.7.1-1.gnu1 - Mozilla release 60.7.1 -- Do not list Git-tracked COPASI.rpmlintrc as source +- Do not list Git-tracked icecat.rpmlintrc as source * Tue May 28 2019 Antonio Trande - 60.7.0-2.gnu2 - Build release 60.7.0-gnu2 From 6056d3b5ec5dd548542c24cca04c5f4110514b00 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 22 Jun 2019 22:03:39 +0200 Subject: [PATCH 033/473] Mozilla release 60.7.2 --- .gitignore | 2 ++ icecat-lang_download.sh | 2 +- icecat.rpmlintrc | 40 ---------------------------------------- icecat.spec | 5 ++++- sources | 4 ++-- 5 files changed, 9 insertions(+), 44 deletions(-) delete mode 100644 icecat.rpmlintrc diff --git a/.gitignore b/.gitignore index a220e0e..f122d94 100644 --- a/.gitignore +++ b/.gitignore @@ -79,3 +79,5 @@ /icecat-60.7.0-gnu2.tar.bz2 /icecat-60.7.1-gnu1.tar.bz2 /icecat-60.7.1-langpacks.tar.gz +/icecat-60.7.2-gnu1.tar.bz2 +/icecat-60.7.2-langpacks.tar.gz diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 08d9a1f..c474a61 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=60.7.1 +VERSION=60.7.2 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc deleted file mode 100644 index c2c8f6f..0000000 --- a/icecat.rpmlintrc +++ /dev/null @@ -1,40 +0,0 @@ -# Whitelisting errors -# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist -# Edited by sagitter (sagitter AT fedoraproject dot org) - -# KNOWN BUGS: -# - -# TESTS: -##### SRPMs ##### - -# ifarch applied patches are okay -# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support -addFilter(r'(%ifarch-applied-patch) Patch*') - -# ERRORS: -##### RPMs ##### - -# chroot function (??) -addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') -addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') - -# Expected on FF browser -# https://support.mozilla.org/en-US/questions/1045418 -addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') -addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') - -# False positive -addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') -addFilter(r'(unversioned-explicit-provides) webclient') - -# WARNINGS: -##### RPMs ##### - -addFilter(r'(no-manual-page-for-binary) icecat-wayland') - -##### SRPMs ##### -# Different file size due to the signature of the source code tarbz archive -addFilter(r'file-size-mismatch') - -addFilter(r'(invalid-url) Source*') diff --git a/icecat.spec b/icecat.spec index 0a2a9f3..cb4cad6 100644 --- a/icecat.spec +++ b/icecat.spec @@ -85,7 +85,7 @@ ExcludeArch: %{arm} %global gnu_ver gnu1 Name: icecat -Version: 60.7.1 +Version: 60.7.2 Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser @@ -754,6 +754,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Sat Jun 22 2019 Antonio Trande - 60.7.2-1.gnu1 +- Mozilla release 60.7.2 + * Wed Jun 19 2019 Antonio Trande - 60.7.1-1.gnu1 - Mozilla release 60.7.1 - Do not list Git-tracked icecat.rpmlintrc as source diff --git a/sources b/sources index 00f8554..df5d83f 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.7.1-gnu1.tar.bz2) = d556774544b8eae1184724a61afeb41bd063108ea37fd541dc92dc1de6b313c4904a9272c0281035f21d9ff63394653ae744282c9b6499ed5993fa9ec6469004 -SHA512 (icecat-60.7.1-langpacks.tar.gz) = 36f620450b203cca812229b9fcd5cf1676cc0a791c7ac895f7ca9027bd4170aff8a6cb5f88cc4ed0e695e1064b2cfce0013ae4ab782833859793a7b8b6e06969 +SHA512 (icecat-60.7.2-gnu1.tar.bz2) = 230a1f3516eda6d1d63ca2cacfbea15b3e2d7e7a4a51c04af288a8204b9cc4a58f3accc06d4ab8d7e2947977955f77b2db3c7b6bdeee7ea741042bf8a32bf97a +SHA512 (icecat-60.7.2-langpacks.tar.gz) = 69ffdfb2dd3fb82b028627404599e4e12a3ac7100941862dd2afe07755dda7d41370d50efda78e852360ea8862933aebfdde4c29907190077cf2b04ac26ea820 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From e1bbc1917f1e1028b945706a16fde6004ca82003 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 22 Jun 2019 22:33:21 +0200 Subject: [PATCH 034/473] Add rpmlintrc file --- icecat.rpmlintrc | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 icecat.rpmlintrc diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc new file mode 100644 index 0000000..c2c8f6f --- /dev/null +++ b/icecat.rpmlintrc @@ -0,0 +1,40 @@ +# Whitelisting errors +# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist +# Edited by sagitter (sagitter AT fedoraproject dot org) + +# KNOWN BUGS: +# + +# TESTS: +##### SRPMs ##### + +# ifarch applied patches are okay +# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support +addFilter(r'(%ifarch-applied-patch) Patch*') + +# ERRORS: +##### RPMs ##### + +# chroot function (??) +addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') + +# Expected on FF browser +# https://support.mozilla.org/en-US/questions/1045418 +addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') +addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') + +# False positive +addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') +addFilter(r'(unversioned-explicit-provides) webclient') + +# WARNINGS: +##### RPMs ##### + +addFilter(r'(no-manual-page-for-binary) icecat-wayland') + +##### SRPMs ##### +# Different file size due to the signature of the source code tarbz archive +addFilter(r'file-size-mismatch') + +addFilter(r'(invalid-url) Source*') From a832830f5293e2b75cdee763702e1798588132fb Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 10 Jul 2019 13:04:01 +0200 Subject: [PATCH 035/473] Mozilla release 60.8.0 --- .gitignore | 2 ++ icecat-lang_download.sh | 2 +- icecat.spec | 8 +++++++- mozilla-1512162.patch | 26 ++++++++++++++++++++++++++ sources | 4 ++-- 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 mozilla-1512162.patch diff --git a/.gitignore b/.gitignore index f122d94..0e7fd6c 100644 --- a/.gitignore +++ b/.gitignore @@ -81,3 +81,5 @@ /icecat-60.7.1-langpacks.tar.gz /icecat-60.7.2-gnu1.tar.bz2 /icecat-60.7.2-langpacks.tar.gz +/icecat-60.8.0-gnu1.tar.bz2 +/icecat-60.8.0-langpacks.tar.gz diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index c474a61..832a09b 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=60.7.2 +VERSION=60.8.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.spec b/icecat.spec index cb4cad6..8f137fa 100644 --- a/icecat.spec +++ b/icecat.spec @@ -85,7 +85,7 @@ ExcludeArch: %{arm} %global gnu_ver gnu1 Name: icecat -Version: 60.7.2 +Version: 60.8.0 Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser @@ -166,6 +166,8 @@ Patch418: mozilla-1436242.patch Patch420: %{name}-disable-dbus-remote.patch Patch421: %{name}-bz1445383.patch Patch422: %{name}-60.6.1-mozilla-1533969.patch +# Fix crash on ppc64le (mozilla#1512162) +Patch423: mozilla-1512162.patch # Wayland specific upstream patches Patch565: firefox-pipewire.patch @@ -361,6 +363,7 @@ tar -xf %{SOURCE5} %if 0%{?fedora} > 30 %patch422 -p1 -b .%{name}-%{version}-mozilla-1533969 %endif +%patch423 -p1 -b .mozilla-1512162.patch # Wayland specific upstream patches dos2unix %{PATCH565} @@ -754,6 +757,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Tue Jul 09 2019 Antonio Trande - 60.8.0-1.gnu1 +- Mozilla release 60.8.0 + * Sat Jun 22 2019 Antonio Trande - 60.7.2-1.gnu1 - Mozilla release 60.7.2 diff --git a/mozilla-1512162.patch b/mozilla-1512162.patch new file mode 100644 index 0000000..85e4abe --- /dev/null +++ b/mozilla-1512162.patch @@ -0,0 +1,26 @@ +diff --git a/js/xpconnect/src/XPCWrappedNative.cpp b/js/xpconnect/src/XPCWrappedNative.cpp +--- a/js/xpconnect/src/XPCWrappedNative.cpp ++++ b/js/xpconnect/src/XPCWrappedNative.cpp +@@ -1145,6 +1145,10 @@ + return CallMethodHelper(ccx).Call(); + } + ++#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN) ++// Work around a compiler bug on ppc64le (bug 1512162). ++__attribute__ ((noinline,noclone)) ++#endif + bool CallMethodHelper::Call() { + mCallContext.SetRetVal(JS::UndefinedValue()); + +@@ -1315,6 +1319,10 @@ + return true; + } + ++#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN) ++// Work around a compiler bug on ppc64le (bug 1512162). ++__attribute__ ((noinline,noclone)) ++#endif + bool CallMethodHelper::GatherAndConvertResults() { + // now we iterate through the native params to gather and convert results + uint8_t paramCount = mMethodInfo->GetParamCount(); + diff --git a/sources b/sources index df5d83f..e5e5f07 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.7.2-gnu1.tar.bz2) = 230a1f3516eda6d1d63ca2cacfbea15b3e2d7e7a4a51c04af288a8204b9cc4a58f3accc06d4ab8d7e2947977955f77b2db3c7b6bdeee7ea741042bf8a32bf97a -SHA512 (icecat-60.7.2-langpacks.tar.gz) = 69ffdfb2dd3fb82b028627404599e4e12a3ac7100941862dd2afe07755dda7d41370d50efda78e852360ea8862933aebfdde4c29907190077cf2b04ac26ea820 +SHA512 (icecat-60.8.0-gnu1.tar.bz2) = 31900c921102ccaa736b8be20210d16b7bae9c797d2529e9f38e803d834c72bacfe6e586934e21c48ca7097cc0bbc56adccc6beefc5f42b1e7ee4a3d93e9f223 +SHA512 (icecat-60.8.0-langpacks.tar.gz) = 82f63a5c0e7b4af8ed616d94f99274c4a54fa092147bcce3eb4f77026b562a8109cc289fec18abdf0e350484a8645eb32f173fbbe3e20cb12f8fb79cea52554b SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 56b1192bbe40956f34b656f836aeade51829e7cc Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 10 Jul 2019 21:50:39 +0200 Subject: [PATCH 036/473] Use mozilla-1512162.patch on Fedora 30+ only (GCC-9) --- icecat.spec | 7 ++++++- mozilla-1512162.patch | 3 +-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/icecat.spec b/icecat.spec index 8f137fa..45ab644 100644 --- a/icecat.spec +++ b/icecat.spec @@ -86,7 +86,7 @@ ExcludeArch: %{arm} Name: icecat Version: 60.8.0 -Release: 1.%{gnu_ver}%{?dist} +Release: 2.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -363,7 +363,9 @@ tar -xf %{SOURCE5} %if 0%{?fedora} > 30 %patch422 -p1 -b .%{name}-%{version}-mozilla-1533969 %endif +%if 0%{?fedora} > 29 %patch423 -p1 -b .mozilla-1512162.patch +%endif # Wayland specific upstream patches dos2unix %{PATCH565} @@ -757,6 +759,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Wed Jul 10 2019 Antonio Trande - 60.8.0-2.gnu1 +- Use mozilla-1512162.patch on Fedora 30+ only (GCC-9) + * Tue Jul 09 2019 Antonio Trande - 60.8.0-1.gnu1 - Mozilla release 60.8.0 diff --git a/mozilla-1512162.patch b/mozilla-1512162.patch index 85e4abe..a324372 100644 --- a/mozilla-1512162.patch +++ b/mozilla-1512162.patch @@ -12,7 +12,7 @@ diff --git a/js/xpconnect/src/XPCWrappedNative.cpp b/js/xpconnect/src/XPCWrapped bool CallMethodHelper::Call() { mCallContext.SetRetVal(JS::UndefinedValue()); -@@ -1315,6 +1319,10 @@ +@@ -1318,6 +1322,10 @@ return true; } @@ -23,4 +23,3 @@ diff --git a/js/xpconnect/src/XPCWrappedNative.cpp b/js/xpconnect/src/XPCWrapped bool CallMethodHelper::GatherAndConvertResults() { // now we iterate through the native params to gather and convert results uint8_t paramCount = mMethodInfo->GetParamCount(); - From 7af2f47be204c2d07e50e6389f890e9ec20a9349 Mon Sep 17 00:00:00 2001 From: sagitter Date: Thu, 11 Jul 2019 21:39:21 +0200 Subject: [PATCH 037/473] Enable webrtc on %%{ix86} x86_64 only| Remove filtering of private libraries --- icecat.spec | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/icecat.spec b/icecat.spec index 45ab644..0ad3784 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,15 +1,3 @@ -# Filtering of private libraries -%global privlibs libbrowsercomps -%global privlibs %{privlibs}|libclearkey -%global privlibs %{privlibs}|libdbusservice -%global privlibs %{privlibs}|libmozalloc -%global privlibs %{privlibs}|libmozgnome -%global privlibs %{privlibs}|liblgpllibs - -%global __provides_exclude ^(%{privlibs})\\.so -%global __requires_exclude ^(%{privlibs})\\.so -# - ##Active/Deactive language files handling %global build_langpacks 1 @@ -86,7 +74,7 @@ ExcludeArch: %{arm} Name: icecat Version: 60.8.0 -Release: 2.%{gnu_ver}%{?dist} +Release: 3.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -378,10 +366,10 @@ cp -p %{SOURCE3} .mozconfig echo "ac_add_options --enable-default-toolkit=cairo-gtk3-wayland" >> .mozconfig echo "ac_add_options --enable-official-branding" >> .mozconfig -%ifarch %{ix86} x86_64 -echo "ac_add_options --enable-webrtc" >> .mozconfig -%else +%ifnarch %{ix86} x86_64 echo "ac_add_options --disable-webrtc" >> .mozconfig +%else +echo "ac_add_options --enable-webrtc" >> .mozconfig %endif %if %{with pulseaudio} @@ -759,6 +747,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Thu Jul 11 2019 Antonio Trande - 60.8.0-3.gnu1 +- Remove filtering of private libraries +- Enable webrtc on %%{ix86} x86_64 only + * Wed Jul 10 2019 Antonio Trande - 60.8.0-2.gnu1 - Use mozilla-1512162.patch on Fedora 30+ only (GCC-9) From 53ba7d160f12e79e6f0f24111bfcd28c211140ec Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 12 Jul 2019 18:54:55 +0200 Subject: [PATCH 038/473] Remove redundant Python2 dependencies --- icecat.spec | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/icecat.spec b/icecat.spec index 0ad3784..dae34ef 100644 --- a/icecat.spec +++ b/icecat.spec @@ -74,7 +74,7 @@ ExcludeArch: %{arm} Name: icecat Version: 60.8.0 -Release: 3.%{gnu_ver}%{?dist} +Release: 4.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -218,8 +218,6 @@ BuildRequires: openjpeg-devel BuildRequires: pango-devel BuildRequires: pipewire-devel BuildRequires: python2-devel -BuildRequires: python2-setuptools -BuildRequires: python2-virtualenv BuildRequires: pkgconfig(gconf-2.0) BuildRequires: pkgconfig(xrender) BuildRequires: pkgconfig(libstartup-notification-1.0) @@ -747,6 +745,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Fri Jul 12 2019 Antonio Trande - 60.8.0-4.gnu1 +- Remove redundant Python2 dependencies + * Thu Jul 11 2019 Antonio Trande - 60.8.0-3.gnu1 - Remove filtering of private libraries - Enable webrtc on %%{ix86} x86_64 only From 0807c29735dc39025e7c7805fb81d5908c43e459 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 23 Jul 2019 10:26:04 +0200 Subject: [PATCH 039/473] Enable WebRTC on ppc64le --- icecat.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/icecat.spec b/icecat.spec index dae34ef..d082ede 100644 --- a/icecat.spec +++ b/icecat.spec @@ -74,7 +74,7 @@ ExcludeArch: %{arm} Name: icecat Version: 60.8.0 -Release: 4.%{gnu_ver}%{?dist} +Release: 5.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -364,7 +364,7 @@ cp -p %{SOURCE3} .mozconfig echo "ac_add_options --enable-default-toolkit=cairo-gtk3-wayland" >> .mozconfig echo "ac_add_options --enable-official-branding" >> .mozconfig -%ifnarch %{ix86} x86_64 +%ifnarch %{ix86} x86_64 ppc64le echo "ac_add_options --disable-webrtc" >> .mozconfig %else echo "ac_add_options --enable-webrtc" >> .mozconfig @@ -745,6 +745,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Tue Jul 23 2019 Antonio Trande - 60.8.0-5.gnu1 +- Enable WebRTC on ppc64le + * Fri Jul 12 2019 Antonio Trande - 60.8.0-4.gnu1 - Remove redundant Python2 dependencies From 5a3172c7bb2151edf0a8ccbdcc975be0db86cb99 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 25 Jul 2019 09:19:01 +0000 Subject: [PATCH 040/473] - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- icecat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index d082ede..8ef2ac9 100644 --- a/icecat.spec +++ b/icecat.spec @@ -74,7 +74,7 @@ ExcludeArch: %{arm} Name: icecat Version: 60.8.0 -Release: 5.%{gnu_ver}%{?dist} +Release: 6.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -745,6 +745,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Thu Jul 25 2019 Fedora Release Engineering - 60.8.0-6.gnu1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Tue Jul 23 2019 Antonio Trande - 60.8.0-5.gnu1 - Enable WebRTC on ppc64le From aadd0f7984d281bd38f0acab97dde18772444dd9 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 28 Jul 2019 12:55:24 +0200 Subject: [PATCH 041/473] Add patch to fix the addon installation --- icecat-fix_addon_installation.patch | 36 +++++++++++++++++++++++++++++ icecat.spec | 11 +++++++-- 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 icecat-fix_addon_installation.patch diff --git a/icecat-fix_addon_installation.patch b/icecat-fix_addon_installation.patch new file mode 100644 index 0000000..fd83f72 --- /dev/null +++ b/icecat-fix_addon_installation.patch @@ -0,0 +1,36 @@ +# Fixes installation of those addons which don't have ID on IceCat ("Cannot find id for addon" error). +--- a/toolkit/mozapps/extensions/internal/XPIInstall.jsm ++++ b/toolkit/mozapps/extensions/internal/XPIInstall.jsm +@@ -885,8 +885,30 @@ + throw new Error(`Webextension is signed with an invalid id (${addon.id})`); + } + } +- if (!addon.id && aInstallLocation.name == KEY_APP_TEMPORARY) { +- addon.id = generateTemporaryInstallID(aZipReader.file); ++ if (!addon.id) { ++ if (aInstallLocation.name == KEY_APP_TEMPORARY) { ++ addon.id = generateTemporaryInstallID(aZipReader.file); ++ } else { ++ try { ++ let sigInput = aZipReader.getInputStream("META-INF/cose.sig"); ++ let sigBinary = Cc['@mozilla.org/binaryinputstream;1'] ++ .createInstance(Ci.nsIBinaryInputStream); ++ sigBinary.setInputStream(sigInput); ++ var sig = '' ++ var sigCount; ++ while ((sigCount = sigBinary.available()) > 0) { ++ sig += sigBinary.readBytes(sigCount); ++ } ++ let sigMatch = sig.match(/\{\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\}/g) ++ if (sigMatch && sigMatch.length == 1) { ++ addon.id = sigMatch[0] ++ } else { ++ logger.warn("Failed to find addon id"); ++ } ++ } catch (e) { ++ logger.warn("Failed to process META-INF/cose.sig"); ++ } ++ } + } + } + addon.updateBlocklistState(); diff --git a/icecat.spec b/icecat.spec index 8ef2ac9..532c4dd 100644 --- a/icecat.spec +++ b/icecat.spec @@ -116,7 +116,10 @@ Source15: %{name}-x11.sh.in Source16: %{name}-x11.desktop # Build patches -Patch2: %{name}-libevent_linkflag.patch +# Fixes installation of those addons which don't have ID on IceCat ("Cannot find id for addon" error). +Patch1: %{name}-fix_addon_installation.patch + +Patch2: %{name}-libevent_linkflag.patch Patch3: mozilla-build-arm.patch # Unrecognized file? @@ -311,6 +314,7 @@ find . -type f -name "*.c" -exec chmod 0644 '{}' \; ##Copy license files tar -xf %{SOURCE5} +%patch1 -p1 -b .fix_addon_installation %patch2 -p0 -b .libevent_linkflag %patch3 -p1 -b .arm %patch7 -p0 @@ -631,7 +635,7 @@ echo "%%lang($language_short) %{langpackdir}/langpack-$language_short@icecat.moz } # Table of fallbacks for each language -create_default_langpack "bn-IN" "bn" +#create_default_langpack "bn-IN" "bn" create_default_langpack "es-AR" "es" create_default_langpack "fy-NL" "fy" create_default_langpack "ga-IE" "ga" @@ -745,6 +749,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Sun Jul 28 2019 Antonio Trande - 60.8.0-6.gnu1 +- Add patch to fix the addon installation + * Thu Jul 25 2019 Fedora Release Engineering - 60.8.0-6.gnu1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild From 664509a3dee237ab707f7d61f77229fc1d9070b5 Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 16 Aug 2019 22:12:46 +0200 Subject: [PATCH 042/473] Mozilla release 68.0.2 --- .gitignore | 3 + bug1375074-save-restore-x28.patch | 50 +- build-jit-atomic-always-lucky.patch | 12 +- build-rust-ppc64le.patch | 25 + firefox-pipewire.patch | 2550 +-------------------------- icecat-60.6.1-mozilla-1533969.patch | 32 - icecat-bz1445383.patch | 131 -- icecat-disable-dbus-remote.patch | 12 - icecat-fix_addon_installation.patch | 10 +- icecat-fix_jar.patch | 12 +- icecat-lang_download.sh | 2 +- icecat-mozconfig-common | 3 - icecat.rpmlintrc | 40 - icecat.spec | 179 +- mozilla-1005640-accept-lang.patch | 30 - mozilla-1353817.patch | 27 - mozilla-1424422.patch | 188 -- mozilla-1436242.patch | 56 - mozilla-1512162.patch | 30 +- mozilla-1566876-webrtc-ind.patch | 36 + mozilla-1568569.patch | 73 + mozilla-256180.patch | 11 - node-stdout-nonblocking-wrapper | 2 + rhbz-1354671.patch | 8 +- sources | 5 +- 25 files changed, 346 insertions(+), 3181 deletions(-) create mode 100644 build-rust-ppc64le.patch delete mode 100644 icecat-60.6.1-mozilla-1533969.patch delete mode 100644 icecat-bz1445383.patch delete mode 100644 icecat-disable-dbus-remote.patch delete mode 100644 icecat.rpmlintrc delete mode 100644 mozilla-1005640-accept-lang.patch delete mode 100644 mozilla-1353817.patch delete mode 100644 mozilla-1424422.patch delete mode 100644 mozilla-1436242.patch create mode 100644 mozilla-1566876-webrtc-ind.patch create mode 100644 mozilla-1568569.patch delete mode 100644 mozilla-256180.patch create mode 100755 node-stdout-nonblocking-wrapper diff --git a/.gitignore b/.gitignore index 0e7fd6c..1039629 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,6 @@ /icecat-60.7.2-langpacks.tar.gz /icecat-60.8.0-gnu1.tar.bz2 /icecat-60.8.0-langpacks.tar.gz +/cbindgen-vendor.tar.xz +/icecat-68.0.2-gnu1.tar.bz2 +/icecat-68.0.2-langpacks.tar.gz diff --git a/bug1375074-save-restore-x28.patch b/bug1375074-save-restore-x28.patch index b622604..4db683b 100644 --- a/bug1375074-save-restore-x28.patch +++ b/bug1375074-save-restore-x28.patch @@ -32,44 +32,44 @@ new file mode 100644 diff --git a/js/src/vm/UnboxedObject.cpp b/js/src/vm/UnboxedObject.cpp --- a/js/src/vm/UnboxedObject.cpp +++ b/js/src/vm/UnboxedObject.cpp -@@ -86,8 +86,15 @@ +@@ -95,7 +95,15 @@ UnboxedLayout::makeConstructorCode(JSCon #endif #ifdef JS_CODEGEN_ARM64 -- // ARM64 communicates stack address via sp, but uses a pseudo-sp for -- // addressing. -+ // ARM64 communicates stack address via sp, but uses a pseudo-sp (PSP) for -+ // addressing. The register we use for PSP may however also be used by -+ // calling code, and it is nonvolatile, so save it. Do this as a special -+ // case first because the generic save/restore code needs the PSP to be -+ // initialized already. -+ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64())); -+ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex)); +- // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing. ++ // ARM64 communicates stack address via sp, but uses a pseudo-sp (PSP) for ++ // addressing. The register we use for PSP may however also be used by ++ // calling code, and it is nonvolatile, so save it. Do this as a special ++ // case first because the generic save/restore code needs the PSP to be ++ // initialized already. ++ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64())); ++ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex)); + + // Initialize the PSP from the SP. - masm.initStackPtr(); + masm.initStackPtr(); #endif -@@ -239,7 +246,22 @@ - if (ScratchDoubleReg.volatile_()) masm.pop(ScratchDoubleReg); - masm.PopRegsInMask(savedNonVolatileRegisters); +@@ -233,7 +241,22 @@ UnboxedLayout::makeConstructorCode(JSCon + masm.pop(ScratchDoubleReg); + masm.PopRegsInMask(savedNonVolatileRegisters); +#ifdef JS_CODEGEN_ARM64 -+ // Now restore the value that was in the PSP register on entry, and return. ++ // Now restore the value that was in the PSP register on entry, and return. + -+ // Obtain the correct SP from the PSP. -+ masm.Mov(sp, PseudoStackPointer64); ++ // Obtain the correct SP from the PSP. ++ masm.Mov(sp, PseudoStackPointer64); + -+ // Restore the saved value of the PSP register, this value is whatever the -+ // caller had saved in it, not any actual SP value, and it must not be -+ // overwritten subsequently. -+ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex)); ++ // Restore the saved value of the PSP register, this value is whatever the ++ // caller had saved in it, not any actual SP value, and it must not be ++ // overwritten subsequently. ++ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex)); + -+ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong. -+ masm.Ret(vixl::lr); ++ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong. ++ masm.Ret(vixl::lr); +#else - masm.abiret(); + masm.abiret(); +#endif - masm.bind(&failureStoreOther); + masm.bind(&failureStoreOther); + diff --git a/build-jit-atomic-always-lucky.patch b/build-jit-atomic-always-lucky.patch index 50d1c9d..d693d0c 100644 --- a/build-jit-atomic-always-lucky.patch +++ b/build-jit-atomic-always-lucky.patch @@ -1,11 +1,11 @@ -diff -up firefox-57.0b5/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-57.0b5/js/src/jit/AtomicOperations.h ---- firefox-57.0b5/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2017-10-06 12:34:02.338973607 +0200 -+++ firefox-57.0b5/js/src/jit/AtomicOperations.h 2017-10-06 12:38:24.632622215 +0200 +diff -up firefox-68.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-60.5.0/js/src/jit/AtomicOperations.h +--- firefox-68.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2019-01-22 10:20:27.993697161 +0100 ++++ firefox-68.0.2/js/src/jit/AtomicOperations.h 2019-01-22 10:23:15.337873762 +0100 @@ -394,7 +394,7 @@ - #elif defined(__s390__) || defined(__s390x__) - #include "jit/none/AtomicOperations-feeling-lucky.h" + defined(__sh__) || defined(__s390__) || defined(__s390x__) + # include "jit/shared/AtomicOperations-feeling-lucky.h" #else --#error "No AtomicOperations support provided for this platform" +-# error "No AtomicOperations support provided for this platform" +#include "jit/none/AtomicOperations-feeling-lucky.h" #endif diff --git a/build-rust-ppc64le.patch b/build-rust-ppc64le.patch new file mode 100644 index 0000000..2474c35 --- /dev/null +++ b/build-rust-ppc64le.patch @@ -0,0 +1,25 @@ +diff -up firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le firefox-55.0/build/moz.configure/rust.configure +--- firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le 2017-07-31 18:20:49.000000000 +0200 ++++ firefox-55.0/build/moz.configure/rust.configure 2017-08-02 10:19:03.254220003 +0200 +@@ -151,6 +151,9 @@ def rust_triple_alias(host_or_target): + ('sparc64', 'Linux'): 'sparc64-unknown-linux-gnu', + ('x86', 'Linux'): 'i686-unknown-linux-gnu', + ('x86_64', 'Linux'): 'x86_64-unknown-linux-gnu', ++ ('ppc64le', 'Linux'): 'powerpc64le-unknown-linux-gnu', ++ ('ppc64', 'Linux'): 'powerpc64-unknown-linux-gnu', ++ ('s390x', 'Linux'): 's390x-unknown-linux-gnu', + # OS X + ('x86', 'OSX'): 'i686-apple-darwin', + ('x86_64', 'OSX'): 'x86_64-apple-darwin', +@@ -174,8 +177,10 @@ def rust_triple_alias(host_or_target): + ('sparc64', 'SunOS'): 'sparcv9-sun-solaris', + }.get((host_or_target.cpu, os_or_kernel), None) + ++ if (rustc_target == 'powerpc64-unknown-linux-gnu' and host_or_target.endianness == 'little'): ++ rustc_target = 'powerpc64le-unknown-linux-gnu' + if rustc_target is None: +- die("Don't know how to translate {} for rustc".format(host_or_target.alias)) ++ die("Don't know how to translate {} for rustc, cpu: {}, os: {}".format(target.alias, target.cpu, os_or_kernel)) + + # Check to see whether our rustc has a reasonably functional stdlib + # for our chosen target. diff --git a/firefox-pipewire.patch b/firefox-pipewire.patch index 0ed09c6..7233a73 100644 --- a/firefox-pipewire.patch +++ b/firefox-pipewire.patch @@ -1,7 +1,7 @@ -diff -ENwbur firefox-64.0/config/system-headers.mozbuild firefox-webrtc/config/system-headers.mozbuild ---- firefox-64.0/config/system-headers.mozbuild 2019-01-07 13:18:29.367461827 +0100 -+++ firefox-webrtc/config/system-headers.mozbuild 2019-01-07 13:19:30.043067979 +0100 -@@ -314,6 +314,7 @@ +diff -up firefox-68.0/config/system-headers.mozbuild.firefox-pipewire firefox-68.0/config/system-headers.mozbuild +--- firefox-68.0/config/system-headers.mozbuild.firefox-pipewire 2019-07-01 22:30:26.000000000 +0200 ++++ firefox-68.0/config/system-headers.mozbuild 2019-07-08 15:26:15.397161627 +0200 +@@ -314,6 +314,7 @@ system_headers = [ 'Gestalt.h', 'getopt.h', 'gio/gio.h', @@ -9,7 +9,7 @@ diff -ENwbur firefox-64.0/config/system-headers.mozbuild firefox-webrtc/config/s 'glibconfig.h', 'glib.h', 'glib-object.h', -@@ -607,6 +608,7 @@ +@@ -607,6 +608,7 @@ system_headers = [ 'Pgenerr.h', 'PGenErr.h', 'Ph.h', @@ -17,1398 +17,11 @@ diff -ENwbur firefox-64.0/config/system-headers.mozbuild firefox-webrtc/config/s 'pixman.h', 'pk11func.h', 'pk11pqg.h', -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_linux.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_linux.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_linux.cc 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_linux.cc 2019-01-07 13:20:40.141768272 +0100 -@@ -0,0 +1,39 @@ -+/* -+ * Copyright (c) 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#include "webrtc/modules/desktop_capture/desktop_capture_options.h" -+#include "webrtc/modules/desktop_capture/desktop_capturer.h" -+ -+#if defined(USE_X11) -+#include "webrtc/modules/desktop_capture/app_capturer_x11.h" -+#endif // defined(USE_X11) -+ -+namespace webrtc { -+ -+// static -+AppCapturer* AppCapturer::Create(const DesktopCaptureOptions& options) { -+#if defined(USE_X11) -+ return AppCapturerX11::Create(options); -+#endif // defined(USE_X11) -+ -+ return nullptr; -+} -+ -+// static -+std::unique_ptr DesktopCapturer::CreateRawAppCapturer( -+ const DesktopCaptureOptions& options) { -+#if defined(USE_X11) -+ return AppCapturerX11::CreateRawAppCapturer(options); -+#endif // defined(USE_X11) -+ -+ return nullptr; -+} -+ -+} // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_x11.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_x11.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_x11.cc 2019-01-07 13:16:46.374432920 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_x11.cc 2019-01-07 13:20:40.142768282 +0100 -@@ -7,9 +7,6 @@ - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ --#include "webrtc/modules/desktop_capture/app_capturer.h" --#include "webrtc/modules/desktop_capture/shared_desktop_frame.h" --#include "webrtc/modules/desktop_capture/x11/shared_x_util.h" - - #include - #include -@@ -21,80 +18,19 @@ - - #include - -+#include "webrtc/modules/desktop_capture/app_capturer_x11.h" -+ - #include "webrtc/modules/desktop_capture/desktop_capture_options.h" - #include "webrtc/modules/desktop_capture/desktop_frame.h" - #include "webrtc/modules/desktop_capture/x11/shared_x_display.h" -+#include "webrtc/modules/desktop_capture/x11/shared_x_util.h" - #include "webrtc/modules/desktop_capture/x11/x_error_trap.h" - #include "webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.h" - #include "webrtc/system_wrappers/include/logging.h" - - namespace webrtc { - --namespace { -- --class ScreenCapturerProxy : DesktopCapturer::Callback { --public: -- ScreenCapturerProxy() -- : screen_capturer_(DesktopCapturer::CreateScreenCapturer(DesktopCaptureOptions::CreateDefault())) { -- screen_capturer_->SelectSource(kFullDesktopScreenId); -- screen_capturer_->Start(this); -- } -- void CaptureFrame() { screen_capturer_->CaptureFrame(); } -- std::unique_ptr GetFrame() { return std::move(frame_); } -- -- // Callback interface -- virtual void OnCaptureResult(DesktopCapturer::Result result, -- std::unique_ptr frame) { -- frame_ = std::move(frame); -- } -- --protected: -- std::unique_ptr screen_capturer_; -- std::unique_ptr frame_; --}; -- --class AppCapturerLinux : public AppCapturer { --public: -- AppCapturerLinux(const DesktopCaptureOptions& options); -- virtual ~AppCapturerLinux(); -- -- // AppCapturer interface. -- virtual bool GetAppList(AppList* apps) override; -- virtual bool SelectApp(ProcessId processId) override; -- virtual bool BringAppToFront() override; -- -- // DesktopCapturer interface. -- virtual void Start(Callback* callback) override; -- virtual void Stop() override; -- virtual void CaptureFrame() override; -- virtual bool SelectSource(SourceId id) override -- { -- return SelectApp(static_cast(id)); -- } -- --protected: -- Display* GetDisplay() { return x_display_->display(); } -- bool UpdateRegions(); -- -- void FillDesktopFrameRegionWithColor(DesktopFrame* pDesktopFrame,Region rgn, uint32_t color); --private: -- Callback* callback_; -- ProcessId selected_process_; -- -- // Sample Mode -- ScreenCapturerProxy screen_capturer_proxy_; -- // Mask of foreground (non-app windows in front of selected) -- Region rgn_mask_; -- // Region of selected windows -- Region rgn_visual_; -- // Mask of background (desktop, non-app windows behind selected) -- Region rgn_background_; -- -- rtc::scoped_refptr x_display_; -- RTC_DISALLOW_COPY_AND_ASSIGN(AppCapturerLinux); --}; -- --AppCapturerLinux::AppCapturerLinux(const DesktopCaptureOptions& options) -+AppCapturerX11::AppCapturerX11(const DesktopCaptureOptions& options) - : callback_(NULL), - selected_process_(0), - x_display_(options.x_display()) { -@@ -103,7 +39,7 @@ - rgn_background_ = XCreateRegion(); - } - --AppCapturerLinux::~AppCapturerLinux() { -+AppCapturerX11::~AppCapturerX11() { - if (rgn_mask_) { - XDestroyRegion(rgn_mask_); - } -@@ -116,32 +52,32 @@ - } - - // AppCapturer interface. --bool AppCapturerLinux::GetAppList(AppList* apps) { -+bool AppCapturerX11::GetAppList(AppList* apps) { - // Implemented in DesktopDeviceInfo - return true; - } --bool AppCapturerLinux::SelectApp(ProcessId processId) { -+bool AppCapturerX11::SelectApp(ProcessId processId) { - selected_process_ = processId; - return true; - } --bool AppCapturerLinux::BringAppToFront() { -+bool AppCapturerX11::BringAppToFront() { - // Not implemented yet: See Bug 1036653 - return true; - } - - // DesktopCapturer interface. --void AppCapturerLinux::Start(Callback* callback) { -+void AppCapturerX11::Start(Callback* callback) { - assert(!callback_); - assert(callback); - - callback_ = callback; - } - --void AppCapturerLinux::Stop() { -+void AppCapturerX11::Stop() { - callback_ = NULL; - } - --void AppCapturerLinux::CaptureFrame() { -+void AppCapturerX11::CaptureFrame() { - XErrorTrap error_trap(GetDisplay()); - - //Capture screen >> set root window as capture window -@@ -169,7 +105,7 @@ - } - } - --void AppCapturerLinux::FillDesktopFrameRegionWithColor(DesktopFrame* pDesktopFrame, Region rgn, uint32_t color) { -+void AppCapturerX11::FillDesktopFrameRegionWithColor(DesktopFrame* pDesktopFrame, Region rgn, uint32_t color) { - XErrorTrap error_trap(GetDisplay()); - - if (!pDesktopFrame) { -@@ -192,7 +128,7 @@ - } - } - --bool AppCapturerLinux::UpdateRegions() { -+bool AppCapturerX11::UpdateRegions() { - XErrorTrap error_trap(GetDisplay()); - - XSubtractRegion(rgn_visual_, rgn_visual_, rgn_visual_); -@@ -269,21 +205,19 @@ - return true; - } - --} // namespace -- - // static --AppCapturer* AppCapturer::Create(const DesktopCaptureOptions& options) { -- return new AppCapturerLinux(options); -+AppCapturer* AppCapturerX11::Create(const DesktopCaptureOptions& options) { -+ return new AppCapturerX11(options); - } - - // static --std::unique_ptr DesktopCapturer::CreateRawAppCapturer( -+std::unique_ptr AppCapturerX11::CreateRawAppCapturer( - const DesktopCaptureOptions& options) { - - if (!options.x_display()) - return nullptr; - -- std::unique_ptr capturer(new AppCapturerLinux(options)); -+ std::unique_ptr capturer(new AppCapturerX11(options)); - - return std::unique_ptr(std::move(capturer)); - } -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_x11.h firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_x11.h ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_x11.h 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_x11.h 2019-01-07 13:20:40.203768892 +0100 -@@ -0,0 +1,98 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#ifndef MODULES_DESKTOP_CAPTURE_APP_CAPTURER_X11_H_ -+#define MODULES_DESKTOP_CAPTURE_APP_CAPTURER_X11_H_ -+ -+#include -+#include -+#include -+#include -+ -+#include "webrtc/modules/desktop_capture/app_capturer.h" -+#include "webrtc/modules/desktop_capture/shared_desktop_frame.h" -+#include "webrtc/modules/desktop_capture/desktop_capture_options.h" -+#include "webrtc/modules/desktop_capture/desktop_capturer.h" -+#include "webrtc/modules/desktop_capture/desktop_geometry.h" -+#include "webrtc/modules/desktop_capture/x11/shared_x_display.h" -+#include "webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.h" -+#include "webrtc/base/constructormagic.h" -+#include "webrtc/base/scoped_ref_ptr.h" -+ -+namespace webrtc { -+ -+class ScreenCapturerProxy : DesktopCapturer::Callback { -+public: -+ ScreenCapturerProxy() -+ : screen_capturer_(DesktopCapturer::CreateScreenCapturer(DesktopCaptureOptions::CreateDefault())) { -+ screen_capturer_->SelectSource(kFullDesktopScreenId); -+ screen_capturer_->Start(this); -+ } -+ void CaptureFrame() { screen_capturer_->CaptureFrame(); } -+ std::unique_ptr GetFrame() { return std::move(frame_); } -+ -+ // Callback interface -+ virtual void OnCaptureResult(DesktopCapturer::Result result, -+ std::unique_ptr frame) { -+ frame_ = std::move(frame); -+ } -+ -+protected: -+ std::unique_ptr screen_capturer_; -+ std::unique_ptr frame_; -+}; -+ -+class AppCapturerX11 : public AppCapturer { -+public: -+ AppCapturerX11(const DesktopCaptureOptions& options); -+ virtual ~AppCapturerX11(); -+ -+ static AppCapturer* Create(const DesktopCaptureOptions& options); -+ static std::unique_ptr CreateRawAppCapturer(const DesktopCaptureOptions& options); -+ -+ // AppCapturer interface. -+ virtual bool GetAppList(AppList* apps) override; -+ virtual bool SelectApp(ProcessId processId) override; -+ virtual bool BringAppToFront() override; -+ -+ // DesktopCapturer interface. -+ virtual void Start(Callback* callback) override; -+ virtual void Stop() override; -+ virtual void CaptureFrame() override; -+ virtual bool SelectSource(SourceId id) override -+ { -+ return SelectApp(static_cast(id)); -+ } -+ -+protected: -+ Display* GetDisplay() { return x_display_->display(); } -+ bool UpdateRegions(); -+ -+ void FillDesktopFrameRegionWithColor(DesktopFrame* pDesktopFrame,Region rgn, uint32_t color); -+private: -+ Callback* callback_; -+ ProcessId selected_process_; -+ -+ // Sample Mode -+ ScreenCapturerProxy screen_capturer_proxy_; -+ // Mask of foreground (non-app windows in front of selected) -+ Region rgn_mask_; -+ // Region of selected windows -+ Region rgn_visual_; -+ // Mask of background (desktop, non-app windows behind selected) -+ Region rgn_background_; -+ -+ rtc::scoped_refptr x_display_; -+ RTC_DISALLOW_COPY_AND_ASSIGN(AppCapturerX11); -+}; -+ -+} // namespace webrtc -+ -+#endif // MODULES_DESKTOP_CAPTURE_APP_CAPTURER_X11_H_ -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/base_capturer_pipewire.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/base_capturer_pipewire.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/base_capturer_pipewire.cc 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/base_capturer_pipewire.cc 2019-01-07 13:20:40.143768292 +0100 -@@ -0,0 +1,849 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include "webrtc/modules/desktop_capture/base_capturer_pipewire.h" -+ -+#include "webrtc/modules/desktop_capture/desktop_capture_options.h" -+#include "webrtc/modules/desktop_capture/desktop_capturer.h" -+#include "webrtc/base/checks.h" -+#include "webrtc/base/logging.h" -+ -+namespace webrtc { -+ -+const char kDesktopBusName[] = "org.freedesktop.portal.Desktop"; -+const char kDesktopObjectPath[] = "/org/freedesktop/portal/desktop"; -+const char kDesktopRequestObjectPath[] = -+ "/org/freedesktop/portal/desktop/request"; -+const char kSessionInterfaceName[] = "org.freedesktop.portal.Session"; -+const char kRequestInterfaceName[] = "org.freedesktop.portal.Request"; -+const char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast"; -+ -+const int kBytesPerPixelPw = 4; -+ -+// static -+void BaseCapturerPipeWire::OnStateChanged(void* data, -+ pw_remote_state old_state, -+ pw_remote_state state, -+ const char* error_message) { -+ BaseCapturerPipeWire* that = static_cast(data); -+ RTC_DCHECK(that); -+ -+ switch (state) { -+ case PW_REMOTE_STATE_ERROR: -+ LOG(LS_ERROR) << "PipeWire remote state error: " << error_message; -+ break; -+ case PW_REMOTE_STATE_CONNECTED: -+ LOG(LS_INFO) << "PipeWire remote state: connected."; -+ that->CreateReceivingStream(); -+ break; -+ case PW_REMOTE_STATE_CONNECTING: -+ LOG(LS_INFO) << "PipeWire remote state: connecting."; -+ break; -+ case PW_REMOTE_STATE_UNCONNECTED: -+ LOG(LS_INFO) << "PipeWire remote state: unconnected."; -+ break; -+ } -+} -+ -+// static -+void BaseCapturerPipeWire::OnStreamStateChanged(void* data, -+ pw_stream_state old_state, -+ pw_stream_state state, -+ const char* error_message) { -+ BaseCapturerPipeWire* that = static_cast(data); -+ RTC_DCHECK(that); -+ -+ switch (state) { -+ case PW_STREAM_STATE_ERROR: -+ LOG(LS_ERROR) << "PipeWire stream state error: " << error_message; -+ break; -+ case PW_STREAM_STATE_CONFIGURE: -+ pw_stream_set_active(that->pw_stream_, true); -+ break; -+ case PW_STREAM_STATE_UNCONNECTED: -+ case PW_STREAM_STATE_CONNECTING: -+ case PW_STREAM_STATE_READY: -+ case PW_STREAM_STATE_PAUSED: -+ case PW_STREAM_STATE_STREAMING: -+ break; -+ } -+} -+ -+// static -+void BaseCapturerPipeWire::OnStreamFormatChanged( -+ void* data, -+ const struct spa_pod* format) { -+ BaseCapturerPipeWire* that = static_cast(data); -+ RTC_DCHECK(that); -+ -+ LOG(LS_INFO) << "PipeWire stream format changed."; -+ -+ if (!format) { -+ pw_stream_finish_format(that->pw_stream_, /*res=*/0, /*params=*/nullptr, -+ /*n_params=*/0); -+ return; -+ } -+ -+ that->spa_video_format_ = new spa_video_info_raw(); -+ spa_format_video_raw_parse(format, that->spa_video_format_, -+ &that->pw_type_->format_video); -+ -+ auto width = that->spa_video_format_->size.width; -+ auto height = that->spa_video_format_->size.height; -+ auto stride = SPA_ROUND_UP_N(width * kBytesPerPixelPw, 4); -+ auto size = height * stride; -+ -+ uint8_t buffer[1024] = {}; -+ auto builder = spa_pod_builder{buffer, sizeof(buffer)}; -+ -+ // Setup buffers and meta header for new format. -+ const struct spa_pod* params[2]; -+ params[0] = reinterpret_cast(spa_pod_builder_object( -+ &builder, -+ // id to enumerate buffer requirements -+ that->pw_core_type_->param.idBuffers, -+ that->pw_core_type_->param_buffers.Buffers, -+ // Size: specified as integer (i) and set to specified size -+ ":", that->pw_core_type_->param_buffers.size, "i", size, -+ // Stride: specified as integer (i) and set to specified stride -+ ":", that->pw_core_type_->param_buffers.stride, "i", stride, -+ // Buffers: specifies how many buffers we want to deal with, set as -+ // integer (i) where preferred number is 8, then allowed number is defined -+ // as range (r) from min and max values and it is undecided (u) to allow -+ // negotiation -+ ":", that->pw_core_type_->param_buffers.buffers, "iru", 8, -+ SPA_POD_PROP_MIN_MAX(1, 32), -+ // Align: memory alignment of the buffer, set as integer (i) to specified -+ // value -+ ":", that->pw_core_type_->param_buffers.align, "i", 16)); -+ params[1] = reinterpret_cast(spa_pod_builder_object( -+ &builder, -+ // id to enumerate supported metadata -+ that->pw_core_type_->param.idMeta, that->pw_core_type_->param_meta.Meta, -+ // Type: specified as id or enum (I) -+ ":", that->pw_core_type_->param_meta.type, "I", -+ that->pw_core_type_->meta.Header, -+ // Size: size of the metadata, specified as integer (i) -+ ":", that->pw_core_type_->param_meta.size, "i", -+ sizeof(struct spa_meta_header))); -+ -+ pw_stream_finish_format(that->pw_stream_, /*res=*/0, params, /*n_params=*/2); -+} -+ -+// static -+void BaseCapturerPipeWire::OnStreamProcess(void* data) { -+ BaseCapturerPipeWire* that = static_cast(data); -+ RTC_DCHECK(that); -+ -+ pw_buffer* buf = nullptr; -+ -+ if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) { -+ return; -+ } -+ -+ that->HandleBuffer(buf); -+ -+ pw_stream_queue_buffer(that->pw_stream_, buf); -+} -+ -+BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type) -+ : capture_source_type_(source_type) {} -+ -+BaseCapturerPipeWire::~BaseCapturerPipeWire() { -+ if (pw_main_loop_) { -+ pw_thread_loop_stop(pw_main_loop_); -+ } -+ -+ if (pw_type_) { -+ delete pw_type_; -+ } -+ -+ if (spa_video_format_) { -+ delete spa_video_format_; -+ } -+ -+ if (pw_stream_) { -+ pw_stream_destroy(pw_stream_); -+ } -+ -+ if (pw_remote_) { -+ pw_remote_destroy(pw_remote_); -+ } -+ -+ if (pw_core_) { -+ pw_core_destroy(pw_core_); -+ } -+ -+ if (pw_main_loop_) { -+ pw_thread_loop_destroy(pw_main_loop_); -+ } -+ -+ if (pw_loop_) { -+ pw_loop_destroy(pw_loop_); -+ } -+ -+ if (current_frame_) { -+ free(current_frame_); -+ } -+ -+ if (start_request_signal_id_) { -+ g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_); -+ } -+ if (sources_request_signal_id_) { -+ g_dbus_connection_signal_unsubscribe(connection_, -+ sources_request_signal_id_); -+ } -+ if (session_request_signal_id_) { -+ g_dbus_connection_signal_unsubscribe(connection_, -+ session_request_signal_id_); -+ } -+ -+ if (session_handle_) { -+ GDBusMessage* message = g_dbus_message_new_method_call( -+ kDesktopBusName, session_handle_, kSessionInterfaceName, "Close"); -+ if (message) { -+ GError* error = nullptr; -+ g_dbus_connection_send_message(connection_, message, -+ G_DBUS_SEND_MESSAGE_FLAGS_NONE, -+ /*out_serial=*/nullptr, &error); -+ if (error) { -+ LOG(LS_ERROR) << "Failed to close the session: " << error->message; -+ g_error_free(error); -+ } -+ g_object_unref(message); -+ } -+ } -+ -+ g_free(start_handle_); -+ g_free(sources_handle_); -+ g_free(session_handle_); -+ g_free(portal_handle_); -+ -+ if (proxy_) { -+ g_clear_object(&proxy_); -+ } -+} -+ -+void BaseCapturerPipeWire::InitPortals() { -+ g_dbus_proxy_new_for_bus( -+ G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, /*info=*/nullptr, -+ kDesktopBusName, kDesktopObjectPath, kScreenCastInterfaceName, -+ /*cancellable=*/nullptr, -+ reinterpret_cast(OnProxyRequested), this); -+} -+ -+void BaseCapturerPipeWire::InitPipeWire() { -+ pw_init(/*argc=*/nullptr, /*argc=*/nullptr); -+ -+ pw_loop_ = pw_loop_new(/*properties=*/nullptr); -+ pw_main_loop_ = pw_thread_loop_new(pw_loop_, "pipewire-main-loop"); -+ -+ pw_core_ = pw_core_new(pw_loop_, /*properties=*/nullptr); -+ pw_core_type_ = pw_core_get_type(pw_core_); -+ pw_remote_ = pw_remote_new(pw_core_, nullptr, /*user_data_size=*/0); -+ -+ InitPipeWireTypes(); -+ -+ // Initialize event handlers, remote end and stream-related. -+ pw_remote_events_.version = PW_VERSION_REMOTE_EVENTS; -+ pw_remote_events_.state_changed = &OnStateChanged; -+ -+ pw_stream_events_.version = PW_VERSION_STREAM_EVENTS; -+ pw_stream_events_.state_changed = &OnStreamStateChanged; -+ pw_stream_events_.format_changed = &OnStreamFormatChanged; -+ pw_stream_events_.process = &OnStreamProcess; -+ -+ pw_remote_add_listener(pw_remote_, &spa_remote_listener_, &pw_remote_events_, -+ this); -+ pw_remote_connect_fd(pw_remote_, pw_fd_); -+ -+ if (pw_thread_loop_start(pw_main_loop_) < 0) { -+ LOG(LS_ERROR) << "Failed to start main PipeWire loop"; -+ portal_init_failed_ = true; -+ } -+} -+ -+void BaseCapturerPipeWire::InitPipeWireTypes() { -+ spa_type_map* map = pw_core_type_->map; -+ pw_type_ = new PipeWireType(); -+ -+ spa_type_media_type_map(map, &pw_type_->media_type); -+ spa_type_media_subtype_map(map, &pw_type_->media_subtype); -+ spa_type_format_video_map(map, &pw_type_->format_video); -+ spa_type_video_format_map(map, &pw_type_->video_format); -+} -+ -+void BaseCapturerPipeWire::CreateReceivingStream() { -+ spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1}; -+ spa_rectangle pwScreenBounds = -+ spa_rectangle{static_cast(desktop_size_.width()), -+ static_cast(desktop_size_.height())}; -+ -+ spa_fraction pwFrameRateMin = spa_fraction{0, 1}; -+ spa_fraction pwFrameRateMax = spa_fraction{60, 1}; -+ -+ pw_properties* reuseProps = pw_properties_new("pipewire.client.reuse", "1", -+ /*end of varargs*/ nullptr); -+ pw_stream_ = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps); -+ -+ uint8_t buffer[1024] = {}; -+ const spa_pod* params[1]; -+ spa_pod_builder builder = spa_pod_builder{buffer, sizeof(buffer)}; -+ params[0] = reinterpret_cast(spa_pod_builder_object( -+ &builder, -+ // id to enumerate formats -+ pw_core_type_->param.idEnumFormat, pw_core_type_->spa_format, "I", -+ pw_type_->media_type.video, "I", pw_type_->media_subtype.raw, -+ // Video format: specified as id or enum (I), preferred format is BGRx, -+ // then allowed formats are enumerated (e) and the format is undecided (u) -+ // to allow negotiation -+ ":", pw_type_->format_video.format, "Ieu", pw_type_->video_format.BGRx, -+ SPA_POD_PROP_ENUM(2, pw_type_->video_format.RGBx, -+ pw_type_->video_format.BGRx), -+ // Video size: specified as rectangle (R), preferred size is specified as -+ // first parameter, then allowed size is defined as range (r) from min and -+ // max values and the format is undecided (u) to allow negotiation -+ ":", pw_type_->format_video.size, "Rru", &pwScreenBounds, 2, -+ &pwMinScreenBounds, &pwScreenBounds, -+ // Frame rate: specified as fraction (F) and set to minimum frame rate -+ // value -+ ":", pw_type_->format_video.framerate, "F", &pwFrameRateMin, -+ // Max frame rate: specified as fraction (F), preferred frame rate is set -+ // to maximum value, then allowed frame rate is defined as range (r) from -+ // min and max values and it is undecided (u) to allow negotiation -+ ":", pw_type_->format_video.max_framerate, "Fru", &pwFrameRateMax, 2, -+ &pwFrameRateMin, &pwFrameRateMax)); -+ -+ pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_, -+ this); -+ pw_stream_flags flags = static_cast( -+ PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE | -+ PW_STREAM_FLAG_MAP_BUFFERS); -+ if (pw_stream_connect(pw_stream_, PW_DIRECTION_INPUT, /*port_path=*/nullptr, -+ flags, params, -+ /*n_params=*/1) != 0) { -+ LOG(LS_ERROR) << "Could not connect receiving stream."; -+ portal_init_failed_ = true; -+ return; -+ } -+} -+ -+void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) { -+ spa_buffer* spaBuffer = buffer->buffer; -+ void* src = nullptr; -+ -+ if (!(src = spaBuffer->datas[0].data)) { -+ return; -+ } -+ -+ uint32_t maxSize = spaBuffer->datas[0].maxsize; -+ int32_t srcStride = spaBuffer->datas[0].chunk->stride; -+ if (srcStride != (desktop_size_.width() * kBytesPerPixelPw)) { -+ LOG(LS_ERROR) << "Got buffer with stride different from screen stride: " -+ << srcStride -+ << " != " << (desktop_size_.width() * kBytesPerPixelPw); -+ portal_init_failed_ = true; -+ return; -+ } -+ -+ if (!current_frame_) { -+ current_frame_ = static_cast(malloc(maxSize)); -+ } -+ RTC_DCHECK(current_frame_ != nullptr); -+ -+ // If both sides decided to go with the RGBx format we need to convert it to -+ // BGRx to match color format expected by WebRTC. -+ if (spa_video_format_->format == pw_type_->video_format.RGBx) { -+ uint8_t* tempFrame = static_cast(malloc(maxSize)); -+ std::memcpy(tempFrame, src, maxSize); -+ ConvertRGBxToBGRx(tempFrame, maxSize); -+ std::memcpy(current_frame_, tempFrame, maxSize); -+ free(tempFrame); -+ } else { -+ std::memcpy(current_frame_, src, maxSize); -+ } -+} -+ -+void BaseCapturerPipeWire::ConvertRGBxToBGRx(uint8_t* frame, uint32_t size) { -+ // Change color format for KDE KWin which uses RGBx and not BGRx -+ for (uint32_t i = 0; i < size; i += 4) { -+ uint8_t tempR = frame[i]; -+ uint8_t tempB = frame[i + 2]; -+ frame[i] = tempB; -+ frame[i + 2] = tempR; -+ } -+} -+ -+guint BaseCapturerPipeWire::SetupRequestResponseSignal( -+ const gchar* object_path, -+ GDBusSignalCallback callback) { -+ return g_dbus_connection_signal_subscribe( -+ connection_, kDesktopBusName, kRequestInterfaceName, "Response", -+ object_path, /*arg0=*/nullptr, G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE, -+ callback, this, /*user_data_free_func=*/nullptr); -+} -+ -+// static -+void BaseCapturerPipeWire::OnProxyRequested(GObject* /*object*/, -+ GAsyncResult* result, -+ gpointer user_data) { -+ BaseCapturerPipeWire* that = -+ static_cast(user_data); -+ RTC_DCHECK(that); -+ -+ GError* error = nullptr; -+ that->proxy_ = g_dbus_proxy_new_finish(result, &error); -+ if (!that->proxy_) { -+ LOG(LS_ERROR) << "Failed to create a proxy for the screen cast portal: " -+ << error->message; -+ g_error_free(error); -+ that->portal_init_failed_ = true; -+ return; -+ } -+ that->connection_ = g_dbus_proxy_get_connection(that->proxy_); -+ -+ LOG(LS_INFO) << "Created proxy for the screen cast portal."; -+ that->SessionRequest(); -+} -+ -+// static -+gchar* BaseCapturerPipeWire::PrepareSignalHandle(GDBusConnection* connection, -+ const gchar* token) { -+ gchar* sender = g_strdup(g_dbus_connection_get_unique_name(connection) + 1); -+ for (int i = 0; sender[i]; i++) { -+ if (sender[i] == '.') { -+ sender[i] = '_'; -+ } -+ } -+ -+ gchar* handle = g_strconcat(kDesktopRequestObjectPath, "/", sender, "/", -+ token, /*end of varargs*/ nullptr); -+ g_free(sender); -+ -+ return handle; -+} -+ -+void BaseCapturerPipeWire::SessionRequest() { -+ GVariantBuilder builder; -+ gchar* variant_string; -+ -+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); -+ variant_string = -+ g_strdup_printf("webrtc_session%d", g_random_int_range(0, G_MAXINT)); -+ g_variant_builder_add(&builder, "{sv}", "session_handle_token", -+ g_variant_new_string(variant_string)); -+ g_free(variant_string); -+ variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT)); -+ g_variant_builder_add(&builder, "{sv}", "handle_token", -+ g_variant_new_string(variant_string)); -+ -+ portal_handle_ = PrepareSignalHandle(connection_, variant_string); -+ session_request_signal_id_ = SetupRequestResponseSignal( -+ portal_handle_, OnSessionRequestResponseSignal); -+ g_free(variant_string); -+ -+ LOG(LS_INFO) << "Screen cast session requested."; -+ g_dbus_proxy_call( -+ proxy_, "CreateSession", g_variant_new("(a{sv})", &builder), -+ G_DBUS_CALL_FLAGS_NONE, /*timeout=*/-1, /*cancellable=*/nullptr, -+ reinterpret_cast(OnSessionRequested), this); -+} -+ -+// static -+void BaseCapturerPipeWire::OnSessionRequested(GDBusConnection* connection, -+ GAsyncResult* result, -+ gpointer user_data) { -+ BaseCapturerPipeWire* that = -+ static_cast(user_data); -+ RTC_DCHECK(that); -+ -+ GError* error = nullptr; -+ GVariant* variant = g_dbus_proxy_call_finish(that->proxy_, result, &error); -+ if (!variant) { -+ LOG(LS_ERROR) << "Failed to create a screen cast session: " -+ << error->message; -+ g_error_free(error); -+ that->portal_init_failed_ = true; -+ return; -+ } -+ LOG(LS_INFO) << "Initializing the screen cast session."; -+ -+ gchar* handle = nullptr; -+ g_variant_get_child(variant, 0, "o", &handle); -+ g_variant_unref(variant); -+ if (!handle) { -+ LOG(LS_ERROR) << "Failed to initialize the screen cast session."; -+ if (that->session_request_signal_id_) { -+ g_dbus_connection_signal_unsubscribe(connection, -+ that->session_request_signal_id_); -+ that->session_request_signal_id_ = 0; -+ } -+ that->portal_init_failed_ = true; -+ return; -+ } -+ -+ g_free(handle); -+ -+ LOG(LS_INFO) << "Subscribing to the screen cast session."; -+} -+ -+// static -+void BaseCapturerPipeWire::OnSessionRequestResponseSignal( -+ GDBusConnection* connection, -+ const gchar* sender_name, -+ const gchar* object_path, -+ const gchar* interface_name, -+ const gchar* signal_name, -+ GVariant* parameters, -+ gpointer user_data) { -+ BaseCapturerPipeWire* that = -+ static_cast(user_data); -+ RTC_DCHECK(that); -+ -+ -+ LOG(LS_INFO) -+ << "Received response for the screen cast session subscription."; -+ -+ guint32 portal_response; -+ GVariant* response_data; -+ g_variant_get(parameters, "(u@a{sv})", &portal_response, &response_data); -+ g_variant_lookup(response_data, "session_handle", "s", -+ &that->session_handle_); -+ g_variant_unref(response_data); -+ -+ if (!that->session_handle_ || portal_response) { -+ LOG(LS_ERROR) -+ << "Failed to request the screen cast session subscription."; -+ that->portal_init_failed_ = true; -+ return; -+ } -+ -+ that->SourcesRequest(); -+} -+ -+void BaseCapturerPipeWire::SourcesRequest() { -+ GVariantBuilder builder; -+ gchar* variant_string; -+ -+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); -+ // We want to record monitor content. -+ g_variant_builder_add(&builder, "{sv}", "types", -+ g_variant_new_uint32(capture_source_type_)); -+ // We don't want to allow selection of multiple sources. -+ g_variant_builder_add(&builder, "{sv}", "multiple", -+ g_variant_new_boolean(false)); -+ variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT)); -+ g_variant_builder_add(&builder, "{sv}", "handle_token", -+ g_variant_new_string(variant_string)); -+ -+ sources_handle_ = PrepareSignalHandle(connection_, variant_string); -+ sources_request_signal_id_ = SetupRequestResponseSignal( -+ sources_handle_, OnSourcesRequestResponseSignal); -+ g_free(variant_string); -+ -+ LOG(LS_INFO) << "Requesting sources from the screen cast session."; -+ g_dbus_proxy_call( -+ proxy_, "SelectSources", -+ g_variant_new("(oa{sv})", session_handle_, &builder), -+ G_DBUS_CALL_FLAGS_NONE, /*timeout=*/-1, /*cancellable=*/nullptr, -+ reinterpret_cast(OnSourcesRequested), this); -+} -+ -+// static -+void BaseCapturerPipeWire::OnSourcesRequested(GDBusConnection* connection, -+ GAsyncResult* result, -+ gpointer user_data) { -+ BaseCapturerPipeWire* that = -+ static_cast(user_data); -+ RTC_DCHECK(that); -+ -+ GError* error = nullptr; -+ GVariant* variant = g_dbus_proxy_call_finish(that->proxy_, result, &error); -+ if (!variant) { -+ LOG(LS_ERROR) << "Failed to request the sources: " << error->message; -+ g_error_free(error); -+ that->portal_init_failed_ = true; -+ return; -+ } -+ -+ LOG(LS_INFO) << "Sources requested from the screen cast session."; -+ -+ gchar* handle = nullptr; -+ g_variant_get_child(variant, 0, "o", &handle); -+ g_variant_unref(variant); -+ if (!handle) { -+ LOG(LS_ERROR) << "Failed to initialize the screen cast session."; -+ if (that->sources_request_signal_id_) { -+ g_dbus_connection_signal_unsubscribe(connection, -+ that->sources_request_signal_id_); -+ that->sources_request_signal_id_ = 0; -+ } -+ that->portal_init_failed_ = true; -+ return; -+ } -+ -+ g_free(handle); -+ -+ LOG(LS_INFO) << "Subscribed to sources signal."; -+} -+ -+// static -+void BaseCapturerPipeWire::OnSourcesRequestResponseSignal( -+ GDBusConnection* connection, -+ const gchar* sender_name, -+ const gchar* object_path, -+ const gchar* interface_name, -+ const gchar* signal_name, -+ GVariant* parameters, -+ gpointer user_data) { -+ BaseCapturerPipeWire* that = -+ static_cast(user_data); -+ RTC_DCHECK(that); -+ -+ guint32 portal_response; -+ g_variant_get(parameters, "(u@a{sv})", &portal_response, nullptr); -+ if (portal_response) { -+ LOG(LS_ERROR) -+ << "Failed to select sources for the screen cast session."; -+ that->portal_init_failed_ = true; -+ return; -+ } -+ -+ LOG(LS_INFO) << "Received sources signal from session."; -+ that->StartRequest(); -+} -+ -+void BaseCapturerPipeWire::StartRequest() { -+ GVariantBuilder builder; -+ gchar* variant_string; -+ -+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); -+ variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT)); -+ g_variant_builder_add(&builder, "{sv}", "handle_token", -+ g_variant_new_string(variant_string)); -+ -+ start_handle_ = PrepareSignalHandle(connection_, variant_string); -+ start_request_signal_id_ = -+ SetupRequestResponseSignal(start_handle_, OnStartRequestResponseSignal); -+ g_free(variant_string); -+ -+ // "Identifier for the application window", this is Wayland, so not "x11:...". -+ const gchar parent_window[] = ""; -+ -+ LOG(LS_INFO) << "Starting the screen cast session."; -+ g_dbus_proxy_call( -+ proxy_, "Start", -+ g_variant_new("(osa{sv})", session_handle_, parent_window, &builder), -+ G_DBUS_CALL_FLAGS_NONE, /*timeout=*/-1, /*cancellable=*/nullptr, -+ reinterpret_cast(OnStartRequested), this); -+} -+ -+// static -+void BaseCapturerPipeWire::OnStartRequested(GDBusConnection* connection, -+ GAsyncResult* result, -+ gpointer user_data) { -+ BaseCapturerPipeWire* that = -+ static_cast(user_data); -+ RTC_DCHECK(that); -+ -+ GError* error = nullptr; -+ GVariant* variant = g_dbus_proxy_call_finish(that->proxy_, result, &error); -+ if (!variant) { -+ LOG(LS_ERROR) << "Failed to start the screen cast session: " -+ << error->message; -+ g_error_free(error); -+ that->portal_init_failed_ = true; -+ return; -+ } -+ -+ LOG(LS_INFO) << "Initializing the start of the screen cast session."; -+ -+ gchar* handle = nullptr; -+ g_variant_get_child(variant, 0, "o", &handle); -+ g_variant_unref(variant); -+ if (!handle) { -+ LOG(LS_ERROR) -+ << "Failed to initialize the start of the screen cast session."; -+ if (that->start_request_signal_id_) { -+ g_dbus_connection_signal_unsubscribe(connection, -+ that->start_request_signal_id_); -+ that->start_request_signal_id_ = 0; -+ } -+ that->portal_init_failed_ = true; -+ return; -+ } -+ -+ g_free(handle); -+ -+ LOG(LS_INFO) << "Subscribed to the start signal."; -+} -+ -+// static -+void BaseCapturerPipeWire::OnStartRequestResponseSignal( -+ GDBusConnection* connection, -+ const gchar* sender_name, -+ const gchar* object_path, -+ const gchar* interface_name, -+ const gchar* signal_name, -+ GVariant* parameters, -+ gpointer user_data) { -+ BaseCapturerPipeWire* that = -+ static_cast(user_data); -+ RTC_DCHECK(that); -+ -+ LOG(LS_INFO) << "Start signal received."; -+ guint32 portal_response; -+ GVariant* response_data; -+ GVariantIter* iter = nullptr; -+ g_variant_get(parameters, "(u@a{sv})", &portal_response, &response_data); -+ if (portal_response || !response_data) { -+ LOG(LS_ERROR) << "Failed to start the screen cast session."; -+ that->portal_init_failed_ = true; -+ return; -+ } -+ -+ // Array of PipeWire streams. See -+ // https://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.portal.ScreenCast.xml -+ // documentation for . -+ if (g_variant_lookup(response_data, "streams", "a(ua{sv})", &iter)) { -+ GVariant* variant; -+ -+ while (g_variant_iter_next(iter, "@(ua{sv})", &variant)) { -+ guint32 stream_id; -+ gint32 width; -+ gint32 height; -+ GVariant* options; -+ -+ g_variant_get(variant, "(u@a{sv})", &stream_id, &options); -+ RTC_DCHECK(options != nullptr); -+ -+ g_variant_lookup(options, "size", "(ii)", &width, &height); -+ -+ that->desktop_size_.set(width, height); -+ -+ g_variant_unref(options); -+ g_variant_unref(variant); -+ } -+ } -+ g_variant_iter_free(iter); -+ g_variant_unref(response_data); -+ -+ that->OpenPipeWireRemote(); -+} -+ -+void BaseCapturerPipeWire::OpenPipeWireRemote() { -+ GVariantBuilder builder; -+ g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); -+ -+ LOG(LS_INFO) << "Opening the PipeWire remote."; -+ -+ g_dbus_proxy_call_with_unix_fd_list( -+ proxy_, "OpenPipeWireRemote", -+ g_variant_new("(oa{sv})", session_handle_, &builder), -+ G_DBUS_CALL_FLAGS_NONE, /*timeout=*/-1, /*fd_list=*/nullptr, -+ /*cancellable=*/nullptr, -+ reinterpret_cast(OnOpenPipeWireRemoteRequested), -+ this); -+} -+ -+// static -+void BaseCapturerPipeWire::OnOpenPipeWireRemoteRequested( -+ GDBusConnection* connection, -+ GAsyncResult* result, -+ gpointer user_data) { -+ BaseCapturerPipeWire* that = -+ static_cast(user_data); -+ RTC_DCHECK(that); -+ -+ GError* error = nullptr; -+ GUnixFDList* outlist = nullptr; -+ GVariant* variant = g_dbus_proxy_call_with_unix_fd_list_finish( -+ that->proxy_, &outlist, result, &error); -+ if (!variant) { -+ LOG(LS_ERROR) << "Failed to open the PipeWire remote: " -+ << error->message; -+ g_error_free(error); -+ that->portal_init_failed_ = true; -+ return; -+ } -+ -+ gint32 index; -+ g_variant_get(variant, "(h)", &index); -+ -+ if ((that->pw_fd_ = g_unix_fd_list_get(outlist, index, &error)) == -1) { -+ LOG(LS_ERROR) << "Failed to get file descriptor from the list: " -+ << error->message; -+ g_error_free(error); -+ g_variant_unref(variant); -+ that->portal_init_failed_ = true; -+ return; -+ } -+ -+ g_variant_unref(variant); -+ g_object_unref(outlist); -+ -+ that->InitPipeWire(); -+ LOG(LS_INFO) << "PipeWire remote opened."; -+} -+ -+void BaseCapturerPipeWire::Start(Callback* callback) { -+ RTC_DCHECK(!callback_); -+ RTC_DCHECK(callback); -+ -+ InitPortals(); -+ -+ callback_ = callback; -+} -+ -+void BaseCapturerPipeWire::CaptureFrame() { -+ if (portal_init_failed_) { -+ callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr); -+ return; -+ } -+ -+ if (!current_frame_) { -+ callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr); -+ return; -+ } -+ -+ std::unique_ptr result(new BasicDesktopFrame(desktop_size_)); -+ result->CopyPixelsFrom( -+ current_frame_, (desktop_size_.width() * kBytesPerPixelPw), -+ DesktopRect::MakeWH(desktop_size_.width(), desktop_size_.height())); -+ if (!result) { -+ callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr); -+ return; -+ } -+ callback_->OnCaptureResult(Result::SUCCESS, std::move(result)); -+} -+ -+bool BaseCapturerPipeWire::GetSourceList(SourceList* sources) { -+ RTC_DCHECK(sources->size() == 0); -+ // List of available screens is already presented by the xdg-desktop-portal. -+ // But we have to add an empty source as the code expects it. -+ sources->push_back({0}); -+ return true; -+} -+ -+bool BaseCapturerPipeWire::SelectSource(SourceId id) { -+ // Screen selection is handled by the xdg-desktop-portal. -+ return true; -+} -+ -+} // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/base_capturer_pipewire.h firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/base_capturer_pipewire.h ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/base_capturer_pipewire.h 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/base_capturer_pipewire.h 2019-01-07 13:20:40.141768272 +0100 -@@ -0,0 +1,167 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#ifndef MODULES_DESKTOP_CAPTURE_BASE_CAPTURER_PIPEWIRE_H_ -+#define MODULES_DESKTOP_CAPTURE_BASE_CAPTURER_PIPEWIRE_H_ -+ -+#include -+#define typeof __typeof__ -+#include -+#include -+ -+#include "webrtc/modules/desktop_capture/desktop_capture_options.h" -+#include "webrtc/modules/desktop_capture/desktop_capturer.h" -+ -+namespace webrtc { -+ -+class PipeWireType { -+ public: -+ spa_type_media_type media_type; -+ spa_type_media_subtype media_subtype; -+ spa_type_format_video format_video; -+ spa_type_video_format video_format; -+}; -+ -+class BaseCapturerPipeWire : public DesktopCapturer { -+ public: -+ enum CaptureSourceType { Screen = 1, Window }; -+ -+ explicit BaseCapturerPipeWire(CaptureSourceType source_type); -+ ~BaseCapturerPipeWire() override; -+ -+ // DesktopCapturer interface. -+ void Start(Callback* delegate) override; -+ void Stop() override { callback_ = nullptr; } -+ void CaptureFrame() override; -+ bool GetSourceList(SourceList* sources) override; -+ bool SelectSource(SourceId id) override; -+ -+ private: -+ // PipeWire types --> -+ pw_core* pw_core_ = nullptr; -+ pw_type* pw_core_type_ = nullptr; -+ pw_stream* pw_stream_ = nullptr; -+ pw_remote* pw_remote_ = nullptr; -+ pw_loop* pw_loop_ = nullptr; -+ pw_thread_loop* pw_main_loop_ = nullptr; -+ PipeWireType* pw_type_ = nullptr; -+ -+ spa_hook spa_stream_listener_ = {}; -+ spa_hook spa_remote_listener_ = {}; -+ -+ pw_stream_events pw_stream_events_ = {}; -+ pw_remote_events pw_remote_events_ = {}; -+ -+ spa_video_info_raw* spa_video_format_ = nullptr; -+ -+ gint32 pw_fd_ = -1; -+ -+ CaptureSourceType capture_source_type_ = -+ BaseCapturerPipeWire::CaptureSourceType::Screen; -+ -+ // <-- end of PipeWire types -+ -+ GDBusConnection* connection_ = nullptr; -+ GDBusProxy* proxy_ = nullptr; -+ gchar* portal_handle_ = nullptr; -+ gchar* session_handle_ = nullptr; -+ gchar* sources_handle_ = nullptr; -+ gchar* start_handle_ = nullptr; -+ guint session_request_signal_id_ = 0; -+ guint sources_request_signal_id_ = 0; -+ guint start_request_signal_id_ = 0; -+ -+ DesktopSize desktop_size_ = {}; -+ DesktopCaptureOptions options_ = {}; -+ -+ uint8_t* current_frame_ = nullptr; -+ Callback* callback_ = nullptr; -+ -+ bool portal_init_failed_ = false; -+ -+ void InitPortals(); -+ void InitPipeWire(); -+ void InitPipeWireTypes(); -+ -+ void CreateReceivingStream(); -+ void HandleBuffer(pw_buffer* buffer); -+ -+ void ConvertRGBxToBGRx(uint8_t* frame, uint32_t size); -+ -+ static void OnStateChanged(void* data, -+ pw_remote_state old_state, -+ pw_remote_state state, -+ const char* error); -+ static void OnStreamStateChanged(void* data, -+ pw_stream_state old_state, -+ pw_stream_state state, -+ const char* error_message); -+ -+ static void OnStreamFormatChanged(void* data, const struct spa_pod* format); -+ static void OnStreamProcess(void* data); -+ static void OnNewBuffer(void* data, uint32_t id); -+ -+ guint SetupRequestResponseSignal(const gchar* object_path, -+ GDBusSignalCallback callback); -+ -+ static void OnProxyRequested(GObject* object, -+ GAsyncResult* result, -+ gpointer user_data); -+ -+ static gchar* PrepareSignalHandle(GDBusConnection* connection, -+ const gchar* token); -+ -+ void SessionRequest(); -+ static void OnSessionRequested(GDBusConnection* connection, -+ GAsyncResult* result, -+ gpointer user_data); -+ static void OnSessionRequestResponseSignal(GDBusConnection* connection, -+ const gchar* sender_name, -+ const gchar* object_path, -+ const gchar* interface_name, -+ const gchar* signal_name, -+ GVariant* parameters, -+ gpointer user_data); -+ -+ void SourcesRequest(); -+ static void OnSourcesRequested(GDBusConnection* connection, -+ GAsyncResult* result, -+ gpointer user_data); -+ static void OnSourcesRequestResponseSignal(GDBusConnection* connection, -+ const gchar* sender_name, -+ const gchar* object_path, -+ const gchar* interface_name, -+ const gchar* signal_name, -+ GVariant* parameters, -+ gpointer user_data); -+ -+ void StartRequest(); -+ static void OnStartRequested(GDBusConnection* connection, -+ GAsyncResult* result, -+ gpointer user_data); -+ static void OnStartRequestResponseSignal(GDBusConnection* connection, -+ const gchar* sender_name, -+ const gchar* object_path, -+ const gchar* interface_name, -+ const gchar* signal_name, -+ GVariant* parameters, -+ gpointer user_data); -+ -+ void OpenPipeWireRemote(); -+ static void OnOpenPipeWireRemoteRequested(GDBusConnection* connection, -+ GAsyncResult* result, -+ gpointer user_data); -+ -+ RTC_DISALLOW_COPY_AND_ASSIGN(BaseCapturerPipeWire); -+}; -+ -+} // namespace webrtc -+ -+#endif // MODULES_DESKTOP_CAPTURE_BASE_CAPTURER_PIPEWIRE_H_ -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_gn/moz.build firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_gn/moz.build ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_gn/moz.build 2019-01-07 13:16:46.410433280 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_gn/moz.build 2019-01-07 13:20:40.146768322 +0100 -@@ -143,14 +143,26 @@ - "/media/webrtc/trunk/webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.cc" - ] - -+# Common Linux stuff between X11 and PipeWire - if CONFIG["OS_TARGET"] == "Linux": - - DEFINES["USE_NSS_CERTS"] = "1" -- DEFINES["USE_X11"] = "1" - DEFINES["WEBRTC_LINUX"] = True - DEFINES["WEBRTC_POSIX"] = True - DEFINES["_FILE_OFFSET_BITS"] = "64" - -+ UNIFIED_SOURCES += [ -+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/app_capturer_linux.cc", -+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_linux.cc", -+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc", -+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc", -+ ] -+ -+# X11 specific files -+if CONFIG["OS_TARGET"] == "Linux": -+ -+ DEFINES["USE_X11"] = "1" -+ - OS_LIBS += [ - "rt", - "X11", -@@ -177,6 +189,27 @@ - "/media/webrtc/trunk/webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.cc" +diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build.firefox-pipewire firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build +--- firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build.firefox-pipewire 2019-07-01 22:30:33.000000000 +0200 ++++ firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build 2019-07-08 15:26:15.397161627 +0200 +@@ -194,6 +194,28 @@ if CONFIG["OS_TARGET"] == "Linux": + "/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc" ] +# PipeWire specific files @@ -1427,1145 +40,24 @@ diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desk + CXXFLAGS += CONFIG['TK_CFLAGS'] + + UNIFIED_SOURCES += [ -+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/base_capturer_pipewire.cc", -+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_pipewire.cc", -+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_pipewire.cc" ++ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc", ++ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc", ++ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc" + ] ++ + if CONFIG["OS_TARGET"] == "NetBSD": DEFINES["USE_X11"] = "1" -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h 2019-01-07 13:16:46.361432790 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h 2019-01-07 13:20:40.144768302 +0100 -@@ -107,6 +107,11 @@ - } - #endif - -+#if defined(WEBRTC_USE_PIPEWIRE) -+ bool allow_pipewire() const { return allow_pipewire_; } -+ void set_allow_pipewire(bool allow) { allow_pipewire_ = allow; } -+#endif -+ - private: - #if defined(USE_X11) - rtc::scoped_refptr x_display_; -@@ -129,6 +134,9 @@ - #endif +diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h.firefox-pipewire firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h +--- firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h.firefox-pipewire 2019-07-08 16:42:13.936254926 +0200 ++++ firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h 2019-07-08 16:42:17.509264974 +0200 +@@ -141,7 +141,7 @@ class DesktopCaptureOptions { bool disable_effects_ = true; bool detect_updated_region_ = false; -+#if defined(WEBRTC_USE_PIPEWIRE) + #if defined(WEBRTC_USE_PIPEWIRE) +- bool allow_pipewire_ = false; + bool allow_pipewire_ = true; -+#endif + #endif }; - } // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capturer.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capturer.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capturer.cc 2019-01-07 13:16:46.389433070 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capturer.cc 2019-01-07 13:20:40.148768342 +0100 -@@ -66,4 +66,17 @@ - return capturer; - } - -+#if defined(WEBRTC_USE_PIPEWIRE) || defined(USE_X11) -+bool DesktopCapturer::IsRunningUnderWayland() { -+ const char* xdg_session_type = getenv("XDG_SESSION_TYPE"); -+ if (!xdg_session_type || strncmp(xdg_session_type, "wayland", 7) != 0) -+ return false; -+ -+ if (!(getenv("WAYLAND_DISPLAY"))) -+ return false; -+ -+ return true; -+} -+#endif -+ - } // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capturer.h firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capturer.h ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capturer.h 2019-01-07 13:16:46.394433120 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capturer.h 2019-01-07 13:20:40.147768332 +0100 -@@ -129,6 +129,10 @@ - static std::unique_ptr CreateAppCapturer( - const DesktopCaptureOptions& options); - -+#if defined(WEBRTC_USE_PIPEWIRE) || defined(USE_X11) -+ static bool IsRunningUnderWayland(); -+#endif -+ - protected: - // CroppingWindowCapturer needs to create raw capturers without wrappers, so - // the following two functions are protected. -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_linux.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_linux.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_linux.cc 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_linux.cc 2019-01-07 13:20:40.165768512 +0100 -@@ -0,0 +1,40 @@ -+/* -+ * Copyright (c) 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#include "webrtc/modules/desktop_capture/mouse_cursor_monitor.h" -+ -+#if defined(USE_X11) -+#include "webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.h" -+#endif // defined(USE_X11) -+ -+namespace webrtc { -+ -+// static -+MouseCursorMonitor* MouseCursorMonitor::CreateForWindow( -+ const DesktopCaptureOptions& options, WindowId window) { -+#if defined(USE_X11) -+ return MouseCursorMonitorX11::CreateForWindow(options, window); -+#else -+ return nullptr; -+#endif // defined(USE_X11) -+} -+ -+// static -+MouseCursorMonitor* MouseCursorMonitor::CreateForScreen( -+ const DesktopCaptureOptions& options, -+ ScreenId screen) { -+#if defined(USE_X11) -+ return MouseCursorMonitorX11::CreateForScreen(options, screen); -+#else -+ return nullptr; -+#endif // defined(USE_X11) -+} -+ -+} // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc 2019-01-07 13:16:46.368432860 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.cc 2019-01-07 13:20:40.166768522 +0100 -@@ -16,6 +16,8 @@ - #include - #include - -+#include "webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.h" -+ - #include "webrtc/modules/desktop_capture/desktop_capture_options.h" - #include "webrtc/modules/desktop_capture/desktop_frame.h" - #include "webrtc/modules/desktop_capture/mouse_cursor.h" -@@ -59,38 +61,6 @@ - - namespace webrtc { - --class MouseCursorMonitorX11 : public MouseCursorMonitor, -- public SharedXDisplay::XEventHandler { -- public: -- MouseCursorMonitorX11(const DesktopCaptureOptions& options, Window window, Window inner_window); -- ~MouseCursorMonitorX11() override; -- -- void Start(Callback* callback, Mode mode) override; -- void Stop() override; -- void Capture() override; -- -- private: -- // SharedXDisplay::XEventHandler interface. -- bool HandleXEvent(const XEvent& event) override; -- -- Display* display() { return x_display_->display(); } -- -- // Captures current cursor shape and stores it in |cursor_shape_|. -- void CaptureCursor(); -- -- rtc::scoped_refptr x_display_; -- Callback* callback_; -- Mode mode_; -- Window window_; -- Window inner_window_; -- -- bool have_xfixes_; -- int xfixes_event_base_; -- int xfixes_error_base_; -- -- std::unique_ptr cursor_shape_; --}; -- - MouseCursorMonitorX11::MouseCursorMonitorX11( - const DesktopCaptureOptions& options, - Window window, Window inner_window) -@@ -244,7 +214,7 @@ - } - - // static --MouseCursorMonitor* MouseCursorMonitor::CreateForWindow( -+MouseCursorMonitor* MouseCursorMonitorX11::CreateForWindow( - const DesktopCaptureOptions& options, WindowId window) { - if (!options.x_display()) - return NULL; -@@ -254,7 +224,7 @@ - return new MouseCursorMonitorX11(options, outer_window, window); - } - --MouseCursorMonitor* MouseCursorMonitor::CreateForScreen( -+MouseCursorMonitor* MouseCursorMonitorX11::CreateForScreen( - const DesktopCaptureOptions& options, - ScreenId screen) { - if (!options.x_display()) -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.h firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.h ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.h 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/mouse_cursor_monitor_x11.h 2019-01-07 13:20:40.164768502 +0100 -@@ -0,0 +1,63 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#ifndef MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_MONITOR_X11_H_ -+#define MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_MONITOR_X11_H_ -+ -+#include -+#include -+ -+#include "webrtc/modules/desktop_capture/desktop_capture_options.h" -+#include "webrtc/modules/desktop_capture/desktop_capture_types.h" -+#include "webrtc/modules/desktop_capture/x11/shared_x_display.h" -+#include "webrtc/modules/desktop_capture/mouse_cursor.h" -+#include "webrtc/modules/desktop_capture/mouse_cursor_monitor.h" -+#include "webrtc/base/scoped_ref_ptr.h" -+ -+namespace webrtc { -+ -+class MouseCursorMonitorX11 : public MouseCursorMonitor, -+ public SharedXDisplay::XEventHandler { -+ public: -+ MouseCursorMonitorX11(const DesktopCaptureOptions& options, Window window, Window inner_window); -+ ~MouseCursorMonitorX11() override; -+ -+ void Start(Callback* callback, Mode mode) override; -+ void Stop() override; -+ void Capture() override; -+ -+ static MouseCursorMonitor* CreateForWindow(const DesktopCaptureOptions& options, WindowId window); -+ static MouseCursorMonitor* CreateForScreen(const DesktopCaptureOptions& options, ScreenId screen); -+ -+ private: -+ // SharedXDisplay::XEventHandler interface. -+ bool HandleXEvent(const XEvent& event) override; -+ -+ Display* display() { return x_display_->display(); } -+ -+ // Captures current cursor shape and stores it in |cursor_shape_|. -+ void CaptureCursor(); -+ -+ rtc::scoped_refptr x_display_; -+ Callback* callback_; -+ Mode mode_; -+ Window window_; -+ Window inner_window_; -+ -+ bool have_xfixes_; -+ int xfixes_event_base_; -+ int xfixes_error_base_; -+ -+ std::unique_ptr cursor_shape_; -+}; -+ -+} // namespace webrtc -+ -+#endif // MODULES_DESKTOP_CAPTURE_MOUSE_CURSOR_MONITOR_X11_H_ -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc 2019-01-07 13:20:40.170768562 +0100 -@@ -0,0 +1,40 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#include "webrtc/modules/desktop_capture/desktop_capture_options.h" -+#include "webrtc/modules/desktop_capture/desktop_capturer.h" -+ -+#if defined(WEBRTC_USE_PIPEWIRE) -+#include "webrtc/modules/desktop_capture/screen_capturer_pipewire.h" -+#endif // defined(WEBRTC_USE_PIPEWIRE) -+ -+#if defined(USE_X11) -+#include "webrtc/modules/desktop_capture/screen_capturer_x11.h" -+#endif // defined(USE_X11) -+ -+namespace webrtc { -+ -+// static -+std::unique_ptr DesktopCapturer::CreateRawScreenCapturer( -+ const DesktopCaptureOptions& options) { -+#if defined(WEBRTC_USE_PIPEWIRE) -+ if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) { -+ return ScreenCapturerPipeWire::CreateRawScreenCapturer(options); -+ } -+#endif // defined(WEBRTC_USE_PIPEWIRE) -+ -+#if defined(USE_X11) -+ return ScreenCapturerX11::CreateRawScreenCapturer(options); -+#endif // defined(USE_X11) -+ -+ return nullptr; -+} -+ -+} // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_pipewire.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_pipewire.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_pipewire.cc 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_pipewire.cc 2019-01-07 13:20:40.171768572 +0100 -@@ -0,0 +1,31 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#include "webrtc/modules/desktop_capture/screen_capturer_pipewire.h" -+ -+#include -+ -+namespace webrtc { -+ -+ScreenCapturerPipeWire::ScreenCapturerPipeWire() -+ : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Screen) {} -+ScreenCapturerPipeWire::~ScreenCapturerPipeWire() {} -+ -+// static -+std::unique_ptr -+ScreenCapturerPipeWire::CreateRawScreenCapturer( -+ const DesktopCaptureOptions& options) { -+ std::unique_ptr capturer( -+ new ScreenCapturerPipeWire()); -+ -+ return std::move(capturer); -+} -+ -+} // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_pipewire.h firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_pipewire.h ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_pipewire.h 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_pipewire.h 2019-01-07 13:20:40.168768542 +0100 -@@ -0,0 +1,33 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#ifndef MODULES_DESKTOP_CAPTURE_SCREEN_CAPTURER_PIPEWIRE_H_ -+#define MODULES_DESKTOP_CAPTURE_SCREEN_CAPTURER_PIPEWIRE_H_ -+ -+#include -+ -+#include "webrtc/modules/desktop_capture/base_capturer_pipewire.h" -+ -+namespace webrtc { -+ -+class ScreenCapturerPipeWire : public BaseCapturerPipeWire { -+ public: -+ ScreenCapturerPipeWire(); -+ ~ScreenCapturerPipeWire() override; -+ -+ static std::unique_ptr CreateRawScreenCapturer( -+ const DesktopCaptureOptions& options); -+ -+ RTC_DISALLOW_COPY_AND_ASSIGN(ScreenCapturerPipeWire); -+}; -+ -+} // namespace webrtc -+ -+#endif // MODULES_DESKTOP_CAPTURE_SCREEN_CAPTURER_PIPEWIRE_H_ -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc 2019-01-07 13:16:46.376432940 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.cc 2019-01-07 13:20:40.173768592 +0100 -@@ -19,6 +19,8 @@ - #include - #include - -+#include "webrtc/modules/desktop_capture/screen_capturer_x11.h" -+ - #include "webrtc/base/checks.h" - #include "webrtc/base/constructormagic.h" - #include "webrtc/base/timeutils.h" -@@ -32,100 +34,12 @@ - #include "webrtc/system_wrappers/include/logging.h" - - namespace webrtc { --namespace { -- --// A class to perform video frame capturing for Linux. --// --// If XDamage is used, this class sets DesktopFrame::updated_region() according --// to the areas reported by XDamage. Otherwise this class does not detect --// DesktopFrame::updated_region(), the field is always set to the entire frame --// rectangle. ScreenCapturerDifferWrapper should be used if that functionality --// is necessary. --class ScreenCapturerLinux : public DesktopCapturer, -- public SharedXDisplay::XEventHandler { -- public: -- ScreenCapturerLinux(); -- ~ScreenCapturerLinux() override; -- -- // TODO(ajwong): Do we really want this to be synchronous? -- bool Init(const DesktopCaptureOptions& options); -- -- // DesktopCapturer interface. -- void Start(Callback* delegate) override; -- void Stop() override; -- void CaptureFrame() override; -- bool GetSourceList(SourceList* sources) override; -- bool SelectSource(SourceId id) override; -- -- private: -- Display* display() { return options_.x_display()->display(); } -- -- // SharedXDisplay::XEventHandler interface. -- bool HandleXEvent(const XEvent& event) override; -- -- void InitXDamage(); -- -- // Capture screen pixels to the current buffer in the queue. In the DAMAGE -- // case, the ScreenCapturerHelper already holds the list of invalid rectangles -- // from HandleXEvent(). In the non-DAMAGE case, this captures the -- // whole screen, then calculates some invalid rectangles that include any -- // differences between this and the previous capture. -- std::unique_ptr CaptureScreen(); -- -- // Called when the screen configuration is changed. -- void ScreenConfigurationChanged(); -- -- // Synchronize the current buffer with |last_buffer_|, by copying pixels from -- // the area of |last_invalid_rects|. -- // Note this only works on the assumption that kNumBuffers == 2, as -- // |last_invalid_rects| holds the differences from the previous buffer and -- // the one prior to that (which will then be the current buffer). -- void SynchronizeFrame(); -- -- void DeinitXlib(); -- -- DesktopCaptureOptions options_; -- -- Callback* callback_ = nullptr; -- -- // X11 graphics context. -- GC gc_ = nullptr; -- Window root_window_ = BadValue; -- -- // XFixes. -- bool has_xfixes_ = false; -- int xfixes_event_base_ = -1; -- int xfixes_error_base_ = -1; -- -- // XDamage information. -- bool use_damage_ = false; -- Damage damage_handle_ = 0; -- int damage_event_base_ = -1; -- int damage_error_base_ = -1; -- XserverRegion damage_region_ = 0; -- -- // Access to the X Server's pixel buffer. -- XServerPixelBuffer x_server_pixel_buffer_; -- -- // A thread-safe list of invalid rectangles, and the size of the most -- // recently captured screen. -- ScreenCapturerHelper helper_; -- -- // Queue of the frames buffers. -- ScreenCaptureFrameQueue queue_; -- -- // Invalid region from the previous capture. This is used to synchronize the -- // current with the last buffer used. -- DesktopRegion last_invalid_region_; -- -- RTC_DISALLOW_COPY_AND_ASSIGN(ScreenCapturerLinux); --}; - --ScreenCapturerLinux::ScreenCapturerLinux() { -+ScreenCapturerX11::ScreenCapturerX11() { - helper_.SetLogGridSize(4); - } - --ScreenCapturerLinux::~ScreenCapturerLinux() { -+ScreenCapturerX11::~ScreenCapturerX11() { - options_.x_display()->RemoveEventHandler(ConfigureNotify, this); - if (use_damage_) { - options_.x_display()->RemoveEventHandler( -@@ -134,7 +48,7 @@ - DeinitXlib(); - } - --bool ScreenCapturerLinux::Init(const DesktopCaptureOptions& options) { -+bool ScreenCapturerX11::Init(const DesktopCaptureOptions& options) { - options_ = options; - - root_window_ = RootWindow(display(), DefaultScreen(display())); -@@ -177,7 +91,7 @@ - return true; - } - --void ScreenCapturerLinux::InitXDamage() { -+void ScreenCapturerX11::InitXDamage() { - // Our use of XDamage requires XFixes. - if (!has_xfixes_) { - return; -@@ -218,18 +132,18 @@ - LOG(LS_INFO) << "Using XDamage extension."; - } - --void ScreenCapturerLinux::Start(Callback* callback) { -+void ScreenCapturerX11::Start(Callback* callback) { - RTC_DCHECK(!callback_); - RTC_DCHECK(callback); - - callback_ = callback; - } - --void ScreenCapturerLinux::Stop() { -+void ScreenCapturerX11::Stop() { - callback_ = NULL; - } - --void ScreenCapturerLinux::CaptureFrame() { -+void ScreenCapturerX11::CaptureFrame() { - int64_t capture_start_time_nanos = rtc::TimeNanos(); - - queue_.MoveToNextFrame(); -@@ -243,6 +157,7 @@ - // in a good shape. - if (!x_server_pixel_buffer_.is_initialized()) { - // We failed to initialize pixel buffer. -+ LOG(LS_ERROR) << "Pixel buffer is not initialized."; - callback_->OnCaptureResult(Result::ERROR_PERMANENT, nullptr); - return; - } -@@ -258,6 +173,7 @@ - - std::unique_ptr result = CaptureScreen(); - if (!result) { -+ LOG(LS_WARNING) << "Temporarily failed to capture screen."; - callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr); - return; - } -@@ -268,19 +184,19 @@ - callback_->OnCaptureResult(Result::SUCCESS, std::move(result)); - } - --bool ScreenCapturerLinux::GetSourceList(SourceList* sources) { -+bool ScreenCapturerX11::GetSourceList(SourceList* sources) { - RTC_DCHECK(sources->size() == 0); - // TODO(jiayl): implement screen enumeration. - sources->push_back({0}); - return true; - } - --bool ScreenCapturerLinux::SelectSource(SourceId id) { -+bool ScreenCapturerX11::SelectSource(SourceId id) { - // TODO(jiayl): implement screen selection. - return true; - } - --bool ScreenCapturerLinux::HandleXEvent(const XEvent& event) { -+bool ScreenCapturerX11::HandleXEvent(const XEvent& event) { - if (use_damage_ && (event.type == damage_event_base_ + XDamageNotify)) { - const XDamageNotifyEvent* damage_event = - reinterpret_cast(&event); -@@ -295,7 +211,7 @@ - return false; - } - --std::unique_ptr ScreenCapturerLinux::CaptureScreen() { -+std::unique_ptr ScreenCapturerX11::CaptureScreen() { - std::unique_ptr frame = queue_.current_frame()->Share(); - RTC_DCHECK(x_server_pixel_buffer_.window_size().equals(frame->size())); - -@@ -345,14 +261,15 @@ - // Doing full-screen polling, or this is the first capture after a - // screen-resolution change. In either case, need a full-screen capture. - DesktopRect screen_rect = DesktopRect::MakeSize(frame->size()); -- x_server_pixel_buffer_.CaptureRect(screen_rect, frame.get()); -+ if (!x_server_pixel_buffer_.CaptureRect(screen_rect, frame.get())) -+ return nullptr; - updated_region->SetRect(screen_rect); - } - - return std::move(frame); - } - --void ScreenCapturerLinux::ScreenConfigurationChanged() { -+void ScreenCapturerX11::ScreenConfigurationChanged() { - // Make sure the frame buffers will be reallocated. - queue_.Reset(); - -@@ -363,7 +280,7 @@ - } - } - --void ScreenCapturerLinux::SynchronizeFrame() { -+void ScreenCapturerX11::SynchronizeFrame() { - // Synchronize the current buffer with the previous one since we do not - // capture the entire desktop. Note that encoder may be reading from the - // previous buffer at this time so thread access complaints are false -@@ -383,7 +300,7 @@ - } - } - --void ScreenCapturerLinux::DeinitXlib() { -+void ScreenCapturerX11::DeinitXlib() { - if (gc_) { - XFreeGC(display(), gc_); - gc_ = nullptr; -@@ -404,20 +321,18 @@ - } - } - --} // namespace -- - // static --std::unique_ptr DesktopCapturer::CreateRawScreenCapturer( -+std::unique_ptr ScreenCapturerX11::CreateRawScreenCapturer( - const DesktopCaptureOptions& options) { - if (!options.x_display()) - return nullptr; - -- std::unique_ptr capturer(new ScreenCapturerLinux()); -+ std::unique_ptr capturer(new ScreenCapturerX11()); - if (!capturer.get()->Init(options)) { - return nullptr; - } - -- return std::unique_ptr(capturer.release()); -+ return std::move(capturer); - } - - } // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.h firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.h ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.h 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_x11.h 2019-01-07 13:20:40.169768552 +0100 -@@ -0,0 +1,124 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#ifndef MODULES_DESKTOP_CAPTURE_SCREEN_CAPTURER_X11_H_ -+#define MODULES_DESKTOP_CAPTURE_SCREEN_CAPTURER_X11_H_ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "webrtc/modules/desktop_capture/desktop_capture_options.h" -+#include "webrtc/modules/desktop_capture/desktop_capturer.h" -+#include "webrtc/modules/desktop_capture/desktop_frame.h" -+#include "webrtc/modules/desktop_capture/desktop_region.h" -+#include "webrtc/modules/desktop_capture/x11/shared_x_display.h" -+#include "webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.h" -+#include "webrtc/modules/desktop_capture/screen_capture_frame_queue.h" -+#include "webrtc/modules/desktop_capture/screen_capturer_helper.h" -+#include "webrtc/modules/desktop_capture/shared_desktop_frame.h" -+#include "webrtc/base/constructormagic.h" -+ -+namespace webrtc { -+ -+// A class to perform video frame capturing for Linux on X11. -+// -+// If XDamage is used, this class sets DesktopFrame::updated_region() according -+// to the areas reported by XDamage. Otherwise this class does not detect -+// DesktopFrame::updated_region(), the field is always set to the entire frame -+// rectangle. ScreenCapturerDifferWrapper should be used if that functionality -+// is necessary. -+class ScreenCapturerX11 : public DesktopCapturer, -+ public SharedXDisplay::XEventHandler { -+ public: -+ ScreenCapturerX11(); -+ ~ScreenCapturerX11() override; -+ -+ static std::unique_ptr CreateRawScreenCapturer(const DesktopCaptureOptions& options); -+ -+ // TODO(ajwong): Do we really want this to be synchronous? -+ bool Init(const DesktopCaptureOptions& options); -+ -+ // DesktopCapturer interface. -+ void Start(Callback* delegate) override; -+ void Stop() override; -+ void CaptureFrame() override; -+ bool GetSourceList(SourceList* sources) override; -+ bool SelectSource(SourceId id) override; -+ -+ private: -+ Display* display() { return options_.x_display()->display(); } -+ -+ // SharedXDisplay::XEventHandler interface. -+ bool HandleXEvent(const XEvent& event) override; -+ -+ void InitXDamage(); -+ -+ // Capture screen pixels to the current buffer in the queue. In the DAMAGE -+ // case, the ScreenCapturerHelper already holds the list of invalid rectangles -+ // from HandleXEvent(). In the non-DAMAGE case, this captures the -+ // whole screen, then calculates some invalid rectangles that include any -+ // differences between this and the previous capture. -+ std::unique_ptr CaptureScreen(); -+ -+ // Called when the screen configuration is changed. -+ void ScreenConfigurationChanged(); -+ -+ // Synchronize the current buffer with |last_buffer_|, by copying pixels from -+ // the area of |last_invalid_rects|. -+ // Note this only works on the assumption that kNumBuffers == 2, as -+ // |last_invalid_rects| holds the differences from the previous buffer and -+ // the one prior to that (which will then be the current buffer). -+ void SynchronizeFrame(); -+ -+ void DeinitXlib(); -+ -+ DesktopCaptureOptions options_; -+ -+ Callback* callback_ = nullptr; -+ -+ // X11 graphics context. -+ GC gc_ = nullptr; -+ Window root_window_ = BadValue; -+ -+ // XFixes. -+ bool has_xfixes_ = false; -+ int xfixes_event_base_ = -1; -+ int xfixes_error_base_ = -1; -+ -+ // XDamage information. -+ bool use_damage_ = false; -+ Damage damage_handle_ = 0; -+ int damage_event_base_ = -1; -+ int damage_error_base_ = -1; -+ XserverRegion damage_region_ = 0; -+ -+ // Access to the X Server's pixel buffer. -+ XServerPixelBuffer x_server_pixel_buffer_; -+ -+ // A thread-safe list of invalid rectangles, and the size of the most -+ // recently captured screen. -+ ScreenCapturerHelper helper_; -+ -+ // Queue of the frames buffers. -+ ScreenCaptureFrameQueue queue_; -+ -+ // Invalid region from the previous capture. This is used to synchronize the -+ // current with the last buffer used. -+ DesktopRegion last_invalid_region_; -+ -+ RTC_DISALLOW_COPY_AND_ASSIGN(ScreenCapturerX11); -+}; -+ -+} // namespace webrtc -+ -+#endif // MODULES_DESKTOP_CAPTURE_SCREEN_CAPTURER_X11_H_ -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc 2019-01-07 13:20:40.196768822 +0100 -@@ -0,0 +1,40 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#include "webrtc/modules/desktop_capture/desktop_capture_options.h" -+#include "webrtc/modules/desktop_capture/desktop_capturer.h" -+ -+#if defined(WEBRTC_USE_PIPEWIRE) -+#include "webrtc/modules/desktop_capture/window_capturer_pipewire.h" -+#endif // defined(WEBRTC_USE_PIPEWIRE) -+ -+#if defined(USE_X11) -+#include "webrtc/modules/desktop_capture/window_capturer_x11.h" -+#endif // defined(USE_X11) -+ -+namespace webrtc { -+ -+// static -+std::unique_ptr DesktopCapturer::CreateRawWindowCapturer( -+ const DesktopCaptureOptions& options) { -+#if defined(WEBRTC_USE_PIPEWIRE) -+ if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) { -+ return WindowCapturerPipeWire::CreateRawWindowCapturer(options); -+ } -+#endif // defined(WEBRTC_USE_PIPEWIRE) -+ -+#if defined(USE_X11) -+ return WindowCapturerX11::CreateRawWindowCapturer(options); -+#endif // defined(USE_X11) -+ -+ return nullptr; -+} -+ -+} // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_pipewire.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_pipewire.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_pipewire.cc 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_pipewire.cc 2019-01-07 13:20:40.197768832 +0100 -@@ -0,0 +1,28 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#include "webrtc/modules/desktop_capture/window_capturer_pipewire.h" -+ -+namespace webrtc { -+ -+WindowCapturerPipeWire::WindowCapturerPipeWire() -+ : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Window) {} -+WindowCapturerPipeWire::~WindowCapturerPipeWire() {} -+ -+// static -+std::unique_ptr -+WindowCapturerPipeWire::CreateRawWindowCapturer( -+ const DesktopCaptureOptions& options) { -+ std::unique_ptr capturer( -+ new WindowCapturerPipeWire()); -+ -+ return std::move(capturer); -+} -+} // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_pipewire.h firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_pipewire.h ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_pipewire.h 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_pipewire.h 2019-01-07 13:20:40.177768632 +0100 -@@ -0,0 +1,33 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#ifndef MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_PIPEWIRE_H_ -+#define MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_PIPEWIRE_H_ -+ -+#include -+ -+#include "webrtc/modules/desktop_capture/base_capturer_pipewire.h" -+ -+namespace webrtc { -+ -+class WindowCapturerPipeWire : public BaseCapturerPipeWire { -+ public: -+ WindowCapturerPipeWire(); -+ ~WindowCapturerPipeWire() override; -+ -+ static std::unique_ptr CreateRawWindowCapturer( -+ const DesktopCaptureOptions& options); -+ -+ RTC_DISALLOW_COPY_AND_ASSIGN(WindowCapturerPipeWire); -+}; -+ -+} // namespace webrtc -+ -+#endif // MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_PIPEWIRE_H_ -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_x11.cc firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_x11.cc ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_x11.cc 2019-01-07 13:16:46.375432930 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_x11.cc 2019-01-07 13:20:40.198768842 +0100 -@@ -17,6 +17,8 @@ - - #include - -+#include "webrtc/modules/desktop_capture/window_capturer_x11.h" -+ - #include "webrtc/base/constructormagic.h" - #include "webrtc/base/scoped_ref_ptr.h" - #include "webrtc/modules/desktop_capture/desktop_capturer.h" -@@ -30,58 +32,7 @@ - - namespace webrtc { - --namespace { -- --class WindowCapturerLinux : public DesktopCapturer, -- public SharedXDisplay::XEventHandler { -- public: -- WindowCapturerLinux(const DesktopCaptureOptions& options); -- ~WindowCapturerLinux() override; -- -- // DesktopCapturer interface. -- void Start(Callback* callback) override; -- void Stop() override; -- void CaptureFrame() override; -- bool GetSourceList(SourceList* sources) override; -- bool SelectSource(SourceId id) override; -- bool FocusOnSelectedSource() override; -- -- // SharedXDisplay::XEventHandler interface. -- bool HandleXEvent(const XEvent& event) override; -- -- private: -- Display* display() { return x_display_->display(); } -- -- // Iterates through |window| hierarchy to find first visible window, i.e. one -- // that has WM_STATE property set to NormalState. -- // See http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.3.1 . -- ::Window GetApplicationWindow(::Window window); -- -- // Returns true if the |window| is a desktop element. -- bool IsDesktopElement(::Window window); -- -- // Returns window title for the specified X |window|. -- bool GetWindowTitle(::Window window, std::string* title); -- -- // Returns the id of the owning process. -- int GetWindowProcessID(::Window window); -- -- Callback* callback_ = nullptr; -- -- rtc::scoped_refptr x_display_; -- -- Atom wm_state_atom_; -- Atom window_type_atom_; -- Atom normal_window_type_atom_; -- bool has_composite_extension_ = false; -- -- ::Window selected_window_ = 0; -- XServerPixelBuffer x_server_pixel_buffer_; -- -- RTC_DISALLOW_COPY_AND_ASSIGN(WindowCapturerLinux); --}; -- --WindowCapturerLinux::WindowCapturerLinux(const DesktopCaptureOptions& options) -+WindowCapturerX11::WindowCapturerX11(const DesktopCaptureOptions& options) - : x_display_(options.x_display()) { - // Create Atoms so we don't need to do it every time they are used. - wm_state_atom_ = XInternAtom(display(), "WM_STATE", True); -@@ -102,11 +53,11 @@ - x_display_->AddEventHandler(ConfigureNotify, this); - } - --WindowCapturerLinux::~WindowCapturerLinux() { -+WindowCapturerX11::~WindowCapturerX11() { - x_display_->RemoveEventHandler(ConfigureNotify, this); - } - --bool WindowCapturerLinux::GetSourceList(SourceList* sources) { -+bool WindowCapturerX11::GetSourceList(SourceList* sources) { - SourceList result; - - XErrorTrap error_trap(display()); -@@ -159,7 +110,7 @@ - return true; - } - --bool WindowCapturerLinux::SelectSource(SourceId id) { -+bool WindowCapturerX11::SelectSource(SourceId id) { - if (!x_server_pixel_buffer_.Init(display(), id)) - return false; - -@@ -180,7 +131,7 @@ - return true; - } - --bool WindowCapturerLinux::FocusOnSelectedSource() { -+bool WindowCapturerX11::FocusOnSelectedSource() { - if (!selected_window_) - return false; - -@@ -229,18 +180,18 @@ - return true; - } - --void WindowCapturerLinux::Start(Callback* callback) { -+void WindowCapturerX11::Start(Callback* callback) { - assert(!callback_); - assert(callback); - - callback_ = callback; - } - --void WindowCapturerLinux::Stop() { -+void WindowCapturerX11::Stop() { - callback_ = NULL; - } - --void WindowCapturerLinux::CaptureFrame() { -+void WindowCapturerX11::CaptureFrame() { - x_display_->ProcessPendingXEvents(); - - if (!x_server_pixel_buffer_.IsWindowValid()) { -@@ -274,7 +225,7 @@ - callback_->OnCaptureResult(Result::SUCCESS, std::move(frame)); - } - --bool WindowCapturerLinux::HandleXEvent(const XEvent& event) { -+bool WindowCapturerX11::HandleXEvent(const XEvent& event) { - if (event.type == ConfigureNotify) { - XConfigureEvent xce = event.xconfigure; - if (!DesktopSize(xce.width, xce.height).equals( -@@ -288,7 +239,7 @@ - return false; - } - --::Window WindowCapturerLinux::GetApplicationWindow(::Window window) { -+::Window WindowCapturerX11::GetApplicationWindow(::Window window) { - // Get WM_STATE property of the window. - XWindowProperty window_state(display(), window, wm_state_atom_); - -@@ -326,7 +277,7 @@ - return app_window; - } - --bool WindowCapturerLinux::IsDesktopElement(::Window window) { -+bool WindowCapturerX11::IsDesktopElement(::Window window) { - if (window == 0) - return false; - -@@ -361,7 +312,7 @@ - return result; - } - --bool WindowCapturerLinux::GetWindowTitle(::Window window, std::string* title) { -+bool WindowCapturerX11::GetWindowTitle(::Window window, std::string* title) { - int status; - bool result = false; - XTextProperty window_name; -@@ -390,9 +341,7 @@ - return result; - } - --} // namespace -- --int WindowCapturerLinux::GetWindowProcessID(::Window window) { -+int WindowCapturerX11::GetWindowProcessID(::Window window) { - // Get _NET_WM_PID property of the window. - Atom process_atom = XInternAtom(display(), "_NET_WM_PID", True); - XWindowProperty process_id(display(), window, process_atom); -@@ -401,11 +350,11 @@ - } - - // static --std::unique_ptr DesktopCapturer::CreateRawWindowCapturer( -+std::unique_ptr WindowCapturerX11::CreateRawWindowCapturer( - const DesktopCaptureOptions& options) { - if (!options.x_display()) - return nullptr; -- return std::unique_ptr(new WindowCapturerLinux(options)); -+ return std::unique_ptr(new WindowCapturerX11(options)); - } - - } // namespace webrtc -diff -ENwbur firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_x11.h firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_x11.h ---- firefox-64.0/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_x11.h 1970-01-01 01:00:00.000000000 +0100 -+++ firefox-webrtc/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_x11.h 2019-01-07 13:20:40.177768632 +0100 -@@ -0,0 +1,83 @@ -+/* -+ * Copyright 2018 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 in the root of the source -+ * tree. An additional intellectual property rights grant can be found -+ * in the file PATENTS. All contributing project authors may -+ * be found in the AUTHORS file in the root of the source tree. -+ */ -+ -+#ifndef MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_X11_H_ -+#define MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_X11_H_ -+ -+#include -+#include -+#include -+#include -+ -+#include "webrtc/modules/desktop_capture/desktop_capture_options.h" -+#include "webrtc/modules/desktop_capture/desktop_capturer.h" -+#include "webrtc/modules/desktop_capture/desktop_geometry.h" -+#include "webrtc/modules/desktop_capture/x11/shared_x_display.h" -+#include "webrtc/modules/desktop_capture/x11/x_server_pixel_buffer.h" -+#include "webrtc/base/constructormagic.h" -+#include "webrtc/base/scoped_ref_ptr.h" -+ -+namespace webrtc { -+ -+class WindowCapturerX11 : public DesktopCapturer, -+ public SharedXDisplay::XEventHandler { -+ public: -+ explicit WindowCapturerX11(const DesktopCaptureOptions& options); -+ ~WindowCapturerX11() override; -+ -+ static std::unique_ptr CreateRawWindowCapturer( -+ const DesktopCaptureOptions& options); -+ -+ // DesktopCapturer interface. -+ void Start(Callback* callback) override; -+ void Stop() override; -+ void CaptureFrame() override; -+ bool GetSourceList(SourceList* sources) override; -+ bool SelectSource(SourceId id) override; -+ bool FocusOnSelectedSource() override; -+ -+ // SharedXDisplay::XEventHandler interface. -+ bool HandleXEvent(const XEvent& event) override; -+ -+ private: -+ Display* display() { return x_display_->display(); } -+ -+ // Iterates through |window| hierarchy to find first visible window, i.e. one -+ // that has WM_STATE property set to NormalState. -+ // See http://tronche.com/gui/x/icccm/sec-4.html#s-4.1.3.1 . -+ ::Window GetApplicationWindow(::Window window); -+ -+ // Returns true if the |window| is a desktop element. -+ bool IsDesktopElement(::Window window); -+ -+ // Returns window title for the specified X |window|. -+ bool GetWindowTitle(::Window window, std::string* title); -+ -+ // Returns the id of the owning process. -+ int GetWindowProcessID(::Window window); -+ -+ Callback* callback_ = nullptr; -+ -+ rtc::scoped_refptr x_display_; -+ -+ Atom wm_state_atom_; -+ Atom window_type_atom_; -+ Atom normal_window_type_atom_; -+ bool has_composite_extension_ = false; -+ -+ ::Window selected_window_ = 0; -+ XServerPixelBuffer x_server_pixel_buffer_; -+ -+ RTC_DISALLOW_COPY_AND_ASSIGN(WindowCapturerX11); -+}; -+ -+} // namespace webrtc -+ -+#endif // MODULES_DESKTOP_CAPTURE_WINDOW_CAPTURER_X11_H_ diff --git a/icecat-60.6.1-mozilla-1533969.patch b/icecat-60.6.1-mozilla-1533969.patch deleted file mode 100644 index cdf62c5..0000000 --- a/icecat-60.6.1-mozilla-1533969.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- a/js/src/util/NativeStack.cpp -+++ b/js/src/util/NativeStack.cpp -@@ -16,6 +16,7 @@ - #if defined(ANDROID) && !defined(__aarch64__) - #include - #include -+# define gettid() static_cast(syscall(__NR_gettid)) - #endif - #else - #error "Unsupported platform" ---- a/tools/profiler/core/platform.h -+++ b/tools/profiler/core/platform.h -@@ -42,16 +42,16 @@ - #include "PlatformMacros.h" - #include - --// We need a definition of gettid(), but glibc doesn't provide a -+// We need a definition of gettid(), but old glibc versions don't provide a - // wrapper for it. - #if defined(__GLIBC__) - #include - #include --static inline pid_t gettid() { return (pid_t)syscall(SYS_gettid); } -+# define gettid() static_cast(syscall(SYS_gettid)) - #elif defined(GP_OS_darwin) - #include - #include --static inline pid_t gettid() { return (pid_t)syscall(SYS_thread_selfid); } -+# define gettid() static_cast(syscall(SYS_thread_selfid)) - #elif defined(GP_OS_android) - #include - #elif defined(GP_OS_windows) diff --git a/icecat-bz1445383.patch b/icecat-bz1445383.patch deleted file mode 100644 index 97fd5dc..0000000 --- a/icecat-bz1445383.patch +++ /dev/null @@ -1,131 +0,0 @@ -# HG changeset patch -# User Peter Simonyi -# Date 1528570546 14400 -# Node ID 643dfdce06c805659dbfd4f3d8a6e46ee8d3fe9d -# Parent 04cc917f68c5d554e5b9542cb3745c9453bba58d -Bug 1445383 - update ccache stats parser for ccache 3.4 and 3.5 - -MozReview-Commit-ID: KTr9RhkJN5B - -diff --git a/python/mozbuild/mozbuild/controller/building.py b/python/mozbuild/mozbuild/controller/building.py ---- a/python/mozbuild/mozbuild/controller/building.py -+++ b/python/mozbuild/mozbuild/controller/building.py -@@ -752,16 +752,18 @@ class CCacheStats(object): - Instances can be subtracted from each other to obtain differences. - print() or str() the object to show a ``ccache -s`` like output - of the captured stats. - - """ - STATS_KEYS = [ - # (key, description) - # Refer to stats.c in ccache project for all the descriptions. -+ ('stats_zero_time', 'stats zero time'), -+ ('stats_updated', 'stats updated'), - ('cache_hit_direct', 'cache hit (direct)'), - ('cache_hit_preprocessed', 'cache hit (preprocessed)'), - ('cache_hit_rate', 'cache hit rate'), - ('cache_miss', 'cache miss'), - ('link', 'called for link'), - ('preprocessing', 'called for preprocessing'), - ('multiple', 'multiple source files'), - ('stdout', 'compiler produced stdout'), -@@ -833,16 +835,23 @@ class CCacheStats(object): - raise ValueError('Failed to parse ccache stats output: %s' % line) - - @staticmethod - def _strip_prefix(line, prefix): - return line[len(prefix):].strip() if line.startswith(prefix) else line - - @staticmethod - def _parse_value(raw_value): -+ try: -+ # ccache calls strftime with '%c' (src/stats.c) -+ ts = time.strptime(raw_value, '%c') -+ return int(time.mktime(ts)) -+ except ValueError: -+ pass -+ - value = raw_value.split() - unit = '' - if len(value) == 1: - numeric = value[0] - elif len(value) == 2: - numeric, unit = value - else: - raise ValueError('Failed to parse ccache stats value: %s' % raw_value) -diff --git a/python/mozbuild/mozbuild/test/controller/test_ccachestats.py b/python/mozbuild/mozbuild/test/controller/test_ccachestats.py ---- a/python/mozbuild/mozbuild/test/controller/test_ccachestats.py -+++ b/python/mozbuild/mozbuild/test/controller/test_ccachestats.py -@@ -1,14 +1,15 @@ - # This Source Code Form is subject to the terms of the Mozilla Public - # License, v. 2.0. If a copy of the MPL was not distributed with this - # file, You can obtain one at http://mozilla.org/MPL/2.0/. - - from __future__ import unicode_literals - -+import time - import unittest - - from mozunit import main - - from mozbuild.controller.building import CCacheStats - - - class TestCcacheStats(unittest.TestCase): -@@ -169,16 +170,40 @@ class TestCcacheStats(unittest.TestCase) - unsupported code directive 2 - no input file 2378 - cleanups performed 1792 - files in cache 3479 - cache size 4.4 GB - max cache size 5.0 GB - """ - -+ # Substitute a locally-generated timestamp because the timestamp format is -+ # locale-dependent. -+ STAT8 = """ -+ cache directory /home/psimonyi/.ccache -+ primary config /home/psimonyi/.ccache/ccache.conf -+ secondary config (readonly) /etc/ccache.conf -+ stats zero time {timestamp} -+ cache hit (direct) 571 -+ cache hit (preprocessed) 1203 -+ cache miss 11747 -+ cache hit rate 13.12 % -+ called for link 623 -+ called for preprocessing 7194 -+ compile failed 32 -+ preprocessor error 137 -+ bad compiler arguments 4 -+ autoconf compile/link 348 -+ no input file 162 -+ cleanups performed 77 -+ files in cache 13464 -+ cache size 6.2 GB -+ max cache size 7.0 GB -+ """.format(timestamp=time.strftime('%c')) -+ - def test_parse_garbage_stats_message(self): - self.assertRaises(ValueError, CCacheStats, self.STAT_GARBAGE) - - def test_parse_zero_stats_message(self): - stats = CCacheStats(self.STAT0) - self.assertEqual(stats.cache_dir, "/home/tlin/.ccache") - self.assertEqual(stats.hit_rates(), (0, 0, 0)) - -@@ -226,10 +251,15 @@ class TestCcacheStats(unittest.TestCase) - self.assertTrue(stat6) - self.assertTrue(stat3) - self.assertTrue(stats_diff) - - # Test stats for 3.3.3. - stat7 = CCacheStats(self.STAT7) - self.assertTrue(stat7) - -+ def test_stats_version34(self): -+ # Test parsing 3.4 output. -+ stat8 = CCacheStats(self.STAT8) -+ self.assertTrue(stat8) -+ - if __name__ == '__main__': - main() diff --git a/icecat-disable-dbus-remote.patch b/icecat-disable-dbus-remote.patch deleted file mode 100644 index 2b9f3a0..0000000 --- a/icecat-disable-dbus-remote.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up icecat-60.4.0/toolkit/components/remote/nsRemoteService.cpp.old icecat-60.4.0/toolkit/components/remote/nsRemoteService.cpp ---- icecat-60.4.0/toolkit/components/remote/nsRemoteService.cpp.old 2018-11-06 11:25:46.634929894 +0100 -+++ icecat-60.4.0/toolkit/components/remote/nsRemoteService.cpp 2018-11-06 11:21:49.617828440 +0100 -@@ -31,7 +31,7 @@ - - NS_IMETHODIMP - nsRemoteService::Startup(const char* aAppName, const char* aProfileName) { --#if defined(MOZ_ENABLE_DBUS) -+#if 0 - nsresult rv; - mDBusRemoteService = new nsDBusRemoteService(); - rv = mDBusRemoteService->Startup(aAppName, aProfileName); diff --git a/icecat-fix_addon_installation.patch b/icecat-fix_addon_installation.patch index fd83f72..5cc140d 100644 --- a/icecat-fix_addon_installation.patch +++ b/icecat-fix_addon_installation.patch @@ -1,12 +1,12 @@ # Fixes installation of those addons which don't have ID on IceCat ("Cannot find id for addon" error). --- a/toolkit/mozapps/extensions/internal/XPIInstall.jsm +++ b/toolkit/mozapps/extensions/internal/XPIInstall.jsm -@@ -885,8 +885,30 @@ - throw new Error(`Webextension is signed with an invalid id (${addon.id})`); +@@ -627,8 +627,30 @@ + throw new Error(`Extension is signed with an invalid id (${addon.id})`); } } -- if (!addon.id && aInstallLocation.name == KEY_APP_TEMPORARY) { -- addon.id = generateTemporaryInstallID(aZipReader.file); +- if (!addon.id && aLocation.isTemporary) { +- addon.id = generateTemporaryInstallID(aPackage.file); + if (!addon.id) { + if (aInstallLocation.name == KEY_APP_TEMPORARY) { + addon.id = generateTemporaryInstallID(aZipReader.file); @@ -33,4 +33,4 @@ + } } } - addon.updateBlocklistState(); + diff --git a/icecat-fix_jar.patch b/icecat-fix_jar.patch index 418b5b9..9a64fab 100644 --- a/icecat-fix_jar.patch +++ b/icecat-fix_jar.patch @@ -1,11 +1,11 @@ --- browser/locales/jar.orig.mn 2017-03-19 19:59:09.000000000 +0100 +++ browser/locales/jar.mn 2017-03-22 19:49:57.602190867 +0100 -@@ -12,7 +12,7 @@ - +@@ -14,7 +14,7 @@ @AB_CD@.jar: % locale browser @AB_CD@ %locale/browser/ --* locale/browser/bookmarks.html (generic/profile/bookmarks.html.in) + # bookmarks.html is produced by LOCALIZED_GENERATED_FILES. +- locale/browser/bookmarks.html (bookmarks.html) + locale/browser/bookmarks.html (generic/profile/bookmarks.html.in) - locale/browser/aboutDialog.dtd (%chrome/browser/aboutDialog.dtd) - locale/browser/aboutPrivateBrowsing.dtd (%chrome/browser/aboutPrivateBrowsing.dtd) - locale/browser/aboutPrivateBrowsing.properties (%chrome/browser/aboutPrivateBrowsing.properties) + + locale/browser/accounts.properties (%chrome/browser/accounts.properties) + locale/browser/app-extension-fields.properties (%chrome/browser/app-extension-fields.properties) diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 832a09b..d785ca1 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=60.8.0 +VERSION=68.0.2 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat-mozconfig-common b/icecat-mozconfig-common index c5a3241..ceab223 100644 --- a/icecat-mozconfig-common +++ b/icecat-mozconfig-common @@ -9,13 +9,10 @@ mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir ac_add_options --prefix="$PREFIX" ac_add_options --libdir="$LIBDIR" -ac_add_options --with-pthreads ac_add_options --enable-necko-wifi ac_add_options --enable-startup-notification ac_add_options --disable-updater ac_add_options --enable-chrome-format=omni ac_add_options --enable-release -ac_add_options --enable-pie -ac_add_options --disable-stylo # Workaround for mozbz#1341234 ac_add_options BINDGEN_CFLAGS="$(pkg-config nspr pixman-1 --cflags)" diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc deleted file mode 100644 index c2c8f6f..0000000 --- a/icecat.rpmlintrc +++ /dev/null @@ -1,40 +0,0 @@ -# Whitelisting errors -# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist -# Edited by sagitter (sagitter AT fedoraproject dot org) - -# KNOWN BUGS: -# - -# TESTS: -##### SRPMs ##### - -# ifarch applied patches are okay -# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support -addFilter(r'(%ifarch-applied-patch) Patch*') - -# ERRORS: -##### RPMs ##### - -# chroot function (??) -addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') -addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') - -# Expected on FF browser -# https://support.mozilla.org/en-US/questions/1045418 -addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') -addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') - -# False positive -addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') -addFilter(r'(unversioned-explicit-provides) webclient') - -# WARNINGS: -##### RPMs ##### - -addFilter(r'(no-manual-page-for-binary) icecat-wayland') - -##### SRPMs ##### -# Different file size due to the signature of the source code tarbz archive -addFilter(r'file-size-mismatch') - -addFilter(r'(invalid-url) Source*') diff --git a/icecat.spec b/icecat.spec index 532c4dd..cd4bb55 100644 --- a/icecat.spec +++ b/icecat.spec @@ -24,28 +24,29 @@ %endif # Use system sqlite? +# sqlite > 3.28.0 unavailable on Fedora < 31 +%if 0%{?fedora} < 31 +%global system_sqlite 0 +%else %global system_sqlite 1 +%endif %if 0%{?system_sqlite} -%global sqlite_version 3.8.4.2 +%global sqlite_version 3.28.0 # The actual sqlite version (see #480989): %global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536) %endif # Use system libicu? -%global system_libicu 1 +%global system_libicu 1 # Use system nspr/nss? %global system_nss 1 %if 0%{?system_nss} -%global nspr_version 4.17.0 -# NSS/NSPR quite often ends in build override, so as requirement the version -# we're building against could bring us some broken dependencies from time to time. -#%%global nspr_build_version %%(pkg-config --silence-errors --modversion nspr 2>/dev/null || echo 65536) +%global nspr_version 4.19 %global nspr_build_version %{nspr_version} -%global nss_version 3.34 -#%%global nss_build_version %%(pkg-config --silence-errors --modversion nss 2>/dev/null || echo 65536) +%global nss_version 3.40.1 %global nss_build_version %{nss_version} %endif @@ -66,18 +67,24 @@ # Use mozilla hardening option? %global hardened_build 1 +# cbingen +%global use_bundled_cbindgen 1 + +# Use clang? +%global build_with_clang 0 + # Exclude ARM builds for rhbz #1658940 ExcludeArch: %{arm} # Set new source-code build version -%global gnu_ver gnu1 +%global gnu_ver gnu1 Name: icecat -Version: 60.8.0 -Release: 6.%{gnu_ver}%{?dist} +Version: 68.0.2 +Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser -## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included +# Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included License: (MPLv1.1 or GPLv2+ or LGPLv2+) and GPLv3+ and MIT and BSD and ISC and ASL 2.0 and MPLv2.0 URL: http://www.gnu.org/software/gnuzilla/ @@ -89,18 +96,18 @@ Source0: https://sagitter.fedorapeople.org/%{name}/v%{version}/%{name}-%{version Source2: %{name}.png Source3: %{name}-mozconfig-common -##Language files downloaded by source7 script +# Language files downloaded by source7 script %if 0%{?build_langpacks} Source4: %{name}-%{version}-langpacks.tar.gz %endif -##All license files -##Download from http://www.gnu.org/licenses -##Download from http://www.mozilla.org/MPL/1.1/index.txt -##Download from https://www.mozilla.org/MPL/2.0/index.txt +# All license files +# Download from http://www.gnu.org/licenses +# Download from http://www.mozilla.org/MPL/1.1/index.txt +# Download from https://www.mozilla.org/MPL/2.0/index.txt Source5: %{name}-COPYING-licensefiles.tar.gz -##manpage file +# manpage file Source6: %{name}.1 Source7: %{name}-lang_download.sh @@ -115,12 +122,17 @@ Source14: %{name}.desktop Source15: %{name}-x11.sh.in Source16: %{name}-x11.desktop +# cbingen +Source17: cbindgen-vendor.tar.xz + +Source18: node-stdout-nonblocking-wrapper + # Build patches # Fixes installation of those addons which don't have ID on IceCat ("Cannot find id for addon" error). Patch1: %{name}-fix_addon_installation.patch - Patch2: %{name}-libevent_linkflag.patch Patch3: mozilla-build-arm.patch +Patch4: build-rust-ppc64le.patch # Unrecognized file? Patch7: %{name}-fix_jar.patch @@ -142,23 +154,19 @@ Patch37: build-jit-atomic-always-lucky.patch # Fedora specific patches Patch219: rhbz-1173156.patch -Patch225: mozilla-1005640-accept-lang.patch #ARM run-time patch Patch226: rhbz-1354671.patch # Upstream patches -Patch406: mozilla-256180.patch -Patch413: mozilla-1353817.patch +#Patch413: mozilla-1353817.patch Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch -Patch416: mozilla-1424422.patch Patch417: bug1375074-save-restore-x28.patch -Patch418: mozilla-1436242.patch -Patch420: %{name}-disable-dbus-remote.patch -Patch421: %{name}-bz1445383.patch -Patch422: %{name}-60.6.1-mozilla-1533969.patch + # Fix crash on ppc64le (mozilla#1512162) Patch423: mozilla-1512162.patch +Patch424: mozilla-1566876-webrtc-ind.patch +Patch425: mozilla-1568569.patch # Wayland specific upstream patches Patch565: firefox-pipewire.patch @@ -168,6 +176,10 @@ BuildRequires: alsa-lib-devel BuildRequires: autoconf213 BuildRequires: bzip2-devel BuildRequires: cairo-devel +BuildRequires: cargo +%if !0%{?use_bundled_cbindgen} +BuildRequires: cbindgen +%endif BuildRequires: ccache BuildRequires: dbus-devel BuildRequires: dbus-glib-devel @@ -180,7 +192,7 @@ BuildRequires: freetype-devel BuildRequires: gdk-pixbuf2 BuildRequires: glib2-devel BuildRequires: pkgconfig(gtk+-2.0) -%if %{?toolkit_gtk3} +%if 0%{?toolkit_gtk3} BuildRequires: pkgconfig(gtk+-3.0) %endif BuildRequires: gstreamer1-devel @@ -203,20 +215,20 @@ BuildRequires: libXinerama-devel BuildRequires: libffi-devel BuildRequires: libnotify-devel BuildRequires: libpng-devel -%if %{?with_vpx} +%if 0%{?with_vpx} BuildRequires: libvpx-devel %endif BuildRequires: libzip-devel BuildRequires: mesa-libGL-devel -%if %{?system_nss} +BuildRequires: nodejs +BuildRequires: nasm >= 1.13 +BuildRequires: strace +%if 0%{?system_nss} BuildRequires: pkgconfig(nspr) >= %{nspr_version} BuildRequires: pkgconfig(nss) >= %{nss_version} BuildRequires: nss-static >= %{nss_version} %endif -# xlocale.h not provided by glibc-headers > 2.24 -# Set path of libcxx-devel -BuildRequires: libcxx-devel BuildRequires: openjpeg-devel BuildRequires: pango-devel BuildRequires: pipewire-devel @@ -237,10 +249,13 @@ BuildRequires: llvm BuildRequires: llvm-devel BuildRequires: clang BuildRequires: clang-libs +BuildRequires: clang-devel +%if 0%{?build_with_clang} +BuildRequires: lld +%endif BuildRequires: rust -BuildRequires: cargo -%if %{?system_sqlite} +%if 0%{?system_sqlite} BuildRequires: pkgconfig(sqlite3) >= %{sqlite_version} Requires: sqlite >= %{sqlite_build_version} %endif @@ -249,7 +264,7 @@ Requires: dconf Requires: mozilla-filesystem Requires: p11-kit-trust -%if %{?system_nss} +%if 0%{?system_nss} Requires: nspr >= %{nspr_build_version} Requires: nss >= %{nss_build_version} %endif @@ -303,13 +318,13 @@ to run GNU IceCat natively on Wayland. %endif %prep -%setup -q -n %{name}-%{version} +%autosetup -N -n %{name}-%{version} #Fix permissions -find . -type f -name "*.h" -exec chmod 0644 '{}' \; -find . -type f -name "*.cpp" -exec chmod 0644 '{}' \; -find . -type f -name "*.cc" -exec chmod 0644 '{}' \; -find . -type f -name "*.c" -exec chmod 0644 '{}' \; +#find . -type f -name "*.h" -exec chmod 0644 '{}' \; +#find . -type f -name "*.cpp" -exec chmod 0644 '{}' \; +#find . -type f -name "*.cc" -exec chmod 0644 '{}' \; +#find . -type f -name "*.c" -exec chmod 0644 '{}' \; ##Copy license files tar -xf %{SOURCE5} @@ -317,28 +332,24 @@ tar -xf %{SOURCE5} %patch1 -p1 -b .fix_addon_installation %patch2 -p0 -b .libevent_linkflag %patch3 -p1 -b .arm -%patch7 -p0 +%patch7 -p0 -b .fix_jar %patch8 -p0 -b .fix_installer %patch37 -p1 -b .jit-atomic-lucky # Fedora patches %patch219 -p1 -b .rhbz-1173156 -%patch225 -p1 -b .1005640-accept-lang #ARM run-time patch %ifarch aarch64 %patch226 -p1 -b .1354671 %endif -%patch406 -p0 -b .256180 -%patch413 -p1 -b .1353817 +#%%patch413 -p1 -b .1353817 %ifarch %{arm} %patch414 -p1 -b .Bug-1238661---fix-mozillaSignalTrampoline-to-work %endif -%patch416 -p1 -b .1424422 -%patch417 -p1 -b .bug1375074-save-restore-x28 -%patch418 -p1 -b .mozilla-1436242 +#%%patch417 -p1 -b .bug1375074-save-restore-x28 # Patch for big endian platforms only %if 0%{?big_endian} @@ -347,18 +358,14 @@ tar -xf %{SOURCE5} %patch29 -p1 -b .big-endian %endif -%patch420 -p1 -b .%{name}-disable-dbus-remote -%patch421 -p1 -b .%{name}-update-ccache-stats-parser +%ifarch ppc64 ppc64le +%patch423 -p1 -b .1512162 +%endif +%patch424 -p1 -b .mozilla-1566876-webrtc-ind +%patch425 -p1 -b .mozilla-1568569 -%if 0%{?fedora} > 30 -%patch422 -p1 -b .%{name}-%{version}-mozilla-1533969 -%endif -%if 0%{?fedora} > 29 -%patch423 -p1 -b .mozilla-1512162.patch -%endif # Wayland specific upstream patches -dos2unix %{PATCH565} %patch565 -p1 -b .firefox-pipewire ##Remove default configuration and copy the customized one @@ -397,7 +404,6 @@ echo "ac_add_options --with-system-icu" >> .mozconfig echo "ac_add_options --without-system-icu" >> .mozconfig %endif echo "ac_add_options --disable-system-cairo" >> .mozconfig -echo "ac_add_options --enable-system-hunspell" >> .mozconfig echo "ac_add_options --enable-system-pixman" >> .mozconfig %if 0%{?system_sqlite} echo "ac_add_options --enable-system-sqlite" >> .mozconfig @@ -471,21 +477,36 @@ echo "ac_add_options --disable-gtest-in-build" >> .mozconfig echo "ac_add_options --enable-hardening" >> .mozconfig %endif +%ifarch s390 s390x +echo "ac_add_options --disable-ion" >> .mozconfig +%endif + +echo 'export NODEJS="%{_buildrootdir}/bin/node-stdout-nonblocking-wrapper"' >> .mozconfig + # Remove executable bit to make brp-mangle-shebangs happy. chmod -x third_party/rust/itertools/src/lib.rs #--------------------------------------------------------------------- %build -%if 0%{?system_sqlite} -# Do not proceed with build if the sqlite require would be broken: -# make sure the minimum requirement is non-empty, ... -sqlite_version=$(expr "%{sqlite_version}" : '\([0-9]*\.\)[0-9]*\.') || exit 1 -# ... and that major number of the computed build-time version matches: -case "%{sqlite_build_version}" in - "$sqlite_version"*) ;; - *) exit 1 ;; -esac +# cbindgen +%if 0%{?use_bundled_cbindgen} + +mkdir -p my_rust_vendor +cd my_rust_vendor +%{__tar} xf %{SOURCE17} +cd - +mkdir -p .cargo +cat > .cargo/config <> .mozconfig +%else +export CC=gcc +export CXX=g++ +export AR="gcc-ar" +export NM="gcc-nm" +export RANLIB="gcc-ranlib" +%endif + MOZ_SMP_FLAGS=-j1 # On x86 architectures, Mozilla can build up to 4 jobs at once in parallel, # however builds tend to fail on other arches when building in parallel. @@ -749,6 +789,11 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Thu Aug 15 2019 Antonio Trande - 68.0.2-1.gnu1 +- Mozilla release 68.0.2 +- Import cbindgen stuff from Firefox package +- Do not use sqlite from system + * Sun Jul 28 2019 Antonio Trande - 60.8.0-6.gnu1 - Add patch to fix the addon installation diff --git a/mozilla-1005640-accept-lang.patch b/mozilla-1005640-accept-lang.patch deleted file mode 100644 index 29d3833..0000000 --- a/mozilla-1005640-accept-lang.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff -up firefox-51.0/toolkit/mozapps/extensions/internal/XPIProvider.jsm.1005640-accept-lang firefox-51.0/toolkit/mozapps/extensions/internal/XPIProvider.jsm ---- firefox-51.0/toolkit/mozapps/extensions/internal/XPIProvider.jsm.1005640-accept-lang 2017-01-16 17:16:52.000000000 +0100 -+++ firefox-51.0/toolkit/mozapps/extensions/internal/XPIProvider.jsm 2017-01-18 12:35:29.380394216 +0100 -@@ -2852,6 +2852,11 @@ this.XPIProvider = { - this.addAddonsToCrashReporter(); - } - -+ // Save locale settings to compare it later to check whenever some addon -+ // changed it. -+ var previousLocale = Cc["@mozilla.org/chrome/chrome-registry;1"] -+ .getService(Ci.nsIXULChromeRegistry).getSelectedLocale("global"); -+ - try { - AddonManagerPrivate.recordTimestamp("XPI_bootstrap_addons_begin"); - -@@ -2880,6 +2885,14 @@ this.XPIProvider = { - AddonManagerPrivate.recordException("XPI-BOOTSTRAP", "startup failed", e); - } - -+ var currentLocale = Cc["@mozilla.org/chrome/chrome-registry;1"] -+ .getService(Ci.nsIXULChromeRegistry).getSelectedLocale("global"); -+ if (currentLocale != previousLocale) { -+ // We have to flush string cache if the locale was changed during loading -+ // of addons -+ Services.obs.notifyObservers(null, "chrome-flush-caches", null); -+ } -+ - // Let these shutdown a little earlier when they still have access to most - // of XPCOM - Services.obs.addObserver({ diff --git a/mozilla-1353817.patch b/mozilla-1353817.patch deleted file mode 100644 index dc8d8f8..0000000 --- a/mozilla-1353817.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 1cc652f5525f458b0b4ceb12af24bf5a4367db32 Mon Sep 17 00:00:00 2001 -From: Nicolas Dufresne -Date: Tue, 23 May 2017 13:09:48 -0400 -Subject: [PATCH] Bug 1353817: Include SkNx_neon.h for ARM64 too - -This fixes build errors as arm_neon.h was missing along with some -missing converters. ---- - gfx/skia/skia/src/core/SkNx.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/gfx/skia/skia/src/core/SkNx.h b/gfx/skia/skia/src/core/SkNx.h -index 6bca856..b0427aa 100644 ---- a/gfx/skia/skia/src/core/SkNx.h -+++ b/gfx/skia/skia/src/core/SkNx.h -@@ -299,7 +299,7 @@ typedef SkNx<4, uint32_t> Sk4u; - // Include platform specific specializations if available. - #if !defined(SKNX_NO_SIMD) && SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 - #include "../opts/SkNx_sse.h" --#elif !defined(SKNX_NO_SIMD) && defined(SK_ARM_HAS_NEON) -+#elif !defined(SKNX_NO_SIMD) && (defined(SK_ARM_HAS_NEON) || defined(SK_CPU_ARM64)) - #include "../opts/SkNx_neon.h" - #else - --- -2.9.4 - diff --git a/mozilla-1424422.patch b/mozilla-1424422.patch deleted file mode 100644 index cc8b31f..0000000 --- a/mozilla-1424422.patch +++ /dev/null @@ -1,188 +0,0 @@ -diff -up firefox-60.0/browser/base/content/browser.js.1424422 firefox-60.0/browser/base/content/browser.js ---- firefox-60.0/browser/base/content/browser.js.1424422 2018-04-26 22:07:20.000000000 +0200 -+++ firefox-60.0/browser/base/content/browser.js 2018-04-30 11:49:51.609458857 +0200 -@@ -1259,6 +1259,9 @@ var gBrowserInit = { - - if (AppConstants.CAN_DRAW_IN_TITLEBAR) { - gDragSpaceObserver.init(); -+ if (AppConstants.platform == "linux") { -+ gLightThemeObserver.init(); -+ } - } - - BrowserSearch.initPlaceHolder(); -@@ -1826,6 +1829,9 @@ var gBrowserInit = { - - if (AppConstants.CAN_DRAW_IN_TITLEBAR) { - gDragSpaceObserver.uninit(); -+ if (AppConstants.platform == "linux") { -+ gLightThemeObserver.uninit(); -+ } - } - - TabsInTitlebar.uninit(); -@@ -5781,6 +5787,24 @@ var gDragSpaceObserver = { - }, - }; - -+var gLightThemeObserver = { -+ init() { -+ Services.obs.addObserver(this, "lightweight-theme-styling-update"); -+ }, -+ -+ uninit() { -+ Services.obs.removeObserver(this, "lightweight-theme-styling-update"); -+ }, -+ -+ observe(aSubject, aTopic, aData) { -+ switch (aTopic) { -+ case "lightweight-theme-styling-update": -+ TabsInTitlebar.updateAppearance(true); -+ break; -+ } -+ }, -+}; -+ - // Updates the UI density (for touch and compact mode) based on the uidensity pref. - var gUIDensity = { - MODE_NORMAL: 0, -diff -up firefox-60.0/browser/themes/linux/browser.css.1424422 firefox-60.0/browser/themes/linux/browser.css ---- firefox-60.0/browser/themes/linux/browser.css.1424422 2018-04-26 22:07:21.000000000 +0200 -+++ firefox-60.0/browser/themes/linux/browser.css 2018-04-30 11:45:40.388172492 +0200 -@@ -691,12 +691,34 @@ notification[value="translation"] menuli - padding-bottom: 2px; - } - -+ /* When default theme is used render titlebar command buttons -+ * according to system config. -+ * -+ * When -moz-lwtheme is enabled use similar approach as on Windows platform. -+ */ -+ .titlebar-button:-moz-lwtheme { -+ border: none; -+ margin: 0 !important; -+ padding: 8px 17px; -+ } -+ .titlebar-button:-moz-lwtheme > .toolbarbutton-icon { -+ width: 12px; -+ height: 12px; -+ } -+ .titlebar-button:hover:-moz-lwtheme { -+ background-color: Highlight; -+ } -+ - /* Render titlebar command buttons according to system config. - * Use full scale icons here as the Gtk+ does. - */ - @media (-moz-gtk-csd-minimize-button) { -- #titlebar-min { -- -moz-appearance: -moz-window-button-minimize; -+ #titlebar-min:not(:-moz-lwtheme) { -+ -moz-appearance: -moz-window-button-minimize; -+ } -+ #titlebar-min:-moz-lwtheme { -+ -moz-appearance: none !important; -+ list-style-image: url(chrome://browser/skin/window-controls/minimize-themes.svg); - } - } - @media (-moz-gtk-csd-minimize-button: 0) { -@@ -706,12 +728,20 @@ notification[value="translation"] menuli - } - - @media (-moz-gtk-csd-maximize-button) { -- #titlebar-max { -+ #titlebar-max:not(:-moz-lwtheme) { - -moz-appearance: -moz-window-button-maximize; - } -- :root[sizemode="maximized"] #titlebar-max { -+ #titlebar-max:-moz-lwtheme { -+ -moz-appearance: none !important; -+ list-style-image: url(chrome://browser/skin/window-controls/maximize-themes.svg); -+ } -+ :root[sizemode="maximized"] #titlebar-max:not(:-moz-lwtheme) { - -moz-appearance: -moz-window-button-restore; - } -+ :root[sizemode="maximized"] #titlebar-max:-moz-lwtheme { -+ -moz-appearance: none !important; -+ list-style-image: url(chrome://browser/skin/window-controls/restore-themes.svg); -+ } - } - @media (-moz-gtk-csd-maximize-button: 0) { - #titlebar-max { -@@ -720,9 +750,13 @@ notification[value="translation"] menuli - } - - @media (-moz-gtk-csd-close-button) { -- #titlebar-close { -+ #titlebar-close:not(:-moz-lwtheme) { - -moz-appearance: -moz-window-button-close; - } -+ #titlebar-close:-moz-lwtheme { -+ -moz-appearance: none !important; -+ list-style-image: url(chrome://browser/skin/window-controls/close-themes.svg); -+ } - } - @media (-moz-gtk-csd-close-button: 0) { - #titlebar-close { -diff -up firefox-60.0/browser/themes/linux/jar.mn.1424422 firefox-60.0/browser/themes/linux/jar.mn ---- firefox-60.0/browser/themes/linux/jar.mn.1424422 2018-04-26 22:07:20.000000000 +0200 -+++ firefox-60.0/browser/themes/linux/jar.mn 2018-04-30 11:45:40.388172492 +0200 -@@ -49,9 +49,12 @@ browser.jar: - * skin/classic/browser/preferences/in-content/dialog.css (preferences/in-content/dialog.css) - skin/classic/browser/preferences/applications.css (preferences/applications.css) - skin/classic/browser/tabbrowser/tabDragIndicator.png (tabbrowser/tabDragIndicator.png) -- - skin/classic/browser/sync-desktopIcon.svg (../shared/sync-desktopIcon.svg) - skin/classic/browser/sync-mobileIcon.svg (../shared/sync-mobileIcon.svg) -+ skin/classic/browser/window-controls/close-themes.svg (window-controls/close-themes.svg) -+ skin/classic/browser/window-controls/maximize-themes.svg (window-controls/maximize-themes.svg) -+ skin/classic/browser/window-controls/minimize-themes.svg (window-controls/minimize-themes.svg) -+ skin/classic/browser/window-controls/restore-themes.svg (window-controls/restore-themes.svg) - skin/classic/browser/e10s-64@2x.png (../shared/e10s-64@2x.png) - - [extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar: -diff -up firefox-60.0/browser/themes/linux/window-controls/close-themes.svg.1424422 firefox-60.0/browser/themes/linux/window-controls/close-themes.svg ---- firefox-60.0/browser/themes/linux/window-controls/close-themes.svg.1424422 2018-04-30 11:45:40.388172492 +0200 -+++ firefox-60.0/browser/themes/linux/window-controls/close-themes.svg 2018-04-30 11:45:40.388172492 +0200 -@@ -0,0 +1,7 @@ -+ -+ -+ -+ -+ -diff -up firefox-60.0/browser/themes/linux/window-controls/maximize-themes.svg.1424422 firefox-60.0/browser/themes/linux/window-controls/maximize-themes.svg ---- firefox-60.0/browser/themes/linux/window-controls/maximize-themes.svg.1424422 2018-04-30 11:45:40.388172492 +0200 -+++ firefox-60.0/browser/themes/linux/window-controls/maximize-themes.svg 2018-04-30 11:45:40.388172492 +0200 -@@ -0,0 +1,7 @@ -+ -+ -+ -+ -+ -diff -up firefox-60.0/browser/themes/linux/window-controls/minimize-themes.svg.1424422 firefox-60.0/browser/themes/linux/window-controls/minimize-themes.svg ---- firefox-60.0/browser/themes/linux/window-controls/minimize-themes.svg.1424422 2018-04-30 11:45:40.388172492 +0200 -+++ firefox-60.0/browser/themes/linux/window-controls/minimize-themes.svg 2018-04-30 11:45:40.388172492 +0200 -@@ -0,0 +1,7 @@ -+ -+ -+ -+ -+ -diff -up firefox-60.0/browser/themes/linux/window-controls/restore-themes.svg.1424422 firefox-60.0/browser/themes/linux/window-controls/restore-themes.svg ---- firefox-60.0/browser/themes/linux/window-controls/restore-themes.svg.1424422 2018-04-30 11:45:40.388172492 +0200 -+++ firefox-60.0/browser/themes/linux/window-controls/restore-themes.svg 2018-04-30 11:45:40.388172492 +0200 -@@ -0,0 +1,8 @@ -+ -+ -+ -+ -+ -+ diff --git a/mozilla-1436242.patch b/mozilla-1436242.patch deleted file mode 100644 index 570b7c5..0000000 --- a/mozilla-1436242.patch +++ /dev/null @@ -1,56 +0,0 @@ - -# HG changeset patch -# User Jed Davis -# Date 1526943705 21600 -# Node ID 6bb3adfa15c6877f7874429462dad88f8c978c4f -# Parent 4c71c8454879c841871ecf3afb7dbdc96bad97fc -Bug 1436242 - Avoid undefined behavior in IPC fd-passing code. r=froydnj - -MozReview-Commit-ID: 3szIPUssgF5 - -diff --git a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc ---- a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc -+++ b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc -@@ -418,20 +418,37 @@ bool Channel::ChannelImpl::ProcessIncomi - const int* fds; - unsigned num_fds; - unsigned fds_i = 0; // the index of the first unused descriptor - - if (input_overflow_fds_.empty()) { - fds = wire_fds; - num_fds = num_wire_fds; - } else { -- const size_t prev_size = input_overflow_fds_.size(); -- input_overflow_fds_.resize(prev_size + num_wire_fds); -- memcpy(&input_overflow_fds_[prev_size], wire_fds, -- num_wire_fds * sizeof(int)); -+ // This code may look like a no-op in the case where -+ // num_wire_fds == 0, but in fact: -+ // -+ // 1. wire_fds will be nullptr, so passing it to memcpy is -+ // undefined behavior according to the C standard, even though -+ // the memcpy length is 0. -+ // -+ // 2. prev_size will be an out-of-bounds index for -+ // input_overflow_fds_; this is undefined behavior according to -+ // the C++ standard, even though the element only has its -+ // pointer taken and isn't accessed (and the corresponding -+ // operation on a C array would be defined). -+ // -+ // UBSan makes #1 a fatal error, and assertions in libstdc++ do -+ // the same for #2 if enabled. -+ if (num_wire_fds > 0) { -+ const size_t prev_size = input_overflow_fds_.size(); -+ input_overflow_fds_.resize(prev_size + num_wire_fds); -+ memcpy(&input_overflow_fds_[prev_size], wire_fds, -+ num_wire_fds * sizeof(int)); -+ } - fds = &input_overflow_fds_[0]; - num_fds = input_overflow_fds_.size(); - } - - // The data for the message we're currently reading consists of any data - // stored in incoming_message_ followed by data in input_buf_ (followed by - // other messages). - - diff --git a/mozilla-1512162.patch b/mozilla-1512162.patch index a324372..99a0b14 100644 --- a/mozilla-1512162.patch +++ b/mozilla-1512162.patch @@ -1,8 +1,26 @@ -diff --git a/js/xpconnect/src/XPCWrappedNative.cpp b/js/xpconnect/src/XPCWrappedNative.cpp ---- a/js/xpconnect/src/XPCWrappedNative.cpp -+++ b/js/xpconnect/src/XPCWrappedNative.cpp -@@ -1145,6 +1145,10 @@ - return CallMethodHelper(ccx).Call(); +diff -up firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp.1512162 firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp +--- firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp.1512162 2019-07-17 22:51:30.000000000 +0200 ++++ firefox-68.0.1/js/xpconnect/src/XPCWrappedNative.cpp 2019-07-25 08:08:18.512528313 +0200 +@@ -1092,7 +1092,7 @@ class MOZ_STACK_CLASS CallMethodHelper f + MOZ_ALWAYS_INLINE bool GetOutParamSource(uint8_t paramIndex, + MutableHandleValue srcp) const; + +- MOZ_ALWAYS_INLINE bool GatherAndConvertResults(); ++ bool GatherAndConvertResults(); + + MOZ_ALWAYS_INLINE bool QueryInterfaceFastPath(); + +@@ -1139,7 +1139,7 @@ class MOZ_STACK_CLASS CallMethodHelper f + + ~CallMethodHelper(); + +- MOZ_ALWAYS_INLINE bool Call(); ++ bool Call(); + + // Trace implementation so we can put our CallMethodHelper in a Rooted. + void trace(JSTracer* aTrc); +@@ -1157,6 +1157,10 @@ bool XPCWrappedNative::CallMethod(XPCCal + return helper.get().Call(); } +#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN) @@ -12,7 +30,7 @@ diff --git a/js/xpconnect/src/XPCWrappedNative.cpp b/js/xpconnect/src/XPCWrapped bool CallMethodHelper::Call() { mCallContext.SetRetVal(JS::UndefinedValue()); -@@ -1318,6 +1322,10 @@ +@@ -1315,6 +1319,10 @@ bool CallMethodHelper::GetOutParamSource return true; } diff --git a/mozilla-1566876-webrtc-ind.patch b/mozilla-1566876-webrtc-ind.patch new file mode 100644 index 0000000..598f58f --- /dev/null +++ b/mozilla-1566876-webrtc-ind.patch @@ -0,0 +1,36 @@ +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -3504,12 +3504,6 @@ + mBounds = aRect; + ConstrainSize(&mBounds.width, &mBounds.height); + +- // eWindowType_child is not supported on Wayland. Just switch to toplevel +- // as a workaround. +- if (!mIsX11Display && mWindowType == eWindowType_child) { +- mWindowType = eWindowType_toplevel; +- } +- + // figure out our parent window + GtkWidget* parentMozContainer = nullptr; + GtkContainer* parentGtkContainer = nullptr; +@@ -3543,6 +3537,18 @@ + topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer)); + } + ++ if (!mIsX11Display) { ++ if (mWindowType == eWindowType_child) { ++ // eWindowType_child is not supported on Wayland. Just switch to toplevel ++ // as a workaround. ++ mWindowType = eWindowType_toplevel; ++ } else if (mWindowType == eWindowType_popup && !topLevelParent) { ++ // Workaround for Wayland where the popup windows always need to have ++ // parent window. For example webrtc ui is a popup window without parent. ++ mWindowType = eWindowType_toplevel; ++ } ++ } ++ + // ok, create our windows + switch (mWindowType) { + case eWindowType_dialog: + diff --git a/mozilla-1568569.patch b/mozilla-1568569.patch new file mode 100644 index 0000000..ab6225a --- /dev/null +++ b/mozilla-1568569.patch @@ -0,0 +1,73 @@ +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -3238,16 +3238,18 @@ void nsWindow::OnWindowStateEvent(GtkWid + // We don't care about anything but changes in the maximized/icon/fullscreen + // states + if ((aEvent->changed_mask & + (GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_MAXIMIZED | + GDK_WINDOW_STATE_FULLSCREEN)) == 0) { + return; + } + ++ nsSizeMode lastSizeState = mSizeState; ++ + if (aEvent->new_window_state & GDK_WINDOW_STATE_ICONIFIED) { + LOG(("\tIconified\n")); + mSizeState = nsSizeMode_Minimized; + #ifdef ACCESSIBILITY + DispatchMinimizeEventAccessible(); + #endif // ACCESSIBILITY + } else if (aEvent->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) { + LOG(("\tFullscreen\n")); +@@ -3261,16 +3263,28 @@ void nsWindow::OnWindowStateEvent(GtkWid + } else { + LOG(("\tNormal\n")); + mSizeState = nsSizeMode_Normal; + #ifdef ACCESSIBILITY + DispatchRestoreEventAccessible(); + #endif // ACCESSIBILITY + } + ++ // Fullscreen video playback may generate bogus alpha values which blends ++ // with desktop background in fullscreen video playback (Bug 1568569). ++ // As a workaround enable to draw mShell background in fullscreen mode ++ // if we draw to mContainer. ++ if (gtk_widget_get_has_window(GTK_WIDGET(mContainer))) { ++ if (mSizeState == nsSizeMode_Fullscreen) { ++ gtk_widget_set_app_paintable(mShell, FALSE); ++ } else if (lastSizeState == nsSizeMode_Fullscreen) { ++ gtk_widget_set_app_paintable(mShell, TRUE); ++ } ++ } ++ + if (mWidgetListener) { + mWidgetListener->SizeModeChanged(mSizeState); + if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) { + mWidgetListener->FullscreenChanged(aEvent->new_window_state & + GDK_WINDOW_STATE_FULLSCREEN); + } + } + +@@ -3787,16 +3801,21 @@ nsresult nsWindow::Create(nsIWidget* aPa + eventWidget = (drawToContainer) ? container : mShell; + + // Prevent GtkWindow from painting a background to avoid flickering. + gtk_widget_set_app_paintable(eventWidget, TRUE); + + gtk_widget_add_events(eventWidget, kEvents); + if (drawToContainer) { + gtk_widget_add_events(mShell, GDK_PROPERTY_CHANGE_MASK); ++ // Don't paint mShell background when we draw to mContainer. ++ // Otherwise we see mShell backround to shine through ++ // mContainer (Bug 1507608). ++ // But it may also lead to various bugs where mContainer has unintended ++ // transparent parts which blend with underlying desktop (Bug 1516224). + gtk_widget_set_app_paintable(mShell, TRUE); + } + if (mTransparencyBitmapForTitlebar) { + moz_container_force_default_visual(mContainer); + } + + // If we draw to mContainer window then configure it now because + // gtk_container_add() realizes the child widget. diff --git a/mozilla-256180.patch b/mozilla-256180.patch deleted file mode 100644 index a6b3320..0000000 --- a/mozilla-256180.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- layout/generic/nsIFrame.h.old 2016-07-11 13:41:39.688276559 +0200 -+++ layout/generic/nsIFrame.h 2016-07-11 13:42:12.791406976 +0200 -@@ -13,7 +13,7 @@ - #error This header/class should only be used within GNU code. It should not be used by extensions. - #endif - --#define MAX_REFLOW_DEPTH 200 -+#define MAX_REFLOW_DEPTH 1000 - - /* nsIFrame is in the process of being deCOMtaminated, i.e., this file is - eventually going to be eliminated, and all callers will use nsFrame instead. diff --git a/node-stdout-nonblocking-wrapper b/node-stdout-nonblocking-wrapper new file mode 100755 index 0000000..b2814b8 --- /dev/null +++ b/node-stdout-nonblocking-wrapper @@ -0,0 +1,2 @@ +#!/bin/sh +exec /usr/bin/node "$@" 2>&1 | cat - diff --git a/rhbz-1354671.patch b/rhbz-1354671.patch index f45f7e9..1f867eb 100644 --- a/rhbz-1354671.patch +++ b/rhbz-1354671.patch @@ -1,7 +1,7 @@ -diff -up firefox-53.0/layout/base/nsIPresShell.h.1354671 firefox-53.0/layout/base/nsIPresShell.h ---- firefox-53.0/layout/base/nsIPresShell.h.1354671 2017-04-27 13:07:43.808653320 +0200 -+++ firefox-53.0/layout/base/nsIPresShell.h 2017-04-27 13:09:40.404427641 +0200 -@@ -204,7 +204,7 @@ +diff -up firefox-65.0/layout/base/PresShell.h.1354671 firefox-65.0/layout/base/PresShell.h +--- firefox-65.0/layout/base/PresShell.h.1354671 2019-01-29 11:50:08.516649643 +0100 ++++ firefox-65.0/layout/base/PresShell.h 2019-01-29 11:51:48.930258629 +0100 +@@ -205,7 +205,7 @@ class nsIPresShell : public nsStubDocume * to the same aSize value. AllocateFrame is infallible and will abort * on out-of-memory. */ diff --git a/sources b/sources index e5e5f07..94b72d4 100644 --- a/sources +++ b/sources @@ -1,3 +1,4 @@ -SHA512 (icecat-60.8.0-gnu1.tar.bz2) = 31900c921102ccaa736b8be20210d16b7bae9c797d2529e9f38e803d834c72bacfe6e586934e21c48ca7097cc0bbc56adccc6beefc5f42b1e7ee4a3d93e9f223 -SHA512 (icecat-60.8.0-langpacks.tar.gz) = 82f63a5c0e7b4af8ed616d94f99274c4a54fa092147bcce3eb4f77026b562a8109cc289fec18abdf0e350484a8645eb32f173fbbe3e20cb12f8fb79cea52554b +SHA512 (cbindgen-vendor.tar.xz) = b0df3a8624efc488726211c99ac8a69c928d0bef24c2f7eafc6971be7ce2fafd54fba9330afd7e61ffe3a0d799bc5d994fa9f11f2da88cd93924c9347bfc4355 +SHA512 (icecat-68.0.2-gnu1.tar.bz2) = d19750166d1f68c6a4c6de6a73515954c17c325dff92352b77fa73f535cfcb9452502d62f74d5f9deee172b71aa81617d691600dd56a24cc4b35e4acc30a7946 +SHA512 (icecat-68.0.2-langpacks.tar.gz) = 4361c78b48ef0a9792d0fdba03c2ea7c4f880ba083d62e5ca83c9f65ec4cc3917b4020ebe16bb1a07faa780633c8e25aa7369f289ff54c0472158f993e703f1f SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 86ee812901a4aa7cd80fd7fe1accba429465cf27 Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 16 Aug 2019 22:45:35 +0200 Subject: [PATCH 043/473] Conditional arch macro for --disable-eme option --- icecat.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/icecat.spec b/icecat.spec index cd4bb55..84cbf70 100644 --- a/icecat.spec +++ b/icecat.spec @@ -422,7 +422,9 @@ echo "ac_add_options --without-system-libvpx" >> .mozconfig echo "ac_add_options --disable-libjpeg-turbo" >> .mozconfig echo "ac_add_options --with-system-jpeg" >> .mozconfig echo "ac_add_options --disable-crashreporter" >> .mozconfig +%ifnarch %{power64} aarch64 echo "ac_add_options --disable-eme" >> .mozconfig +%endif # This option works on these architectures only %ifarch %{ix86} x86_64 %{arm} From b52d6c52285496e8a98290bff848b338b1cd5f3e Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 16 Aug 2019 23:01:41 +0200 Subject: [PATCH 044/473] Disable s390x builds --- icecat.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/icecat.spec b/icecat.spec index 84cbf70..1ff75e3 100644 --- a/icecat.spec +++ b/icecat.spec @@ -75,6 +75,8 @@ # Exclude ARM builds for rhbz #1658940 ExcludeArch: %{arm} +# Disabled due to https://pagure.io/fedora-infrastructure/issue/7581 +ExcludeArch: s390x # Set new source-code build version %global gnu_ver gnu1 From 017c32fd9f6786fdd0b48c678beb66935866a563 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 17 Aug 2019 12:26:06 +0200 Subject: [PATCH 045/473] Add --with-system-nspr option explicitely --- icecat.spec | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/icecat.spec b/icecat.spec index 1ff75e3..d6b3804 100644 --- a/icecat.spec +++ b/icecat.spec @@ -398,7 +398,11 @@ echo "ac_add_options --disable-jemalloc" >> .mozconfig %if 0%{?system_nss} echo "ac_add_options --with-nspr-cflags='%(%{_bindir}/nspr-config --cflags)'" >> .mozconfig echo "ac_add_options --with-nspr-libs='%(%{_bindir}/nspr-config --libs)'" >> .mozconfig +echo "ac_add_options --with-system-nspr" >> .mozconfig echo "ac_add_options --with-system-nss" >>.mozconfig +%else +echo "ac_add_options --without-system-nspr" >> .mozconfig +echo "ac_add_options --without-system-nss" >>.mozconfig %endif %if 0%{?system_libicu} echo "ac_add_options --with-system-icu" >> .mozconfig From 6e889e0b5fc7e03230604d4fcfb5cea8f076a9f8 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 17 Aug 2019 12:51:12 +0200 Subject: [PATCH 046/473] Remove NSPR flags specifications --- icecat.spec | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/icecat.spec b/icecat.spec index d6b3804..c71a0de 100644 --- a/icecat.spec +++ b/icecat.spec @@ -396,13 +396,11 @@ echo "ac_add_options --disable-jemalloc" >> .mozconfig %endif %if 0%{?system_nss} -echo "ac_add_options --with-nspr-cflags='%(%{_bindir}/nspr-config --cflags)'" >> .mozconfig -echo "ac_add_options --with-nspr-libs='%(%{_bindir}/nspr-config --libs)'" >> .mozconfig echo "ac_add_options --with-system-nspr" >> .mozconfig -echo "ac_add_options --with-system-nss" >>.mozconfig +echo "ac_add_options --with-system-nss" >> .mozconfig %else echo "ac_add_options --without-system-nspr" >> .mozconfig -echo "ac_add_options --without-system-nss" >>.mozconfig +echo "ac_add_options --without-system-nss" >> .mozconfig %endif %if 0%{?system_libicu} echo "ac_add_options --with-system-icu" >> .mozconfig From 8ef0a9f8e136b0a909978034deb06b507dfe35e2 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 17 Aug 2019 14:24:44 +0200 Subject: [PATCH 047/473] Exclude build-jit-atomic-always-lucky patch --- icecat.spec | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/icecat.spec b/icecat.spec index c71a0de..57f3976 100644 --- a/icecat.spec +++ b/icecat.spec @@ -135,6 +135,7 @@ Patch1: %{name}-fix_addon_installation.patch Patch2: %{name}-libevent_linkflag.patch Patch3: mozilla-build-arm.patch Patch4: build-rust-ppc64le.patch +Patch5: rhbz-1219542-s390-build.patch # Unrecognized file? Patch7: %{name}-fix_jar.patch @@ -323,10 +324,10 @@ to run GNU IceCat natively on Wayland. %autosetup -N -n %{name}-%{version} #Fix permissions -#find . -type f -name "*.h" -exec chmod 0644 '{}' \; -#find . -type f -name "*.cpp" -exec chmod 0644 '{}' \; -#find . -type f -name "*.cc" -exec chmod 0644 '{}' \; -#find . -type f -name "*.c" -exec chmod 0644 '{}' \; +find . -type f -name "*.h" -exec chmod 0644 '{}' \; +find . -type f -name "*.cpp" -exec chmod 0644 '{}' \; +find . -type f -name "*.cc" -exec chmod 0644 '{}' \; +find . -type f -name "*.c" -exec chmod 0644 '{}' \; ##Copy license files tar -xf %{SOURCE5} @@ -334,10 +335,13 @@ tar -xf %{SOURCE5} %patch1 -p1 -b .fix_addon_installation %patch2 -p0 -b .libevent_linkflag %patch3 -p1 -b .arm +%ifarch s390 +%patch5 -p1 -b .rhbz-1219542-s390 +%endif %patch7 -p0 -b .fix_jar %patch8 -p0 -b .fix_installer -%patch37 -p1 -b .jit-atomic-lucky +#%%patch37 -p1 -b .jit-atomic-lucky # Fedora patches %patch219 -p1 -b .rhbz-1173156 From 77430088e3ffee7aef18f78e034f8678a122125c Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 17 Aug 2019 15:06:10 +0200 Subject: [PATCH 048/473] Push rhbz-1219542-s390-build patch --- icecat.spec | 34 +++++++++++++++++----------------- rhbz-1219542-s390-build.patch | 23 +++++++++++++++++++++++ 2 files changed, 40 insertions(+), 17 deletions(-) create mode 100644 rhbz-1219542-s390-build.patch diff --git a/icecat.spec b/icecat.spec index 57f3976..dce78c7 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,34 +1,34 @@ ##Active/Deactive language files handling %global build_langpacks 1 -%define default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html +%global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html ##Define installation directories -%global icecatappdir %{_libdir}/%{name} -%global icecat_ver %{name}-%{version} -%global icecat_devel %{name}-devel-%{version} +%global icecatappdir %{_libdir}/%{name} +%global icecat_ver %{name}-%{version} +%global icecat_devel %{name}-devel-%{version} ##Define language files directory -%global langpackdir %{icecatappdir}/langpacks +%global langpackdir %{icecatappdir}/langpacks -%global toolkit_gtk3 1 +%global toolkit_gtk3 1 # Builds for debugging -%global debug_build 0 +%global debug_build 0 # Big endian platforms %ifarch ppc64 s390x # Javascript Intl API is not supported on big endian platforms right now: # https://bugzilla.mozilla.org/show_bug.cgi?id=1322212 -%global big_endian 1 +%global big_endian 1 %endif # Use system sqlite? # sqlite > 3.28.0 unavailable on Fedora < 31 %if 0%{?fedora} < 31 -%global system_sqlite 0 +%global system_sqlite 0 %else -%global system_sqlite 1 +%global system_sqlite 1 %endif %if 0%{?system_sqlite} @@ -38,10 +38,10 @@ %endif # Use system libicu? -%global system_libicu 1 +%global system_libicu 1 # Use system nspr/nss? -%global system_nss 1 +%global system_nss 1 %if 0%{?system_nss} %global nspr_version 4.19 @@ -65,10 +65,10 @@ %endif # Use mozilla hardening option? -%global hardened_build 1 +%global hardened_build 1 # cbingen -%global use_bundled_cbindgen 1 +%global use_bundled_cbindgen 1 # Use clang? %global build_with_clang 0 @@ -81,14 +81,14 @@ ExcludeArch: s390x # Set new source-code build version %global gnu_ver gnu1 -Name: icecat +Name: icecat Version: 68.0.2 Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included License: (MPLv1.1 or GPLv2+ or LGPLv2+) and GPLv3+ and MIT and BSD and ISC and ASL 2.0 and MPLv2.0 -URL: http://www.gnu.org/software/gnuzilla/ +URL: http://www.gnu.org/software/gnuzilla/ ## Source archive created by scripts based on Gnuzilla files. ## Modified files are hosted in a dedicated fork repository: @@ -135,7 +135,7 @@ Patch1: %{name}-fix_addon_installation.patch Patch2: %{name}-libevent_linkflag.patch Patch3: mozilla-build-arm.patch Patch4: build-rust-ppc64le.patch -Patch5: rhbz-1219542-s390-build.patch +Patch5: rhbz-1219542-s390-build.patch # Unrecognized file? Patch7: %{name}-fix_jar.patch diff --git a/rhbz-1219542-s390-build.patch b/rhbz-1219542-s390-build.patch new file mode 100644 index 0000000..f94e43a --- /dev/null +++ b/rhbz-1219542-s390-build.patch @@ -0,0 +1,23 @@ +diff -up firefox-55.0/js/src/old-configure.in.rhbz-1219542-s390 firefox-55.0/js/src/old-configure.in +--- firefox-55.0/js/src/old-configure.in.rhbz-1219542-s390 2017-07-31 18:20:48.000000000 +0200 ++++ firefox-55.0/js/src/old-configure.in 2017-08-02 14:31:32.190243669 +0200 +@@ -541,7 +541,7 @@ case "$host" in + + *-linux*|*-kfreebsd*-gnu|*-gnu*) + HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX" +- HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}" ++ HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O1}" + ;; + + *) +@@ -617,8 +617,8 @@ case "$target" in + + *-*linux*) + if test "$GNU_CC" -o "$GNU_CXX"; then +- MOZ_PGO_OPTIMIZE_FLAGS="-O3" +- MOZ_OPTIMIZE_FLAGS="-O3" ++ MOZ_PGO_OPTIMIZE_FLAGS="-O1" ++ MOZ_OPTIMIZE_FLAGS="-O1" + if test -z "$CLANG_CC"; then + MOZ_OPTIMIZE_FLAGS="-freorder-blocks $MOZ_OPTIMIZE_FLAGS" + fi From 9c9a59feb457e08ba84a99d0d599c52897b6b3b3 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 17 Aug 2019 18:52:27 +0200 Subject: [PATCH 049/473] Some superfluous changes --- icecat.spec | 180 ++++++++++++++++++++++++++-------------------------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/icecat.spec b/icecat.spec index dce78c7..6a2c207 100644 --- a/icecat.spec +++ b/icecat.spec @@ -131,29 +131,29 @@ Source18: node-stdout-nonblocking-wrapper # Build patches # Fixes installation of those addons which don't have ID on IceCat ("Cannot find id for addon" error). -Patch1: %{name}-fix_addon_installation.patch -Patch2: %{name}-libevent_linkflag.patch -Patch3: mozilla-build-arm.patch -Patch4: build-rust-ppc64le.patch -Patch5: rhbz-1219542-s390-build.patch +Patch1: %{name}-fix_addon_installation.patch +Patch2: %{name}-libevent_linkflag.patch +Patch3: mozilla-build-arm.patch +Patch4: build-rust-ppc64le.patch +Patch5: rhbz-1219542-s390-build.patch # Unrecognized file? -Patch7: %{name}-fix_jar.patch +Patch7: %{name}-fix_jar.patch # Fix files list for installer -Patch8: %{name}-fix_installer.patch +Patch8: %{name}-fix_installer.patch # xlocale.h not provided by glibc-headers # Set path of libcxx-devel -Patch9: %{name}-locale.patch +Patch9: %{name}-locale.patch -Patch26: build-icu-big-endian.patch +Patch26: build-icu-big-endian.patch # Also fixes s390x: https://bugzilla.mozilla.org/show_bug.cgi?id=1376268 -Patch29: build-big-endian.patch +Patch29: build-big-endian.patch # Always feel lucky for unsupported platforms: # https://bugzilla.mozilla.org/show_bug.cgi?id=1347128 -Patch37: build-jit-atomic-always-lucky.patch +Patch37: build-jit-atomic-always-lucky.patch # Fedora specific patches Patch219: rhbz-1173156.patch @@ -175,107 +175,107 @@ Patch425: mozilla-1568569.patch Patch565: firefox-pipewire.patch # -BuildRequires: alsa-lib-devel -BuildRequires: autoconf213 -BuildRequires: bzip2-devel -BuildRequires: cairo-devel -BuildRequires: cargo +BuildRequires: alsa-lib-devel +BuildRequires: autoconf213 +BuildRequires: bzip2-devel +BuildRequires: cairo-devel +BuildRequires: cargo %if !0%{?use_bundled_cbindgen} -BuildRequires: cbindgen +BuildRequires: cbindgen %endif -BuildRequires: ccache -BuildRequires: dbus-devel -BuildRequires: dbus-glib-devel -BuildRequires: dconf -BuildRequires: desktop-file-utils -BuildRequires: dos2unix -BuildRequires: gcc, gcc-c++ -BuildRequires: fedora-bookmarks -BuildRequires: freetype-devel -BuildRequires: gdk-pixbuf2 -BuildRequires: glib2-devel -BuildRequires: pkgconfig(gtk+-2.0) +BuildRequires: ccache +BuildRequires: dbus-devel +BuildRequires: dbus-glib-devel +BuildRequires: dconf +BuildRequires: desktop-file-utils +BuildRequires: dos2unix +BuildRequires: gcc, gcc-c++ +BuildRequires: fedora-bookmarks +BuildRequires: freetype-devel +BuildRequires: gdk-pixbuf2 +BuildRequires: glib2-devel +BuildRequires: pkgconfig(gtk+-2.0) %if 0%{?toolkit_gtk3} -BuildRequires: pkgconfig(gtk+-3.0) +BuildRequires: pkgconfig(gtk+-3.0) %endif -BuildRequires: gstreamer1-devel -BuildRequires: gstreamer1-plugins-base-devel -BuildRequires: hunspell-devel -BuildRequires: ImageMagick, autotrace -BuildRequires: java-1.8.0-openjdk-headless -BuildRequires: intltool -BuildRequires: libappstream-glib -BuildRequires: libevent-devel -BuildRequires: libicu-devel -BuildRequires: libIDL-devel -BuildRequires: libjpeg-turbo-devel -BuildRequires: libjpeg-devel -BuildRequires: libX11-devel -BuildRequires: libXt-devel -BuildRequires: libXrender-devel -BuildRequires: libyuv-devel -BuildRequires: libXinerama-devel -BuildRequires: libffi-devel -BuildRequires: libnotify-devel -BuildRequires: libpng-devel +BuildRequires: gstreamer1-devel +BuildRequires: gstreamer1-plugins-base-devel +BuildRequires: hunspell-devel +BuildRequires: ImageMagick, autotrace +BuildRequires: java-1.8.0-openjdk-headless +BuildRequires: intltool +BuildRequires: libappstream-glib +BuildRequires: libevent-devel +BuildRequires: libicu-devel +BuildRequires: libIDL-devel +BuildRequires: libjpeg-turbo-devel +BuildRequires: libjpeg-devel +BuildRequires: libX11-devel +BuildRequires: libXt-devel +BuildRequires: libXrender-devel +BuildRequires: libyuv-devel +BuildRequires: libXinerama-devel +BuildRequires: libffi-devel +BuildRequires: libnotify-devel +BuildRequires: libpng-devel %if 0%{?with_vpx} -BuildRequires: libvpx-devel +BuildRequires: libvpx-devel %endif -BuildRequires: libzip-devel -BuildRequires: mesa-libGL-devel -BuildRequires: nodejs -BuildRequires: nasm >= 1.13 -BuildRequires: strace +BuildRequires: libzip-devel +BuildRequires: mesa-libGL-devel +BuildRequires: nodejs +BuildRequires: nasm >= 1.13 +BuildRequires: strace %if 0%{?system_nss} -BuildRequires: pkgconfig(nspr) >= %{nspr_version} -BuildRequires: pkgconfig(nss) >= %{nss_version} -BuildRequires: nss-static >= %{nss_version} +BuildRequires: pkgconfig(nspr) >= %{nspr_version} +BuildRequires: pkgconfig(nss) >= %{nss_version} +BuildRequires: nss-static >= %{nss_version} %endif -BuildRequires: openjpeg-devel -BuildRequires: pango-devel -BuildRequires: pipewire-devel -BuildRequires: python2-devel -BuildRequires: pkgconfig(gconf-2.0) -BuildRequires: pkgconfig(xrender) -BuildRequires: pkgconfig(libstartup-notification-1.0) -BuildRequires: pkgconfig(dri) -BuildRequires: pkgconfig(libcurl) +BuildRequires: openjpeg-devel +BuildRequires: pango-devel +BuildRequires: pipewire-devel +BuildRequires: python2-devel +BuildRequires: pkgconfig(gconf-2.0) +BuildRequires: pkgconfig(xrender) +BuildRequires: pkgconfig(libstartup-notification-1.0) +BuildRequires: pkgconfig(dri) +BuildRequires: pkgconfig(libcurl) %if %{with pulseaudio} -BuildRequires: pulseaudio-libs-devel +BuildRequires: pulseaudio-libs-devel %endif %if %{with jack} -BuildRequires: jack-audio-connection-kit-devel +BuildRequires: jack-audio-connection-kit-devel %endif -BuildRequires: yasm -BuildRequires: llvm -BuildRequires: llvm-devel -BuildRequires: clang -BuildRequires: clang-libs -BuildRequires: clang-devel +BuildRequires: yasm +BuildRequires: llvm +BuildRequires: llvm-devel +BuildRequires: clang +BuildRequires: clang-libs +BuildRequires: clang-devel %if 0%{?build_with_clang} -BuildRequires: lld +BuildRequires: lld %endif -BuildRequires: rust +BuildRequires: rust %if 0%{?system_sqlite} -BuildRequires: pkgconfig(sqlite3) >= %{sqlite_version} -Requires: sqlite >= %{sqlite_build_version} +BuildRequires: pkgconfig(sqlite3) >= %{sqlite_version} +Requires: sqlite >= %{sqlite_build_version} %endif -Requires: dconf -Requires: mozilla-filesystem -Requires: p11-kit-trust +Requires: dconf +Requires: mozilla-filesystem +Requires: p11-kit-trust %if 0%{?system_nss} -Requires: nspr >= %{nspr_build_version} -Requires: nss >= %{nss_build_version} +Requires: nspr >= %{nspr_build_version} +Requires: nss >= %{nss_build_version} %endif -Requires: fedora-bookmarks -Suggests: mozilla-ublock-origin +Requires: fedora-bookmarks +Suggests: mozilla-ublock-origin -Provides: webclient -Provides: mozilla-https-everywhere = 20190131 +Provides: webclient +Provides: mozilla-https-everywhere = 20190131 %description GNUZilla Icecat is a fully-free fork of Mozilla Firefox ESR. @@ -360,7 +360,7 @@ tar -xf %{SOURCE5} # Patch for big endian platforms only %if 0%{?big_endian} %patch26 -p1 -b .icu -%patch9 -p0 -b .locale +%patch9 -p0 -b .locale %patch29 -p1 -b .big-endian %endif From ab140500192ae8a63071145107dc9fbbfb5d19f3 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 17 Aug 2019 19:11:36 +0200 Subject: [PATCH 050/473] Rebuilt source archive --- icecat.spec | 8 ++++---- sources | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/icecat.spec b/icecat.spec index 6a2c207..704e612 100644 --- a/icecat.spec +++ b/icecat.spec @@ -324,10 +324,10 @@ to run GNU IceCat natively on Wayland. %autosetup -N -n %{name}-%{version} #Fix permissions -find . -type f -name "*.h" -exec chmod 0644 '{}' \; -find . -type f -name "*.cpp" -exec chmod 0644 '{}' \; -find . -type f -name "*.cc" -exec chmod 0644 '{}' \; -find . -type f -name "*.c" -exec chmod 0644 '{}' \; +#find . -type f -name "*.h" -exec chmod 0644 '{}' \; +#find . -type f -name "*.cpp" -exec chmod 0644 '{}' \; +#find . -type f -name "*.cc" -exec chmod 0644 '{}' \; +#find . -type f -name "*.c" -exec chmod 0644 '{}' \; ##Copy license files tar -xf %{SOURCE5} diff --git a/sources b/sources index 94b72d4..f2b66d0 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = b0df3a8624efc488726211c99ac8a69c928d0bef24c2f7eafc6971be7ce2fafd54fba9330afd7e61ffe3a0d799bc5d994fa9f11f2da88cd93924c9347bfc4355 -SHA512 (icecat-68.0.2-gnu1.tar.bz2) = d19750166d1f68c6a4c6de6a73515954c17c325dff92352b77fa73f535cfcb9452502d62f74d5f9deee172b71aa81617d691600dd56a24cc4b35e4acc30a7946 +SHA512 (icecat-68.0.2-gnu1.tar.bz2) = 4709eff6cf6a94a50c326c74955d8732960f459831b14d245853e336d966c341f724b16e1c52ab2c60daa8cb0b15460c67c36fd62847fb936665d9cc799fc56c SHA512 (icecat-68.0.2-langpacks.tar.gz) = 4361c78b48ef0a9792d0fdba03c2ea7c4f880ba083d62e5ca83c9f65ec4cc3917b4020ebe16bb1a07faa780633c8e25aa7369f289ff54c0472158f993e703f1f SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 692ae9d0fee6585895c4324ca7b39c7d0a8c25b9 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 17 Aug 2019 21:58:54 +0200 Subject: [PATCH 051/473] Change fix-installer patch --- icecat-fix_installer.patch | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/icecat-fix_installer.patch b/icecat-fix_installer.patch index a56a880..1443996 100644 --- a/icecat-fix_installer.patch +++ b/icecat-fix_installer.patch @@ -1,6 +1,6 @@ --- browser/installer/package-manifest.orig.in 2017-03-24 21:09:39.027022000 +0100 +++ browser/installer/package-manifest.in 2017-03-24 23:07:21.881504771 +0100 -@@ -74,9 +74,9 @@ +@@ -71,9 +71,9 @@ #endif #ifndef MOZ_SYSTEM_NSPR #ifndef MOZ_FOLD_LIBS @@ -13,23 +13,27 @@ #endif #endif #ifdef XP_MACOSX -@@ -610,11 +610,11 @@ +@@ -239,6 +239,7 @@ + #endif # MOZ_ANGLE_RENDERER + + ; [Browser Chrome Files] ++@BINPATH@/browser/extensions + @BINPATH@/browser/extensions/viewtube@extension/* + @BINPATH@/browser/extensions/tprb.addon@searxes.danwin1210.me/* + @BINPATH@/browser/extensions/tortm-browser-button@jeremybenthum/* +@@ -263,9 +264,9 @@ @RESPATH@/chrome/recording.manifest @RESPATH@/chrome/recording/* #ifdef MOZ_GTK -@RESPATH@/browser/chrome/icons/default/default16.png -@RESPATH@/browser/chrome/icons/default/default32.png -@RESPATH@/browser/chrome/icons/default/default48.png --@RESPATH@/browser/chrome/icons/default/default64.png --@RESPATH@/browser/chrome/icons/default/default128.png +#@RESPATH@/browser/chrome/icons/default/default16.png +#@RESPATH@/browser/chrome/icons/default/default32.png +#@RESPATH@/browser/chrome/icons/default/default48.png -+@RESPATH@/browser/chrome/icons/default/default64.png -+@RESPATH@/browser/chrome/icons/default/default128.png + @RESPATH@/browser/chrome/icons/default/default64.png + @RESPATH@/browser/chrome/icons/default/default128.png #endif - @RESPATH@/browser/features/* - --- browser/installer/allowed-dupes.orig.mn 2017-03-19 19:59:09.000000000 +0100 +++ browser/installer/allowed-dupes.mn 2017-03-24 23:15:37.026964374 +0100 @@ -752,3 +752,19 @@ From 8ac4fe3cd60b938bf20d5f21eac75df6acbed60f Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 17 Aug 2019 22:00:10 +0200 Subject: [PATCH 052/473] Remove permission commands --- icecat.spec | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/icecat.spec b/icecat.spec index 704e612..e3a650d 100644 --- a/icecat.spec +++ b/icecat.spec @@ -323,13 +323,7 @@ to run GNU IceCat natively on Wayland. %prep %autosetup -N -n %{name}-%{version} -#Fix permissions -#find . -type f -name "*.h" -exec chmod 0644 '{}' \; -#find . -type f -name "*.cpp" -exec chmod 0644 '{}' \; -#find . -type f -name "*.cc" -exec chmod 0644 '{}' \; -#find . -type f -name "*.c" -exec chmod 0644 '{}' \; - -##Copy license files +# Copy license files tar -xf %{SOURCE5} %patch1 -p1 -b .fix_addon_installation From bf11b85687f647a98d5e4bbdbf66eba941dc0060 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 17 Aug 2019 23:55:41 +0200 Subject: [PATCH 053/473] Rebuilt source archive --- icecat-fix_installer.patch | 20 ++++++++------------ sources | 2 +- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/icecat-fix_installer.patch b/icecat-fix_installer.patch index 1443996..a56a880 100644 --- a/icecat-fix_installer.patch +++ b/icecat-fix_installer.patch @@ -1,6 +1,6 @@ --- browser/installer/package-manifest.orig.in 2017-03-24 21:09:39.027022000 +0100 +++ browser/installer/package-manifest.in 2017-03-24 23:07:21.881504771 +0100 -@@ -71,9 +71,9 @@ +@@ -74,9 +74,9 @@ #endif #ifndef MOZ_SYSTEM_NSPR #ifndef MOZ_FOLD_LIBS @@ -13,27 +13,23 @@ #endif #endif #ifdef XP_MACOSX -@@ -239,6 +239,7 @@ - #endif # MOZ_ANGLE_RENDERER - - ; [Browser Chrome Files] -+@BINPATH@/browser/extensions - @BINPATH@/browser/extensions/viewtube@extension/* - @BINPATH@/browser/extensions/tprb.addon@searxes.danwin1210.me/* - @BINPATH@/browser/extensions/tortm-browser-button@jeremybenthum/* -@@ -263,9 +264,9 @@ +@@ -610,11 +610,11 @@ @RESPATH@/chrome/recording.manifest @RESPATH@/chrome/recording/* #ifdef MOZ_GTK -@RESPATH@/browser/chrome/icons/default/default16.png -@RESPATH@/browser/chrome/icons/default/default32.png -@RESPATH@/browser/chrome/icons/default/default48.png +-@RESPATH@/browser/chrome/icons/default/default64.png +-@RESPATH@/browser/chrome/icons/default/default128.png +#@RESPATH@/browser/chrome/icons/default/default16.png +#@RESPATH@/browser/chrome/icons/default/default32.png +#@RESPATH@/browser/chrome/icons/default/default48.png - @RESPATH@/browser/chrome/icons/default/default64.png - @RESPATH@/browser/chrome/icons/default/default128.png ++@RESPATH@/browser/chrome/icons/default/default64.png ++@RESPATH@/browser/chrome/icons/default/default128.png #endif + @RESPATH@/browser/features/* + --- browser/installer/allowed-dupes.orig.mn 2017-03-19 19:59:09.000000000 +0100 +++ browser/installer/allowed-dupes.mn 2017-03-24 23:15:37.026964374 +0100 @@ -752,3 +752,19 @@ diff --git a/sources b/sources index f2b66d0..9444413 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = b0df3a8624efc488726211c99ac8a69c928d0bef24c2f7eafc6971be7ce2fafd54fba9330afd7e61ffe3a0d799bc5d994fa9f11f2da88cd93924c9347bfc4355 -SHA512 (icecat-68.0.2-gnu1.tar.bz2) = 4709eff6cf6a94a50c326c74955d8732960f459831b14d245853e336d966c341f724b16e1c52ab2c60daa8cb0b15460c67c36fd62847fb936665d9cc799fc56c +SHA512 (icecat-68.0.2-gnu1.tar.bz2) = 3d1874097c7f1282b771d43d338949d422d03b7c97bb1f2cdaf089559ec0f20f4efbb2bfc661a6177d00a2254d3d16d78e78c0b8e18ac33f12dd56c9b7e33544 SHA512 (icecat-68.0.2-langpacks.tar.gz) = 4361c78b48ef0a9792d0fdba03c2ea7c4f880ba083d62e5ca83c9f65ec4cc3917b4020ebe16bb1a07faa780633c8e25aa7369f289ff54c0472158f993e703f1f SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 29f088f455408297ca4bead49b167c54bcbcb981 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 18 Aug 2019 10:22:27 +0200 Subject: [PATCH 054/473] Remove missing font --- icecat.spec | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index e3a650d..64517bd 100644 --- a/icecat.spec +++ b/icecat.spec @@ -323,6 +323,12 @@ to run GNU IceCat natively on Wayland. %prep %autosetup -N -n %{name}-%{version} +# Fix permissions +find . -type f -name "*.h" -exec chmod 0644 '{}' \; +find . -type f -name "*.cpp" -exec chmod 0644 '{}' \; +find . -type f -name "*.cc" -exec chmod 0644 '{}' \; +find . -type f -name "*.c" -exec chmod 0644 '{}' \; + # Copy license files tar -xf %{SOURCE5} @@ -771,7 +777,6 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %{icecatappdir}/pingsender %{icecatappdir}/gmp-clearkey/ %{icecatappdir}/chrome.manifest -%{icecatappdir}/fonts/EmojiOneMozilla.ttf %{icecatappdir}/gtk2/*.so %if !%{?system_nss} %{icecatappdir}/libfreeblpriv3.chk From 14ef8c00d1d57b5fc9b2dcaff57af847b55ddf12 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 18 Aug 2019 11:19:22 +0200 Subject: [PATCH 055/473] Add fonts directory under IceCat's private libdir --- icecat.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/icecat.spec b/icecat.spec index 64517bd..1dbcffa 100644 --- a/icecat.spec +++ b/icecat.spec @@ -768,6 +768,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %{icecatappdir}/defaults/ %{icecatappdir}/dictionaries %{icecatappdir}/icecat* +%{icecatappdir}/fonts/ %{icecatappdir}/*.so %{icecatappdir}/*.ini %{icecatappdir}/omni.ja From 746e53f56a2c152dd2e9c89d2e2de90bc575d480 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 18 Aug 2019 15:11:04 +0200 Subject: [PATCH 056/473] Add patches for ARMs builds --- build-aarch64-skia.patch | 46 ++++++++++++++++++++++++++++++++++ build-arm-libopus.patch | 12 +++++++++ build-cacheFlush-missing.patch | 13 ++++++++++ build-disable-elfhack.patch | 12 +++++++++ icecat.spec | 18 ++++++++++--- 5 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 build-aarch64-skia.patch create mode 100644 build-arm-libopus.patch create mode 100644 build-cacheFlush-missing.patch create mode 100644 build-disable-elfhack.patch diff --git a/build-aarch64-skia.patch b/build-aarch64-skia.patch new file mode 100644 index 0000000..a00ee70 --- /dev/null +++ b/build-aarch64-skia.patch @@ -0,0 +1,46 @@ +diff -up firefox-68.0/gfx/skia/skia/include/private/SkHalf.h.old firefox-68.0/gfx/skia/skia/include/private/SkHalf.h +--- firefox-68.0/gfx/skia/skia/include/private/SkHalf.h.old 2019-07-11 12:33:40.471936951 +0200 ++++ firefox-68.0/gfx/skia/skia/include/private/SkHalf.h 2019-07-11 12:33:50.527913736 +0200 +@@ -40,7 +40,7 @@ static inline Sk4h SkFloatToHalf_finite_ + + static inline Sk4f SkHalfToFloat_finite_ftz(uint64_t rgba) { + Sk4h hs = Sk4h::Load(&rgba); +-#if !defined(SKNX_NO_SIMD) && defined(SK_CPU_ARM64) ++#if 0 // !defined(SKNX_NO_SIMD) && defined(SK_CPU_ARM64) + float32x4_t fs; + asm ("fcvtl %[fs].4s, %[hs].4h \n" // vcvt_f32_f16(...) + : [fs] "=w" (fs) // =w: write-only NEON register +@@ -62,7 +62,7 @@ static inline Sk4f SkHalfToFloat_finite_ + } + + static inline Sk4h SkFloatToHalf_finite_ftz(const Sk4f& fs) { +-#if !defined(SKNX_NO_SIMD) && defined(SK_CPU_ARM64) ++#if 0 // !defined(SKNX_NO_SIMD) && defined(SK_CPU_ARM64) + float32x4_t vec = fs.fVec; + asm ("fcvtn %[vec].4h, %[vec].4s \n" // vcvt_f16_f32(vec) + : [vec] "+w" (vec)); // +w: read-write NEON register + +diff -up firefox-68.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.old firefox-68.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h +--- firefox-68.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.old 2019-07-11 12:39:08.694166900 +0200 ++++ firefox-68.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h 2019-07-11 12:39:21.572136328 +0200 +@@ -830,7 +830,7 @@ SI F from_half(U16 h) { + } + + SI U16 to_half(F f) { +-#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds. ++#if 0 // defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds. + return vcvt_f16_f32(f); + + #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512) +diff -up firefox-68.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h.old firefox-68.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h +--- firefox-68.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h.old 2019-07-11 12:38:45.285222428 +0200 ++++ firefox-68.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h 2019-07-11 12:38:57.414193679 +0200 +@@ -163,7 +163,7 @@ SI F F_from_Half(U16 half) { + __attribute__((no_sanitize("unsigned-integer-overflow"))) + #endif + SI U16 Half_from_F(F f) { +-#if defined(USING_NEON_F16C) ++#if 0 // defined(USING_NEON_F16C) + return (U16)vcvt_f16_f32(f); + #elif defined(__AVX512F__) + return (U16)_mm512_cvtps_ph((__m512 )f, _MM_FROUND_CUR_DIRECTION ); diff --git a/build-arm-libopus.patch b/build-arm-libopus.patch new file mode 100644 index 0000000..1b3f31b --- /dev/null +++ b/build-arm-libopus.patch @@ -0,0 +1,12 @@ +diff -up firefox-66.0/media/libopus/silk/arm/arm_silk_map.c.old firefox-66.0/media/libopus/silk/arm/arm_silk_map.c +--- firefox-66.0/media/libopus/silk/arm/arm_silk_map.c.old 2019-03-12 21:07:35.356677522 +0100 ++++ firefox-66.0/media/libopus/silk/arm/arm_silk_map.c 2019-03-12 21:07:42.937693394 +0100 +@@ -28,7 +28,7 @@ POSSIBILITY OF SUCH DAMAGE. + # include "config.h" + #endif + +-#include "main_FIX.h" ++#include "fixed/main_FIX.h" + #include "NSQ.h" + #include "SigProc_FIX.h" + diff --git a/build-cacheFlush-missing.patch b/build-cacheFlush-missing.patch new file mode 100644 index 0000000..51c368c --- /dev/null +++ b/build-cacheFlush-missing.patch @@ -0,0 +1,13 @@ +diff -up firefox-55.0.3/js/src/jit/ExecutableAllocator.h.wasm firefox-55.0.3/js/src/jit/ExecutableAllocator.h +--- firefox-55.0.3/js/src/jit/ExecutableAllocator.h.wasm 2017-09-05 11:32:12.235909468 +0200 ++++ firefox-55.0.3/js/src/jit/ExecutableAllocator.h 2017-09-05 11:32:46.157916575 +0200 +@@ -219,7 +219,7 @@ class ExecutableAllocator + + static void poisonCode(JSRuntime* rt, JitPoisonRangeVector& ranges); + +-#if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64) || defined(JS_SIMULATOR_ARM64) ++#if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64) || defined(JS_SIMULATOR_ARM64) || defined(JS_CODEGEN_NONE) + static void cacheFlush(void*, size_t) + { + } +diff -up firefox-55.0.3/js/src/jit-test/tests/wasm/bench/wasm_box2d.wasm firefox-55.0.3/js/src/jit-test/tests/wasm/bench/wasm_box2d diff --git a/build-disable-elfhack.patch b/build-disable-elfhack.patch new file mode 100644 index 0000000..a80c551 --- /dev/null +++ b/build-disable-elfhack.patch @@ -0,0 +1,12 @@ +diff -up firefox-65.0/toolkit/moz.configure.disable-elfhack firefox-65.0/toolkit/moz.configure +--- firefox-65.0/toolkit/moz.configure.disable-elfhack 2019-01-28 14:16:48.530345132 +0100 ++++ firefox-65.0/toolkit/moz.configure 2019-01-28 14:18:03.231029682 +0100 +@@ -1036,7 +1036,7 @@ with only_when('--enable-compile-environ + help='{Enable|Disable} elf hacks') + + set_config('USE_ELF_HACK', +- depends_if('--enable-elf-hack')(lambda _: True)) ++ depends_if('--enable-elf-hack')(lambda _: False)) + + + @depends(check_build_environment) diff --git a/icecat.spec b/icecat.spec index 1dbcffa..a7a95f4 100644 --- a/icecat.spec +++ b/icecat.spec @@ -63,6 +63,7 @@ %if 0%{?fedora} > 30 %global wayland_backend_default 1 %endif +%global disable_elfhack 1 # Use mozilla hardening option? %global hardened_build 1 @@ -154,6 +155,11 @@ Patch29: build-big-endian.patch # Always feel lucky for unsupported platforms: # https://bugzilla.mozilla.org/show_bug.cgi?id=1347128 Patch37: build-jit-atomic-always-lucky.patch +# Fixing missing cacheFlush when JS_CODEGEN_NONE is used (s390x) +Patch38: build-cacheFlush-missing.patch +Patch40: build-aarch64-skia.patch +Patch41: build-disable-elfhack.patch +Patch44: build-arm-libopus.patch # Fedora specific patches Patch219: rhbz-1173156.patch @@ -342,11 +348,17 @@ tar -xf %{SOURCE5} %patch8 -p0 -b .fix_installer #%%patch37 -p1 -b .jit-atomic-lucky +%ifarch aarch64 +%patch40 -p1 -b .aarch64-skia +%endif +%if 0%{?disable_elfhack} +%patch41 -p1 -b .disable-elfhack +%endif # Fedora patches %patch219 -p1 -b .rhbz-1173156 -#ARM run-time patch +# ARM run-time patch %ifarch aarch64 %patch226 -p1 -b .1354671 %endif @@ -354,6 +366,7 @@ tar -xf %{SOURCE5} #%%patch413 -p1 -b .1353817 %ifarch %{arm} %patch414 -p1 -b .Bug-1238661---fix-mozillaSignalTrampoline-to-work +%patch44 -p1 -b .build-arm-libopus %endif #%%patch417 -p1 -b .bug1375074-save-restore-x28 @@ -370,11 +383,10 @@ tar -xf %{SOURCE5} %patch424 -p1 -b .mozilla-1566876-webrtc-ind %patch425 -p1 -b .mozilla-1568569 - # Wayland specific upstream patches %patch565 -p1 -b .firefox-pipewire -##Remove default configuration and copy the customized one +# Remove default configuration and copy the customized one rm -f .mozconfig cp -p %{SOURCE3} .mozconfig From c2b920677066040c1361b5631dadcc1e038a6586 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 20 Aug 2019 11:58:52 +0200 Subject: [PATCH 057/473] WebRTC always disabled| Do not build langpacks --- .gitignore | 1 + icecat.1 | 151 ---------------------------------------------------- icecat.spec | 29 +++++----- sources | 3 +- 4 files changed, 15 insertions(+), 169 deletions(-) delete mode 100644 icecat.1 diff --git a/.gitignore b/.gitignore index 1039629..0d7fb8a 100644 --- a/.gitignore +++ b/.gitignore @@ -86,3 +86,4 @@ /cbindgen-vendor.tar.xz /icecat-68.0.2-gnu1.tar.bz2 /icecat-68.0.2-langpacks.tar.gz +/icecat-68.0.2-gnu2.tar.bz2 diff --git a/icecat.1 b/icecat.1 deleted file mode 100644 index ec21e5e..0000000 --- a/icecat.1 +++ /dev/null @@ -1,151 +0,0 @@ -.TH ICECAT 1 "December 12, 2018" icecat "Linux User's Manual" -.SH NAME -IceCat \- GNU version of Firefox browser - -.SH SYNOPSIS -.B icecat -[\fIOPTIONS\fR ...] [\fIURL\fR] - -.B icecat-bin -[\fIOPTIONS\fR] [\fIURL\fR] - -.SH DESCRIPTION -\fBGnuzilla IceCat\fR is an open-source web browser, designed for standards compliance, performance and portability. - -GNUzilla is the GNU version of the Mozilla suite, and GNU IceCat is the GNU version of the Firefox browser. Its main advantage is an ethical one: it is entirely free software. While the Firefox source code from the Mozilla project is free software, they distribute and recommend non-free software as plug-ins and addons. - -In addition, GNU IceCat includes some privacy protection features, included in a separate addon: - -Some sites refer to zero-size images on other hosts to keep track of cookies. When IceCat detects this mechanism it blocks cookies from the site hosting the zero-length image file. (It is possible to re-enable such a site by removing it from the blocked hosts list.) -Other sites rewrite the host name in links redirecting the user to another site, mainly to "spy" on clicks. When this behavior is detected, IceCat shows a message alerting the user. - -Origin of the name - -The name IceCat was coined to show our relationship to the Mozilla Firefox browser. Ice isn't Fire and a Cat isn't a Fox, so it is clearly a different package (we don't want Mozilla blamed for our mistakes, nor cause confusion with their trademarks), but is equally clearly intimately related (of course nearly all of the work comes from the Mozilla foundation effort, so we want to give credit). - -.SH USAGE -\fBicecat\fR is a simple shell script that will set up the -environment for the actual executable, \fBicecat-bin\fR. - -.SH OPTIONS -A summary of the options supported by \fBicecat\fR is included below. - -.SS "X11 options" -.TP -.BI \-\-display= DISPLAY -X display to use -.TP -.B \--sync -Make X calls synchronous -.TP -.B \-\-g-fatal-warnings -Make all warnings fatal - -.SS "IceCat options" -.TP -.B \-h, \-help -Show summary of options. -.TP -.B \-v, \-version -Print IceCat version. -.TP -\fB\-P\fR \fIprofile\fR -Start with \fIprofile\fR. -.TP -\fB\-\-profile\fR \fIpath\fR -Start with profile at \fIpath\fR. -.TP -\fB\-\-migration\fR -Start with migration wizard. -.TP -.B \-\-ProfileManager -Start with ProfileManager. -.TP -\fB\-\-no\-remote\fR -Do not accept or send remote commands; implies \fB--new-instance\fR. -.TP -\fB\-\-new\-instance\fR -Open new instance, not a new window in running instance. -.TP -\fB\-\-UILocale\fR \fIlocale\fR -Start with \fIlocale\fR resources as UI Locale. -.TP -\fB\-\-save\-mode\fR -Disables extensions and themes for this session. -.TP -\fB\-\-headless\fR -Run without a GUI. -.TP -\fB\-\-marionette\fR -Enable remote control server. -.TP -\fB\-\-browser\fR -Open a browser window. -.TP -\fB\-\-new-window\fR \fIurl\fR -Open \fIurl\fR in a new window. -.TP -\fB\-\-new-tab\fR \fIurl\fR -Open \fIurl\fR in a new tab. -.TP -\fB\-\-private-window\fR \fIurl\fR -Open \fIurl\fR in a new private window. -.TP -\fB\-\-preferences\fR -Open Preferences dialog. -.TP -\fB\-\-screenshot\fR [\fIpath\fR] -Save screenshot to \fIpath\fR or in working directory. -.TP -\fB\-\-window-size\fR \fIwidth\fR[,\fIheight\fR] -Width and optionally height of screenshot. -.TP -\fB\-\-search\fR \fIterm\fR -Search \fIterm\fR with your default search engine. -.TP - - -\fB\-\-jsconsole\fR -Open the Browser Console. -.TP -\fB\-\-jsdebugger\fR -Open the Browser Toolbox. -.TP -\fB\-\-wait-for-jsdebugger\fR -Spin event loop until JS debugger connects. Enables debugging (some) application startup code paths. Only has an effect when \fI--jsdebugger\fR is also supplied. -.TP -\fB\-\-devtools\fR -Open DevTools on initial load. -.TP -\fB\-\-start-debugger-server\fR [ws:][\fIport\fR|\fIpath\fR] -Start the debugger server on a TCP port or Unix domain socket path. Defaults to TCP port 6000. Use WebSocket protocol if ws: prefix is specified. -.TP -\fB\-\-recording\fR \fIfile\fR -Record drawing for a given URL. -.TP -\fB\-\-recording-output\fR \fIfile\fR -Specify destination file for a drawing recording. -.TP -\fB\-\-setDefaultBrowser\fR -Set this app as the default browser. - -.SH FILES -\fI/usr/bin/icecat\fR - shell script wrapping -\fBicecat\fR -.br -\fI/usr/lib64/icecat/icecat-bin\fR - \fBicecat\fR -executable - -.SH VERSION -60.x - -.SH BUGS -To report a bug, please mail to bug-gnuzilla@gnu.org/\fR - -.SH AUTHORS -.TP -.B For a full list of the people who are credited with making a contribution to Mozilla, see http://www.mozilla.org/credits/ . -.I http://www.mozilla.org/about.html -.TP -.B Tobias Girstmair -.I https://www.gnu.org/software/gnuzilla/ diff --git a/icecat.spec b/icecat.spec index a7a95f4..76f9940 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,5 +1,5 @@ ##Active/Deactive language files handling -%global build_langpacks 1 +%global build_langpacks 0 %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html @@ -80,11 +80,11 @@ ExcludeArch: %{arm} ExcludeArch: s390x # Set new source-code build version -%global gnu_ver gnu1 +%global gnu_ver gnu2 Name: icecat Version: 68.0.2 -Release: 1.%{gnu_ver}%{?dist} +Release: 2.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -110,9 +110,6 @@ Source4: %{name}-%{version}-langpacks.tar.gz # Download from https://www.mozilla.org/MPL/2.0/index.txt Source5: %{name}-COPYING-licensefiles.tar.gz -# manpage file -Source6: %{name}.1 - Source7: %{name}-lang_download.sh # Desktop files @@ -156,10 +153,10 @@ Patch29: build-big-endian.patch # https://bugzilla.mozilla.org/show_bug.cgi?id=1347128 Patch37: build-jit-atomic-always-lucky.patch # Fixing missing cacheFlush when JS_CODEGEN_NONE is used (s390x) -Patch38: build-cacheFlush-missing.patch -Patch40: build-aarch64-skia.patch -Patch41: build-disable-elfhack.patch -Patch44: build-arm-libopus.patch +Patch38: build-cacheFlush-missing.patch +Patch40: build-aarch64-skia.patch +Patch41: build-disable-elfhack.patch +Patch44: build-arm-libopus.patch # Fedora specific patches Patch219: rhbz-1173156.patch @@ -392,12 +389,7 @@ cp -p %{SOURCE3} .mozconfig echo "ac_add_options --enable-default-toolkit=cairo-gtk3-wayland" >> .mozconfig echo "ac_add_options --enable-official-branding" >> .mozconfig - -%ifnarch %{ix86} x86_64 ppc64le echo "ac_add_options --disable-webrtc" >> .mozconfig -%else -echo "ac_add_options --enable-webrtc" >> .mozconfig -%endif %if %{with pulseaudio} echo "ac_add_options --enable-pulseaudio" >> .mozconfig @@ -662,7 +654,7 @@ desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE9} ##Install man page mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1 -install -p -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{_mandir}/man1/ +install -p -m 644 %{name}.1 $RPM_BUILD_ROOT%{_mandir}/man1/ ##Extract langpacks, make any mods needed, repack the langpack, and install it. %if 0%{?build_langpacks} @@ -811,6 +803,11 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Mon Aug 19 2019 Antonio Trande - 68.0.2-2.gnu2 +- WebRTC always disabled +- Do not build langpacks +- gnu2 build release + * Thu Aug 15 2019 Antonio Trande - 68.0.2-1.gnu1 - Mozilla release 68.0.2 - Import cbindgen stuff from Firefox package diff --git a/sources b/sources index 9444413..a9d6a69 100644 --- a/sources +++ b/sources @@ -1,4 +1,3 @@ SHA512 (cbindgen-vendor.tar.xz) = b0df3a8624efc488726211c99ac8a69c928d0bef24c2f7eafc6971be7ce2fafd54fba9330afd7e61ffe3a0d799bc5d994fa9f11f2da88cd93924c9347bfc4355 -SHA512 (icecat-68.0.2-gnu1.tar.bz2) = 3d1874097c7f1282b771d43d338949d422d03b7c97bb1f2cdaf089559ec0f20f4efbb2bfc661a6177d00a2254d3d16d78e78c0b8e18ac33f12dd56c9b7e33544 -SHA512 (icecat-68.0.2-langpacks.tar.gz) = 4361c78b48ef0a9792d0fdba03c2ea7c4f880ba083d62e5ca83c9f65ec4cc3917b4020ebe16bb1a07faa780633c8e25aa7369f289ff54c0472158f993e703f1f +SHA512 (icecat-68.0.2-gnu2.tar.bz2) = 55d99ccc924109671448d1e5fee04e281da508e5c78a3c79a8a556ca66167d4b704652a4bf38a5f0c3a6584ba455f6cb8bf1595b0503743597ec312c56f1ce3e SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 1418806b60c7218168727c97487d4997e54b8a6c Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 20 Aug 2019 12:00:39 +0200 Subject: [PATCH 058/473] Disable MOZ_SERVICES_SYNC --- icecat.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 76f9940..563e87e 100644 --- a/icecat.spec +++ b/icecat.spec @@ -608,7 +608,7 @@ MOZ_SMP_FLAGS=-j1 %endif export MOZ_MAKE_FLAGS="$MOZ_SMP_FLAGS" -export MOZ_SERVICES_SYNC="1" +export MOZ_SERVICES_SYNC="0" export MOZ_OPTIMIZE_FLAGS=" -freorder-blocks -fno-reorder-functions" export STRIP=/bin/true MOZ_RUN_GTEST=0 ./mach -v build @@ -807,6 +807,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - WebRTC always disabled - Do not build langpacks - gnu2 build release +- Disable MOZ_SERVICES_SYNC * Thu Aug 15 2019 Antonio Trande - 68.0.2-1.gnu1 - Mozilla release 68.0.2 From 180168f9d804d83fc05bfdcc9c550f140b2b700e Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 20 Aug 2019 12:23:12 +0200 Subject: [PATCH 059/473] Remove MOZ_SERVICES_SYNC flag --- icecat.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 563e87e..61f0e05 100644 --- a/icecat.spec +++ b/icecat.spec @@ -608,7 +608,6 @@ MOZ_SMP_FLAGS=-j1 %endif export MOZ_MAKE_FLAGS="$MOZ_SMP_FLAGS" -export MOZ_SERVICES_SYNC="0" export MOZ_OPTIMIZE_FLAGS=" -freorder-blocks -fno-reorder-functions" export STRIP=/bin/true MOZ_RUN_GTEST=0 ./mach -v build From 544344b80acb4497ccd43f59e58db9c2be027eeb Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 23 Aug 2019 18:14:56 +0200 Subject: [PATCH 060/473] Build release 38.0.2-gnu3 --- .gitignore | 1 + icecat-fix_installer.patch | 22 ---------------------- icecat.spec | 10 ++++++++-- sources | 2 +- 4 files changed, 10 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 0d7fb8a..0d81c9b 100644 --- a/.gitignore +++ b/.gitignore @@ -87,3 +87,4 @@ /icecat-68.0.2-gnu1.tar.bz2 /icecat-68.0.2-langpacks.tar.gz /icecat-68.0.2-gnu2.tar.bz2 +/icecat-68.0.2-gnu3.tar.bz2 diff --git a/icecat-fix_installer.patch b/icecat-fix_installer.patch index a56a880..cefa8e5 100644 --- a/icecat-fix_installer.patch +++ b/icecat-fix_installer.patch @@ -30,25 +30,3 @@ #endif @RESPATH@/browser/features/* ---- browser/installer/allowed-dupes.orig.mn 2017-03-19 19:59:09.000000000 +0100 -+++ browser/installer/allowed-dupes.mn 2017-03-24 23:15:37.026964374 +0100 -@@ -752,3 +752,19 @@ - browser/extensions/tprb.addon@searxes.danwin1210.me/manifest.json - browser/extensions/tprb.addon@searxes.danwin1210.me/tprb_dlg.html - browser/extensions/tprb.addon@searxes.danwin1210.me/style.css -+# -+browser/extensions/abouticecat@gnu.org/defaults/preferences/preferences.js -+browser/extensions/html5-video-everywhere@lejenome.me/bootstrap.js -+browser/chrome/browser/content/browser/aboutaccounts/images/fox.png -+browser/extensions/spyblock@gnu.org/chrome/content/ui/ext/common.js -+browser/extensions/spyblock@gnu.org/lib/ext_common.js -+browser/extensions/html5-video-everywhere@lejenome.me/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-break/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-dailymotion/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-facebook/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-metacafe/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-vimeo/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-youtube/LICENSE -+browser/extensions/spyblock@gnu.org/chrome/content/ui/skin/abp-128.png -+browser/extensions/spyblock@gnu.org/chrome/skin/abp-icon-big.png -+# diff --git a/icecat.spec b/icecat.spec index 61f0e05..07cb442 100644 --- a/icecat.spec +++ b/icecat.spec @@ -80,11 +80,11 @@ ExcludeArch: %{arm} ExcludeArch: s390x # Set new source-code build version -%global gnu_ver gnu2 +%global gnu_ver gnu3 Name: icecat Version: 68.0.2 -Release: 2.%{gnu_ver}%{?dist} +Release: 3.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -500,6 +500,9 @@ echo 'export NODEJS="%{_buildrootdir}/bin/node-stdout-nonblocking-wrapper"' >> . # Remove executable bit to make brp-mangle-shebangs happy. chmod -x third_party/rust/itertools/src/lib.rs +# Remove unrecognized files +find extensions/gnu -name cose.manifest -delete + #--------------------------------------------------------------------- %build @@ -802,6 +805,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Wed Aug 21 2019 Antonio Trande - 68.0.2-3.gnu3 +- gnu3 build release + * Mon Aug 19 2019 Antonio Trande - 68.0.2-2.gnu2 - WebRTC always disabled - Do not build langpacks diff --git a/sources b/sources index a9d6a69..eca32d4 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (cbindgen-vendor.tar.xz) = b0df3a8624efc488726211c99ac8a69c928d0bef24c2f7eafc6971be7ce2fafd54fba9330afd7e61ffe3a0d799bc5d994fa9f11f2da88cd93924c9347bfc4355 -SHA512 (icecat-68.0.2-gnu2.tar.bz2) = 55d99ccc924109671448d1e5fee04e281da508e5c78a3c79a8a556ca66167d4b704652a4bf38a5f0c3a6584ba455f6cb8bf1595b0503743597ec312c56f1ce3e +SHA512 (icecat-68.0.2-gnu3.tar.bz2) = 88cb18f8097c3581ef9cecad21a682e23512549bac411217fcbd4789d57f21744aab165d52aa2e5c1538ce877e58fd2f3b3d802d9ad8f47bf37b867bcbc4b28f SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From dd0cd4439486b764db292fe93e2f500c98f53817 Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 23 Aug 2019 19:00:52 +0200 Subject: [PATCH 061/473] Enable langpacks --- icecat.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/icecat.spec b/icecat.spec index 07cb442..9ab2fb7 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,5 +1,5 @@ ##Active/Deactive language files handling -%global build_langpacks 0 +%global build_langpacks 1 %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html @@ -84,7 +84,7 @@ ExcludeArch: s390x Name: icecat Version: 68.0.2 -Release: 3.%{gnu_ver}%{?dist} +Release: 4.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -805,6 +805,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Fri Aug 23 2019 Antonio Trande - 68.0.2-4.gnu3 +- Enable langpacks + * Wed Aug 21 2019 Antonio Trande - 68.0.2-3.gnu3 - gnu3 build release From 100ccf28ea30927b9b01c7cba877d6e4eb583248 Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 23 Aug 2019 19:04:47 +0200 Subject: [PATCH 062/473] New source for langpacks --- sources | 1 + 1 file changed, 1 insertion(+) diff --git a/sources b/sources index eca32d4..1bfcc4b 100644 --- a/sources +++ b/sources @@ -1,3 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = b0df3a8624efc488726211c99ac8a69c928d0bef24c2f7eafc6971be7ce2fafd54fba9330afd7e61ffe3a0d799bc5d994fa9f11f2da88cd93924c9347bfc4355 SHA512 (icecat-68.0.2-gnu3.tar.bz2) = 88cb18f8097c3581ef9cecad21a682e23512549bac411217fcbd4789d57f21744aab165d52aa2e5c1538ce877e58fd2f3b3d802d9ad8f47bf37b867bcbc4b28f +SHA512 (icecat-68.0.2-langpacks.tar.gz) = 4361c78b48ef0a9792d0fdba03c2ea7c4f880ba083d62e5ca83c9f65ec4cc3917b4020ebe16bb1a07faa780633c8e25aa7369f289ff54c0472158f993e703f1f SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 022f9383f0106ba5b475f96e1ac029a3d09af3cd Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 23 Aug 2019 19:07:19 +0200 Subject: [PATCH 063/473] Upload rpmlintrc file --- icecat.rpmlintrc | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 icecat.rpmlintrc diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc new file mode 100644 index 0000000..c2c8f6f --- /dev/null +++ b/icecat.rpmlintrc @@ -0,0 +1,40 @@ +# Whitelisting errors +# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist +# Edited by sagitter (sagitter AT fedoraproject dot org) + +# KNOWN BUGS: +# + +# TESTS: +##### SRPMs ##### + +# ifarch applied patches are okay +# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support +addFilter(r'(%ifarch-applied-patch) Patch*') + +# ERRORS: +##### RPMs ##### + +# chroot function (??) +addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') + +# Expected on FF browser +# https://support.mozilla.org/en-US/questions/1045418 +addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') +addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') + +# False positive +addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') +addFilter(r'(unversioned-explicit-provides) webclient') + +# WARNINGS: +##### RPMs ##### + +addFilter(r'(no-manual-page-for-binary) icecat-wayland') + +##### SRPMs ##### +# Different file size due to the signature of the source code tarbz archive +addFilter(r'file-size-mismatch') + +addFilter(r'(invalid-url) Source*') From 19fd855d427f3ce92907dadb270bd442661fe048 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 1 Sep 2019 11:22:48 +0200 Subject: [PATCH 064/473] Rebuild after retiring of Python2 --- icecat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 9ab2fb7..41f3e4e 100644 --- a/icecat.spec +++ b/icecat.spec @@ -84,7 +84,7 @@ ExcludeArch: s390x Name: icecat Version: 68.0.2 -Release: 4.%{gnu_ver}%{?dist} +Release: 5.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -805,6 +805,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Sun Sep 01 2019 Antonio Trande - 68.0.2-5.gnu3 +- Rebuild after retiring of Python2 + * Fri Aug 23 2019 Antonio Trande - 68.0.2-4.gnu3 - Enable langpacks From 2b48fe50b94fd23566e164101887830edbf550cf Mon Sep 17 00:00:00 2001 From: sagitter Date: Mon, 2 Sep 2019 20:29:50 +0200 Subject: [PATCH 065/473] Mozilla release 60.9.0 --- .gitignore | 2 ++ icecat-fix_installer.patch | 21 ++++---------------- icecat-lang_download.sh | 2 +- icecat.rpmlintrc | 40 -------------------------------------- icecat.spec | 7 +++++-- sources | 4 ++-- 6 files changed, 14 insertions(+), 62 deletions(-) delete mode 100644 icecat.rpmlintrc diff --git a/.gitignore b/.gitignore index 0e7fd6c..43b3979 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,5 @@ /icecat-60.7.2-langpacks.tar.gz /icecat-60.8.0-gnu1.tar.bz2 /icecat-60.8.0-langpacks.tar.gz +/icecat-60.9.0-gnu1.tar.bz2 +/icecat-60.9.0-langpacks.tar.gz diff --git a/icecat-fix_installer.patch b/icecat-fix_installer.patch index a56a880..6ed1704 100644 --- a/icecat-fix_installer.patch +++ b/icecat-fix_installer.patch @@ -32,23 +32,10 @@ --- browser/installer/allowed-dupes.orig.mn 2017-03-19 19:59:09.000000000 +0100 +++ browser/installer/allowed-dupes.mn 2017-03-24 23:15:37.026964374 +0100 -@@ -752,3 +752,19 @@ - browser/extensions/tprb.addon@searxes.danwin1210.me/manifest.json - browser/extensions/tprb.addon@searxes.danwin1210.me/tprb_dlg.html - browser/extensions/tprb.addon@searxes.danwin1210.me/style.css +@@ -771,3 +771,6 @@ + browser/extensions/SubmitMe@0xbeef.coffee/License + browser/extensions/SubmitMe@0xbeef.coffee/manifest.json + browser/extensions/SubmitMe@0xbeef.coffee/improve_css.js +# +browser/extensions/abouticecat@gnu.org/defaults/preferences/preferences.js -+browser/extensions/html5-video-everywhere@lejenome.me/bootstrap.js +browser/chrome/browser/content/browser/aboutaccounts/images/fox.png -+browser/extensions/spyblock@gnu.org/chrome/content/ui/ext/common.js -+browser/extensions/spyblock@gnu.org/lib/ext_common.js -+browser/extensions/html5-video-everywhere@lejenome.me/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-break/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-dailymotion/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-facebook/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-metacafe/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-vimeo/LICENSE -+browser/extensions/html5-video-everywhere@lejenome.me/node_modules/h5vew-site-youtube/LICENSE -+browser/extensions/spyblock@gnu.org/chrome/content/ui/skin/abp-128.png -+browser/extensions/spyblock@gnu.org/chrome/skin/abp-icon-big.png -+# diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 832a09b..2832b59 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=60.8.0 +VERSION=60.9.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc deleted file mode 100644 index c2c8f6f..0000000 --- a/icecat.rpmlintrc +++ /dev/null @@ -1,40 +0,0 @@ -# Whitelisting errors -# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist -# Edited by sagitter (sagitter AT fedoraproject dot org) - -# KNOWN BUGS: -# - -# TESTS: -##### SRPMs ##### - -# ifarch applied patches are okay -# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support -addFilter(r'(%ifarch-applied-patch) Patch*') - -# ERRORS: -##### RPMs ##### - -# chroot function (??) -addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') -addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') - -# Expected on FF browser -# https://support.mozilla.org/en-US/questions/1045418 -addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') -addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') - -# False positive -addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') -addFilter(r'(unversioned-explicit-provides) webclient') - -# WARNINGS: -##### RPMs ##### - -addFilter(r'(no-manual-page-for-binary) icecat-wayland') - -##### SRPMs ##### -# Different file size due to the signature of the source code tarbz archive -addFilter(r'file-size-mismatch') - -addFilter(r'(invalid-url) Source*') diff --git a/icecat.spec b/icecat.spec index 532c4dd..7cef988 100644 --- a/icecat.spec +++ b/icecat.spec @@ -73,8 +73,8 @@ ExcludeArch: %{arm} %global gnu_ver gnu1 Name: icecat -Version: 60.8.0 -Release: 6.%{gnu_ver}%{?dist} +Version: 60.9.0 +Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser ## Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -749,6 +749,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Mon Sep 02 2019 Antonio Trande - 60.9.0-1.gnu1 +- Mozilla release 60.9.0 + * Sun Jul 28 2019 Antonio Trande - 60.8.0-6.gnu1 - Add patch to fix the addon installation diff --git a/sources b/sources index e5e5f07..cccd512 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (icecat-60.8.0-gnu1.tar.bz2) = 31900c921102ccaa736b8be20210d16b7bae9c797d2529e9f38e803d834c72bacfe6e586934e21c48ca7097cc0bbc56adccc6beefc5f42b1e7ee4a3d93e9f223 -SHA512 (icecat-60.8.0-langpacks.tar.gz) = 82f63a5c0e7b4af8ed616d94f99274c4a54fa092147bcce3eb4f77026b562a8109cc289fec18abdf0e350484a8645eb32f173fbbe3e20cb12f8fb79cea52554b +SHA512 (icecat-60.9.0-gnu1.tar.bz2) = 6080c41bf1235b9d13ecb0f62e41af42d8180854a140420552128c1707f639fd73623910410ac0ce20f289e4c3ea010b70559d750ac0fb4f93b9642ff2c2cadb +SHA512 (icecat-60.9.0-langpacks.tar.gz) = 14117477b4be24445326f78022ba40d1972e4f82ff888e8dcbba032afede0eb52e43ae6bc1354955fa0ba46fbfe3b668fe3e925fccb2a4769eb7476be8b30737 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From dc2006f0fb493f348466cd84cda5f44bf59f8706 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 3 Sep 2019 13:31:53 +0200 Subject: [PATCH 066/473] Mozilla release 68.1.0 --- .gitignore | 2 + icecat-lang_download.sh | 2 +- icecat.rpmlintrc | 40 -------- icecat.spec | 24 +++-- mozilla-1548475.patch | 34 +++++++ mozilla-1562827.patch | 141 +++++++++++++++++++++++++++ mozilla-1567434-1.patch | 205 ++++++++++++++++++++++++++++++++++++++++ mozilla-1567434-2.patch | 35 +++++++ mozilla-1573813.patch | 29 ++++++ sources | 6 +- 10 files changed, 468 insertions(+), 50 deletions(-) delete mode 100644 icecat.rpmlintrc create mode 100644 mozilla-1548475.patch create mode 100644 mozilla-1562827.patch create mode 100644 mozilla-1567434-1.patch create mode 100644 mozilla-1567434-2.patch create mode 100644 mozilla-1573813.patch diff --git a/.gitignore b/.gitignore index 0d81c9b..722505b 100644 --- a/.gitignore +++ b/.gitignore @@ -88,3 +88,5 @@ /icecat-68.0.2-langpacks.tar.gz /icecat-68.0.2-gnu2.tar.bz2 /icecat-68.0.2-gnu3.tar.bz2 +/icecat-68.1.0-gnu1.tar.bz2 +/icecat-68.1.0-langpacks.tar.gz diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index d785ca1..87c6659 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=68.0.2 +VERSION=68.1.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc deleted file mode 100644 index c2c8f6f..0000000 --- a/icecat.rpmlintrc +++ /dev/null @@ -1,40 +0,0 @@ -# Whitelisting errors -# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist -# Edited by sagitter (sagitter AT fedoraproject dot org) - -# KNOWN BUGS: -# - -# TESTS: -##### SRPMs ##### - -# ifarch applied patches are okay -# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support -addFilter(r'(%ifarch-applied-patch) Patch*') - -# ERRORS: -##### RPMs ##### - -# chroot function (??) -addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') -addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') - -# Expected on FF browser -# https://support.mozilla.org/en-US/questions/1045418 -addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') -addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') - -# False positive -addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') -addFilter(r'(unversioned-explicit-provides) webclient') - -# WARNINGS: -##### RPMs ##### - -addFilter(r'(no-manual-page-for-binary) icecat-wayland') - -##### SRPMs ##### -# Different file size due to the signature of the source code tarbz archive -addFilter(r'file-size-mismatch') - -addFilter(r'(invalid-url) Source*') diff --git a/icecat.spec b/icecat.spec index 41f3e4e..ee400de 100644 --- a/icecat.spec +++ b/icecat.spec @@ -80,11 +80,11 @@ ExcludeArch: %{arm} ExcludeArch: s390x # Set new source-code build version -%global gnu_ver gnu3 +%global gnu_ver gnu1 Name: icecat -Version: 68.0.2 -Release: 5.%{gnu_ver}%{?dist} +Version: 68.1.0 +Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -176,6 +176,12 @@ Patch425: mozilla-1568569.patch # Wayland specific upstream patches Patch565: firefox-pipewire.patch + +Patch575: mozilla-1548475.patch +Patch576: mozilla-1562827.patch +Patch578: mozilla-1567434-1.patch +Patch579: mozilla-1567434-2.patch +Patch580: mozilla-1573813.patch # BuildRequires: alsa-lib-devel @@ -304,9 +310,6 @@ Extensions included to this version of IceCat: * Searxes Third-party Request Blocker - * View Tube - Watch videos from video sharing websites with extra options - %if 0%{?wayland_backend_default} %package x11 Summary: GNU IceCat X11 launcher @@ -382,6 +385,11 @@ tar -xf %{SOURCE5} # Wayland specific upstream patches %patch565 -p1 -b .firefox-pipewire +%patch575 -p1 -b .mozilla-1548475 +%patch576 -p1 -b .mozilla-1562827 +%patch578 -p1 -b .mozilla-1567434-1 +%patch579 -p1 -b .mozilla-1567434-2 +%patch580 -p1 -b .mozilla-1573813 # Remove default configuration and copy the customized one rm -f .mozconfig @@ -805,6 +813,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Tue Sep 03 2019 Antonio Trande - 68.1.0-1.gnu1 +- Mozilla release 68.1.0 +- Inglobe Wayland patches from Firefox 68 + * Sun Sep 01 2019 Antonio Trande - 68.0.2-5.gnu3 - Rebuild after retiring of Python2 diff --git a/mozilla-1548475.patch b/mozilla-1548475.patch new file mode 100644 index 0000000..b325683 --- /dev/null +++ b/mozilla-1548475.patch @@ -0,0 +1,34 @@ +diff --git a/dom/plugins/base/nsPluginHost.cpp b/dom/plugins/base/nsPluginHost.cpp +--- a/dom/plugins/base/nsPluginHost.cpp ++++ b/dom/plugins/base/nsPluginHost.cpp +@@ -105,6 +105,10 @@ + # include "windows.h" + # include "winbase.h" + #endif ++#if (MOZ_WIDGET_GTK) ++# include ++# include ++#endif + + #include "npapi.h" + +@@ -358,9 +362,15 @@ + mOverrideInternalTypes = + Preferences::GetBool("plugin.override_internal_types", false); + +- mPluginsDisabled = Preferences::GetBool("plugin.disable", false); +- +- Preferences::AddStrongObserver(this, "plugin.disable"); ++ bool waylandBackend = false; ++#if MOZ_WIDGET_GTK ++ waylandBackend = !GDK_IS_X11_DISPLAY(gdk_display_get_default()); ++#endif ++ mPluginsDisabled = ++ Preferences::GetBool("plugin.disable", false) || waylandBackend; ++ if (!waylandBackend) { ++ Preferences::AddStrongObserver(this, "plugin.disable"); ++ } + + nsCOMPtr obsService = + mozilla::services::GetObserverService(); + diff --git a/mozilla-1562827.patch b/mozilla-1562827.patch new file mode 100644 index 0000000..497133c --- /dev/null +++ b/mozilla-1562827.patch @@ -0,0 +1,141 @@ +diff -up firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.cpp +--- firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 2019-09-02 15:16:15.031528276 +0200 ++++ firefox-69.0/widget/gtk/nsWindow.cpp 2019-09-02 15:16:15.037528254 +0200 +@@ -818,7 +818,6 @@ void nsWindow::SetParent(nsIWidget* aNew + if (mParent) { + mParent->RemoveChild(this); + } +- + mParent = aNewParent; + + GtkWidget* oldContainer = GetMozContainerWidget(); +@@ -830,88 +829,73 @@ void nsWindow::SetParent(nsIWidget* aNew + return; + } + ++ nsWindow* newParent = static_cast(aNewParent); ++ GdkWindow* newParentWindow = nullptr; ++ GtkWidget* newContainer = nullptr; + if (aNewParent) { + aNewParent->AddChild(this); +- ReparentNativeWidget(aNewParent); ++ newParentWindow = newParent->mGdkWindow; ++ newContainer = newParent->GetMozContainerWidget(); + } else { + // aNewParent is nullptr, but reparent to a hidden window to avoid + // destroying the GdkWindow and its descendants. + // An invisible container widget is needed to hold descendant + // GtkWidgets. +- GtkWidget* newContainer = EnsureInvisibleContainer(); +- GdkWindow* newParentWindow = gtk_widget_get_window(newContainer); +- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow, +- oldContainer); +- } +-} +- +-bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); } +- +-void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) { +- MOZ_ASSERT(aNewParent, "null widget"); +- NS_ASSERTION(!mIsDestroyed, ""); +- NS_ASSERTION(!static_cast(aNewParent)->mIsDestroyed, ""); +- +- GtkWidget* oldContainer = GetMozContainerWidget(); +- if (!oldContainer) { +- // The GdkWindows have been destroyed so there is nothing else to +- // reparent. +- MOZ_ASSERT(gdk_window_is_destroyed(mGdkWindow), +- "live GdkWindow with no widget"); +- return; ++ newContainer = EnsureInvisibleContainer(); ++ newParentWindow = gtk_widget_get_window(newContainer); + } +- MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow), +- "destroyed GdkWindow with widget"); + +- auto* newParent = static_cast(aNewParent); +- GdkWindow* newParentWindow = newParent->mGdkWindow; +- GtkWidget* newContainer = newParent->GetMozContainerWidget(); +- GtkWindow* shell = GTK_WINDOW(mShell); +- +- if (shell && gtk_window_get_transient_for(shell)) { +- GtkWindow* topLevelParent = +- GTK_WINDOW(gtk_widget_get_toplevel(newContainer)); +- gtk_window_set_transient_for(shell, topLevelParent); +- } +- +- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow, +- oldContainer); +-} +- +-void nsWindow::ReparentNativeWidgetInternal(nsIWidget* aNewParent, +- GtkWidget* aNewContainer, +- GdkWindow* aNewParentWindow, +- GtkWidget* aOldContainer) { +- if (!aNewContainer) { ++ if (!newContainer) { + // The new parent GdkWindow has been destroyed. +- MOZ_ASSERT(!aNewParentWindow || gdk_window_is_destroyed(aNewParentWindow), ++ MOZ_ASSERT(!newParentWindow || gdk_window_is_destroyed(newParentWindow), + "live GdkWindow with no widget"); + Destroy(); + } else { +- if (aNewContainer != aOldContainer) { +- MOZ_ASSERT(!gdk_window_is_destroyed(aNewParentWindow), ++ if (newContainer != oldContainer) { ++ MOZ_ASSERT(!gdk_window_is_destroyed(newParentWindow), + "destroyed GdkWindow with widget"); +- SetWidgetForHierarchy(mGdkWindow, aOldContainer, aNewContainer); ++ SetWidgetForHierarchy(mGdkWindow, oldContainer, newContainer); + +- if (aOldContainer == gInvisibleContainer) { ++ if (oldContainer == gInvisibleContainer) { + CheckDestroyInvisibleContainer(); + } + } + +- if (!mIsTopLevel) { +- gdk_window_reparent(mGdkWindow, aNewParentWindow, +- DevicePixelsToGdkCoordRoundDown(mBounds.x), +- DevicePixelsToGdkCoordRoundDown(mBounds.y)); +- } ++ gdk_window_reparent(mGdkWindow, newParentWindow, ++ DevicePixelsToGdkCoordRoundDown(mBounds.x), ++ DevicePixelsToGdkCoordRoundDown(mBounds.y)); ++ mToplevelParentWindow = GTK_WINDOW(gtk_widget_get_toplevel(newContainer)); + } + +- auto* newParent = static_cast(aNewParent); + bool parentHasMappedToplevel = newParent && newParent->mHasMappedToplevel; + if (mHasMappedToplevel != parentHasMappedToplevel) { + SetHasMappedToplevel(parentHasMappedToplevel); + } + } + ++bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); } ++ ++void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) { ++ MOZ_ASSERT(aNewParent, "null widget"); ++ MOZ_ASSERT(!mIsDestroyed, ""); ++ MOZ_ASSERT(!static_cast(aNewParent)->mIsDestroyed, ""); ++ MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow), ++ "destroyed GdkWindow with widget"); ++ ++ MOZ_ASSERT( ++ !mParent, ++ "nsWindow::ReparentNativeWidget() works on toplevel windows only."); ++ ++ auto* newParent = static_cast(aNewParent); ++ GtkWindow* newParentWidget = GTK_WINDOW(newParent->GetGtkWidget()); ++ GtkWindow* shell = GTK_WINDOW(mShell); ++ ++ if (shell && gtk_window_get_transient_for(shell)) { ++ gtk_window_set_transient_for(shell, newParentWidget); ++ mToplevelParentWindow = newParentWidget; ++ } ++} ++ + void nsWindow::SetModal(bool aModal) { + LOG(("nsWindow::SetModal [%p] %d\n", (void*)this, aModal)); + if (mIsDestroyed) return; +diff -up firefox-69.0/widget/gtk/nsWindow.h.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.h diff --git a/mozilla-1567434-1.patch b/mozilla-1567434-1.patch new file mode 100644 index 0000000..631645b --- /dev/null +++ b/mozilla-1567434-1.patch @@ -0,0 +1,205 @@ +diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h +--- a/widget/gtk/nsWindow.h ++++ b/widget/gtk/nsWindow.h +@@ -487,6 +487,7 @@ + GtkWidget* mShell; + MozContainer* mContainer; + GdkWindow* mGdkWindow; ++ GtkWindow* mToplevelParentWindow; + bool mWindowShouldStartDragging = false; + PlatformCompositorWidgetDelegate* mCompositorWidgetDelegate; + +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -401,6 +401,7 @@ + mContainer = nullptr; + mGdkWindow = nullptr; + mShell = nullptr; ++ mToplevelParentWindow = nullptr; + mCompositorWidgetDelegate = nullptr; + mHasMappedToplevel = false; + mIsFullyObscured = false; +@@ -1144,6 +1145,8 @@ + nsWindow* window = + static_cast(gVisibleWaylandPopupWindows->data); + if (window->mPopupType != ePopupTypeTooltip) break; ++ LOG(("nsWindow::HideWaylandTooltips [%p] hidding tooltip [%p].\n", ++ (void*)this, window)); + window->HideWaylandWindow(); + gVisibleWaylandPopupWindows = g_list_delete_link( + gVisibleWaylandPopupWindows, gVisibleWaylandPopupWindows); +@@ -1172,9 +1175,12 @@ + // before we open another one on that level. It means that every open + // popup needs to have an unique parent. + GtkWidget* nsWindow::ConfigureWaylandPopupWindows() { ++ LOG(("nsWindow::ConfigureWaylandPopupWindows [%p]\n", (void*)this)); ++ + // Check if we're already configured. + if (gVisibleWaylandPopupWindows && + g_list_find(gVisibleWaylandPopupWindows, this)) { ++ LOG(("...[%p] is already configured.\n", (void*)this)); + return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell))); + } + +@@ -1182,9 +1188,15 @@ + // as it's short lived temporary window. + HideWaylandTooltips(); + +- GtkWindow* parentWidget = nullptr; ++ GtkWindow* parentWidget = mToplevelParentWindow; + if (gVisibleWaylandPopupWindows) { ++ LOG(("... there's visible active popup [%p]\n", ++ gVisibleWaylandPopupWindows->data)); ++ + if (mPopupType == ePopupTypeTooltip) { ++ LOG(("...[%p] is tooltip, parent [%p]\n", (void*)this, ++ gVisibleWaylandPopupWindows->data)); ++ + // Attach tooltip window to the latest popup window + // to have both visible. + nsWindow* window = +@@ -1200,12 +1212,19 @@ + // nsWindow::Create()) or we're toplevel popup without parent. + // In both cases just use parent which was passed to nsWindow::Create(). + if (!menuPopupFrame) { +- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell))); ++ LOG(("...[%p] menuPopupFrame = null, using given parent widget [%p]\n", ++ (void*)this, parentWidget)); ++ return GTK_WIDGET(parentWidget); + } + + nsWindow* parentWindow = + static_cast(menuPopupFrame->GetParentMenuWidget()); ++ LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow)); ++ + if (!parentWindow) { ++ LOG(("...[%p] using active/visible popups as a parent [%p]\n", ++ (void*)this, gVisibleWaylandPopupWindows->data)); ++ + // We're toplevel popup menu attached to another menu. Just use our + // latest popup as a parent. + parentWindow = +@@ -1234,10 +1253,10 @@ + } + } + ++ MOZ_ASSERT(parentWidget, "Missing parent widget for wayland popup!"); + if (parentWidget) { ++ LOG(("...[%p] set parent widget [%p]\n", (void*)this, parentWidget)); + gtk_window_set_transient_for(GTK_WINDOW(mShell), parentWidget); +- } else { +- parentWidget = gtk_window_get_transient_for(GTK_WINDOW(mShell)); + } + gVisibleWaylandPopupWindows = + g_list_prepend(gVisibleWaylandPopupWindows, this); +@@ -1248,9 +1267,11 @@ + static void NativeMoveResizeWaylandPopupCallback( + GdkWindow* window, const GdkRectangle* flipped_rect, + const GdkRectangle* final_rect, gboolean flipped_x, gboolean flipped_y, +- void* unused) { +- LOG(("%s flipped %d %d\n", __FUNCTION__, flipped_rect->x, flipped_rect->y)); +- LOG(("%s final %d %d\n", __FUNCTION__, final_rect->x, final_rect->y)); ++ void* aWindow) { ++ LOG(("%s [%p] flipped %d %d\n", __FUNCTION__, aWindow, flipped_rect->x, ++ flipped_rect->y)); ++ LOG(("%s [%p] final %d %d\n", __FUNCTION__, aWindow, final_rect->x, ++ final_rect->y)); + } + #endif + +@@ -1264,6 +1285,8 @@ + // Compositor may be confused by windows with width/height = 0 + // and positioning such windows leads to Bug 1555866. + if (!AreBoundsSane()) { ++ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] Bounds are not sane\n", ++ (void*)this)); + return; + } + +@@ -1277,6 +1300,8 @@ + // - gdk_window_move_to_rect() is not available + // - the widget doesn't have a valid GdkWindow + if (!sGdkWindowMoveToRect || !gdkWindow) { ++ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] use gtk_window_move()\n", ++ (void*)this)); + gtk_window_move(GTK_WINDOW(mShell), aPosition->x, aPosition->y); + return; + } +@@ -1302,8 +1327,12 @@ + } + LOG((" request result %d %d\n", rect.x, rect.y)); + #ifdef DEBUG +- g_signal_connect(gdkWindow, "moved-to-rect", +- G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this); ++ if (!g_signal_handler_find( ++ gdkWindow, G_SIGNAL_MATCH_FUNC, 0, 0, nullptr, ++ FuncToGpointer(NativeMoveResizeWaylandPopupCallback), this)) { ++ g_signal_connect(gdkWindow, "moved-to-rect", ++ G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this); ++ } + #endif + + GdkGravity rectAnchor = GDK_GRAVITY_NORTH_WEST; +@@ -3508,7 +3537,6 @@ + GtkWidget* parentMozContainer = nullptr; + GtkContainer* parentGtkContainer = nullptr; + GdkWindow* parentGdkWindow = nullptr; +- GtkWindow* topLevelParent = nullptr; + nsWindow* parentnsWindow = nullptr; + GtkWidget* eventWidget = nullptr; + bool drawToContainer = false; +@@ -3534,7 +3562,8 @@ + + // get the toplevel window just in case someone needs to use it + // for setting transients or whatever. +- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer)); ++ mToplevelParentWindow = ++ GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer)); + } + + if (!mIsX11Display) { +@@ -3542,7 +3571,7 @@ + // eWindowType_child is not supported on Wayland. Just switch to toplevel + // as a workaround. + mWindowType = eWindowType_toplevel; +- } else if (mWindowType == eWindowType_popup && !topLevelParent) { ++ } else if (mWindowType == eWindowType_popup && !mToplevelParentWindow) { + // Workaround for Wayland where the popup windows always need to have + // parent window. For example webrtc ui is a popup window without parent. + mWindowType = eWindowType_toplevel; +@@ -3677,7 +3706,7 @@ + gdk_get_program_class()); + gtk_window_set_type_hint(GTK_WINDOW(mShell), + GDK_WINDOW_TYPE_HINT_DIALOG); +- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent); ++ gtk_window_set_transient_for(GTK_WINDOW(mShell), mToplevelParentWindow); + } else if (mWindowType == eWindowType_popup) { + gtk_window_set_wmclass(GTK_WINDOW(mShell), "Popup", + gdk_get_program_class()); +@@ -3730,10 +3759,11 @@ + } + gtk_window_set_type_hint(GTK_WINDOW(mShell), gtkTypeHint); + +- if (topLevelParent) { ++ if (mToplevelParentWindow) { + LOG(("nsWindow::Create [%p] Set popup parent %p\n", (void*)this, +- topLevelParent)); +- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent); ++ mToplevelParentWindow)); ++ gtk_window_set_transient_for(GTK_WINDOW(mShell), ++ mToplevelParentWindow); + } + + // We need realized mShell at NativeMove(). +@@ -4011,7 +4041,8 @@ + #endif + } + +- LOG(("nsWindow [%p]\n", (void*)this)); ++ LOG(("nsWindow [%p] %s\n", (void*)this, ++ mWindowType == eWindowType_toplevel ? "Toplevel" : "Popup")); + if (mShell) { + LOG(("\tmShell %p mContainer %p mGdkWindow %p 0x%lx\n", mShell, mContainer, + mGdkWindow, mIsX11Display ? gdk_x11_window_get_xid(mGdkWindow) : 0)); + diff --git a/mozilla-1567434-2.patch b/mozilla-1567434-2.patch new file mode 100644 index 0000000..966118a --- /dev/null +++ b/mozilla-1567434-2.patch @@ -0,0 +1,35 @@ +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -1208,6 +1208,7 @@ + if (frame) { + menuPopupFrame = do_QueryFrame(frame); + } ++ + // The popup is not fully created yet (we're called from + // nsWindow::Create()) or we're toplevel popup without parent. + // In both cases just use parent which was passed to nsWindow::Create(). +@@ -1217,10 +1218,22 @@ + return GTK_WIDGET(parentWidget); + } + ++ LOG(("...[%p] is %s\n", (void*)this, ++ menuPopupFrame->IsContextMenu() ? "context menu" : "popup")); ++ + nsWindow* parentWindow = + static_cast(menuPopupFrame->GetParentMenuWidget()); + LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow)); + ++ // If the popup is a regular menu but GetParentMenuWidget() returns ++ // nullptr which means it's connected non-menu parent ++ // (bookmark toolbar for instance). ++ // In this case use a parent given at nsWindow::Create(). ++ if (!parentWindow && !menuPopupFrame->IsContextMenu()) { ++ parentWindow = ++ get_window_for_gtk_widget(GTK_WIDGET(mToplevelParentWindow)); ++ } ++ + if (!parentWindow) { + LOG(("...[%p] using active/visible popups as a parent [%p]\n", + (void*)this, gVisibleWaylandPopupWindows->data)); + diff --git a/mozilla-1573813.patch b/mozilla-1573813.patch new file mode 100644 index 0000000..e9fca07 --- /dev/null +++ b/mozilla-1573813.patch @@ -0,0 +1,29 @@ +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -6577,11 +6577,22 @@ + } + + gint nsWindow::GdkScaleFactor() { ++ // For popup windows with parent window we need to get scale factor of the ++ // parent window. Otherwise the scale factor of the popup is not updated ++ // during it's hidden. ++ GdkWindow* scaledGdkWindow = mGdkWindow; ++ if (mToplevelParentWindow) { ++ scaledGdkWindow = gtk_widget_get_window(GTK_WIDGET(mToplevelParentWindow)); ++ // Fallback for windows which parent has been unrealized. ++ if (!scaledGdkWindow) { ++ scaledGdkWindow = mGdkWindow; ++ } ++ } + // Available as of GTK 3.10+ + static auto sGdkWindowGetScaleFactorPtr = + (gint(*)(GdkWindow*))dlsym(RTLD_DEFAULT, "gdk_window_get_scale_factor"); +- if (sGdkWindowGetScaleFactorPtr && mGdkWindow) +- return (*sGdkWindowGetScaleFactorPtr)(mGdkWindow); ++ if (sGdkWindowGetScaleFactorPtr && scaledGdkWindow) ++ return (*sGdkWindowGetScaleFactorPtr)(scaledGdkWindow); + return ScreenHelperGTK::GetGTKMonitorScaleFactor(); + } + + diff --git a/sources b/sources index 1bfcc4b..e77e6c4 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (cbindgen-vendor.tar.xz) = b0df3a8624efc488726211c99ac8a69c928d0bef24c2f7eafc6971be7ce2fafd54fba9330afd7e61ffe3a0d799bc5d994fa9f11f2da88cd93924c9347bfc4355 -SHA512 (icecat-68.0.2-gnu3.tar.bz2) = 88cb18f8097c3581ef9cecad21a682e23512549bac411217fcbd4789d57f21744aab165d52aa2e5c1538ce877e58fd2f3b3d802d9ad8f47bf37b867bcbc4b28f -SHA512 (icecat-68.0.2-langpacks.tar.gz) = 4361c78b48ef0a9792d0fdba03c2ea7c4f880ba083d62e5ca83c9f65ec4cc3917b4020ebe16bb1a07faa780633c8e25aa7369f289ff54c0472158f993e703f1f +SHA512 (cbindgen-vendor.tar.xz) = 2daac8505b71c9672020b6d407f8ec826cc978629a2e44857f5e80a8cedc79162aea2fb01179683542e505148249827523e59e58e9c54ab0d298c5d07a555f10 +SHA512 (icecat-68.1.0-gnu1.tar.bz2) = b04cb30a1a40c97fc1a38e67836c401230612645dfe2815ac634977362c4ef2883d6b15eaa094092ea44d75de768ac7c725c4897cb1210334081781f61d843e0 +SHA512 (icecat-68.1.0-langpacks.tar.gz) = ecda5e45c39ebcb366aa13e1d58d849acf8b8b21066ef5e0784c0e46e0900fe96e48f88a7fb1877f2778dac0300d792663eac00d516cd65eef51736d7f9880b1 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From c0c70fa2c937dac5921096c1e359bc3bf8ce6d92 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 3 Sep 2019 14:03:13 +0200 Subject: [PATCH 067/473] Do not patch (1512162) PPC64 builds --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index ee400de..42f5aff 100644 --- a/icecat.spec +++ b/icecat.spec @@ -378,7 +378,7 @@ tar -xf %{SOURCE5} %endif %ifarch ppc64 ppc64le -%patch423 -p1 -b .1512162 +#%%patch423 -p1 -b .1512162 %endif %patch424 -p1 -b .mozilla-1566876-webrtc-ind %patch425 -p1 -b .mozilla-1568569 From 34038568c190f0a7b656811a9d060161b38a2072 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 3 Sep 2019 18:38:38 +0200 Subject: [PATCH 068/473] Fix latest changelog entry --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 42f5aff..d015b21 100644 --- a/icecat.spec +++ b/icecat.spec @@ -815,7 +815,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %changelog * Tue Sep 03 2019 Antonio Trande - 68.1.0-1.gnu1 - Mozilla release 68.1.0 -- Inglobe Wayland patches from Firefox 68 +- Incorporate Wayland patches from Firefox 68 * Sun Sep 01 2019 Antonio Trande - 68.0.2-5.gnu3 - Rebuild after retiring of Python2 From 06e06c631a88a7b1bb5f2ed0a653e11c09ca03e4 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 4 Sep 2019 12:47:51 +0200 Subject: [PATCH 069/473] Reintroduce icecat.rpmlintrc --- icecat.rpmlintrc | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 icecat.rpmlintrc diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc new file mode 100644 index 0000000..c2c8f6f --- /dev/null +++ b/icecat.rpmlintrc @@ -0,0 +1,40 @@ +# Whitelisting errors +# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist +# Edited by sagitter (sagitter AT fedoraproject dot org) + +# KNOWN BUGS: +# + +# TESTS: +##### SRPMs ##### + +# ifarch applied patches are okay +# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support +addFilter(r'(%ifarch-applied-patch) Patch*') + +# ERRORS: +##### RPMs ##### + +# chroot function (??) +addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') + +# Expected on FF browser +# https://support.mozilla.org/en-US/questions/1045418 +addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') +addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') + +# False positive +addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') +addFilter(r'(unversioned-explicit-provides) webclient') + +# WARNINGS: +##### RPMs ##### + +addFilter(r'(no-manual-page-for-binary) icecat-wayland') + +##### SRPMs ##### +# Different file size due to the signature of the source code tarbz archive +addFilter(r'file-size-mismatch') + +addFilter(r'(invalid-url) Source*') From 43d5b0d92fc46881b7411ca8fd879fea961e12e7 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 4 Sep 2019 12:49:49 +0200 Subject: [PATCH 070/473] Reintroduce icecat.rpmlintrc --- icecat.rpmlintrc | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 icecat.rpmlintrc diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc new file mode 100644 index 0000000..c2c8f6f --- /dev/null +++ b/icecat.rpmlintrc @@ -0,0 +1,40 @@ +# Whitelisting errors +# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist +# Edited by sagitter (sagitter AT fedoraproject dot org) + +# KNOWN BUGS: +# + +# TESTS: +##### SRPMs ##### + +# ifarch applied patches are okay +# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support +addFilter(r'(%ifarch-applied-patch) Patch*') + +# ERRORS: +##### RPMs ##### + +# chroot function (??) +addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') + +# Expected on FF browser +# https://support.mozilla.org/en-US/questions/1045418 +addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') +addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') + +# False positive +addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') +addFilter(r'(unversioned-explicit-provides) webclient') + +# WARNINGS: +##### RPMs ##### + +addFilter(r'(no-manual-page-for-binary) icecat-wayland') + +##### SRPMs ##### +# Different file size due to the signature of the source code tarbz archive +addFilter(r'file-size-mismatch') + +addFilter(r'(invalid-url) Source*') From 89598c0f2bf5a3c9e6a605b1824ec2bfee10c759 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 23 Oct 2019 12:04:08 +0200 Subject: [PATCH 071/473] Mozilla release 68.2.0 --- .gitignore | 2 ++ icecat-lang_download.sh | 2 +- icecat.rpmlintrc | 40 ---------------------------------------- icecat.spec | 5 ++++- sources | 4 ++-- 5 files changed, 9 insertions(+), 44 deletions(-) delete mode 100644 icecat.rpmlintrc diff --git a/.gitignore b/.gitignore index 722505b..654d0b0 100644 --- a/.gitignore +++ b/.gitignore @@ -90,3 +90,5 @@ /icecat-68.0.2-gnu3.tar.bz2 /icecat-68.1.0-gnu1.tar.bz2 /icecat-68.1.0-langpacks.tar.gz +/icecat-68.2.0-gnu1.tar.bz2 +/icecat-68.2.0-langpacks.tar.gz diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 87c6659..9a8708d 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=68.1.0 +VERSION=68.2.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc deleted file mode 100644 index c2c8f6f..0000000 --- a/icecat.rpmlintrc +++ /dev/null @@ -1,40 +0,0 @@ -# Whitelisting errors -# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist -# Edited by sagitter (sagitter AT fedoraproject dot org) - -# KNOWN BUGS: -# - -# TESTS: -##### SRPMs ##### - -# ifarch applied patches are okay -# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support -addFilter(r'(%ifarch-applied-patch) Patch*') - -# ERRORS: -##### RPMs ##### - -# chroot function (??) -addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') -addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') - -# Expected on FF browser -# https://support.mozilla.org/en-US/questions/1045418 -addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') -addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') - -# False positive -addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') -addFilter(r'(unversioned-explicit-provides) webclient') - -# WARNINGS: -##### RPMs ##### - -addFilter(r'(no-manual-page-for-binary) icecat-wayland') - -##### SRPMs ##### -# Different file size due to the signature of the source code tarbz archive -addFilter(r'file-size-mismatch') - -addFilter(r'(invalid-url) Source*') diff --git a/icecat.spec b/icecat.spec index d015b21..5c9284f 100644 --- a/icecat.spec +++ b/icecat.spec @@ -83,7 +83,7 @@ ExcludeArch: s390x %global gnu_ver gnu1 Name: icecat -Version: 68.1.0 +Version: 68.2.0 Release: 1.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser @@ -813,6 +813,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Tue Oct 22 2019 Antonio Trande - 68.2.0-1.gnu1 +- Mozilla release 68.2.0 + * Tue Sep 03 2019 Antonio Trande - 68.1.0-1.gnu1 - Mozilla release 68.1.0 - Incorporate Wayland patches from Firefox 68 diff --git a/sources b/sources index e77e6c4..c867c07 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = 2daac8505b71c9672020b6d407f8ec826cc978629a2e44857f5e80a8cedc79162aea2fb01179683542e505148249827523e59e58e9c54ab0d298c5d07a555f10 -SHA512 (icecat-68.1.0-gnu1.tar.bz2) = b04cb30a1a40c97fc1a38e67836c401230612645dfe2815ac634977362c4ef2883d6b15eaa094092ea44d75de768ac7c725c4897cb1210334081781f61d843e0 -SHA512 (icecat-68.1.0-langpacks.tar.gz) = ecda5e45c39ebcb366aa13e1d58d849acf8b8b21066ef5e0784c0e46e0900fe96e48f88a7fb1877f2778dac0300d792663eac00d516cd65eef51736d7f9880b1 +SHA512 (icecat-68.2.0-gnu1.tar.bz2) = b478af0c0c618108e5995f857eda44da0d33c83bc19870d020f25177a35235d3353af3257b60435dd6a1b8721728537de2f06e5da80ed260c56afac40012f511 +SHA512 (icecat-68.2.0-langpacks.tar.gz) = a13a29071114438795c0a6c8bf5bd2cecc50e18a0d9298641cacc27989bfc1613c0632b66da71895cc48db76a1e7e5b10cdccd96a262f4af9d5e6844461a4c7c SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 6dd5e95df7f949057b640899ef489601215e5be3 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 23 Oct 2019 12:05:17 +0200 Subject: [PATCH 072/473] Include icecat.rpmlintrc --- icecat.rpmlintrc | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 icecat.rpmlintrc diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc new file mode 100644 index 0000000..c2c8f6f --- /dev/null +++ b/icecat.rpmlintrc @@ -0,0 +1,40 @@ +# Whitelisting errors +# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist +# Edited by sagitter (sagitter AT fedoraproject dot org) + +# KNOWN BUGS: +# + +# TESTS: +##### SRPMs ##### + +# ifarch applied patches are okay +# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support +addFilter(r'(%ifarch-applied-patch) Patch*') + +# ERRORS: +##### RPMs ##### + +# chroot function (??) +addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') + +# Expected on FF browser +# https://support.mozilla.org/en-US/questions/1045418 +addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') +addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') + +# False positive +addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') +addFilter(r'(unversioned-explicit-provides) webclient') + +# WARNINGS: +##### RPMs ##### + +addFilter(r'(no-manual-page-for-binary) icecat-wayland') + +##### SRPMs ##### +# Different file size due to the signature of the source code tarbz archive +addFilter(r'file-size-mismatch') + +addFilter(r'(invalid-url) Source*') From 5ca740adb9f347016dd8923af562451245990553 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 2 Nov 2019 13:59:27 +0100 Subject: [PATCH 073/473] Modify icecat.rpmlintrc --- icecat.rpmlintrc | 26 ++++++++++++++++---------- icecat.spec | 10 +++++----- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc index c2c8f6f..4d7dde1 100644 --- a/icecat.rpmlintrc +++ b/icecat.rpmlintrc @@ -1,5 +1,6 @@ # Whitelisting errors # https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist +# https://src.fedoraproject.org/rpms/python3/blob/master/f/python3.rpmlintrc # Edited by sagitter (sagitter AT fedoraproject dot org) # KNOWN BUGS: @@ -11,30 +12,35 @@ # ifarch applied patches are okay # https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support addFilter(r'(%ifarch-applied-patch) Patch*') +# Different file size due to the signature of the source code tarbz archive +addFilter(r'file-size-mismatch') + +addFilter(r'(invalid-url) Source4') +addFilter(r'(invalid-url) Source5') +addFilter(r'(invalid-url) Source17') # ERRORS: ##### RPMs ##### # chroot function (??) -addFilter(r'(missing-call-to-chdir-with-chroot) %{_libdir}/icecat/libmozsandbox.so') -addFilter(r'(missing-call-to-setgroups-before-setuid) %{_libdir}/icecat/libxul.so') +addFilter(r'(missing-call-to-chdir-with-chroot) /usr/lib(64)?/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) /usr/lib(64)?/icecat/libxul.so') # Expected on FF browser # https://support.mozilla.org/en-US/questions/1045418 -addFilter(r'(zero-length) %{_libdir}/icecat/chrome.manifest') -addFilter(r'(zero-length) %{_libdir}/icecat/browser/chrome.manifest') +addFilter(r'(zero-length) /usr/lib(64)?/icecat/chrome.manifest') +addFilter(r'(zero-length) /usr/lib(64)?/icecat/browser/chrome.manifest') + +addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/gtk2/libmozgtk.so') +addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/libmozgtk.so') # False positive -addFilter(r'(dangling-symlink) %{_libdir}/icecat/dictionaries %{_datadir}/myspell') +addFilter(r'(dangling-symlink) /usr/lib(64)?/icecat/dictionaries /usr/share/myspell') addFilter(r'(unversioned-explicit-provides) webclient') # WARNINGS: ##### RPMs ##### addFilter(r'(no-manual-page-for-binary) icecat-wayland') +addFilter(r'(no-manual-page-for-binary) icecat-x11') -##### SRPMs ##### -# Different file size due to the signature of the source code tarbz archive -addFilter(r'file-size-mismatch') - -addFilter(r'(invalid-url) Source*') diff --git a/icecat.spec b/icecat.spec index 5c9284f..d79f640 100644 --- a/icecat.spec +++ b/icecat.spec @@ -300,8 +300,8 @@ Extensions included to this version of IceCat: Stallman's article The JavaScript Trap * HTTPS Everywhere - HTTPS Everywhere is an extension that encrypts your communications with many major websites, - making your browsing more secure + HTTPS Everywhere is an extension that encrypts your communications with + many major websites, making your browsing more secure * Tor™ Browser Button Simple TOR network integration @@ -316,14 +316,14 @@ Summary: GNU IceCat X11 launcher Requires: %{name} %description x11 The %{name}-x11 package contains launcher and desktop file -to run GNU IceCat natively on X11. +to run GNU IceCat native on X11. %else %package wayland Summary: GNU IceCat Wayland launcher Requires: %{name} %description wayland The icecat-wayland package contains launcher and desktop file -to run GNU IceCat natively on Wayland. +to run GNU IceCat native on Wayland. %endif %prep @@ -648,7 +648,7 @@ desktop-file-install --dir $RPM_BUILD_ROOT%{_datadir}/applications %{SOURCE14} rm -rf $RPM_BUILD_ROOT%{_bindir}/%{name} %{__sed} -e 's/__DEFAULT_WAYLAND__/%{wayland_default}/' \ - -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE13} > %{buildroot}%{_bindir}/%{name} + -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE13} > %{buildroot}%{_bindir}/%{name} chmod 755 %{buildroot}%{_bindir}/%{name} %if 0%{?wayland_backend_default} From 035510be6dd6a462c0f4a0bf790c1f8abafc3f6a Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 9 Nov 2019 15:39:09 +0100 Subject: [PATCH 074/473] Build release 68.2.0-gnu2 --- .gitignore | 1 + icecat.appdata.xml | 8 -------- icecat.spec | 23 ++++++++++------------- sources | 2 +- 4 files changed, 12 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 654d0b0..ce0d722 100644 --- a/.gitignore +++ b/.gitignore @@ -92,3 +92,4 @@ /icecat-68.1.0-langpacks.tar.gz /icecat-68.2.0-gnu1.tar.bz2 /icecat-68.2.0-langpacks.tar.gz +/icecat-68.2.0-gnu2.tar.bz2 diff --git a/icecat.appdata.xml b/icecat.appdata.xml index 686c9e7..c5eda54 100644 --- a/icecat.appdata.xml +++ b/icecat.appdata.xml @@ -49,17 +49,9 @@ data needed during startup.
  • - Tor™ Browser Button - Simple TOR network integration (requires running TOR separately at the operating system level) -
  • -
  • Searxes Third-party Request Blocker
  • -
  • - View Tube - Watch videos from video sharing websites with extra options -
  • http://www.gnu.org/software/gnuzilla/ diff --git a/icecat.spec b/icecat.spec index d79f640..3fa1725 100644 --- a/icecat.spec +++ b/icecat.spec @@ -44,9 +44,9 @@ %global system_nss 1 %if 0%{?system_nss} -%global nspr_version 4.19 +%global nspr_version 4.21 %global nspr_build_version %{nspr_version} -%global nss_version 3.40.1 +%global nss_version 3.45 %global nss_build_version %{nss_version} %endif @@ -54,11 +54,7 @@ %bcond_without pulseaudio %bcond_without jack -%if 0%{?fedora} > 29 -%global with_vpx 0 -%else %global with_vpx 1 -%endif %if 0%{?fedora} > 30 %global wayland_backend_default 1 @@ -80,11 +76,11 @@ ExcludeArch: %{arm} ExcludeArch: s390x # Set new source-code build version -%global gnu_ver gnu1 +%global gnu_ver gnu2 Name: icecat Version: 68.2.0 -Release: 1.%{gnu_ver}%{?dist} +Release: 2.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -284,7 +280,7 @@ Requires: fedora-bookmarks Suggests: mozilla-ublock-origin Provides: webclient -Provides: mozilla-https-everywhere = 20190131 +Provides: mozilla-https-everywhere = 20191107 %description GNUZilla Icecat is a fully-free fork of Mozilla Firefox ESR. @@ -303,10 +299,6 @@ Extensions included to this version of IceCat: HTTPS Everywhere is an extension that encrypts your communications with many major websites, making your browsing more secure - * Tor™ Browser Button - Simple TOR network integration - (requires running TOR separately at the operating system level) - * Searxes Third-party Request Blocker @@ -813,6 +805,11 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Fri Nov 08 2019 Antonio Trande - 68.2.0-2.gnu2 +- Build release 68.2.0-gnu2 +- HTTPS-Everywhere 2019_11_7 +- Use always system vpx (Fedora 30+) + * Tue Oct 22 2019 Antonio Trande - 68.2.0-1.gnu1 - Mozilla release 68.2.0 diff --git a/sources b/sources index c867c07..53c7dd8 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = 2daac8505b71c9672020b6d407f8ec826cc978629a2e44857f5e80a8cedc79162aea2fb01179683542e505148249827523e59e58e9c54ab0d298c5d07a555f10 -SHA512 (icecat-68.2.0-gnu1.tar.bz2) = b478af0c0c618108e5995f857eda44da0d33c83bc19870d020f25177a35235d3353af3257b60435dd6a1b8721728537de2f06e5da80ed260c56afac40012f511 +SHA512 (icecat-68.2.0-gnu2.tar.bz2) = 1db3e55f774b30552cd7bf94de1ebe27e8ceedcac349f2e7419626d818aeaff53de2257064a79070a9324c6635b417f74b33e482d2c4d860f11c9b22dce4949d SHA512 (icecat-68.2.0-langpacks.tar.gz) = a13a29071114438795c0a6c8bf5bd2cecc50e18a0d9298641cacc27989bfc1613c0632b66da71895cc48db76a1e7e5b10cdccd96a262f4af9d5e6844461a4c7c SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From e4f3aeecf8f94166e91589e2dcd60037a4ebab82 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 9 Nov 2019 18:15:31 +0100 Subject: [PATCH 075/473] Patched for Mozilla bug #1556602 --- icecat.spec | 3 + mozilla-1556602.patch | 1154 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1157 insertions(+) create mode 100644 mozilla-1556602.patch diff --git a/icecat.spec b/icecat.spec index 3fa1725..68da9e8 100644 --- a/icecat.spec +++ b/icecat.spec @@ -164,6 +164,7 @@ Patch226: rhbz-1354671.patch #Patch413: mozilla-1353817.patch Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch Patch417: bug1375074-save-restore-x28.patch +Patch418: mozilla-1556602.patch # Fix crash on ppc64le (mozilla#1512162) Patch423: mozilla-1512162.patch @@ -372,6 +373,7 @@ tar -xf %{SOURCE5} %ifarch ppc64 ppc64le #%%patch423 -p1 -b .1512162 %endif +%patch418 -p1 -b .mozilla-1556602 %patch424 -p1 -b .mozilla-1566876-webrtc-ind %patch425 -p1 -b .mozilla-1568569 @@ -809,6 +811,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Build release 68.2.0-gnu2 - HTTPS-Everywhere 2019_11_7 - Use always system vpx (Fedora 30+) +- Patched for Mozilla bug #1556602 * Tue Oct 22 2019 Antonio Trande - 68.2.0-1.gnu1 - Mozilla release 68.2.0 diff --git a/mozilla-1556602.patch b/mozilla-1556602.patch new file mode 100644 index 0000000..d3f07bf --- /dev/null +++ b/mozilla-1556602.patch @@ -0,0 +1,1154 @@ + +# HG changeset patch +# User Emilio Cobos Álvarez +# Date 1560893536 0 +# Node ID 046dd0da3b8e606ae33895248cd41e4ef03a4fcc +# Parent 8567a308ac7a8e2087903aedd1d92032c9c7eb60 +Bug 1556602 - Fix various warnings with rust 1.37 nightly. r=froydnj + +In particular: + + * trait objects without an explicit `dyn` are deprecated + * `...` range patterns are deprecated + +I think these shouldn't really warn by default and should be clippy / opt-in +lints, but anyway, doesn't hurt. + +Differential Revision: https://phabricator.services.mozilla.com/D35135 + +diff --git a/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/lib.rs b/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/lib.rs +--- a/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/lib.rs ++++ b/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/lib.rs +@@ -180,17 +180,17 @@ pub unsafe extern "C" fn sdp_add_media_s + } + }; + + // Check that the provided address type is valid. The rust parser will find out + // on his own which address type was provided + match addr_type { + // enum AddrType { kAddrTypeNone, kIPv4, kIPv6 }; + // kAddrTypeNone is explicitly not covered as it is an 'invalid' flag +- 1...2 => (), ++ 1 | 2 => (), + _ => { + return NS_ERROR_INVALID_ARG; + } + } + + match (*session).add_media(media_type, direction, port as u32, protocol, addr_str) { + Ok(_) => NS_OK, + Err(_) => NS_ERROR_INVALID_ARG +diff --git a/servo/components/malloc_size_of/lib.rs b/servo/components/malloc_size_of/lib.rs +--- a/servo/components/malloc_size_of/lib.rs ++++ b/servo/components/malloc_size_of/lib.rs +@@ -87,17 +87,17 @@ use std::ops::Range; + use std::ops::{Deref, DerefMut}; + use std::os::raw::c_void; + use void::Void; + + /// A C function that takes a pointer to a heap allocation and returns its size. + type VoidPtrToSizeFn = unsafe extern "C" fn(ptr: *const c_void) -> usize; + + /// A closure implementing a stateful predicate on pointers. +-type VoidPtrToBoolFnMut = FnMut(*const c_void) -> bool; ++type VoidPtrToBoolFnMut = dyn FnMut(*const c_void) -> bool; + + /// Operations used when measuring heap usage of data structures. + pub struct MallocSizeOfOps { + /// A function that returns the size of a heap allocation. + size_of_op: VoidPtrToSizeFn, + + /// Like `size_of_op`, but can take an interior pointer. Optional because + /// not all allocators support this operation. If it's not provided, some +diff --git a/servo/components/selectors/context.rs b/servo/components/selectors/context.rs +--- a/servo/components/selectors/context.rs ++++ b/servo/components/selectors/context.rs +@@ -129,17 +129,17 @@ where + /// MatchingContext immutable again. + nesting_level: usize, + + /// Whether we're inside a negation or not. + in_negation: bool, + + /// An optional hook function for checking whether a pseudo-element + /// should match when matching_mode is ForStatelessPseudoElement. +- pub pseudo_element_matching_fn: Option<&'a Fn(&Impl::PseudoElement) -> bool>, ++ pub pseudo_element_matching_fn: Option<&'a dyn Fn(&Impl::PseudoElement) -> bool>, + + /// Extra implementation-dependent matching data. + pub extra_data: Impl::ExtraMatchingData, + + quirks_mode: QuirksMode, + classes_and_ids_case_sensitivity: CaseSensitivity, + _impl: ::std::marker::PhantomData, + } +diff --git a/servo/components/style/animation.rs b/servo/components/style/animation.rs +--- a/servo/components/style/animation.rs ++++ b/servo/components/style/animation.rs +@@ -483,17 +483,17 @@ pub fn start_transitions_if_applicable( + had_animations + } + + fn compute_style_for_animation_step( + context: &SharedStyleContext, + step: &KeyframesStep, + previous_style: &ComputedValues, + style_from_cascade: &Arc, +- font_metrics_provider: &FontMetricsProvider, ++ font_metrics_provider: &dyn FontMetricsProvider, + ) -> Arc + where + E: TElement, + { + match step.value { + KeyframesStepValue::ComputedValues => style_from_cascade.clone(), + KeyframesStepValue::Declarations { + block: ref declarations, +@@ -668,17 +668,17 @@ pub enum AnimationUpdate { + /// transitions in response to a style change (that is, + /// consider_starting_transitions + maybe_start_animations, but handling + /// canceled animations, duration changes, etc, there instead of here), and this + /// function should be only about the style update in response of a transition. + pub fn update_style_for_animation( + context: &SharedStyleContext, + animation: &Animation, + style: &mut Arc, +- font_metrics_provider: &FontMetricsProvider, ++ font_metrics_provider: &dyn FontMetricsProvider, + ) -> AnimationUpdate + where + E: TElement, + { + debug!("update_style_for_animation: {:?}", animation); + debug_assert!(!animation.is_expired()); + + match *animation { +diff --git a/servo/components/style/parser.rs b/servo/components/style/parser.rs +--- a/servo/components/style/parser.rs ++++ b/servo/components/style/parser.rs +@@ -46,33 +46,33 @@ pub struct ParserContext<'a> { + pub url_data: &'a UrlExtraData, + /// The current rule type, if any. + pub rule_type: Option, + /// The mode to use when parsing. + pub parsing_mode: ParsingMode, + /// The quirks mode of this stylesheet. + pub quirks_mode: QuirksMode, + /// The active error reporter, or none if error reporting is disabled. +- error_reporter: Option<&'a ParseErrorReporter>, ++ error_reporter: Option<&'a dyn ParseErrorReporter>, + /// The currently active namespaces. + pub namespaces: Option<&'a Namespaces>, + /// The use counters we want to record while parsing style rules, if any. + pub use_counters: Option<&'a UseCounters>, + } + + impl<'a> ParserContext<'a> { + /// Create a parser context. + #[inline] + pub fn new( + stylesheet_origin: Origin, + url_data: &'a UrlExtraData, + rule_type: Option, + parsing_mode: ParsingMode, + quirks_mode: QuirksMode, +- error_reporter: Option<&'a ParseErrorReporter>, ++ error_reporter: Option<&'a dyn ParseErrorReporter>, + use_counters: Option<&'a UseCounters>, + ) -> Self { + Self { + stylesheet_origin, + url_data, + rule_type, + parsing_mode, + quirks_mode, +@@ -84,17 +84,17 @@ impl<'a> ParserContext<'a> { + + /// Create a parser context for on-the-fly parsing in CSSOM + #[inline] + pub fn new_for_cssom( + url_data: &'a UrlExtraData, + rule_type: Option, + parsing_mode: ParsingMode, + quirks_mode: QuirksMode, +- error_reporter: Option<&'a ParseErrorReporter>, ++ error_reporter: Option<&'a dyn ParseErrorReporter>, + use_counters: Option<&'a UseCounters>, + ) -> Self { + Self::new( + Origin::Author, + url_data, + rule_type, + parsing_mode, + quirks_mode, +diff --git a/servo/components/style/properties/cascade.rs b/servo/components/style/properties/cascade.rs +--- a/servo/components/style/properties/cascade.rs ++++ b/servo/components/style/properties/cascade.rs +@@ -77,17 +77,17 @@ pub fn cascade( + device: &Device, + pseudo: Option<&PseudoElement>, + rule_node: &StrongRuleNode, + guards: &StylesheetGuards, + parent_style: Option<&ComputedValues>, + parent_style_ignoring_first_line: Option<&ComputedValues>, + layout_parent_style: Option<&ComputedValues>, + visited_rules: Option<&StrongRuleNode>, +- font_metrics_provider: &FontMetricsProvider, ++ font_metrics_provider: &dyn FontMetricsProvider, + quirks_mode: QuirksMode, + rule_cache: Option<&RuleCache>, + rule_cache_conditions: &mut RuleCacheConditions, + element: Option, + ) -> Arc + where + E: TElement, + { +@@ -111,17 +111,17 @@ where + fn cascade_rules( + device: &Device, + pseudo: Option<&PseudoElement>, + rule_node: &StrongRuleNode, + guards: &StylesheetGuards, + parent_style: Option<&ComputedValues>, + parent_style_ignoring_first_line: Option<&ComputedValues>, + layout_parent_style: Option<&ComputedValues>, +- font_metrics_provider: &FontMetricsProvider, ++ font_metrics_provider: &dyn FontMetricsProvider, + cascade_mode: CascadeMode, + quirks_mode: QuirksMode, + rule_cache: Option<&RuleCache>, + rule_cache_conditions: &mut RuleCacheConditions, + element: Option, + ) -> Arc + where + E: TElement, +@@ -208,17 +208,17 @@ pub fn apply_declarations<'a, E, F, I>( + device: &Device, + pseudo: Option<&PseudoElement>, + rules: &StrongRuleNode, + guards: &StylesheetGuards, + iter_declarations: F, + parent_style: Option<&ComputedValues>, + parent_style_ignoring_first_line: Option<&ComputedValues>, + layout_parent_style: Option<&ComputedValues>, +- font_metrics_provider: &FontMetricsProvider, ++ font_metrics_provider: &dyn FontMetricsProvider, + cascade_mode: CascadeMode, + quirks_mode: QuirksMode, + rule_cache: Option<&RuleCache>, + rule_cache_conditions: &mut RuleCacheConditions, + element: Option, + ) -> Arc + where + E: TElement, +diff --git a/servo/components/style/properties/declaration_block.rs b/servo/components/style/properties/declaration_block.rs +--- a/servo/components/style/properties/declaration_block.rs ++++ b/servo/components/style/properties/declaration_block.rs +@@ -1194,17 +1194,17 @@ where + /// A helper to parse the style attribute of an element, in order for this to be + /// shared between Servo and Gecko. + /// + /// Inline because we call this cross-crate. + #[inline] + pub fn parse_style_attribute( + input: &str, + url_data: &UrlExtraData, +- error_reporter: Option<&ParseErrorReporter>, ++ error_reporter: Option<&dyn ParseErrorReporter>, + quirks_mode: QuirksMode, + ) -> PropertyDeclarationBlock { + let context = ParserContext::new( + Origin::Author, + url_data, + Some(CssRuleType::Style), + ParsingMode::DEFAULT, + quirks_mode, +@@ -1221,17 +1221,17 @@ pub fn parse_style_attribute( + /// + /// This does not attempt to parse !important at all. + #[inline] + pub fn parse_one_declaration_into( + declarations: &mut SourcePropertyDeclaration, + id: PropertyId, + input: &str, + url_data: &UrlExtraData, +- error_reporter: Option<&ParseErrorReporter>, ++ error_reporter: Option<&dyn ParseErrorReporter>, + parsing_mode: ParsingMode, + quirks_mode: QuirksMode + ) -> Result<(), ()> { + let context = ParserContext::new( + Origin::Author, + url_data, + Some(CssRuleType::Style), + parsing_mode, +diff --git a/servo/components/style/str.rs b/servo/components/style/str.rs +--- a/servo/components/style/str.rs ++++ b/servo/components/style/str.rs +@@ -55,17 +55,17 @@ pub fn split_html_space_chars<'a>( + #[inline] + pub fn split_commas<'a>(s: &'a str) -> Filter, fn(&&str) -> bool> { + s.split(',').filter(not_empty as fn(&&str) -> bool) + } + + /// Character is ascii digit + pub fn is_ascii_digit(c: &char) -> bool { + match *c { +- '0'...'9' => true, ++ '0'..='9' => true, + _ => false, + } + } + + fn is_decimal_point(c: char) -> bool { + c == '.' + } + +@@ -156,17 +156,17 @@ where + /// Returns true if a given string has a given prefix with case-insensitive match. + pub fn starts_with_ignore_ascii_case(string: &str, prefix: &str) -> bool { + string.len() >= prefix.len() && + string.as_bytes()[0..prefix.len()].eq_ignore_ascii_case(prefix.as_bytes()) + } + + /// Returns an ascii lowercase version of a string, only allocating if needed. + pub fn string_as_ascii_lowercase<'a>(input: &'a str) -> Cow<'a, str> { +- if input.bytes().any(|c| matches!(c, b'A'...b'Z')) { ++ if input.bytes().any(|c| matches!(c, b'A'..=b'Z')) { + input.to_ascii_lowercase().into() + } else { + // Already ascii lowercase. + Cow::Borrowed(input) + } + } + + /// To avoid accidentally instantiating multiple monomorphizations of large +diff --git a/servo/components/style/stylesheets/mod.rs b/servo/components/style/stylesheets/mod.rs +--- a/servo/components/style/stylesheets/mod.rs ++++ b/servo/components/style/stylesheets/mod.rs +@@ -347,17 +347,17 @@ impl CssRule { + /// + /// Input state is None for a nested rule + pub fn parse( + css: &str, + insert_rule_context: InsertRuleContext, + parent_stylesheet_contents: &StylesheetContents, + shared_lock: &SharedRwLock, + state: State, +- loader: Option<&StylesheetLoader>, ++ loader: Option<&dyn StylesheetLoader>, + ) -> Result { + let url_data = parent_stylesheet_contents.url_data.read(); + let context = ParserContext::new( + parent_stylesheet_contents.origin, + &url_data, + None, + ParsingMode::DEFAULT, + parent_stylesheet_contents.quirks_mode, +diff --git a/servo/components/style/stylesheets/rule_list.rs b/servo/components/style/stylesheets/rule_list.rs +--- a/servo/components/style/stylesheets/rule_list.rs ++++ b/servo/components/style/stylesheets/rule_list.rs +@@ -122,29 +122,29 @@ pub trait CssRulesHelpers { + /// instead, but that seems overkill. + fn insert_rule( + &self, + lock: &SharedRwLock, + rule: &str, + parent_stylesheet_contents: &StylesheetContents, + index: usize, + nested: bool, +- loader: Option<&StylesheetLoader>, ++ loader: Option<&dyn StylesheetLoader>, + ) -> Result; + } + + impl CssRulesHelpers for RawOffsetArc> { + fn insert_rule( + &self, + lock: &SharedRwLock, + rule: &str, + parent_stylesheet_contents: &StylesheetContents, + index: usize, + nested: bool, +- loader: Option<&StylesheetLoader>, ++ loader: Option<&dyn StylesheetLoader>, + ) -> Result { + let new_rule = { + let read_guard = lock.read(); + let rules = self.read_with(&read_guard); + + // Step 1, 2 + if index > rules.0.len() { + return Err(RulesMutateError::IndexSize); +diff --git a/servo/components/style/stylesheets/rule_parser.rs b/servo/components/style/stylesheets/rule_parser.rs +--- a/servo/components/style/stylesheets/rule_parser.rs ++++ b/servo/components/style/stylesheets/rule_parser.rs +@@ -39,17 +39,17 @@ pub struct InsertRuleContext<'a> { + pub index: usize, + } + + /// The parser for the top-level rules in a stylesheet. + pub struct TopLevelRuleParser<'a> { + /// A reference to the lock we need to use to create rules. + pub shared_lock: &'a SharedRwLock, + /// A reference to a stylesheet loader if applicable, for `@import` rules. +- pub loader: Option<&'a StylesheetLoader>, ++ pub loader: Option<&'a dyn StylesheetLoader>, + /// The top-level parser context. + /// + /// This won't contain any namespaces, and only nested parsers created with + /// `ParserContext::new_with_rule_type` will. + pub context: ParserContext<'a>, + /// The current state of the parser. + pub state: State, + /// Whether we have tried to parse was invalid due to being in the wrong +diff --git a/servo/components/style/stylesheets/stylesheet.rs b/servo/components/style/stylesheets/stylesheet.rs +--- a/servo/components/style/stylesheets/stylesheet.rs ++++ b/servo/components/style/stylesheets/stylesheet.rs +@@ -71,18 +71,18 @@ pub struct StylesheetContents { + impl StylesheetContents { + /// Parse a given CSS string, with a given url-data, origin, and + /// quirks mode. + pub fn from_str( + css: &str, + url_data: UrlExtraData, + origin: Origin, + shared_lock: &SharedRwLock, +- stylesheet_loader: Option<&StylesheetLoader>, +- error_reporter: Option<&ParseErrorReporter>, ++ stylesheet_loader: Option<&dyn StylesheetLoader>, ++ error_reporter: Option<&dyn ParseErrorReporter>, + quirks_mode: QuirksMode, + line_number_offset: u32, + use_counters: Option<&UseCounters>, + ) -> Self { + let namespaces = RwLock::new(Namespaces::default()); + let (rules, source_map_url, source_url) = Stylesheet::parse_rules( + css, + &url_data, +@@ -338,18 +338,18 @@ impl StylesheetInDocument for DocumentSt + } + + impl Stylesheet { + /// Updates an empty stylesheet from a given string of text. + pub fn update_from_str( + existing: &Stylesheet, + css: &str, + url_data: UrlExtraData, +- stylesheet_loader: Option<&StylesheetLoader>, +- error_reporter: Option<&ParseErrorReporter>, ++ stylesheet_loader: Option<&dyn StylesheetLoader>, ++ error_reporter: Option<&dyn ParseErrorReporter>, + line_number_offset: u32, + ) { + let namespaces = RwLock::new(Namespaces::default()); + + // FIXME: Consider adding use counters to Servo? + let (rules, source_map_url, source_url) = Self::parse_rules( + css, + &url_data, +@@ -377,18 +377,18 @@ impl Stylesheet { + } + + fn parse_rules( + css: &str, + url_data: &UrlExtraData, + origin: Origin, + namespaces: &mut Namespaces, + shared_lock: &SharedRwLock, +- stylesheet_loader: Option<&StylesheetLoader>, +- error_reporter: Option<&ParseErrorReporter>, ++ stylesheet_loader: Option<&dyn StylesheetLoader>, ++ error_reporter: Option<&dyn ParseErrorReporter>, + quirks_mode: QuirksMode, + line_number_offset: u32, + use_counters: Option<&UseCounters>, + ) -> (Vec, Option, Option) { + let mut rules = Vec::new(); + let mut input = ParserInput::new_with_line_number_offset(css, line_number_offset); + let mut input = Parser::new(&mut input); + +@@ -445,18 +445,18 @@ impl Stylesheet { + /// Effectively creates a new stylesheet and forwards the hard work to + /// `Stylesheet::update_from_str`. + pub fn from_str( + css: &str, + url_data: UrlExtraData, + origin: Origin, + media: Arc>, + shared_lock: SharedRwLock, +- stylesheet_loader: Option<&StylesheetLoader>, +- error_reporter: Option<&ParseErrorReporter>, ++ stylesheet_loader: Option<&dyn StylesheetLoader>, ++ error_reporter: Option<&dyn ParseErrorReporter>, + quirks_mode: QuirksMode, + line_number_offset: u32, + ) -> Self { + // FIXME: Consider adding use counters to Servo? + let contents = StylesheetContents::from_str( + css, + url_data, + origin, +diff --git a/servo/components/style/stylist.rs b/servo/components/style/stylist.rs +--- a/servo/components/style/stylist.rs ++++ b/servo/components/style/stylist.rs +@@ -646,17 +646,17 @@ impl Stylist { + + /// Computes the style for a given "precomputed" pseudo-element, taking the + /// universal rules and applying them. + pub fn precomputed_values_for_pseudo( + &self, + guards: &StylesheetGuards, + pseudo: &PseudoElement, + parent: Option<&ComputedValues>, +- font_metrics: &FontMetricsProvider, ++ font_metrics: &dyn FontMetricsProvider, + ) -> Arc + where + E: TElement, + { + debug_assert!(pseudo.is_precomputed()); + + let rule_node = self.rule_node_for_precomputed_pseudo(guards, pseudo, None); + +@@ -674,17 +674,17 @@ impl Stylist { + /// + /// TODO(emilio): The type parameter could go away with a void type + /// implementing TElement. + pub fn precomputed_values_for_pseudo_with_rule_node( + &self, + guards: &StylesheetGuards, + pseudo: &PseudoElement, + parent: Option<&ComputedValues>, +- font_metrics: &FontMetricsProvider, ++ font_metrics: &dyn FontMetricsProvider, + rules: StrongRuleNode, + ) -> Arc + where + E: TElement, + { + self.compute_pseudo_element_style_with_inputs::( + CascadeInputs { + rules: Some(rules), +@@ -769,18 +769,18 @@ impl Stylist { + pub fn lazily_compute_pseudo_element_style( + &self, + guards: &StylesheetGuards, + element: E, + pseudo: &PseudoElement, + rule_inclusion: RuleInclusion, + parent_style: &ComputedValues, + is_probe: bool, +- font_metrics: &FontMetricsProvider, +- matching_fn: Option<&Fn(&PseudoElement) -> bool>, ++ font_metrics: &dyn FontMetricsProvider, ++ matching_fn: Option<&dyn Fn(&PseudoElement) -> bool>, + ) -> Option> + where + E: TElement, + { + let cascade_inputs = self.lazy_pseudo_rules( + guards, + element, + parent_style, +@@ -805,17 +805,17 @@ impl Stylist { + /// selector matching for eager pseudo-elements when we need to recompute + /// their style with a new parent style. + pub fn compute_pseudo_element_style_with_inputs( + &self, + inputs: CascadeInputs, + pseudo: &PseudoElement, + guards: &StylesheetGuards, + parent_style: Option<&ComputedValues>, +- font_metrics: &FontMetricsProvider, ++ font_metrics: &dyn FontMetricsProvider, + element: Option, + ) -> Arc + where + E: TElement, + { + // FIXME(emilio): The lack of layout_parent_style here could be + // worrying, but we're probably dropping the display fixup for + // pseudos other than before and after, so it's probably ok. +@@ -858,17 +858,17 @@ impl Stylist { + &self, + element: Option, + pseudo: Option<&PseudoElement>, + inputs: CascadeInputs, + guards: &StylesheetGuards, + parent_style: Option<&ComputedValues>, + parent_style_ignoring_first_line: Option<&ComputedValues>, + layout_parent_style: Option<&ComputedValues>, +- font_metrics: &FontMetricsProvider, ++ font_metrics: &dyn FontMetricsProvider, + rule_cache: Option<&RuleCache>, + rule_cache_conditions: &mut RuleCacheConditions, + ) -> Arc + where + E: TElement, + { + debug_assert!(pseudo.is_some() || element.is_some(), "Huh?"); + +@@ -915,17 +915,17 @@ impl Stylist { + fn lazy_pseudo_rules( + &self, + guards: &StylesheetGuards, + element: E, + parent_style: &ComputedValues, + pseudo: &PseudoElement, + is_probe: bool, + rule_inclusion: RuleInclusion, +- matching_fn: Option<&Fn(&PseudoElement) -> bool>, ++ matching_fn: Option<&dyn Fn(&PseudoElement) -> bool>, + ) -> Option + where + E: TElement, + { + debug_assert!(pseudo.is_lazy()); + + // Apply the selector flags. We should be in sequential mode + // already, so we can directly apply the parent flags. +diff --git a/servo/components/style/values/computed/mod.rs b/servo/components/style/values/computed/mod.rs +--- a/servo/components/style/values/computed/mod.rs ++++ b/servo/components/style/values/computed/mod.rs +@@ -142,17 +142,17 @@ pub struct Context<'a> { + /// painful. + /// + /// TODO(emilio): Make constructors for Context, and drop this. + #[cfg(feature = "servo")] + pub cached_system_font: Option<()>, + + /// A font metrics provider, used to access font metrics to implement + /// font-relative units. +- pub font_metrics_provider: &'a FontMetricsProvider, ++ pub font_metrics_provider: &'a dyn FontMetricsProvider, + + /// Whether or not we are computing the media list in a media query + pub in_media_query: bool, + + /// The quirks mode of this context. + pub quirks_mode: QuirksMode, + + /// Whether this computation is being done for a SMIL animation. +diff --git a/servo/components/style_traits/specified_value_info.rs b/servo/components/style_traits/specified_value_info.rs +--- a/servo/components/style_traits/specified_value_info.rs ++++ b/servo/components/style_traits/specified_value_info.rs +@@ -22,17 +22,17 @@ pub mod CssType { + pub const COLOR: u8 = 1 << 0; + /// + pub const GRADIENT: u8 = 1 << 1; + /// + pub const TIMING_FUNCTION: u8 = 1 << 2; + } + + /// See SpecifiedValueInfo::collect_completion_keywords. +-pub type KeywordsCollectFn<'a> = &'a mut FnMut(&[&'static str]); ++pub type KeywordsCollectFn<'a> = &'a mut dyn FnMut(&[&'static str]); + + /// Information of values of a given specified value type. + /// + /// This trait is derivable with `#[derive(SpecifiedValueInfo)]`. + /// + /// The algorithm traverses the type definition. For `SUPPORTED_TYPES`, + /// it puts an or'ed value of `SUPPORTED_TYPES` of all types it finds. + /// For `collect_completion_keywords`, it recursively invokes this +diff --git a/servo/ports/geckolib/glue.rs b/servo/ports/geckolib/glue.rs +--- a/servo/ports/geckolib/glue.rs ++++ b/servo/ports/geckolib/glue.rs +@@ -1378,28 +1378,28 @@ pub extern "C" fn Servo_StyleSheet_FromU + loader, + stylesheet, + load_data, + reusable_sheets, + )) + }; + + // FIXME(emilio): loader.as_ref() doesn't typecheck for some reason? +- let loader: Option<&StyleStylesheetLoader> = match loader { ++ let loader: Option<&dyn StyleStylesheetLoader> = match loader { + None => None, + Some(ref s) => Some(s), + }; + + Arc::new(StylesheetContents::from_str( + input, + url_data.clone(), + mode_to_origin(mode), + &global_style_data.shared_lock, + loader, +- reporter.as_ref().map(|r| r as &ParseErrorReporter), ++ reporter.as_ref().map(|r| r as &dyn ParseErrorReporter), + quirks_mode.into(), + line_number_offset, + use_counters, + )) + .into_strong() + } + + #[no_mangle] +@@ -1903,17 +1903,17 @@ pub extern "C" fn Servo_CssRules_InsertR + loader, + gecko_stylesheet, + ptr::null_mut(), + ptr::null_mut(), + )) + }; + let loader = loader + .as_ref() +- .map(|loader| loader as &StyleStylesheetLoader); ++ .map(|loader| loader as &dyn StyleStylesheetLoader); + let rule = unsafe { rule.as_ref().unwrap().as_str_unchecked() }; + + let global_style_data = &*GLOBAL_STYLE_DATA; + let contents = StylesheetContents::as_arc(&contents); + let result = Locked::::as_arc(&rules).insert_rule( + &global_style_data.shared_lock, + rule, + contents, +@@ -3583,17 +3583,17 @@ fn get_pseudo_style( + guard: &SharedRwLockReadGuard, + element: GeckoElement, + pseudo: &PseudoElement, + rule_inclusion: RuleInclusion, + styles: &ElementStyles, + inherited_styles: Option<&ComputedValues>, + doc_data: &PerDocumentStyleDataImpl, + is_probe: bool, +- matching_func: Option<&Fn(&PseudoElement) -> bool>, ++ matching_func: Option<&dyn Fn(&PseudoElement) -> bool>, + ) -> Option> { + let style = match pseudo.cascade_type() { + PseudoElementCascadeType::Eager => { + match *pseudo { + PseudoElement::FirstLetter => { + styles.pseudos.get(&pseudo).map(|pseudo_styles| { + // inherited_styles can be None when doing lazy resolution + // (e.g. for computed style) or when probing. In that case +@@ -3772,17 +3772,17 @@ pub unsafe extern "C" fn Servo_StyleSet_ + + fn parse_property_into( + declarations: &mut SourcePropertyDeclaration, + property_id: PropertyId, + value: *const nsACString, + data: *mut URLExtraData, + parsing_mode: structs::ParsingMode, + quirks_mode: QuirksMode, +- reporter: Option<&ParseErrorReporter>, ++ reporter: Option<&dyn ParseErrorReporter>, + ) -> Result<(), ()> { + let value = unsafe { value.as_ref().unwrap().as_str_unchecked() }; + let url_data = unsafe { UrlExtraData::from_ptr_ref(&data) }; + let parsing_mode = ParsingMode::from_bits_truncate(parsing_mode); + + parse_one_declaration_into( + declarations, + property_id, +@@ -3809,17 +3809,17 @@ pub extern "C" fn Servo_ParseProperty( + let reporter = ErrorReporter::new(ptr::null_mut(), loader, data); + let result = parse_property_into( + &mut declarations, + id, + value, + data, + parsing_mode, + quirks_mode.into(), +- reporter.as_ref().map(|r| r as &ParseErrorReporter), ++ reporter.as_ref().map(|r| r as &dyn ParseErrorReporter), + ); + + match result { + Ok(()) => { + let global_style_data = &*GLOBAL_STYLE_DATA; + let mut block = PropertyDeclarationBlock::new(); + block.extend(declarations.drain(), Importance::Normal); + Arc::new(global_style_data.shared_lock.wrap(block)).into_strong() +@@ -3961,17 +3961,17 @@ pub unsafe extern "C" fn Servo_ParseStyl + ) -> Strong { + let global_style_data = &*GLOBAL_STYLE_DATA; + let value = (*data).as_str_unchecked(); + let reporter = ErrorReporter::new(ptr::null_mut(), loader, raw_extra_data); + let url_data = UrlExtraData::from_ptr_ref(&raw_extra_data); + Arc::new(global_style_data.shared_lock.wrap(parse_style_attribute( + value, + url_data, +- reporter.as_ref().map(|r| r as &ParseErrorReporter), ++ reporter.as_ref().map(|r| r as &dyn ParseErrorReporter), + quirks_mode.into(), + ))) + .into_strong() + } + + #[no_mangle] + pub extern "C" fn Servo_DeclarationBlock_CreateEmpty() -> Strong { + let global_style_data = &*GLOBAL_STYLE_DATA; +@@ -4190,17 +4190,17 @@ fn set_property( + let reporter = ErrorReporter::new(ptr::null_mut(), loader, data); + let result = parse_property_into( + &mut source_declarations, + property_id, + value, + data, + parsing_mode, + quirks_mode, +- reporter.as_ref().map(|r| r as &ParseErrorReporter), ++ reporter.as_ref().map(|r| r as &dyn ParseErrorReporter), + ); + + if result.is_err() { + return false; + } + + let importance = if is_important { + Importance::Important +@@ -5224,17 +5224,17 @@ fn simulate_compute_values_failure(prope + + #[cfg(not(feature = "gecko_debug"))] + fn simulate_compute_values_failure(_: &PropertyValuePair) -> bool { + false + } + + fn create_context_for_animation<'a>( + per_doc_data: &'a PerDocumentStyleDataImpl, +- font_metrics_provider: &'a FontMetricsProvider, ++ font_metrics_provider: &'a dyn FontMetricsProvider, + style: &'a ComputedValues, + parent_style: Option<&'a ComputedValues>, + for_smil_animation: bool, + rule_cache_conditions: &'a mut RuleCacheConditions, + ) -> Context<'a> { + Context { + is_root_element: false, + builder: StyleBuilder::for_animation(per_doc_data.stylist.device(), style, parent_style), +@@ -6158,17 +6158,17 @@ pub unsafe extern "C" fn Servo_SelectorL + + #[no_mangle] + pub unsafe extern "C" fn Servo_SelectorList_Drop(list: *mut RawServoSelectorList) { + SelectorList::drop_ffi(list) + } + + fn parse_color( + value: &str, +- error_reporter: Option<&ParseErrorReporter>, ++ error_reporter: Option<&dyn ParseErrorReporter>, + ) -> Result { + let mut input = ParserInput::new(value); + let mut parser = Parser::new(&mut input); + let url_data = unsafe { dummy_url_data() }; + let context = ParserContext::new( + Origin::Author, + url_data, + Some(CssRuleType::Style), +@@ -6222,17 +6222,17 @@ pub extern "C" fn Servo_ComputeColor( + let value = unsafe { (*value).to_string() }; + let result_color = unsafe { result_color.as_mut().unwrap() }; + + let reporter = unsafe { loader.as_mut() }.and_then(|loader| { + // Make an ErrorReporter that will report errors as being "from DOM". + ErrorReporter::new(ptr::null_mut(), loader, ptr::null_mut()) + }); + +- match parse_color(&value, reporter.as_ref().map(|r| r as &ParseErrorReporter)) { ++ match parse_color(&value, reporter.as_ref().map(|r| r as &dyn ParseErrorReporter)) { + Ok(specified_color) => { + let computed_color = match raw_data { + Some(raw_data) => { + let data = PerDocumentStyleData::from_ffi(raw_data).borrow(); + let device = data.stylist.device(); + let quirks_mode = data.stylist.quirks_mode(); + Context::for_media_query_evaluation(device, quirks_mode, |context| { + specified_color.to_computed_color(Some(&context)) +diff --git a/testing/geckodriver/src/marionette.rs b/testing/geckodriver/src/marionette.rs +--- a/testing/geckodriver/src/marionette.rs ++++ b/testing/geckodriver/src/marionette.rs +@@ -1273,17 +1273,17 @@ impl MarionetteConnection { + ErrorKind::Other, + "EOF reading marionette message", + )) + } + 1 => buf[0] as char, + _ => panic!("Expected one byte got more"), + }; + match byte { +- '0'...'9' => { ++ '0'..='9' => { + bytes = bytes * 10; + bytes += byte as usize - '0' as usize; + } + ':' => break, + _ => {} + } + } + +diff --git a/testing/mozbase/rust/mozprofile/src/prefreader.rs b/testing/mozbase/rust/mozprofile/src/prefreader.rs +--- a/testing/mozbase/rust/mozprofile/src/prefreader.rs ++++ b/testing/mozbase/rust/mozprofile/src/prefreader.rs +@@ -9,17 +9,17 @@ use std::iter::Iterator; + use std::mem; + use std::ops::Deref; + use std::str; + + impl PrefReaderError { + fn new( + message: &'static str, + position: Position, +- parent: Option>, ++ parent: Option>, + ) -> PrefReaderError { + PrefReaderError { + message, + position, + parent, + } + } + } +@@ -34,17 +34,17 @@ impl fmt::Display for PrefReaderError { + } + } + + impl Error for PrefReaderError { + fn description(&self) -> &str { + self.message + } + +- fn cause(&self) -> Option<&Error> { ++ fn cause(&self) -> Option<&dyn Error> { + match self.parent { + None => None, + Some(ref cause) => Some(cause.deref()), + } + } + } + + impl From for PrefReaderError { +@@ -138,17 +138,17 @@ impl<'a> PrefToken<'a> { + } + } + } + + #[derive(Debug)] + pub struct PrefReaderError { + message: &'static str, + position: Position, +- parent: Option>, ++ parent: Option>, + } + + struct TokenData<'a> { + token_type: TokenType, + complete: bool, + position: Position, + data: Cow<'a, str>, + start_pos: usize, +@@ -353,19 +353,19 @@ impl<'a> PrefTokenizer<'a> { + + fn read_hex_escape(&mut self, hex_chars: isize, first: bool) -> Result { + let mut value = 0; + for _ in 0..hex_chars { + match self.get_char() { + Some(x) => { + value = value << 4; + match x { +- '0'...'9' => value += x as u32 - '0' as u32, +- 'a'...'f' => value += x as u32 - 'a' as u32, +- 'A'...'F' => value += x as u32 - 'A' as u32, ++ '0'..='9' => value += x as u32 - '0' as u32, ++ 'a'..='f' => value += x as u32 - 'a' as u32, ++ 'A'..='F' => value += x as u32 - 'A' as u32, + _ => { + return Err(PrefReaderError::new( + "Unexpected character in escape", + self.position, + None, + )) + } + } +@@ -589,17 +589,17 @@ impl<'a> PrefTokenizer<'a> { + token_data.start(&self, TokenType::String); + token_data.start_pos = self.pos + 1; + TokenizerState::SingleQuotedString + } + 't' | 'f' => { + self.unget_char(); + TokenizerState::Bool + } +- '0'...'9' | '-' | '+' => { ++ '0'..='9' | '-' | '+' => { + token_data.start(&self, TokenType::Int); + TokenizerState::Number + } + _ => { + return Err(PrefReaderError::new( + "Invalid character at start of function argument", + self.position, + None, +@@ -640,17 +640,17 @@ impl<'a> PrefTokenizer<'a> { + } + '\\' => { + self.consume_escape(&mut token_data)?; + TokenizerState::SingleQuotedString + } + _ => TokenizerState::SingleQuotedString, + }, + TokenizerState::Number => match c { +- '0'...'9' => TokenizerState::Number, ++ '0'..='9' => TokenizerState::Number, + ')' | ',' => { + token_data.end(&self.data, self.pos)?; + self.unget_char(); + self.next_state = Some(TokenizerState::AfterFunctionArg); + TokenizerState::Junk + } + x if PrefTokenizer::is_space(x) => { + token_data.end(&self.data, self.pos)?; +diff --git a/testing/mozbase/rust/mozrunner/src/bin/icecat-default-path.rs b/testing/mozbase/rust/mozrunner/src/bin/icecat-default-path.rs +--- a/testing/mozbase/rust/mozrunner/src/bin/icecat-default-path.rs ++++ b/testing/mozbase/rust/mozrunner/src/bin/icecat-default-path.rs +@@ -8,7 +8,7 @@ + .map(|x| (x.to_string_lossy().into_owned(), 0)) + .unwrap_or(("IceCat binary not found".to_owned(), 1)); + +- let mut writer: Box = match code { ++ let mut writer: Box = match code { + 0 => Box::new(std::io::stdout()), + _ => Box::new(std::io::stderr()) + }; +diff --git a/testing/mozbase/rust/mozrunner/src/runner.rs b/testing/mozbase/rust/mozrunner/src/runner.rs +--- a/testing/mozbase/rust/mozrunner/src/runner.rs ++++ b/testing/mozbase/rust/mozrunner/src/runner.rs +@@ -101,20 +101,20 @@ impl Error for RunnerError { + ErrorKind::NotFound => "no such file or directory", + _ => err.description(), + } + } + RunnerError::PrefReader(ref err) => err.description(), + } + } + +- fn cause(&self) -> Option<&Error> { ++ fn cause(&self) -> Option<&dyn Error> { + Some(match *self { +- RunnerError::Io(ref err) => err as &Error, +- RunnerError::PrefReader(ref err) => err as &Error, ++ RunnerError::Io(ref err) => err as &dyn Error, ++ RunnerError::PrefReader(ref err) => err as &dyn Error, + }) + } + } + + impl From for RunnerError { + fn from(value: io::Error) -> RunnerError { + RunnerError::Io(value) + } +diff --git a/testing/webdriver/src/error.rs b/testing/webdriver/src/error.rs +--- a/testing/webdriver/src/error.rs ++++ b/testing/webdriver/src/error.rs +@@ -320,17 +320,17 @@ impl WebDriverError { + } + } + + impl Error for WebDriverError { + fn description(&self) -> &str { + self.error_code() + } + +- fn cause(&self) -> Option<&Error> { ++ fn cause(&self) -> Option<&dyn Error> { + None + } + } + + impl fmt::Display for WebDriverError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + self.message.fmt(f) + } +@@ -349,18 +349,18 @@ impl From for WebDriverError + } + + impl From for WebDriverError { + fn from(err: DecodeError) -> WebDriverError { + WebDriverError::new(ErrorStatus::UnknownError, err.description().to_string()) + } + } + +-impl From> for WebDriverError { +- fn from(err: Box) -> WebDriverError { ++impl From> for WebDriverError { ++ fn from(err: Box) -> WebDriverError { + WebDriverError::new(ErrorStatus::UnknownError, err.description().to_string()) + } + } + + #[cfg(test)] + mod tests { + use super::*; + use crate::test::check_serialize; +diff --git a/testing/webdriver/src/server.rs b/testing/webdriver/src/server.rs +--- a/testing/webdriver/src/server.rs ++++ b/testing/webdriver/src/server.rs +@@ -171,17 +171,17 @@ impl HttpHan + } + } + + impl Service for HttpHandler { + type ReqBody = Body; + type ResBody = Body; + + type Error = hyper::Error; +- type Future = Box, Error = hyper::Error> + Send>; ++ type Future = Box, Error = hyper::Error> + Send>; + + fn call(&mut self, req: Request) -> Self::Future { + let uri = req.uri().clone(); + let method = req.method().clone(); + let api = self.api.clone(); + let chan = self.chan.clone(); + + Box::new(req.into_body().concat2().and_then(move |body| { +diff --git a/xpcom/rust/xpcom/xpcom_macros/src/lib.rs b/xpcom/rust/xpcom/xpcom_macros/src/lib.rs +--- a/xpcom/rust/xpcom/xpcom_macros/src/lib.rs ++++ b/xpcom/rust/xpcom/xpcom_macros/src/lib.rs +@@ -192,7 +192,7 @@ + } + + impl Interface { +- fn base(&self) -> Result, Box> { ++ fn base(&self) -> Result, Box> { + Ok(if let Some(base) = self.base { + Some(*IFACES.get(base).ok_or_else( + || format!("Base interface {} does not exist", base) +@@ -238,7 +238,7 @@ + } + + /// Scans through the attributes on a struct, and extracts the type of the refcount to use. +-fn get_refcnt_kind(attrs: &[Attribute]) -> Result> { ++fn get_refcnt_kind(attrs: &[Attribute]) -> Result> { + for attr in attrs { + if let Some(Meta::NameValue(ref attr)) = attr.interpret_meta() { + if attr.ident.as_ref() != "refcnt" { +@@ -268,7 +268,7 @@ + /// Scan the attributes looking for an #[xpimplements] attribute. The identifier + /// arguments passed to this attribute are the interfaces which the type wants to + /// directly implement. +-fn get_bases(attrs: &[Attribute]) -> Result, Box> { ++fn get_bases(attrs: &[Attribute]) -> Result, Box> { + let mut inherits = Vec::new(); + for attr in attrs { + if let Some(Meta::List(ref attr)) = attr.interpret_meta() { +@@ -294,7 +294,7 @@ + } + + /// Extract the fields list from the input struct. +-fn get_fields(di: &DeriveInput) -> Result<&Punctuated, Box> { ++fn get_fields(di: &DeriveInput) -> Result<&Punctuated, Box> { + match di.data { + Data::Struct(DataStruct { + fields: Fields::Named(ref named), .. +@@ -305,7 +305,7 @@ + } + + /// Takes the `Init*` struct in, and generates a `DeriveInput` for the "real" struct. +-fn gen_real_struct(init: &DeriveInput, bases: &[&Interface], refcnt_ty: RefcntKind) -> Result> { ++fn gen_real_struct(init: &DeriveInput, bases: &[&Interface], refcnt_ty: RefcntKind) -> Result> { + // Determine the name for the real struct based on the name of the + // initializer struct's name. + if !init.ident.as_ref().starts_with("Init") { From 5b3e6318c9862091fe1a98c47a3ad4944733ad02 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 10 Nov 2019 12:15:18 +0100 Subject: [PATCH 076/473] Do not remove cose.manifest files --- icecat.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/icecat.spec b/icecat.spec index 68da9e8..9da57a7 100644 --- a/icecat.spec +++ b/icecat.spec @@ -80,7 +80,7 @@ ExcludeArch: s390x Name: icecat Version: 68.2.0 -Release: 2.%{gnu_ver}%{?dist} +Release: 3.%{gnu_ver}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -503,7 +503,7 @@ echo 'export NODEJS="%{_buildrootdir}/bin/node-stdout-nonblocking-wrapper"' >> . chmod -x third_party/rust/itertools/src/lib.rs # Remove unrecognized files -find extensions/gnu -name cose.manifest -delete +#find extensions/gnu -name cose.manifest -delete #--------------------------------------------------------------------- @@ -807,6 +807,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Sun Nov 10 2019 Antonio Trande - 68.2.0-3.gnu2 +- Do not remove cose.manifest files + * Fri Nov 08 2019 Antonio Trande - 68.2.0-2.gnu2 - Build release 68.2.0-gnu2 - HTTPS-Everywhere 2019_11_7 From 8ca9e9c1c19872ffe180133e90c3435872fe3b8b Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 13 Nov 2019 18:39:02 +0100 Subject: [PATCH 077/473] Patched for mozilla bug #1595212 --- icecat.spec | 18 +++++++++-- mozilla-1595212.patch | 74 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 mozilla-1595212.patch diff --git a/icecat.spec b/icecat.spec index 9da57a7..2308eea 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,3 +1,6 @@ +# Set to true if it's going to be submitted as update. +%global release_build 1 + ##Active/Deactive language files handling %global build_langpacks 1 @@ -78,9 +81,13 @@ ExcludeArch: s390x # Set new source-code build version %global gnu_ver gnu2 +%if !%{release_build} +%global pre_tag .test +%endif + Name: icecat Version: 68.2.0 -Release: 3.%{gnu_ver}%{?dist} +Release: 4.%{gnu_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -165,6 +172,8 @@ Patch226: rhbz-1354671.patch Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch Patch417: bug1375074-save-restore-x28.patch Patch418: mozilla-1556602.patch +# Patch for rust-1.39+ +Patch419: mozilla-1595212.patch # Fix crash on ppc64le (mozilla#1512162) Patch423: mozilla-1512162.patch @@ -374,6 +383,7 @@ tar -xf %{SOURCE5} #%%patch423 -p1 -b .1512162 %endif %patch418 -p1 -b .mozilla-1556602 +%patch419 -p1 -b .mozilla-1595212 %patch424 -p1 -b .mozilla-1566876-webrtc-ind %patch425 -p1 -b .mozilla-1568569 @@ -503,7 +513,7 @@ echo 'export NODEJS="%{_buildrootdir}/bin/node-stdout-nonblocking-wrapper"' >> . chmod -x third_party/rust/itertools/src/lib.rs # Remove unrecognized files -#find extensions/gnu -name cose.manifest -delete +find extensions/gnu -name cose.manifest -delete #--------------------------------------------------------------------- @@ -807,6 +817,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Wed Nov 13 2019 Antonio Trande - 68.2.0-4.gnu2 +- Undo latest change +- Patched for mozilla bug #1595212 + * Sun Nov 10 2019 Antonio Trande - 68.2.0-3.gnu2 - Do not remove cose.manifest files diff --git a/mozilla-1595212.patch b/mozilla-1595212.patch new file mode 100644 index 0000000..605d40f --- /dev/null +++ b/mozilla-1595212.patch @@ -0,0 +1,74 @@ +diff --git a/xpcom/rust/nsstring/src/lib.rs b/xpcom/rust/nsstring/src/lib.rs +--- a/xpcom/rust/nsstring/src/lib.rs ++++ b/xpcom/rust/nsstring/src/lib.rs +@@ -1370,25 +1370,6 @@ + /// This method can trigger Undefined Behavior if the accessing the member + /// $member on a given type would use that type's `Deref` implementation. + macro_rules! member_check { +- ($T:ty, $member:ident, $method:ident) => { +- #[no_mangle] +- #[allow(non_snake_case)] +- pub extern fn $method(size: *mut usize, +- align: *mut usize, +- offset: *mut usize) { +- unsafe { +- // Create a temporary value of type T to get offsets, sizes +- // and aligns off of +- let tmp: $T = mem::zeroed(); +- *size = mem::size_of_val(&tmp.$member); +- *align = mem::align_of_val(&tmp.$member); +- *offset = +- (&tmp.$member as *const _ as usize) - +- (&tmp as *const _ as usize); +- mem::forget(tmp); +- } +- } +- }; + ($T:ty, $U:ty, $V:ty, $member:ident, $method:ident) => { + #[no_mangle] + #[allow(non_snake_case)] +@@ -1398,29 +1379,33 @@ + unsafe { + // Create a temporary value of type T to get offsets, sizes + // and alignments from. +- let tmp: $T = mem::zeroed(); ++ let tmp: mem::MaybeUninit<$T> = mem::MaybeUninit::uninit(); ++ // FIXME: This should use &raw references when available, ++ // this is technically UB as it creates a reference to ++ // uninitialized memory, but there's no better way to do ++ // this right now. ++ let tmp = &*tmp.as_ptr(); + *size = mem::size_of_val(&tmp.$member); + *align = mem::align_of_val(&tmp.$member); + *offset = + (&tmp.$member as *const _ as usize) - +- (&tmp as *const _ as usize); +- mem::forget(tmp); ++ (tmp as *const $T as usize); + +- let tmp: $U = mem::zeroed(); ++ let tmp: mem::MaybeUninit<$U> = mem::MaybeUninit::uninit(); ++ let tmp = &*tmp.as_ptr(); + assert_eq!(*size, mem::size_of_val(&tmp.hdr.$member)); + assert_eq!(*align, mem::align_of_val(&tmp.hdr.$member)); + assert_eq!(*offset, + (&tmp.hdr.$member as *const _ as usize) - +- (&tmp as *const _ as usize)); +- mem::forget(tmp); ++ (tmp as *const $U as usize)); + +- let tmp: $V = mem::zeroed(); ++ let tmp: mem::MaybeUninit<$V> = mem::MaybeUninit::uninit(); ++ let tmp = &*tmp.as_ptr(); + assert_eq!(*size, mem::size_of_val(&tmp.hdr.$member)); + assert_eq!(*align, mem::align_of_val(&tmp.hdr.$member)); + assert_eq!(*offset, + (&tmp.hdr.$member as *const _ as usize) - +- (&tmp as *const _ as usize)); +- mem::forget(tmp); ++ (tmp as *const $V as usize)); + } + } + } + + From 9fa6161642664e5e040a28811918128ac560f816 Mon Sep 17 00:00:00 2001 From: sagitter Date: Thu, 14 Nov 2019 12:06:33 +0100 Subject: [PATCH 078/473] Enable ALSA support --- icecat.spec | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/icecat.spec b/icecat.spec index 2308eea..606c30a 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,17 +1,17 @@ -# Set to true if it's going to be submitted as update. +# Set to true if it's going to be submitted as update. %global release_build 1 -##Active/Deactive language files handling +# Active/Deactive language files handling %global build_langpacks 1 %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html -##Define installation directories +# Define installation directories %global icecatappdir %{_libdir}/%{name} %global icecat_ver %{name}-%{version} %global icecat_devel %{name}-devel-%{version} -##Define language files directory +# Define language files directory %global langpackdir %{icecatappdir}/langpacks %global toolkit_gtk3 1 @@ -53,9 +53,10 @@ %global nss_build_version %{nss_version} %endif -## Audio backends +# Audio backends %bcond_without pulseaudio %bcond_without jack +%bcond_without alsa %global with_vpx 1 @@ -411,6 +412,10 @@ echo "ac_add_options --enable-pulseaudio" >> .mozconfig echo "ac_add_options --enable-jack" >> .mozconfig %endif +%if %{with alsa} +echo "ac_add_options --enable-alsa" >> .mozconfig +%endif + %ifarch s390x echo "ac_add_options --disable-jemalloc" >> .mozconfig %endif @@ -820,6 +825,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Wed Nov 13 2019 Antonio Trande - 68.2.0-4.gnu2 - Undo latest change - Patched for mozilla bug #1595212 +- Enable ALSA support * Sun Nov 10 2019 Antonio Trande - 68.2.0-3.gnu2 - Do not remove cose.manifest files From a7c0ab2713945cc35487b420cc649f89514aafe9 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 20 Nov 2019 11:48:16 +0100 Subject: [PATCH 079/473] Add patches for Rust-1.39 | Build test --- icecat.spec | 24 ++++-- mozilla-1564873.patch | 183 ++++++++++++++++++++++++++++++++++++++++++ mozilla-1595218.patch | 95 ++++++++++++++++++++++ 3 files changed, 294 insertions(+), 8 deletions(-) create mode 100644 mozilla-1564873.patch create mode 100644 mozilla-1595218.patch diff --git a/icecat.spec b/icecat.spec index 606c30a..7aab675 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,5 +1,5 @@ # Set to true if it's going to be submitted as update. -%global release_build 1 +%global release_build 0 # Active/Deactive language files handling %global build_langpacks 1 @@ -56,7 +56,7 @@ # Audio backends %bcond_without pulseaudio %bcond_without jack -%bcond_without alsa +%bcond_with alsa %global with_vpx 1 @@ -173,8 +173,10 @@ Patch226: rhbz-1354671.patch Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch Patch417: bug1375074-save-restore-x28.patch Patch418: mozilla-1556602.patch -# Patch for rust-1.39+ +# Patches for rust-1.39+ Patch419: mozilla-1595212.patch +Patch420: mozilla-1564873.patch +Patch421: mozilla-1595218.patch # Fix crash on ppc64le (mozilla#1512162) Patch423: mozilla-1512162.patch @@ -369,14 +371,14 @@ tar -xf %{SOURCE5} #%%patch413 -p1 -b .1353817 %ifarch %{arm} %patch414 -p1 -b .Bug-1238661---fix-mozillaSignalTrampoline-to-work -%patch44 -p1 -b .build-arm-libopus +%patch44 -p1 -b .build-arm-libopus %endif #%%patch417 -p1 -b .bug1375074-save-restore-x28 # Patch for big endian platforms only %if 0%{?big_endian} %patch26 -p1 -b .icu -%patch9 -p0 -b .locale +%patch9 -p0 -b .locale %patch29 -p1 -b .big-endian %endif @@ -384,7 +386,14 @@ tar -xf %{SOURCE5} #%%patch423 -p1 -b .1512162 %endif %patch418 -p1 -b .mozilla-1556602 + +# Patches for rust-1.39+ %patch419 -p1 -b .mozilla-1595212 +%patch420 -p1 -b .mozilla-1564873 +%patch421 -p1 -b .mozilla-1595218 +# + +%patch423 -p1 -b .mozilla-1596503 %patch424 -p1 -b .mozilla-1566876-webrtc-ind %patch425 -p1 -b .mozilla-1568569 @@ -822,10 +831,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog -* Wed Nov 13 2019 Antonio Trande - 68.2.0-4.gnu2 +* Wed Nov 20 2019 Antonio Trande - 68.2.0-4.gnu2.test - Undo latest change -- Patched for mozilla bug #1595212 -- Enable ALSA support +- Patched for rust-1.39+ * Sun Nov 10 2019 Antonio Trande - 68.2.0-3.gnu2 - Do not remove cose.manifest files diff --git a/mozilla-1564873.patch b/mozilla-1564873.patch new file mode 100644 index 0000000..3c362df --- /dev/null +++ b/mozilla-1564873.patch @@ -0,0 +1,183 @@ + +# HG changeset patch +# User Emilio Cobos Álvarez +# Date 1574168632 0 +# Node ID 82e4062e839a57c0dbcb08df9965883c162eb8d1 +# Parent ff37a98047d63550c77052e7dfecbda14b188e0d +Bug 1564873 - Fix straight-forward uses of mem::uninitialized in webrender. r=nical + +Differential Revision: https://phabricator.services.mozilla.com/D53359 + +diff --git a/gfx/wr/webrender/src/platform/unix/font.rs b/gfx/wr/webrender/src/platform/unix/font.rs +--- a/gfx/wr/webrender/src/platform/unix/font.rs ++++ b/gfx/wr/webrender/src/platform/unix/font.rs +@@ -530,26 +530,26 @@ impl FontContext { + // Get the bounding box for a glyph, accounting for sub-pixel positioning. + fn get_bounding_box( + &self, + slot: FT_GlyphSlot, + font: &FontInstance, + glyph: &GlyphKey, + scale: f32, + ) -> FT_BBox { +- let mut cbox: FT_BBox = unsafe { mem::uninitialized() }; ++ // Get the estimated bounding box from FT (control points). ++ let mut cbox = FT_BBox { xMin: 0, yMin: 0, xMax: 0, yMax: 0 }; + +- // Get the estimated bounding box from FT (control points). + unsafe { + FT_Outline_Get_CBox(&(*slot).outline, &mut cbox); ++ } + +- // For spaces and other non-printable characters, early out. +- if (*slot).outline.n_contours == 0 { +- return cbox; +- } ++ // For spaces and other non-printable characters, early out. ++ if unsafe { (*slot).outline.n_contours } == 0 { ++ return cbox; + } + + self.pad_bounding_box(font, &mut cbox); + + // Offset the bounding box by subpixel positioning. + // Convert to 26.6 fixed point format for FT. + let (dx, dy) = font.get_subpx_offset(glyph); + let (dx, dy) = ( +@@ -713,17 +713,17 @@ impl FontContext { + (dx / scale as f64 * 64.0 + 0.5) as FT_Pos, + -(dy / scale as f64 * 64.0 + 0.5) as FT_Pos, + ); + + // Move the outline curves to be at the origin, taking + // into account the subpixel positioning. + unsafe { + let outline = &(*slot).outline; +- let mut cbox: FT_BBox = mem::uninitialized(); ++ let mut cbox = FT_BBox { xMin: 0, yMin: 0, xMax: 0, yMax: 0 }; + FT_Outline_Get_CBox(outline, &mut cbox); + self.pad_bounding_box(font, &mut cbox); + FT_Outline_Translate( + outline, + dx - ((cbox.xMin + dx) & !63), + dy - ((cbox.yMin + dy) & !63), + ); + } +diff --git a/gfx/wr/webrender/src/prim_store/gradient.rs b/gfx/wr/webrender/src/prim_store/gradient.rs +--- a/gfx/wr/webrender/src/prim_store/gradient.rs ++++ b/gfx/wr/webrender/src/prim_store/gradient.rs +@@ -18,7 +18,7 @@ + use crate::prim_store::{PrimKeyCommonData, PrimTemplateCommonData, PrimitiveStore}; + use crate::prim_store::{NinePatchDescriptor, PointKey, SizeKey, InternablePrimitive}; + use crate::render_task::RenderTaskCacheEntryHandle; +-use std::{hash, ops::{Deref, DerefMut}, mem}; ++use std::{hash, ops::{Deref, DerefMut}}; + use crate::util::pack_as_float; + + /// The maximum number of stops a gradient may have to use the fast path. +@@ -575,22 +575,32 @@ pub const GRADIENT_DATA_TABLE_BEGIN: usi + // The exclusive bound of the gradient data table + pub const GRADIENT_DATA_TABLE_END: usize = GRADIENT_DATA_LAST_STOP; + // The number of entries in the gradient data table. + pub const GRADIENT_DATA_TABLE_SIZE: usize = 128; + + // The number of entries in a gradient data: GRADIENT_DATA_TABLE_SIZE + first stop entry + last stop entry + pub const GRADIENT_DATA_SIZE: usize = GRADIENT_DATA_TABLE_SIZE + 2; + +-#[derive(Debug)] ++/// An entry in a gradient data table representing a segment of the gradient ++/// color space. ++#[derive(Debug, Copy, Clone)] + #[repr(C)] +-// An entry in a gradient data table representing a segment of the gradient color space. +-pub struct GradientDataEntry { +- pub start_color: PremultipliedColorF, +- pub end_color: PremultipliedColorF, ++struct GradientDataEntry { ++ start_color: PremultipliedColorF, ++ end_color: PremultipliedColorF, ++} ++ ++impl GradientDataEntry { ++ fn white() -> Self { ++ Self { ++ start_color: PremultipliedColorF::WHITE, ++ end_color: PremultipliedColorF::WHITE, ++ } ++ } + } + + // TODO(gw): Tidy this up to be a free function / module? + struct GradientGpuBlockBuilder {} + + impl GradientGpuBlockBuilder { + /// Generate a color ramp filling the indices in [start_idx, end_idx) and interpolating + /// from start_color to end_color. +@@ -657,17 +667,17 @@ impl GradientGpuBlockBuilder { + // within the segment of the gradient space represented by that entry. To lookup a gradient result, + // first the entry index is calculated to determine which two colors to interpolate between, then + // the offset within that entry bucket is used to interpolate between the two colors in that entry. + // This layout preserves hard stops, as the end color for a given entry can differ from the start + // color for the following entry, despite them being adjacent. Colors are stored within in BGRA8 + // format for texture upload. This table requires the gradient color stops to be normalized to the + // range [0, 1]. The first and last entries hold the first and last color stop colors respectively, + // while the entries in between hold the interpolated color stop values for the range [0, 1]. +- let mut entries: [GradientDataEntry; GRADIENT_DATA_SIZE] = unsafe { mem::uninitialized() }; ++ let mut entries = [GradientDataEntry::white(); GRADIENT_DATA_SIZE]; + + if reverse_stops { + // Fill in the first entry (for reversed stops) with the first color stop + GradientGpuBlockBuilder::fill_colors( + GRADIENT_DATA_LAST_STOP, + GRADIENT_DATA_LAST_STOP + 1, + &cur_color, + &cur_color, +@@ -692,23 +702,16 @@ impl GradientGpuBlockBuilder { + ); + cur_idx = next_idx; + } + + cur_color = next_color; + } + if cur_idx != GRADIENT_DATA_TABLE_BEGIN { + error!("Gradient stops abruptly at {}, auto-completing to white", cur_idx); +- GradientGpuBlockBuilder::fill_colors( +- GRADIENT_DATA_TABLE_BEGIN, +- cur_idx, +- &PremultipliedColorF::WHITE, +- &cur_color, +- &mut entries, +- ); + } + + // Fill in the last entry (for reversed stops) with the last color stop + GradientGpuBlockBuilder::fill_colors( + GRADIENT_DATA_FIRST_STOP, + GRADIENT_DATA_FIRST_STOP + 1, + &cur_color, + &cur_color, +@@ -742,23 +745,16 @@ impl GradientGpuBlockBuilder { + ); + cur_idx = next_idx; + } + + cur_color = next_color; + } + if cur_idx != GRADIENT_DATA_TABLE_END { + error!("Gradient stops abruptly at {}, auto-completing to white", cur_idx); +- GradientGpuBlockBuilder::fill_colors( +- cur_idx, +- GRADIENT_DATA_TABLE_END, +- &PremultipliedColorF::WHITE, +- &cur_color, +- &mut entries, +- ); + } + + // Fill in the last entry with the last color stop + GradientGpuBlockBuilder::fill_colors( + GRADIENT_DATA_LAST_STOP, + GRADIENT_DATA_LAST_STOP + 1, + &cur_color, + &cur_color, + diff --git a/mozilla-1595218.patch b/mozilla-1595218.patch new file mode 100644 index 0000000..f90df39 --- /dev/null +++ b/mozilla-1595218.patch @@ -0,0 +1,95 @@ +diff --git a/taskcluster/ci/toolchain/misc.yml b/taskcluster/ci/toolchain/misc.yml +--- a/taskcluster/ci/toolchain/misc.yml ++++ b/taskcluster/ci/toolchain/misc.yml +@@ -117,4 +117,4 @@ + - 'taskcluster/scripts/misc/tooltool-download.sh' + toolchain-artifact: public/build/wrench-deps.tar.bz2 + toolchains: +- - linux64-rust-1.34 # whatever m-c is built with ++ - linux64-rust-1.39 # whatever m-c is built with +diff --git a/taskcluster/ci/toolchain/rust.yml b/taskcluster/ci/toolchain/rust.yml +--- a/taskcluster/ci/toolchain/rust.yml ++++ b/taskcluster/ci/toolchain/rust.yml +@@ -47,12 +47,24 @@ + '--target', 'aarch64-unknown-linux-gnu', + ] + +-linux64-rust-1.34: ++linux64-rust-1.38: ++ treeherder: ++ symbol: TL(rust-1.38.0) ++ run: ++ arguments: [ ++ '--channel', '1.38.0', ++ '--host', 'x86_64-unknown-linux-gnu', ++ '--target', 'x86_64-unknown-linux-gnu', ++ '--target', 'i686-unknown-linux-gnu', ++ '--target', 'aarch64-unknown-linux-gnu', ++ ] ++ ++linux64-rust-1.39: + treeherder: + symbol: TL(rust) + run: + arguments: [ +- '--channel', '1.34.0', ++ '--channel', '1.39.0', + '--host', 'x86_64-unknown-linux-gnu', + '--target', 'x86_64-unknown-linux-gnu', + '--target', 'i686-unknown-linux-gnu', +diff --git a/python/mozboot/mozboot/base.py b/python/mozboot/mozboot/base.py +--- a/python/mozboot/mozboot/base.py ++++ b/python/mozboot/mozboot/base.py +@@ -158,7 +158,7 @@ + MODERN_PYTHON_VERSION = LooseVersion('2.7.3') + + # Upgrade rust older than this. +-MODERN_RUST_VERSION = LooseVersion('1.34.0') ++MODERN_RUST_VERSION = LooseVersion('1.39.0') + + # Upgrade nasm older than this. + MODERN_NASM_VERSION = LooseVersion('2.14') + + +diff --git a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py +--- a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py ++++ b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py +@@ -1522,15 +1522,22 @@ + 'x86_64-unknown-openbsd', + 'x86_64-unknown-redox', + ] +- # Additional targets from 1.33 +- if Version(version) >= '1.33.0': ++ # Additional targets from 1.38 ++ if Version(version) >= '1.39.0': + rust_targets += [ +- 'thumbv7neon-linux-androideabi', +- 'thumbv7neon-unknown-linux-gnueabihf', +- 'x86_64-unknown-uefi', +- 'thumbv8m.main-none-eabi', +- 'thumbv8m.main-none-eabihf', ++ 'aarch64-uwp-windows-msvc', ++ 'armv7-wrs-vxworks-eabihf', ++ 'i686-unknown-uefi', ++ 'i686-uwp-windows-msvc', ++ 'mips64-unknown-linux-muslabi64', ++ 'mips64el-unknown-linux-muslabi64', ++ 'sparc64-unknown-openbsd', ++ 'x86_64-linux-kernel', ++ 'x86_64-uwp-windows-msvc', + ] ++ rust_targets.remove('armv7-wrs-vxworks') ++ rust_targets.remove('i586-wrs-vxworks') ++ + return 0, '\n'.join(sorted(rust_targets)), '' + if (len(args) == 6 and args[:2] == ('--crate-type', 'staticlib') and + args[2].startswith('--target=') and args[3] == '-o'): +@@ -1671,7 +1687,7 @@ + + + class RustTest(BaseConfigureTest): +- def get_rust_target(self, target, compiler_type='gcc', version='1.33.0', ++ def get_rust_target(self, target, compiler_type='gcc', version='1.39.0', + arm_target=None): + environ = { + 'PATH': os.pathsep.join( From 622a5d2419844a2a9c8d5e7b14fcffbdf56df36a Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 27 Nov 2019 14:27:24 +0100 Subject: [PATCH 080/473] Mozilla release candidate 68.3.0ESR --- .gitignore | 1 + icecat.appdata.xml | 4 +- icecat.spec | 79 +++++++++--------- mozilla-1564873.patch | 183 ------------------------------------------ mozilla-1595212.patch | 74 ----------------- mozilla-1595218.patch | 95 ---------------------- sources | 3 +- 7 files changed, 46 insertions(+), 393 deletions(-) delete mode 100644 mozilla-1564873.patch delete mode 100644 mozilla-1595212.patch delete mode 100644 mozilla-1595218.patch diff --git a/.gitignore b/.gitignore index ce0d722..1775fde 100644 --- a/.gitignore +++ b/.gitignore @@ -93,3 +93,4 @@ /icecat-68.2.0-gnu1.tar.bz2 /icecat-68.2.0-langpacks.tar.gz /icecat-68.2.0-gnu2.tar.bz2 +/icecat-68.3.0-gnu1.tar.bz2 diff --git a/icecat.appdata.xml b/icecat.appdata.xml index c5eda54..9896394 100644 --- a/icecat.appdata.xml +++ b/icecat.appdata.xml @@ -49,8 +49,8 @@ data needed during startup.
  • - Searxes - Third-party Request Blocker + LibrifyJS + Libre replacement for JavaScript blocked by GNU LibreJS on libgen.me
  • diff --git a/icecat.spec b/icecat.spec index 7aab675..e2b9bc1 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,8 +1,8 @@ # Set to true if it's going to be submitted as update. -%global release_build 0 +%global release_build 1 # Active/Deactive language files handling -%global build_langpacks 1 +%global build_langpacks 0 %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html @@ -80,15 +80,19 @@ ExcludeArch: %{arm} ExcludeArch: s390x # Set new source-code build version -%global gnu_ver gnu2 +%global gnu_ver gnu1 + +# Set extra version tag +%global extra_ver .rc2 +#%%global extra_ver %%{nil} %if !%{release_build} %global pre_tag .test %endif Name: icecat -Version: 68.2.0 -Release: 4.%{gnu_ver}%{?pre_tag}%{?dist} +Version: 68.3.0 +Release: 0.1%{extra_ver}.%{gnu_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -174,9 +178,6 @@ Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch Patch417: bug1375074-save-restore-x28.patch Patch418: mozilla-1556602.patch # Patches for rust-1.39+ -Patch419: mozilla-1595212.patch -Patch420: mozilla-1564873.patch -Patch421: mozilla-1595218.patch # Fix crash on ppc64le (mozilla#1512162) Patch423: mozilla-1512162.patch @@ -312,8 +313,8 @@ Extensions included to this version of IceCat: HTTPS Everywhere is an extension that encrypts your communications with many major websites, making your browsing more secure - * Searxes - Third-party Request Blocker + * LibrifyJS: libgen.me + Libre replacement for JavaScript blocked by GNU LibreJS on libgen.me %if 0%{?wayland_backend_default} %package x11 @@ -378,7 +379,7 @@ tar -xf %{SOURCE5} # Patch for big endian platforms only %if 0%{?big_endian} %patch26 -p1 -b .icu -%patch9 -p0 -b .locale +%patch9 -p0 -b .locale %patch29 -p1 -b .big-endian %endif @@ -388,9 +389,7 @@ tar -xf %{SOURCE5} %patch418 -p1 -b .mozilla-1556602 # Patches for rust-1.39+ -%patch419 -p1 -b .mozilla-1595212 -%patch420 -p1 -b .mozilla-1564873 -%patch421 -p1 -b .mozilla-1595218 + # %patch423 -p1 -b .mozilla-1596503 @@ -409,6 +408,11 @@ tar -xf %{SOURCE5} rm -f .mozconfig cp -p %{SOURCE3} .mozconfig +echo "ac_add_options --enable-stdcxx-compat" >> .mozconfig + +# Disable signature checking for extensions that are bundled with IceCat +echo "ac_add_options --with-unsigned-addon-scopes=app" >> .mozconfig + echo "ac_add_options --enable-default-toolkit=cairo-gtk3-wayland" >> .mozconfig echo "ac_add_options --enable-official-branding" >> .mozconfig echo "ac_add_options --disable-webrtc" >> .mozconfig @@ -571,12 +575,9 @@ MOZ_OPT_FLAGS=$(echo "%{optflags}" | %{__sed} -e 's/-Wall//') # for some sources # Explicitly force the hardening flags for Firefox so it passes the checksec test; # See also https://fedoraproject.org/wiki/Changes/Harden_All_Packages -%if 0%{?fedora} < 30 -MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -Wformat-security -Wformat -Werror=format-security" -%else # Workaround for mozbz#1531309 MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-Werror=format-security//') -%endif + # Use hardened build? MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fPIC -Wl,-z,relro -Wl,-z,now" @@ -831,7 +832,11 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog -* Wed Nov 20 2019 Antonio Trande - 68.2.0-4.gnu2.test +* Wed Nov 27 2019 Antonio Trande - 68.3.0-0.1.rc2.gnu1 +- Mozilla release candidate 68.3.0ESR + +* Fri Nov 22 2019 Antonio Trande - 68.2.0-4.gnu3.test +- Build release 68.2.0-gnu3 - Undo latest change - Patched for rust-1.39+ @@ -845,10 +850,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Patched for Mozilla bug #1556602 * Tue Oct 22 2019 Antonio Trande - 68.2.0-1.gnu1 -- Mozilla release 68.2.0 +- Mozilla release 68.2.0ESR * Tue Sep 03 2019 Antonio Trande - 68.1.0-1.gnu1 -- Mozilla release 68.1.0 +- Mozilla release 68.1.0ESR - Incorporate Wayland patches from Firefox 68 * Sun Sep 01 2019 Antonio Trande - 68.0.2-5.gnu3 @@ -867,7 +872,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Disable MOZ_SERVICES_SYNC * Thu Aug 15 2019 Antonio Trande - 68.0.2-1.gnu1 -- Mozilla release 68.0.2 +- Mozilla release 68.0.2ESR - Import cbindgen stuff from Firefox package - Do not use sqlite from system @@ -891,29 +896,29 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Use mozilla-1512162.patch on Fedora 30+ only (GCC-9) * Tue Jul 09 2019 Antonio Trande - 60.8.0-1.gnu1 -- Mozilla release 60.8.0 +- Mozilla release 60.8.0ESR * Sat Jun 22 2019 Antonio Trande - 60.7.2-1.gnu1 -- Mozilla release 60.7.2 +- Mozilla release 60.7.2ESR * Wed Jun 19 2019 Antonio Trande - 60.7.1-1.gnu1 -- Mozilla release 60.7.1 +- Mozilla release 60.7.1ESR - Do not list Git-tracked icecat.rpmlintrc as source * Tue May 28 2019 Antonio Trande - 60.7.0-2.gnu2 - Build release 60.7.0-gnu2 * Mon May 20 2019 Antonio Trande - 60.7.0-1.gnu1 -- Mozilla release 60.7.0 +- Mozilla release 60.7.0ESR * Sun May 12 2019 Antonio Trande - 60.6.3-2.gnu2 - Build release 60.6.3-gnu2 * Thu May 09 2019 Antonio Trande - 60.6.3-1.gnu1 -- Mozilla release 60.6.3 (bugfix mozb #1549249) +- Mozilla release 60.6.3ESR (bugfix mozb #1549249) * Mon May 06 2019 Antonio Trande - 60.6.2-1.gnu1 -- Mozilla release 60.6.2 (bugfix mozb #1549061) +- Mozilla release 60.6.2ESR (bugfix mozb #1549061) * Sat Apr 06 2019 Antonio Trande - 60.6.1-2.gnu2 - Source archive rebuilt (gnu2) @@ -921,7 +926,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Use bundled https-everywhere extension * Fri Mar 22 2019 Antonio Trande - 60.6.1-1 -- Mozilla release 60.6.1 +- Mozilla release 60.6.1ESR - Wayland backend made default starting from Fedora 31 (rhbz#1691852) * Thu Mar 21 2019 Antonio Trande - 60.6.0-2 @@ -930,24 +935,24 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Language files re-based * Tue Mar 19 2019 Antonio Trande - 60.6.0-1 -- Mozilla release 60.6.0 +- Mozilla release 60.6.0ESR - Enable languages * Sun Mar 03 2019 Antonio Trande - 60.5.2-1 -- Mozilla release 60.5.2 +- Mozilla release 60.5.2ESR - Disable Werror-format-security flags - Enable linker=gold on ARM - Try to fix libevent LD path * Thu Feb 14 2019 Antonio Trande - 60.5.1-1 -- Mozilla release 60.5.1 +- Mozilla release 60.5.1ESR - Conditional macro for libvpx support * Tue Feb 05 2019 Björn Esser - 60.5.0-2 - rebuilt (libvpx) * Tue Jan 29 2019 Antonio Trande - 60.5.0-1 -- Mozilla release 60.5.0 +- Mozilla release 60.5.0ESR * Sun Jan 13 2019 Antonio Trande - 60.4.0-2 - Make Wayland support default on fedora 30+ @@ -957,7 +962,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Added fix for mozbz#1507475 - crash when display changes * Wed Dec 12 2018 Antonio Trande - 60.4.0-1 -- Upstream release 60.4.0 +- Upstream release 60.4.0ESR * Tue Nov 13 2018 Caolán McNamara - 60.3.0-4 - rebuild for hunspell-1.7.0 @@ -969,19 +974,19 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Drop UserAgent patch (rhbz#1644898) * Wed Oct 24 2018 Antonio Trande - 60.3.0-1 -- Upstream release 60.3.0 +- Upstream release 60.3.0ESR * Wed Oct 03 2018 Antonio Trande - 60.2.2-2 - Drop UserAgent patch (rhbz#1644898) * Wed Oct 03 2018 Antonio Trande - 60.2.2-1 -- Upstream release 60.2.2 +- Upstream release 60.2.2ESR * Fri Sep 28 2018 Antonio Trande - 60.2.1-1 - Upstream release 60.2.1 * Fri Sep 14 2018 Antonio Trande - 60.2.0-0.1 -- Pre-release 60.2.0 +- Pre-release 60.2.0ESR - Integrate firefox patches for wayland (disabled) - Setting of upstream patches for ESR60 - Manpage updated diff --git a/mozilla-1564873.patch b/mozilla-1564873.patch deleted file mode 100644 index 3c362df..0000000 --- a/mozilla-1564873.patch +++ /dev/null @@ -1,183 +0,0 @@ - -# HG changeset patch -# User Emilio Cobos Álvarez -# Date 1574168632 0 -# Node ID 82e4062e839a57c0dbcb08df9965883c162eb8d1 -# Parent ff37a98047d63550c77052e7dfecbda14b188e0d -Bug 1564873 - Fix straight-forward uses of mem::uninitialized in webrender. r=nical - -Differential Revision: https://phabricator.services.mozilla.com/D53359 - -diff --git a/gfx/wr/webrender/src/platform/unix/font.rs b/gfx/wr/webrender/src/platform/unix/font.rs ---- a/gfx/wr/webrender/src/platform/unix/font.rs -+++ b/gfx/wr/webrender/src/platform/unix/font.rs -@@ -530,26 +530,26 @@ impl FontContext { - // Get the bounding box for a glyph, accounting for sub-pixel positioning. - fn get_bounding_box( - &self, - slot: FT_GlyphSlot, - font: &FontInstance, - glyph: &GlyphKey, - scale: f32, - ) -> FT_BBox { -- let mut cbox: FT_BBox = unsafe { mem::uninitialized() }; -+ // Get the estimated bounding box from FT (control points). -+ let mut cbox = FT_BBox { xMin: 0, yMin: 0, xMax: 0, yMax: 0 }; - -- // Get the estimated bounding box from FT (control points). - unsafe { - FT_Outline_Get_CBox(&(*slot).outline, &mut cbox); -+ } - -- // For spaces and other non-printable characters, early out. -- if (*slot).outline.n_contours == 0 { -- return cbox; -- } -+ // For spaces and other non-printable characters, early out. -+ if unsafe { (*slot).outline.n_contours } == 0 { -+ return cbox; - } - - self.pad_bounding_box(font, &mut cbox); - - // Offset the bounding box by subpixel positioning. - // Convert to 26.6 fixed point format for FT. - let (dx, dy) = font.get_subpx_offset(glyph); - let (dx, dy) = ( -@@ -713,17 +713,17 @@ impl FontContext { - (dx / scale as f64 * 64.0 + 0.5) as FT_Pos, - -(dy / scale as f64 * 64.0 + 0.5) as FT_Pos, - ); - - // Move the outline curves to be at the origin, taking - // into account the subpixel positioning. - unsafe { - let outline = &(*slot).outline; -- let mut cbox: FT_BBox = mem::uninitialized(); -+ let mut cbox = FT_BBox { xMin: 0, yMin: 0, xMax: 0, yMax: 0 }; - FT_Outline_Get_CBox(outline, &mut cbox); - self.pad_bounding_box(font, &mut cbox); - FT_Outline_Translate( - outline, - dx - ((cbox.xMin + dx) & !63), - dy - ((cbox.yMin + dy) & !63), - ); - } -diff --git a/gfx/wr/webrender/src/prim_store/gradient.rs b/gfx/wr/webrender/src/prim_store/gradient.rs ---- a/gfx/wr/webrender/src/prim_store/gradient.rs -+++ b/gfx/wr/webrender/src/prim_store/gradient.rs -@@ -18,7 +18,7 @@ - use crate::prim_store::{PrimKeyCommonData, PrimTemplateCommonData, PrimitiveStore}; - use crate::prim_store::{NinePatchDescriptor, PointKey, SizeKey, InternablePrimitive}; - use crate::render_task::RenderTaskCacheEntryHandle; --use std::{hash, ops::{Deref, DerefMut}, mem}; -+use std::{hash, ops::{Deref, DerefMut}}; - use crate::util::pack_as_float; - - /// The maximum number of stops a gradient may have to use the fast path. -@@ -575,22 +575,32 @@ pub const GRADIENT_DATA_TABLE_BEGIN: usi - // The exclusive bound of the gradient data table - pub const GRADIENT_DATA_TABLE_END: usize = GRADIENT_DATA_LAST_STOP; - // The number of entries in the gradient data table. - pub const GRADIENT_DATA_TABLE_SIZE: usize = 128; - - // The number of entries in a gradient data: GRADIENT_DATA_TABLE_SIZE + first stop entry + last stop entry - pub const GRADIENT_DATA_SIZE: usize = GRADIENT_DATA_TABLE_SIZE + 2; - --#[derive(Debug)] -+/// An entry in a gradient data table representing a segment of the gradient -+/// color space. -+#[derive(Debug, Copy, Clone)] - #[repr(C)] --// An entry in a gradient data table representing a segment of the gradient color space. --pub struct GradientDataEntry { -- pub start_color: PremultipliedColorF, -- pub end_color: PremultipliedColorF, -+struct GradientDataEntry { -+ start_color: PremultipliedColorF, -+ end_color: PremultipliedColorF, -+} -+ -+impl GradientDataEntry { -+ fn white() -> Self { -+ Self { -+ start_color: PremultipliedColorF::WHITE, -+ end_color: PremultipliedColorF::WHITE, -+ } -+ } - } - - // TODO(gw): Tidy this up to be a free function / module? - struct GradientGpuBlockBuilder {} - - impl GradientGpuBlockBuilder { - /// Generate a color ramp filling the indices in [start_idx, end_idx) and interpolating - /// from start_color to end_color. -@@ -657,17 +667,17 @@ impl GradientGpuBlockBuilder { - // within the segment of the gradient space represented by that entry. To lookup a gradient result, - // first the entry index is calculated to determine which two colors to interpolate between, then - // the offset within that entry bucket is used to interpolate between the two colors in that entry. - // This layout preserves hard stops, as the end color for a given entry can differ from the start - // color for the following entry, despite them being adjacent. Colors are stored within in BGRA8 - // format for texture upload. This table requires the gradient color stops to be normalized to the - // range [0, 1]. The first and last entries hold the first and last color stop colors respectively, - // while the entries in between hold the interpolated color stop values for the range [0, 1]. -- let mut entries: [GradientDataEntry; GRADIENT_DATA_SIZE] = unsafe { mem::uninitialized() }; -+ let mut entries = [GradientDataEntry::white(); GRADIENT_DATA_SIZE]; - - if reverse_stops { - // Fill in the first entry (for reversed stops) with the first color stop - GradientGpuBlockBuilder::fill_colors( - GRADIENT_DATA_LAST_STOP, - GRADIENT_DATA_LAST_STOP + 1, - &cur_color, - &cur_color, -@@ -692,23 +702,16 @@ impl GradientGpuBlockBuilder { - ); - cur_idx = next_idx; - } - - cur_color = next_color; - } - if cur_idx != GRADIENT_DATA_TABLE_BEGIN { - error!("Gradient stops abruptly at {}, auto-completing to white", cur_idx); -- GradientGpuBlockBuilder::fill_colors( -- GRADIENT_DATA_TABLE_BEGIN, -- cur_idx, -- &PremultipliedColorF::WHITE, -- &cur_color, -- &mut entries, -- ); - } - - // Fill in the last entry (for reversed stops) with the last color stop - GradientGpuBlockBuilder::fill_colors( - GRADIENT_DATA_FIRST_STOP, - GRADIENT_DATA_FIRST_STOP + 1, - &cur_color, - &cur_color, -@@ -742,23 +745,16 @@ impl GradientGpuBlockBuilder { - ); - cur_idx = next_idx; - } - - cur_color = next_color; - } - if cur_idx != GRADIENT_DATA_TABLE_END { - error!("Gradient stops abruptly at {}, auto-completing to white", cur_idx); -- GradientGpuBlockBuilder::fill_colors( -- cur_idx, -- GRADIENT_DATA_TABLE_END, -- &PremultipliedColorF::WHITE, -- &cur_color, -- &mut entries, -- ); - } - - // Fill in the last entry with the last color stop - GradientGpuBlockBuilder::fill_colors( - GRADIENT_DATA_LAST_STOP, - GRADIENT_DATA_LAST_STOP + 1, - &cur_color, - &cur_color, - diff --git a/mozilla-1595212.patch b/mozilla-1595212.patch deleted file mode 100644 index 605d40f..0000000 --- a/mozilla-1595212.patch +++ /dev/null @@ -1,74 +0,0 @@ -diff --git a/xpcom/rust/nsstring/src/lib.rs b/xpcom/rust/nsstring/src/lib.rs ---- a/xpcom/rust/nsstring/src/lib.rs -+++ b/xpcom/rust/nsstring/src/lib.rs -@@ -1370,25 +1370,6 @@ - /// This method can trigger Undefined Behavior if the accessing the member - /// $member on a given type would use that type's `Deref` implementation. - macro_rules! member_check { -- ($T:ty, $member:ident, $method:ident) => { -- #[no_mangle] -- #[allow(non_snake_case)] -- pub extern fn $method(size: *mut usize, -- align: *mut usize, -- offset: *mut usize) { -- unsafe { -- // Create a temporary value of type T to get offsets, sizes -- // and aligns off of -- let tmp: $T = mem::zeroed(); -- *size = mem::size_of_val(&tmp.$member); -- *align = mem::align_of_val(&tmp.$member); -- *offset = -- (&tmp.$member as *const _ as usize) - -- (&tmp as *const _ as usize); -- mem::forget(tmp); -- } -- } -- }; - ($T:ty, $U:ty, $V:ty, $member:ident, $method:ident) => { - #[no_mangle] - #[allow(non_snake_case)] -@@ -1398,29 +1379,33 @@ - unsafe { - // Create a temporary value of type T to get offsets, sizes - // and alignments from. -- let tmp: $T = mem::zeroed(); -+ let tmp: mem::MaybeUninit<$T> = mem::MaybeUninit::uninit(); -+ // FIXME: This should use &raw references when available, -+ // this is technically UB as it creates a reference to -+ // uninitialized memory, but there's no better way to do -+ // this right now. -+ let tmp = &*tmp.as_ptr(); - *size = mem::size_of_val(&tmp.$member); - *align = mem::align_of_val(&tmp.$member); - *offset = - (&tmp.$member as *const _ as usize) - -- (&tmp as *const _ as usize); -- mem::forget(tmp); -+ (tmp as *const $T as usize); - -- let tmp: $U = mem::zeroed(); -+ let tmp: mem::MaybeUninit<$U> = mem::MaybeUninit::uninit(); -+ let tmp = &*tmp.as_ptr(); - assert_eq!(*size, mem::size_of_val(&tmp.hdr.$member)); - assert_eq!(*align, mem::align_of_val(&tmp.hdr.$member)); - assert_eq!(*offset, - (&tmp.hdr.$member as *const _ as usize) - -- (&tmp as *const _ as usize)); -- mem::forget(tmp); -+ (tmp as *const $U as usize)); - -- let tmp: $V = mem::zeroed(); -+ let tmp: mem::MaybeUninit<$V> = mem::MaybeUninit::uninit(); -+ let tmp = &*tmp.as_ptr(); - assert_eq!(*size, mem::size_of_val(&tmp.hdr.$member)); - assert_eq!(*align, mem::align_of_val(&tmp.hdr.$member)); - assert_eq!(*offset, - (&tmp.hdr.$member as *const _ as usize) - -- (&tmp as *const _ as usize)); -- mem::forget(tmp); -+ (tmp as *const $V as usize)); - } - } - } - - diff --git a/mozilla-1595218.patch b/mozilla-1595218.patch deleted file mode 100644 index f90df39..0000000 --- a/mozilla-1595218.patch +++ /dev/null @@ -1,95 +0,0 @@ -diff --git a/taskcluster/ci/toolchain/misc.yml b/taskcluster/ci/toolchain/misc.yml ---- a/taskcluster/ci/toolchain/misc.yml -+++ b/taskcluster/ci/toolchain/misc.yml -@@ -117,4 +117,4 @@ - - 'taskcluster/scripts/misc/tooltool-download.sh' - toolchain-artifact: public/build/wrench-deps.tar.bz2 - toolchains: -- - linux64-rust-1.34 # whatever m-c is built with -+ - linux64-rust-1.39 # whatever m-c is built with -diff --git a/taskcluster/ci/toolchain/rust.yml b/taskcluster/ci/toolchain/rust.yml ---- a/taskcluster/ci/toolchain/rust.yml -+++ b/taskcluster/ci/toolchain/rust.yml -@@ -47,12 +47,24 @@ - '--target', 'aarch64-unknown-linux-gnu', - ] - --linux64-rust-1.34: -+linux64-rust-1.38: -+ treeherder: -+ symbol: TL(rust-1.38.0) -+ run: -+ arguments: [ -+ '--channel', '1.38.0', -+ '--host', 'x86_64-unknown-linux-gnu', -+ '--target', 'x86_64-unknown-linux-gnu', -+ '--target', 'i686-unknown-linux-gnu', -+ '--target', 'aarch64-unknown-linux-gnu', -+ ] -+ -+linux64-rust-1.39: - treeherder: - symbol: TL(rust) - run: - arguments: [ -- '--channel', '1.34.0', -+ '--channel', '1.39.0', - '--host', 'x86_64-unknown-linux-gnu', - '--target', 'x86_64-unknown-linux-gnu', - '--target', 'i686-unknown-linux-gnu', -diff --git a/python/mozboot/mozboot/base.py b/python/mozboot/mozboot/base.py ---- a/python/mozboot/mozboot/base.py -+++ b/python/mozboot/mozboot/base.py -@@ -158,7 +158,7 @@ - MODERN_PYTHON_VERSION = LooseVersion('2.7.3') - - # Upgrade rust older than this. --MODERN_RUST_VERSION = LooseVersion('1.34.0') -+MODERN_RUST_VERSION = LooseVersion('1.39.0') - - # Upgrade nasm older than this. - MODERN_NASM_VERSION = LooseVersion('2.14') - - -diff --git a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py ---- a/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py -+++ b/python/mozbuild/mozbuild/test/configure/test_toolchain_configure.py -@@ -1522,15 +1522,22 @@ - 'x86_64-unknown-openbsd', - 'x86_64-unknown-redox', - ] -- # Additional targets from 1.33 -- if Version(version) >= '1.33.0': -+ # Additional targets from 1.38 -+ if Version(version) >= '1.39.0': - rust_targets += [ -- 'thumbv7neon-linux-androideabi', -- 'thumbv7neon-unknown-linux-gnueabihf', -- 'x86_64-unknown-uefi', -- 'thumbv8m.main-none-eabi', -- 'thumbv8m.main-none-eabihf', -+ 'aarch64-uwp-windows-msvc', -+ 'armv7-wrs-vxworks-eabihf', -+ 'i686-unknown-uefi', -+ 'i686-uwp-windows-msvc', -+ 'mips64-unknown-linux-muslabi64', -+ 'mips64el-unknown-linux-muslabi64', -+ 'sparc64-unknown-openbsd', -+ 'x86_64-linux-kernel', -+ 'x86_64-uwp-windows-msvc', - ] -+ rust_targets.remove('armv7-wrs-vxworks') -+ rust_targets.remove('i586-wrs-vxworks') -+ - return 0, '\n'.join(sorted(rust_targets)), '' - if (len(args) == 6 and args[:2] == ('--crate-type', 'staticlib') and - args[2].startswith('--target=') and args[3] == '-o'): -@@ -1671,7 +1687,7 @@ - - - class RustTest(BaseConfigureTest): -- def get_rust_target(self, target, compiler_type='gcc', version='1.33.0', -+ def get_rust_target(self, target, compiler_type='gcc', version='1.39.0', - arm_target=None): - environ = { - 'PATH': os.pathsep.join( diff --git a/sources b/sources index 53c7dd8..47900eb 100644 --- a/sources +++ b/sources @@ -1,4 +1,3 @@ SHA512 (cbindgen-vendor.tar.xz) = 2daac8505b71c9672020b6d407f8ec826cc978629a2e44857f5e80a8cedc79162aea2fb01179683542e505148249827523e59e58e9c54ab0d298c5d07a555f10 -SHA512 (icecat-68.2.0-gnu2.tar.bz2) = 1db3e55f774b30552cd7bf94de1ebe27e8ceedcac349f2e7419626d818aeaff53de2257064a79070a9324c6635b417f74b33e482d2c4d860f11c9b22dce4949d -SHA512 (icecat-68.2.0-langpacks.tar.gz) = a13a29071114438795c0a6c8bf5bd2cecc50e18a0d9298641cacc27989bfc1613c0632b66da71895cc48db76a1e7e5b10cdccd96a262f4af9d5e6844461a4c7c +SHA512 (icecat-68.3.0-gnu1.tar.bz2) = 282f9865772feb1573f46e46407d6255f6be25809477beda07870e20d7cd4c248f02da0fa0f555a5d81fdaee913f974c696cab297bf51e340d24b45a5486a88b SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 1d3ff34aa1c4c4d2bed0c37e4b1dbef1db3c94be Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 27 Nov 2019 14:52:12 +0100 Subject: [PATCH 081/473] Remove --enable-stdcxx-compat build option --- icecat.spec | 2 -- 1 file changed, 2 deletions(-) diff --git a/icecat.spec b/icecat.spec index e2b9bc1..b826150 100644 --- a/icecat.spec +++ b/icecat.spec @@ -408,8 +408,6 @@ tar -xf %{SOURCE5} rm -f .mozconfig cp -p %{SOURCE3} .mozconfig -echo "ac_add_options --enable-stdcxx-compat" >> .mozconfig - # Disable signature checking for extensions that are bundled with IceCat echo "ac_add_options --with-unsigned-addon-scopes=app" >> .mozconfig From 9367da609edd219778828bce29c8bf02bbdb99c5 Mon Sep 17 00:00:00 2001 From: sagitter Date: Mon, 2 Dec 2019 20:16:29 +0100 Subject: [PATCH 082/473] Mozilla release 68.3.0ESR --- .gitignore | 1 + icecat-lang_download.sh | 2 +- icecat.rpmlintrc | 46 ----------------------------------------- icecat.spec | 16 +++++++------- sources | 3 ++- 5 files changed, 11 insertions(+), 57 deletions(-) delete mode 100644 icecat.rpmlintrc diff --git a/.gitignore b/.gitignore index 1775fde..ba2e9fc 100644 --- a/.gitignore +++ b/.gitignore @@ -94,3 +94,4 @@ /icecat-68.2.0-langpacks.tar.gz /icecat-68.2.0-gnu2.tar.bz2 /icecat-68.3.0-gnu1.tar.bz2 +/icecat-68.3.0-langpacks.tar.gz diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 9a8708d..d7bbfe7 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=68.2.0 +VERSION=68.3.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc deleted file mode 100644 index 4d7dde1..0000000 --- a/icecat.rpmlintrc +++ /dev/null @@ -1,46 +0,0 @@ -# Whitelisting errors -# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist -# https://src.fedoraproject.org/rpms/python3/blob/master/f/python3.rpmlintrc -# Edited by sagitter (sagitter AT fedoraproject dot org) - -# KNOWN BUGS: -# - -# TESTS: -##### SRPMs ##### - -# ifarch applied patches are okay -# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support -addFilter(r'(%ifarch-applied-patch) Patch*') -# Different file size due to the signature of the source code tarbz archive -addFilter(r'file-size-mismatch') - -addFilter(r'(invalid-url) Source4') -addFilter(r'(invalid-url) Source5') -addFilter(r'(invalid-url) Source17') - -# ERRORS: -##### RPMs ##### - -# chroot function (??) -addFilter(r'(missing-call-to-chdir-with-chroot) /usr/lib(64)?/icecat/libmozsandbox.so') -addFilter(r'(missing-call-to-setgroups-before-setuid) /usr/lib(64)?/icecat/libxul.so') - -# Expected on FF browser -# https://support.mozilla.org/en-US/questions/1045418 -addFilter(r'(zero-length) /usr/lib(64)?/icecat/chrome.manifest') -addFilter(r'(zero-length) /usr/lib(64)?/icecat/browser/chrome.manifest') - -addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/gtk2/libmozgtk.so') -addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/libmozgtk.so') - -# False positive -addFilter(r'(dangling-symlink) /usr/lib(64)?/icecat/dictionaries /usr/share/myspell') -addFilter(r'(unversioned-explicit-provides) webclient') - -# WARNINGS: -##### RPMs ##### - -addFilter(r'(no-manual-page-for-binary) icecat-wayland') -addFilter(r'(no-manual-page-for-binary) icecat-x11') - diff --git a/icecat.spec b/icecat.spec index b826150..b78cd25 100644 --- a/icecat.spec +++ b/icecat.spec @@ -2,7 +2,7 @@ %global release_build 1 # Active/Deactive language files handling -%global build_langpacks 0 +%global build_langpacks 1 %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html @@ -83,8 +83,8 @@ ExcludeArch: s390x %global gnu_ver gnu1 # Set extra version tag -%global extra_ver .rc2 -#%%global extra_ver %%{nil} +#%%global extra_ver .rc2 +%global extra_ver %%{nil} %if !%{release_build} %global pre_tag .test @@ -92,7 +92,7 @@ ExcludeArch: s390x Name: icecat Version: 68.3.0 -Release: 0.1%{extra_ver}.%{gnu_ver}%{?pre_tag}%{?dist} +Release: 1%{extra_ver}.%{gnu_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -177,7 +177,6 @@ Patch226: rhbz-1354671.patch Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch Patch417: bug1375074-save-restore-x28.patch Patch418: mozilla-1556602.patch -# Patches for rust-1.39+ # Fix crash on ppc64le (mozilla#1512162) Patch423: mozilla-1512162.patch @@ -388,10 +387,6 @@ tar -xf %{SOURCE5} %endif %patch418 -p1 -b .mozilla-1556602 -# Patches for rust-1.39+ - -# - %patch423 -p1 -b .mozilla-1596503 %patch424 -p1 -b .mozilla-1566876-webrtc-ind %patch425 -p1 -b .mozilla-1568569 @@ -830,6 +825,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Mon Dec 02 2019 Antonio Trande - 68.3.0-1.gnu1 +- Mozilla release 68.3.0ESR + * Wed Nov 27 2019 Antonio Trande - 68.3.0-0.1.rc2.gnu1 - Mozilla release candidate 68.3.0ESR diff --git a/sources b/sources index 47900eb..cea1c3a 100644 --- a/sources +++ b/sources @@ -1,3 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = 2daac8505b71c9672020b6d407f8ec826cc978629a2e44857f5e80a8cedc79162aea2fb01179683542e505148249827523e59e58e9c54ab0d298c5d07a555f10 -SHA512 (icecat-68.3.0-gnu1.tar.bz2) = 282f9865772feb1573f46e46407d6255f6be25809477beda07870e20d7cd4c248f02da0fa0f555a5d81fdaee913f974c696cab297bf51e340d24b45a5486a88b +SHA512 (icecat-68.3.0-gnu1.tar.bz2) = f2d8bfb12f9eeb2426ef38f9849bfcb95d2d56f4374651e65d06654f9b0379b5c11d4df03973a68c65b29b8e3c7f9712c04e67f56a91a82b309c8bb405cbb964 +SHA512 (icecat-68.3.0-langpacks.tar.gz) = c65d0170f110fe4afcaf0074e7c799a1226d87231a77d67ae170290933175aa3a2f68401c99e752126e96b3de87a77512d6573daf7c3019aae26434bc6b83e58 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From fdcd79908da42d051b3baedcada5ae59de6b34a4 Mon Sep 17 00:00:00 2001 From: sagitter Date: Mon, 2 Dec 2019 20:18:17 +0100 Subject: [PATCH 083/473] Add icecat.rpmlintrc --- icecat.rpmlintrc | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 icecat.rpmlintrc diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc new file mode 100644 index 0000000..4d7dde1 --- /dev/null +++ b/icecat.rpmlintrc @@ -0,0 +1,46 @@ +# Whitelisting errors +# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist +# https://src.fedoraproject.org/rpms/python3/blob/master/f/python3.rpmlintrc +# Edited by sagitter (sagitter AT fedoraproject dot org) + +# KNOWN BUGS: +# + +# TESTS: +##### SRPMs ##### + +# ifarch applied patches are okay +# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support +addFilter(r'(%ifarch-applied-patch) Patch*') +# Different file size due to the signature of the source code tarbz archive +addFilter(r'file-size-mismatch') + +addFilter(r'(invalid-url) Source4') +addFilter(r'(invalid-url) Source5') +addFilter(r'(invalid-url) Source17') + +# ERRORS: +##### RPMs ##### + +# chroot function (??) +addFilter(r'(missing-call-to-chdir-with-chroot) /usr/lib(64)?/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) /usr/lib(64)?/icecat/libxul.so') + +# Expected on FF browser +# https://support.mozilla.org/en-US/questions/1045418 +addFilter(r'(zero-length) /usr/lib(64)?/icecat/chrome.manifest') +addFilter(r'(zero-length) /usr/lib(64)?/icecat/browser/chrome.manifest') + +addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/gtk2/libmozgtk.so') +addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/libmozgtk.so') + +# False positive +addFilter(r'(dangling-symlink) /usr/lib(64)?/icecat/dictionaries /usr/share/myspell') +addFilter(r'(unversioned-explicit-provides) webclient') + +# WARNINGS: +##### RPMs ##### + +addFilter(r'(no-manual-page-for-binary) icecat-wayland') +addFilter(r'(no-manual-page-for-binary) icecat-x11') + From 695e7b44d531027e26ffa491ad803045b7c7cc6e Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 3 Dec 2019 09:33:31 +0100 Subject: [PATCH 084/473] Add mozilla-1564873 patch --- icecat.spec | 4 + mozilla-1564873.patch | 184 ++++++++++++++++++++++++++++++++++++++++++ sources | 2 +- 3 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 mozilla-1564873.patch diff --git a/icecat.spec b/icecat.spec index b78cd25..3d77aa3 100644 --- a/icecat.spec +++ b/icecat.spec @@ -178,6 +178,8 @@ Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch Patch417: bug1375074-save-restore-x28.patch Patch418: mozilla-1556602.patch +Patch419: mozilla-1564873.patch + # Fix crash on ppc64le (mozilla#1512162) Patch423: mozilla-1512162.patch Patch424: mozilla-1566876-webrtc-ind.patch @@ -387,6 +389,8 @@ tar -xf %{SOURCE5} %endif %patch418 -p1 -b .mozilla-1556602 +%patch419 -p1 -b .mozilla-1564873 + %patch423 -p1 -b .mozilla-1596503 %patch424 -p1 -b .mozilla-1566876-webrtc-ind %patch425 -p1 -b .mozilla-1568569 diff --git a/mozilla-1564873.patch b/mozilla-1564873.patch new file mode 100644 index 0000000..de159c1 --- /dev/null +++ b/mozilla-1564873.patch @@ -0,0 +1,184 @@ + +# HG changeset patch +# User Emilio Cobos Álvarez +# Date 1574168632 0 +# Node ID 82e4062e839a57c0dbcb08df9965883c162eb8d1 +# Parent ff37a98047d63550c77052e7dfecbda14b188e0d +Bug 1564873 - Fix straight-forward uses of mem::uninitialized in webrender. r=nical + +Differential Revision: https://phabricator.services.mozilla.com/D53359 + +diff --git a/gfx/wr/webrender/src/platform/unix/font.rs b/gfx/wr/webrender/src/platform/unix/font.rs +--- a/gfx/wr/webrender/src/platform/unix/font.rs ++++ b/gfx/wr/webrender/src/platform/unix/font.rs +@@ -530,26 +530,26 @@ impl FontContext { + // Get the bounding box for a glyph, accounting for sub-pixel positioning. + fn get_bounding_box( + &self, + slot: FT_GlyphSlot, + font: &FontInstance, + glyph: &GlyphKey, + scale: f32, + ) -> FT_BBox { +- let mut cbox: FT_BBox = unsafe { mem::uninitialized() }; ++ // Get the estimated bounding box from FT (control points). ++ let mut cbox = FT_BBox { xMin: 0, yMin: 0, xMax: 0, yMax: 0 }; + +- // Get the estimated bounding box from FT (control points). + unsafe { + FT_Outline_Get_CBox(&(*slot).outline, &mut cbox); ++ } + +- // For spaces and other non-printable characters, early out. +- if (*slot).outline.n_contours == 0 { +- return cbox; +- } ++ // For spaces and other non-printable characters, early out. ++ if unsafe { (*slot).outline.n_contours } == 0 { ++ return cbox; + } + + self.pad_bounding_box(font, &mut cbox); + + // Offset the bounding box by subpixel positioning. + // Convert to 26.6 fixed point format for FT. + let (dx, dy) = font.get_subpx_offset(glyph); + let (dx, dy) = ( +@@ -713,17 +713,17 @@ impl FontContext { + (dx / scale as f64 * 64.0 + 0.5) as FT_Pos, + -(dy / scale as f64 * 64.0 + 0.5) as FT_Pos, + ); + + // Move the outline curves to be at the origin, taking + // into account the subpixel positioning. + unsafe { + let outline = &(*slot).outline; +- let mut cbox: FT_BBox = mem::uninitialized(); ++ let mut cbox = FT_BBox { xMin: 0, yMin: 0, xMax: 0, yMax: 0 }; + FT_Outline_Get_CBox(outline, &mut cbox); + self.pad_bounding_box(font, &mut cbox); + FT_Outline_Translate( + outline, + dx - ((cbox.xMin + dx) & !63), + dy - ((cbox.yMin + dy) & !63), + ); + } +diff --git a/gfx/wr/webrender/src/prim_store/gradient.rs b/gfx/wr/webrender/src/prim_store/gradient.rs +--- a/gfx/wr/webrender/src/prim_store/gradient.rs ++++ b/gfx/wr/webrender/src/prim_store/gradient.rs +@@ -18,7 +18,7 @@ + use crate::prim_store::{PrimKeyCommonData, PrimTemplateCommonData, PrimitiveStore}; + use crate::prim_store::{NinePatchDescriptor, PointKey, SizeKey, InternablePrimitive}; + use crate::render_task::RenderTaskCacheEntryHandle; +-use std::{hash, ops::{Deref, DerefMut}, mem}; ++use std::{hash, ops::{Deref, DerefMut}}; + use crate::util::pack_as_float; + + /// The maximum number of stops a gradient may have to use the fast path. +@@ -575,22 +575,32 @@ pub const GRADIENT_DATA_TABLE_BEGIN: usi + // The exclusive bound of the gradient data table + pub const GRADIENT_DATA_TABLE_END: usize = GRADIENT_DATA_LAST_STOP; + // The number of entries in the gradient data table. + pub const GRADIENT_DATA_TABLE_SIZE: usize = 128; + + // The number of entries in a gradient data: GRADIENT_DATA_TABLE_SIZE + first stop entry + last stop entry + pub const GRADIENT_DATA_SIZE: usize = GRADIENT_DATA_TABLE_SIZE + 2; + +-#[derive(Debug)] ++/// An entry in a gradient data table representing a segment of the gradient ++/// color space. ++#[derive(Debug, Copy, Clone)] + #[repr(C)] +-// An entry in a gradient data table representing a segment of the gradient color space. +-pub struct GradientDataEntry { +- pub start_color: PremultipliedColorF, +- pub end_color: PremultipliedColorF, ++struct GradientDataEntry { ++ start_color: PremultipliedColorF, ++ end_color: PremultipliedColorF, ++} ++ ++impl GradientDataEntry { ++ fn white() -> Self { ++ Self { ++ start_color: PremultipliedColorF::WHITE, ++ end_color: PremultipliedColorF::WHITE, ++ } ++ } + } + + // TODO(gw): Tidy this up to be a free function / module? + struct GradientGpuBlockBuilder {} + + impl GradientGpuBlockBuilder { + /// Generate a color ramp filling the indices in [start_idx, end_idx) and interpolating + /// from start_color to end_color. +@@ -657,17 +667,17 @@ impl GradientGpuBlockBuilder { + // within the segment of the gradient space represented by that entry. To lookup a gradient result, + // first the entry index is calculated to determine which two colors to interpolate between, then + // the offset within that entry bucket is used to interpolate between the two colors in that entry. + // This layout preserves hard stops, as the end color for a given entry can differ from the start + // color for the following entry, despite them being adjacent. Colors are stored within in BGRA8 + // format for texture upload. This table requires the gradient color stops to be normalized to the + // range [0, 1]. The first and last entries hold the first and last color stop colors respectively, + // while the entries in between hold the interpolated color stop values for the range [0, 1]. +- let mut entries: [GradientDataEntry; GRADIENT_DATA_SIZE] = unsafe { mem::uninitialized() }; ++ let mut entries = [GradientDataEntry::white(); GRADIENT_DATA_SIZE]; + + if reverse_stops { + // Fill in the first entry (for reversed stops) with the first color stop + GradientGpuBlockBuilder::fill_colors( + GRADIENT_DATA_LAST_STOP, + GRADIENT_DATA_LAST_STOP + 1, + &cur_color, + &cur_color, +@@ -692,23 +702,16 @@ impl GradientGpuBlockBuilder { + ); + cur_idx = next_idx; + } + + cur_color = next_color; + } + if cur_idx != GRADIENT_DATA_TABLE_BEGIN { + error!("Gradient stops abruptly at {}, auto-completing to white", cur_idx); +- GradientGpuBlockBuilder::fill_colors( +- GRADIENT_DATA_TABLE_BEGIN, +- cur_idx, +- &PremultipliedColorF::WHITE, +- &cur_color, +- &mut entries, +- ); + } + + // Fill in the last entry (for reversed stops) with the last color stop + GradientGpuBlockBuilder::fill_colors( + GRADIENT_DATA_FIRST_STOP, + GRADIENT_DATA_FIRST_STOP + 1, + &cur_color, + &cur_color, +@@ -742,23 +745,16 @@ impl GradientGpuBlockBuilder { + ); + cur_idx = next_idx; + } + + cur_color = next_color; + } + if cur_idx != GRADIENT_DATA_TABLE_END { + error!("Gradient stops abruptly at {}, auto-completing to white", cur_idx); +- GradientGpuBlockBuilder::fill_colors( +- cur_idx, +- GRADIENT_DATA_TABLE_END, +- &PremultipliedColorF::WHITE, +- &cur_color, +- &mut entries, +- ); + } + + // Fill in the last entry with the last color stop + GradientGpuBlockBuilder::fill_colors( + GRADIENT_DATA_LAST_STOP, + GRADIENT_DATA_LAST_STOP + 1, + &cur_color, + &cur_color, + + diff --git a/sources b/sources index cea1c3a..bb25126 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (cbindgen-vendor.tar.xz) = 2daac8505b71c9672020b6d407f8ec826cc978629a2e44857f5e80a8cedc79162aea2fb01179683542e505148249827523e59e58e9c54ab0d298c5d07a555f10 +SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c SHA512 (icecat-68.3.0-gnu1.tar.bz2) = f2d8bfb12f9eeb2426ef38f9849bfcb95d2d56f4374651e65d06654f9b0379b5c11d4df03973a68c65b29b8e3c7f9712c04e67f56a91a82b309c8bb405cbb964 SHA512 (icecat-68.3.0-langpacks.tar.gz) = c65d0170f110fe4afcaf0074e7c799a1226d87231a77d67ae170290933175aa3a2f68401c99e752126e96b3de87a77512d6573daf7c3019aae26434bc6b83e58 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 3b557ce43106226a9e1336d7bfbb7834ea0d333d Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 4 Dec 2019 20:06:31 +0100 Subject: [PATCH 085/473] Patch for cbindgen/rust-1.39 --- icecat-68.3.0-cbindgen_for_rust139.patch | 172 +++++++++++++++++++++++ icecat.spec | 6 +- 2 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 icecat-68.3.0-cbindgen_for_rust139.patch diff --git a/icecat-68.3.0-cbindgen_for_rust139.patch b/icecat-68.3.0-cbindgen_for_rust139.patch new file mode 100644 index 0000000..f150066 --- /dev/null +++ b/icecat-68.3.0-cbindgen_for_rust139.patch @@ -0,0 +1,172 @@ +diff -up a/third_party/rust/bindgen/.cargo-checksum.json.bindgen b/third_party/rust/bindgen/.cargo-checksum.json +--- a/third_party/rust/bindgen/.cargo-checksum.json.bindgen 2019-12-01 15:29:26.000000000 +0100 ++++ b/third_party/rust/bindgen/.cargo-checksum.json 2019-12-04 11:38:42.878975886 +0100 +@@ -1 +1 @@ +-{"files":{"Cargo.toml":"9af635e7bad9021a49742a312faf6178b757dbd48aabc998931d6f491f14c179","LICENSE":"c23953d9deb0a3312dbeaf6c128a657f3591acee45067612fa68405eaa4525db","README.md":"5a1f556c6a57c0a6ccc65e19c27718e0f4b32381a8efcc80f6601b33c58c5d59","build.rs":"a9f6915c54d75f357ce32f96327bf4df53dc81a505b70831978f9dac6f43841d","src/callbacks.rs":"b24d7982332c6a35928f134184ddf4072fe4545a45546b97b9b0e0c1fbb77c08","src/clang.rs":"e9203eb5a1b432efebafcd011896e35e8c9145037bf99e7bb3709dc1b8e8e783","src/codegen/bitfield_unit.rs":"88b0604322dc449fc9284850eadc1f5d14b42fa747d4258bae0b6b9535f52dfd","src/codegen/bitfield_unit_tests.rs":"2073ac6a36e0bc9afaef5b1207966817c8fb7a1a9f6368c3b1b8f79822efbfba","src/codegen/error.rs":"2613af1d833377fd4a70719f4a09951d9d45dc9227827b9a2a938a1bcaaea2dd","src/codegen/helpers.rs":"fbd23e68dd51ccaddeb9761394d5df2db49baded0e2dccf6bbc52a2d6de502eb","src/codegen/impl_debug.rs":"f82969461d522fb758eca552ceaf189122a404cbb47fcc16008bfe52fc62aefa","src/codegen/impl_partialeq.rs":"d40d9ee2849c4d3d557b033c4d3af5e6de4a44347f67c0f016198086338811af","src/codegen/mod.rs":"238d989e13b7556e5d120a2bfe85b43332fba56cbe8df886d4c32e650fff1247","src/codegen/struct_layout.rs":"3fa5524aff82365ce292b0cc85080514c85a6dbd31bce90f001773b995dda28e","src/extra_assertions.rs":"494534bd4f18b80d89b180c8a93733e6617edcf7deac413e9a73fd6e7bc9ced7","src/features.rs":"c5fd7149f4a3b41fd4f89ade08505170942f4bc791bcb6a34fdddd3ae61856f8","src/ir/analysis/derive.rs":"325d4c1c1e6194e743f42a2316f1501b0ef852fe309f2e9cac3434825ad235f0","src/ir/analysis/has_destructor.rs":"63644f479738df35e531d3324ff892614083c3656e0747aa34d9f20dada878ec","src/ir/analysis/has_float.rs":"76162a309e4285a806755a08c687a3e7bc894a100a63da4e88584035e215b11d","src/ir/analysis/has_type_param_in_array.rs":"fdbc0af28a144c88ea2de83e6e6da5e1ffb40e3dd63fd7a708095d085bb06f94","src/ir/analysis/has_vtable.rs":"5788372d27bdbaaf0454bc17be31a5480918bc41a8a1c4832e8c61185c07f9cd","src/ir/analysis/mod.rs":"1f218e15c19f6666512908abc853fa7ff9ca5d0fafd94f026d9e4b0ce287ec3c","src/ir/analysis/sizedness.rs":"8dc10043d872e68e660ef96edca4d9733f95be45cdad4893462fa929b335014f","src/ir/analysis/template_params.rs":"6312c008bbc80f50e72a766756c8daddea0b6eeb31ec924b83a231df931e170e","src/ir/annotations.rs":"39a5ab19f4d5dfa617577e4a0d0d2b67b5369d480c7cca4b14d172458c9843f0","src/ir/comment.rs":"c48abe01c5af0f09f583a89f1394bc6c161b40f6c8f0f600bbfe3c907b47969b","src/ir/comp.rs":"ca439407faefbe3a198246f0a1dbdf4e40307e45eaaad317e85d1aab37bb31fc","src/ir/context.rs":"599226eb04d337a1b1b13af91af91bdb02dbd5f26f274cbc0ebc4489eb144fc0","src/ir/derive.rs":"34f9aa76b6c9c05136bb69dcd6455397faef571a567254d2c541d50a962994db","src/ir/dot.rs":"95ed2968fc3239d87892e9f1edf1ed6dd18630d949564961765967ea1d16960c","src/ir/enum_ty.rs":"9cc242d6b3c1866665594e8b306860ee39c0ea42d22198d46b7fded473fe3e84","src/ir/function.rs":"2d41d9df19f42b0c383f338be4c026c005853a8d1caf5f3e5a2f3a8dad202232","src/ir/int.rs":"07e0c7dbd2dd977177fae3acd2a14adf271c6cf9ff4b57cddc11d50734fd4801","src/ir/item.rs":"3bcdb69b793350e5744aec3577cdbb1e5068ece5220c38763cecd82dfb5e8f03","src/ir/item_kind.rs":"dbeae8c4fd0e5c9485d325aea040e056a1f2cd6d43fc927dee8fe1c0c59a7197","src/ir/layout.rs":"d49582081f5f86f7595afbe4845f38fb3b969a840b568f4a49b265e7d790bb5b","src/ir/mod.rs":"2eae90f207fad2e45957ec9287064992a419e3fc916aba84faff2ea25cbeb5ee","src/ir/module.rs":"c4d90bf38fe3672e01923734ccbdb7951ea929949d5f413a9c2aee12395a5094","src/ir/objc.rs":"758aa955a0c5d6ad82606c88a1f4cd1d93e666b71e82d43b18b1aaae96cf888a","src/ir/template.rs":"c0f8570b927dfd6a421fc4ce3094ec837a3ed936445225dbfac961e8e0842ae5","src/ir/traversal.rs":"ea751379a5aec02f93f8d2c61e18232776b1f000dbeae64b9a7195ba21a19dd6","src/ir/ty.rs":"952fb04cd6a71a2bca5c509aecacb42a1de0cae75824941541a38dc589f0993a","src/ir/var.rs":"8bdafb6d02f2c55ae11c28d88b19fb7a65ba8466da12ff039ae4c16c790b291e","src/lib.rs":"d5c8b404c515d30fc2d78b28eb84cff6b256f1f1e2dbd6aca280529bb2af6879","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"e519053bcdde6bc88f60f955246a02d53b3db1cc5ccd1612e6675b790b7460b0","src/options.rs":"041d635c8f6712ca32676a68f06d0245faed5577d9513786e058540ea2a69a7f","src/parse.rs":"be7d13cc84fae79ec7b3aa9e77063fa475a48d74a854423e2c72d75006a25202","src/regex_set.rs":"5cb72fc3714c0d79e9e942d003349c0775fafd7cd0c9603c65f5261883bbf9cf","src/time.rs":"3b763e6fee51d0eb01228dfe28bc28a9f692aff73b2a7b90a030902e0238fca6"},"package":"6bd7710ac8399ae1ebe1e3aac7c9047c4f39f2c94b33c997f482f49e96991f7c"} +\ No newline at end of file ++{"files":{"Cargo.toml":"9af635e7bad9021a49742a312faf6178b757dbd48aabc998931d6f491f14c179","LICENSE":"c23953d9deb0a3312dbeaf6c128a657f3591acee45067612fa68405eaa4525db","README.md":"5a1f556c6a57c0a6ccc65e19c27718e0f4b32381a8efcc80f6601b33c58c5d59","build.rs":"a9f6915c54d75f357ce32f96327bf4df53dc81a505b70831978f9dac6f43841d","src/callbacks.rs":"b24d7982332c6a35928f134184ddf4072fe4545a45546b97b9b0e0c1fbb77c08","src/clang.rs":"e9203eb5a1b432efebafcd011896e35e8c9145037bf99e7bb3709dc1b8e8e783","src/codegen/bitfield_unit.rs":"88b0604322dc449fc9284850eadc1f5d14b42fa747d4258bae0b6b9535f52dfd","src/codegen/bitfield_unit_tests.rs":"2073ac6a36e0bc9afaef5b1207966817c8fb7a1a9f6368c3b1b8f79822efbfba","src/codegen/error.rs":"2613af1d833377fd4a70719f4a09951d9d45dc9227827b9a2a938a1bcaaea2dd","src/codegen/helpers.rs":"fbd23e68dd51ccaddeb9761394d5df2db49baded0e2dccf6bbc52a2d6de502eb","src/codegen/impl_debug.rs":"f82969461d522fb758eca552ceaf189122a404cbb47fcc16008bfe52fc62aefa","src/codegen/impl_partialeq.rs":"d40d9ee2849c4d3d557b033c4d3af5e6de4a44347f67c0f016198086338811af","src/codegen/mod.rs":"238d989e13b7556e5d120a2bfe85b43332fba56cbe8df886d4c32e650fff1247","src/codegen/struct_layout.rs":"3fa5524aff82365ce292b0cc85080514c85a6dbd31bce90f001773b995dda28e","src/extra_assertions.rs":"494534bd4f18b80d89b180c8a93733e6617edcf7deac413e9a73fd6e7bc9ced7","src/features.rs":"c5fd7149f4a3b41fd4f89ade08505170942f4bc791bcb6a34fdddd3ae61856f8","src/ir/analysis/derive.rs":"325d4c1c1e6194e743f42a2316f1501b0ef852fe309f2e9cac3434825ad235f0","src/ir/analysis/has_destructor.rs":"63644f479738df35e531d3324ff892614083c3656e0747aa34d9f20dada878ec","src/ir/analysis/has_float.rs":"76162a309e4285a806755a08c687a3e7bc894a100a63da4e88584035e215b11d","src/ir/analysis/has_type_param_in_array.rs":"fdbc0af28a144c88ea2de83e6e6da5e1ffb40e3dd63fd7a708095d085bb06f94","src/ir/analysis/has_vtable.rs":"8c92a52c0f859c7bec7bfbc36b9d18f904baab0c8c9dc1b3e7af34de1a0b0da4","src/ir/analysis/mod.rs":"1f218e15c19f6666512908abc853fa7ff9ca5d0fafd94f026d9e4b0ce287ec3c","src/ir/analysis/sizedness.rs":"71f1a37f75b971ea5b0d8457473cc410947dbf706cb6d2c0338916910b78a675","src/ir/analysis/template_params.rs":"6312c008bbc80f50e72a766756c8daddea0b6eeb31ec924b83a231df931e170e","src/ir/annotations.rs":"39a5ab19f4d5dfa617577e4a0d0d2b67b5369d480c7cca4b14d172458c9843f0","src/ir/comment.rs":"c48abe01c5af0f09f583a89f1394bc6c161b40f6c8f0f600bbfe3c907b47969b","src/ir/comp.rs":"ca439407faefbe3a198246f0a1dbdf4e40307e45eaaad317e85d1aab37bb31fc","src/ir/context.rs":"599226eb04d337a1b1b13af91af91bdb02dbd5f26f274cbc0ebc4489eb144fc0","src/ir/derive.rs":"e5581852eec87918901a129284b4965aefc8a19394187a8095779a084f28fabe","src/ir/dot.rs":"95ed2968fc3239d87892e9f1edf1ed6dd18630d949564961765967ea1d16960c","src/ir/enum_ty.rs":"9cc242d6b3c1866665594e8b306860ee39c0ea42d22198d46b7fded473fe3e84","src/ir/function.rs":"2d41d9df19f42b0c383f338be4c026c005853a8d1caf5f3e5a2f3a8dad202232","src/ir/int.rs":"07e0c7dbd2dd977177fae3acd2a14adf271c6cf9ff4b57cddc11d50734fd4801","src/ir/item.rs":"3bcdb69b793350e5744aec3577cdbb1e5068ece5220c38763cecd82dfb5e8f03","src/ir/item_kind.rs":"dbeae8c4fd0e5c9485d325aea040e056a1f2cd6d43fc927dee8fe1c0c59a7197","src/ir/layout.rs":"d49582081f5f86f7595afbe4845f38fb3b969a840b568f4a49b265e7d790bb5b","src/ir/mod.rs":"2eae90f207fad2e45957ec9287064992a419e3fc916aba84faff2ea25cbeb5ee","src/ir/module.rs":"c4d90bf38fe3672e01923734ccbdb7951ea929949d5f413a9c2aee12395a5094","src/ir/objc.rs":"758aa955a0c5d6ad82606c88a1f4cd1d93e666b71e82d43b18b1aaae96cf888a","src/ir/template.rs":"c0f8570b927dfd6a421fc4ce3094ec837a3ed936445225dbfac961e8e0842ae5","src/ir/traversal.rs":"ea751379a5aec02f93f8d2c61e18232776b1f000dbeae64b9a7195ba21a19dd6","src/ir/ty.rs":"952fb04cd6a71a2bca5c509aecacb42a1de0cae75824941541a38dc589f0993a","src/ir/var.rs":"8bdafb6d02f2c55ae11c28d88b19fb7a65ba8466da12ff039ae4c16c790b291e","src/lib.rs":"d5c8b404c515d30fc2d78b28eb84cff6b256f1f1e2dbd6aca280529bb2af6879","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"e519053bcdde6bc88f60f955246a02d53b3db1cc5ccd1612e6675b790b7460b0","src/options.rs":"041d635c8f6712ca32676a68f06d0245faed5577d9513786e058540ea2a69a7f","src/parse.rs":"be7d13cc84fae79ec7b3aa9e77063fa475a48d74a854423e2c72d75006a25202","src/regex_set.rs":"5cb72fc3714c0d79e9e942d003349c0775fafd7cd0c9603c65f5261883bbf9cf","src/time.rs":"3b763e6fee51d0eb01228dfe28bc28a9f692aff73b2a7b90a030902e0238fca6"},"package":"6bd7710ac8399ae1ebe1e3aac7c9047c4f39f2c94b33c997f482f49e96991f7c"} +diff -up a/third_party/rust/bindgen/src/ir/analysis/has_vtable.rs.bindgen b/third_party/rust/bindgen/src/ir/analysis/has_vtable.rs +--- a/third_party/rust/bindgen/src/ir/analysis/has_vtable.rs.bindgen 2019-12-01 15:29:26.000000000 +0100 ++++ b/third_party/rust/bindgen/src/ir/analysis/has_vtable.rs 2019-12-04 11:33:09.631921359 +0100 +@@ -9,17 +9,17 @@ use std::ops; + use {HashMap, Entry}; + + /// The result of the `HasVtableAnalysis` for an individual item. +-#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord)] ++#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] + pub enum HasVtableResult { +- /// The item has a vtable, but the actual vtable pointer is in a base +- /// member. +- BaseHasVtable, ++ /// The item does not have a vtable pointer. ++ No, + + /// The item has a vtable and the actual vtable pointer is within this item. + SelfHasVtable, + +- /// The item does not have a vtable pointer. +- No ++ /// The item has a vtable, but the actual vtable pointer is in a base ++ /// member. ++ BaseHasVtable, + } + + impl Default for HasVtableResult { +@@ -28,21 +28,6 @@ impl Default for HasVtableResult { + } + } + +-impl cmp::PartialOrd for HasVtableResult { +- fn partial_cmp(&self, rhs: &Self) -> Option { +- use self::HasVtableResult::*; +- +- match (*self, *rhs) { +- (x, y) if x == y => Some(cmp::Ordering::Equal), +- (BaseHasVtable, _) => Some(cmp::Ordering::Greater), +- (_, BaseHasVtable) => Some(cmp::Ordering::Less), +- (SelfHasVtable, _) => Some(cmp::Ordering::Greater), +- (_, SelfHasVtable) => Some(cmp::Ordering::Less), +- _ => unreachable!(), +- } +- } +-} +- + impl HasVtableResult { + /// Take the least upper bound of `self` and `rhs`. + pub fn join(self, rhs: Self) -> Self { +diff -up a/third_party/rust/bindgen/src/ir/analysis/sizedness.rs.bindgen b/third_party/rust/bindgen/src/ir/analysis/sizedness.rs +--- a/third_party/rust/bindgen/src/ir/analysis/sizedness.rs.bindgen 2019-12-01 15:29:26.000000000 +0100 ++++ b/third_party/rust/bindgen/src/ir/analysis/sizedness.rs 2019-12-04 11:33:09.632921362 +0100 +@@ -22,13 +22,14 @@ use {HashMap, Entry}; + /// + /// We initially assume that all types are `ZeroSized` and then update our + /// understanding as we learn more about each type. +-#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord)] ++#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] + pub enum SizednessResult { +- /// Has some size that is known to be greater than zero. That doesn't mean +- /// it has a static size, but it is not zero sized for sure. In other words, +- /// it might contain an incomplete array or some other dynamically sized +- /// type. +- NonZeroSized, ++ /// The type is zero-sized. ++ /// ++ /// This means that if it is a C++ type, and is not being used as a base ++ /// member, then we must add an `_address` byte to enforce the ++ /// unique-address-per-distinct-object-instance rule. ++ ZeroSized, + + /// Whether this type is zero-sized or not depends on whether a type + /// parameter is zero-sized or not. +@@ -52,12 +53,11 @@ pub enum SizednessResult { + /// https://github.com/rust-lang-nursery/rust-bindgen/issues/586 + DependsOnTypeParam, + +- /// The type is zero-sized. +- /// +- /// This means that if it is a C++ type, and is not being used as a base +- /// member, then we must add an `_address` byte to enforce the +- /// unique-address-per-distinct-object-instance rule. +- ZeroSized, ++ /// Has some size that is known to be greater than zero. That doesn't mean ++ /// it has a static size, but it is not zero sized for sure. In other words, ++ /// it might contain an incomplete array or some other dynamically sized ++ /// type. ++ NonZeroSized, + } + + impl Default for SizednessResult { +@@ -66,21 +66,6 @@ impl Default for SizednessResult { + } + } + +-impl cmp::PartialOrd for SizednessResult { +- fn partial_cmp(&self, rhs: &Self) -> Option { +- use self::SizednessResult::*; +- +- match (*self, *rhs) { +- (x, y) if x == y => Some(cmp::Ordering::Equal), +- (NonZeroSized, _) => Some(cmp::Ordering::Greater), +- (_, NonZeroSized) => Some(cmp::Ordering::Less), +- (DependsOnTypeParam, _) => Some(cmp::Ordering::Greater), +- (_, DependsOnTypeParam) => Some(cmp::Ordering::Less), +- _ => unreachable!(), +- } +- } +-} +- + impl SizednessResult { + /// Take the least upper bound of `self` and `rhs`. + pub fn join(self, rhs: Self) -> Self { +diff -up a/third_party/rust/bindgen/src/ir/derive.rs.bindgen b/third_party/rust/bindgen/src/ir/derive.rs +--- a/third_party/rust/bindgen/src/ir/derive.rs.bindgen 2019-12-01 15:29:26.000000000 +0100 ++++ b/third_party/rust/bindgen/src/ir/derive.rs 2019-12-04 11:33:09.632921362 +0100 +@@ -92,10 +92,10 @@ pub trait CanDeriveOrd { + /// + /// Initially we assume that we can derive trait for all types and then + /// update our understanding as we learn more about each type. +-#[derive(Debug, Copy, Clone, PartialEq, Eq, Ord)] ++#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] + pub enum CanDerive { +- /// No, we cannot. +- No, ++ /// Yes, we can derive automatically. ++ Yes, + + /// The only thing that stops us from automatically deriving is that + /// array with more than maximum number of elements is used. +@@ -103,8 +103,8 @@ pub enum CanDerive { + /// This means we probably can "manually" implement such trait. + Manually, + +- /// Yes, we can derive automatically. +- Yes, ++ /// No, we cannot. ++ No, + } + + impl Default for CanDerive { +@@ -113,22 +113,6 @@ impl Default for CanDerive { + } + } + +-impl cmp::PartialOrd for CanDerive { +- fn partial_cmp(&self, rhs: &Self) -> Option { +- use self::CanDerive::*; +- +- let ordering = match (*self, *rhs) { +- (x, y) if x == y => cmp::Ordering::Equal, +- (No, _) => cmp::Ordering::Greater, +- (_, No) => cmp::Ordering::Less, +- (Manually, _) => cmp::Ordering::Greater, +- (_, Manually) => cmp::Ordering::Less, +- _ => unreachable!() +- }; +- Some(ordering) +- } +-} +- + impl CanDerive { + /// Take the least upper bound of `self` and `rhs`. + pub fn join(self, rhs: Self) -> Self { + diff --git a/icecat.spec b/icecat.spec index 3d77aa3..2a9ceb4 100644 --- a/icecat.spec +++ b/icecat.spec @@ -178,7 +178,9 @@ Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch Patch417: bug1375074-save-restore-x28.patch Patch418: mozilla-1556602.patch +# Patches for compatibility with Rust-1.39 Patch419: mozilla-1564873.patch +Patch420: icecat-68.3.0-cbindgen_for_rust139.patch # Fix crash on ppc64le (mozilla#1512162) Patch423: mozilla-1512162.patch @@ -390,6 +392,7 @@ tar -xf %{SOURCE5} %patch418 -p1 -b .mozilla-1556602 %patch419 -p1 -b .mozilla-1564873 +%patch420 -p1 -b .icecat-68.3.0-cbindgen_for_rust139 %patch423 -p1 -b .mozilla-1596503 %patch424 -p1 -b .mozilla-1566876-webrtc-ind @@ -829,8 +832,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog -* Mon Dec 02 2019 Antonio Trande - 68.3.0-1.gnu1 +* Wed Dec 04 2019 Antonio Trande - 68.3.0-1.gnu1 - Mozilla release 68.3.0ESR +- Patch for cbindgen/rust-1.39 * Wed Nov 27 2019 Antonio Trande - 68.3.0-0.1.rc2.gnu1 - Mozilla release candidate 68.3.0ESR From 4612a383fce1e0e9be9fecf230633f3f800b7a30 Mon Sep 17 00:00:00 2001 From: sagitter Date: Thu, 5 Dec 2019 10:20:28 +0100 Subject: [PATCH 086/473] Update appdata file --- icecat.appdata.xml | 27 ++++++++++++++++++++++----- icecat.spec | 17 ++++++++++++++--- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/icecat.appdata.xml b/icecat.appdata.xml index 9896394..7cc9151 100644 --- a/icecat.appdata.xml +++ b/icecat.appdata.xml @@ -11,7 +11,7 @@

    - GNUzilla is the GNU version of the Mozilla suite, and GNU IceCat is the GNU version of the Firefox ESR browser. + GNUZilla Icecat is a fully-free fork of Mozilla Firefox ESR browser.

    Its main advantage is an ethical one: it is entirely free software: @@ -35,10 +35,27 @@ and disable the ones more prone to break websites.

  • + LibreJS + GNU LibreJS aims to address the JavaScript problem described in Richard + Stallman's article The JavaScript Trap +
  • +
  • + LibrifyJS: libgen.me + Libre replacement for JavaScript blocked by GNU LibreJS on libgen.me +
  • +
  • HTTPS Everywhere HTTPS Everywhere is an extension that encrypts your communications with many major websites, making your browsing more secure
  • + Onion Browser Button + Easily browse the internet using TOR proxy with just one click +
  • +
  • + ViewTube + Watch videos from video sharing websites with extra options +
  • +
  • A set of companion extensions for LibreJS by Nathan Nichols (https://addons.mozilla.org/en-US/firefox/user/NateN1222/) are pre-installed, and provide workarounds to use some services at USPS, RSF.org, SumOfUs.org, pay.gov, McDonald's, goteo.org and Google Docs without using nonfree JavaScript. @@ -57,16 +74,16 @@ http://www.gnu.org/software/gnuzilla/ - https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat1.png + https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat68-1.png - https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat2.png + https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat68-2.png - https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat3.png + https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat68-3.png - https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat4.png + https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat68-4.png sagitter_at_fedoraproject.org diff --git a/icecat.spec b/icecat.spec index 2a9ceb4..114fd6d 100644 --- a/icecat.spec +++ b/icecat.spec @@ -92,7 +92,7 @@ ExcludeArch: s390x Name: icecat Version: 68.3.0 -Release: 1%{extra_ver}.%{gnu_ver}%{?pre_tag}%{?dist} +Release: 2%{extra_ver}.%{gnu_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -181,6 +181,7 @@ Patch418: mozilla-1556602.patch # Patches for compatibility with Rust-1.39 Patch419: mozilla-1564873.patch Patch420: icecat-68.3.0-cbindgen_for_rust139.patch +# # Fix crash on ppc64le (mozilla#1512162) Patch423: mozilla-1512162.patch @@ -312,12 +313,18 @@ Extensions included to this version of IceCat: GNU LibreJS aims to address the JavaScript problem described in Richard Stallman's article The JavaScript Trap + * LibrifyJS: libgen.me + Libre replacement for JavaScript blocked by GNU LibreJS on libgen.me + * HTTPS Everywhere HTTPS Everywhere is an extension that encrypts your communications with many major websites, making your browsing more secure - * LibrifyJS: libgen.me - Libre replacement for JavaScript blocked by GNU LibreJS on libgen.me + * Onion Browser Button + Easily browse the internet using TOR proxy with just one click + + * ViewTube + Watch videos from video sharing websites with extra options %if 0%{?wayland_backend_default} %package x11 @@ -832,6 +839,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Thu Dec 05 2019 Antonio Trande - 68.3.0-2.gnu1 +- Appdata file updated +- Description updated + * Wed Dec 04 2019 Antonio Trande - 68.3.0-1.gnu1 - Mozilla release 68.3.0ESR - Patch for cbindgen/rust-1.39 From 6bb399e61e4f3013e09ef2d389d95cc9d2e0365f Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 1 Jan 2020 13:17:43 +0100 Subject: [PATCH 087/473] Mozilla pre release 68.4.0 --- .gitignore | 1 + bug1375074-save-restore-x28.patch | 75 -- icecat-lang_download.sh | 2 +- icecat.spec | 354 +++++---- mozilla-1556602.patch | 1154 ----------------------------- sources | 3 +- 6 files changed, 179 insertions(+), 1410 deletions(-) delete mode 100644 bug1375074-save-restore-x28.patch delete mode 100644 mozilla-1556602.patch diff --git a/.gitignore b/.gitignore index ba2e9fc..d1610d7 100644 --- a/.gitignore +++ b/.gitignore @@ -95,3 +95,4 @@ /icecat-68.2.0-gnu2.tar.bz2 /icecat-68.3.0-gnu1.tar.bz2 /icecat-68.3.0-langpacks.tar.gz +/icecat-68.4.0-gnu1.tar.bz2 diff --git a/bug1375074-save-restore-x28.patch b/bug1375074-save-restore-x28.patch deleted file mode 100644 index 4db683b..0000000 --- a/bug1375074-save-restore-x28.patch +++ /dev/null @@ -1,75 +0,0 @@ -# HG changeset patch -# User Lars T Hansen -# Date 1519822672 -3600 -# Wed Feb 28 13:57:52 2018 +0100 -# Node ID 672f0415217b202ae59a930769dffd9d6ba6b87c -# Parent 825fd04dacc6297d3a980ec4184079405950b35d -Bug 1375074 - Save and restore non-volatile x28 on ARM64 for generated unboxed object constructor. - -diff --git a/js/src/jit-test/tests/bug1375074.js b/js/src/jit-test/tests/bug1375074.js -new file mode 100644 ---- /dev/null -+++ b/js/src/jit-test/tests/bug1375074.js -@@ -0,0 +1,18 @@ -+// This forces the VM to start creating unboxed objects and thus stresses a -+// particular path into generated code for a specialized unboxed object -+// constructor. -+ -+var K = 2000; // 2000 should be plenty -+var s = "["; -+var i; -+for ( i=0; i < K-1; i++ ) -+ s = s + `{"i":${i}},`; -+s += `{"i":${i}}]`; -+var v = JSON.parse(s); -+ -+assertEq(v.length == K, true); -+ -+for ( i=0; i < K; i++) { -+ assertEq(v[i] instanceof Object, true); -+ assertEq(v[i].i, i); -+} -diff --git a/js/src/vm/UnboxedObject.cpp b/js/src/vm/UnboxedObject.cpp ---- a/js/src/vm/UnboxedObject.cpp -+++ b/js/src/vm/UnboxedObject.cpp -@@ -95,7 +95,15 @@ UnboxedLayout::makeConstructorCode(JSCon - #endif - - #ifdef JS_CODEGEN_ARM64 -- // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing. -+ // ARM64 communicates stack address via sp, but uses a pseudo-sp (PSP) for -+ // addressing. The register we use for PSP may however also be used by -+ // calling code, and it is nonvolatile, so save it. Do this as a special -+ // case first because the generic save/restore code needs the PSP to be -+ // initialized already. -+ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64())); -+ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex)); -+ -+ // Initialize the PSP from the SP. - masm.initStackPtr(); - #endif - -@@ -233,7 +241,22 @@ UnboxedLayout::makeConstructorCode(JSCon - masm.pop(ScratchDoubleReg); - masm.PopRegsInMask(savedNonVolatileRegisters); - -+#ifdef JS_CODEGEN_ARM64 -+ // Now restore the value that was in the PSP register on entry, and return. -+ -+ // Obtain the correct SP from the PSP. -+ masm.Mov(sp, PseudoStackPointer64); -+ -+ // Restore the saved value of the PSP register, this value is whatever the -+ // caller had saved in it, not any actual SP value, and it must not be -+ // overwritten subsequently. -+ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex)); -+ -+ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong. -+ masm.Ret(vixl::lr); -+#else - masm.abiret(); -+#endif - - masm.bind(&failureStoreOther); - - diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index d7bbfe7..a3c7bd5 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=68.3.0 +VERSION=68.4.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.spec b/icecat.spec index 114fd6d..e1d8e06 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,8 +1,11 @@ -# Set to true if it's going to be submitted as update. +# Set to true if it's going to be submitted as update %global release_build 1 +# Set to true if it's going to be submitted as release candidate +%global release_candidate 1 + # Active/Deactive language files handling -%global build_langpacks 1 +%global build_langpacks 0 %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html @@ -83,16 +86,17 @@ ExcludeArch: s390x %global gnu_ver gnu1 # Set extra version tag -#%%global extra_ver .rc2 -%global extra_ver %%{nil} +%if 0%{?release_candidate} +%global extra_ver .rc1 +%endif %if !%{release_build} %global pre_tag .test %endif Name: icecat -Version: 68.3.0 -Release: 2%{extra_ver}.%{gnu_ver}%{?pre_tag}%{?dist} +Version: 68.4.0 +Release: 0.1%{extra_ver}.%{gnu_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -173,10 +177,7 @@ Patch219: rhbz-1173156.patch Patch226: rhbz-1354671.patch # Upstream patches -#Patch413: mozilla-1353817.patch Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch -Patch417: bug1375074-save-restore-x28.patch -Patch418: mozilla-1556602.patch # Patches for compatibility with Rust-1.39 Patch419: mozilla-1564873.patch @@ -379,12 +380,10 @@ tar -xf %{SOURCE5} %patch226 -p1 -b .1354671 %endif -#%%patch413 -p1 -b .1353817 %ifarch %{arm} %patch414 -p1 -b .Bug-1238661---fix-mozillaSignalTrampoline-to-work %patch44 -p1 -b .build-arm-libopus %endif -#%%patch417 -p1 -b .bug1375074-save-restore-x28 # Patch for big endian platforms only %if 0%{?big_endian} @@ -393,13 +392,8 @@ tar -xf %{SOURCE5} %patch29 -p1 -b .big-endian %endif -%ifarch ppc64 ppc64le -#%%patch423 -p1 -b .1512162 -%endif -%patch418 -p1 -b .mozilla-1556602 - %patch419 -p1 -b .mozilla-1564873 -%patch420 -p1 -b .icecat-68.3.0-cbindgen_for_rust139 +#%%patch420 -p1 -b .icecat-68.3.0-cbindgen_for_rust139 %patch423 -p1 -b .mozilla-1596503 %patch424 -p1 -b .mozilla-1566876-webrtc-ind @@ -839,168 +833,172 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog -* Thu Dec 05 2019 Antonio Trande - 68.3.0-2.gnu1 +* Wed Jan 01 2020 Antonio Trande - 68.4.0-0.1.rc1.gnu1 +- Mozilla release candidate 68.4.0ESR +- Fix rhbz#1785956 + +* Thu Dec 05 2019 Antonio Trande - 68.3.0-2.gnu1 - Appdata file updated - Description updated -* Wed Dec 04 2019 Antonio Trande - 68.3.0-1.gnu1 +* Wed Dec 04 2019 Antonio Trande - 68.3.0-1.gnu1 - Mozilla release 68.3.0ESR - Patch for cbindgen/rust-1.39 -* Wed Nov 27 2019 Antonio Trande - 68.3.0-0.1.rc2.gnu1 +* Wed Nov 27 2019 Antonio Trande - 68.3.0-0.1.rc2.gnu1 - Mozilla release candidate 68.3.0ESR -* Fri Nov 22 2019 Antonio Trande - 68.2.0-4.gnu3.test +* Fri Nov 22 2019 Antonio Trande - 68.2.0-4.gnu3.test - Build release 68.2.0-gnu3 - Undo latest change - Patched for rust-1.39+ -* Sun Nov 10 2019 Antonio Trande - 68.2.0-3.gnu2 +* Sun Nov 10 2019 Antonio Trande - 68.2.0-3.gnu2 - Do not remove cose.manifest files -* Fri Nov 08 2019 Antonio Trande - 68.2.0-2.gnu2 +* Fri Nov 08 2019 Antonio Trande - 68.2.0-2.gnu2 - Build release 68.2.0-gnu2 - HTTPS-Everywhere 2019_11_7 - Use always system vpx (Fedora 30+) - Patched for Mozilla bug #1556602 -* Tue Oct 22 2019 Antonio Trande - 68.2.0-1.gnu1 +* Tue Oct 22 2019 Antonio Trande - 68.2.0-1.gnu1 - Mozilla release 68.2.0ESR -* Tue Sep 03 2019 Antonio Trande - 68.1.0-1.gnu1 +* Tue Sep 03 2019 Antonio Trande - 68.1.0-1.gnu1 - Mozilla release 68.1.0ESR - Incorporate Wayland patches from Firefox 68 -* Sun Sep 01 2019 Antonio Trande - 68.0.2-5.gnu3 +* Sun Sep 01 2019 Antonio Trande - 68.0.2-5.gnu3 - Rebuild after retiring of Python2 -* Fri Aug 23 2019 Antonio Trande - 68.0.2-4.gnu3 +* Fri Aug 23 2019 Antonio Trande - 68.0.2-4.gnu3 - Enable langpacks -* Wed Aug 21 2019 Antonio Trande - 68.0.2-3.gnu3 +* Wed Aug 21 2019 Antonio Trande - 68.0.2-3.gnu3 - gnu3 build release -* Mon Aug 19 2019 Antonio Trande - 68.0.2-2.gnu2 +* Mon Aug 19 2019 Antonio Trande - 68.0.2-2.gnu2 - WebRTC always disabled - Do not build langpacks - gnu2 build release - Disable MOZ_SERVICES_SYNC -* Thu Aug 15 2019 Antonio Trande - 68.0.2-1.gnu1 +* Thu Aug 15 2019 Antonio Trande - 68.0.2-1.gnu1 - Mozilla release 68.0.2ESR - Import cbindgen stuff from Firefox package - Do not use sqlite from system -* Sun Jul 28 2019 Antonio Trande - 60.8.0-6.gnu1 +* Sun Jul 28 2019 Antonio Trande - 60.8.0-6.gnu1 - Add patch to fix the addon installation * Thu Jul 25 2019 Fedora Release Engineering - 60.8.0-6.gnu1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild -* Tue Jul 23 2019 Antonio Trande - 60.8.0-5.gnu1 +* Tue Jul 23 2019 Antonio Trande - 60.8.0-5.gnu1 - Enable WebRTC on ppc64le -* Fri Jul 12 2019 Antonio Trande - 60.8.0-4.gnu1 +* Fri Jul 12 2019 Antonio Trande - 60.8.0-4.gnu1 - Remove redundant Python2 dependencies -* Thu Jul 11 2019 Antonio Trande - 60.8.0-3.gnu1 +* Thu Jul 11 2019 Antonio Trande - 60.8.0-3.gnu1 - Remove filtering of private libraries - Enable webrtc on %%{ix86} x86_64 only -* Wed Jul 10 2019 Antonio Trande - 60.8.0-2.gnu1 +* Wed Jul 10 2019 Antonio Trande - 60.8.0-2.gnu1 - Use mozilla-1512162.patch on Fedora 30+ only (GCC-9) -* Tue Jul 09 2019 Antonio Trande - 60.8.0-1.gnu1 +* Tue Jul 09 2019 Antonio Trande - 60.8.0-1.gnu1 - Mozilla release 60.8.0ESR -* Sat Jun 22 2019 Antonio Trande - 60.7.2-1.gnu1 +* Sat Jun 22 2019 Antonio Trande - 60.7.2-1.gnu1 - Mozilla release 60.7.2ESR -* Wed Jun 19 2019 Antonio Trande - 60.7.1-1.gnu1 +* Wed Jun 19 2019 Antonio Trande - 60.7.1-1.gnu1 - Mozilla release 60.7.1ESR - Do not list Git-tracked icecat.rpmlintrc as source -* Tue May 28 2019 Antonio Trande - 60.7.0-2.gnu2 +* Tue May 28 2019 Antonio Trande - 60.7.0-2.gnu2 - Build release 60.7.0-gnu2 -* Mon May 20 2019 Antonio Trande - 60.7.0-1.gnu1 +* Mon May 20 2019 Antonio Trande - 60.7.0-1.gnu1 - Mozilla release 60.7.0ESR -* Sun May 12 2019 Antonio Trande - 60.6.3-2.gnu2 +* Sun May 12 2019 Antonio Trande - 60.6.3-2.gnu2 - Build release 60.6.3-gnu2 -* Thu May 09 2019 Antonio Trande - 60.6.3-1.gnu1 +* Thu May 09 2019 Antonio Trande - 60.6.3-1.gnu1 - Mozilla release 60.6.3ESR (bugfix mozb #1549249) -* Mon May 06 2019 Antonio Trande - 60.6.2-1.gnu1 +* Mon May 06 2019 Antonio Trande - 60.6.2-1.gnu1 - Mozilla release 60.6.2ESR (bugfix mozb #1549061) -* Sat Apr 06 2019 Antonio Trande - 60.6.1-2.gnu2 +* Sat Apr 06 2019 Antonio Trande - 60.6.1-2.gnu2 - Source archive rebuilt (gnu2) - Update extensions - Use bundled https-everywhere extension -* Fri Mar 22 2019 Antonio Trande - 60.6.1-1 +* Fri Mar 22 2019 Antonio Trande - 60.6.1-1 - Mozilla release 60.6.1ESR - Wayland backend made default starting from Fedora 31 (rhbz#1691852) -* Thu Mar 21 2019 Antonio Trande - 60.6.0-2 +* Thu Mar 21 2019 Antonio Trande - 60.6.0-2 - Patched for building with newer glibc (2.29.9000-4) (mozilla #1533969) - Excluded on ARM (rhbz #1658940) - Language files re-based -* Tue Mar 19 2019 Antonio Trande - 60.6.0-1 +* Tue Mar 19 2019 Antonio Trande - 60.6.0-1 - Mozilla release 60.6.0ESR - Enable languages -* Sun Mar 03 2019 Antonio Trande - 60.5.2-1 +* Sun Mar 03 2019 Antonio Trande - 60.5.2-1 - Mozilla release 60.5.2ESR - Disable Werror-format-security flags - Enable linker=gold on ARM - Try to fix libevent LD path -* Thu Feb 14 2019 Antonio Trande - 60.5.1-1 +* Thu Feb 14 2019 Antonio Trande - 60.5.1-1 - Mozilla release 60.5.1ESR - Conditional macro for libvpx support * Tue Feb 05 2019 Björn Esser - 60.5.0-2 - rebuilt (libvpx) -* Tue Jan 29 2019 Antonio Trande - 60.5.0-1 +* Tue Jan 29 2019 Antonio Trande - 60.5.0-1 - Mozilla release 60.5.0ESR -* Sun Jan 13 2019 Antonio Trande - 60.4.0-2 +* Sun Jan 13 2019 Antonio Trande - 60.4.0-2 - Make Wayland support default on fedora 30+ - Enable Wayland support - Drop old patches - Backported Wayland related code from Firefox 63 - Added fix for mozbz#1507475 - crash when display changes -* Wed Dec 12 2018 Antonio Trande - 60.4.0-1 +* Wed Dec 12 2018 Antonio Trande - 60.4.0-1 - Upstream release 60.4.0ESR * Tue Nov 13 2018 Caolán McNamara - 60.3.0-4 - rebuild for hunspell-1.7.0 -* Sat Nov 10 2018 Antonio Trande - 60.3.0-3 +* Sat Nov 10 2018 Antonio Trande - 60.3.0-3 - Rebuild with latest changes from Gnuzilla -* Wed Oct 31 2018 Antonio Trande - 60.3.0-2 +* Wed Oct 31 2018 Antonio Trande - 60.3.0-2 - Drop UserAgent patch (rhbz#1644898) -* Wed Oct 24 2018 Antonio Trande - 60.3.0-1 +* Wed Oct 24 2018 Antonio Trande - 60.3.0-1 - Upstream release 60.3.0ESR -* Wed Oct 03 2018 Antonio Trande - 60.2.2-2 +* Wed Oct 03 2018 Antonio Trande - 60.2.2-2 - Drop UserAgent patch (rhbz#1644898) -* Wed Oct 03 2018 Antonio Trande - 60.2.2-1 +* Wed Oct 03 2018 Antonio Trande - 60.2.2-1 - Upstream release 60.2.2ESR -* Fri Sep 28 2018 Antonio Trande - 60.2.1-1 +* Fri Sep 28 2018 Antonio Trande - 60.2.1-1 - Upstream release 60.2.1 -* Fri Sep 14 2018 Antonio Trande - 60.2.0-0.1 +* Fri Sep 14 2018 Antonio Trande - 60.2.0-0.1 - Pre-release 60.2.0ESR - Integrate firefox patches for wayland (disabled) - Setting of upstream patches for ESR60 @@ -1008,7 +1006,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Include languages - Use options to reduce memory requirements at ld runtime on ix86 -* Sun Aug 05 2018 Antonio Trande - 52.9.0-1 +* Sun Aug 05 2018 Antonio Trande - 52.9.0-1 - Update to 52.9.0 * Fri Jul 13 2018 Fedora Release Engineering - 52.8.1-3 @@ -1017,70 +1015,70 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Tue Jul 10 2018 Pete Walter - 52.8.1-2 - Rebuild for ICU 62 -* Thu Jun 07 2018 Antonio Trande - 52.8.1-1 +* Thu Jun 07 2018 Antonio Trande - 52.8.1-1 - Update to 52.8.1 - Add icecat.rpmlintrc -* Wed Jun 06 2018 Antonio Trande - 52.8.0-3 +* Wed Jun 06 2018 Antonio Trande - 52.8.0-3 - Source tarball re-created without non-free code * Tue Jun 5 2018 Tom Callaway - 52.8.0-2 - remove non-free files from tarball -* Sat May 12 2018 Antonio Trande - 52.8.0-1 +* Sat May 12 2018 Antonio Trande - 52.8.0-1 - Update to 52.8.0 * Mon Apr 30 2018 Pete Walter - 52.7.3-2 - Rebuild for ICU 61.1 -* Tue Mar 27 2018 Antonio Trande - 52.7.3-1 +* Tue Mar 27 2018 Antonio Trande - 52.7.3-1 - Update to 52.7.3 -* Tue Mar 20 2018 Antonio Trande - 52.7.2-1 +* Tue Mar 20 2018 Antonio Trande - 52.7.2-1 - Update to 52.7.2 -* Sat Mar 10 2018 Antonio Trande - 52.7.0-1 +* Sat Mar 10 2018 Antonio Trande - 52.7.0-1 - Update to 52.7.0 -* Tue Feb 27 2018 Antonio Trande - 52.6.0-7 +* Tue Feb 27 2018 Antonio Trande - 52.6.0-7 - HTTPS Everywhere updated to 2018.1.11 - "goteo.org payments with free JS" updated to 1.1 - "LibreJS compatible Pay.gov" updated to 1.3 - "Reveal hidden HTML" updated to 1.6 - Enabled WebRTC, but prevent leaking the LAN ip -* Sun Feb 18 2018 Antonio Trande - 52.6.0-6 +* Sun Feb 18 2018 Antonio Trande - 52.6.0-6 - Add gcc gcc-c++ BR -* Sun Feb 18 2018 Antonio Trande - 52.6.0-5 +* Sun Feb 18 2018 Antonio Trande - 52.6.0-5 - Rebuild for libevent-2.1.8 * Wed Feb 07 2018 Fedora Release Engineering - 52.6.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild -* Sun Jan 28 2018 Antonio Trande - 52.6.0-3 +* Sun Jan 28 2018 Antonio Trande - 52.6.0-3 - Rebuild for libvpx again * Fri Jan 26 2018 Tom Callaway - 52.6.0-2 - rebuild for new libvpx -* Wed Jan 24 2018 Antonio Trande - 52.6.0-1 +* Wed Jan 24 2018 Antonio Trande - 52.6.0-1 - Update to 52.6.0 * Thu Jan 11 2018 Igor Gnatenko - 52.5.3-4 - Remove obsolete scriptlets -* Sun Jan 07 2018 Antonio Trande - 52.5.3-3 +* Sun Jan 07 2018 Antonio Trande - 52.5.3-3 - Set build against NSS-3.34/NSPR-4.17.0 at least -* Sun Jan 07 2018 Antonio Trande - 52.5.3-2 +* Sun Jan 07 2018 Antonio Trande - 52.5.3-2 - Patched for mozilla bug-1427870 -* Sun Dec 31 2017 Antonio Trande - 52.5.3-1 +* Sun Dec 31 2017 Antonio Trande - 52.5.3-1 - Update to 52.5.3 - Use 'with-l10n' option -* Fri Dec 29 2017 Antonio Trande - 52.5.2-1 +* Fri Dec 29 2017 Antonio Trande - 52.5.2-1 - Update to 52.5.2 - WebRTC is always disabled - Add JACK audio backend (bz#1528742) @@ -1091,13 +1089,13 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Mon Dec 04 2017 Caolán McNamara - 52.3.0-3 - rebuild for hunspell-1.5.2 -* Sat Sep 02 2017 Antonio Trande - 52.3.0-2 +* Sat Sep 02 2017 Antonio Trande - 52.3.0-2 - Enable language files -* Wed Aug 16 2017 Antonio Trande - 52.3.0-1 +* Wed Aug 16 2017 Antonio Trande - 52.3.0-1 - Update to 52.3.0 -* Thu Aug 03 2017 Antonio Trande - 52.2.1-1 +* Thu Aug 03 2017 Antonio Trande - 52.2.1-1 - Update to 52.2.1 - ICU source code patched to work on big-endian architectures @@ -1107,7 +1105,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Mon May 15 2017 Fedora Release Engineering - 52.1.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild -* Sat May 06 2017 Antonio Trande - 52.1.0-2 +* Sat May 06 2017 Antonio Trande - 52.1.0-2 - Fix language files * Sat May 06 2017 Jens Lody - 52.1.0-1 @@ -1115,28 +1113,28 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Remove obsolete firefox-debug.patch - Spec-file: fix typo in description -* Sun Apr 16 2017 Antonio Trande - 52.0.2-3 +* Sun Apr 16 2017 Antonio Trande - 52.0.2-3 - Enable languages -* Fri Apr 14 2017 Antonio Trande - 52.0.2-2 +* Fri Apr 14 2017 Antonio Trande - 52.0.2-2 - Update to 52.0.2 - Add patch for mozbz#1158076 - enable dark theme by pref -* Sun Mar 26 2017 Antonio Trande - 52.0.1-5 +* Sun Mar 26 2017 Antonio Trande - 52.0.1-5 - Skia support disabled on ARM/ix86 builds (failed for memory exhausted) -* Sun Mar 26 2017 Antonio Trande - 52.0.1-4 +* Sun Mar 26 2017 Antonio Trande - 52.0.1-4 - Downgrade optimization level on ARM builds (failed for memory exhausted) - Use one job with Make on ix86 -* Wed Mar 22 2017 Antonio Trande - 52.0.1-3 +* Wed Mar 22 2017 Antonio Trande - 52.0.1-3 - Added fix for mozbz#1158076 -* Mon Mar 20 2017 Antonio Trande - 52.0.1-2 +* Mon Mar 20 2017 Antonio Trande - 52.0.1-2 - Set cflags/libs options for NSS/NSPR - Add --disable-elf-hack -* Sun Mar 19 2017 Antonio Trande - 52.0.1-1 +* Sun Mar 19 2017 Antonio Trande - 52.0.1-1 - Update to 52.0.1 - All patches synchronized with firefox @@ -1144,7 +1142,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - aarch64build-fix (taken from mozjs45) - include aarch64 again -* Sun Mar 05 2017 Antonio Trande - 45.7.0-7 +* Sun Mar 05 2017 Antonio Trande - 45.7.0-7 - Build with language files - Use new source archive - Exclude aarch64 @@ -1156,7 +1154,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - (Re-)add language-download.script and make Source-tag unconditional. - Fix debug build. -* Sat Feb 18 2017 Antonio Trande - 45.7.0-3 +* Sat Feb 18 2017 Antonio Trande - 45.7.0-3 - Optimization flags disabled on arm/arm64 * Thu Feb 16 2017 Jens Lody - - 45.7.0-3 @@ -1165,49 +1163,49 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Fri Feb 10 2017 Fedora Release Engineering - 45.7.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild -* Sat Feb 04 2017 Antonio Trande - 45.7.0-1 +* Sat Feb 04 2017 Antonio Trande - 45.7.0-1 - Update to 45.7.0 -* Sat Jan 21 2017 Antonio Trande - 45.5.1-7 +* Sat Jan 21 2017 Antonio Trande - 45.5.1-7 - Test for trying ICU patch -* Fri Jan 20 2017 Antonio Trande - 45.5.1-6 +* Fri Jan 20 2017 Antonio Trande - 45.5.1-6 - System ICU disabled on Fedora > 25 -* Fri Jan 20 2017 Antonio Trande - 45.5.1-5 +* Fri Jan 20 2017 Antonio Trande - 45.5.1-5 - Patched to make compatible with NSS 3.28.1 (bz#1414987) -* Thu Jan 05 2017 Antonio Trande - 45.5.1-4 +* Thu Jan 05 2017 Antonio Trande - 45.5.1-4 - Conformed to new rules for scriptlets * Tue Dec 13 2016 Caolán McNamara - 45.5.1-3 - rebuild for hunspell-1.5.4 -* Fri Dec 02 2016 Antonio Trande - 45.5.1-2 +* Fri Dec 02 2016 Antonio Trande - 45.5.1-2 - Keep workaround for bz#1332926 -* Fri Dec 02 2016 Antonio Trande - 45.5.1-1 +* Fri Dec 02 2016 Antonio Trande - 45.5.1-1 - Update to 45.5.1 -* Sun Nov 27 2016 Antonio Trande - 45.3.0-0.6.beta +* Sun Nov 27 2016 Antonio Trande - 45.3.0-0.6.beta - Debug build - Debug builds patched (mozb#1013882) - Patched for removing unnecessary warns -* Sun Sep 04 2016 Antonio Trande - 45.3.0-0.5.beta +* Sun Sep 04 2016 Antonio Trande - 45.3.0-0.5.beta - Drop obsolete patch -* Sat Sep 03 2016 Antonio Trande - 45.3.0-0.4.beta +* Sat Sep 03 2016 Antonio Trande - 45.3.0-0.4.beta - Use MOZ_SMP_FLAGS instead of MOZ_MAKE_FLAGS -* Thu Sep 01 2016 Antonio Trande - 45.3.0-0.3.beta +* Thu Sep 01 2016 Antonio Trande - 45.3.0-0.3.beta - Update desktop file's translations - Enable jemalloc -* Thu Sep 01 2016 Antonio Trande - 45.3.0-0.2.beta +* Thu Sep 01 2016 Antonio Trande - 45.3.0-0.2.beta - Disable optimization on ARM -* Mon Aug 29 2016 Antonio Trande - 45.3.0-0.1.beta +* Mon Aug 29 2016 Antonio Trande - 45.3.0-0.1.beta - Update to 45.3.0 (beta) - Drop old patches - Reset default compiler flags @@ -1216,41 +1214,41 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Fri Jul 22 2016 Tom Callaway - 38.8.0-13 - rebuild for libvpx 1.6.0 -* Wed Jun 29 2016 Antonio Trande - 38.8.0-12 +* Wed Jun 29 2016 Antonio Trande - 38.8.0-12 - Optimization level increased to -O1 -* Tue Jun 28 2016 Antonio Trande - 38.8.0-11 +* Tue Jun 28 2016 Antonio Trande - 38.8.0-11 - Fix appadata file's tags -* Sun Jun 26 2016 Antonio Trande - 38.8.0-10 +* Sun Jun 26 2016 Antonio Trande - 38.8.0-10 - Rebuild with newest icecat-38.8.0-gnu2 source archive (24 June) * Sun Jun 26 2016 Jens Lody - 38.8.0-9 - Workaround for #1332926 -* Sat Jun 18 2016 Antonio Trande - 38.8.0-8 +* Sat Jun 18 2016 Antonio Trande - 38.8.0-8 - Set MOZ_SMP_FLAGS -* Sat Jun 18 2016 Antonio Trande - 38.8.0-7 +* Sat Jun 18 2016 Antonio Trande - 38.8.0-7 - Undo latest change -* Sat Jun 18 2016 Antonio Trande - 38.8.0-6 +* Sat Jun 18 2016 Antonio Trande - 38.8.0-6 - Set C++14 standard flag -* Fri Jun 17 2016 Antonio Trande - 38.8.0-5 +* Fri Jun 17 2016 Antonio Trande - 38.8.0-5 - Set C++ standard flag -* Fri Jun 17 2016 Antonio Trande - 38.8.0-4 +* Fri Jun 17 2016 Antonio Trande - 38.8.0-4 - Disable install stripping - Disable builds for debugging -* Fri Jun 17 2016 Antonio Trande - 38.8.0-3 +* Fri Jun 17 2016 Antonio Trande - 38.8.0-3 - Enable builds for debugging -* Fri May 13 2016 Antonio Trande - 38.8.0-2 +* Fri May 13 2016 Antonio Trande - 38.8.0-2 - Remove additional flag -* Fri May 13 2016 Antonio Trande - 38.8.0-1 +* Fri May 13 2016 Antonio Trande - 38.8.0-1 - Update to 38.8.0 * Mon Apr 18 2016 Caolán McNamara - 38.7.1-4 @@ -1259,13 +1257,13 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Fri Apr 15 2016 David Tardon - 38.7.1-3 - rebuild for ICU 57.1 -* Sat Apr 09 2016 Antonio Trande - 38.7.1-2 +* Sat Apr 09 2016 Antonio Trande - 38.7.1-2 - Downgrade optimization level on ARM -* Fri Apr 08 2016 Antonio Trande - 38.7.1-1 +* Fri Apr 08 2016 Antonio Trande - 38.7.1-1 - Update to 38.7.1 -* Thu Feb 04 2016 Antonio Trande - 38.6.0-1 +* Thu Feb 04 2016 Antonio Trande - 38.6.0-1 - Update to 38.6.0 - Patched for GCC6 builds - Cut off Provides bundled libraries except xulrunner @@ -1273,137 +1271,137 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Thu Feb 04 2016 Fedora Release Engineering - 38.5.2-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild -* Mon Jan 04 2016 Antonio Trande - 38.5.2-4 +* Mon Jan 04 2016 Antonio Trande - 38.5.2-4 - Fix description of appdata file -* Mon Jan 04 2016 Antonio Trande - 38.5.2-3 +* Mon Jan 04 2016 Antonio Trande - 38.5.2-3 - Fix validating of desktop file -* Sun Jan 03 2016 Antonio Trande - 38.5.2-2 +* Sun Jan 03 2016 Antonio Trande - 38.5.2-2 - .desktop .appdata and .metainfo files renamed (bz#1295234) -* Fri Jan 01 2016 Antonio Trande - 38.5.2-1 +* Fri Jan 01 2016 Antonio Trande - 38.5.2-1 - Update to 38.5.2 -* Fri Dec 18 2015 Antonio Trande - 38.5.0-1 +* Fri Dec 18 2015 Antonio Trande - 38.5.0-1 - Update to 38.5.0 -* Tue Dec 08 2015 Antonio Trande - 38.4.0-3 +* Tue Dec 08 2015 Antonio Trande - 38.4.0-3 - Force -fstack-protector-all flag (bz#1283307) * Tue Dec 1 2015 Tom Callaway - 38.4.0-2 - rebuild for libvpx 1.5.0 -* Tue Nov 17 2015 Antonio Trande - 38.4.0-1 +* Tue Nov 17 2015 Antonio Trande - 38.4.0-1 - Update to 38.4.0 -* Tue Nov 03 2015 Antonio Trande - 38.3.0-12 +* Tue Nov 03 2015 Antonio Trande - 38.3.0-12 - ARM neon support disabled on aarch64 -* Sat Oct 31 2015 Antonio Trande - 38.3.0-11 +* Sat Oct 31 2015 Antonio Trande - 38.3.0-11 - Rebuild for ICU 56 -* Wed Oct 28 2015 Antonio Trande - 38.3.0-10 +* Wed Oct 28 2015 Antonio Trande - 38.3.0-10 - Rebuild with RPM_LD_FLAGS * Wed Oct 28 2015 David Tardon - 38.3.0-9 - rebuild for ICU 56.1 -* Tue Oct 20 2015 Antonio Trande - 38.3.0-8 +* Tue Oct 20 2015 Antonio Trande - 38.3.0-8 - Active hardened_build -* Tue Oct 13 2015 Antonio Trande - 38.3.0-7 +* Tue Oct 13 2015 Antonio Trande - 38.3.0-7 - Rebuilt with updated Addons -* Mon Oct 12 2015 Antonio Trande - 38.3.0-6 +* Mon Oct 12 2015 Antonio Trande - 38.3.0-6 - Fixed header files directory for freetype-2.6.1 -* Mon Oct 12 2015 Antonio Trande - 38.3.0-5 +* Mon Oct 12 2015 Antonio Trande - 38.3.0-5 - Languages packaged -* Tue Oct 06 2015 Antonio Trande - 38.3.0-4 +* Tue Oct 06 2015 Antonio Trande - 38.3.0-4 - WebRTC disabled on extra arches -* Tue Oct 06 2015 Antonio Trande - 38.3.0-3 +* Tue Oct 06 2015 Antonio Trande - 38.3.0-3 - Updated appdata and manpage files -* Mon Oct 05 2015 Antonio Trande - 38.3.0-2 +* Mon Oct 05 2015 Antonio Trande - 38.3.0-2 - Disabled crashreporter on F22+ -* Sat Oct 03 2015 Antonio Trande - 38.3.0-1 +* Sat Oct 03 2015 Antonio Trande - 38.3.0-1 - Update to 38.3.0 - Patches updated - Language files not packaged - Build defined for Gtk3 -* Thu Aug 13 2015 Antonio Trande - 31.8.0-5 +* Thu Aug 13 2015 Antonio Trande - 31.8.0-5 - Added backported patch for CVE-2015-4473_4482_4488_4489_4491_4492 vulnerabilities -* Thu Aug 13 2015 Antonio Trande - 31.8.0-4 +* Thu Aug 13 2015 Antonio Trande - 31.8.0-4 - Added backported patch for CVE-2015-4495 vulnerability -* Tue Jul 21 2015 Antonio Trande - 31.8.0-3 +* Tue Jul 21 2015 Antonio Trande - 31.8.0-3 - Fixed on secondary arches -* Mon Jul 20 2015 Antonio Trande - 31.8.0-2 +* Mon Jul 20 2015 Antonio Trande - 31.8.0-2 - Un-bundle libvpx-1.4 -* Fri Jul 17 2015 Antonio Trande - 31.8.0-1 +* Fri Jul 17 2015 Antonio Trande - 31.8.0-1 - Update to 31.8.0 -* Sun Jul 12 2015 Antonio Trande - 31.7.0-8 +* Sun Jul 12 2015 Antonio Trande - 31.7.0-8 - Packaged IceCat 31.7 in Fedora 21 -* Fri Jul 03 2015 Antonio Trande - 31.7.0-7 +* Fri Jul 03 2015 Antonio Trande - 31.7.0-7 - Fix .metainfo.xml file -* Thu Jul 02 2015 Antonio Trande - 31.7.0-6 +* Thu Jul 02 2015 Antonio Trande - 31.7.0-6 - Added .metainfo.xml file -* Thu Jun 18 2015 Antonio Trande - 31.7.0-5 +* Thu Jun 18 2015 Antonio Trande - 31.7.0-5 - Added options --enable-tree-freetype --enable-stdcxx-compat - Added patch for Freetype-2.6 headers * Wed Jun 17 2015 Fedora Release Engineering - 31.7.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild -* Sun Jun 14 2015 Antonio Trande - 31.7.0-3 +* Sun Jun 14 2015 Antonio Trande - 31.7.0-3 - Re-built locale files - Re-organized mozconfig options - Compiled with ccache -* Wed Jun 10 2015 Antonio Trande - 31.7.0-2 +* Wed Jun 10 2015 Antonio Trande - 31.7.0-2 - Unpacked files found -* Mon Jun 08 2015 Antonio Trande - 31.7.0-1 +* Mon Jun 08 2015 Antonio Trande - 31.7.0-1 - Update to 31.7.0 - Make sure locale works for langpacks - Set default bookmarks - Made appdata file - devel package obsoleted -* Mon May 04 2015 Antonio Trande - 31.6.0-6 +* Mon May 04 2015 Antonio Trande - 31.6.0-6 - Required VPX from system for < F23 -* Sun May 03 2015 Antonio Trande - 31.6.0-5 +* Sun May 03 2015 Antonio Trande - 31.6.0-5 - libvpx-1.3.0 bundled only in >= F23 -* Tue Apr 07 2015 Antonio Trande - 31.6.0-4 +* Tue Apr 07 2015 Antonio Trande - 31.6.0-4 - Disable optimization flags (when GCC5 compiles) on ARM -* Tue Apr 07 2015 Antonio Trande - 31.6.0-3 +* Tue Apr 07 2015 Antonio Trande - 31.6.0-3 - Compiled against bundle libvpx-1.3.0 * Mon Apr 06 2015 Tom Callaway - 31.6.0-2 - Rebuild for libvpx 1.4.0 -* Sat Apr 04 2015 Antonio Trande - 31.6.0-1 +* Sat Apr 04 2015 Antonio Trande - 31.6.0-1 - Update to 31.6.0 -* Mon Mar 16 2015 Antonio Trande - 31.5.0-2 +* Mon Mar 16 2015 Antonio Trande - 31.5.0-2 - New rebuild to fix profile's storage problem -* Thu Mar 12 2015 Antonio Trande - 31.5.0-1 +* Thu Mar 12 2015 Antonio Trande - 31.5.0-1 - Update to 31.5.0 - Patched to fix Mozilla Bug1021171 - crashreporter disabled on > F21 @@ -1412,16 +1410,16 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Wed Feb 04 2015 Petr Machata - 31.4.0-5 - Bump for rebuild. -* Mon Feb 02 2015 Antonio Trande - 31.4.0-4 +* Mon Feb 02 2015 Antonio Trande - 31.4.0-4 - Desktop file missing %%u (bz#1188078) -* Sat Jan 31 2015 Antonio Trande - 31.4.0-3 +* Sat Jan 31 2015 Antonio Trande - 31.4.0-3 - Annulled the user-agent string customization -* Thu Jan 29 2015 Antonio Trande - 31.4.0-2 +* Thu Jan 29 2015 Antonio Trande - 31.4.0-2 - Added %%license macro -* Thu Jan 29 2015 Antonio Trande - 31.4.0-1 +* Thu Jan 29 2015 Antonio Trande - 31.4.0-1 - Update to 31.4.0 - Added MPLv2.0 license of HTML5-video-everywhere extension - Description updated @@ -1429,77 +1427,77 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Mon Jan 26 2015 David Tardon - 31.2.0-8 - rebuild for ICU 54.1 -* Wed Jan 21 2015 Antonio Trande - 31.2.0-7 +* Wed Jan 21 2015 Antonio Trande - 31.2.0-7 - Package now requires system-bookmarks (bz#1184297) -* Wed Nov 26 2014 Antonio Trande - 31.2.0-6 +* Wed Nov 26 2014 Antonio Trande - 31.2.0-6 - libjpeg-turbo unbundled (bz#1164815) -* Thu Nov 06 2014 Antonio Trande - 31.2.0-5 +* Thu Nov 06 2014 Antonio Trande - 31.2.0-5 - Added -Wno-error=declaration-after-statement - Built against GStreamer-1.0 - Package compiled against bundled JPEG -* Sat Oct 25 2014 Antonio Trande - 31.2.0-4 +* Sat Oct 25 2014 Antonio Trande - 31.2.0-4 - Removed -fexceptions flags from Fedora optflags -* Thu Oct 23 2014 Antonio Trande - 31.2.0-3 +* Thu Oct 23 2014 Antonio Trande - 31.2.0-3 - Added -Wformat-security flags - Added special link flags for ARM -* Wed Oct 22 2014 Antonio Trande - 31.2.0-2 +* Wed Oct 22 2014 Antonio Trande - 31.2.0-2 - Fixed compiler flags -* Tue Oct 21 2014 Antonio Trande - 31.2.0-1 +* Tue Oct 21 2014 Antonio Trande - 31.2.0-1 - Update to 31.2.0 - Added 'configure' options - Built against system NSS/NSPR -* Thu Oct 16 2014 Antonio Trande - 31.1.1-1 +* Thu Oct 16 2014 Antonio Trande - 31.1.1-1 - Update to 31.1.1 - New bundled files (bz#1153135) - Static sub-package is not built anymore - Man-page updated - Spyblock addon included -* Tue Aug 26 2014 Antonio Trande - 24.0-14 +* Tue Aug 26 2014 Antonio Trande - 24.0-14 - Added "Provides: webclient" - Installed manpage file -* Tue Aug 19 2014 Antonio Trande - 24.0-13 +* Tue Aug 19 2014 Antonio Trande - 24.0-13 - Removed system xulrunner conditional - Ghosted all .xpi language files (handled by %%find_lang) - Added BSD, ISC, MIT, Apache2.0 licenses -* Sat Aug 09 2014 Antonio Trande - 24.0-12 +* Sat Aug 09 2014 Antonio Trande - 24.0-12 - Removed HTTPS-everywhere RequestPolicy extensions (patch7) -* Thu Jul 24 2014 Antonio Trande - 24.0-11 +* Thu Jul 24 2014 Antonio Trande - 24.0-11 - Remove precompiled .egg files - Remove bundled jar/class files - Delete chrpaths - Added 'Public Domain' license - Added a patch for using system Python Virtualenv (patch6) -* Wed Jul 16 2014 Antonio Trande - 24.0-10 +* Wed Jul 16 2014 Antonio Trande - 24.0-10 - Added freetype2 system-headers list for Fedora>=21 (patch5) -* Fri Apr 04 2014 Antonio Trande - 24.0-9 +* Fri Apr 04 2014 Antonio Trande - 24.0-9 - Defined other bundled() Provides -* Sat Mar 29 2014 Antonio Trande - 24.0-8 +* Sat Mar 29 2014 Antonio Trande - 24.0-8 - Use system nspr -* Wed Mar 26 2014 Antonio Trande - 24.0-7 +* Wed Mar 26 2014 Antonio Trande - 24.0-7 - Removed much more bundled files (added related BR packages) - Build browser and xulrunner - Added freetype2 reference patch -* Thu Feb 27 2014 Antonio Trande - 24.0-6 +* Thu Feb 27 2014 Antonio Trande - 24.0-6 - Sources patched to use system ogg/opus/vorbis libraries - Build browser alone -* Wed Feb 05 2014 Antonio Trande - 24.0-5 +* Wed Feb 05 2014 Antonio Trande - 24.0-5 - Fix some executable permissions - Added some tricks - Build browser and xulrunner @@ -1508,21 +1506,21 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Added COPYING separated license files - Added bundled() Provides -* Mon Jan 27 2014 Antonio Trande - 24.0-4 +* Mon Jan 27 2014 Antonio Trande - 24.0-4 - Build browser alone - Added libffi/libpng linkage from system to .mozconfig file - Added a patch to exclude APNG support missing error for libpng - Added libpng-devel BR -* Tue Jan 14 2014 Antonio Trande - 24.0-3 +* Tue Jan 14 2014 Antonio Trande - 24.0-3 - Removed bundled files - Added nspr/nss Requires -* Wed Jan 08 2014 Antonio Trande - 24.0-2 +* Wed Jan 08 2014 Antonio Trande - 24.0-2 - Timestamp preserving for the 'install' commands - Added a comment interpretation to the License tag - Defined all command calls in normal mode -* Sun Jan 05 2014 Antonio Trande - 24.0-1 +* Sun Jan 05 2014 Antonio Trande - 24.0-1 - Initial package diff --git a/mozilla-1556602.patch b/mozilla-1556602.patch deleted file mode 100644 index d3f07bf..0000000 --- a/mozilla-1556602.patch +++ /dev/null @@ -1,1154 +0,0 @@ - -# HG changeset patch -# User Emilio Cobos Álvarez -# Date 1560893536 0 -# Node ID 046dd0da3b8e606ae33895248cd41e4ef03a4fcc -# Parent 8567a308ac7a8e2087903aedd1d92032c9c7eb60 -Bug 1556602 - Fix various warnings with rust 1.37 nightly. r=froydnj - -In particular: - - * trait objects without an explicit `dyn` are deprecated - * `...` range patterns are deprecated - -I think these shouldn't really warn by default and should be clippy / opt-in -lints, but anyway, doesn't hurt. - -Differential Revision: https://phabricator.services.mozilla.com/D35135 - -diff --git a/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/lib.rs b/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/lib.rs ---- a/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/lib.rs -+++ b/media/webrtc/signaling/src/sdp/rsdparsa_capi/src/lib.rs -@@ -180,17 +180,17 @@ pub unsafe extern "C" fn sdp_add_media_s - } - }; - - // Check that the provided address type is valid. The rust parser will find out - // on his own which address type was provided - match addr_type { - // enum AddrType { kAddrTypeNone, kIPv4, kIPv6 }; - // kAddrTypeNone is explicitly not covered as it is an 'invalid' flag -- 1...2 => (), -+ 1 | 2 => (), - _ => { - return NS_ERROR_INVALID_ARG; - } - } - - match (*session).add_media(media_type, direction, port as u32, protocol, addr_str) { - Ok(_) => NS_OK, - Err(_) => NS_ERROR_INVALID_ARG -diff --git a/servo/components/malloc_size_of/lib.rs b/servo/components/malloc_size_of/lib.rs ---- a/servo/components/malloc_size_of/lib.rs -+++ b/servo/components/malloc_size_of/lib.rs -@@ -87,17 +87,17 @@ use std::ops::Range; - use std::ops::{Deref, DerefMut}; - use std::os::raw::c_void; - use void::Void; - - /// A C function that takes a pointer to a heap allocation and returns its size. - type VoidPtrToSizeFn = unsafe extern "C" fn(ptr: *const c_void) -> usize; - - /// A closure implementing a stateful predicate on pointers. --type VoidPtrToBoolFnMut = FnMut(*const c_void) -> bool; -+type VoidPtrToBoolFnMut = dyn FnMut(*const c_void) -> bool; - - /// Operations used when measuring heap usage of data structures. - pub struct MallocSizeOfOps { - /// A function that returns the size of a heap allocation. - size_of_op: VoidPtrToSizeFn, - - /// Like `size_of_op`, but can take an interior pointer. Optional because - /// not all allocators support this operation. If it's not provided, some -diff --git a/servo/components/selectors/context.rs b/servo/components/selectors/context.rs ---- a/servo/components/selectors/context.rs -+++ b/servo/components/selectors/context.rs -@@ -129,17 +129,17 @@ where - /// MatchingContext immutable again. - nesting_level: usize, - - /// Whether we're inside a negation or not. - in_negation: bool, - - /// An optional hook function for checking whether a pseudo-element - /// should match when matching_mode is ForStatelessPseudoElement. -- pub pseudo_element_matching_fn: Option<&'a Fn(&Impl::PseudoElement) -> bool>, -+ pub pseudo_element_matching_fn: Option<&'a dyn Fn(&Impl::PseudoElement) -> bool>, - - /// Extra implementation-dependent matching data. - pub extra_data: Impl::ExtraMatchingData, - - quirks_mode: QuirksMode, - classes_and_ids_case_sensitivity: CaseSensitivity, - _impl: ::std::marker::PhantomData, - } -diff --git a/servo/components/style/animation.rs b/servo/components/style/animation.rs ---- a/servo/components/style/animation.rs -+++ b/servo/components/style/animation.rs -@@ -483,17 +483,17 @@ pub fn start_transitions_if_applicable( - had_animations - } - - fn compute_style_for_animation_step( - context: &SharedStyleContext, - step: &KeyframesStep, - previous_style: &ComputedValues, - style_from_cascade: &Arc, -- font_metrics_provider: &FontMetricsProvider, -+ font_metrics_provider: &dyn FontMetricsProvider, - ) -> Arc - where - E: TElement, - { - match step.value { - KeyframesStepValue::ComputedValues => style_from_cascade.clone(), - KeyframesStepValue::Declarations { - block: ref declarations, -@@ -668,17 +668,17 @@ pub enum AnimationUpdate { - /// transitions in response to a style change (that is, - /// consider_starting_transitions + maybe_start_animations, but handling - /// canceled animations, duration changes, etc, there instead of here), and this - /// function should be only about the style update in response of a transition. - pub fn update_style_for_animation( - context: &SharedStyleContext, - animation: &Animation, - style: &mut Arc, -- font_metrics_provider: &FontMetricsProvider, -+ font_metrics_provider: &dyn FontMetricsProvider, - ) -> AnimationUpdate - where - E: TElement, - { - debug!("update_style_for_animation: {:?}", animation); - debug_assert!(!animation.is_expired()); - - match *animation { -diff --git a/servo/components/style/parser.rs b/servo/components/style/parser.rs ---- a/servo/components/style/parser.rs -+++ b/servo/components/style/parser.rs -@@ -46,33 +46,33 @@ pub struct ParserContext<'a> { - pub url_data: &'a UrlExtraData, - /// The current rule type, if any. - pub rule_type: Option, - /// The mode to use when parsing. - pub parsing_mode: ParsingMode, - /// The quirks mode of this stylesheet. - pub quirks_mode: QuirksMode, - /// The active error reporter, or none if error reporting is disabled. -- error_reporter: Option<&'a ParseErrorReporter>, -+ error_reporter: Option<&'a dyn ParseErrorReporter>, - /// The currently active namespaces. - pub namespaces: Option<&'a Namespaces>, - /// The use counters we want to record while parsing style rules, if any. - pub use_counters: Option<&'a UseCounters>, - } - - impl<'a> ParserContext<'a> { - /// Create a parser context. - #[inline] - pub fn new( - stylesheet_origin: Origin, - url_data: &'a UrlExtraData, - rule_type: Option, - parsing_mode: ParsingMode, - quirks_mode: QuirksMode, -- error_reporter: Option<&'a ParseErrorReporter>, -+ error_reporter: Option<&'a dyn ParseErrorReporter>, - use_counters: Option<&'a UseCounters>, - ) -> Self { - Self { - stylesheet_origin, - url_data, - rule_type, - parsing_mode, - quirks_mode, -@@ -84,17 +84,17 @@ impl<'a> ParserContext<'a> { - - /// Create a parser context for on-the-fly parsing in CSSOM - #[inline] - pub fn new_for_cssom( - url_data: &'a UrlExtraData, - rule_type: Option, - parsing_mode: ParsingMode, - quirks_mode: QuirksMode, -- error_reporter: Option<&'a ParseErrorReporter>, -+ error_reporter: Option<&'a dyn ParseErrorReporter>, - use_counters: Option<&'a UseCounters>, - ) -> Self { - Self::new( - Origin::Author, - url_data, - rule_type, - parsing_mode, - quirks_mode, -diff --git a/servo/components/style/properties/cascade.rs b/servo/components/style/properties/cascade.rs ---- a/servo/components/style/properties/cascade.rs -+++ b/servo/components/style/properties/cascade.rs -@@ -77,17 +77,17 @@ pub fn cascade( - device: &Device, - pseudo: Option<&PseudoElement>, - rule_node: &StrongRuleNode, - guards: &StylesheetGuards, - parent_style: Option<&ComputedValues>, - parent_style_ignoring_first_line: Option<&ComputedValues>, - layout_parent_style: Option<&ComputedValues>, - visited_rules: Option<&StrongRuleNode>, -- font_metrics_provider: &FontMetricsProvider, -+ font_metrics_provider: &dyn FontMetricsProvider, - quirks_mode: QuirksMode, - rule_cache: Option<&RuleCache>, - rule_cache_conditions: &mut RuleCacheConditions, - element: Option, - ) -> Arc - where - E: TElement, - { -@@ -111,17 +111,17 @@ where - fn cascade_rules( - device: &Device, - pseudo: Option<&PseudoElement>, - rule_node: &StrongRuleNode, - guards: &StylesheetGuards, - parent_style: Option<&ComputedValues>, - parent_style_ignoring_first_line: Option<&ComputedValues>, - layout_parent_style: Option<&ComputedValues>, -- font_metrics_provider: &FontMetricsProvider, -+ font_metrics_provider: &dyn FontMetricsProvider, - cascade_mode: CascadeMode, - quirks_mode: QuirksMode, - rule_cache: Option<&RuleCache>, - rule_cache_conditions: &mut RuleCacheConditions, - element: Option, - ) -> Arc - where - E: TElement, -@@ -208,17 +208,17 @@ pub fn apply_declarations<'a, E, F, I>( - device: &Device, - pseudo: Option<&PseudoElement>, - rules: &StrongRuleNode, - guards: &StylesheetGuards, - iter_declarations: F, - parent_style: Option<&ComputedValues>, - parent_style_ignoring_first_line: Option<&ComputedValues>, - layout_parent_style: Option<&ComputedValues>, -- font_metrics_provider: &FontMetricsProvider, -+ font_metrics_provider: &dyn FontMetricsProvider, - cascade_mode: CascadeMode, - quirks_mode: QuirksMode, - rule_cache: Option<&RuleCache>, - rule_cache_conditions: &mut RuleCacheConditions, - element: Option, - ) -> Arc - where - E: TElement, -diff --git a/servo/components/style/properties/declaration_block.rs b/servo/components/style/properties/declaration_block.rs ---- a/servo/components/style/properties/declaration_block.rs -+++ b/servo/components/style/properties/declaration_block.rs -@@ -1194,17 +1194,17 @@ where - /// A helper to parse the style attribute of an element, in order for this to be - /// shared between Servo and Gecko. - /// - /// Inline because we call this cross-crate. - #[inline] - pub fn parse_style_attribute( - input: &str, - url_data: &UrlExtraData, -- error_reporter: Option<&ParseErrorReporter>, -+ error_reporter: Option<&dyn ParseErrorReporter>, - quirks_mode: QuirksMode, - ) -> PropertyDeclarationBlock { - let context = ParserContext::new( - Origin::Author, - url_data, - Some(CssRuleType::Style), - ParsingMode::DEFAULT, - quirks_mode, -@@ -1221,17 +1221,17 @@ pub fn parse_style_attribute( - /// - /// This does not attempt to parse !important at all. - #[inline] - pub fn parse_one_declaration_into( - declarations: &mut SourcePropertyDeclaration, - id: PropertyId, - input: &str, - url_data: &UrlExtraData, -- error_reporter: Option<&ParseErrorReporter>, -+ error_reporter: Option<&dyn ParseErrorReporter>, - parsing_mode: ParsingMode, - quirks_mode: QuirksMode - ) -> Result<(), ()> { - let context = ParserContext::new( - Origin::Author, - url_data, - Some(CssRuleType::Style), - parsing_mode, -diff --git a/servo/components/style/str.rs b/servo/components/style/str.rs ---- a/servo/components/style/str.rs -+++ b/servo/components/style/str.rs -@@ -55,17 +55,17 @@ pub fn split_html_space_chars<'a>( - #[inline] - pub fn split_commas<'a>(s: &'a str) -> Filter, fn(&&str) -> bool> { - s.split(',').filter(not_empty as fn(&&str) -> bool) - } - - /// Character is ascii digit - pub fn is_ascii_digit(c: &char) -> bool { - match *c { -- '0'...'9' => true, -+ '0'..='9' => true, - _ => false, - } - } - - fn is_decimal_point(c: char) -> bool { - c == '.' - } - -@@ -156,17 +156,17 @@ where - /// Returns true if a given string has a given prefix with case-insensitive match. - pub fn starts_with_ignore_ascii_case(string: &str, prefix: &str) -> bool { - string.len() >= prefix.len() && - string.as_bytes()[0..prefix.len()].eq_ignore_ascii_case(prefix.as_bytes()) - } - - /// Returns an ascii lowercase version of a string, only allocating if needed. - pub fn string_as_ascii_lowercase<'a>(input: &'a str) -> Cow<'a, str> { -- if input.bytes().any(|c| matches!(c, b'A'...b'Z')) { -+ if input.bytes().any(|c| matches!(c, b'A'..=b'Z')) { - input.to_ascii_lowercase().into() - } else { - // Already ascii lowercase. - Cow::Borrowed(input) - } - } - - /// To avoid accidentally instantiating multiple monomorphizations of large -diff --git a/servo/components/style/stylesheets/mod.rs b/servo/components/style/stylesheets/mod.rs ---- a/servo/components/style/stylesheets/mod.rs -+++ b/servo/components/style/stylesheets/mod.rs -@@ -347,17 +347,17 @@ impl CssRule { - /// - /// Input state is None for a nested rule - pub fn parse( - css: &str, - insert_rule_context: InsertRuleContext, - parent_stylesheet_contents: &StylesheetContents, - shared_lock: &SharedRwLock, - state: State, -- loader: Option<&StylesheetLoader>, -+ loader: Option<&dyn StylesheetLoader>, - ) -> Result { - let url_data = parent_stylesheet_contents.url_data.read(); - let context = ParserContext::new( - parent_stylesheet_contents.origin, - &url_data, - None, - ParsingMode::DEFAULT, - parent_stylesheet_contents.quirks_mode, -diff --git a/servo/components/style/stylesheets/rule_list.rs b/servo/components/style/stylesheets/rule_list.rs ---- a/servo/components/style/stylesheets/rule_list.rs -+++ b/servo/components/style/stylesheets/rule_list.rs -@@ -122,29 +122,29 @@ pub trait CssRulesHelpers { - /// instead, but that seems overkill. - fn insert_rule( - &self, - lock: &SharedRwLock, - rule: &str, - parent_stylesheet_contents: &StylesheetContents, - index: usize, - nested: bool, -- loader: Option<&StylesheetLoader>, -+ loader: Option<&dyn StylesheetLoader>, - ) -> Result; - } - - impl CssRulesHelpers for RawOffsetArc> { - fn insert_rule( - &self, - lock: &SharedRwLock, - rule: &str, - parent_stylesheet_contents: &StylesheetContents, - index: usize, - nested: bool, -- loader: Option<&StylesheetLoader>, -+ loader: Option<&dyn StylesheetLoader>, - ) -> Result { - let new_rule = { - let read_guard = lock.read(); - let rules = self.read_with(&read_guard); - - // Step 1, 2 - if index > rules.0.len() { - return Err(RulesMutateError::IndexSize); -diff --git a/servo/components/style/stylesheets/rule_parser.rs b/servo/components/style/stylesheets/rule_parser.rs ---- a/servo/components/style/stylesheets/rule_parser.rs -+++ b/servo/components/style/stylesheets/rule_parser.rs -@@ -39,17 +39,17 @@ pub struct InsertRuleContext<'a> { - pub index: usize, - } - - /// The parser for the top-level rules in a stylesheet. - pub struct TopLevelRuleParser<'a> { - /// A reference to the lock we need to use to create rules. - pub shared_lock: &'a SharedRwLock, - /// A reference to a stylesheet loader if applicable, for `@import` rules. -- pub loader: Option<&'a StylesheetLoader>, -+ pub loader: Option<&'a dyn StylesheetLoader>, - /// The top-level parser context. - /// - /// This won't contain any namespaces, and only nested parsers created with - /// `ParserContext::new_with_rule_type` will. - pub context: ParserContext<'a>, - /// The current state of the parser. - pub state: State, - /// Whether we have tried to parse was invalid due to being in the wrong -diff --git a/servo/components/style/stylesheets/stylesheet.rs b/servo/components/style/stylesheets/stylesheet.rs ---- a/servo/components/style/stylesheets/stylesheet.rs -+++ b/servo/components/style/stylesheets/stylesheet.rs -@@ -71,18 +71,18 @@ pub struct StylesheetContents { - impl StylesheetContents { - /// Parse a given CSS string, with a given url-data, origin, and - /// quirks mode. - pub fn from_str( - css: &str, - url_data: UrlExtraData, - origin: Origin, - shared_lock: &SharedRwLock, -- stylesheet_loader: Option<&StylesheetLoader>, -- error_reporter: Option<&ParseErrorReporter>, -+ stylesheet_loader: Option<&dyn StylesheetLoader>, -+ error_reporter: Option<&dyn ParseErrorReporter>, - quirks_mode: QuirksMode, - line_number_offset: u32, - use_counters: Option<&UseCounters>, - ) -> Self { - let namespaces = RwLock::new(Namespaces::default()); - let (rules, source_map_url, source_url) = Stylesheet::parse_rules( - css, - &url_data, -@@ -338,18 +338,18 @@ impl StylesheetInDocument for DocumentSt - } - - impl Stylesheet { - /// Updates an empty stylesheet from a given string of text. - pub fn update_from_str( - existing: &Stylesheet, - css: &str, - url_data: UrlExtraData, -- stylesheet_loader: Option<&StylesheetLoader>, -- error_reporter: Option<&ParseErrorReporter>, -+ stylesheet_loader: Option<&dyn StylesheetLoader>, -+ error_reporter: Option<&dyn ParseErrorReporter>, - line_number_offset: u32, - ) { - let namespaces = RwLock::new(Namespaces::default()); - - // FIXME: Consider adding use counters to Servo? - let (rules, source_map_url, source_url) = Self::parse_rules( - css, - &url_data, -@@ -377,18 +377,18 @@ impl Stylesheet { - } - - fn parse_rules( - css: &str, - url_data: &UrlExtraData, - origin: Origin, - namespaces: &mut Namespaces, - shared_lock: &SharedRwLock, -- stylesheet_loader: Option<&StylesheetLoader>, -- error_reporter: Option<&ParseErrorReporter>, -+ stylesheet_loader: Option<&dyn StylesheetLoader>, -+ error_reporter: Option<&dyn ParseErrorReporter>, - quirks_mode: QuirksMode, - line_number_offset: u32, - use_counters: Option<&UseCounters>, - ) -> (Vec, Option, Option) { - let mut rules = Vec::new(); - let mut input = ParserInput::new_with_line_number_offset(css, line_number_offset); - let mut input = Parser::new(&mut input); - -@@ -445,18 +445,18 @@ impl Stylesheet { - /// Effectively creates a new stylesheet and forwards the hard work to - /// `Stylesheet::update_from_str`. - pub fn from_str( - css: &str, - url_data: UrlExtraData, - origin: Origin, - media: Arc>, - shared_lock: SharedRwLock, -- stylesheet_loader: Option<&StylesheetLoader>, -- error_reporter: Option<&ParseErrorReporter>, -+ stylesheet_loader: Option<&dyn StylesheetLoader>, -+ error_reporter: Option<&dyn ParseErrorReporter>, - quirks_mode: QuirksMode, - line_number_offset: u32, - ) -> Self { - // FIXME: Consider adding use counters to Servo? - let contents = StylesheetContents::from_str( - css, - url_data, - origin, -diff --git a/servo/components/style/stylist.rs b/servo/components/style/stylist.rs ---- a/servo/components/style/stylist.rs -+++ b/servo/components/style/stylist.rs -@@ -646,17 +646,17 @@ impl Stylist { - - /// Computes the style for a given "precomputed" pseudo-element, taking the - /// universal rules and applying them. - pub fn precomputed_values_for_pseudo( - &self, - guards: &StylesheetGuards, - pseudo: &PseudoElement, - parent: Option<&ComputedValues>, -- font_metrics: &FontMetricsProvider, -+ font_metrics: &dyn FontMetricsProvider, - ) -> Arc - where - E: TElement, - { - debug_assert!(pseudo.is_precomputed()); - - let rule_node = self.rule_node_for_precomputed_pseudo(guards, pseudo, None); - -@@ -674,17 +674,17 @@ impl Stylist { - /// - /// TODO(emilio): The type parameter could go away with a void type - /// implementing TElement. - pub fn precomputed_values_for_pseudo_with_rule_node( - &self, - guards: &StylesheetGuards, - pseudo: &PseudoElement, - parent: Option<&ComputedValues>, -- font_metrics: &FontMetricsProvider, -+ font_metrics: &dyn FontMetricsProvider, - rules: StrongRuleNode, - ) -> Arc - where - E: TElement, - { - self.compute_pseudo_element_style_with_inputs::( - CascadeInputs { - rules: Some(rules), -@@ -769,18 +769,18 @@ impl Stylist { - pub fn lazily_compute_pseudo_element_style( - &self, - guards: &StylesheetGuards, - element: E, - pseudo: &PseudoElement, - rule_inclusion: RuleInclusion, - parent_style: &ComputedValues, - is_probe: bool, -- font_metrics: &FontMetricsProvider, -- matching_fn: Option<&Fn(&PseudoElement) -> bool>, -+ font_metrics: &dyn FontMetricsProvider, -+ matching_fn: Option<&dyn Fn(&PseudoElement) -> bool>, - ) -> Option> - where - E: TElement, - { - let cascade_inputs = self.lazy_pseudo_rules( - guards, - element, - parent_style, -@@ -805,17 +805,17 @@ impl Stylist { - /// selector matching for eager pseudo-elements when we need to recompute - /// their style with a new parent style. - pub fn compute_pseudo_element_style_with_inputs( - &self, - inputs: CascadeInputs, - pseudo: &PseudoElement, - guards: &StylesheetGuards, - parent_style: Option<&ComputedValues>, -- font_metrics: &FontMetricsProvider, -+ font_metrics: &dyn FontMetricsProvider, - element: Option, - ) -> Arc - where - E: TElement, - { - // FIXME(emilio): The lack of layout_parent_style here could be - // worrying, but we're probably dropping the display fixup for - // pseudos other than before and after, so it's probably ok. -@@ -858,17 +858,17 @@ impl Stylist { - &self, - element: Option, - pseudo: Option<&PseudoElement>, - inputs: CascadeInputs, - guards: &StylesheetGuards, - parent_style: Option<&ComputedValues>, - parent_style_ignoring_first_line: Option<&ComputedValues>, - layout_parent_style: Option<&ComputedValues>, -- font_metrics: &FontMetricsProvider, -+ font_metrics: &dyn FontMetricsProvider, - rule_cache: Option<&RuleCache>, - rule_cache_conditions: &mut RuleCacheConditions, - ) -> Arc - where - E: TElement, - { - debug_assert!(pseudo.is_some() || element.is_some(), "Huh?"); - -@@ -915,17 +915,17 @@ impl Stylist { - fn lazy_pseudo_rules( - &self, - guards: &StylesheetGuards, - element: E, - parent_style: &ComputedValues, - pseudo: &PseudoElement, - is_probe: bool, - rule_inclusion: RuleInclusion, -- matching_fn: Option<&Fn(&PseudoElement) -> bool>, -+ matching_fn: Option<&dyn Fn(&PseudoElement) -> bool>, - ) -> Option - where - E: TElement, - { - debug_assert!(pseudo.is_lazy()); - - // Apply the selector flags. We should be in sequential mode - // already, so we can directly apply the parent flags. -diff --git a/servo/components/style/values/computed/mod.rs b/servo/components/style/values/computed/mod.rs ---- a/servo/components/style/values/computed/mod.rs -+++ b/servo/components/style/values/computed/mod.rs -@@ -142,17 +142,17 @@ pub struct Context<'a> { - /// painful. - /// - /// TODO(emilio): Make constructors for Context, and drop this. - #[cfg(feature = "servo")] - pub cached_system_font: Option<()>, - - /// A font metrics provider, used to access font metrics to implement - /// font-relative units. -- pub font_metrics_provider: &'a FontMetricsProvider, -+ pub font_metrics_provider: &'a dyn FontMetricsProvider, - - /// Whether or not we are computing the media list in a media query - pub in_media_query: bool, - - /// The quirks mode of this context. - pub quirks_mode: QuirksMode, - - /// Whether this computation is being done for a SMIL animation. -diff --git a/servo/components/style_traits/specified_value_info.rs b/servo/components/style_traits/specified_value_info.rs ---- a/servo/components/style_traits/specified_value_info.rs -+++ b/servo/components/style_traits/specified_value_info.rs -@@ -22,17 +22,17 @@ pub mod CssType { - pub const COLOR: u8 = 1 << 0; - /// - pub const GRADIENT: u8 = 1 << 1; - /// - pub const TIMING_FUNCTION: u8 = 1 << 2; - } - - /// See SpecifiedValueInfo::collect_completion_keywords. --pub type KeywordsCollectFn<'a> = &'a mut FnMut(&[&'static str]); -+pub type KeywordsCollectFn<'a> = &'a mut dyn FnMut(&[&'static str]); - - /// Information of values of a given specified value type. - /// - /// This trait is derivable with `#[derive(SpecifiedValueInfo)]`. - /// - /// The algorithm traverses the type definition. For `SUPPORTED_TYPES`, - /// it puts an or'ed value of `SUPPORTED_TYPES` of all types it finds. - /// For `collect_completion_keywords`, it recursively invokes this -diff --git a/servo/ports/geckolib/glue.rs b/servo/ports/geckolib/glue.rs ---- a/servo/ports/geckolib/glue.rs -+++ b/servo/ports/geckolib/glue.rs -@@ -1378,28 +1378,28 @@ pub extern "C" fn Servo_StyleSheet_FromU - loader, - stylesheet, - load_data, - reusable_sheets, - )) - }; - - // FIXME(emilio): loader.as_ref() doesn't typecheck for some reason? -- let loader: Option<&StyleStylesheetLoader> = match loader { -+ let loader: Option<&dyn StyleStylesheetLoader> = match loader { - None => None, - Some(ref s) => Some(s), - }; - - Arc::new(StylesheetContents::from_str( - input, - url_data.clone(), - mode_to_origin(mode), - &global_style_data.shared_lock, - loader, -- reporter.as_ref().map(|r| r as &ParseErrorReporter), -+ reporter.as_ref().map(|r| r as &dyn ParseErrorReporter), - quirks_mode.into(), - line_number_offset, - use_counters, - )) - .into_strong() - } - - #[no_mangle] -@@ -1903,17 +1903,17 @@ pub extern "C" fn Servo_CssRules_InsertR - loader, - gecko_stylesheet, - ptr::null_mut(), - ptr::null_mut(), - )) - }; - let loader = loader - .as_ref() -- .map(|loader| loader as &StyleStylesheetLoader); -+ .map(|loader| loader as &dyn StyleStylesheetLoader); - let rule = unsafe { rule.as_ref().unwrap().as_str_unchecked() }; - - let global_style_data = &*GLOBAL_STYLE_DATA; - let contents = StylesheetContents::as_arc(&contents); - let result = Locked::::as_arc(&rules).insert_rule( - &global_style_data.shared_lock, - rule, - contents, -@@ -3583,17 +3583,17 @@ fn get_pseudo_style( - guard: &SharedRwLockReadGuard, - element: GeckoElement, - pseudo: &PseudoElement, - rule_inclusion: RuleInclusion, - styles: &ElementStyles, - inherited_styles: Option<&ComputedValues>, - doc_data: &PerDocumentStyleDataImpl, - is_probe: bool, -- matching_func: Option<&Fn(&PseudoElement) -> bool>, -+ matching_func: Option<&dyn Fn(&PseudoElement) -> bool>, - ) -> Option> { - let style = match pseudo.cascade_type() { - PseudoElementCascadeType::Eager => { - match *pseudo { - PseudoElement::FirstLetter => { - styles.pseudos.get(&pseudo).map(|pseudo_styles| { - // inherited_styles can be None when doing lazy resolution - // (e.g. for computed style) or when probing. In that case -@@ -3772,17 +3772,17 @@ pub unsafe extern "C" fn Servo_StyleSet_ - - fn parse_property_into( - declarations: &mut SourcePropertyDeclaration, - property_id: PropertyId, - value: *const nsACString, - data: *mut URLExtraData, - parsing_mode: structs::ParsingMode, - quirks_mode: QuirksMode, -- reporter: Option<&ParseErrorReporter>, -+ reporter: Option<&dyn ParseErrorReporter>, - ) -> Result<(), ()> { - let value = unsafe { value.as_ref().unwrap().as_str_unchecked() }; - let url_data = unsafe { UrlExtraData::from_ptr_ref(&data) }; - let parsing_mode = ParsingMode::from_bits_truncate(parsing_mode); - - parse_one_declaration_into( - declarations, - property_id, -@@ -3809,17 +3809,17 @@ pub extern "C" fn Servo_ParseProperty( - let reporter = ErrorReporter::new(ptr::null_mut(), loader, data); - let result = parse_property_into( - &mut declarations, - id, - value, - data, - parsing_mode, - quirks_mode.into(), -- reporter.as_ref().map(|r| r as &ParseErrorReporter), -+ reporter.as_ref().map(|r| r as &dyn ParseErrorReporter), - ); - - match result { - Ok(()) => { - let global_style_data = &*GLOBAL_STYLE_DATA; - let mut block = PropertyDeclarationBlock::new(); - block.extend(declarations.drain(), Importance::Normal); - Arc::new(global_style_data.shared_lock.wrap(block)).into_strong() -@@ -3961,17 +3961,17 @@ pub unsafe extern "C" fn Servo_ParseStyl - ) -> Strong { - let global_style_data = &*GLOBAL_STYLE_DATA; - let value = (*data).as_str_unchecked(); - let reporter = ErrorReporter::new(ptr::null_mut(), loader, raw_extra_data); - let url_data = UrlExtraData::from_ptr_ref(&raw_extra_data); - Arc::new(global_style_data.shared_lock.wrap(parse_style_attribute( - value, - url_data, -- reporter.as_ref().map(|r| r as &ParseErrorReporter), -+ reporter.as_ref().map(|r| r as &dyn ParseErrorReporter), - quirks_mode.into(), - ))) - .into_strong() - } - - #[no_mangle] - pub extern "C" fn Servo_DeclarationBlock_CreateEmpty() -> Strong { - let global_style_data = &*GLOBAL_STYLE_DATA; -@@ -4190,17 +4190,17 @@ fn set_property( - let reporter = ErrorReporter::new(ptr::null_mut(), loader, data); - let result = parse_property_into( - &mut source_declarations, - property_id, - value, - data, - parsing_mode, - quirks_mode, -- reporter.as_ref().map(|r| r as &ParseErrorReporter), -+ reporter.as_ref().map(|r| r as &dyn ParseErrorReporter), - ); - - if result.is_err() { - return false; - } - - let importance = if is_important { - Importance::Important -@@ -5224,17 +5224,17 @@ fn simulate_compute_values_failure(prope - - #[cfg(not(feature = "gecko_debug"))] - fn simulate_compute_values_failure(_: &PropertyValuePair) -> bool { - false - } - - fn create_context_for_animation<'a>( - per_doc_data: &'a PerDocumentStyleDataImpl, -- font_metrics_provider: &'a FontMetricsProvider, -+ font_metrics_provider: &'a dyn FontMetricsProvider, - style: &'a ComputedValues, - parent_style: Option<&'a ComputedValues>, - for_smil_animation: bool, - rule_cache_conditions: &'a mut RuleCacheConditions, - ) -> Context<'a> { - Context { - is_root_element: false, - builder: StyleBuilder::for_animation(per_doc_data.stylist.device(), style, parent_style), -@@ -6158,17 +6158,17 @@ pub unsafe extern "C" fn Servo_SelectorL - - #[no_mangle] - pub unsafe extern "C" fn Servo_SelectorList_Drop(list: *mut RawServoSelectorList) { - SelectorList::drop_ffi(list) - } - - fn parse_color( - value: &str, -- error_reporter: Option<&ParseErrorReporter>, -+ error_reporter: Option<&dyn ParseErrorReporter>, - ) -> Result { - let mut input = ParserInput::new(value); - let mut parser = Parser::new(&mut input); - let url_data = unsafe { dummy_url_data() }; - let context = ParserContext::new( - Origin::Author, - url_data, - Some(CssRuleType::Style), -@@ -6222,17 +6222,17 @@ pub extern "C" fn Servo_ComputeColor( - let value = unsafe { (*value).to_string() }; - let result_color = unsafe { result_color.as_mut().unwrap() }; - - let reporter = unsafe { loader.as_mut() }.and_then(|loader| { - // Make an ErrorReporter that will report errors as being "from DOM". - ErrorReporter::new(ptr::null_mut(), loader, ptr::null_mut()) - }); - -- match parse_color(&value, reporter.as_ref().map(|r| r as &ParseErrorReporter)) { -+ match parse_color(&value, reporter.as_ref().map(|r| r as &dyn ParseErrorReporter)) { - Ok(specified_color) => { - let computed_color = match raw_data { - Some(raw_data) => { - let data = PerDocumentStyleData::from_ffi(raw_data).borrow(); - let device = data.stylist.device(); - let quirks_mode = data.stylist.quirks_mode(); - Context::for_media_query_evaluation(device, quirks_mode, |context| { - specified_color.to_computed_color(Some(&context)) -diff --git a/testing/geckodriver/src/marionette.rs b/testing/geckodriver/src/marionette.rs ---- a/testing/geckodriver/src/marionette.rs -+++ b/testing/geckodriver/src/marionette.rs -@@ -1273,17 +1273,17 @@ impl MarionetteConnection { - ErrorKind::Other, - "EOF reading marionette message", - )) - } - 1 => buf[0] as char, - _ => panic!("Expected one byte got more"), - }; - match byte { -- '0'...'9' => { -+ '0'..='9' => { - bytes = bytes * 10; - bytes += byte as usize - '0' as usize; - } - ':' => break, - _ => {} - } - } - -diff --git a/testing/mozbase/rust/mozprofile/src/prefreader.rs b/testing/mozbase/rust/mozprofile/src/prefreader.rs ---- a/testing/mozbase/rust/mozprofile/src/prefreader.rs -+++ b/testing/mozbase/rust/mozprofile/src/prefreader.rs -@@ -9,17 +9,17 @@ use std::iter::Iterator; - use std::mem; - use std::ops::Deref; - use std::str; - - impl PrefReaderError { - fn new( - message: &'static str, - position: Position, -- parent: Option>, -+ parent: Option>, - ) -> PrefReaderError { - PrefReaderError { - message, - position, - parent, - } - } - } -@@ -34,17 +34,17 @@ impl fmt::Display for PrefReaderError { - } - } - - impl Error for PrefReaderError { - fn description(&self) -> &str { - self.message - } - -- fn cause(&self) -> Option<&Error> { -+ fn cause(&self) -> Option<&dyn Error> { - match self.parent { - None => None, - Some(ref cause) => Some(cause.deref()), - } - } - } - - impl From for PrefReaderError { -@@ -138,17 +138,17 @@ impl<'a> PrefToken<'a> { - } - } - } - - #[derive(Debug)] - pub struct PrefReaderError { - message: &'static str, - position: Position, -- parent: Option>, -+ parent: Option>, - } - - struct TokenData<'a> { - token_type: TokenType, - complete: bool, - position: Position, - data: Cow<'a, str>, - start_pos: usize, -@@ -353,19 +353,19 @@ impl<'a> PrefTokenizer<'a> { - - fn read_hex_escape(&mut self, hex_chars: isize, first: bool) -> Result { - let mut value = 0; - for _ in 0..hex_chars { - match self.get_char() { - Some(x) => { - value = value << 4; - match x { -- '0'...'9' => value += x as u32 - '0' as u32, -- 'a'...'f' => value += x as u32 - 'a' as u32, -- 'A'...'F' => value += x as u32 - 'A' as u32, -+ '0'..='9' => value += x as u32 - '0' as u32, -+ 'a'..='f' => value += x as u32 - 'a' as u32, -+ 'A'..='F' => value += x as u32 - 'A' as u32, - _ => { - return Err(PrefReaderError::new( - "Unexpected character in escape", - self.position, - None, - )) - } - } -@@ -589,17 +589,17 @@ impl<'a> PrefTokenizer<'a> { - token_data.start(&self, TokenType::String); - token_data.start_pos = self.pos + 1; - TokenizerState::SingleQuotedString - } - 't' | 'f' => { - self.unget_char(); - TokenizerState::Bool - } -- '0'...'9' | '-' | '+' => { -+ '0'..='9' | '-' | '+' => { - token_data.start(&self, TokenType::Int); - TokenizerState::Number - } - _ => { - return Err(PrefReaderError::new( - "Invalid character at start of function argument", - self.position, - None, -@@ -640,17 +640,17 @@ impl<'a> PrefTokenizer<'a> { - } - '\\' => { - self.consume_escape(&mut token_data)?; - TokenizerState::SingleQuotedString - } - _ => TokenizerState::SingleQuotedString, - }, - TokenizerState::Number => match c { -- '0'...'9' => TokenizerState::Number, -+ '0'..='9' => TokenizerState::Number, - ')' | ',' => { - token_data.end(&self.data, self.pos)?; - self.unget_char(); - self.next_state = Some(TokenizerState::AfterFunctionArg); - TokenizerState::Junk - } - x if PrefTokenizer::is_space(x) => { - token_data.end(&self.data, self.pos)?; -diff --git a/testing/mozbase/rust/mozrunner/src/bin/icecat-default-path.rs b/testing/mozbase/rust/mozrunner/src/bin/icecat-default-path.rs ---- a/testing/mozbase/rust/mozrunner/src/bin/icecat-default-path.rs -+++ b/testing/mozbase/rust/mozrunner/src/bin/icecat-default-path.rs -@@ -8,7 +8,7 @@ - .map(|x| (x.to_string_lossy().into_owned(), 0)) - .unwrap_or(("IceCat binary not found".to_owned(), 1)); - -- let mut writer: Box = match code { -+ let mut writer: Box = match code { - 0 => Box::new(std::io::stdout()), - _ => Box::new(std::io::stderr()) - }; -diff --git a/testing/mozbase/rust/mozrunner/src/runner.rs b/testing/mozbase/rust/mozrunner/src/runner.rs ---- a/testing/mozbase/rust/mozrunner/src/runner.rs -+++ b/testing/mozbase/rust/mozrunner/src/runner.rs -@@ -101,20 +101,20 @@ impl Error for RunnerError { - ErrorKind::NotFound => "no such file or directory", - _ => err.description(), - } - } - RunnerError::PrefReader(ref err) => err.description(), - } - } - -- fn cause(&self) -> Option<&Error> { -+ fn cause(&self) -> Option<&dyn Error> { - Some(match *self { -- RunnerError::Io(ref err) => err as &Error, -- RunnerError::PrefReader(ref err) => err as &Error, -+ RunnerError::Io(ref err) => err as &dyn Error, -+ RunnerError::PrefReader(ref err) => err as &dyn Error, - }) - } - } - - impl From for RunnerError { - fn from(value: io::Error) -> RunnerError { - RunnerError::Io(value) - } -diff --git a/testing/webdriver/src/error.rs b/testing/webdriver/src/error.rs ---- a/testing/webdriver/src/error.rs -+++ b/testing/webdriver/src/error.rs -@@ -320,17 +320,17 @@ impl WebDriverError { - } - } - - impl Error for WebDriverError { - fn description(&self) -> &str { - self.error_code() - } - -- fn cause(&self) -> Option<&Error> { -+ fn cause(&self) -> Option<&dyn Error> { - None - } - } - - impl fmt::Display for WebDriverError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - self.message.fmt(f) - } -@@ -349,18 +349,18 @@ impl From for WebDriverError - } - - impl From for WebDriverError { - fn from(err: DecodeError) -> WebDriverError { - WebDriverError::new(ErrorStatus::UnknownError, err.description().to_string()) - } - } - --impl From> for WebDriverError { -- fn from(err: Box) -> WebDriverError { -+impl From> for WebDriverError { -+ fn from(err: Box) -> WebDriverError { - WebDriverError::new(ErrorStatus::UnknownError, err.description().to_string()) - } - } - - #[cfg(test)] - mod tests { - use super::*; - use crate::test::check_serialize; -diff --git a/testing/webdriver/src/server.rs b/testing/webdriver/src/server.rs ---- a/testing/webdriver/src/server.rs -+++ b/testing/webdriver/src/server.rs -@@ -171,17 +171,17 @@ impl HttpHan - } - } - - impl Service for HttpHandler { - type ReqBody = Body; - type ResBody = Body; - - type Error = hyper::Error; -- type Future = Box, Error = hyper::Error> + Send>; -+ type Future = Box, Error = hyper::Error> + Send>; - - fn call(&mut self, req: Request) -> Self::Future { - let uri = req.uri().clone(); - let method = req.method().clone(); - let api = self.api.clone(); - let chan = self.chan.clone(); - - Box::new(req.into_body().concat2().and_then(move |body| { -diff --git a/xpcom/rust/xpcom/xpcom_macros/src/lib.rs b/xpcom/rust/xpcom/xpcom_macros/src/lib.rs ---- a/xpcom/rust/xpcom/xpcom_macros/src/lib.rs -+++ b/xpcom/rust/xpcom/xpcom_macros/src/lib.rs -@@ -192,7 +192,7 @@ - } - - impl Interface { -- fn base(&self) -> Result, Box> { -+ fn base(&self) -> Result, Box> { - Ok(if let Some(base) = self.base { - Some(*IFACES.get(base).ok_or_else( - || format!("Base interface {} does not exist", base) -@@ -238,7 +238,7 @@ - } - - /// Scans through the attributes on a struct, and extracts the type of the refcount to use. --fn get_refcnt_kind(attrs: &[Attribute]) -> Result> { -+fn get_refcnt_kind(attrs: &[Attribute]) -> Result> { - for attr in attrs { - if let Some(Meta::NameValue(ref attr)) = attr.interpret_meta() { - if attr.ident.as_ref() != "refcnt" { -@@ -268,7 +268,7 @@ - /// Scan the attributes looking for an #[xpimplements] attribute. The identifier - /// arguments passed to this attribute are the interfaces which the type wants to - /// directly implement. --fn get_bases(attrs: &[Attribute]) -> Result, Box> { -+fn get_bases(attrs: &[Attribute]) -> Result, Box> { - let mut inherits = Vec::new(); - for attr in attrs { - if let Some(Meta::List(ref attr)) = attr.interpret_meta() { -@@ -294,7 +294,7 @@ - } - - /// Extract the fields list from the input struct. --fn get_fields(di: &DeriveInput) -> Result<&Punctuated, Box> { -+fn get_fields(di: &DeriveInput) -> Result<&Punctuated, Box> { - match di.data { - Data::Struct(DataStruct { - fields: Fields::Named(ref named), .. -@@ -305,7 +305,7 @@ - } - - /// Takes the `Init*` struct in, and generates a `DeriveInput` for the "real" struct. --fn gen_real_struct(init: &DeriveInput, bases: &[&Interface], refcnt_ty: RefcntKind) -> Result> { -+fn gen_real_struct(init: &DeriveInput, bases: &[&Interface], refcnt_ty: RefcntKind) -> Result> { - // Determine the name for the real struct based on the name of the - // initializer struct's name. - if !init.ident.as_ref().starts_with("Init") { diff --git a/sources b/sources index bb25126..5ee9838 100644 --- a/sources +++ b/sources @@ -1,4 +1,3 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c -SHA512 (icecat-68.3.0-gnu1.tar.bz2) = f2d8bfb12f9eeb2426ef38f9849bfcb95d2d56f4374651e65d06654f9b0379b5c11d4df03973a68c65b29b8e3c7f9712c04e67f56a91a82b309c8bb405cbb964 -SHA512 (icecat-68.3.0-langpacks.tar.gz) = c65d0170f110fe4afcaf0074e7c799a1226d87231a77d67ae170290933175aa3a2f68401c99e752126e96b3de87a77512d6573daf7c3019aae26434bc6b83e58 +SHA512 (icecat-68.4.0-gnu1.tar.bz2) = d919169a96e47a71dd2d3bf8dd38a0dba79e2721d66ea584ceda9de71644644f923d10a1786eb06305d507f5d5172b233b19222be1f46a5d325b196417aee178 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 2f44dcd3d0e97934eebab22bcde085b1dcda7322 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 4 Jan 2020 18:54:22 +0100 Subject: [PATCH 088/473] New rebuild of source archive (extensions updated)| Use rh prefix instead of gnu --- .gitignore | 1 + icecat-68.3.0-cbindgen_for_rust139.patch | 172 ----------------------- icecat.rpmlintrc | 46 ------ icecat.spec | 14 +- sources | 2 +- 5 files changed, 11 insertions(+), 224 deletions(-) delete mode 100644 icecat-68.3.0-cbindgen_for_rust139.patch delete mode 100644 icecat.rpmlintrc diff --git a/.gitignore b/.gitignore index d1610d7..eef7b50 100644 --- a/.gitignore +++ b/.gitignore @@ -96,3 +96,4 @@ /icecat-68.3.0-gnu1.tar.bz2 /icecat-68.3.0-langpacks.tar.gz /icecat-68.4.0-gnu1.tar.bz2 +/icecat-68.4.0-rh1.tar.bz2 diff --git a/icecat-68.3.0-cbindgen_for_rust139.patch b/icecat-68.3.0-cbindgen_for_rust139.patch deleted file mode 100644 index f150066..0000000 --- a/icecat-68.3.0-cbindgen_for_rust139.patch +++ /dev/null @@ -1,172 +0,0 @@ -diff -up a/third_party/rust/bindgen/.cargo-checksum.json.bindgen b/third_party/rust/bindgen/.cargo-checksum.json ---- a/third_party/rust/bindgen/.cargo-checksum.json.bindgen 2019-12-01 15:29:26.000000000 +0100 -+++ b/third_party/rust/bindgen/.cargo-checksum.json 2019-12-04 11:38:42.878975886 +0100 -@@ -1 +1 @@ --{"files":{"Cargo.toml":"9af635e7bad9021a49742a312faf6178b757dbd48aabc998931d6f491f14c179","LICENSE":"c23953d9deb0a3312dbeaf6c128a657f3591acee45067612fa68405eaa4525db","README.md":"5a1f556c6a57c0a6ccc65e19c27718e0f4b32381a8efcc80f6601b33c58c5d59","build.rs":"a9f6915c54d75f357ce32f96327bf4df53dc81a505b70831978f9dac6f43841d","src/callbacks.rs":"b24d7982332c6a35928f134184ddf4072fe4545a45546b97b9b0e0c1fbb77c08","src/clang.rs":"e9203eb5a1b432efebafcd011896e35e8c9145037bf99e7bb3709dc1b8e8e783","src/codegen/bitfield_unit.rs":"88b0604322dc449fc9284850eadc1f5d14b42fa747d4258bae0b6b9535f52dfd","src/codegen/bitfield_unit_tests.rs":"2073ac6a36e0bc9afaef5b1207966817c8fb7a1a9f6368c3b1b8f79822efbfba","src/codegen/error.rs":"2613af1d833377fd4a70719f4a09951d9d45dc9227827b9a2a938a1bcaaea2dd","src/codegen/helpers.rs":"fbd23e68dd51ccaddeb9761394d5df2db49baded0e2dccf6bbc52a2d6de502eb","src/codegen/impl_debug.rs":"f82969461d522fb758eca552ceaf189122a404cbb47fcc16008bfe52fc62aefa","src/codegen/impl_partialeq.rs":"d40d9ee2849c4d3d557b033c4d3af5e6de4a44347f67c0f016198086338811af","src/codegen/mod.rs":"238d989e13b7556e5d120a2bfe85b43332fba56cbe8df886d4c32e650fff1247","src/codegen/struct_layout.rs":"3fa5524aff82365ce292b0cc85080514c85a6dbd31bce90f001773b995dda28e","src/extra_assertions.rs":"494534bd4f18b80d89b180c8a93733e6617edcf7deac413e9a73fd6e7bc9ced7","src/features.rs":"c5fd7149f4a3b41fd4f89ade08505170942f4bc791bcb6a34fdddd3ae61856f8","src/ir/analysis/derive.rs":"325d4c1c1e6194e743f42a2316f1501b0ef852fe309f2e9cac3434825ad235f0","src/ir/analysis/has_destructor.rs":"63644f479738df35e531d3324ff892614083c3656e0747aa34d9f20dada878ec","src/ir/analysis/has_float.rs":"76162a309e4285a806755a08c687a3e7bc894a100a63da4e88584035e215b11d","src/ir/analysis/has_type_param_in_array.rs":"fdbc0af28a144c88ea2de83e6e6da5e1ffb40e3dd63fd7a708095d085bb06f94","src/ir/analysis/has_vtable.rs":"5788372d27bdbaaf0454bc17be31a5480918bc41a8a1c4832e8c61185c07f9cd","src/ir/analysis/mod.rs":"1f218e15c19f6666512908abc853fa7ff9ca5d0fafd94f026d9e4b0ce287ec3c","src/ir/analysis/sizedness.rs":"8dc10043d872e68e660ef96edca4d9733f95be45cdad4893462fa929b335014f","src/ir/analysis/template_params.rs":"6312c008bbc80f50e72a766756c8daddea0b6eeb31ec924b83a231df931e170e","src/ir/annotations.rs":"39a5ab19f4d5dfa617577e4a0d0d2b67b5369d480c7cca4b14d172458c9843f0","src/ir/comment.rs":"c48abe01c5af0f09f583a89f1394bc6c161b40f6c8f0f600bbfe3c907b47969b","src/ir/comp.rs":"ca439407faefbe3a198246f0a1dbdf4e40307e45eaaad317e85d1aab37bb31fc","src/ir/context.rs":"599226eb04d337a1b1b13af91af91bdb02dbd5f26f274cbc0ebc4489eb144fc0","src/ir/derive.rs":"34f9aa76b6c9c05136bb69dcd6455397faef571a567254d2c541d50a962994db","src/ir/dot.rs":"95ed2968fc3239d87892e9f1edf1ed6dd18630d949564961765967ea1d16960c","src/ir/enum_ty.rs":"9cc242d6b3c1866665594e8b306860ee39c0ea42d22198d46b7fded473fe3e84","src/ir/function.rs":"2d41d9df19f42b0c383f338be4c026c005853a8d1caf5f3e5a2f3a8dad202232","src/ir/int.rs":"07e0c7dbd2dd977177fae3acd2a14adf271c6cf9ff4b57cddc11d50734fd4801","src/ir/item.rs":"3bcdb69b793350e5744aec3577cdbb1e5068ece5220c38763cecd82dfb5e8f03","src/ir/item_kind.rs":"dbeae8c4fd0e5c9485d325aea040e056a1f2cd6d43fc927dee8fe1c0c59a7197","src/ir/layout.rs":"d49582081f5f86f7595afbe4845f38fb3b969a840b568f4a49b265e7d790bb5b","src/ir/mod.rs":"2eae90f207fad2e45957ec9287064992a419e3fc916aba84faff2ea25cbeb5ee","src/ir/module.rs":"c4d90bf38fe3672e01923734ccbdb7951ea929949d5f413a9c2aee12395a5094","src/ir/objc.rs":"758aa955a0c5d6ad82606c88a1f4cd1d93e666b71e82d43b18b1aaae96cf888a","src/ir/template.rs":"c0f8570b927dfd6a421fc4ce3094ec837a3ed936445225dbfac961e8e0842ae5","src/ir/traversal.rs":"ea751379a5aec02f93f8d2c61e18232776b1f000dbeae64b9a7195ba21a19dd6","src/ir/ty.rs":"952fb04cd6a71a2bca5c509aecacb42a1de0cae75824941541a38dc589f0993a","src/ir/var.rs":"8bdafb6d02f2c55ae11c28d88b19fb7a65ba8466da12ff039ae4c16c790b291e","src/lib.rs":"d5c8b404c515d30fc2d78b28eb84cff6b256f1f1e2dbd6aca280529bb2af6879","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"e519053bcdde6bc88f60f955246a02d53b3db1cc5ccd1612e6675b790b7460b0","src/options.rs":"041d635c8f6712ca32676a68f06d0245faed5577d9513786e058540ea2a69a7f","src/parse.rs":"be7d13cc84fae79ec7b3aa9e77063fa475a48d74a854423e2c72d75006a25202","src/regex_set.rs":"5cb72fc3714c0d79e9e942d003349c0775fafd7cd0c9603c65f5261883bbf9cf","src/time.rs":"3b763e6fee51d0eb01228dfe28bc28a9f692aff73b2a7b90a030902e0238fca6"},"package":"6bd7710ac8399ae1ebe1e3aac7c9047c4f39f2c94b33c997f482f49e96991f7c"} -\ No newline at end of file -+{"files":{"Cargo.toml":"9af635e7bad9021a49742a312faf6178b757dbd48aabc998931d6f491f14c179","LICENSE":"c23953d9deb0a3312dbeaf6c128a657f3591acee45067612fa68405eaa4525db","README.md":"5a1f556c6a57c0a6ccc65e19c27718e0f4b32381a8efcc80f6601b33c58c5d59","build.rs":"a9f6915c54d75f357ce32f96327bf4df53dc81a505b70831978f9dac6f43841d","src/callbacks.rs":"b24d7982332c6a35928f134184ddf4072fe4545a45546b97b9b0e0c1fbb77c08","src/clang.rs":"e9203eb5a1b432efebafcd011896e35e8c9145037bf99e7bb3709dc1b8e8e783","src/codegen/bitfield_unit.rs":"88b0604322dc449fc9284850eadc1f5d14b42fa747d4258bae0b6b9535f52dfd","src/codegen/bitfield_unit_tests.rs":"2073ac6a36e0bc9afaef5b1207966817c8fb7a1a9f6368c3b1b8f79822efbfba","src/codegen/error.rs":"2613af1d833377fd4a70719f4a09951d9d45dc9227827b9a2a938a1bcaaea2dd","src/codegen/helpers.rs":"fbd23e68dd51ccaddeb9761394d5df2db49baded0e2dccf6bbc52a2d6de502eb","src/codegen/impl_debug.rs":"f82969461d522fb758eca552ceaf189122a404cbb47fcc16008bfe52fc62aefa","src/codegen/impl_partialeq.rs":"d40d9ee2849c4d3d557b033c4d3af5e6de4a44347f67c0f016198086338811af","src/codegen/mod.rs":"238d989e13b7556e5d120a2bfe85b43332fba56cbe8df886d4c32e650fff1247","src/codegen/struct_layout.rs":"3fa5524aff82365ce292b0cc85080514c85a6dbd31bce90f001773b995dda28e","src/extra_assertions.rs":"494534bd4f18b80d89b180c8a93733e6617edcf7deac413e9a73fd6e7bc9ced7","src/features.rs":"c5fd7149f4a3b41fd4f89ade08505170942f4bc791bcb6a34fdddd3ae61856f8","src/ir/analysis/derive.rs":"325d4c1c1e6194e743f42a2316f1501b0ef852fe309f2e9cac3434825ad235f0","src/ir/analysis/has_destructor.rs":"63644f479738df35e531d3324ff892614083c3656e0747aa34d9f20dada878ec","src/ir/analysis/has_float.rs":"76162a309e4285a806755a08c687a3e7bc894a100a63da4e88584035e215b11d","src/ir/analysis/has_type_param_in_array.rs":"fdbc0af28a144c88ea2de83e6e6da5e1ffb40e3dd63fd7a708095d085bb06f94","src/ir/analysis/has_vtable.rs":"8c92a52c0f859c7bec7bfbc36b9d18f904baab0c8c9dc1b3e7af34de1a0b0da4","src/ir/analysis/mod.rs":"1f218e15c19f6666512908abc853fa7ff9ca5d0fafd94f026d9e4b0ce287ec3c","src/ir/analysis/sizedness.rs":"71f1a37f75b971ea5b0d8457473cc410947dbf706cb6d2c0338916910b78a675","src/ir/analysis/template_params.rs":"6312c008bbc80f50e72a766756c8daddea0b6eeb31ec924b83a231df931e170e","src/ir/annotations.rs":"39a5ab19f4d5dfa617577e4a0d0d2b67b5369d480c7cca4b14d172458c9843f0","src/ir/comment.rs":"c48abe01c5af0f09f583a89f1394bc6c161b40f6c8f0f600bbfe3c907b47969b","src/ir/comp.rs":"ca439407faefbe3a198246f0a1dbdf4e40307e45eaaad317e85d1aab37bb31fc","src/ir/context.rs":"599226eb04d337a1b1b13af91af91bdb02dbd5f26f274cbc0ebc4489eb144fc0","src/ir/derive.rs":"e5581852eec87918901a129284b4965aefc8a19394187a8095779a084f28fabe","src/ir/dot.rs":"95ed2968fc3239d87892e9f1edf1ed6dd18630d949564961765967ea1d16960c","src/ir/enum_ty.rs":"9cc242d6b3c1866665594e8b306860ee39c0ea42d22198d46b7fded473fe3e84","src/ir/function.rs":"2d41d9df19f42b0c383f338be4c026c005853a8d1caf5f3e5a2f3a8dad202232","src/ir/int.rs":"07e0c7dbd2dd977177fae3acd2a14adf271c6cf9ff4b57cddc11d50734fd4801","src/ir/item.rs":"3bcdb69b793350e5744aec3577cdbb1e5068ece5220c38763cecd82dfb5e8f03","src/ir/item_kind.rs":"dbeae8c4fd0e5c9485d325aea040e056a1f2cd6d43fc927dee8fe1c0c59a7197","src/ir/layout.rs":"d49582081f5f86f7595afbe4845f38fb3b969a840b568f4a49b265e7d790bb5b","src/ir/mod.rs":"2eae90f207fad2e45957ec9287064992a419e3fc916aba84faff2ea25cbeb5ee","src/ir/module.rs":"c4d90bf38fe3672e01923734ccbdb7951ea929949d5f413a9c2aee12395a5094","src/ir/objc.rs":"758aa955a0c5d6ad82606c88a1f4cd1d93e666b71e82d43b18b1aaae96cf888a","src/ir/template.rs":"c0f8570b927dfd6a421fc4ce3094ec837a3ed936445225dbfac961e8e0842ae5","src/ir/traversal.rs":"ea751379a5aec02f93f8d2c61e18232776b1f000dbeae64b9a7195ba21a19dd6","src/ir/ty.rs":"952fb04cd6a71a2bca5c509aecacb42a1de0cae75824941541a38dc589f0993a","src/ir/var.rs":"8bdafb6d02f2c55ae11c28d88b19fb7a65ba8466da12ff039ae4c16c790b291e","src/lib.rs":"d5c8b404c515d30fc2d78b28eb84cff6b256f1f1e2dbd6aca280529bb2af6879","src/log_stubs.rs":"6dfdd908b7c6453da416cf232893768f9480e551ca4add0858ef88bf71ee6ceb","src/main.rs":"e519053bcdde6bc88f60f955246a02d53b3db1cc5ccd1612e6675b790b7460b0","src/options.rs":"041d635c8f6712ca32676a68f06d0245faed5577d9513786e058540ea2a69a7f","src/parse.rs":"be7d13cc84fae79ec7b3aa9e77063fa475a48d74a854423e2c72d75006a25202","src/regex_set.rs":"5cb72fc3714c0d79e9e942d003349c0775fafd7cd0c9603c65f5261883bbf9cf","src/time.rs":"3b763e6fee51d0eb01228dfe28bc28a9f692aff73b2a7b90a030902e0238fca6"},"package":"6bd7710ac8399ae1ebe1e3aac7c9047c4f39f2c94b33c997f482f49e96991f7c"} -diff -up a/third_party/rust/bindgen/src/ir/analysis/has_vtable.rs.bindgen b/third_party/rust/bindgen/src/ir/analysis/has_vtable.rs ---- a/third_party/rust/bindgen/src/ir/analysis/has_vtable.rs.bindgen 2019-12-01 15:29:26.000000000 +0100 -+++ b/third_party/rust/bindgen/src/ir/analysis/has_vtable.rs 2019-12-04 11:33:09.631921359 +0100 -@@ -9,17 +9,17 @@ use std::ops; - use {HashMap, Entry}; - - /// The result of the `HasVtableAnalysis` for an individual item. --#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord)] -+#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] - pub enum HasVtableResult { -- /// The item has a vtable, but the actual vtable pointer is in a base -- /// member. -- BaseHasVtable, -+ /// The item does not have a vtable pointer. -+ No, - - /// The item has a vtable and the actual vtable pointer is within this item. - SelfHasVtable, - -- /// The item does not have a vtable pointer. -- No -+ /// The item has a vtable, but the actual vtable pointer is in a base -+ /// member. -+ BaseHasVtable, - } - - impl Default for HasVtableResult { -@@ -28,21 +28,6 @@ impl Default for HasVtableResult { - } - } - --impl cmp::PartialOrd for HasVtableResult { -- fn partial_cmp(&self, rhs: &Self) -> Option { -- use self::HasVtableResult::*; -- -- match (*self, *rhs) { -- (x, y) if x == y => Some(cmp::Ordering::Equal), -- (BaseHasVtable, _) => Some(cmp::Ordering::Greater), -- (_, BaseHasVtable) => Some(cmp::Ordering::Less), -- (SelfHasVtable, _) => Some(cmp::Ordering::Greater), -- (_, SelfHasVtable) => Some(cmp::Ordering::Less), -- _ => unreachable!(), -- } -- } --} -- - impl HasVtableResult { - /// Take the least upper bound of `self` and `rhs`. - pub fn join(self, rhs: Self) -> Self { -diff -up a/third_party/rust/bindgen/src/ir/analysis/sizedness.rs.bindgen b/third_party/rust/bindgen/src/ir/analysis/sizedness.rs ---- a/third_party/rust/bindgen/src/ir/analysis/sizedness.rs.bindgen 2019-12-01 15:29:26.000000000 +0100 -+++ b/third_party/rust/bindgen/src/ir/analysis/sizedness.rs 2019-12-04 11:33:09.632921362 +0100 -@@ -22,13 +22,14 @@ use {HashMap, Entry}; - /// - /// We initially assume that all types are `ZeroSized` and then update our - /// understanding as we learn more about each type. --#[derive(Copy, Clone, Debug, PartialEq, Eq, Ord)] -+#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] - pub enum SizednessResult { -- /// Has some size that is known to be greater than zero. That doesn't mean -- /// it has a static size, but it is not zero sized for sure. In other words, -- /// it might contain an incomplete array or some other dynamically sized -- /// type. -- NonZeroSized, -+ /// The type is zero-sized. -+ /// -+ /// This means that if it is a C++ type, and is not being used as a base -+ /// member, then we must add an `_address` byte to enforce the -+ /// unique-address-per-distinct-object-instance rule. -+ ZeroSized, - - /// Whether this type is zero-sized or not depends on whether a type - /// parameter is zero-sized or not. -@@ -52,12 +53,11 @@ pub enum SizednessResult { - /// https://github.com/rust-lang-nursery/rust-bindgen/issues/586 - DependsOnTypeParam, - -- /// The type is zero-sized. -- /// -- /// This means that if it is a C++ type, and is not being used as a base -- /// member, then we must add an `_address` byte to enforce the -- /// unique-address-per-distinct-object-instance rule. -- ZeroSized, -+ /// Has some size that is known to be greater than zero. That doesn't mean -+ /// it has a static size, but it is not zero sized for sure. In other words, -+ /// it might contain an incomplete array or some other dynamically sized -+ /// type. -+ NonZeroSized, - } - - impl Default for SizednessResult { -@@ -66,21 +66,6 @@ impl Default for SizednessResult { - } - } - --impl cmp::PartialOrd for SizednessResult { -- fn partial_cmp(&self, rhs: &Self) -> Option { -- use self::SizednessResult::*; -- -- match (*self, *rhs) { -- (x, y) if x == y => Some(cmp::Ordering::Equal), -- (NonZeroSized, _) => Some(cmp::Ordering::Greater), -- (_, NonZeroSized) => Some(cmp::Ordering::Less), -- (DependsOnTypeParam, _) => Some(cmp::Ordering::Greater), -- (_, DependsOnTypeParam) => Some(cmp::Ordering::Less), -- _ => unreachable!(), -- } -- } --} -- - impl SizednessResult { - /// Take the least upper bound of `self` and `rhs`. - pub fn join(self, rhs: Self) -> Self { -diff -up a/third_party/rust/bindgen/src/ir/derive.rs.bindgen b/third_party/rust/bindgen/src/ir/derive.rs ---- a/third_party/rust/bindgen/src/ir/derive.rs.bindgen 2019-12-01 15:29:26.000000000 +0100 -+++ b/third_party/rust/bindgen/src/ir/derive.rs 2019-12-04 11:33:09.632921362 +0100 -@@ -92,10 +92,10 @@ pub trait CanDeriveOrd { - /// - /// Initially we assume that we can derive trait for all types and then - /// update our understanding as we learn more about each type. --#[derive(Debug, Copy, Clone, PartialEq, Eq, Ord)] -+#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord)] - pub enum CanDerive { -- /// No, we cannot. -- No, -+ /// Yes, we can derive automatically. -+ Yes, - - /// The only thing that stops us from automatically deriving is that - /// array with more than maximum number of elements is used. -@@ -103,8 +103,8 @@ pub enum CanDerive { - /// This means we probably can "manually" implement such trait. - Manually, - -- /// Yes, we can derive automatically. -- Yes, -+ /// No, we cannot. -+ No, - } - - impl Default for CanDerive { -@@ -113,22 +113,6 @@ impl Default for CanDerive { - } - } - --impl cmp::PartialOrd for CanDerive { -- fn partial_cmp(&self, rhs: &Self) -> Option { -- use self::CanDerive::*; -- -- let ordering = match (*self, *rhs) { -- (x, y) if x == y => cmp::Ordering::Equal, -- (No, _) => cmp::Ordering::Greater, -- (_, No) => cmp::Ordering::Less, -- (Manually, _) => cmp::Ordering::Greater, -- (_, Manually) => cmp::Ordering::Less, -- _ => unreachable!() -- }; -- Some(ordering) -- } --} -- - impl CanDerive { - /// Take the least upper bound of `self` and `rhs`. - pub fn join(self, rhs: Self) -> Self { - diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc deleted file mode 100644 index 4d7dde1..0000000 --- a/icecat.rpmlintrc +++ /dev/null @@ -1,46 +0,0 @@ -# Whitelisting errors -# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist -# https://src.fedoraproject.org/rpms/python3/blob/master/f/python3.rpmlintrc -# Edited by sagitter (sagitter AT fedoraproject dot org) - -# KNOWN BUGS: -# - -# TESTS: -##### SRPMs ##### - -# ifarch applied patches are okay -# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support -addFilter(r'(%ifarch-applied-patch) Patch*') -# Different file size due to the signature of the source code tarbz archive -addFilter(r'file-size-mismatch') - -addFilter(r'(invalid-url) Source4') -addFilter(r'(invalid-url) Source5') -addFilter(r'(invalid-url) Source17') - -# ERRORS: -##### RPMs ##### - -# chroot function (??) -addFilter(r'(missing-call-to-chdir-with-chroot) /usr/lib(64)?/icecat/libmozsandbox.so') -addFilter(r'(missing-call-to-setgroups-before-setuid) /usr/lib(64)?/icecat/libxul.so') - -# Expected on FF browser -# https://support.mozilla.org/en-US/questions/1045418 -addFilter(r'(zero-length) /usr/lib(64)?/icecat/chrome.manifest') -addFilter(r'(zero-length) /usr/lib(64)?/icecat/browser/chrome.manifest') - -addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/gtk2/libmozgtk.so') -addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/libmozgtk.so') - -# False positive -addFilter(r'(dangling-symlink) /usr/lib(64)?/icecat/dictionaries /usr/share/myspell') -addFilter(r'(unversioned-explicit-provides) webclient') - -# WARNINGS: -##### RPMs ##### - -addFilter(r'(no-manual-page-for-binary) icecat-wayland') -addFilter(r'(no-manual-page-for-binary) icecat-x11') - diff --git a/icecat.spec b/icecat.spec index e1d8e06..a0e111a 100644 --- a/icecat.spec +++ b/icecat.spec @@ -83,9 +83,11 @@ ExcludeArch: %{arm} ExcludeArch: s390x # Set new source-code build version -%global gnu_ver gnu1 +# This tag indicates a new rebuild for Fedora +%global redhat_ver rh1 # Set extra version tag +# This tag comes from Mozilla's releases %if 0%{?release_candidate} %global extra_ver .rc1 %endif @@ -96,7 +98,7 @@ ExcludeArch: s390x Name: icecat Version: 68.4.0 -Release: 0.1%{extra_ver}.%{gnu_ver}%{?pre_tag}%{?dist} +Release: 0.2%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -106,7 +108,7 @@ URL: http://www.gnu.org/software/gnuzilla/ ## Source archive created by scripts based on Gnuzilla files. ## Modified files are hosted in a dedicated fork repository: ## https://gitlab.com/anto.trande/icecat -Source0: https://sagitter.fedorapeople.org/%{name}/v%{version}/%{name}-%{version}-%{gnu_ver}.tar.bz2 +Source0: https://sagitter.fedorapeople.org/%{name}/v%{version}/%{name}-%{version}-%{redhat_ver}.tar.bz2 Source2: %{name}.png Source3: %{name}-mozconfig-common @@ -181,7 +183,6 @@ Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch # Patches for compatibility with Rust-1.39 Patch419: mozilla-1564873.patch -Patch420: icecat-68.3.0-cbindgen_for_rust139.patch # # Fix crash on ppc64le (mozilla#1512162) @@ -393,7 +394,6 @@ tar -xf %{SOURCE5} %endif %patch419 -p1 -b .mozilla-1564873 -#%%patch420 -p1 -b .icecat-68.3.0-cbindgen_for_rust139 %patch423 -p1 -b .mozilla-1596503 %patch424 -p1 -b .mozilla-1566876-webrtc-ind @@ -833,6 +833,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Fri Jan 03 2020 Antonio Trande - 68.4.0-0.2.rc1.rh1 +- New rebuild of source archive (extensions updated) +- Use rh prefix instead of gnu + * Wed Jan 01 2020 Antonio Trande - 68.4.0-0.1.rc1.gnu1 - Mozilla release candidate 68.4.0ESR - Fix rhbz#1785956 diff --git a/sources b/sources index 5ee9838..15138e3 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c -SHA512 (icecat-68.4.0-gnu1.tar.bz2) = d919169a96e47a71dd2d3bf8dd38a0dba79e2721d66ea584ceda9de71644644f923d10a1786eb06305d507f5d5172b233b19222be1f46a5d325b196417aee178 +SHA512 (icecat-68.4.0-rh1.tar.bz2) = c2e113afc24721cfa36628ddc432ee9c84725d6d7b5b540c6e6f2cd6782d75ba9319f69c73518b70ef3cfcbd647ff59eaad6fefc3a6c4eb00504700fd1b69312 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 930eaa6a30d75668b5b1a91e753982083882df79 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 4 Jan 2020 20:34:59 +0100 Subject: [PATCH 089/473] Add icecat.rpmlintrc --- icecat.rpmlintrc | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 icecat.rpmlintrc diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc new file mode 100644 index 0000000..4d7dde1 --- /dev/null +++ b/icecat.rpmlintrc @@ -0,0 +1,46 @@ +# Whitelisting errors +# https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist +# https://src.fedoraproject.org/rpms/python3/blob/master/f/python3.rpmlintrc +# Edited by sagitter (sagitter AT fedoraproject dot org) + +# KNOWN BUGS: +# + +# TESTS: +##### SRPMs ##### + +# ifarch applied patches are okay +# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support +addFilter(r'(%ifarch-applied-patch) Patch*') +# Different file size due to the signature of the source code tarbz archive +addFilter(r'file-size-mismatch') + +addFilter(r'(invalid-url) Source4') +addFilter(r'(invalid-url) Source5') +addFilter(r'(invalid-url) Source17') + +# ERRORS: +##### RPMs ##### + +# chroot function (??) +addFilter(r'(missing-call-to-chdir-with-chroot) /usr/lib(64)?/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) /usr/lib(64)?/icecat/libxul.so') + +# Expected on FF browser +# https://support.mozilla.org/en-US/questions/1045418 +addFilter(r'(zero-length) /usr/lib(64)?/icecat/chrome.manifest') +addFilter(r'(zero-length) /usr/lib(64)?/icecat/browser/chrome.manifest') + +addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/gtk2/libmozgtk.so') +addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/libmozgtk.so') + +# False positive +addFilter(r'(dangling-symlink) /usr/lib(64)?/icecat/dictionaries /usr/share/myspell') +addFilter(r'(unversioned-explicit-provides) webclient') + +# WARNINGS: +##### RPMs ##### + +addFilter(r'(no-manual-page-for-binary) icecat-wayland') +addFilter(r'(no-manual-page-for-binary) icecat-x11') + From 2e134ee817591a55456636396875ff7cf0bc7e35 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 7 Jan 2020 20:09:21 +0100 Subject: [PATCH 090/473] Mozilla stable release 68.4.0ESR| Test build for ARM and s390x --- .gitignore | 2 ++ icecat.spec | 27 ++++++++++++++++++--------- sources | 3 ++- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index eef7b50..25c57fb 100644 --- a/.gitignore +++ b/.gitignore @@ -97,3 +97,5 @@ /icecat-68.3.0-langpacks.tar.gz /icecat-68.4.0-gnu1.tar.bz2 /icecat-68.4.0-rh1.tar.bz2 +/icecat-68.4.0-langpacks.tar.gz +/icecat-68.4.0-rh2.tar.bz2 diff --git a/icecat.spec b/icecat.spec index a0e111a..85b9392 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,11 +1,11 @@ # Set to true if it's going to be submitted as update -%global release_build 1 +%global release_build 0 # Set to true if it's going to be submitted as release candidate -%global release_candidate 1 +%global release_candidate 0 # Active/Deactive language files handling -%global build_langpacks 0 +%global build_langpacks 1 %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html @@ -61,7 +61,10 @@ %bcond_without jack %bcond_with alsa -%global with_vpx 1 +%global with_vpx 1 +%if 0%{?with_vpx} +%global libvpx_version 1.4.0 +%endif %if 0%{?fedora} > 30 %global wayland_backend_default 1 @@ -78,18 +81,20 @@ %global build_with_clang 0 # Exclude ARM builds for rhbz #1658940 -ExcludeArch: %{arm} +#ExcludeArch: %%{arm} # Disabled due to https://pagure.io/fedora-infrastructure/issue/7581 -ExcludeArch: s390x +#ExcludeArch: s390x # Set new source-code build version # This tag indicates a new rebuild for Fedora -%global redhat_ver rh1 +%global redhat_ver rh2 # Set extra version tag # This tag comes from Mozilla's releases %if 0%{?release_candidate} %global extra_ver .rc1 +%else +%global extra_ver %{nil} %endif %if !%{release_build} @@ -98,7 +103,7 @@ ExcludeArch: s390x Name: icecat Version: 68.4.0 -Release: 0.2%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -244,7 +249,7 @@ BuildRequires: libffi-devel BuildRequires: libnotify-devel BuildRequires: libpng-devel %if 0%{?with_vpx} -BuildRequires: libvpx-devel +BuildRequires: libvpx-devel >= %{libvpx_version} %endif BuildRequires: libzip-devel BuildRequires: mesa-libGL-devel @@ -833,6 +838,10 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Tue Jan 07 2020 Antonio Trande - 68.4.0-1.rh2.test +- Mozilla stable release 68.4.0ESR +- Test build for ARM and s390x + * Fri Jan 03 2020 Antonio Trande - 68.4.0-0.2.rc1.rh1 - New rebuild of source archive (extensions updated) - Use rh prefix instead of gnu diff --git a/sources b/sources index 15138e3..3fd45cb 100644 --- a/sources +++ b/sources @@ -1,3 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c -SHA512 (icecat-68.4.0-rh1.tar.bz2) = c2e113afc24721cfa36628ddc432ee9c84725d6d7b5b540c6e6f2cd6782d75ba9319f69c73518b70ef3cfcbd647ff59eaad6fefc3a6c4eb00504700fd1b69312 +SHA512 (icecat-68.4.0-langpacks.tar.gz) = e7bedd13dd1e381c54d425f2af0b80a70c28cb911794efc91ee94e66097cf135764bd1809bc7063e132e50a1bf05775522470f25359b82be0f18b59ea4b9d36a +SHA512 (icecat-68.4.0-rh2.tar.bz2) = e2b952e2187e27b344788810c3053a6be08f7495ae312d03328cbbd126f8c4d7d16e99dc60698c7488979c26f93d00b5fdd22bdec1d83a762fba2568665216a5 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From b95faf3cf2fb76e9aff126c5be5cff1be125e455 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 7 Jan 2020 20:52:56 +0100 Subject: [PATCH 091/473] Drop obsolete patches --- ...fix-mozillaSignalTrampoline-to-work-.patch | 2 +- build-big-endian.patch | 84 ------------------- ...> icecat-68.4.0-build-icu-big-endian.patch | 4 +- icecat-locale.patch | 11 --- icecat.spec | 13 +-- 5 files changed, 5 insertions(+), 109 deletions(-) rename Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch => Bug-1238661_fix-mozillaSignalTrampoline-to-work-.patch (88%) delete mode 100644 build-big-endian.patch rename build-icu-big-endian.patch => icecat-68.4.0-build-icu-big-endian.patch (94%) delete mode 100644 icecat-locale.patch diff --git a/Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch b/Bug-1238661_fix-mozillaSignalTrampoline-to-work-.patch similarity index 88% rename from Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch rename to Bug-1238661_fix-mozillaSignalTrampoline-to-work-.patch index be4a7fb..1e358a8 100644 --- a/Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch +++ b/Bug-1238661_fix-mozillaSignalTrampoline-to-work-.patch @@ -9,4 +9,4 @@ diff -up firefox-60.0/mfbt/LinuxSignal.h.mozilla-1238661 firefox-60.0/mfbt/Linux + asm volatile("bx %0" : : "r"(H), "l"(aSignal), "l"(aInfo), "l"(aContext) : "memory"); } - #define MOZ_SIGNAL_TRAMPOLINE(h) (mozilla::SignalTrampoline) + # define MOZ_SIGNAL_TRAMPOLINE(h) (mozilla::SignalTrampoline) diff --git a/build-big-endian.patch b/build-big-endian.patch deleted file mode 100644 index e8ec439..0000000 --- a/build-big-endian.patch +++ /dev/null @@ -1,84 +0,0 @@ -diff -up firefox-60.0/gfx/skia/skia/include/core/SkColorPriv.h.big-endian firefox-60.0/gfx/skia/skia/include/core/SkColorPriv.h ---- firefox-60.0/gfx/skia/skia/include/core/SkColorPriv.h.big-endian 2018-04-09 22:50:48.000000000 +0200 -+++ firefox-60.0/gfx/skia/skia/include/core/SkColorPriv.h 2018-04-18 11:51:38.748680174 +0200 -@@ -54,18 +54,19 @@ static inline U8CPU SkUnitScalarClampToB - * - * Here we enforce this constraint. - */ -- -+/* - #ifdef SK_CPU_BENDIAN - #define SK_RGBA_R32_SHIFT 24 - #define SK_RGBA_G32_SHIFT 16 - #define SK_RGBA_B32_SHIFT 8 - #define SK_RGBA_A32_SHIFT 0 - #else -+*/ - #define SK_RGBA_R32_SHIFT 0 - #define SK_RGBA_G32_SHIFT 8 - #define SK_RGBA_B32_SHIFT 16 - #define SK_RGBA_A32_SHIFT 24 --#endif -+/*#endif*/ - - #define SkGetPackedA32(packed) ((uint32_t)((packed) << (24 - SK_A32_SHIFT)) >> 24) - #define SkGetPackedR32(packed) ((uint32_t)((packed) << (24 - SK_R32_SHIFT)) >> 24) -diff -up firefox-60.0/gfx/skia/skia/include/core/SkImageInfo.h.big-endian firefox-60.0/gfx/skia/skia/include/core/SkImageInfo.h ---- firefox-60.0/gfx/skia/skia/include/core/SkImageInfo.h.big-endian 2018-04-09 22:50:48.000000000 +0200 -+++ firefox-60.0/gfx/skia/skia/include/core/SkImageInfo.h 2018-04-18 11:51:38.748680174 +0200 -@@ -84,7 +84,8 @@ enum SkColorType { - #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A) - kN32_SkColorType = kRGBA_8888_SkColorType, - #else -- #error "SK_*32_SHIFT values must correspond to BGRA or RGBA byte order" -+ //#error "SK_*32_SHIFT values must correspond to BGRA or RGBA byte order" -+ kN32_SkColorType = kBGRA_8888_SkColorType - #endif - }; - -diff -up firefox-60.0/gfx/skia/skia/include/gpu/GrTypes.h.big-endian firefox-60.0/gfx/skia/skia/include/gpu/GrTypes.h ---- firefox-60.0/gfx/skia/skia/include/gpu/GrTypes.h.big-endian 2018-04-09 22:50:48.000000000 +0200 -+++ firefox-60.0/gfx/skia/skia/include/gpu/GrTypes.h 2018-04-18 11:51:38.748680174 +0200 -@@ -344,15 +344,13 @@ enum GrPixelConfig { - static const int kGrPixelConfigCnt = kLast_GrPixelConfig + 1; - - // Aliases for pixel configs that match skia's byte order. --#ifndef SK_CPU_LENDIAN -- #error "Skia gpu currently assumes little endian" --#endif - #if SK_PMCOLOR_BYTE_ORDER(B,G,R,A) - static const GrPixelConfig kSkia8888_GrPixelConfig = kBGRA_8888_GrPixelConfig; - #elif SK_PMCOLOR_BYTE_ORDER(R,G,B,A) - static const GrPixelConfig kSkia8888_GrPixelConfig = kRGBA_8888_GrPixelConfig; - #else -- #error "SK_*32_SHIFT values must correspond to GL_BGRA or GL_RGBA format." -+ static const GrPixelConfig kSkia8888_GrPixelConfig = kBGRA_8888_GrPixelConfig; -+ static const GrPixelConfig kSkiaGamma8888_GrPixelConfig = kSBGRA_8888_GrPixelConfig; - #endif - - /** -diff -up firefox-60.0/gfx/skia/skia/src/core/SkColorData.h.big-endian firefox-60.0/gfx/skia/skia/src/core/SkColorData.h ---- firefox-60.0/gfx/skia/skia/src/core/SkColorData.h.big-endian 2018-04-18 13:42:06.980476156 +0200 -+++ firefox-60.0/gfx/skia/skia/src/core/SkColorData.h 2018-04-18 13:42:50.493520552 +0200 -@@ -31,18 +31,19 @@ - * - * Here we enforce this constraint. - */ -- -+/* - #ifdef SK_CPU_BENDIAN - #define SK_BGRA_B32_SHIFT 24 - #define SK_BGRA_G32_SHIFT 16 - #define SK_BGRA_R32_SHIFT 8 - #define SK_BGRA_A32_SHIFT 0 - #else -+*/ - #define SK_BGRA_B32_SHIFT 0 - #define SK_BGRA_G32_SHIFT 8 - #define SK_BGRA_R32_SHIFT 16 - #define SK_BGRA_A32_SHIFT 24 --#endif -+//#endif - - #if defined(SK_PMCOLOR_IS_RGBA) && defined(SK_PMCOLOR_IS_BGRA) - #error "can't define PMCOLOR to be RGBA and BGRA" diff --git a/build-icu-big-endian.patch b/icecat-68.4.0-build-icu-big-endian.patch similarity index 94% rename from build-icu-big-endian.patch rename to icecat-68.4.0-build-icu-big-endian.patch index aaa0e3b..c9d16d8 100644 --- a/build-icu-big-endian.patch +++ b/icecat-68.4.0-build-icu-big-endian.patch @@ -7,6 +7,6 @@ diff -up a/build/autoconf/icu.orig.m4 b/build/autoconf/icu.m4 # but we'd need to check in a big-endian version of the file. - ICU_DATA_FILE="icudt${version}l.dat" + ICU_DATA_FILE="icudt${version}b.dat" - - MOZ_ICU_DATA_ARCHIVE= fi + + AC_SUBST(MOZ_ICU_VERSION) diff --git a/icecat-locale.patch b/icecat-locale.patch deleted file mode 100644 index 7bdcbac..0000000 --- a/icecat-locale.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- intl/icu/source/i18n/digitlst.orig.cpp 2017-07-25 16:08:42.000000000 +0000 -+++ intl/icu/source/i18n/digitlst.cpp 2017-08-03 19:20:54.808813010 +0000 -@@ -63,7 +63,7 @@ - - #if U_USE_STRTOD_L - # if U_HAVE_XLOCALE_H --# include -+# include - # else - # include - # endif diff --git a/icecat.spec b/icecat.spec index 85b9392..a458a90 100644 --- a/icecat.spec +++ b/icecat.spec @@ -160,14 +160,8 @@ Patch7: %{name}-fix_jar.patch # Fix files list for installer Patch8: %{name}-fix_installer.patch -# xlocale.h not provided by glibc-headers -# Set path of libcxx-devel -Patch9: %{name}-locale.patch +Patch26: %{name}-68.4.0-build-icu-big-endian.patch -Patch26: build-icu-big-endian.patch - -# Also fixes s390x: https://bugzilla.mozilla.org/show_bug.cgi?id=1376268 -Patch29: build-big-endian.patch # Always feel lucky for unsupported platforms: # https://bugzilla.mozilla.org/show_bug.cgi?id=1347128 Patch37: build-jit-atomic-always-lucky.patch @@ -184,7 +178,7 @@ Patch219: rhbz-1173156.patch Patch226: rhbz-1354671.patch # Upstream patches -Patch414: Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch +Patch414: Bug-1238661_fix-mozillaSignalTrampoline-to-work-.patch # Patches for compatibility with Rust-1.39 Patch419: mozilla-1564873.patch @@ -370,7 +364,6 @@ tar -xf %{SOURCE5} %patch7 -p0 -b .fix_jar %patch8 -p0 -b .fix_installer -#%%patch37 -p1 -b .jit-atomic-lucky %ifarch aarch64 %patch40 -p1 -b .aarch64-skia %endif @@ -394,8 +387,6 @@ tar -xf %{SOURCE5} # Patch for big endian platforms only %if 0%{?big_endian} %patch26 -p1 -b .icu -%patch9 -p0 -b .locale -%patch29 -p1 -b .big-endian %endif %patch419 -p1 -b .mozilla-1564873 From 805001b27fc81ffdaaa597e09ce6b13e3a4db48a Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 7 Jan 2020 21:32:39 +0100 Subject: [PATCH 092/473] Fix build options for ARM and s390x --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index a458a90..fb8dac2 100644 --- a/icecat.spec +++ b/icecat.spec @@ -461,7 +461,7 @@ echo "ac_add_options --without-system-libvpx" >> .mozconfig echo "ac_add_options --disable-libjpeg-turbo" >> .mozconfig echo "ac_add_options --with-system-jpeg" >> .mozconfig echo "ac_add_options --disable-crashreporter" >> .mozconfig -%ifnarch %{power64} aarch64 +%ifnarch %{power64} aarch64 s390x %{arm} echo "ac_add_options --disable-eme" >> .mozconfig %endif From c38e668039aa8cb9ac6f98a3d95ab77a461e9751 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 8 Jan 2020 11:45:03 +0100 Subject: [PATCH 093/473] Patched for mzbz#1526653 to disable wasm on ARM --- icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch | 11 +++++++++++ icecat.spec | 7 ++++++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch diff --git a/icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch b/icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch new file mode 100644 index 0000000..a58cb6f --- /dev/null +++ b/icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch @@ -0,0 +1,11 @@ +--- a/js/src/wasm/WasmSignalHandlers.cpp 2019-05-16 11:25:13.260881532 +0200 ++++ b/js/src/wasm/WasmSignalHandlers.cpp 2019-05-16 11:24:35.164589301 +0200 +@@ -243,7 +243,7 @@ using mozilla::DebugOnly; + // emulation here. + + #if defined(__linux__) && defined(__arm__) +-# define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS ++// # define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS + #endif + + #ifdef WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS diff --git a/icecat.spec b/icecat.spec index fb8dac2..8cc270c 100644 --- a/icecat.spec +++ b/icecat.spec @@ -165,16 +165,19 @@ Patch26: %{name}-68.4.0-build-icu-big-endian.patch # Always feel lucky for unsupported platforms: # https://bugzilla.mozilla.org/show_bug.cgi?id=1347128 Patch37: build-jit-atomic-always-lucky.patch + # Fixing missing cacheFlush when JS_CODEGEN_NONE is used (s390x) Patch38: build-cacheFlush-missing.patch + Patch40: build-aarch64-skia.patch Patch41: build-disable-elfhack.patch Patch44: build-arm-libopus.patch +Patch45: %{name}-68.4.0-mozilla-1526653_arm_disable_wasm.patch # Fedora specific patches Patch219: rhbz-1173156.patch -#ARM run-time patch +# ARM run-time patch Patch226: rhbz-1354671.patch # Upstream patches @@ -382,6 +385,7 @@ tar -xf %{SOURCE5} %ifarch %{arm} %patch414 -p1 -b .Bug-1238661---fix-mozillaSignalTrampoline-to-work %patch44 -p1 -b .build-arm-libopus +%patch45 -p1 -b .mozilla-1526653_arm %endif # Patch for big endian platforms only @@ -832,6 +836,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x * Tue Jan 07 2020 Antonio Trande - 68.4.0-1.rh2.test - Mozilla stable release 68.4.0ESR - Test build for ARM and s390x +- Patched for mzbz#1526653 to disable wasm on ARM * Fri Jan 03 2020 Antonio Trande - 68.4.0-0.2.rc1.rh1 - New rebuild of source archive (extensions updated) From 090cafe7db5ef6a19244e78b5ac0def39314a7fe Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 8 Jan 2020 12:02:16 +0100 Subject: [PATCH 094/473] Update patch #45 --- ...4.0-mozilla-1526653_arm_disable_wasm.patch | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch b/icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch index a58cb6f..86d0c08 100644 --- a/icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch +++ b/icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch @@ -1,11 +1,23 @@ ---- a/js/src/wasm/WasmSignalHandlers.cpp 2019-05-16 11:25:13.260881532 +0200 -+++ b/js/src/wasm/WasmSignalHandlers.cpp 2019-05-16 11:24:35.164589301 +0200 -@@ -243,7 +243,7 @@ using mozilla::DebugOnly; - // emulation here. - - #if defined(__linux__) && defined(__arm__) --# define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS -+// # define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS +diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp +index 636537f847862ef693dd6582e2783de4e3d403c5..383c380f04ceb6a111dbfe9a046e3454a56e31b4 100644 +--- a/js/src/wasm/WasmSignalHandlers.cpp ++++ b/js/src/wasm/WasmSignalHandlers.cpp +@@ -248,7 +248,16 @@ using mozilla::DebugOnly; #endif #ifdef WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS +-# include ++struct user_vfp { ++ unsigned long long fpregs[32]; ++ unsigned long fpscr; ++}; ++ ++struct user_vfp_exc { ++ unsigned long fpexc; ++ unsigned long fpinst; ++ unsigned long fpinst2; ++}; + #endif + + #if defined(ANDROID) + From e1038d9735f3c5ff40f3a4103b6cf29979c86b67 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 8 Jan 2020 14:21:22 +0100 Subject: [PATCH 095/473] Add --disable-av1 build option for ARM --- icecat.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/icecat.spec b/icecat.spec index 8cc270c..be26d88 100644 --- a/icecat.spec +++ b/icecat.spec @@ -504,6 +504,8 @@ echo "ac_add_options --disable-debug" >> .mozconfig %endif %ifarch %{arm} echo "ac_add_options --enable-linker=gold" >> .mozconfig +# mzbz #1436511 +echo "ac_add_options --disable-av1" >> .mozconfig %endif echo "ac_add_options --disable-strip" >> .mozconfig @@ -837,6 +839,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x - Mozilla stable release 68.4.0ESR - Test build for ARM and s390x - Patched for mzbz#1526653 to disable wasm on ARM +- Add --disable-av1 build option for ARM * Fri Jan 03 2020 Antonio Trande - 68.4.0-0.2.rc1.rh1 - New rebuild of source archive (extensions updated) From 9086c49c7863103ade825ba739630d26a09484d9 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 8 Jan 2020 20:18:44 +0100 Subject: [PATCH 096/473] Release build --- icecat.spec | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/icecat.spec b/icecat.spec index be26d88..1d62e52 100644 --- a/icecat.spec +++ b/icecat.spec @@ -1,5 +1,5 @@ # Set to true if it's going to be submitted as update -%global release_build 0 +%global release_build 1 # Set to true if it's going to be submitted as release candidate %global release_candidate 0 @@ -80,11 +80,6 @@ # Use clang? %global build_with_clang 0 -# Exclude ARM builds for rhbz #1658940 -#ExcludeArch: %%{arm} -# Disabled due to https://pagure.io/fedora-infrastructure/issue/7581 -#ExcludeArch: s390x - # Set new source-code build version # This tag indicates a new rebuild for Fedora %global redhat_ver rh2 @@ -103,7 +98,7 @@ Name: icecat Version: 68.4.0 -Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 2%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -835,6 +830,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Wed Jan 08 2020 Antonio Trande - 68.4.0-2.rh2 +- Mozilla stable release 68.4.0ESR (release build) + * Tue Jan 07 2020 Antonio Trande - 68.4.0-1.rh2.test - Mozilla stable release 68.4.0ESR - Test build for ARM and s390x From 8841e528d62c079608dc2a1807c8ceeba27b8e05 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 8 Jan 2020 20:24:21 +0100 Subject: [PATCH 097/473] Release build| Fix description --- icecat.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/icecat.spec b/icecat.spec index 1d62e52..abc9cc3 100644 --- a/icecat.spec +++ b/icecat.spec @@ -309,8 +309,8 @@ Extensions included to this version of IceCat: and disable the ones more prone to break websites * LibreJS - GNU LibreJS aims to address the JavaScript problem described in Richard - Stallman's article The JavaScript Trap + GNU LibreJS aims to address the JavaScript problem described in the article + "The JavaScript Trap" of Richard Stallman * LibrifyJS: libgen.me Libre replacement for JavaScript blocked by GNU LibreJS on libgen.me From dde449738aa76e7d0f07343b09e8fc59856d4c7d Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 8 Jan 2020 21:08:20 +0100 Subject: [PATCH 098/473] Release build| ARM excluded --- icecat.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/icecat.spec b/icecat.spec index abc9cc3..6e0eab6 100644 --- a/icecat.spec +++ b/icecat.spec @@ -4,6 +4,9 @@ # Set to true if it's going to be submitted as release candidate %global release_candidate 0 +# Exclude ARM builds for rhbz #1658940 +ExcludeArch: %{arm} + # Active/Deactive language files handling %global build_langpacks 1 From 055c49058178a929b868ea446f06ed82c10b27ce Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 11 Jan 2020 19:15:13 +0100 Subject: [PATCH 099/473] Mozilla release 68.4.1ESR --- .gitignore | 2 ++ icecat-lang_download.sh | 2 +- icecat.spec | 13 ++++++++----- sources | 4 ++-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 25c57fb..f974c4e 100644 --- a/.gitignore +++ b/.gitignore @@ -99,3 +99,5 @@ /icecat-68.4.0-rh1.tar.bz2 /icecat-68.4.0-langpacks.tar.gz /icecat-68.4.0-rh2.tar.bz2 +/icecat-68.4.1-langpacks.tar.gz +/icecat-68.4.1-rh1.tar.bz2 diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index a3c7bd5..3d45192 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=68.4.0 +VERSION=68.4.1 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.spec b/icecat.spec index 6e0eab6..567316d 100644 --- a/icecat.spec +++ b/icecat.spec @@ -85,7 +85,7 @@ ExcludeArch: %{arm} # Set new source-code build version # This tag indicates a new rebuild for Fedora -%global redhat_ver rh2 +%global redhat_ver rh1 # Set extra version tag # This tag comes from Mozilla's releases @@ -100,8 +100,8 @@ ExcludeArch: %{arm} %endif Name: icecat -Version: 68.4.0 -Release: 2%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Version: 68.4.1 +Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -833,11 +833,14 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Sat Jan 11 2020 Antonio Trande - 68.4.1-1.rh1 +- Mozilla release 68.4.1ESR (release build) + * Wed Jan 08 2020 Antonio Trande - 68.4.0-2.rh2 -- Mozilla stable release 68.4.0ESR (release build) +- Mozilla release 68.4.0ESR (release build) * Tue Jan 07 2020 Antonio Trande - 68.4.0-1.rh2.test -- Mozilla stable release 68.4.0ESR +- Mozilla release 68.4.0ESR - Test build for ARM and s390x - Patched for mzbz#1526653 to disable wasm on ARM - Add --disable-av1 build option for ARM diff --git a/sources b/sources index 3fd45cb..efd798b 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c -SHA512 (icecat-68.4.0-langpacks.tar.gz) = e7bedd13dd1e381c54d425f2af0b80a70c28cb911794efc91ee94e66097cf135764bd1809bc7063e132e50a1bf05775522470f25359b82be0f18b59ea4b9d36a -SHA512 (icecat-68.4.0-rh2.tar.bz2) = e2b952e2187e27b344788810c3053a6be08f7495ae312d03328cbbd126f8c4d7d16e99dc60698c7488979c26f93d00b5fdd22bdec1d83a762fba2568665216a5 +SHA512 (icecat-68.4.1-langpacks.tar.gz) = 2a931ba00c9ec6dba7b3f311963e528b9c1d59dfde0a5c28656c4a4b7745690933852264f1fb1c3d631030bf675e8414fbddaaf97de82de3ee5267e1e0e54092 +SHA512 (icecat-68.4.1-rh1.tar.bz2) = c789bebabe39461179194b949413d6f0cfcac14346d099ca8314281eb8123d131742a369b41aad6ab081407235ab3a7def2aaadb721bd60dd850cf766ea5d5e2 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From e53c76e18752af644132d884ae4532207c73f87c Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 12 Jan 2020 13:03:28 +0100 Subject: [PATCH 100/473] Remove Changelog.IceCat file --- icecat.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 567316d..f89827a 100644 --- a/icecat.spec +++ b/icecat.spec @@ -789,7 +789,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %else %files %endif -%doc Changelog.IceCat README.* AUTHORS +%doc README.* AUTHORS %license LICENSE LEGAL COPYING-* %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop From 99de7eafbe70b252626d142ace7f5a9c30bb05f1 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 29 Jan 2020 05:14:21 +0000 Subject: [PATCH 101/473] - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- icecat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index f89827a..9b7e9e5 100644 --- a/icecat.spec +++ b/icecat.spec @@ -101,7 +101,7 @@ ExcludeArch: %{arm} Name: icecat Version: 68.4.1 -Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 2%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -833,6 +833,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Wed Jan 29 2020 Fedora Release Engineering - 68.4.1-2.rh1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + * Sat Jan 11 2020 Antonio Trande - 68.4.1-1.rh1 - Mozilla release 68.4.1ESR (release build) From 4590edc6c6f495e955d82514bbd6d856dfee6244 Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 7 Feb 2020 16:22:48 +0100 Subject: [PATCH 102/473] Undefine strict symbol checks on s390x --- icecat.spec | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/icecat.spec b/icecat.spec index 9b7e9e5..d2788e9 100644 --- a/icecat.spec +++ b/icecat.spec @@ -7,6 +7,12 @@ # Exclude ARM builds for rhbz #1658940 ExcludeArch: %{arm} +# /usr/bin/ld: libxul.so: hidden symbol +# https://src.fedoraproject.org/rpms/redhat-rpm-config/blob/master/f/buildflags.md +%ifarch s390x +%undefine _strict_symbol_defs_build +%endif + # Active/Deactive language files handling %global build_langpacks 1 @@ -835,6 +841,7 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %changelog * Wed Jan 29 2020 Fedora Release Engineering - 68.4.1-2.rh1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild +- Undefine strict symbol checks on s390x * Sat Jan 11 2020 Antonio Trande - 68.4.1-1.rh1 - Mozilla release 68.4.1ESR (release build) From 95a13976753f9979f17e721cbbaa634875032c96 Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 7 Feb 2020 22:10:41 +0100 Subject: [PATCH 103/473] Undo latest change| Set opt flags on s390x --- icecat.spec | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/icecat.spec b/icecat.spec index d2788e9..1a5f02b 100644 --- a/icecat.spec +++ b/icecat.spec @@ -7,12 +7,6 @@ # Exclude ARM builds for rhbz #1658940 ExcludeArch: %{arm} -# /usr/bin/ld: libxul.so: hidden symbol -# https://src.fedoraproject.org/rpms/redhat-rpm-config/blob/master/f/buildflags.md -%ifarch s390x -%undefine _strict_symbol_defs_build -%endif - # Active/Deactive language files handling %global build_langpacks 1 @@ -487,15 +481,17 @@ echo "ac_add_options --enable-debug" >> .mozconfig echo "ac_add_options --disable-optimize" >> .mozconfig echo "ac_add_options --enable-dtrace" >> .mozconfig %else -%define optimize_flags "none" -# Fedora with GCC-7 needs to disable default build flags (mozbz#1342344) +%global optimize_flags "none" %ifnarch s390x %define optimize_flags "-g -O2" %endif -%ifarch %{arm} s390x +%ifarch %{arm} # ARMv7 need that (rhbz#1426850) %define optimize_flags "-g -O2 -fno-schedule-insns" %endif +%ifarch s390x +%define optimize_flags "-g1 -O1 -fno-schedule-insns" +%endif %ifarch ppc64le aarch64 %define optimize_flags "-g -O2" %endif @@ -611,7 +607,7 @@ export RUSTFLAGS="-Cdebuginfo=0" export MOZ_RUST_DEFAULT_FLAGS="-Cdebuginfo=0 -Copt-level=0" %endif export CFLAGS=$MOZ_OPT_FLAGS -export CXXFLAGS="$MOZ_OPT_FLAGS" +export CXXFLAGS=$MOZ_OPT_FLAGS export LDFLAGS=$MOZ_LINK_FLAGS export PREFIX='%{_prefix}' From c580e516c99a1cfaa72699c0356ba2d19fd1bdc3 Mon Sep 17 00:00:00 2001 From: sagitter Date: Mon, 10 Feb 2020 19:44:39 +0100 Subject: [PATCH 104/473] Mozilla release 68.5.0ESR (Mozilla release) --- .gitignore | 2 ++ icecat-lang_download.sh | 2 +- icecat.appdata.xml | 8 ++++---- icecat.spec | 7 +++++-- sources | 4 ++-- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index f974c4e..f0fdb4f 100644 --- a/.gitignore +++ b/.gitignore @@ -101,3 +101,5 @@ /icecat-68.4.0-rh2.tar.bz2 /icecat-68.4.1-langpacks.tar.gz /icecat-68.4.1-rh1.tar.bz2 +/icecat-68.5.0-langpacks.tar.gz +/icecat-68.5.0-rh1.tar.bz2 diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 3d45192..c2f2255 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=68.4.1 +VERSION=68.5.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.appdata.xml b/icecat.appdata.xml index 7cc9151..e6d0036 100644 --- a/icecat.appdata.xml +++ b/icecat.appdata.xml @@ -74,16 +74,16 @@ http://www.gnu.org/software/gnuzilla/ - https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat68-1.png + https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat681.png - https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat68-2.png + https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat682.png - https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat68-3.png + https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat683.png - https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat68-4.png + https://sagitter.fedorapeople.org/icecat/icecat-screenshots/icecat684.png sagitter_at_fedoraproject.org diff --git a/icecat.spec b/icecat.spec index 1a5f02b..1dcd4cf 100644 --- a/icecat.spec +++ b/icecat.spec @@ -100,8 +100,8 @@ ExcludeArch: %{arm} %endif Name: icecat -Version: 68.4.1 -Release: 2%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Version: 68.5.0 +Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -835,6 +835,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Mon Feb 10 2020 Antonio Trande - 68.5.0-1.rh1 +- Mozilla release 68.5.0ESR (Mozilla release) + * Wed Jan 29 2020 Fedora Release Engineering - 68.4.1-2.rh1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - Undefine strict symbol checks on s390x diff --git a/sources b/sources index efd798b..401beee 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c -SHA512 (icecat-68.4.1-langpacks.tar.gz) = 2a931ba00c9ec6dba7b3f311963e528b9c1d59dfde0a5c28656c4a4b7745690933852264f1fb1c3d631030bf675e8414fbddaaf97de82de3ee5267e1e0e54092 -SHA512 (icecat-68.4.1-rh1.tar.bz2) = c789bebabe39461179194b949413d6f0cfcac14346d099ca8314281eb8123d131742a369b41aad6ab081407235ab3a7def2aaadb721bd60dd850cf766ea5d5e2 +SHA512 (icecat-68.5.0-langpacks.tar.gz) = 267ab3d3db6aa9b09d168696579527bf026ffb2cca717e56afa3f8b195d1a21fa34bfeff4df147de2fe535fd1bd78fccee57c474755125127bb284aa5c3b391a +SHA512 (icecat-68.5.0-rh1.tar.bz2) = 451658de72bf473866ee7fe79d5f3700605bdf33712d318d8eae8578e38ebda1fd3de8be8ca9b66daeeb0c5495592e103f50c102566ecd0c1b6c0a516791c7be SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 08daf9d33073bcc5bd587114a3bc6c2902256ea1 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 7 Mar 2020 19:35:53 +0100 Subject: [PATCH 105/473] Mozilla release candidate 68.6.0ESR --- .gitignore | 1 + icecat-lang_download.sh | 2 +- icecat.spec | 16 +++++++--------- sources | 3 +-- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index f0fdb4f..8b1203f 100644 --- a/.gitignore +++ b/.gitignore @@ -103,3 +103,4 @@ /icecat-68.4.1-rh1.tar.bz2 /icecat-68.5.0-langpacks.tar.gz /icecat-68.5.0-rh1.tar.bz2 +/icecat-68.6.0-rh1.tar.bz2 diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index c2f2255..324946f 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=68.5.0 +VERSION=68.6.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.spec b/icecat.spec index 1dcd4cf..9c2c4ef 100644 --- a/icecat.spec +++ b/icecat.spec @@ -2,13 +2,13 @@ %global release_build 1 # Set to true if it's going to be submitted as release candidate -%global release_candidate 0 +%global release_candidate 1 # Exclude ARM builds for rhbz #1658940 ExcludeArch: %{arm} # Active/Deactive language files handling -%global build_langpacks 1 +%global build_langpacks 0 %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html @@ -33,12 +33,7 @@ ExcludeArch: %{arm} %endif # Use system sqlite? -# sqlite > 3.28.0 unavailable on Fedora < 31 -%if 0%{?fedora} < 31 -%global system_sqlite 0 -%else %global system_sqlite 1 -%endif %if 0%{?system_sqlite} %global sqlite_version 3.28.0 @@ -100,8 +95,8 @@ ExcludeArch: %{arm} %endif Name: icecat -Version: 68.5.0 -Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Version: 68.6.0 +Release: 0.1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -835,6 +830,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Sat Mar 07 2020 Antonio Trande - 68.6.0-0.1.rc1.rh1 +- Mozilla release candidate 68.6.0ESR + * Mon Feb 10 2020 Antonio Trande - 68.5.0-1.rh1 - Mozilla release 68.5.0ESR (Mozilla release) diff --git a/sources b/sources index 401beee..e4e9cff 100644 --- a/sources +++ b/sources @@ -1,4 +1,3 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c -SHA512 (icecat-68.5.0-langpacks.tar.gz) = 267ab3d3db6aa9b09d168696579527bf026ffb2cca717e56afa3f8b195d1a21fa34bfeff4df147de2fe535fd1bd78fccee57c474755125127bb284aa5c3b391a -SHA512 (icecat-68.5.0-rh1.tar.bz2) = 451658de72bf473866ee7fe79d5f3700605bdf33712d318d8eae8578e38ebda1fd3de8be8ca9b66daeeb0c5495592e103f50c102566ecd0c1b6c0a516791c7be +SHA512 (icecat-68.6.0-rh1.tar.bz2) = 30e6074bf11ea4813c13810ee19039e2101499ff0af0b75d83ca1b11f6b65258c9280e369b78b01be7570507ec48441c00714258fbc298256f16b7b2553fa7a5 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 7aca9891f411e67ea22c195ba68d151d1e1e8f58 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 10 Mar 2020 18:31:03 +0100 Subject: [PATCH 106/473] Mozilla release 68.6.0ESR --- .gitignore | 2 ++ icecat.spec | 15 +++++++++------ sources | 3 ++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 8b1203f..6092c21 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,5 @@ /icecat-68.5.0-langpacks.tar.gz /icecat-68.5.0-rh1.tar.bz2 /icecat-68.6.0-rh1.tar.bz2 +/icecat-68.6.0-langpacks.tar.gz +/icecat-68.6.0-rh2.tar.bz2 diff --git a/icecat.spec b/icecat.spec index 9c2c4ef..7415402 100644 --- a/icecat.spec +++ b/icecat.spec @@ -2,13 +2,13 @@ %global release_build 1 # Set to true if it's going to be submitted as release candidate -%global release_candidate 1 +%global release_candidate 0 # Exclude ARM builds for rhbz #1658940 ExcludeArch: %{arm} # Active/Deactive language files handling -%global build_langpacks 0 +%global build_langpacks 1 %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html @@ -50,7 +50,7 @@ ExcludeArch: %{arm} %if 0%{?system_nss} %global nspr_version 4.21 %global nspr_build_version %{nspr_version} -%global nss_version 3.45 +%global nss_version 3.50 %global nss_build_version %{nss_version} %endif @@ -61,7 +61,7 @@ ExcludeArch: %{arm} %global with_vpx 1 %if 0%{?with_vpx} -%global libvpx_version 1.4.0 +%global libvpx_version 1.8.2 %endif %if 0%{?fedora} > 30 @@ -80,7 +80,7 @@ ExcludeArch: %{arm} # Set new source-code build version # This tag indicates a new rebuild for Fedora -%global redhat_ver rh1 +%global redhat_ver rh2 # Set extra version tag # This tag comes from Mozilla's releases @@ -96,7 +96,7 @@ ExcludeArch: %{arm} Name: icecat Version: 68.6.0 -Release: 0.1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -830,6 +830,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Tue Mar 10 2020 Antonio Trande - 68.6.0-1.rh2 +- Mozilla release 68.6.0ESR + * Sat Mar 07 2020 Antonio Trande - 68.6.0-0.1.rc1.rh1 - Mozilla release candidate 68.6.0ESR diff --git a/sources b/sources index e4e9cff..1415722 100644 --- a/sources +++ b/sources @@ -1,3 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c -SHA512 (icecat-68.6.0-rh1.tar.bz2) = 30e6074bf11ea4813c13810ee19039e2101499ff0af0b75d83ca1b11f6b65258c9280e369b78b01be7570507ec48441c00714258fbc298256f16b7b2553fa7a5 +SHA512 (icecat-68.6.0-langpacks.tar.gz) = acddb20eb433f56f8ec6a33c5b198dedc1736a1816260930f8f07dea8601bb2a6b15764b6a134934663ddd5c5c0dccca0201a6161c3853074a9e27b41fc2aa51 +SHA512 (icecat-68.6.0-rh2.tar.bz2) = 752ec3fd6e2bec0408d45a49555fcf1ffa540dbb34e85ac0d7837b9317bfeb4d714c485810ca0ae0f28957dcce2b810160b585511e66ba8d0d02262fdfc353c3 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 88eae5901641d2f6d4b781e063d84f7c81589d12 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 11 Mar 2020 11:28:02 +0100 Subject: [PATCH 107/473] Remove useless build dependency --- icecat.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/icecat.spec b/icecat.spec index 7415402..2794fc3 100644 --- a/icecat.spec +++ b/icecat.spec @@ -96,7 +96,7 @@ ExcludeArch: %{arm} Name: icecat Version: 68.6.0 -Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 2%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -227,7 +227,6 @@ BuildRequires: intltool BuildRequires: libappstream-glib BuildRequires: libevent-devel BuildRequires: libicu-devel -BuildRequires: libIDL-devel BuildRequires: libjpeg-turbo-devel BuildRequires: libjpeg-devel BuildRequires: libX11-devel @@ -780,6 +779,7 @@ end %check appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.xml +desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %if 0%{?build_langpacks} %files -f %{name}.lang @@ -830,6 +830,9 @@ appstream-util validate-relax --nonet $RPM_BUILD_ROOT%{_metainfodir}/*.appdata.x %endif %changelog +* Wed Mar 11 2020 Antonio Trande - 68.6.0-2.rh2 +- Remove useless build dependency + * Tue Mar 10 2020 Antonio Trande - 68.6.0-1.rh2 - Mozilla release 68.6.0ESR From 28c6e64f8d5ed0a74773ea511a11c802bc91616b Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 21 Mar 2020 14:15:38 +0100 Subject: [PATCH 108/473] HTTPS-everywhere updated to the 2020.3.16 --- .gitignore | 1 + icecat.spec | 10 +++++++--- sources | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 6092c21..05a64d9 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,4 @@ /icecat-68.6.0-rh1.tar.bz2 /icecat-68.6.0-langpacks.tar.gz /icecat-68.6.0-rh2.tar.bz2 +/icecat-68.6.0-rh3.tar.bz2 diff --git a/icecat.spec b/icecat.spec index 2794fc3..9f4dc8c 100644 --- a/icecat.spec +++ b/icecat.spec @@ -80,7 +80,7 @@ ExcludeArch: %{arm} # Set new source-code build version # This tag indicates a new rebuild for Fedora -%global redhat_ver rh2 +%global redhat_ver rh3 # Set extra version tag # This tag comes from Mozilla's releases @@ -96,7 +96,7 @@ ExcludeArch: %{arm} Name: icecat Version: 68.6.0 -Release: 2%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 3%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -106,7 +106,7 @@ URL: http://www.gnu.org/software/gnuzilla/ ## Source archive created by scripts based on Gnuzilla files. ## Modified files are hosted in a dedicated fork repository: ## https://gitlab.com/anto.trande/icecat -Source0: https://sagitter.fedorapeople.org/%{name}/v%{version}/%{name}-%{version}-%{redhat_ver}.tar.bz2 +Source0: %{name}-%{version}-%{redhat_ver}.tar.bz2 Source2: %{name}.png Source3: %{name}-mozconfig-common @@ -830,6 +830,10 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog +* Sat Mar 21 2020 Antonio Trande - 68.6.0-3.rh3 +- Source code archive regenerated +- HTTPS-everywhere updated to the 2020.3.16 + * Wed Mar 11 2020 Antonio Trande - 68.6.0-2.rh2 - Remove useless build dependency diff --git a/sources b/sources index 1415722..2a984f8 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c SHA512 (icecat-68.6.0-langpacks.tar.gz) = acddb20eb433f56f8ec6a33c5b198dedc1736a1816260930f8f07dea8601bb2a6b15764b6a134934663ddd5c5c0dccca0201a6161c3853074a9e27b41fc2aa51 -SHA512 (icecat-68.6.0-rh2.tar.bz2) = 752ec3fd6e2bec0408d45a49555fcf1ffa540dbb34e85ac0d7837b9317bfeb4d714c485810ca0ae0f28957dcce2b810160b585511e66ba8d0d02262fdfc353c3 +SHA512 (icecat-68.6.0-rh3.tar.bz2) = 9c7517e3c37e11c035cab49ae40fb7517965060d9c9c6deeec3ce039cf1b91ebe49f9f02ddfc100d3ab3fabb887b8fc8d89c79f2a63c2a67cb7f7ef713fde33f SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 4a62320b8dab9dca06e2fb76f1fdc883db851a41 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 21 Mar 2020 14:44:00 +0100 Subject: [PATCH 109/473] Update icecat.rpmlintrc --- icecat.rpmlintrc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc index 4d7dde1..845802b 100644 --- a/icecat.rpmlintrc +++ b/icecat.rpmlintrc @@ -1,7 +1,7 @@ # Whitelisting errors # https://fedoraproject.org/wiki/Taskotron/Tasks/dist.rpmlint#whitelist # https://src.fedoraproject.org/rpms/python3/blob/master/f/python3.rpmlintrc -# Edited by sagitter (sagitter AT fedoraproject dot org) +# Edited by sagitter (sagitter@fedoraproject.org) # KNOWN BUGS: # @@ -15,10 +15,14 @@ addFilter(r'(%ifarch-applied-patch) Patch*') # Different file size due to the signature of the source code tarbz archive addFilter(r'file-size-mismatch') +addFilter(r'(invalid-url) Source0') addFilter(r'(invalid-url) Source4') addFilter(r'(invalid-url) Source5') addFilter(r'(invalid-url) Source17') +addFilter(r'(strange-permission) icecat-lang_download.sh') +addFilter(r'(strange-permission) node-stdout-nonblocking-wrapper') + # ERRORS: ##### RPMs ##### @@ -31,8 +35,10 @@ addFilter(r'(missing-call-to-setgroups-before-setuid) /usr/lib(64)?/icecat/libxu addFilter(r'(zero-length) /usr/lib(64)?/icecat/chrome.manifest') addFilter(r'(zero-length) /usr/lib(64)?/icecat/browser/chrome.manifest') -addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/gtk2/libmozgtk.so') -addFilter(r'E:library-not-linked-against-libc /usr/lib(64)?/icecat/libmozgtk.so') +addFilter(r'E:library-not-linked-against-libc /usr/lib64/icecat/gtk2/libmozgtk.so') +addFilter(r'E:library-not-linked-against-libc /usr/lib64/icecat/libmozgtk.so') +addFilter(r'E:library-not-linked-against-libc /usr/lib/icecat/gtk2/libmozgtk.so') +addFilter(r'E:library-not-linked-against-libc /usr/lib/icecat/libmozgtk.so') # False positive addFilter(r'(dangling-symlink) /usr/lib(64)?/icecat/dictionaries /usr/share/myspell') From dd11b19128b8207b70930cf4b314d3c8d0683cb1 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 21 Mar 2020 19:57:17 +0100 Subject: [PATCH 110/473] Other changes of icecat.rpmlintrc --- icecat.rpmlintrc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/icecat.rpmlintrc b/icecat.rpmlintrc index 845802b..562f383 100644 --- a/icecat.rpmlintrc +++ b/icecat.rpmlintrc @@ -27,8 +27,10 @@ addFilter(r'(strange-permission) node-stdout-nonblocking-wrapper') ##### RPMs ##### # chroot function (??) -addFilter(r'(missing-call-to-chdir-with-chroot) /usr/lib(64)?/icecat/libmozsandbox.so') -addFilter(r'(missing-call-to-setgroups-before-setuid) /usr/lib(64)?/icecat/libxul.so') +addFilter(r'(missing-call-to-chdir-with-chroot) /usr/lib64/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) /usr/lib64/icecat/libxul.so') +addFilter(r'(missing-call-to-chdir-with-chroot) /usr/lib/icecat/libmozsandbox.so') +addFilter(r'(missing-call-to-setgroups-before-setuid) /usr/lib/icecat/libxul.so') # Expected on FF browser # https://support.mozilla.org/en-US/questions/1045418 From 459bd130dbcc40d15dbd723418902c464915c7c3 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sun, 29 Mar 2020 12:49:59 +0200 Subject: [PATCH 111/473] =?UTF-8?q?Remove=20LibGen=20extension=20as=20infr?= =?UTF-8?q?inging=20the=20Mozilla=E2=80=99s=20Digital=20Millennium=20Copyr?= =?UTF-8?q?ight?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + icecat.spec | 7 +++++-- sources | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 05a64d9..fb420d0 100644 --- a/.gitignore +++ b/.gitignore @@ -107,3 +107,4 @@ /icecat-68.6.0-langpacks.tar.gz /icecat-68.6.0-rh2.tar.bz2 /icecat-68.6.0-rh3.tar.bz2 +/icecat-68.6.0-rh4.tar.bz2 diff --git a/icecat.spec b/icecat.spec index 9f4dc8c..ddd208f 100644 --- a/icecat.spec +++ b/icecat.spec @@ -80,7 +80,7 @@ ExcludeArch: %{arm} # Set new source-code build version # This tag indicates a new rebuild for Fedora -%global redhat_ver rh3 +%global redhat_ver rh4 # Set extra version tag # This tag comes from Mozilla's releases @@ -96,7 +96,7 @@ ExcludeArch: %{arm} Name: icecat Version: 68.6.0 -Release: 3%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 4%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -830,6 +830,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog +* Sun Mar 29 2020 Antonio Trande - 68.6.0-4.rh4 +- Remove libgen addon + * Sat Mar 21 2020 Antonio Trande - 68.6.0-3.rh3 - Source code archive regenerated - HTTPS-everywhere updated to the 2020.3.16 diff --git a/sources b/sources index 2a984f8..01b2d7f 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c SHA512 (icecat-68.6.0-langpacks.tar.gz) = acddb20eb433f56f8ec6a33c5b198dedc1736a1816260930f8f07dea8601bb2a6b15764b6a134934663ddd5c5c0dccca0201a6161c3853074a9e27b41fc2aa51 -SHA512 (icecat-68.6.0-rh3.tar.bz2) = 9c7517e3c37e11c035cab49ae40fb7517965060d9c9c6deeec3ce039cf1b91ebe49f9f02ddfc100d3ab3fabb887b8fc8d89c79f2a63c2a67cb7f7ef713fde33f +SHA512 (icecat-68.6.0-rh4.tar.bz2) = 2615042197fe8b9a1c74bc39d6d91511c94660143209644ab075021f559e7fe205dd35183d6449e35125bad87d109dc0c9d3c967fc285ad74ccca74adeee31f9 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c From 616d4c54954900c6f0f0b4df3dbc3ffa7dae1a78 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 7 Apr 2020 12:36:18 +0200 Subject: [PATCH 112/473] Mozilla release 68.7.0ESR --- .gitignore | 3 +++ build-cacheFlush-missing.patch | 13 ------------- build-jit-atomic-always-lucky.patch | 12 ------------ build-rust-ppc64le.patch | 25 ------------------------- icecat-lang_download.sh | 2 +- icecat.png | Bin 181551 -> 0 bytes icecat.spec | 17 ++++++----------- sources | 5 +++-- 8 files changed, 13 insertions(+), 64 deletions(-) delete mode 100644 build-cacheFlush-missing.patch delete mode 100644 build-jit-atomic-always-lucky.patch delete mode 100644 build-rust-ppc64le.patch delete mode 100644 icecat.png diff --git a/.gitignore b/.gitignore index fb420d0..7d16b5f 100644 --- a/.gitignore +++ b/.gitignore @@ -108,3 +108,6 @@ /icecat-68.6.0-rh2.tar.bz2 /icecat-68.6.0-rh3.tar.bz2 /icecat-68.6.0-rh4.tar.bz2 +/icecat-68.7.0-langpacks.tar.gz +/icecat-68.7.0-rh1.tar.bz2 +/icecat.png diff --git a/build-cacheFlush-missing.patch b/build-cacheFlush-missing.patch deleted file mode 100644 index 51c368c..0000000 --- a/build-cacheFlush-missing.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -up firefox-55.0.3/js/src/jit/ExecutableAllocator.h.wasm firefox-55.0.3/js/src/jit/ExecutableAllocator.h ---- firefox-55.0.3/js/src/jit/ExecutableAllocator.h.wasm 2017-09-05 11:32:12.235909468 +0200 -+++ firefox-55.0.3/js/src/jit/ExecutableAllocator.h 2017-09-05 11:32:46.157916575 +0200 -@@ -219,7 +219,7 @@ class ExecutableAllocator - - static void poisonCode(JSRuntime* rt, JitPoisonRangeVector& ranges); - --#if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64) || defined(JS_SIMULATOR_ARM64) -+#if defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64) || defined(JS_SIMULATOR_ARM64) || defined(JS_CODEGEN_NONE) - static void cacheFlush(void*, size_t) - { - } -diff -up firefox-55.0.3/js/src/jit-test/tests/wasm/bench/wasm_box2d.wasm firefox-55.0.3/js/src/jit-test/tests/wasm/bench/wasm_box2d diff --git a/build-jit-atomic-always-lucky.patch b/build-jit-atomic-always-lucky.patch deleted file mode 100644 index d693d0c..0000000 --- a/build-jit-atomic-always-lucky.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up firefox-68.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-60.5.0/js/src/jit/AtomicOperations.h ---- firefox-68.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2019-01-22 10:20:27.993697161 +0100 -+++ firefox-68.0.2/js/src/jit/AtomicOperations.h 2019-01-22 10:23:15.337873762 +0100 -@@ -394,7 +394,7 @@ - defined(__sh__) || defined(__s390__) || defined(__s390x__) - # include "jit/shared/AtomicOperations-feeling-lucky.h" - #else --# error "No AtomicOperations support provided for this platform" -+#include "jit/none/AtomicOperations-feeling-lucky.h" - #endif - - #endif // jit_AtomicOperations_h diff --git a/build-rust-ppc64le.patch b/build-rust-ppc64le.patch deleted file mode 100644 index 2474c35..0000000 --- a/build-rust-ppc64le.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff -up firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le firefox-55.0/build/moz.configure/rust.configure ---- firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le 2017-07-31 18:20:49.000000000 +0200 -+++ firefox-55.0/build/moz.configure/rust.configure 2017-08-02 10:19:03.254220003 +0200 -@@ -151,6 +151,9 @@ def rust_triple_alias(host_or_target): - ('sparc64', 'Linux'): 'sparc64-unknown-linux-gnu', - ('x86', 'Linux'): 'i686-unknown-linux-gnu', - ('x86_64', 'Linux'): 'x86_64-unknown-linux-gnu', -+ ('ppc64le', 'Linux'): 'powerpc64le-unknown-linux-gnu', -+ ('ppc64', 'Linux'): 'powerpc64-unknown-linux-gnu', -+ ('s390x', 'Linux'): 's390x-unknown-linux-gnu', - # OS X - ('x86', 'OSX'): 'i686-apple-darwin', - ('x86_64', 'OSX'): 'x86_64-apple-darwin', -@@ -174,8 +177,10 @@ def rust_triple_alias(host_or_target): - ('sparc64', 'SunOS'): 'sparcv9-sun-solaris', - }.get((host_or_target.cpu, os_or_kernel), None) - -+ if (rustc_target == 'powerpc64-unknown-linux-gnu' and host_or_target.endianness == 'little'): -+ rustc_target = 'powerpc64le-unknown-linux-gnu' - if rustc_target is None: -- die("Don't know how to translate {} for rustc".format(host_or_target.alias)) -+ die("Don't know how to translate {} for rustc, cpu: {}, os: {}".format(target.alias, target.cpu, os_or_kernel)) - - # Check to see whether our rustc has a reasonably functional stdlib - # for our chosen target. diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 324946f..6dcc9d1 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=68.6.0 +VERSION=68.7.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.png b/icecat.png deleted file mode 100644 index aac883edb30254d3193e50838f5d665cb225b8f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181551 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�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�Re&U!TSl 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 diff --git a/icecat.spec b/icecat.spec index ddd208f..9108ac1 100644 --- a/icecat.spec +++ b/icecat.spec @@ -80,7 +80,7 @@ ExcludeArch: %{arm} # Set new source-code build version # This tag indicates a new rebuild for Fedora -%global redhat_ver rh4 +%global redhat_ver rh1 # Set extra version tag # This tag comes from Mozilla's releases @@ -95,8 +95,8 @@ ExcludeArch: %{arm} %endif Name: icecat -Version: 68.6.0 -Release: 4%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Version: 68.7.0 +Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -144,7 +144,6 @@ Source18: node-stdout-nonblocking-wrapper Patch1: %{name}-fix_addon_installation.patch Patch2: %{name}-libevent_linkflag.patch Patch3: mozilla-build-arm.patch -Patch4: build-rust-ppc64le.patch Patch5: rhbz-1219542-s390-build.patch # Unrecognized file? @@ -155,13 +154,6 @@ Patch8: %{name}-fix_installer.patch Patch26: %{name}-68.4.0-build-icu-big-endian.patch -# Always feel lucky for unsupported platforms: -# https://bugzilla.mozilla.org/show_bug.cgi?id=1347128 -Patch37: build-jit-atomic-always-lucky.patch - -# Fixing missing cacheFlush when JS_CODEGEN_NONE is used (s390x) -Patch38: build-cacheFlush-missing.patch - Patch40: build-aarch64-skia.patch Patch41: build-disable-elfhack.patch Patch44: build-arm-libopus.patch @@ -830,6 +822,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog +* Tue Apr 07 2020 Antonio Trande - 68.7.0-1.rh1 +- Mozilla release 68.7.0ESR + * Sun Mar 29 2020 Antonio Trande - 68.6.0-4.rh4 - Remove libgen addon diff --git a/sources b/sources index 01b2d7f..c9d6412 100644 --- a/sources +++ b/sources @@ -1,4 +1,5 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c -SHA512 (icecat-68.6.0-langpacks.tar.gz) = acddb20eb433f56f8ec6a33c5b198dedc1736a1816260930f8f07dea8601bb2a6b15764b6a134934663ddd5c5c0dccca0201a6161c3853074a9e27b41fc2aa51 -SHA512 (icecat-68.6.0-rh4.tar.bz2) = 2615042197fe8b9a1c74bc39d6d91511c94660143209644ab075021f559e7fe205dd35183d6449e35125bad87d109dc0c9d3c967fc285ad74ccca74adeee31f9 +SHA512 (icecat-68.7.0-langpacks.tar.gz) = 93a9fa9aa6b22e8a151b80e19144c806aa5ce156f9179c808ec4b6a4156ca3e2306428f84efbd5ccf65cee4d3853625b6306c2b939e5a3dc002306c610e826ef +SHA512 (icecat-68.7.0-rh1.tar.bz2) = a9575170b4f4b44992f3cfdd0d15e762aae74a885905039296446b0efec00ad8798900a71a16f560d0d50e0c8669b9d40f2f65fd4c21ecd0e953c36b84611220 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c +SHA512 (icecat.png) = a3cec16cb15a27c3c91b53e2c534e78b07911011ff1331e450c0baf8e13b76da7cea2a90e5d75191fa88cfbfd40a0a7f3e553e92b64d0043dadd5ad5edfdf81c From b6a408142470849847d31ff505793c982e3cc52d Mon Sep 17 00:00:00 2001 From: sagitter Date: Mon, 4 May 2020 19:03:50 +0200 Subject: [PATCH 113/473] Mozilla release 68.8.0ESR --- .gitignore | 2 ++ icecat-lang_download.sh | 2 +- icecat.spec | 6 ++++-- sources | 4 ++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 7d16b5f..d6eb261 100644 --- a/.gitignore +++ b/.gitignore @@ -111,3 +111,5 @@ /icecat-68.7.0-langpacks.tar.gz /icecat-68.7.0-rh1.tar.bz2 /icecat.png +/icecat-68.8.0-langpacks.tar.gz +/icecat-68.8.0-rh1.tar.bz2 diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index 6dcc9d1..a1eced1 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=68.7.0 +VERSION=68.8.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.spec b/icecat.spec index 9108ac1..80fab44 100644 --- a/icecat.spec +++ b/icecat.spec @@ -95,7 +95,7 @@ ExcludeArch: %{arm} %endif Name: icecat -Version: 68.7.0 +Version: 68.8.0 Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser @@ -179,7 +179,6 @@ Patch425: mozilla-1568569.patch # Wayland specific upstream patches Patch565: firefox-pipewire.patch - Patch575: mozilla-1548475.patch Patch576: mozilla-1562827.patch Patch578: mozilla-1567434-1.patch @@ -822,6 +821,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog +* Mon May 04 2020 Antonio Trande - 68.8.0-1.rh1 +- Mozilla release 68.8.0ESR + * Tue Apr 07 2020 Antonio Trande - 68.7.0-1.rh1 - Mozilla release 68.7.0ESR diff --git a/sources b/sources index c9d6412..12b95e5 100644 --- a/sources +++ b/sources @@ -1,5 +1,5 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c -SHA512 (icecat-68.7.0-langpacks.tar.gz) = 93a9fa9aa6b22e8a151b80e19144c806aa5ce156f9179c808ec4b6a4156ca3e2306428f84efbd5ccf65cee4d3853625b6306c2b939e5a3dc002306c610e826ef -SHA512 (icecat-68.7.0-rh1.tar.bz2) = a9575170b4f4b44992f3cfdd0d15e762aae74a885905039296446b0efec00ad8798900a71a16f560d0d50e0c8669b9d40f2f65fd4c21ecd0e953c36b84611220 +SHA512 (icecat-68.8.0-langpacks.tar.gz) = fafce5b6cfe3ce9bc575bfea8e0b940360b87f16f9914d6e9b84ae907ed7cfa2df09980eca603fb40c5e9ee525b92b48e32b9b3fc4f4902ccaa35c21ab62a083 +SHA512 (icecat-68.8.0-rh1.tar.bz2) = f476f42425aa155de82544684f3d10555f4e791af6a918d56d97f967fb6b97ad82d062c70e66e1e9594b9348711831ff8326a8768d4d7410f21a88bc3cbaf4d3 SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c SHA512 (icecat.png) = a3cec16cb15a27c3c91b53e2c534e78b07911011ff1331e450c0baf8e13b76da7cea2a90e5d75191fa88cfbfd40a0a7f3e553e92b64d0043dadd5ad5edfdf81c From 193748f027244abfd858921d89e096ef9ef615d3 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 5 May 2020 12:08:28 +0200 Subject: [PATCH 114/473] Exclude s390x architecture --- icecat.spec | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/icecat.spec b/icecat.spec index 80fab44..6f4c73d 100644 --- a/icecat.spec +++ b/icecat.spec @@ -5,7 +5,8 @@ %global release_candidate 0 # Exclude ARM builds for rhbz #1658940 -ExcludeArch: %{arm} +# Exclude s390x for https://pagure.io/koji/issue/1974 +ExcludeArch: %{arm} s390x # Active/Deactive language files handling %global build_langpacks 1 @@ -821,8 +822,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog -* Mon May 04 2020 Antonio Trande - 68.8.0-1.rh1 +* Tue May 05 2020 Antonio Trande - 68.8.0-1.rh1 - Mozilla release 68.8.0ESR +- Exclude s390x architecture * Tue Apr 07 2020 Antonio Trande - 68.7.0-1.rh1 - Mozilla release 68.7.0ESR From a56fbdc2bad14bac58869d04715ce1aa14f24ed5 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 5 May 2020 12:15:48 +0200 Subject: [PATCH 115/473] Exclude aarch64 architecture on Fedora 32 (rhbz#1830472) --- icecat.spec | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/icecat.spec b/icecat.spec index 6f4c73d..297f898 100644 --- a/icecat.spec +++ b/icecat.spec @@ -8,6 +8,11 @@ # Exclude s390x for https://pagure.io/koji/issue/1974 ExcludeArch: %{arm} s390x +# rhbz #1830472 +%if 0%{?fedora} == 32 +ExcludeArch: aarch64 +%endif + # Active/Deactive language files handling %global build_langpacks 1 @@ -825,6 +830,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop * Tue May 05 2020 Antonio Trande - 68.8.0-1.rh1 - Mozilla release 68.8.0ESR - Exclude s390x architecture +- Exclude aarch64 architecture on Fedora 32 (rhbz#1830472) * Tue Apr 07 2020 Antonio Trande - 68.7.0-1.rh1 - Mozilla release 68.7.0ESR From 99f51d572487732547fe22b23f79a884920a6aa6 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Fri, 8 May 2020 09:13:13 +0100 Subject: [PATCH 116/473] Revert "Exclude aarch64 architecture on Fedora 32 (rhbz#1830472)" This reverts commit a56fbdc2bad14bac58869d04715ce1aa14f24ed5. The gcc should never have been pushed to stable and it's not a reason to disable an architecture in a package --- icecat.spec | 6 ------ 1 file changed, 6 deletions(-) diff --git a/icecat.spec b/icecat.spec index 297f898..6f4c73d 100644 --- a/icecat.spec +++ b/icecat.spec @@ -8,11 +8,6 @@ # Exclude s390x for https://pagure.io/koji/issue/1974 ExcludeArch: %{arm} s390x -# rhbz #1830472 -%if 0%{?fedora} == 32 -ExcludeArch: aarch64 -%endif - # Active/Deactive language files handling %global build_langpacks 1 @@ -830,7 +825,6 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop * Tue May 05 2020 Antonio Trande - 68.8.0-1.rh1 - Mozilla release 68.8.0ESR - Exclude s390x architecture -- Exclude aarch64 architecture on Fedora 32 (rhbz#1830472) * Tue Apr 07 2020 Antonio Trande - 68.7.0-1.rh1 - Mozilla release 68.7.0ESR From f8f92b1dfd2cc3a0f93064aaac6df081a8c8d921 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Fri, 8 May 2020 09:18:04 +0100 Subject: [PATCH 117/473] Don't exclude aarch64 architecture as it makes those users vulnerable --- icecat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 6f4c73d..08387b8 100644 --- a/icecat.spec +++ b/icecat.spec @@ -97,7 +97,7 @@ ExcludeArch: %{arm} s390x Name: icecat Version: 68.8.0 -Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 2%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -822,6 +822,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog +* Fri May 08 2020 Peter Robinson - 68.8.0-2.rh1 +- Don't exclude aarch64 architecture + * Tue May 05 2020 Antonio Trande - 68.8.0-1.rh1 - Mozilla release 68.8.0ESR - Exclude s390x architecture From c0a3953d72314ff2f65c128e96fa5e4cffc82aa6 Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 8 May 2020 11:05:17 +0200 Subject: [PATCH 118/473] Remove libgen references --- icecat.spec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/icecat.spec b/icecat.spec index 297f898..c7384d5 100644 --- a/icecat.spec +++ b/icecat.spec @@ -102,7 +102,7 @@ ExcludeArch: aarch64 Name: icecat Version: 68.8.0 -Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 2%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -306,9 +306,6 @@ Extensions included to this version of IceCat: GNU LibreJS aims to address the JavaScript problem described in the article "The JavaScript Trap" of Richard Stallman - * LibrifyJS: libgen.me - Libre replacement for JavaScript blocked by GNU LibreJS on libgen.me - * HTTPS Everywhere HTTPS Everywhere is an extension that encrypts your communications with many major websites, making your browsing more secure @@ -827,6 +824,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog +* Fri May 08 2020 Antonio Trande - 68.8.0-2.rh1 +- Remove libgen references + * Tue May 05 2020 Antonio Trande - 68.8.0-1.rh1 - Mozilla release 68.8.0ESR - Exclude s390x architecture From 34109fc0272f2990408c3f4de97eeb48847afe6d Mon Sep 17 00:00:00 2001 From: sagitter Date: Fri, 8 May 2020 11:12:39 +0200 Subject: [PATCH 119/473] Modify appdata file --- icecat.appdata.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/icecat.appdata.xml b/icecat.appdata.xml index e6d0036..7f93010 100644 --- a/icecat.appdata.xml +++ b/icecat.appdata.xml @@ -65,10 +65,6 @@ that the user has not explicitly requested. This implies not downloading feeds, updates, blacklists or any other similar data needed during startup.

  • -
  • - LibrifyJS - Libre replacement for JavaScript blocked by GNU LibreJS on libgen.me -
  • http://www.gnu.org/software/gnuzilla/ From bdc2eac9b4324fbfed0f7300ac868c1ab7945fe7 Mon Sep 17 00:00:00 2001 From: Pete Walter Date: Sat, 16 May 2020 08:13:20 +0100 Subject: [PATCH 120/473] Rebuild for ICU 67 --- icecat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index 4360e78..1f5802a 100644 --- a/icecat.spec +++ b/icecat.spec @@ -97,7 +97,7 @@ ExcludeArch: %{arm} s390x Name: icecat Version: 68.8.0 -Release: 3%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 4%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -819,6 +819,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog +* Sat May 16 2020 Pete Walter - 68.8.0-4.rh1 +- Rebuild for ICU 67 + * Fri May 08 2020 Antonio Trande - 68.8.0-3.rh1 - Remove libgen references From 8d64ce2bd80126447908ee50b08af6c7ffe5bfd2 Mon Sep 17 00:00:00 2001 From: sagitter Date: Sat, 16 May 2020 11:26:01 +0200 Subject: [PATCH 121/473] Unify last changes into same build release --- icecat.spec | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/icecat.spec b/icecat.spec index 1f5802a..ebad2b6 100644 --- a/icecat.spec +++ b/icecat.spec @@ -97,7 +97,7 @@ ExcludeArch: %{arm} s390x Name: icecat Version: 68.8.0 -Release: 4%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 3%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -819,10 +819,8 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog -* Sat May 16 2020 Pete Walter - 68.8.0-4.rh1 +* Sat May 16 2020 Pete Walter - 68.8.0-3.rh1 - Rebuild for ICU 67 - -* Fri May 08 2020 Antonio Trande - 68.8.0-3.rh1 - Remove libgen references * Fri May 08 2020 Peter Robinson - 68.8.0-2.rh1 From fe88e0f2bfa6ab7af6136b3012eca3722c654425 Mon Sep 17 00:00:00 2001 From: Pete Walter Date: Sat, 16 May 2020 18:11:13 +0100 Subject: [PATCH 122/473] Rebuild for ICU 67 --- icecat.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/icecat.spec b/icecat.spec index ebad2b6..37264a1 100644 --- a/icecat.spec +++ b/icecat.spec @@ -97,7 +97,7 @@ ExcludeArch: %{arm} s390x Name: icecat Version: 68.8.0 -Release: 3%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 4%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -819,6 +819,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog +* Sat May 16 2020 Pete Walter - 68.8.0-4.rh1 +- Rebuild for ICU 67 + * Sat May 16 2020 Pete Walter - 68.8.0-3.rh1 - Rebuild for ICU 67 - Remove libgen references From a3622eca8eacc3f07c1f94a10ddd4b9a0f77eb47 Mon Sep 17 00:00:00 2001 From: sagitter Date: Wed, 20 May 2020 19:19:06 +0200 Subject: [PATCH 123/473] Explicit perl-interpreter BR dependency --- icecat.spec | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/icecat.spec b/icecat.spec index 37264a1..6af9e97 100644 --- a/icecat.spec +++ b/icecat.spec @@ -65,9 +65,7 @@ ExcludeArch: %{arm} s390x %global libvpx_version 1.8.2 %endif -%if 0%{?fedora} > 30 %global wayland_backend_default 1 -%endif %global disable_elfhack 1 # Use mozilla hardening option? @@ -97,7 +95,7 @@ ExcludeArch: %{arm} s390x Name: icecat Version: 68.8.0 -Release: 4%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Release: 5%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -247,7 +245,7 @@ BuildRequires: openjpeg-devel BuildRequires: pango-devel BuildRequires: pipewire-devel BuildRequires: python2-devel -BuildRequires: pkgconfig(gconf-2.0) +BuildRequires: perl-interpreter BuildRequires: pkgconfig(xrender) BuildRequires: pkgconfig(libstartup-notification-1.0) BuildRequires: pkgconfig(dri) @@ -819,6 +817,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog +* Wed May 20 2020 Antonio Trande - 68.8.0-5.rh1 +- Explicit perl-interpreter BR dependency + * Sat May 16 2020 Pete Walter - 68.8.0-4.rh1 - Rebuild for ICU 67 From dde0ec2e79488ce01510d9123714a7d6bbd4c630 Mon Sep 17 00:00:00 2001 From: sagitter Date: Thu, 28 May 2020 17:37:15 +0200 Subject: [PATCH 124/473] Mozilla release candidate 68.9.0ESR build1 --- .gitignore | 1 + icecat.spec | 11 +++++++---- sources | 3 +-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index d6eb261..0da332d 100644 --- a/.gitignore +++ b/.gitignore @@ -113,3 +113,4 @@ /icecat.png /icecat-68.8.0-langpacks.tar.gz /icecat-68.8.0-rh1.tar.bz2 +/icecat-68.9.0-rh1.tar.bz2 diff --git a/icecat.spec b/icecat.spec index 6af9e97..7f09a1a 100644 --- a/icecat.spec +++ b/icecat.spec @@ -2,14 +2,14 @@ %global release_build 1 # Set to true if it's going to be submitted as release candidate -%global release_candidate 0 +%global release_candidate 1 # Exclude ARM builds for rhbz #1658940 # Exclude s390x for https://pagure.io/koji/issue/1974 ExcludeArch: %{arm} s390x # Active/Deactive language files handling -%global build_langpacks 1 +%global build_langpacks 0 %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html @@ -94,8 +94,8 @@ ExcludeArch: %{arm} s390x %endif Name: icecat -Version: 68.8.0 -Release: 5%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} +Version: 68.9.0 +Release: 0.1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist} Summary: GNU version of Firefox browser # Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included @@ -817,6 +817,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %endif %changelog +* Thu May 28 2020 Antonio Trande - 68.8.0-0.1.rc1.rh1 +- Mozilla release candidate 68.9.0ESR build1 + * Wed May 20 2020 Antonio Trande - 68.8.0-5.rh1 - Explicit perl-interpreter BR dependency diff --git a/sources b/sources index 12b95e5..f974a72 100644 --- a/sources +++ b/sources @@ -1,5 +1,4 @@ SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c -SHA512 (icecat-68.8.0-langpacks.tar.gz) = fafce5b6cfe3ce9bc575bfea8e0b940360b87f16f9914d6e9b84ae907ed7cfa2df09980eca603fb40c5e9ee525b92b48e32b9b3fc4f4902ccaa35c21ab62a083 -SHA512 (icecat-68.8.0-rh1.tar.bz2) = f476f42425aa155de82544684f3d10555f4e791af6a918d56d97f967fb6b97ad82d062c70e66e1e9594b9348711831ff8326a8768d4d7410f21a88bc3cbaf4d3 +SHA512 (icecat-68.9.0-rh1.tar.bz2) = 07e962f022b31d18d305b1d5372eeb1843576d08b6ffcb54421730c7aad2e548e6d3a725fd152bdaa25c1680af1dd1bceee6722acd9e3c7b2671456d14357bac SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c SHA512 (icecat.png) = a3cec16cb15a27c3c91b53e2c534e78b07911011ff1331e450c0baf8e13b76da7cea2a90e5d75191fa88cfbfd40a0a7f3e553e92b64d0043dadd5ad5edfdf81c From e6acac314e1a0a07287f686b4083e438802d13c6 Mon Sep 17 00:00:00 2001 From: sagitter Date: Tue, 2 Jun 2020 12:50:46 +0200 Subject: [PATCH 125/473] Release 68.9.0-rh2 --- .gitignore | 1 + icecat-lang_download.sh | 2 +- icecat.appdata.xml | 15 --------------- icecat.spec | 16 +++++++--------- sources | 2 +- 5 files changed, 10 insertions(+), 26 deletions(-) diff --git a/.gitignore b/.gitignore index 0da332d..daf1e40 100644 --- a/.gitignore +++ b/.gitignore @@ -114,3 +114,4 @@ /icecat-68.8.0-langpacks.tar.gz /icecat-68.8.0-rh1.tar.bz2 /icecat-68.9.0-rh1.tar.bz2 +/icecat-68.9.0-rh2.tar.bz2 diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh index a1eced1..98e58f8 100755 --- a/icecat-lang_download.sh +++ b/icecat-lang_download.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=68.8.0 +VERSION=68.9.0 URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_64/xpi/ for u in $URL; do diff --git a/icecat.appdata.xml b/icecat.appdata.xml index 7f93010..49f4021 100644 --- a/icecat.appdata.xml +++ b/icecat.appdata.xml @@ -23,27 +23,12 @@ Extensions included to this version of IceCat: