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..362f91a6 --- /dev/null +++ b/testing/firefox/build @@ -0,0 +1,76 @@ +#!/bin/sh -e + +for p in *.patch; do + patch -p1 < "$p" +done + +sed '/UNZIP/d' toolkit/moz.configure > _ +mv -f _ toolkit/moz.configure + +# 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-ffi +ac_add_options --with-system-jpeg +ac_add_options --with-system-libvpx +ac_add_options --with-system-nspr +ac_add_options --with-system-nss +ac_add_options --with-system-pixman +ac_add_options --with-system-png +ac_add_options --with-system-webp +ac_add_options --with-system-zlib +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" diff --git a/testing/firefox/checksums b/testing/firefox/checksums new file mode 100644 index 00000000..62830b32 --- /dev/null +++ b/testing/firefox/checksums @@ -0,0 +1,6 @@ +9b0ea4bc15b08225c9ee0a744b844d0ec5586fe36db32a5c56e3fcecdf6b1121 +ba6e380bc3d2cbd1b3a505ab97687498335c334d8a4be7f465ad30ee366806c7 +86ce49e650dd117f0f2928a7f810a58df526b1087c274d35eeb9c5bbf09eac5b +42d489e60eae7d2807ef109a4eb1dd3d0e52e8ea9a8a19074495453e588f0625 +4a232e3aa3973894a58c126b9e901c924d4e1ca3e00c4fc82d08de4b880183a9 +ed51ce8a6730c489ea9dda354f02c579fb3632925096a0260bfae7a6b82ceace diff --git a/testing/firefox/depends b/testing/firefox/depends new file mode 100644 index 00000000..fbbaacd4 --- /dev/null +++ b/testing/firefox/depends @@ -0,0 +1,33 @@ +alsa-lib +bzip2 +cairo +cbindgen make +clang make +expat +ffmpeg +fontconfig +freetype-harfbuzz +gdk-pixbuf +glib +gtk+3 +libdrm +libffi +libjpeg-turbo +libpng +libvpx +libwebp +llvm make +m4 make +mesa +nasm make +nodejs make +nspr +nss +pango +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..18f547d5 --- /dev/null +++ b/testing/firefox/patches/no-dbus.patch @@ -0,0 +1,56 @@ +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/patches/no-perl.patch b/testing/firefox/patches/no-perl.patch new file mode 100644 index 00000000..bcde015a --- /dev/null +++ b/testing/firefox/patches/no-perl.patch @@ -0,0 +1,65 @@ +diff --git a/moz.configure b/moz.configure +index 95763e2..dc0ed30 100755 +--- a/moz.configure ++++ b/moz.configure +@@ -527,60 +527,6 @@ def awk_for_old_configure(value): + + add_old_configure_assignment("AWK", awk_for_old_configure) + +- +-# Perl detection +-# ============================================================== +-perl = check_prog("PERL", ("perl5", "perl")) +- +-# Until the PERL variable is not necessary in old-configure +- +- +-@depends(perl) +-def perl_for_old_configure(value): +- return value +- +- +-add_old_configure_assignment("PERL", perl_for_old_configure) +- +- +-@template +-def perl_version_check(min_version): +- @depends(perl) +- @checking("for minimum required perl version >= %s" % min_version) +- def get_perl_version(perl): +- return Version( +- check_cmd_output( +- perl, +- "-e", +- "print $]", +- onerror=lambda: die("Failed to get perl version."), +- ) +- ) +- +- @depends(get_perl_version) +- def check_perl_version(version): +- if version < min_version: +- die("Perl %s or higher is required.", min_version) +- +- @depends(perl) +- @checking("for full perl installation") +- @imports("subprocess") +- def has_full_perl_installation(perl): +- ret = subprocess.call([perl, "-e", "use Config; exit(!-d $Config{archlib})"]) +- return ret == 0 +- +- @depends(has_full_perl_installation) +- def require_full_perl_installation(has_full_perl_installation): +- if not has_full_perl_installation: +- die( +- "Cannot find Config.pm or $Config{archlib}. " +- "A full perl installation is required." +- ) +- +- +-perl_version_check("5.006") +- +- + # GNU make detection + # ============================================================== + option(env="MAKE", nargs=1, help="Path to GNU make") diff --git a/testing/firefox/post-install b/testing/firefox/post-install new file mode 100755 index 00000000..f4d91a7e --- /dev/null +++ b/testing/firefox/post-install @@ -0,0 +1,12 @@ +#!/bin/sh + +cat <