MozillaFirefox/MozillaFirefox.spec
changeset 1113 8e9195853a32
parent 1088 84cdfb476431
parent 1112 8a4f5aea2475
child 1114 572ec48f3fe8
--- a/MozillaFirefox/MozillaFirefox.spec	Sun Mar 17 10:00:10 2019 +0100
+++ b/MozillaFirefox/MozillaFirefox.spec	Tue Nov 19 22:54:22 2019 +0100
@@ -2,7 +2,7 @@
 # spec file for package MozillaFirefox
 #
 # Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
-#               2006-2019 Wolfgang Rosenauer
+#               2006-2019 Wolfgang Rosenauer <wr@rosenauer.org>
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,14 +18,14 @@
 
 
 # changed with every update
-%define major          65
-%define mainver        %major.0.1
-%define orig_version   65.0.1
+%define major          70
+%define mainver        %major.0
+%define orig_version   70.0
 %define orig_suffix    %{nil}
 %define update_channel beta
 %define branding       1
-%define releasedate    20190211233335
-%define source_prefix  firefox-%{orig_version}
+%define devpkg         1
+%define releasedate    20191016161957
 
 # always build with GCC as SUSE Security Team requires that
 %define clang_build 0
@@ -33,6 +33,8 @@
 # PIE, full relro
 %define build_hardened 1
 
+%bcond_with only_print_mozconfig
+
 # Firefox only supports i686
 %ifarch %ix86
 ExclusiveArch:  i586 i686
@@ -43,6 +45,7 @@
 # general build definitions
 %define progname firefox
 %define pkgname  MozillaFirefox
+%define srcname  firefox
 %define appname  Firefox
 %define progdir %{_prefix}/%_lib/%{progname}
 %define gnome_dir     %{_prefix}
@@ -62,6 +65,7 @@
 BuildRequires:  alsa-devel
 BuildRequires:  autoconf213
 BuildRequires:  dbus-1-glib-devel
+BuildRequires:  dejavu-fonts
 BuildRequires:  fdupes
 BuildRequires:  memory-constraints
 %if 0%{?suse_version} <= 1320
@@ -69,7 +73,7 @@
 %else
 BuildRequires:  gcc-c++
 %endif
-BuildRequires:  cargo >= 1.30
+BuildRequires:  cargo >= 1.36
 BuildRequires:  libXcomposite-devel
 BuildRequires:  libcurl-devel
 BuildRequires:  libidl-devel
@@ -77,22 +81,26 @@
 BuildRequires:  libnotify-devel
 BuildRequires:  libproxy-devel
 BuildRequires:  makeinfo
-BuildRequires:  mozilla-nspr-devel >= 4.20
-BuildRequires:  mozilla-nss-devel >= 3.41
-BuildRequires:  nodejs >= 8.11
+BuildRequires:  mozilla-nspr-devel >= 4.22
+BuildRequires:  mozilla-nss-devel >= 3.46.1
+BuildRequires:  nasm >= 2.13
+BuildRequires:  nodejs8 >= 8.11
 BuildRequires:  python-devel
 BuildRequires:  python2-xml
 BuildRequires:  python3 >= 3.5
-BuildRequires:  rust >= 1.30
-BuildRequires:  rust-cbindgen >= 0.6.7
+BuildRequires:  rust >= 1.36
+BuildRequires:  rust-cbindgen >= 0.9.1
 BuildRequires:  startup-notification-devel
 BuildRequires:  unzip
 BuildRequires:  update-desktop-files
 BuildRequires:  xorg-x11-libXt-devel
+%if 0%{?do_profiling}
+BuildRequires:  xvfb-run
+%endif
 BuildRequires:  yasm
 BuildRequires:  zip
 %if 0%{?suse_version} < 1550
-BuildRequires:  pkgconfig(gconf-2.0)
+BuildRequires:  pkgconfig(gconf-2.0) >= 1.2.1
 %endif
 BuildRequires:  pkgconfig(gdk-x11-2.0)
 BuildRequires:  pkgconfig(glib-2.0) >= 2.22
