# Produce a build suitable for release, i.e. use PGO/LTO. You can turn it off # when building locally to reduce build time. %global release_build 1 # Excluded due to https://bugzilla.mozilla.org/show_bug.cgi?id=1792159 # https://bugzilla.redhat.com/show_bug.cgi?id=2129720 ExcludeArch: i686 # Run Mozilla test suite as a part of compile rpm section. Turn off when # building locally and don't want to spend 24 hours waiting for results. %global run_firefox_tests 0 %ifarch x86_64 %{ix86} %global run_firefox_tests 0 %endif # Don't create debuginfo rpm packages. It reduces build time as # exctracting debuginfo takes long time. %global create_debuginfo 1 # Produce debug (non-optimized) package build. Suitable for debugging only # as the build is *very* slow. %global debug_build 0 # See rhbz#2134527 - Use portal Gtk file dialog # Disabled due to various issues now. %global use_xdg_file_portal 0 # PipeWire camera is needed for IPU6 camera support in Fedora 41+ # https://fedoraproject.org/wiki/Changes/IPU6_Camera_support %if 0%{?fedora} >= 41 %global use_pipewire_camera 1 %else %global use_pipewire_camera 0 %endif %global system_nss 1 %global system_libevent 1 %global build_with_asan 0 %ifarch x86_64 %{ix86} %global enable_replace_malloc 1 %else %global enable_replace_malloc 0 %endif # wasi_sdk 25 is not compatible with llvm 18 %if 0%{?fedora} <= 40 %bcond wasi_sdk 0 %else %bcond wasi_sdk 1 %endif %bcond build_with_clang 0 %if %{with build_with_clang} %global toolchain clang %else %global toolchain gcc %endif %global gnome_shell_search_provider 0 %if 0%{?fedora} >= 40 %global gnome_shell_search_provider 1 %endif # Temporary disabled due to # https://bugzilla.redhat.com/show_bug.cgi?id=1951606 %global enable_mozilla_crashreporter 0 %ifarch x86_64 %{ix86} %global enable_mozilla_crashreporter 1 %endif %if %{build_with_asan} %global enable_mozilla_crashreporter 0 %endif %if 0%{?flatpak} %global enable_mozilla_crashreporter 0 %endif %if !%{create_debuginfo} %define _unpackaged_files_terminate_build 0 %global debug_package %{nil} %global enable_mozilla_crashreporter 0 %endif %global system_ffi 1 %global system_av1 0 %global system_libvpx 1 %global system_jpeg 1 %global system_pixman 1 %global system_webp 1 # Bundled cbindgen makes build slow. # Enable only if system cbindgen is not available. %if 0%{?rhel} %global use_bundled_cbindgen 1 %else %global use_bundled_cbindgen 1 %endif %if %{debug_build} %global release_build 0 %endif # Build PGO+LTO on x86_64 only due to build issues # on other arches. %global build_with_pgo 0 %ifarch x86_64 %if %{release_build} %global build_with_pgo 1 %endif %endif %if 0%{?flatpak} %global build_with_pgo 0 %endif # Big endian platforms %ifarch s390x %global big_endian 1 %endif %if 0%{?build_with_pgo} %global use_xvfb 1 %global build_tests 1 %endif %if 0%{?run_firefox_tests} %global use_xvfb 1 %global build_tests 1 %endif %global launch_wayland_compositor 0 %if %{build_with_pgo} %global launch_wayland_compositor 1 %endif %if %{run_firefox_tests} %global launch_wayland_compositor 1 %endif %global default_bookmarks_file %{_datadir}/bookmarks/default-bookmarks.html %global firefox_app_id \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\} # Minimal required versions %global cairo_version 1.13.1 %global freetype_version 2.1.9 %global libnotify_version 0.7.0 %if %{?system_av1} %global aom_version 1.0.0 %global dav1d_version 1.0.0 %endif %if %{?system_libvpx} %global libvpx_version 1.10.0 %endif %if %{?system_webp} %global libwebp_version 1.1.0 %endif %if %{?system_nss} %global nspr_version 4.32 %global nspr_build_version %{nspr_version} %global nss_version 3.106 %global nss_build_version %{nss_version} %endif %global mozappdir %{_libdir}/firefox %global mozappdirdev %{_libdir}/firefox-devel-%{version} %global langpackdir %{mozappdir}/langpacks %global tarballdir firefox-%{version} %global official_branding 1 %bcond_without langpacks %if %{with langpacks} %bcond_without langpacks_subpkg %endif %if !%{release_build} %global pre_tag .npgo %endif %if %{with build_with_clang} %global pre_tag .clang %endif %if %{build_with_asan} %global pre_tag .asan %global build_with_pgo 0 %endif %if !%{system_nss} %global nss_tag .nss %endif %if %{debug_build} %global pre_tag .debug %endif # Exclude private libraries from autogenerated provides and requires %global __provides_exclude_from ^%{mozappdir} %global __requires_exclude ^(%%(find %{buildroot}%{mozappdir} -name '*.so' | xargs -n1 basename | sort -u | paste -s -d '|' -)) %undefine _package_note_flags # for https://bugzilla.redhat.com/show_bug.cgi?id=2184553 %global _package_note_status 0 Summary: Mozilla Firefox Web browser Name: firefox Version: 138.0 Release: 1%{?pre_tag}%{?dist} URL: https://www.mozilla.org/firefox/ # Automatically converted from old format: MPLv1.1 or GPLv2+ or LGPLv2+ - review is highly recommended. License: LicenseRef-Callaway-MPLv1.1 OR GPL-2.0-or-later OR LicenseRef-Callaway-LGPLv2+ Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz %if %{with langpacks} Source1: firefox-langpacks-%{version}%{?pre_version}-20250422.tar.xz %endif Source2: cbindgen-vendor.tar.xz Source3: dump_syms-vendor.tar.xz Source4: wasm-component-ld-vendor.tar.xz Source10: firefox-mozconfig Source12: firefox-redhat-default-prefs.js Source20: firefox.desktop Source21: firefox.sh.in Source23: firefox.1 Source24: mozilla-api-key Source25: firefox-symbolic.svg Source26: distribution.ini.in Source27: google-api-key Source28: firefox-wayland.sh.in Source29: firefox-wayland.desktop Source30: firefox-x11.sh.in Source31: firefox-x11.desktop Source32: node-stdout-nonblocking-wrapper Source33: firefox.appdata.xml.in Source34: org.mozilla.firefox.search-provider.ini Source35: google-loc-api-key Source37: mochitest-python.tar.gz Source38: print_results Source39: print-errors Source40: run-tests-x11 Source41: run-tests-wayland Source42: psummary Source43: print_failures Source44: print-error-reftest Source45: run-wayland-compositor Source46: org.mozilla.firefox.SearchProvider.service Source47: org.mozilla.firefox.desktop Source48: org.mozilla.firefox.appdata.xml.in Source49: wasi.patch.template # Created by: # git clone --recursive https://github.com/WebAssembly/wasi-sdk.git # cd wasi-sdk && git-archive-all --force-submodules wasi-sdk-25.tar.gz Source50: wasi-sdk-25.tar.gz # Build patches Patch32: build-rust-ppc64le.patch Patch35: build-ppc-jit.patch # Fixing missing cacheFlush when JS_CODEGEN_NONE is used (s390x) Patch38: build-cacheFlush-missing.patch Patch40: build-aarch64-skia.patch Patch44: build-arm-libopus.patch Patch46: firefox-nss-version.patch Patch53: firefox-gcc-build.patch Patch55: firefox-testing.patch Patch61: firefox-glibc-dynstack.patch Patch71: 0001-GLIBCXX-fix-for-GCC-12.patch Patch78: firefox-i686-build.patch Patch79: firefox-gcc-13-build.patch Patch80: wasi.patch Patch81: firefox-gcc-15.0-s390.patch # Test patches # Generate without context by # GENDIFF_DIFF_ARGS=-U0 gendiff firefox-xxxx .firefox-tests-xpcshell # GENDIFF_DIFF_ARGS=-U0 gendiff firefox-xxxx .firefox-tests-reftest Patch100: firefox-tests-xpcshell.patch Patch101: firefox-tests-reftest.patch Patch102: firefox-tests-xpcshell-freeze.patch # Fedora specific patches Patch215: firefox-enable-addons.patch Patch219: rhbz-1173156.patch #ARM run-time patch Patch226: rhbz-1354671.patch Patch228: disable-openh264-download.patch Patch229: firefox-nss-addon-hack.patch Patch231: fedora-customization.patch Patch241: 0025-Add-KDE-integration-to-Firefox-toolkit-parts.patch Patch242: 0026-Add-KDE-integration-to-Firefox.patch # Upstream patches Patch402: mozilla-1196777.patch Patch407: mozilla-1667096.patch # PGO/LTO patches Patch600: pgo.patch Patch602: mozilla-1516803.patch Patch603: firefox-gcc-always-inline.patch # system AV1 patches (from Gentoo) Patch800: bmo-1559213-Support-system-av1.patch Patch801: bmo-1559213-fix-system-av1-libs.patch %if %{?system_nss} BuildRequires: pkgconfig(nspr) >= %{nspr_version} BuildRequires: pkgconfig(nss) >= %{nss_version} BuildRequires: nss-static >= %{nss_version} %endif BuildRequires: pkgconfig(libpng) %if %{?system_jpeg} BuildRequires: libjpeg-devel %endif %if %{?system_pixman} BuildRequires: pixman-devel %endif BuildRequires: zip BuildRequires: bzip2-devel BuildRequires: pkgconfig(zlib) BuildRequires: pkgconfig(gtk+-3.0) BuildRequires: pkgconfig(krb5) BuildRequires: pkgconfig(pango) BuildRequires: pkgconfig(freetype2) >= %{freetype_version} BuildRequires: pkgconfig(xt) BuildRequires: pkgconfig(xrender) BuildRequires: pkgconfig(libstartup-notification-1.0) BuildRequires: pkgconfig(libnotify) >= %{libnotify_version} BuildRequires: pkgconfig(dri) BuildRequires: pkgconfig(libcurl) BuildRequires: pkgconfig(alsa) BuildRequires: dbus-glib-devel %if %{?system_av1} BuildRequires: pkgconfig(aom) >= %{aom_version} BuildRequires: pkgconfig(dav1d) >= %{dav1d_version} %endif %if %{?system_libvpx} BuildRequires: libvpx-devel >= %{libvpx_version} %endif %if %{?system_webp} BuildRequires: pkgconfig(libwebp) >= %{libwebp_version} BuildRequires: pkgconfig(libwebpdemux) >= %{libwebp_version} %endif BuildRequires: autoconf213 BuildRequires: pkgconfig(libpulse) BuildRequires: yasm BuildRequires: llvm BuildRequires: llvm-devel BuildRequires: clang BuildRequires: clang-libs %if %{with build_with_clang} || %{with wasi_sdk} BuildRequires: lld %endif BuildRequires: pipewire-devel %if !0%{?use_bundled_cbindgen} BuildRequires: cbindgen %endif BuildRequires: nodejs BuildRequires: nasm >= 1.13 BuildRequires: libappstream-glib %if 0%{?big_endian} BuildRequires: icu %endif Requires: mozilla-filesystem Requires: (mozilla-openh264 >= 2.1.1 if openh264) %if %{with langpacks_subpkg} Recommends: firefox-langpacks = %{version}-%{release} %else Obsoletes: firefox-langpacks < %{version}-%{release} %endif Recommends: ffmpeg-free Recommends: libva Requires: p11-kit-trust Requires: pciutils-libs %if %{?system_nss} Requires: nspr >= %{nspr_build_version} Requires: nss >= %{nss_build_version} %endif %if %{?system_libevent} BuildRequires: pkgconfig(libevent) %endif BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3.11-devel %if !0%{?flatpak} Requires: u2f-hidraw-policy %endif %if %{?use_xdg_file_portal} Requires: xdg-desktop-portal %endif BuildRequires: desktop-file-utils %if !0%{?flatpak} BuildRequires: athena-bookmarks %endif %if %{?system_ffi} BuildRequires: pkgconfig(libffi) %endif %if 0%{?use_xvfb} BuildRequires: xorg-x11-server-Xvfb %endif BuildRequires: rust BuildRequires: cargo BuildRequires: clang-devel %if %{build_with_asan} BuildRequires: libasan BuildRequires: libasan-static %endif BuildRequires: perl-interpreter BuildRequires: fdk-aac-free-devel %if 0%{?launch_wayland_compositor} BuildRequires: mutter BuildRequires: gsettings-desktop-schemas BuildRequires: gnome-settings-daemon BuildRequires: mesa-dri-drivers BuildRequires: xorg-x11-server-Xwayland BuildRequires: dbus-x11 BuildRequires: gnome-keyring %endif %if 0%{?run_firefox_tests} BuildRequires: procps-ng BuildRequires: nss-tools BuildRequires: python2.7 BuildRequires: dejavu-sans-mono-fonts BuildRequires: dejavu-sans-fonts BuildRequires: dejavu-serif-fonts BuildRequires: dbus-x11 BuildRequires: gnome-keyring BuildRequires: mesa-dri-drivers # ---------------------------------------- BuildRequires: liberation-fonts-common BuildRequires: liberation-mono-fonts BuildRequires: liberation-sans-fonts BuildRequires: liberation-serif-fonts # ---------------------------------- BuildRequires: google-carlito-fonts BuildRequires: google-droid-sans-fonts BuildRequires: google-noto-fonts-common BuildRequires: google-noto-cjk-fonts-common BuildRequires: google-noto-sans-cjk-ttc-fonts BuildRequires: google-noto-sans-gurmukhi-fonts BuildRequires: google-noto-sans-fonts BuildRequires: google-noto-emoji-color-fonts BuildRequires: google-noto-sans-sinhala-vf-fonts # ----------------------------------- BuildRequires: thai-scalable-fonts-common BuildRequires: thai-scalable-waree-fonts BuildRequires: khmeros-base-fonts BuildRequires: jomolhari-fonts # ---------------------------------- BuildRequires: lohit-tamil-fonts BuildRequires: lohit-telugu-fonts # ---------------------------------- BuildRequires: paktype-naskh-basic-fonts BuildRequires: pt-sans-fonts BuildRequires: smc-meera-fonts BuildRequires: stix-fonts BuildRequires: abattis-cantarell-fonts BuildRequires: xorg-x11-fonts-ISO8859-1-100dpi BuildRequires: xorg-x11-fonts-misc %endif BuildRequires: make BuildRequires: pciutils-libs BuildRequires: mesa-libgbm-devel BuildRequires: libproxy-devel # Required for --enable-replace-malloc %if %{enable_replace_malloc} BuildRequires: libstdc++-static %endif %if %{with wasi_sdk} BuildRequires: clang cmake ninja-build %endif Recommends: speech-dispatcher Recommends: speech-dispatcher-utils %if %{with build_with_clang} BuildRequires: compiler-rt %endif Obsoletes: mozilla <= 37:1.7.13 Provides: webclient Provides: firefox Conflicts: firefox # Don't ship firefox-x11 and firefox-wayland on Fedora 40. # Wayland backend is considered as mature enough now. # We need to use v-r in Obsoletes because new versions of this # package keep being built in older releases, and we want to # obsolete all of them when the user updates to F40+. %if 0%{?fedora} >= 40 Obsoletes: firefox-wayland < %{version}-%{release} Obsoletes: firefox-x11 < %{version}-%{release} %endif %description Mozilla Firefox is an open-source web browser, designed for standards compliance, performance and portability. %if %{with langpacks_subpkg} %package langpacks Summary: Firefox langpacks Requires: %{name} = %{version}-%{release} %description langpacks The firefox-langpacks package contains all the localization and translations langpack add-ons. %files langpacks -f %{name}.lang %dir %{langpackdir} %endif %if %{enable_mozilla_crashreporter} %global moz_debug_prefix %{_prefix}/lib/debug %global moz_debug_dir %{moz_debug_prefix}%{mozappdir} %global uname_m %(uname -m) %global symbols_file_name %{name}-%{version}.en-US.%{_os}-%{uname_m}.crashreporter-symbols.zip %global symbols_file_path %{moz_debug_dir}/%{symbols_file_name} %global _find_debuginfo_opts %{limit_build -m 32768} -p %{symbols_file_path} -o debugcrashreporter.list %global crashreporter_pkg_name mozilla-crashreporter-%{name}-debuginfo %package -n %{crashreporter_pkg_name} Summary: Debugging symbols used by Mozilla's crash reporter servers %description -n %{crashreporter_pkg_name} This package provides debug information for Firefox, for use by Mozilla's crash reporter servers. If you are trying to locally debug %{name}, you want to install %{name}-debuginfo instead. %files -n %{crashreporter_pkg_name} -f debugcrashreporter.list %else %global _find_debuginfo_opts %{limit_build -m 32768} %endif %if 0%{?fedora} < 40 %package x11 Summary: Firefox X11 launcher. Requires: %{name} %description x11 The firefox-x11 package contains launcher and desktop file to run Firefox explicitly on X11. %files x11 %{_bindir}/firefox-x11 %{_datadir}/applications/firefox-x11.desktop %package wayland Summary: Firefox Wayland launcher. Requires: %{name} %description wayland The firefox-wayland package contains launcher and desktop file to run Firefox explicitly on Wayland. %files wayland %{_bindir}/firefox-wayland %{_datadir}/applications/firefox-wayland.desktop %endif %if 0%{?run_firefox_tests} %global testsuite_pkg_name %{name}-testresults %package -n %{testsuite_pkg_name} Summary: Results of testsuite %description -n %{testsuite_pkg_name} This package contains results of tests executed during build. %files -n %{testsuite_pkg_name} /%{version}-%{release}/test_results /%{version}-%{release}/test_summary.txt /%{version}-%{release}/failures-* %endif #--------------------------------------------------------------------- %prep %setup -q -n %{tarballdir} %if %{with wasi_sdk} %setup -q -T -D -a 50 %endif # Build patches, can't change backup suffix from default because during build # there is a compare of config and js/config directories and .orig suffix is # ignored during this compare. %patch -P40 -p1 -b .aarch64-skia %patch -P44 -p1 -b .build-arm-libopus %patch -P53 -p1 -b .firefox-gcc-build %patch -P71 -p1 -b .0001-GLIBCXX-fix-for-GCC-12 %patch -P78 -p1 -b .firefox-i686 %patch -P79 -p1 -b .firefox-gcc-13-build %patch -P81 -p1 -b .firefox-gcc-15.0-s390 # We need to create the wasi.patch with the correct path to the wasm libclang_rt. %if %{with wasi_sdk} cat %{SOURCE49} | sed -e "s|LIBCLANG_RT_PLACEHOLDER|`pwd`/wasi-sdk-25/build/sysroot/install/wasi-resource-dir/lib/wasi/libclang_rt.builtins-wasm32.a|" > %{_sourcedir}/wasi.patch %patch -P80 -p1 -b .wasi %endif # Fedora patches %patch -P215 -p1 -b .addons %patch -P219 -p1 -b .rhbz-1173156 #ARM run-time patch %ifarch aarch64 %patch -P226 -p1 -b .1354671 %endif %patch -P228 -p1 -b .disable-openh264-download %patch -P229 -p1 -b .firefox-nss-addon-hack %patch -P231 -p1 -b .fedora-customization %patch -P402 -p1 -b .1196777 %patch -P407 -p1 -b .1667096 # PGO patches %if %{build_with_pgo} %if !%{with build_with_clang} %patch -P600 -p1 -b .pgo %patch -P602 -p1 -b .1516803 %endif %endif %patch -P603 -p1 -b .inline rm -f .mozconfig cp %{SOURCE10} .mozconfig echo "ac_add_options --enable-default-toolkit=cairo-gtk3-wayland" >> .mozconfig %if %{official_branding} echo "ac_add_options --enable-official-branding" >> .mozconfig %endif cp %{SOURCE24} mozilla-api-key cp %{SOURCE27} google-api-key cp %{SOURCE35} google-loc-api-key echo "ac_add_options --prefix=\"%{_prefix}\"" >> .mozconfig echo "ac_add_options --libdir=\"%{_libdir}\"" >> .mozconfig %if %{?system_nss} 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 %{?system_libevent} echo "ac_add_options --with-system-libevent" >> .mozconfig %endif %if %{?system_ffi} echo "ac_add_options --enable-system-ffi" >> .mozconfig %endif %ifarch aarch64 echo "ac_add_options --disable-elf-hack" >> .mozconfig %endif %ifarch ppc64le echo "ac_add_options --disable-webrtc" >> .mozconfig %endif %if %{?debug_build} echo "ac_add_options --enable-debug" >> .mozconfig echo "ac_add_options --disable-optimize" >> .mozconfig %else %global optimize_flags "none" %ifarch ppc64le aarch64 %global optimize_flags "-g -O2" %endif %if %{optimize_flags} != "none" echo 'ac_add_options --enable-optimize=%{?optimize_flags}' >> .mozconfig %else echo 'ac_add_options --enable-optimize' >> .mozconfig %endif echo "ac_add_options --disable-debug" >> .mozconfig %endif # Second arches fail to start with jemalloc enabled %ifnarch %{ix86} x86_64 echo "ac_add_options --disable-jemalloc" >> .mozconfig %endif %if !%{enable_mozilla_crashreporter} echo "ac_add_options --disable-crashreporter" >> .mozconfig %endif %if 0%{?build_tests} echo "ac_add_options --enable-tests" >> .mozconfig %else echo "ac_add_options --disable-tests" >> .mozconfig %endif %if !%{?system_jpeg} echo "ac_add_options --without-system-jpeg" >> .mozconfig %else echo "ac_add_options --with-system-jpeg" >> .mozconfig %endif %if %{?system_pixman} echo "ac_add_options --enable-system-pixman" >> .mozconfig %endif %if %{?system_av1} #echo "ac_add_options --with-system-av1" >> .mozconfig %else #echo "ac_add_options --without-system-av1" >> .mozconfig %endif %if %{?system_libvpx} echo "ac_add_options --with-system-libvpx" >> .mozconfig %else echo "ac_add_options --without-system-libvpx" >> .mozconfig %endif %if %{?system_webp} echo "ac_add_options --with-system-webp" >> .mozconfig %else echo "ac_add_options --without-system-webp" >> .mozconfig %endif %ifarch s390x echo "ac_add_options --disable-jit" >> .mozconfig %endif %if %{build_with_asan} echo "ac_add_options --enable-address-sanitizer" >> .mozconfig echo "ac_add_options --disable-jemalloc" >> .mozconfig %endif # api keys full path echo "ac_add_options --with-mozilla-api-keyfile=`pwd`/mozilla-api-key" >> .mozconfig # It seems that the api key we have is for the safe browsing only echo "ac_add_options --with-google-location-service-api-keyfile=`pwd`/google-loc-api-key" >> .mozconfig echo "ac_add_options --with-google-safebrowsing-api-keyfile=`pwd`/google-api-key" >> .mozconfig # https://bugzilla.redhat.com/show_bug.cgi?id=2239046 # with clang 17 upstream's detection fails, so let's just tell it # where to look echo "ac_add_options --with-libclang-path=`llvm-config --libdir`" >> .mozconfig %if %{enable_replace_malloc} echo "ac_add_options --enable-replace-malloc" >> .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 chmod a-x third_party/rust/ash/src/extensions/ext/*.rs chmod a-x third_party/rust/ash/src/extensions/khr/*.rs chmod a-x third_party/rust/ash/src/extensions/nv/*.rs #--------------------------------------------------------------------- %build # Disable LTO to work around rhbz#1883904 # Is that already fixed? %define _lto_cflags %{nil} #WASI SDK %if %{with wasi_sdk} pushd wasi-sdk-25 mkdir -p my_rust_vendor cd my_rust_vendor tar xf %{SOURCE4} mkdir -p .cargo cat > .cargo/config < .cargo/config < .cargo/config <> .mozconfig echo "export CXXFLAGS=\"$MOZ_OPT_FLAGS\"" >> .mozconfig echo "export LDFLAGS=\"$MOZ_LINK_FLAGS\"" >> .mozconfig %if %{with build_with_clang} echo "export LLVM_PROFDATA=\"llvm-profdata\"" >> .mozconfig echo "export AR=\"llvm-ar\"" >> .mozconfig echo "export NM=\"llvm-nm\"" >> .mozconfig echo "export RANLIB=\"llvm-ranlib\"" >> .mozconfig echo "ac_add_options --enable-linker=lld" >> .mozconfig %else echo "export CC=gcc" >> .mozconfig echo "export CXX=g++" >> .mozconfig echo "export AR=\"gcc-ar\"" >> .mozconfig echo "export NM=\"gcc-nm\"" >> .mozconfig echo "export RANLIB=\"gcc-ranlib\"" >> .mozconfig %endif %if 0%{?build_with_pgo} # PGO build doesn't work with ccache export CCACHE_DISABLE=1 export GCOV_PREFIX=`pwd -P`/objdir export GCOV_PREFIX_STRIP=$(( $(echo `pwd -P`|tr -c -d '/' |wc -c )+2 )) env | grep GCOV echo "ac_add_options --enable-lto" >> .mozconfig echo "ac_add_options MOZ_PGO=1" >> .mozconfig %endif %if %{with wasi_sdk} echo "ac_add_options --with-wasi-sysroot=`pwd`/wasi-sdk-25/build/sysroot/install/share/wasi-sysroot" >> .mozconfig %else echo "ac_add_options --without-sysroot" >> .mozconfig echo "ac_add_options --without-wasm-sandboxed-libraries" >> .mozconfig %endif # Require 4 GB of RAM per CPU core %constrain_build -m 4096 echo "mk_add_options MOZ_MAKE_FLAGS=\"-j%{_smp_build_ncpus}\"" >> .mozconfig echo "mk_add_options MOZ_SERVICES_SYNC=1" >> .mozconfig echo "export STRIP=/bin/true" >> .mozconfig %if %{build_with_pgo} cp %{SOURCE45} . . ./run-wayland-compositor %endif mkdir -p objdir/_virtualenvs/init_py3 cat > objdir/_virtualenvs/init_py3/pip.conf << EOF [global] find-links=`pwd`/mochitest-python no-index=true EOF tar xf %{SOURCE37} #Use python 3.11 for mach sed -i -e 's|#!/usr/bin/env python3|#!/usr/bin/env python3.11|' mach ./mach build -v 2>&1 | cat - || exit 1 %if %{build_with_pgo} kill $MUTTER_PID %endif #--------------------------------------------------------------------- %install # run Firefox test suite # Do we need it? # export MACH_NATIVE_PACKAGE_SOURCE=system %if %{run_firefox_tests} cp %{SOURCE45} . . ./run-wayland-compositor cp %{SOURCE40} %{SOURCE41} %{SOURCE42} %{SOURCE38} %{SOURCE39} %{SOURCE43} %{SOURCE44} . mkdir -p test_results ./run-tests-wayland || true ./print_results > test_summary.txt 2>&1 || true ./print_failures || true kill $MUTTER_PID %endif # set up our default bookmarks %if !0%{?flatpak} cp -p %{default_bookmarks_file} objdir/dist/bin/browser/chrome/browser/content/browser/default-bookmarks.html %endif # Make sure locale works for langpacks cat > objdir/dist/bin/browser/defaults/preferences/firefox-l10n.js << EOF pref("general.useragent.locale", "chrome://global/locale/intl.properties"); EOF DESTDIR=%{buildroot} make -C objdir install mkdir -p %{buildroot}{%{_libdir},%{_bindir},%{_datadir}/applications} %if %{gnome_shell_search_provider} # Install Gnome search provider files mkdir -p %{buildroot}%{_datadir}/gnome-shell/search-providers cp %{SOURCE34} %{buildroot}%{_datadir}/gnome-shell/search-providers mkdir -p %{buildroot}%{_datadir}/dbus-1/services cp %{SOURCE46} %{buildroot}%{_datadir}/dbus-1/services %endif %if 0%{?fedora} >= 40 desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE47} %else # We can't use desktop-file-install as it refuses to install firefox.desktop file. cp %{SOURCE20} %{buildroot}%{_datadir}/applications %endif %if 0%{?fedora} < 40 desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE31} desktop-file-install --dir %{buildroot}%{_datadir}/applications %{SOURCE29} %endif # set up the firefox start script rm -rf %{buildroot}%{_bindir}/firefox %if 0%{?fedora} < 40 sed -e 's,/__PREFIX__,%{_prefix},g' -e 's,__APP_NAME__,firefox,g' %{SOURCE21} > %{buildroot}%{_bindir}/firefox %else sed -e 's,/__PREFIX__,%{_prefix},g' -e 's,__APP_NAME__,org.mozilla.firefox,g' %{SOURCE21} > %{buildroot}%{_bindir}/firefox %endif chmod 755 %{buildroot}%{_bindir}/firefox %if 0%{?flatpak} sed -i -e 's|%FLATPAK_ENV_VARS%|export TMPDIR="$XDG_CACHE_HOME/tmp"|' %{buildroot}%{_bindir}/firefox %else sed -i -e 's|%FLATPAK_ENV_VARS%||' %{buildroot}%{_bindir}/firefox %endif %if 0%{?fedora} < 40 sed -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE30} > %{buildroot}%{_bindir}/firefox-x11 chmod 755 %{buildroot}%{_bindir}/firefox-x11 sed -e 's,/__PREFIX__,%{_prefix},g' %{SOURCE28} > %{buildroot}%{_bindir}/firefox-wayland chmod 755 %{buildroot}%{_bindir}/firefox-wayland %endif install -p -D -m 644 %{SOURCE23} %{buildroot}%{_mandir}/man1/firefox.1 rm -f %{buildroot}/%{mozappdir}/firefox-config rm -f %{buildroot}/%{mozappdir}/update-settings.ini for s in 16 22 24 32 48 256; do mkdir -p %{buildroot}%{_datadir}/icons/hicolor/${s}x${s}/apps cp -p browser/branding/official/default${s}.png \ %{buildroot}%{_datadir}/icons/hicolor/${s}x${s}/apps/firefox.png done # Install hight contrast icon mkdir -p %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps cp -p %{SOURCE25} \ %{buildroot}%{_datadir}/icons/hicolor/symbolic/apps echo > %{name}.lang %if %{with langpacks} # Extract langpacks, make any mods needed, repack the langpack, and install it. mkdir -p %{buildroot}%{langpackdir} tar xf %{SOURCE1} for langpack in `ls firefox-langpacks/*.xpi`; do language=`basename $langpack .xpi` extensionID=langpack-$language@firefox.mozilla.org mkdir -p $extensionID unzip -qq $langpack -d $extensionID find $extensionID -type f | xargs chmod 644 cd $extensionID zip -qq -r9mX ../${extensionID}.xpi * cd - install -m 644 ${extensionID}.xpi %{buildroot}%{langpackdir} language=`echo $language | sed -e 's/-/_/g'` %if 0%{?flatpak} echo "%{langpackdir}/${extensionID}.xpi" >> %{name}.lang %else echo "%%lang($language) %{langpackdir}/${extensionID}.xpi" >> %{name}.lang %endif done rm -rf firefox-langpacks # Install langpack workaround (see #707100, #821169) function create_default_langpack() { language_long=$1 language_short=$2 cd %{buildroot}%{langpackdir} ln -s langpack-$language_long@firefox.mozilla.org.xpi langpack-$language_short@firefox.mozilla.org.xpi cd - echo "%%lang($language_short) %{langpackdir}/langpack-$language_short@firefox.mozilla.org.xpi" >> %{name}.lang } # Table of fallbacks for each language # please file a bug at bugzilla.redhat.com if the assignment is incorrect #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 mkdir -p %{buildroot}/%{mozappdir}/browser/defaults/preferences # System config dir mkdir -p %{buildroot}/%{_sysconfdir}/%{name}/pref # System extensions mkdir -p %{buildroot}%{_datadir}/mozilla/extensions/%{firefox_app_id} mkdir -p %{buildroot}%{_libdir}/mozilla/extensions/%{firefox_app_id} # Copy over the LICENSE install -p -c -m 644 LICENSE %{buildroot}/%{mozappdir} # Use the system hunspell dictionaries rm -rf %{buildroot}%{mozappdir}/dictionaries ln -s %{_datadir}/hunspell %{buildroot}%{mozappdir}/dictionaries # Enable crash reporter for Firefox application %if %{enable_mozilla_crashreporter} ./mach buildsymbols sed -i -e "s/\[Crash Reporter\]/[Crash Reporter]\nEnabled=1/" %{buildroot}/%{mozappdir}/application.ini # Add debuginfo for crash-stats.mozilla.com mkdir -p %{buildroot}/%{moz_debug_dir} cp objdir/dist/%{symbols_file_name} %{buildroot}/%{moz_debug_dir} %endif %if 0%{?run_firefox_tests} mkdir -p %{buildroot}/%{version}-%{release}/test_results cp test_results/* %{buildroot}/%{version}-%{release}/test_results cp test_summary.txt %{buildroot}/%{version}-%{release}/ cp failures-* %{buildroot}/%{version}-%{release}/ || true %endif # Default cp %{SOURCE12} %{buildroot}%{mozappdir}/browser/defaults/preferences %if %{?use_xdg_file_portal} echo 'pref("widget.use-xdg-desktop-portal.file-picker", 1);' >> %{buildroot}%{mozappdir}/browser/defaults/preferences/firefox-redhat-default-prefs.js %endif %if %{?use_pipewire_camera} echo 'pref("media.webrtc.camera.allow-pipewire", true);' >> %{buildroot}%{mozappdir}/browser/defaults/preferences/firefox-redhat-default-prefs.js %endif # Add distribution.ini mkdir -p %{buildroot}%{mozappdir}/distribution sed -e "s/__NAME__/%(source /etc/os-release; echo ${NAME})/" \ -e "s/__ID__/%(source /etc/os-release; echo ${ID})/" \ -e "s/rhel/redhat/" \ -e "s/Fedora.*/Fedora/" \ %{SOURCE26} > %{buildroot}%{mozappdir}/distribution/distribution.ini # Install appdata file mkdir -p %{buildroot}%{_datadir}/metainfo %if 0%{?fedora} >= 40 sed -e "s/__VERSION__/%{version}/" \ -e "s/__DATE__/$(date '+%F')/" \ %{SOURCE48} > %{buildroot}%{_datadir}/metainfo/org.mozilla.firefox.appdata.xml %else sed -e "s/__VERSION__/%{version}/" \ -e "s/__DATE__/$(date '+%F')/" \ %{SOURCE33} > %{buildroot}%{_datadir}/metainfo/firefox.appdata.xml %endif # Remove copied libraries to speed up build rm -f %{buildroot}%{mozappdirdev}/sdk/lib/libmozjs.so rm -f %{buildroot}%{mozappdirdev}/sdk/lib/libmozalloc.so rm -f %{buildroot}%{mozappdirdev}/sdk/lib/libxul.so # Create a symlink to replace libnssckbi.so with p11-kit-client.so # instead of p11-kit-trust.so, so that Firefox can see the system # trust store on the host through the p11-kit RPC protocol. A symlink # to libnss3.so is also needed, because Firefox tries to load # libnssckbi.so from the same directory where libnss3.so is loaded (as # of Firefox 89). %if 0%{?flatpak} ln -sf /usr/lib64/libnss3.so %{buildroot}%{_libdir}/libnss3.so ln -sf /usr/lib64/pkcs11/p11-kit-client.so %{buildroot}%{_libdir}/libnssckbi.so %endif #--------------------------------------------------------------------- # Moves defaults/preferences to browser/defaults/preferences %pretrans -p require 'posix' require 'os' if (posix.stat("%{mozappdir}/browser/defaults/preferences", "type") == "link") then posix.unlink("%{mozappdir}/browser/defaults/preferences") posix.mkdir("%{mozappdir}/browser/defaults/preferences") if (posix.stat("%{mozappdir}/defaults/preferences", "type") == "directory") then for i,filename in pairs(posix.dir("%{mozappdir}/defaults/preferences")) do os.rename("%{mozappdir}/defaults/preferences/"..filename, "%{mozappdir}/browser/defaults/preferences/"..filename) end f = io.open("%{mozappdir}/defaults/preferences/README","w") if f then f:write("Content of this directory has been moved to %{mozappdir}/browser/defaults/preferences.") f:close() end end end %check appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/*.appdata.xml %preun # is it a final removal? if [ $1 -eq 0 ]; then rm -rf %{mozappdir}/components rm -rf %{mozappdir}/extensions rm -rf %{mozappdir}/plugins rm -rf %{langpackdir} fi %if %{with langpacks_subpkg} %files %else %files -f %{name}.lang %endif %{_bindir}/firefox %{mozappdir}/firefox %{mozappdir}/firefox-bin %{mozappdir}/glxtest %doc %{_mandir}/man1/* %dir %{_sysconfdir}/%{name} %dir %{_sysconfdir}/%{name}/* %dir %{_datadir}/mozilla/extensions/* %dir %{_libdir}/mozilla/extensions/* %if 0%{?fedora} >= 40 %{_datadir}/applications/org.mozilla.firefox.desktop %else %{_datadir}/applications/firefox.desktop %endif %if %{gnome_shell_search_provider} %{_datadir}/dbus-1/services/* %{_datadir}/gnome-shell/search-providers/*.ini %endif %{_datadir}/metainfo/*.appdata.xml %dir %{mozappdir} %license %{mozappdir}/LICENSE %{mozappdir}/browser/chrome %{mozappdir}/browser/defaults/preferences/firefox-redhat-default-prefs.js %{mozappdir}/browser/features/*.xpi %{mozappdir}/distribution/distribution.ini # That's Windows only %ghost %{mozappdir}/browser/features/aushelper@mozilla.org.xpi %if %{without langpacks_subpkg} %if %{with langpacks} %dir %{langpackdir} %endif %endif %{mozappdir}/browser/omni.ja %{mozappdir}/application.ini %{mozappdir}/pingsender %exclude %{mozappdir}/removed-files %if 0%{?flatpak} %{_libdir}/libnss3.so %{_libdir}/libnssckbi.so %endif %{_datadir}/icons/hicolor/16x16/apps/firefox.png %{_datadir}/icons/hicolor/22x22/apps/firefox.png %{_datadir}/icons/hicolor/24x24/apps/firefox.png %{_datadir}/icons/hicolor/256x256/apps/firefox.png %{_datadir}/icons/hicolor/32x32/apps/firefox.png %{_datadir}/icons/hicolor/48x48/apps/firefox.png %{_datadir}/icons/hicolor/symbolic/apps/firefox-symbolic.svg %if %{enable_mozilla_crashreporter} %{mozappdir}/crashreporter %endif %{mozappdir}/*.so %{mozappdir}/defaults/pref/channel-prefs.js %{mozappdir}/dependentlibs.list %{mozappdir}/dictionaries %{mozappdir}/omni.ja %{mozappdir}/platform.ini %{mozappdir}/gmp-clearkey %{mozappdir}/fonts/TwemojiMozilla.ttf %ifarch aarch64 riscv64 %{mozappdir}/v4l2test %endif %{mozappdir}/vaapitest %if !%{?system_nss} %exclude %{mozappdir}/libnssckbi.so %endif %if %{build_with_asan} %{mozappdir}/llvm-symbolizer %endif #--------------------------------------------------------------------- %changelog * Tue Apr 22 2025 14:38 Little Owl - Synced with upstream