# No build in 62.0.2 %if %{mdvver} <= 201905 %ifarch %{ix86} %define debug_package %{nil} %endif %endif # # WARNING, READ FIRST: # # This is a special package that needs special treatment. Due to the amount of # security updates it needs, it's common to ship new upstream versions instead of patching. # That means this package MUST be BUILDABLE for stable official releases. # This also means only STABLE upstream releases, NO betas. # This is a discussed topic. Please, do not flame it again. %ifarch %ix86 %define _host i686-unknown-linux-gnu %endif %define oname firefox %define major 91.6.0 %define ff_epoch 0 # (tpg) set version HERE !!! %define realver %{major} %define firefox_appid \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\} # (tpg) MOZILLA_FIVE_HOME # https://bugzilla.rosalinux.ru/show_bug.cgi?id=10129 %define mozillalibdir %{_libdir}/%{oname}-esr %define pluginsdir %{_libdir}/mozilla/plugins # this seems fragile, so require the exact version or later (#58754) #%%define sqlite3_version %%(pkg-config --modversion sqlite3 &>/dev/null && pkg-config --modversion sqlite3 2>/dev/null || echo 0) %define nss_version %(pkg-config --modversion nss &>/dev/null && pkg-config --modversion nss 2>/dev/null || echo 0) %define nspr_version %(pkg-config --modversion nspr &>/dev/null && pkg-config --modversion nspr 2>/dev/null |sed -e 's!\.0!!' || echo 0) %define toolkit_gtk3 1 # Firefox 61.0: ERROR: Only GCC 6.1 or newer is supported (found version 5.5.0). %bcond_without clang %define use_bundled_cbindgen 1 # Requested 'nss >= 3.53.1' but version of NSS is 3.52.1 %bcond_with system_nss_nspr # Do not make provides from plugins /usr/lib64/firefox/*.so %global __provides_exclude_from ^%{_libdir}/firefox.*/.*\\.so$ # Do not require filtered out provides # To inspect them: # for i in /usr/lib64/firefox/* ; do if file $i | grep -q ELF ; then echo ; echo -- $i ; LC_ALL=C ldd $i | grep found ; fi; done # To make this list: # ( for i in /usr/lib64/firefox/* ; do if file $i | grep -q ELF ; then LC_ALL=C ldd $i | grep found | awk '{print $1}' | awk -F '\\.so' '{print $1}' ; fi; done ) | sort -u | tr '\n' '|' %global __requires_exclude ^(liblgpllibs|libmozavutil|libmozgtk|libmozsandbox|libmozsqlite3|libmozwayland|libnspr4|libnss3|libnssutil3|libplc4|libplds4|libsmime3|libssl3|libxul)\\.so.*$ %global optflags $(echo "%optflags" | sed -e "s/-O2/-O3/g") %global ldflags $(echo "%ldflags" | sed -e "s/-O2/-O3/g") Summary: Next generation web browser Name: firefox-esr91 Version: %{major} Epoch: %{ff_epoch} Release: 2 License: MPLv1+ Group: Networking/WWW Url: http://www.mozilla.com/firefox/ Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}esr/source/%{oname}-%{version}esr.source.tar.xz Source1: firefox.rpmlintrc Source2: ru@dictionaries.addons.mozilla.org.tar.bz2 Source4: %{oname}.desktop Source7: firefox.cfg Source9: kde.js Source10: mozilla-api-key Source11: google-api-key # for 2016.1 Source80: loffice-libcxx-wrapper.sh # Fedora # https://github.com/eqrion/cbindgen/releases # version 0.19.0 Source12: cbindgen-vendor.tar.xz Source13: gen_cbindgen-vendor.sh # Patches for kde integration of FF # http://www.rosenauer.org/hg/mozilla/summary Patch11: mozilla-kde.patch Patch12: firefox-kde.patch # Fedora specific patches # Unable to install addons from https pages Patch215: firefox-enable-addons.patch Patch219: mozilla-ntlm-full-path.patch Patch300: firefox-56.0-build-error.patch BuildRequires: gtk+2-devel %if %{toolkit_gtk3} BuildRequires: gtk+3-devel %endif BuildRequires: rust BuildRequires: cargo BuildRequires: unzip BuildRequires: zip BuildRequires: clang BuildRequires: clang-devel %if %{with clang} BuildRequires: lld %endif BuildRequires: nasm BuildRequires: libatomic-devel BuildRequires: pkgconfig(xinerama) BuildRequires: pkgconfig(xscrnsaver) BuildRequires: jpeg-devel BuildRequires: zlib-devel BuildRequires: glib2-devel %if %{mdvver} >= 202110 BuildRequires: pkgconfig(python2) %else BuildRequires: pkgconfig(python) BuildRequires: python38 %endif BuildRequires: pkgconfig(python3) BuildRequires: pkgconfig(libIDL-2.0) BuildRequires: makedepend BuildRequires: nodejs %if %{with system_nss_nspr} BuildRequires: nss-devel >= 2:3.24 BuildRequires: nss-static-devel BuildRequires: pkgconfig(nspr) >= 4.17 %endif BuildRequires: startup-notification-devel BuildRequires: dbus-glib-devel %ifnarch %armx %mips BuildRequires: java-rpmbuild BuildRequires: java-1.8.0-openjdk-devel BuildRequires: yasm >= 1.0.1 %endif %ifarch %arm BuildRequires: libffi-devel %endif BuildRequires: rootcerts >= 1:20110830.00 BuildRequires: pkgconfig(xt) BuildRequires: doxygen BuildRequires: pkgconfig(alsa) BuildRequires: wget BuildRequires: pkgconfig(libnotify) BuildRequires: pkgconfig(gl) BuildRequires: autoconf2.1 BuildRequires: libiw-devel BuildRequires: pkgconfig(gstreamer-1.0) BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) BuildRequires: pkgconfig(opus) BuildRequires: pkgconfig(libpulse) BuildRequires: bzip2-devel BuildRequires: pkgconfig(theoradec) BuildRequires: pkgconfig(vorbis) BuildRequires: pkgconfig(gconf-2.0) BuildRequires: pkgconfig(fontconfig) %if %{mdvver} < 202110 BuildRequires: stdc++-gcc10-devel %endif Provides: mozilla-firefox = %{EVRD} Provides: webclient %if %{with system_nss_nspr} Requires: %{mklibname nss 3} >= 2:%{nss_version} Requires: %{mklibname nspr 4} >= 2:%{nspr_version} %endif Requires: indexhtml Requires: xdg-utils # fixes bug #42096 Requires: mailcap Recommends: %{_lib}canberra0 Recommends: %{_lib}cups2 Conflicts: firefox Conflicts: firefox-esr24 Conflicts: firefox-esr45 Conflicts: firefox-esr52 Conflicts: firefox-esr60 Conflicts: firefox-esr68 Conflicts: firefox-esr78 Conflicts: firefox-esr < %{EVRD} %description The award-winning Web browser is now faster, more secure, and fully customizable to your online life. With Firefox(R), we've added powerful new features that make your online experience even better. It is an 'open source' product which is freely available, and is acquiring a growing proportion of international web browser usage. Firefox claims to offer a more secure web browsing experience than other products, with better protection against spyware and other Internet-based security threats. It includes all the standard features of a modern web browser, like Internet searching, tracking recently visited sites, setting up shortcuts to favourite sites, customising the software behaviour and so on. Firefox also includes features like 'tabbed browsing' (opening several web sites as sections within the same window) and methods for controlling pop-up windows, cookies and downloaded files. %files %doc AUTHORS CLOBBER LICENSE README.txt %{_bindir}/%{oname} %{_bindir}/mozilla-firefox %{_datadir}/applications/*.desktop %{_datadir}/mozilla/extensions/%{firefox_appid}/ %{_iconsdir}/%{oname}.png %{_iconsdir}/hicolor/*/apps/*.png %{_liconsdir}/%{oname}.png %{_miconsdir}/%{oname}.png %{mozillalibdir}* %dir %{_libdir}/mozilla %dir %{_libdir}/mozilla/extensions %dir %{_libdir}/mozilla/extensions/%{firefox_appid} %dir %{pluginsdir} #--------------------------------------------------------------------- %package devel Summary: Development files for %{name} Group: Development/Other Conflicts: firefox-devel Conflicts: firefox-esr-devel Conflicts: firefox-esr24-devel Conflicts: firefox-esr45-devel Conflicts: firefox-esr52-devel Conflicts: firefox-esr60-devel Conflicts: firefox-esr68-devel Conflicts: firefox-esr78-devel %description devel Files and macros mainly for building Firefox extensions. %files devel %doc AUTHORS CLOBBER LICENSE README.txt %{_rpmmacrodir}/*%{name}* #--------------------------------------------------------------------- %prep %setup -qn %{oname}-%{version} ## KDE INTEGRATION %patch11 -p1 -b .kdepatch %patch12 -p1 -b .kdemoz # Fedora patches %patch215 -p1 -b .addons %patch219 -p1 -b .ntlm %if %{with system_nss_nspr} %patch300 -p1 %endif pushd js/src autoconf-2.13 popd autoconf-2.13 %if %{with system_nss_nspr} # needed to regenerate certdata.c pushd security/nss/lib/ckfw/builtins perl ./certdata.perl /etc/pki/tls/mozilla/certdata.txt popd %endif %build %if 0%{?use_bundled_cbindgen} mkdir -p my_rust_vendor cd my_rust_vendor %{__tar} xf %{SOURCE12} mkdir -p .cargo cat > .cargo/config < $MOZCONFIG export BUILD_OFFICIAL=1 export MOZILLA_OFFICIAL=1 mk_add_options BUILD_OFFICIAL=1 mk_add_options MOZILLA_OFFICIAL=1 mk_add_options MOZ_MAKE_FLAGS="%{_smp_mflags}" mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../obj ac_add_options --disable-crashreporter # debug #ac_add_options --disable-debug %if %{mdvver} <= 201905 %ifarch %{ix86} ac_add_options --disable-debug-symbols %endif %endif %ifnarch aarch64 ac_add_options --disable-elf-hack %endif ac_add_options --disable-tests ac_add_options --disable-updater %if %{toolkit_gtk3} ac_add_options --enable-default-toolkit=cairo-gtk3-wayland %endif # # Enables security hardening compiler options # ac_add_options --enable-hardening # # https://bugzilla.mozilla.org/show_bug.cgi?id=1483822 # ac_add_options --enable-linker=%%{linker} # # Optimization for size is broken with gcc7 and later ac_add_options --enable-optimize="-O3" ac_add_options --enable-official-branding ac_add_options --enable-release # # Enable compatibility with older libstdc++ # #ac_add_options --enable-stdcxx-compat ac_add_options --host=%{_host} ac_add_options --libdir="%{_libdir}" ac_add_options --prefix="%{_prefix}" ac_add_options --with-distribution-id=org.rosa # Uncomment the following line if you wish to use Google's geolocaton API # (needed for use with saved maps with Google Maps) ac_add_options --with-google-location-service-api-keyfile=%{SOURCE11} ac_add_options --with-google-safebrowsing-api-keyfile=%{SOURCE11} # Uncomment the following line if you wish to use Mozilla Location Service ac_add_options --with-mozilla-api-keyfile=%{SOURCE10} ac_add_options --with-system-jpeg %if %{with system_nss_nspr} ac_add_options --with-system-nspr ac_add_options --with-system-nss %endif ac_add_options --with-system-zlib ac_add_options --with-unsigned-addon-scopes=app ac_add_options --without-system-libvpx #ac_add_options --enable-rust-debug ac_add_options --allow-addon-sideload #JS ac_add_options --enable-js-shell ac_add_options --enable-av1 ac_add_options --enable-pulseaudio EOF # force memory efficient linking and ets %if %{with clang} export LDFLAGS="%{ldflags} -Wl,--no-keep-memory" %else export LDFLAGS="%{ldflags} -Wl,--no-keep-memory -Wl,--reduce-memory-overheads" %endif export MOZ_SERVICES_SYNC="1" export STRIP=/bin/true # This is needed since Firefox 68, otherwise each language installation # (and Firefox 68 from Mozilla binaries compared to old Firefox binaries # from ROSA) will have their own profile (and users are missing bookmarks # and such). export MOZ_LEGACY_PROFILES="1" # This mach command requires /builddir/.mozbuild/_virtualenvs/mach/bin/python, # which wasn't found on the system! # Consider running 'mach bootstrap' or 'mach create-mach-environment' # to create the mach virtualenvs, or set MACH_USE_SYSTEM_PYTHON to use # the system Python installation over a virtualenv. export MACH_USE_SYSTEM_PYTHON=1 ./mach build %install # Make sure locale works for langpacks cat > %{_builddir}/obj/dist/bin/browser/defaults/preferences/firefox-l10n.js << EOF pref("general.useragent.locale", "chrome://global/locale/intl.properties"); EOF make -C %{_builddir}/obj/browser/installer STRIP=/bin/true MOZ_PKG_FATAL_WARNINGS=0 # Copy files to buildroot mkdir -p %{buildroot}%{mozillalibdir} cp -rf %{_builddir}/obj/dist/firefox/* %{buildroot}%{mozillalibdir} mkdir -p %{buildroot}%{_bindir} cat > %{buildroot}%{_bindir}/firefox <<'EOF' #!/bin/sh if [ "${XDG_SESSION_TYPE:-}" = wayland ]; then export MOZ_ENABLE_WAYLAND=1 exec %{mozillalibdir}/firefox else export MOZ_DISABLE_WAYLAND=1 exec %{mozillalibdir}/firefox fi EOF chmod +x %{buildroot}%{_bindir}/firefox pushd %{buildroot}%{_bindir} ln -sf firefox mozilla-firefox popd mkdir -p %{buildroot}%{mozillalibdir}/defaults/preferences/ install -m 644 %{SOURCE9} %{buildroot}%{mozillalibdir}/defaults/preferences/kde.js # Create and own %%_libdir/mozilla/plugins & firefox extensions directories mkdir -p %{buildroot}%{pluginsdir} mkdir -p %{buildroot}%{_libdir}/mozilla/extensions/%{firefox_appid} mkdir -p %{buildroot}%{_datadir}/mozilla/extensions/%{firefox_appid} # added ru dictionaries tar xjf %{SOURCE2} -C %{buildroot}%{_datadir}/mozilla/extensions/%{firefox_appid}/ # (tpg) desktop entry mkdir -p %{buildroot}%{_datadir}/applications install -m 644 %{SOURCE4} %{buildroot}%{_datadir}/applications/%{oname}.desktop # (tpg) icons for i in 16 22 24 32 48 256; do # (cg) Not all icon sizes are installed with make install, so just redo it here. install -m 644 browser/branding/official/default$i.png %{buildroot}%{mozillalibdir}/browser/chrome/icons/default/default$i.png mkdir -p %{buildroot}%{_iconsdir}/hicolor/"$i"x"$i"/apps ln -sf %{mozillalibdir}/browser/chrome/icons/default/default$i.png %{buildroot}%{_iconsdir}/hicolor/"$i"x"$i"/apps/%{oname}.png ; done mkdir -p %{buildroot}{%{_liconsdir},%{_iconsdir},%{_miconsdir}} ln -sf %{mozillalibdir}/browser/chrome/icons/default/default48.png %{buildroot}%{_liconsdir}/%{oname}.png ln -sf %{mozillalibdir}/browser/chrome/icons/default/default32.png %{buildroot}%{_iconsdir}/%{oname}.png ln -sf %{mozillalibdir}/browser/chrome/icons/default/default16.png %{buildroot}%{_miconsdir}/%{oname}.png # exclusions rm -f %{buildroot}%{mozillalibdir}/README.txt rm -f %{buildroot}%{mozillalibdir}/removed-files rm -f %{buildroot}%{mozillalibdir}/precomplete install -m 644 %{SOURCE7} %{buildroot}%{mozillalibdir}/firefox.cfg cat << EOF >> %{buildroot}%{mozillalibdir}/defaults/pref/config-prefs.js pref("general.config.filename", "firefox.cfg"); pref("general.config.obscure_value", 0); // use this to disable the byte-shift EOF # display icon for Firefox button mkdir -p %{buildroot}%{mozillalibdir}/defaults/profile/chrome cat << EOF > %{buildroot}%{mozillalibdir}/defaults/profile/chrome/userChrome.css #appmenu-toolbar-button { list-style-image: url("chrome://branding/content/icon16.png"); } EOF cat <macro # Macros from %{name} package %%firefox_major %{major} %%firefox_epoch %{ff_epoch} %%firefox_version %{major} %%firefox_mozillapath %{mozillalibdir} %%firefox_pluginsdir %{pluginsdir} %%firefox_appid \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\} %%firefox_extdir %%(if [ "%%_target_cpu" = "noarch" ]; then echo %%{_datadir}/mozilla/extensions/%%{firefox_appid}; else echo %%{_libdir}/mozilla/extensions/%%{firefox_appid}; fi) FIN %install_macro %{name} macro mkdir -p %{buildroot}%{_docdir}/%{name}