@@ -131,12 +139,13 @@
 License:        MPL-2.0
 Group:          Productivity/Networking/Web/Browsers
 Url:            http://www.mozilla.org/
-Source:         http://ftp.mozilla.org/pub/firefox/releases/%{version}/source/firefox-%{orig_version}%{orig_suffix}.source.tar.xz
+%if !%{with only_print_mozconfig}
+Source:         http://ftp.mozilla.org/pub/%{srcname}/releases/%{version}%{orig_suffix}/source/%{srcname}-%{orig_version}%{orig_suffix}.source.tar.xz
 Source1:        MozillaFirefox.desktop
 Source2:        MozillaFirefox-rpmlintrc
 Source3:        mozilla.sh.in
+Source4:        tar_stamps
 Source5:        source-stamp.txt
-Source6:        kde.js
 Source7:        l10n-%{orig_version}%{orig_suffix}.tar.xz
 Source8:        firefox-mimeinfo.xml
 Source9:        firefox.js
@@ -144,40 +153,56 @@
 Source11:       firefox.1
 Source12:       mozilla-get-app-id
 Source13:       spellcheck.js
-Source14:       create-tar.sh
+Source14:       https://github.com/openSUSE/firefox-scripts/raw/master/create-tar.sh
 Source15:       firefox-appdata.xml
-Source16:       MozillaFirefox.changes
+Source16:       %{name}.changes
 # Set up API keys, see http://www.chromium.org/developers/how-tos/api-keys
 # Note: these are for the openSUSE Firefox builds ONLY. For your own distribution,
 # please get your own set of keys.
 Source18:       mozilla-api-key
 Source19:       google-api-key
-Source20:       http://ftp.mozilla.org/pub/firefox/releases/%{version}/source/firefox-%{orig_version}%{orig_suffix}.source.tar.xz.asc
-Source21:       mozilla.keyring
+Source20:       https://ftp.mozilla.org/pub/%{srcname}/releases/%{version}%{orig_suffix}/source/%{srcname}-%{orig_version}%{orig_suffix}.source.tar.xz.asc
+Source21:       https://ftp.mozilla.org/pub/%{srcname}/releases/%{version}%{orig_suffix}/KEY#/mozilla.keyring
 # Gecko/Toolkit
 Patch1:         mozilla-nongnome-proxies.patch
 Patch2:         mozilla-kde.patch
 Patch3:         mozilla-ntlm-full-path.patch
 Patch4:         mozilla-openaes-decl.patch
-Patch7:         mozilla-aarch64-startup-crash.patch
-Patch8:         mozilla-bmo256180.patch
-Patch9:         mozilla-bmo1463035.patch
-Patch10:        mozilla-cubeb-noreturn.patch
+Patch5:         mozilla-aarch64-startup-crash.patch
+Patch6:         mozilla-bmo1463035.patch
+Patch7:         mozilla-cubeb-noreturn.patch
+Patch8:         mozilla-fix-aarch64-libopus.patch
+Patch9:         mozilla-disable-wasm-emulate-arm-unaligned-fp-access.patch
+Patch10:        mozilla-s390-context.patch
+Patch11:        mozilla-s390-bigendian.patch
+Patch12:        mozilla-reduce-rust-debuginfo.patch
+Patch13:        mozilla-ppc-altivec_static_inline.patch
+Patch14:        mozilla-bmo1005535.patch
+Patch15:        mozilla-bmo1568145.patch
+Patch16:        mozilla-bmo1504834-part1.patch
+Patch17:        mozilla-bmo1504834-part2.patch
+Patch18:        mozilla-bmo1504834-part3.patch
+Patch19:        mozilla-bmo1511604.patch
+Patch20:        mozilla-bmo1554971.patch
+Patch21:        mozilla-bmo1512162.patch
+Patch22:        mozilla-fix-top-level-asm.patch
 # Firefox/browser
 Patch101:       firefox-kde.patch
 Patch102:       firefox-branded-icons.patch
+%endif # only_print_mozconfig
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 Requires(post):   coreutils shared-mime-info desktop-file-utils
 Requires(postun): shared-mime-info desktop-file-utils
