diff --git a/testing/firefox/README b/testing/firefox/README new file mode 100644 index 00000000..70214c4d --- /dev/null +++ b/testing/firefox/README @@ -0,0 +1,123 @@ +firefox +________________________________________________________________________________ + +Mozilla Firefox or simply Firefox, is a free and open-source web browser +developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +Firefox uses the Gecko rendering engine to display web pages. [0] + +Upstream: https://www.mozilla.org/firefox + + +[000] Index +________________________________________________________________________________ + +* Installation ........................................................... [001] + * Runtime Dependencies ................................................. [002] + * Privacy Package ...................................................... [003] +* Setup .................................................................. [004] + * Enable VAAPI Acceleration ............................................ [005] +* Usage .................................................................. [006] +* References ............................................................. [007] + + +[001] Installation +________________________________________________________________________________ + ++------------------------------------------------------------------------------+ +| | +| $ kiss b firefox | +| | ++------------------------------------------------------------------------------+ + + +--[002] Runtime Dependencies --------------------------------------------------- + + Firefox needs a few additional things to be fully functional. One is an icon + theme and the other is a font. If you have already installed the fonts and + icon theme of your choosing, this step can be skipped. + + +----------------------------------------------------------------------------+ + | | + | $ kiss b [hicolor-icon-theme|adwaita-icon-theme] | + | $ kiss b ttf-croscore | + | | + +----------------------------------------------------------------------------+ + + +--[003] Privacy Package -------------------------------------------------------- + + Provided is also an optional privacy package which makes Firefox perform zero + unsolicited network requests. More information can be found in the + documentation (@/firefox-privacy) Expect some website breakage when using this + privacy package YMMV. + + +----------------------------------------------------------------------------+ + | | + | $ kiss b firefox-privacy | + | | + +----------------------------------------------------------------------------+ + + +[004] Setup +________________________________________________________________________________ + +As of Firefox 91. There is no need to set special environment variables to +enable Wayland support (in a Wayland only environment like ours). The browser +should start with no further configuration. + + +--[005] Enable VAAPI Acceleration ---------------------------------------------- + +As of Firefox 102, only the following modification to about:config should be +required, with no need to disable any sandbox features. + ++------------------------------------------------------------------------------+ +| | +| about:config | +| | +| media.ffmpeg.vaapi.enabled=true | +| | ++------------------------------------------------------------------------------+ + +If using AMDGPU, the following kernel option must be enabled. [1] + ++------------------------------------------------------------------------------+ +| | +| .config | +| | +| CONFIG_CHECKPOINT_RESTORE=y | +| | ++------------------------------------------------------------------------------+ + +You may also need to set the following environment variable. + ++------------------------------------------------------------------------------+ +| | +| .profile | +| | +| export MOZ_WAYLAND_DRM_DEVICE=/dev/dri/renderD128 | +| | ++------------------------------------------------------------------------------+ + +To verify that VAAPI is working, launch Firefox with the following argument and +attempt to watch a video. Pay attention for errors in the output. + ++------------------------------------------------------------------------------+ +| | +| $ firefox --MOZ_LOG=PlatformDecoderModule:4 | +| | ++------------------------------------------------------------------------------+ + + +[006] Usage +________________________________________________________________________________ + +Refer to the browser's help output and online documentation for further +information. + + +[007] References +________________________________________________________________________________ + +[0] https://en.wikipedia.org/wiki/Firefox + diff --git a/testing/firefox/build b/testing/firefox/build new file mode 100755 index 00000000..923981a6 --- /dev/null +++ b/testing/firefox/build @@ -0,0 +1,114 @@ +#!/bin/sh -e + +for p in *.patch; do + patch -p1 < "$p" +done + +# Build yasm for Firefox's sole use. Firefox is the only package which needs it +# and upstream is kinda dead. +( + cd yasm + + ./configure \ + --prefix=/ + + make + make DESTDIR="$PWD/../junk" install +) + +# Build zip/unzip for Firefox's sole use. +for f in zip unzip; do ( + cd "$f" + + make \ + CC="$CC $CFLAGS $CXXFLAGS" \ + -f unix/Makefile generic + + make \ + prefix="$PWD/../junk" \ + -f unix/Makefile install +) done + +export PATH="$PWD/junk/bin:$PATH" + +for p in \ + audioipc \ + audioipc-client \ + audioipc-server +do + sed 's/\("files":{\)[^}]*/\1/' \ + "third_party/rust/$p/.cargo-checksum.json" > _ + mv -f _ "third_party/rust/$p/.cargo-checksum.json" +done + +# If using libc++, CXXSTDLIB needs to be set manually. +case $("$CC" -print-file-name=libc++.so) in */*) + export CXXSTDLIB=c++ +esac + +export CFLAGS="$CFLAGS -w" +export CXXFLAGS="$CXXFLAGS -w" + +# Instruct the compiler to trim absolute paths in resulting binaries and instead +# change them to relative paths ($PWD/... ./...). +export RUSTFLAGS="$RUSTFLAGS --remap-path-prefix=$PWD=." + +export LDFLAGS="$LDFLAGS -Wl,-rpath=/usr/lib/firefox,--enable-new-dtags" +export RUSTFLAGS="$RUSTFLAGS -Cdebuginfo=0" +export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system +export MOZ_DEBUG_FLAGS=-g0 +export MOZBUILD_STATE_PATH="$PWD/state" +export MOZ_NOSPAM=1 + +cat > .mozconfig << EOF +ac_add_options --prefix=/usr +ac_add_options --libdir=/usr/lib +ac_add_options --enable-default-toolkit=cairo-gtk3-wayland-only +ac_add_options --enable-strip +ac_add_options --enable-release +ac_add_options --enable-rust-simd +ac_add_options --enable-audio-backends=alsa +ac_add_options --enable-install-strip +ac_add_options --enable-official-branding +ac_add_options --enable-application=browser +ac_add_options --enable-optimize +ac_add_options --with-system-libvpx +ac_add_options --with-system-ffi +ac_add_options --with-system-png +ac_add_options --with-system-jpeg +ac_add_options --with-system-zlib +ac_add_options --with-system-pixman +ac_add_options --without-system-nss +ac_add_options --without-system-nspr +ac_add_options --without-wasm-sandboxed-libraries +ac_add_options --disable-eme +ac_add_options --disable-dbus +ac_add_options --disable-tests +ac_add_options --disable-vtune +ac_add_options --disable-updater +ac_add_options --disable-jemalloc +ac_add_options --disable-elf-hack +ac_add_options --disable-callgrind +ac_add_options --disable-profiling +ac_add_options --disable-necko-wifi +ac_add_options --disable-crashreporter +ac_add_options --disable-accessibility +ac_add_options --disable-debug +ac_add_options --disable-debug-symbols +ac_add_options --disable-parental-controls +ac_add_options --disable-system-extension-dirs +EOF + +./mach build +./mach install + +# Remove a lot of uneeded "stuff". +rm -rf \ + "$1/usr/include" \ + "$1/usr/lib/firefox-devel" \ + "$1/usr/share/idl" \ + "$1/usr/lib/firefox/browser/features/fxmonitor@mozilla.org.xpi" \ + "$1/usr/lib/firefox/browser/features/screenshots@mozilla.org.xpi" \ + "$1/usr/lib/firefox/browser/features/webcompat-reporter@mozilla.org.xpi" \ + "$1/usr/lib/firefox/browser/features/webcompat@mozilla.org.xpi" \ + "$1/usr/lib/firefox/browser/features/doh-rollout@mozilla.org.xpi" diff --git a/testing/firefox/checksums b/testing/firefox/checksums new file mode 100644 index 00000000..0d7c67fb --- /dev/null +++ b/testing/firefox/checksums @@ -0,0 +1,8 @@ +4d0132babf56ef3709e31c17d41b62b3bb52df38d13eaa2fe37acd66f09db310 +3dce6601b495f5b3d45b59f7d2492a340ee7e84b5beca17e48f862502bd5603f +f0e8bb1f9b7eb0b01285495a2699df3a4b766784c1765a8f1aeedf63c0806369 +036d96991646d0449ed0aa952e4fbe21b476ce994abc276e49d30e686708bd37 +ba6e380bc3d2cbd1b3a505ab97687498335c334d8a4be7f465ad30ee366806c7 +86ce49e650dd117f0f2928a7f810a58df526b1087c274d35eeb9c5bbf09eac5b +bed3f4e39dcb8065dba174d37fb15f2a75887a6dd7ce6b872e5ab287c8bc386f +4a232e3aa3973894a58c126b9e901c924d4e1ca3e00c4fc82d08de4b880183a9 diff --git a/testing/firefox/depends b/testing/firefox/depends new file mode 100644 index 00000000..c7d777fc --- /dev/null +++ b/testing/firefox/depends @@ -0,0 +1,31 @@ +alsa-lib +bzip2 +cairo +cbindgen make +clang make +expat +ffmpeg +fontconfig +freetype-harfbuzz +gdk-pixbuf +glib +gtk+3 +libdrm +libffi +libjpeg-turbo +libpng +libvpx +llvm make +m4 make +mesa +nasm make +nodejs make +pango +perl make +pixman +pkgconf make +python make +rust make +wayland +wayland-protocols make +zlib diff --git a/testing/firefox/patches/fix-clang-as.patch b/testing/firefox/patches/fix-clang-as.patch new file mode 100644 index 00000000..125487d2 --- /dev/null +++ b/testing/firefox/patches/fix-clang-as.patch @@ -0,0 +1,48 @@ +diff --git a/security/nss/lib/freebl/Makefile b/security/nss/lib/freebl/Makefile +--- a/security/nss/lib/freebl/Makefile ++++ b/security/nss/lib/freebl/Makefile +@@ -753,7 +753,6 @@ $(OBJDIR)/$(PROG_PREFIX)intel-gcm-wrap$(OBJ_SUFFIX): CFLAGS += -mssse3 + # .set Htbl, %rdi + # So we can't use Clang's integrated assembler with intel-gcm.s. + ifdef CC_IS_CLANG +-$(OBJDIR)/$(PROG_PREFIX)intel-gcm$(OBJ_SUFFIX): CFLAGS += -no-integrated-as + endif + endif + +diff --git a/security/nss/lib/freebl/freebl.gyp b/security/nss/lib/freebl/freebl.gyp +--- a/security/nss/lib/freebl/freebl.gyp ++++ b/security/nss/lib/freebl/freebl.gyp +@@ -19,13 +19,10 @@ + 'conditions': [ + [ 'cc_is_clang==1 and force_integrated_as!=1', { + 'cflags': [ +- '-no-integrated-as', + ], + 'cflags_mozilla': [ +- '-no-integrated-as', + ], + 'asflags_mozilla': [ +- '-no-integrated-as', + ], + }], + ], +diff --git a/security/nss/lib/freebl/freebl_base.gypi b/security/nss/lib/freebl/freebl_base.gypi +--- a/security/nss/lib/freebl/freebl_base.gypi ++++ b/security/nss/lib/freebl/freebl_base.gypi +@@ -74,13 +74,10 @@ + 'conditions': [ + [ 'cc_is_clang==1 and fuzz!=1 and coverage!=1 and force_integrated_as!=1', { + 'cflags': [ +- '-no-integrated-as', + ], + 'cflags_mozilla': [ +- '-no-integrated-as', + ], + 'asflags_mozilla': [ +- '-no-integrated-as', + ], + }], + ], +-- +2.35.1 + diff --git a/testing/firefox/patches/fix-linux-header.patch b/testing/firefox/patches/fix-linux-header.patch new file mode 100644 index 00000000..9f7fc51a --- /dev/null +++ b/testing/firefox/patches/fix-linux-header.patch @@ -0,0 +1,12 @@ +diff --git a/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs-netlink.c b/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs-netlink.c +index 73e85c6ccc..9eca548638 100644 +--- a/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs-netlink.c ++++ b/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs-netlink.c +@@ -31,6 +31,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + #if defined(LINUX) ++#include + #include "addrs-netlink.h" + #include + #include diff --git a/testing/firefox/patches/no-dbus.patch b/testing/firefox/patches/no-dbus.patch new file mode 100644 index 00000000..c0e6a41f --- /dev/null +++ b/testing/firefox/patches/no-dbus.patch @@ -0,0 +1,86 @@ +diff -r fc5ee47dac3e third_party/rust/audioipc-client/Cargo.toml +--- a/third_party/rust/audioipc-client/Cargo.toml Tue Jun 28 12:00:27 2022 -0500 ++++ b/third_party/rust/audioipc-client/Cargo.toml Thu Jun 30 00:35:24 2022 -0500 +@@ -19,3 +19,5 @@ + + [dependencies.audio_thread_priority] + version = "0.26.1" ++default_features = false ++features = ["winapi"] +diff -r fc5ee47dac3e third_party/rust/audioipc-server/Cargo.toml +--- a/third_party/rust/audioipc-server/Cargo.toml Tue Jun 28 12:00:27 2022 -0500 ++++ b/third_party/rust/audioipc-server/Cargo.toml Thu Jun 30 00:35:24 2022 -0500 +@@ -24,3 +24,5 @@ + + [dependencies.audio_thread_priority] + version = "0.26.1" ++default_features = false ++features = ["winapi"] +diff -r fc5ee47dac3e third_party/rust/audioipc/Cargo.toml +--- a/third_party/rust/audioipc/Cargo.toml Tue Jun 28 12:00:27 2022 -0500 ++++ b/third_party/rust/audioipc/Cargo.toml Thu Jun 30 00:35:24 2022 -0500 +@@ -30,6 +30,8 @@ + + [target.'cfg(target_os = "linux")'.dependencies.audio_thread_priority] + version = "0.26.1" ++default_features = false ++features = ["winapi"] + + [target.'cfg(windows)'.dependencies] + mio = "0.6.19" +diff -r fc5ee47dac3e toolkit/components/remote/moz.build +--- a/toolkit/components/remote/moz.build Tue Jun 28 12:00:27 2022 -0500 ++++ b/toolkit/components/remote/moz.build Thu Jun 30 00:35:24 2022 -0500 +@@ -26,7 +26,7 @@ + "nsUnixRemoteServer.h", + "RemoteUtils.h", + ] +- else: ++ elif CONFIG["MOZ_X11"]: + SOURCES += [ + "nsGTKRemoteServer.cpp", + "nsXRemoteClient.cpp", +diff -r fc5ee47dac3e toolkit/components/remote/nsRemoteService.cpp +--- a/toolkit/components/remote/nsRemoteService.cpp Tue Jun 28 12:00:27 2022 -0500 ++++ b/toolkit/components/remote/nsRemoteService.cpp Thu Jun 30 00:35:24 2022 -0500 +@@ -6,12 +6,14 @@ + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + #ifdef MOZ_WIDGET_GTK +-# ifdef MOZ_ENABLE_DBUS ++# if defined(MOZ_ENABLE_DBUS) + # include "nsDBusRemoteServer.h" + # include "nsDBusRemoteClient.h" +-# else ++# elif defined(MOZ_X11) + # include "nsGTKRemoteServer.h" + # include "nsXRemoteClient.h" ++# else ++# include "nsRemoteClient.h" + # endif + #elif defined(XP_WIN) + # include "nsWinRemoteServer.h" +@@ -94,8 +96,10 @@ + #ifdef MOZ_WIDGET_GTK + # if defined(MOZ_ENABLE_DBUS) + client = MakeUnique(); ++# elif defined(MOZ_X11) ++ client = MakeUnique(); + # else +- client = MakeUnique(); ++ return REMOTE_NOT_FOUND; + # endif + #elif defined(XP_WIN) + client = MakeUnique(); +@@ -138,8 +142,10 @@ + #ifdef MOZ_WIDGET_GTK + # if defined(MOZ_ENABLE_DBUS) + mRemoteServer = MakeUnique(); ++# elif defined(MOZ_X11) ++ mRemoteServer = MakeUnique(); + # else +- mRemoteServer = MakeUnique(); ++ return; + # endif + #elif defined(XP_WIN) + mRemoteServer = MakeUnique(); diff --git a/testing/firefox/patches/no-fribidi.patch b/testing/firefox/patches/no-fribidi.patch new file mode 100644 index 00000000..89b4468a --- /dev/null +++ b/testing/firefox/patches/no-fribidi.patch @@ -0,0 +1,12 @@ +diff --git a/config/system-headers.mozbuild b/config/system-headers.mozbuild +index a1b58eb59b..d35da57db3 100644 +--- a/config/system-headers.mozbuild ++++ b/config/system-headers.mozbuild +@@ -267,7 +267,6 @@ system_headers = [ + 'freetype/t1tables.h', + 'freetype/ttnameid.h', + 'freetype/tttables.h', +- 'fribidi/fribidi.h', + 'FSp_fopen.h', + 'fstream', + 'fstream.h', diff --git a/testing/firefox/post-install b/testing/firefox/post-install new file mode 100755 index 00000000..2f40c517 --- /dev/null +++ b/testing/firefox/post-install @@ -0,0 +1,12 @@ +#!/bin/sh + +cat <