-%if %branding
-Requires:       %{name}-branding > 44.0
-%endif
+Requires:       %{name}-branding >= 68
 Requires:       mozilla-nspr >= %(rpm -q --queryformat '%%{VERSION}' mozilla-nspr)
 Requires:       mozilla-nss >= %(rpm -q --queryformat '%%{VERSION}' mozilla-nss)
 Recommends:     libcanberra0
 Recommends:     libpulse0
 # addon leads to startup crash (bnc#908892)
 Obsoletes:      tracker-miner-firefox < 0.15
+%if 0%{?devpkg} == 0
+Obsoletes:      %{name}-devel < %{version}
+%endif
 # libproxy's mozjs pacrunner crashes FF (bnc#759123)
 %if 0%{?suse_version} < 1220
 Obsoletes:      libproxy1-pacrunner-mozjs <= 0.4.7
@@ -189,6 +214,7 @@
 compliance and performance.  Its functionality can be enhanced via a
 plethora of extensions.
 
+%if 0%{?devpkg}
 %package devel
 Summary:        Devel package for %{appname}
 Group:          Development/Tools/Other
@@ -199,12 +225,13 @@
 
 %description devel
 Development files for %{appname} to make packaging of addons easier.
+%endif
 
 %if %localize
 %package translations-common
 Summary:        Common translations for %{appname}
 Group:          System/Localization
-Provides:       locale(%{name}:ar;ca;cs;da;de;en_GB;el;es_AR;es_CL;es_ES;fi;fr;hu;it;ja;ko;nb_NO;nl;pl;pt_BR;pt_PT;ru;sv_SE;zh_CN;zh_TW)
+Provides:       locale(%{name}:ar;ca;cs;da;de;el;en_GB;es_AR;es_CL;es_ES;fi;fr;hu;it;ja;ko;nb_NO;nl;pl;pt_BR;pt_PT;ru;sv_SE;zh_CN;zh_TW)
 Requires:       %{name} = %{version}
 Obsoletes:      %{name}-translations < %{version}-%{release}
 
@@ -215,7 +242,7 @@
 %package translations-other
 Summary:        Extra translations for %{appname}
 Group:          System/Localization
-Provides:       locale(%{name}:ach;af;an;as;ast;az;bg;bn_BD;bn_IN;br;bs;cak;cy;dsb;en_ZA;eo;es_MX;et;eu;fa;ff;fy_NL;ga_IE;gd;gl;gn;gu_IN;he;hi_IN;hr;hsb;hy_AM;id;is;ka;kab;kk;km;kn;lij;lt;lv;mai;mk;ml;mr;ms;ne-NP;nn_NO;oc;or;pa_IN;rm;ro;si;sk;sl;son;sq;sr;ta;te;th;tr;uk;uz;vi;xh)
+Provides:       locale(%{name}:ach;af;an;ast;az;be;bg;bn;br;bs;cak;cy;dsb;en_CA;eo;es_MX;et;eu;fa;ff;fy_NL;ga_IE;gd;gl;gn;gu_IN;he;hi_IN;hr;hsb;hy_AM;ia;id;is;ka;kab;kk;km;kn;lij;lt;lv;mk;mr;ms;my;ne_NP;nn_NO;oc;pa_IN;rm;ro;si;sk;sl;son;sq;sr;ta;te;th;tr;uk;ur;uz;vi;xh)
 Requires:       %{name} = %{version}
 Obsoletes:      %{name}-translations < %{version}-%{release}
 
@@ -224,7 +251,6 @@
 of %{appname}.
 %endif
 
-%if %branding
 %package branding-upstream
 Summary:        Upstream branding for %{appname}
 Group:          Productivity/Networking/Web/Browsers
@@ -243,7 +269,6 @@
 
 %description branding-upstream
 This package provides upstream look and feel for %{appname}.
-%endif
 
 %if %crashreporter
 %package buildsymbols
@@ -255,28 +280,56 @@
 symbols meant for upload to Mozilla's crash collector database.
 %endif
 
+%if !%{with only_print_mozconfig}
 %prep
 %if %localize
-%setup -q -n %{source_prefix} -b 7 -b 10
+
+# If generated incorrectly, the tarball will be ~270B in
+# size, so 1MB seems like good enough limit to check.
+MINSIZE=1048576
+if (( $(stat -Lc%s "%{SOURCE7}") < MINSIZE)); then
+    echo "Translations tarball %{SOURCE7} not generated properly."
+    exit 1
+fi
+
+%setup -q -n %{srcname}-%{orig_version} -b 7 -b 10
 %else
-%setup -q -n %{source_prefix}
+%setup -q -n %{srcname}-%{orig_version}
 %endif
-cd $RPM_BUILD_DIR/%{source_prefix}
+cd $RPM_BUILD_DIR/%{srcname}-%{orig_version}
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
 %patch4 -p1
+%patch5 -p1
+%patch6 -p1
 %patch7 -p1
 %patch8 -p1
 %patch9 -p1
 %patch10 -p1
+%ifarch s390x ppc64
+%patch11 -p1
+%endif
+%patch12 -p1
+%patch13 -p1
+%patch14 -p1
+%patch15 -p1
+%patch16 -p1
+%patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
+%patch21 -p1
+%patch22 -p1
 # Firefox
 %patch101 -p1
 %patch102 -p1
+%endif # only_print_mozconfig
 
 %build
+%if !%{with only_print_mozconfig}
 # no need to add build time to binaries
-modified="$(sed -n '/^----/n;s/ - .*$//;p;q' "%{_sourcedir}/MozillaFirefox.changes")"
+modified="$(sed -n '/^----/n;s/ - .*$//;p;q' "%{_sourcedir}/%{name}.changes")"
 DATE="\"$(date -d "${modified}" "+%%b %%e %%Y")\""
 TIME="\"$(date -d "${modified}" "+%%R")\""
 find . -regex ".*\.c\|.*\.cpp\|.*\.h" -exec sed -i "s/__DATE__/${DATE}/g;s/__TIME__/${TIME}/g" {} +
@@ -287,6 +340,9 @@
   exit 1
 fi
 source %{SOURCE5}
+%endif # only_print_mozconfig
+
+export CARGO_HOME=${RPM_BUILD_DIR}/%{srcname}-%{orig_version}/.cargo
 export MOZ_SOURCE_CHANGESET=$REV
 export SOURCE_REPO=$REPO
 export source_repo=$REPO
@@ -317,8 +373,18 @@
 %endif
 export CXXFLAGS="$CFLAGS"
 export MOZCONFIG=$RPM_BUILD_DIR/mozconfig
-%limit_build -m 1500
+%if %{with only_print_mozconfig}
+echo "export CC=$CC"
+echo "export CXX=$CXX"
+echo "export CFLAGS=\"$CFLAGS\""
+echo "export LDFLAGS=\"$LDFLAGS\""
+echo "export RUSTFLAGS=\"$RUSTFLAGS\""
+echo ""
+cat << EOF
+%else
+%limit_build -m 2000
 cat << EOF > $MOZCONFIG
+%endif
 mk_add_options MOZILLA_OFFICIAL=1
 mk_add_options BUILD_OFFICIAL=1
 mk_add_options MOZ_MAKE_FLAGS=%{?jobs:-j%jobs}
@@ -339,7 +405,7 @@
 ac_add_options --enable-debug-symbols
 %endif
 %if 0%{?suse_version} > 1549
-%ifnarch aarch64 ppc64 ppc64le
+%ifnarch aarch64 ppc64 ppc64le s390x
 ac_add_options --disable-elf-hack
 %endif
 %endif
@@ -359,7 +425,8 @@
 #ac_add_options --enable-chrome-format=jar
 ac_add_options --enable-update-channel=%{update_channel}
 ac_add_options --with-mozilla-api-keyfile=%{SOURCE18}
-ac_add_options --with-google-api-keyfile=%{SOURCE19}
+ac_add_options --with-google-location-service-api-keyfile=%{SOURCE19}
+ac_add_options --with-google-safebrowsing-api-keyfile=%{SOURCE19}
 ac_add_options --with-unsigned-addon-scopes=app
 %if %branding
 ac_add_options --enable-official-branding
@@ -380,14 +447,36 @@
 %ifarch aarch64 %arm s390x
 ac_add_options --disable-webrtc
 %endif
+# mitigation/workaround for bmo#1512162
+%ifarch s390x
+ac_add_options --enable-optimize="-O1"
+%endif
 %ifarch x86_64
 # LTO needs newer toolchain stack only (at least GCC 8.2.1 (r268506)
 %if 0%{?suse_version} > 1500
 ac_add_options --enable-lto
+%if 0%{?do_profiling}
+ac_add_options MOZ_PGO=1
+%endif
 %endif
 %endif
 EOF
-./mach build
+%if !%{with only_print_mozconfig}
+%ifarch ppc64 s390x s390
+# NOTE: Currently, system-icu is too old, so we can't build with that,
+#       but have to generate the .dat-file freshly. This seems to be a
+#       less fragile approach anyways.
+# ac_add_options --with-system-icu
+echo "Generate big endian version of config/external/icu/data/icud58l.dat"
+./mach python intl/icu_sources_data.py .
+ls -l config/external/icu/data
+rm -f config/external/icu/data/icudt*l.dat
+%endif
+%if 0%{?do_profiling}
+xvfb-run --server-args="-screen 0 1920x1080x24" \
+%endif
+./mach build -v
+%endif # only_print_mozconfig
 
 %install
 cd $RPM_BUILD_DIR/obj
@@ -403,25 +492,29 @@
 grep amazondotcom dist/firefox/browser/omni.ja
 # copy tree into RPM_BUILD_ROOT
 mkdir -p %{buildroot}%{progdir}
-cp -rf $RPM_BUILD_DIR/obj/dist/firefox/* %{buildroot}%{progdir}
+cp -rf $RPM_BUILD_DIR/obj/dist/%{srcname}/* %{buildroot}%{progdir}
 mkdir -p %{buildroot}%{progdir}/distribution/extensions
 mkdir -p %{buildroot}%{progdir}/browser/defaults/preferences/
+# renaming executables (for regular vs. ESR)
+%if "%{srcname}" != "%{progname}"
+mv %{buildroot}%{progdir}/%{srcname} %{buildroot}%{progdir}/%{progname}
+mv %{buildroot}%{progdir}/%{srcname}-bin %{buildroot}%{progdir}/%{progname}-bin
+%endif
 # install gre prefs
 install -m 644 %{SOURCE13} %{buildroot}%{progdir}/defaults/pref/
 # install browser prefs
-install -m 644 %{SOURCE6} %{buildroot}%{progdir}/browser/defaults/preferences/kde.js
 install -m 644 %{SOURCE9} %{buildroot}%{progdir}/browser/defaults/preferences/firefox.js
-# install additional locales
+# build additional locales
 %if %localize
 mkdir -p %{buildroot}%{progdir}/browser/extensions
 truncate -s 0 %{_tmppath}/translations.{common,other}
-sed -r '/^(ja-JP-mac|en-US|)$/d;s/ .*$//' $RPM_BUILD_DIR/%{source_prefix}/browser/locales/shipped-locales \
-    | xargs -P 8 -n 1 -I {} /bin/sh -c '
+sed -r '/^(ja-JP-mac|en-US|)$/d;s/ .*$//' $RPM_BUILD_DIR/%{srcname}-%{orig_version}/browser/locales/shipped-locales \
+    | xargs -n 1 -I {} /bin/sh -c '
         locale=$1
         pushd $RPM_BUILD_DIR/compare-locales
         PYTHONPATH=lib \
             scripts/compare-locales -m ../l10n-merged/$locale \
-            ../%{source_prefix}/browser/locales/l10n.ini ../l10n $locale
+            ../%{srcname}-%{orig_version}/browser/locales/l10n.ini ../l10n $locale
         popd
         LOCALE_MERGEDIR=$RPM_BUILD_DIR/l10n-merged/$locale \
             make -C browser/locales langpack-$locale
@@ -432,7 +525,7 @@
         rm -rf %{buildroot}%{progdir}/browser/extensions/langpack-$locale@firefox.mozilla.org/hyphenation
         # check against the fixed common list and sort into the right filelist
         _matched=0
-        for _match in ar ca cs da de en-GB el es-AR es-CL es-ES fi fr hu it ja ko nb-NO nl pl pt-BR pt-PT ru sv-SE zh-CN zh-TW; do
+        for _match in ar ca cs da de el en-GB es-AR es-CL es-ES fi fr hu it ja ko nb-NO nl pl pt-BR pt-PT ru sv-SE zh-CN zh-TW; do
             [ "$_match" = "$locale" ] && _matched=1
         done
         [ $_matched -eq 1 ] && _l10ntarget=common || _l10ntarget=other
@@ -457,7 +550,7 @@
 mkdir --parents %{buildroot}/usr/bin
 sed "s:%%PREFIX:%{_prefix}:g
 s:%%PROGDIR:%{progdir}:g
-s:%%APPNAME:firefox:g
+s:%%APPNAME:%{progname}:g
 s:%%PROFILE:.mozilla/firefox:g" \
   %{SOURCE3} > %{buildroot}%{progdir}/%{progname}.sh
 chmod 755 %{buildroot}%{progdir}/%{progname}.sh
@@ -474,7 +567,8 @@
 cp %{SOURCE8} %{buildroot}%{_datadir}/mime/packages/%{progname}.xml
 # appdata
 mkdir -p %{buildroot}%{_datadir}/appdata
-cp %{SOURCE15} %{buildroot}%{_datadir}/appdata/%{desktop_file_name}.appdata.xml
+sed "s:firefox.desktop:%{desktop_file_name}:g" \
+  %{SOURCE15} > %{buildroot}%{_datadir}/appdata/%{desktop_file_name}.appdata.xml
 # install man-page
 mkdir -p %{buildroot}%{_mandir}/man1/
 cp %{SOURCE11} %{buildroot}%{_mandir}/man1/%{progname}.1
@@ -504,6 +598,7 @@
 rm -f %{buildroot}%{progdir}/LICENSE
 rm -f %{buildroot}%{progdir}/precomplete
 rm -f %{buildroot}%{progdir}/update-settings.ini
+%if 0%{?devpkg}
 # devel
 mkdir -p %{buildroot}%{_bindir}
 install -m 755 %SOURCE12 %{buildroot}%{_bindir}
@@ -525,12 +620,7 @@
    %%{__unzip} -q -d "$extdir" "%%1" \
    %%{nil}
 FIN
-# just dumping an xpi file there doesn't work...
-#%%firefox_ext_install() \
-#       extdir="%%{buildroot}%%{firefox_extdir}" \
-#       mkdir -p "$extdir" \
-#       cp "%%1" "$extdir" \
-#       %%{nil}
+%endif
 # fdupes
 %fdupes %{buildroot}%{progdir}
 %fdupes %{buildroot}%{_datadir}
@@ -584,8 +674,8 @@
 %{progdir}/gtk2/libmozgtk.so
 %{progdir}/gmp-clearkey/
 %attr(755,root,root) %{progdir}/%{progname}.sh
-%{progdir}/firefox
-%{progdir}/firefox-bin
+%{progdir}/%{progname}
+%{progdir}/%{progname}-bin
 %{progdir}/application.ini
 %{progdir}/chrome.manifest
 %{progdir}/dependentlibs.list
@@ -616,13 +706,14 @@
 %doc %{_mandir}/man1/%{progname}.1.gz
 %{_datadir}/appdata/
 
+%if 0%{?devpkg}
 %files devel
 %defattr(-,root,root)
 %{_bindir}/mozilla-get-app-id
 %config %{_sysconfdir}/rpm/macros.%{progname}
+%endif
 
 %if %localize
-
 %files translations-common -f %{_tmppath}/translations.common
 %defattr(-,root,root)
 %dir %{progdir}
@@ -636,11 +727,9 @@
 
 # this package does not need to provide files but is needed to fulfill
 # requirements if no other branding package is to be installed
-%if %branding
 %files branding-upstream
 %defattr(-,root,root)
 %dir %{progdir}
-%endif
 
 %if %crashreporter
 %files buildsymbols