New development package for openSUSE:Factory

OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/firefox-esr?expand=0&rev=21
This commit is contained in:
Wolfgang Rosenauer 2024-12-11 12:38:50 +00:00 committed by Git OBS Bridge
parent d8a78670a6
commit a226d95b0d
52 changed files with 6870 additions and 5797 deletions

View File

@ -2,17 +2,281 @@
Encoding=UTF-8
Name=%NAME
GenericName=Web Browser
Comment=Web Browser
GenericName[ca]=Navegador web
GenericName[cs]=Webový prohlížeč
GenericName[es]=Navegador web
GenericName[fa]=مرورگر اینترنتی
GenericName[fi]=WWW-selain
GenericName[fr]=Navigateur Web
GenericName[hu]=Webböngésző
GenericName[it]=Browser Web
GenericName[ja]=
GenericName[ko]=
GenericName[nb]=Nettleser
GenericName[nl]=Webbrowser
GenericName[nn]=Nettlesar
GenericName[no]=Nettleser
GenericName[pl]=Przeglądarka WWW
GenericName[pt]=Navegador Web
GenericName[pt_BR]=Navegador Web
GenericName[ru]=Веб-браузер
GenericName[sk]=Internetový prehliadač
GenericName[sv]=Webbläsare
GenericName[uk]=Веб-браузер
Comment=Browse the Web
Comment[ca]=Navegueu per el web
Comment[cs]=Prohlížení stránek World Wide Webu
Comment[de]=Im Internet surfen
Comment[es]=Navegue por la web
Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
Comment[fi]=Selaa Internetin WWW-sivuja
Comment[fr]=Navigue sur Internet
Comment[hu]=A világháló böngészése
Comment[it]=Esplora il web
Comment[ja]=
Comment[ko]=
Comment[nb]=Surf på nettet
Comment[nl]=Verken het internet
Comment[nn]=Surf på nettet
Comment[no]=Surf på nettet
Comment[pl]=Przeglądanie stron WWW
Comment[pt]=Navegue na Internet
Comment[pt_BR]=Navegue na Internet
Comment[ru]=Просмотр веб-страниц
Comment[sk]=Prehliadanie internetu
Comment[sv]=Surfa på webben
Comment[uk]=Перегляд веб-сторінок
TryExec=%EXEC
Exec=%EXEC %u
Icon=%ICON
Terminal=false
StartupNotify=true
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;application/x-xpinstall;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;application/x-xpinstall;x-scheme-handler/http;x-scheme-handler/https;
Type=Application
Actions=PrivateBrowsing;
Actions=new-window;PrivateBrowsing;ProfileManager
[Desktop Action new-window]
Name=New Window
Name[ach]=Dirica manyen
Name[af]=Nuwe venster
Name[an]=Nueva finestra
Name[ar]=نافذة جديدة
Name[as]=
Name[ast]=Ventana nueva
Name[az]=Yeni Pəncərə
Name[be]=Новае акно
Name[bg]=Нов прозорец
Name[bn_BD]= (N)
Name[bn_IN]=
Name[br]=Prenestr nevez
Name[brx]= '(N)
Name[bs]=Novi prozor
Name[ca]=Finestra nova
Name[cak]=K'ak'a' tzuwäch
Name[cs]=Nové okno
Name[cy]=Ffenestr Newydd
Name[da]=Nyt vindue
Name[de]=Neues Fenster
Name[dsb]=Nowe wokno
Name[el]=Νέο παράθυρο
Name[en_GB]=New Window
Name[en_US]=New Window
Name[en_ZA]=New Window
Name[eo]=Nova fenestro
Name[es_AR]=Nueva ventana
Name[es_CL]=Nueva ventana
Name[es_ES]=Nueva ventana
Name[es_MX]=Nueva ventana
Name[et]=Uus aken
Name[eu]=Leiho berria
Name[fa]=پنجره جدید
Name[ff]=Henorde Hesere
Name[fi]=Uusi ikkuna
Name[fr]=Nouvelle fenêtre
Name[fy_NL]=Nij finster
Name[ga_IE]=Fuinneog Nua
Name[gd]=Uinneag ùr
Name[gl]=Nova xanela
Name[gn]=Ovetã pyahu
Name[gu_IN]= િ
Name[he]=חלון חדש
Name[hi_IN]= ि
Name[hr]=Novi prozor
Name[hsb]=Nowe wokno
Name[hu]=Új ablak
Name[hy_AM]=Նոր Պատուհան
Name[id]=Jendela Baru
Name[is]=Nýr gluggi
Name[it]=Nuova finestra
Name[ja]=
Name[ja_JP-mac]=
Name[ka]=
Name[kk]=Жаңа терезе
Name[km]=
Name[kn]= ಿಿ
Name[ko]=
Name[kok]=
Name[ks]=نئئ وِنڈو
Name[lij]=Neuvo barcon
Name[lo]=
Name[lt]=Naujas langas
Name[ltg]=Jauns lūgs
Name[lv]=Jauns logs
Name[mai]= ि
Name[mk]=Нов прозорец
Name[ml]=ി
Name[mr]=
Name[ms]=Tetingkap Baru
Name[my]=
Name[nb_NO]=Nytt vindu
Name[ne_NP]=
Name[nl]=Nieuw venster
Name[nn_NO]=Nytt vindauge
Name[or]= ି
Name[pa_IN]= ਿ
Name[pl]=Nowe okno
Name[pt_BR]=Nova janela
Name[pt_PT]=Nova janela
Name[rm]=Nova fanestra
Name[ro]=Fereastră nouă
Name[ru]=Новое окно
Name[sat]= ि (N)
Name[si]=
Name[sk]=Nové okno
Name[sl]=Novo okno
Name[son]=Zanfun taaga
Name[sq]=Dritare e Re
Name[sr]=Нови прозор
Name[sv_SE]=Nytt fönster
Name[ta]=ி
Name[te]= ి
Name[th]=
Name[tr]=Yeni pencere
Name[tsz]=Eraatarakua jimpani
Name[uk]=Нове вікно
Name[ur]=نیا دریچہ
Name[uz]=Yangi oyna
Name[vi]=Ca s mi
Name[wo]=Palanteer bu bees
Name[xh]=Ifestile entsha
Name[zh_CN]=
Name[zh_TW]=
Exec=%EXEC --new-window %u
[Desktop Action PrivateBrowsing]
Name=New Private Browsing Window
Name[ach]=Dirica manyen me mung
Name[af]=Nuwe privaatvenster
Name[an]=Nueva finestra privada
Name[ar]=نافذة خاصة جديدة
Name[as]= ি
Name[ast]=Ventana privada nueva
Name[az]=Yeni Məxfi Pəncərə
Name[be]=Новае акно адасаблення
Name[bg]=Нов прозорец за поверително сърфиране
Name[bn_BD]= ি
Name[bn_IN]= ি
Name[br]=Prenestr merdeiñ prevez nevez
Name[brx]= '
Name[bs]=Novi privatni prozor
Name[ca]=Finestra privada nova
Name[cak]=K'ak'a' ichinan tzuwäch
Name[cs]=Nové anonymní okno
Name[cy]=Ffenestr Breifat Newydd
Name[da]=Nyt privat vindue
Name[de]=Neues privates Fenster
Name[dsb]=Nowe priwatne wokno
Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
Name[en_GB]=New Private Window
Name[en_US]=New Private Window
Name[en_ZA]=New Private Window
Name[eo]=Nova privata fenestro
Name[es_AR]=Nueva ventana privada
Name[es_CL]=Nueva ventana privada
Name[es_ES]=Nueva ventana privada
Name[es_MX]=Nueva ventana privada
Name[et]=Uus privaatne aken
Name[eu]=Leiho pribatu berria
Name[fa]=پنجره ناشناس جدید
Name[ff]=Henorde Suturo Hesere
Name[fi]=Uusi yksityinen ikkuna
Name[fr]=Nouvelle fenêtre de navigation privée
Name[fy_NL]=Nij priveefinster
Name[ga_IE]=Fuinneog Nua Phríobháideach
Name[gd]=Uinneag phrìobhaideach ùr
Name[gl]=Nova xanela privada
Name[gn]=Ovetã ñemi pyahu
Name[gu_IN]= િ
Name[he]=חלון פרטי חדש
Name[hi_IN]= ि ि
Name[hr]=Novi privatni prozor
Name[hsb]=Nowe priwatne wokno
Name[hu]=Új privát ablak
Name[hy_AM]=Սկսել Գաղտնի դիտարկում
Name[id]=Jendela Mode Pribadi Baru
Name[is]=Nýr huliðsgluggi
Name[it]=Nuova finestra anonima
Name[ja]=
Name[ja_JP-mac]=
Name[ka]=
Name[kk]=Жаңа жекелік терезе
Name[km]=
Name[kn]= ಿ ಿಿ
Name[ko]=
Name[kok]= ि
Name[ks]=نْو پرایوٹ وینڈو&
Name[lij]=Neuvo barcon privou
Name[lo]=
Name[lt]=Naujas privataus naršymo langas
Name[ltg]=Jauns privatais lūgs
Name[lv]=Jauns privātais logs
Name[mai]= ि ि (W)
Name[mk]=Нов приватен прозорец
Name[ml]=ി
Name[mr]= ि
Name[ms]=Tetingkap Persendirian Baharu
Name[my]=New Private Window
Name[nb_NO]=Nytt privat vindu
Name[ne_NP]= ि
Name[nl]=Nieuw privévenster
Name[nn_NO]=Nytt privat vindauge
Name[or]= ି ି
Name[pa_IN]= ਿ
Name[pl]=Nowe okno prywatne
Name[pt_BR]=Nova janela privativa
Name[pt_PT]=Nova janela privada
Name[rm]=Nova fanestra privata
Name[ro]=Fereastră privată nouă
Name[ru]=Новое приватное окно
Name[sat]= ि ि (W )
Name[si]= (W)
Name[sk]=Nové okno v režime Súkromné prehliadanie
Name[sl]=Novo zasebno okno
Name[son]=Sutura zanfun taaga
Name[sq]=Dritare e Re Private
Name[sr]=Нови приватан прозор
Name[sv_SE]=Nytt privat fönster
Name[ta]=ி ி
Name[te]= ి ి
Name[th]=
Name[tr]=Yeni gizli pencere
Name[tsz]=Juchiiti eraatarakua jimpani
Name[uk]=Приватне вікно
Name[ur]=نیا نجی دریچہ
Name[uz]=Yangi maxfiy oyna
Name[vi]=Ca s riêng tư mi
Name[wo]=Panlanteeru biir bu bees
Name[xh]=Ifestile yangasese entsha
Name[zh_CN]=
Name[zh_TW]=
Exec=%EXEC --private-window %u
[Desktop Action ProfileManager]
Name=Profile Manager
Name[cs]=Správa profilů
Name[de]=Profilmanager
Name[fr]=Gestionnaire de profil
Name[ru]=Менеджер профилей
Name[uk]=Менеджер профілів
Exec=%EXEC --ProfileManager

View File

@ -1,13 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<constraints>
<hardware>
<jobs>4</jobs>
<disk>
<size unit="G">25</size>
<size unit="G">26</size>
</disk>
<memory>
<size unit="G">8</size>
</memory>
<physicalmemory>
<size unit="G">15</size>
</physicalmemory>
</hardware>
<hostlabel exclude="true">SLOW_CPU</hostlabel>
<overwrite>
<conditions>
<arch>armv6l</arch>
@ -17,29 +19,34 @@
<disk>
<size unit="G">12</size>
</disk>
<memory>
<physicalmemory>
<size unit="G">5</size>
</memory>
</physicalmemory>
</hardware>
</overwrite>
<!-- LTO disabled - less RAM -->
<overwrite>
<conditions>
<arch>aarch64</arch>
</conditions>
<hardware>
<memory>
<size unit="G">12</size>
</memory>
<cpu>
<flag>asimdrdm</flag>
</cpu>
<physicalmemory>
<size unit="G">14</size>
</physicalmemory>
</hardware>
</overwrite>
<overwrite>
<conditions>
<arch>x86_64</arch>
<arch>ppc64le</arch>
<arch>s390x</arch>
</conditions>
<hardware>
<memory>
<size unit="G">16</size>
</memory>
<physicalmemory>
<size unit="G">8</size>
</physicalmemory>
</hardware>
</overwrite>
</constraints>

View File

@ -1,5 +1,34 @@
#!/bin/bash
function main() {
# Exit script on CTRL+C
trap "exit" INT
if [ $# -ne 1 ]; then
print_usage_and_exit
fi
check_required_tools
# Sourcing the given tar_stamps-file to have the variables available
TAR_STAMP="$1"
source "$TAR_STAMP" || print_usage_and_exit
set_internal_variables
check_what_to_do_with_source_tarballs
download_upstream_source_tarballs
if [ -z ${SKIP_LOCALES+x} ]; then
check_what_to_do_with_locales_tarballs
create_locales_tarballs
else
printf "%-40s: User forced skip (SKIP_LOCALES set)\n" "locales"
fi
clean_up_old_tarballs
}
function print_usage_and_exit() {
echo "Usage: create-tar.sh tar_stamps"
echo ""
@ -17,55 +46,76 @@ PREV_VERSION_SUFFIX="esr"
#SKIP_LOCALES="" # Uncomment to skip l10n-generation
EOF
exit 1
exit 1
}
if [ $# -ne 1 ]; then
print_usage_and_exit
fi
function check_required_tools() {
# check required tools
check_for_binary /usr/bin/hg "mercurial"
check_for_binary /usr/bin/jq "jq"
which python3 > /dev/null || exit 1
# Sourcing the given tar_stamps-file to have the variables available
TAR_STAMP="$1"
source "$TAR_STAMP" || print_usage_and_exit
# use parallel compression, if available
compression='-J'
pixz -h > /dev/null 2>&1
if (($? != 127)); then
compression='-Ipixz'
fi
}
# Internal variables
BRANCH="releases/mozilla-$CHANNEL"
if [ "$PRODUCT" = "firefox" ]; then
LOCALE_FILE="firefox-$VERSION/browser/locales/l10n-changesets.json"
else
LOCALE_FILE="thunderbird-$VERSION/comm/mail/locales/l10n-changesets.json"
fi
function set_internal_variables() {
# Internal variables
BRANCH="releases/mozilla-$CHANNEL"
if [ "$PRODUCT" = "firefox" ]; then
FF_LOCALE_FILE="firefox-$VERSION/browser/locales/l10n-changesets.json"
else
FF_LOCALE_FILE="thunderbird-$VERSION/browser/locales/l10n-changesets.json"
TB_LOCALE_FILE="thunderbird-$VERSION/comm/mail/locales/l10n-changesets.json"
FF_PREV_LOCALE_FILE="thunderbird-$PREV_VERSION/browser/locales/l10n-changesets.json"
TB_PREV_LOCALE_FILE="thunderbird-$PREV_VERSION/comm/mail/locales/l10n-changesets.json"
L10N_STRING_PATTERNS="thunderbird-$VERSION/comm/python/l10n/tbxchannel/l10n_merge.py"
fi
SOURCE_TARBALL="$PRODUCT-$VERSION$VERSION_SUFFIX.source.tar.xz"
FTP_URL="https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source"
FTP_CANDIDATES_BASE_URL="https://ftp.mozilla.org/pub/$PRODUCT/candidates"
# Make first letter of PRODCUT upper case
PRODUCT_CAP="${PRODUCT^}"
LOCALES_URL="https://product-details.mozilla.org/1.0/l10n/$PRODUCT_CAP"
PRODUCT_URL="https://product-details.mozilla.org/1.0/$PRODUCT.json"
# Exit script on CTRL+C
trap "exit" INT
SOURCE_TARBALL="$PRODUCT-$VERSION$VERSION_SUFFIX.source.tar.xz"
PREV_SOURCE_TARBALL="$PRODUCT-$PREV_VERSION$PREV_VERSION_SUFFIX.source.tar.xz"
if [ "$PRODUCT" = "thunderbird" ]; then
TB_LOCALE_TARBALL="$PRODUCT-$VERSION$VERSION_SUFFIX.strings_all.tar.zst"
fi
FTP_URL="https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source"
FTP_CANDIDATES_BASE_URL="https://ftp.mozilla.org/pub/%s/candidates"
LOCALES_URL="https://product-details.mozilla.org/1.0/l10n"
FF_L10N_MONOREPO="https://github.com/mozilla-l10n/firefox-l10n"
PRODUCT_URL="https://product-details.mozilla.org/1.0"
ALREADY_EXTRACTED_LOCALES_FILE=0
}
function get_ftp_candidates_url() {
VERSION_WITH_SUFFIX="$1"
echo "$FTP_CANDIDATES_BASE_URL/$VERSION_WITH_SUFFIX-candidates"
local CURR_PRODUCT="$1"
local VERSION_WITH_SUFFIX="$2"
printf "$FTP_CANDIDATES_BASE_URL/$VERSION_WITH_SUFFIX-candidates" "$CURR_PRODUCT"
}
function check_tarball_source () {
TARBALL=$1
# Print out what is going to be done:
if [ -e $TARBALL ]; then
if [ -e "$TARBALL" ]; then
echo "Reuse existing file"
elif wget --spider $FTP_URL/$TARBALL 2> /dev/null; then
elif wget --spider "$FTP_URL/$TARBALL" 2> /dev/null; then
echo "Download file"
else
echo "Mercurial checkout"
else
local CANDIDATE_TARBALL_LOCATION=""
CANDIDATE_TARBALL_LOCATION="$(printf "%s/%s/source/%s" "$(get_ftp_candidates_url "$PRODUCT" "$VERSION$VERSION_SUFFIX")" "$BUILD_ID" "$TARBALL" )"
if wget --spider "$CANDIDATE_TARBALL_LOCATION" 2> /dev/null; then
echo "Download UNRELEASED candidate ($BUILD_ID)"
else
echo "Mercurial checkout"
fi
fi
}
function ask_cont_abort_question() {
while true; do
read -p "$1 [(c)ontinue/(a)bort] " ca
read -r -p "$1 [(c)ontinue/(a)bort] " ca
case $ca in
[Cc]* ) return 0 ;;
[Aa]* ) return 1 ;;
@ -75,19 +125,19 @@ function ask_cont_abort_question() {
}
function check_for_binary() {
if ! test -x $1; then
if ! test -x "$1"; then
echo "$1 is missing: execute zypper in $2"
exit 5
fi
}
function get_source_stamp() {
BUILD_ID="$1"
FTP_CANDIDATES_BASE_URL=$(get_ftp_candidates_url $VERSION$VERSION_SUFFIX)
FTP_CANDIDATES_JSON_SUFFIX="${BUILD_ID}/linux-x86_64/en-US/$PRODUCT-$VERSION$VERSION_SUFFIX.json"
BUILD_JSON=$(curl --silent --fail "$FTP_CANDIDATES_BASE_URL/$FTP_CANDIDATES_JSON_SUFFIX") || return 1;
REV=$(echo "$BUILD_JSON" | jq .moz_source_stamp)
SOURCE_REPO=$(echo "$BUILD_JSON" | jq .moz_source_repo)
local CURR_BUILD_ID="$1"
local FTP_CANDIDATES_BASE_URL=$(get_ftp_candidates_url "$PRODUCT" "$VERSION$VERSION_SUFFIX")
local FTP_CANDIDATES_JSON_SUFFIX="${CURR_BUILD_ID}/linux-x86_64/en-US/$PRODUCT-$VERSION$VERSION_SUFFIX.json"
local BUILD_JSON=$(curl --silent --fail "$FTP_CANDIDATES_BASE_URL/$FTP_CANDIDATES_JSON_SUFFIX") || return 1;
local REV=$(echo "$BUILD_JSON" | jq .moz_source_stamp)
local SOURCE_REPO=$(echo "$BUILD_JSON" | jq .moz_source_repo)
TIMESTAMP=$(echo "$BUILD_JSON" | jq .buildid)
echo "Extending $TAR_STAMP with:"
echo "RELEASE_REPO=${SOURCE_REPO}"
@ -103,39 +153,43 @@ function get_source_stamp() {
}
function get_build_number() {
LAST_FOUND=""
VERSION_WITH_SUFFIX="$1"
BUILD_ID=$(curl --silent "$PRODUCT_URL" | jq -e '.["releases"] | .["'$PRODUCT-$VERSION_WITH_SUFFIX'"] | .["build_number"]')
local LAST_FOUND=""
local CURR_PRODUCT="$1"
local VERSION_WITH_SUFFIX="$2"
local CURR_BUILD_ID=""
local CURR_FTP_BASE_URL=""
CURR_BUILD_ID=$(curl --silent "$PRODUCT_URL/$CURR_PRODUCT.json" | jq -e '.["releases"] | .["'$CURR_PRODUCT-$VERSION_WITH_SUFFIX'"] | .["build_number"]')
# Slow fall-back
if [ $? -ne 0 ]; then
echo "Build number not found in product URL, falling back to slow FTP-parsing." 1>&2
FTP_CANDIDATES_BASE_URL=$(get_ftp_candidates_url $VERSION_WITH_SUFFIX)
CURR_FTP_BASE_URL=$(get_ftp_candidates_url "$CURR_PRODUCT" "$VERSION_WITH_SUFFIX")
# Unfortunately, locales-files are not associated to releases, but to builds.
# And since we don't know which build was the final build, we grep them all from
# the candidates-page, sort them and take the last one which should be the oldest
# Error only if not even the first one exists
LAST_FOUND=$(curl --silent --fail "$FTP_CANDIDATES_BASE_URL/" | grep -o "build[0-9]*/" | sort | uniq | tail -n 1 | cut -d "/" -f 1)
LAST_FOUND=$(curl --silent --fail "$CURR_FTP_BASE_URL/" | grep -o "build[0-9]*/" | sort | uniq | tail -n 1 | cut -d "/" -f 1)
else
LAST_FOUND="build$BUILD_ID"
LAST_FOUND="build$CURR_BUILD_ID"
fi
if [ "$LAST_FOUND" != "" ]; then
echo "$LAST_FOUND"
return 0
else
echo "Error: Could not find build-number for Firefox $VERSION_WITH_SUFFIX !" 1>&2
echo "Error: Could not find build-number for $CURR_PRODUCT $VERSION_WITH_SUFFIX !" 1>&2
return 1
fi
}
function locales_get() {
TMP_VERSION="$1"
BUILD_ID="$2"
URL_TO_CHECK="${LOCALES_URL}-${TMP_VERSION}"
FINAL_URL="${URL_TO_CHECK}-${BUILD_ID}.json"
local CURR_PRODUCT="$1"
local TMP_VERSION="$2"
local CURR_BUILD_ID="$3"
# Make first letter of CURR_PRODUCT upper case
CURR_PRODUCT_CAP="${CURR_PRODUCT^}"
URL_TO_CHECK="${LOCALES_URL}/${CURR_PRODUCT_CAP}-${TMP_VERSION}"
FINAL_URL="${URL_TO_CHECK}-${CURR_BUILD_ID}.json"
if wget --quiet --spider "$FINAL_URL"; then
echo "$FINAL_URL"
return 0
@ -145,87 +199,200 @@ function locales_get() {
fi
}
function locales_parse() {
function locales_parse_file() {
FILE="$1"
python3 -c "import json; import sys; \
print('\n'.join(['{} {}'.format(key, value['revision']) \
for key, value in sorted(json.load(sys.stdin).items())]));" < "$FILE"
}
function locales_parse_url() {
URL="$1"
curl -s "$URL" | python -c "import json; import sys; \
curl -s "$URL" | python3 -c "import json; import sys; \
print('\n'.join(['{} {}'.format(key, value['changeset']) \
for key, value in sorted(json.load(sys.stdin)['locales'].items())]));"
}
function locales_unchanged() {
BUILD_ID="$1"
PREV_BUILD_ID=$(get_build_number "$PREV_VERSION$PREV_VERSION_SUFFIX")
# If no json-file for one of the versions can be found, we say "they changed"
prev_url=$(locales_get "$PREV_VERSION$PREV_VERSION_SUFFIX" "$PREV_BUILD_ID") || return 1
curr_url=$(locales_get "$VERSION$VERSION_SUFFIX" "$BUILD_ID") || return 1
function extract_locales_file() {
if [ $ALREADY_EXTRACTED_LOCALES_FILE -ne 1 ]; then
# still need to extract the locale information from the archive
echo "extract locale changesets"
if [ "$PRODUCT" = "thunderbird" ]; then
tar -xf "$SOURCE_TARBALL" "$FF_LOCALE_FILE" "$TB_LOCALE_FILE" "$L10N_STRING_PATTERNS"
else
tar -xf "$SOURCE_TARBALL" "$FF_LOCALE_FILE"
fi
ALREADY_EXTRACTED_LOCALES_FILE=1
else
echo "Skipping locale changeset extraction, as it was already done."
fi
}
prev_content=$(locales_parse "$prev_url") || exit 1
curr_content=$(locales_parse "$curr_url") || exit 1
function locales_unchanged() {
local CURR_PRODUCT="$1"
local CURR_BUILD_ID="$2"
local PREV_BUILD_ID=$(get_build_number "$CURR_PRODUCT" "$PREV_VERSION$PREV_VERSION_SUFFIX")
# If no json-file for one of the versions can be found, we say "they changed"
prev_url=$(locales_get "$CURR_PRODUCT" "$PREV_VERSION$PREV_VERSION_SUFFIX" "$PREV_BUILD_ID") || return 1
prev_content=$(locales_parse_url "$prev_url") || exit 1
curr_url=$(locales_get "$CURR_PRODUCT" "$VERSION$VERSION_SUFFIX" "$CURR_BUILD_ID")
if [ $? -ne 0 ]; then
# We did not find a locales file upstream on the servers
if [ -e "$SOURCE_TARBALL" ]; then
# We can find out what the locales are, by extracting the json-file from the tar-ball
# instead of getting it from the server
extract_locales_file || return 1
curr_content=$(locales_parse_file "$FF_LOCALE_FILE") || exit 1
else
# We can't know what the locales are in the current version
return 1
fi
else
curr_content=$(locales_parse_url "$curr_url") || exit 1
fi
diff -y --suppress-common-lines -d <(echo "$prev_content") <(echo "$curr_content")
}
# check required tools
check_for_binary /usr/bin/hg "mercurial"
check_for_binary /usr/bin/jq "jq"
which python > /dev/null || exit 1
function get_locales_directories() {
pattern="$1"
# use parallel compression, if available
compression='-J'
pixz -h > /dev/null 2>&1
if (($? != 127)); then
compression='-Ipixz'
fi
# Get ID
BUILD_ID=$(get_build_number "$VERSION$VERSION_SUFFIX")
if [ -z ${SKIP_LOCALES+x} ]; then
# TODO: Thunderbird has usually "default" as locale entry.
# There we probably need to double-check Firefox-locals
# For now, just download every time for Thunderbird
if [ "$PRODUCT" = "firefox" ] && [ "$PREV_VERSION" != "" ] && locales_unchanged "$BUILD_ID"; then
printf "%-40s: Did not change. Skipping.\n" "locales"
LOCALES_CHANGED=0
# This file contains a list of directories, upstream uses to build locales
# If it is there, use it. If not, default to all FF + 3 TB-dirs.
if [ -e "$L10N_STRING_PATTERNS" ]; then
python3 -c "import os; import sys; \
sys.path.append(os.path.dirname(\"$L10N_STRING_PATTERNS\")); \
from l10n_merge import $pattern; \
print(\" \".join([p.strip('*') for p in $pattern]));"
else
if [ "$pattern" = "GECKO_STRINGS_PATTERNS" ]; then
# Default of Firefox: Take all
echo "{lang}/"
else
# Default of Thunderbird: Take those 3 dirs
echo "{lang}/calendar/" "{lang}/chat/" "{lang}/mail/"
fi
fi
}
function create_and_copy_locales() {
locale="$1"
source_base="$2"
source_template="$3"
final_dest="$4"
# Replace {lang} with the actual language-basedir
for template in $source_template; do
locale_source=$(echo "$template" | sed "s|{lang}|./$source_base/$locale|g")
locale_dest=$(echo "$template" | sed "s|{lang}|./$final_dest/$locale|g")
# Create intermediary folders
for destdir in $locale_dest; do
mkdir -p "$destdir"
done
# Copy over FF-files
cp -r "$locale_source"/* "$locale_dest"
done
}
function check_what_to_do_with_source_tarballs() {
# Get ID
BUILD_ID=$(get_build_number "$PRODUCT" "$VERSION$VERSION_SUFFIX")
# Check what is going to be done and ask for consent
for ff in $SOURCE_TARBALL $SOURCE_TARBALL.asc; do
printf "%-40s: %s\n" "$ff" "$(check_tarball_source $ff)"
done
if [ "$PRODUCT" = "thunderbird" ]; then
printf "%-40s: %s\n" "$TB_LOCALE_TARBALL" "$(check_tarball_source $TB_LOCALE_TARBALL)"
fi
ask_cont_abort_question "Is this ok?" || exit 0
}
function check_what_to_do_with_locales_tarballs() {
if [ -e "$TB_LOCALE_TARBALL" ]; then
return;
fi
LOCALES_CHANGED=1
extract_locales_file
if [ "$PREV_VERSION" != "" ]; then
# If we have a previous version, check either FF or (TB and FF)
if [ "$PRODUCT" = "firefox" ]; then
locales_unchanged "$PRODUCT" "$BUILD_ID"
else
# Currently, upstream 'forgets' which Firefox-locales get used for which Thunderbird-release upon release
# so, instead of parsing upstream JSON-files, we rely on the previous tarball being there and comparing
# the lang-files directly
# FF_BUILD_ID=$(get_build_number "firefox" "$VERSION$VERSION_SUFFIX")
# locales_unchanged "$PRODUCT" "$BUILD_ID" && locales_unchanged "firefox" "$FF_BUILD_ID"
if [ -e "$PREV_SOURCE_TARBALL" ]; then
echo "extract previous locale changesets"
tar -xf "$PREV_SOURCE_TARBALL" "$FF_PREV_LOCALE_FILE" "$TB_PREV_LOCALE_FILE"
curr_ff_content=$(locales_parse_file "$FF_LOCALE_FILE") || exit 1
prev_ff_content=$(locales_parse_file "$FF_PREV_LOCALE_FILE") || exit 1
curr_tb_content=$(locales_parse_file "$TB_LOCALE_FILE") || exit 1
prev_tb_content=$(locales_parse_file "$TB_PREV_LOCALE_FILE") || exit 1
diff -y --suppress-common-lines -d <(echo "$prev_ff_content") <(echo "$curr_ff_content") ||
diff -y --suppress-common-lines -d <(echo "$prev_tb_content") <(echo "$curr_tb_content")
fi
fi
LOCALES_CHANGED=$?
fi
# New line for better visibility
echo ""
if [ $LOCALES_CHANGED -eq 1 ]; then
printf "%-40s: Need to download.\n" "locales"
LOCALES_CHANGED=1
ask_cont_abort_question "Is this ok?" || exit 0
else
printf "%-40s: Did not change. Skipping.\n" "locales"
fi
else
printf "%-40s: User forced skip (SKIP_LOCALES set)\n" "locales"
fi
}
# Check what is going to be done and ask for consent
for ff in $SOURCE_TARBALL $SOURCE_TARBALL.asc; do
printf "%-40s: %s\n" $ff "$(check_tarball_source $ff)"
done
$(ask_cont_abort_question "Is this ok?") || exit 0
# Try to download tar-ball from officiall mozilla-mirror
if [ ! -e $SOURCE_TARBALL ]; then
wget https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source/$SOURCE_TARBALL
fi
# including signature
if [ ! -e $SOURCE_TARBALL.asc ]; then
wget https://ftp.mozilla.org/pub/$PRODUCT/releases/$VERSION$VERSION_SUFFIX/source/$SOURCE_TARBALL.asc
fi
# we might have an upstream archive already and can skip the checkout
if [ -e $SOURCE_TARBALL ]; then
if [ -z ${SKIP_LOCALES+x} ] && [ $LOCALES_CHANGED -ne 0 ]; then
# still need to extract the locale information from the archive
echo "extract locale changesets"
tar -xf $SOURCE_TARBALL $LOCALE_FILE
function download_release_or_candidate_file() {
local upstream_file="$1"
if [ -e "$upstream_file" ]; then
return;
fi
get_source_stamp "$BUILD_ID"
else
# We are working on a version that is not yet published on the mozilla mirror
# so we have to actually check out the repo
# mozilla
if [ -d $PRODUCT-$VERSION ]; then
pushd $PRODUCT-$VERSION || exit 1
if ! wget --quiet --show-progress --progress=bar "$FTP_URL/$upstream_file"; then
local CANDIDATE_TARBALL_LOCATION=""
CANDIDATE_TARBALL_LOCATION="$(printf "%s/%s/source/%s" "$(get_ftp_candidates_url "$PRODUCT" "$VERSION$VERSION_SUFFIX")" "$BUILD_ID" "$upstream_file" )"
wget --quiet --show-progress --progress=bar "$CANDIDATE_TARBALL_LOCATION"
fi
}
function download_upstream_source_tarballs() {
# Try to download tar-ball from officiall mozilla-mirror
download_release_or_candidate_file "$SOURCE_TARBALL"
download_release_or_candidate_file "$SOURCE_TARBALL.asc"
if [ "$PRODUCT" = "thunderbird" ]; then
download_release_or_candidate_file "$TB_LOCALE_TARBALL"
fi
# we might have an upstream archive already and can skip the checkout
if [ -e "$SOURCE_TARBALL" ]; then
get_source_stamp "$BUILD_ID"
else
# We are working on a version that is not yet published on the mozilla mirror
# so we have to actually check out the repo
clone_and_repackage_sources
fi
}
function clone_and_repackage_sources() {
if [ -d "$PRODUCT-$VERSION" ]; then
pushd "$PRODUCT-$VERSION" || exit 1
_repourl=$(hg paths)
case "$_repourl" in
*$BRANCH*)
@ -236,18 +403,18 @@ else
* )
echo "removing obsolete tree"
popd || exit 1
rm -rf $PRODUCT-$VERSION
rm -rf "$PRODUCT-$VERSION"
;;
esac
fi
if [ ! -d $PRODUCT-$VERSION ]; then
if [ ! -d "$PRODUCT-$VERSION" ]; then
echo "cloning new $BRANCH..."
hg clone http://hg.mozilla.org/$BRANCH $PRODUCT-$VERSION
hg clone "https://hg.mozilla.org/$BRANCH $PRODUCT-$VERSION"
if [ "$PRODUCT" = "thunderbird" ]; then
hg clone http://hg.mozilla.org/releases/comm-$CHANNEL $PRODUCT-$VERSION/comm
hg clone "https://hg.mozilla.org/releases/comm-$CHANNEL" "$PRODUCT-$VERSION/comm"
fi
fi
pushd $PRODUCT-$VERSION || exit 1
pushd "$PRODUCT-$VERSION" || exit 1
# parse out the Firefox-release tag for this Thunderbird-checkout
if [ "$PRODUCT" = "thunderbird" ]; then
@ -257,18 +424,18 @@ else
FF_RELEASE_TAG="$RELEASE_TAG"
fi
hg update --check $FF_RELEASE_TAG
[ "$FF_RELEASE_TAG" == "default" ] || hg update -r $FF_RELEASE_TAG
hg update --check "$FF_RELEASE_TAG"
[ "$FF_RELEASE_TAG" == "default" ] || hg update -r "$FF_RELEASE_TAG"
# get repo and source stamp
REV=$(hg -R . parent --template="{node|short}\n")
SOURCE_REPO=$(hg showconfig paths.default 2>/dev/null | head -n1 | sed -e "s/^ssh:/http:/")
local REV=$(hg -R . parent --template="{node|short}\n")
local SOURCE_REPO=$(hg showconfig paths.default 2>/dev/null | head -n1 | sed -e "s/^ssh:/https:/")
TIMESTAMP=$(date +%Y%m%d%H%M%S)
if [ "$PRODUCT" = "thunderbird" ]; then
pushd comm || exit 1
hg update --check $RELEASE_TAG
hg update --check "$RELEASE_TAG"
popd || exit 1
rm -rf thunderbird-${VERSION}/{,comm/}other-licenses/7zstub
rm -rf thunderbird-"${VERSION}"/{,comm/}other-licenses/7zstub
fi
popd || exit 1
@ -286,48 +453,123 @@ else
echo "RELEASE_TIMESTAMP=$TIMESTAMP" >> "$TAR_STAMP"
echo "creating archive..."
tar $compression -cf $PRODUCT-$VERSION$VERSION_SUFFIX.source.tar.xz --exclude=.hgtags --exclude=.hgignore --exclude=.hg --exclude=CVS $PRODUCT-$VERSION
fi
tar "$compression" -cf "$PRODUCT-$VERSION$VERSION_SUFFIX.source.tar.xz" --exclude-vcs "$PRODUCT-$VERSION"
ALREADY_EXTRACTED_LOCALES_FILE=1
}
if [ ! -z ${SKIP_LOCALES+x} ]; then
echo "Skipping locales-creation."
exit 0
fi
if [ $LOCALES_CHANGED -ne 0 ]; then
# l10n
echo "fetching locales..."
test ! -d l10n && mkdir l10n
jq -r 'to_entries[]| "\(.key) \(.value|.revision)"' $LOCALE_FILE | \
while read locale changeset ; do
case $locale in
ja-JP-mac|en-US)
;;
*)
echo "reading changeset information for $locale"
echo "fetching $locale changeset $changeset ..."
if [ -d "l10n/$locale/.hg" ]; then
pushd "l10n/$locale" || exit 1
hg pull
popd || exit 1
else
hg clone "http://hg.mozilla.org/l10n-central/$locale" "l10n/$locale"
fi
[ "$RELEASE_TAG" == "default" ] || hg -R "l10n/$locale" up -C -r "$changeset"
;;
esac
done
echo "creating l10n archive..."
if [ "$PRODUCT" = "thunderbird" ]; then
TB_TAR_FLAGS="--exclude=browser --exclude=suite"
function create_locales_tarballs() {
if [ ! -z ${SKIP_LOCALES+x} ]; then
echo "Skipping locales-creation."
exit 0
fi
tar $compression -cf l10n-$VERSION$VERSION_SUFFIX.tar.xz \
--exclude=.hgtags --exclude=.hgignore --exclude=.hg \
$TB_TAR_FLAGS \
l10n
elif [ -f "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz" ]; then
# Locales did not change, but the old tar-ball is in this directory
# Simply rename it:
echo "Moving l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz to l10n-$VERSION$VERSION_SUFFIX.tar.xz"
mv "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz" "l10n-$VERSION$VERSION_SUFFIX.tar.xz"
fi
if [ -e "$TB_LOCALE_TARBALL" ]; then
echo "Repackaging upstream lang-tarball."
zstd -dcf "$TB_LOCALE_TARBALL" | xz > "l10n-$VERSION$VERSION_SUFFIX.tar.xz"
else
if [ "$LOCALES_CHANGED" -ne 0 ]; then
clone_and_repackage_locales
elif [ -f "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz" ]; then
# Locales did not change, but the old tar-ball is in this directory
# Simply rename it:
echo "Moving l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz to l10n-$VERSION$VERSION_SUFFIX.tar.xz"
mv "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz" "l10n-$VERSION$VERSION_SUFFIX.tar.xz"
fi
fi
}
function clone_and_repackage_locales() {
# l10n
FINAL_L10N_BASE="l10n"
FF_L10N_BASE="l10n" # Only change this in TB-builds to a separate dir
TB_L10N_BASE="l10n_tb"
# If we are doing Thunderbird, we'll have to checkout both TB and FF l10n-repos
# Thunderbird has one single mono-repo, FF has one for each language
if [ "$PRODUCT" = "thunderbird" ]; then
echo "Fetching Thunderbird locales..."
if [ -d "$TB_L10N_BASE/.hg" ]; then
pushd "$TB_L10N_BASE/" || exit 1
hg pull || exit 1
popd || exit 1
else
hg clone "https://hg.mozilla.org/projects/comm-l10n/" "$TB_L10N_BASE/" || exit 1
fi
# Just using the first entry here, as all languages have the same changeset
tb_changeset=$(jq -r 'to_entries[0]| "\(.key) \(.value|.revision)"' "$TB_LOCALE_FILE" | cut -d " " -f 2)
[ "$RELEASE_TAG" == "default" ] || hg -R "$TB_L10N_BASE/" up -C -r "$tb_changeset" || exit 1
FF_L10N_BASE="l10n_ff"
fi
# This is only relevant for Thunderbird-builds
# Here, the relevant directories we need to copy from FF and from TB
# are specified in a python-file in the tarball
# Is of form '{lang}/Foo/bar/ {lang}/Baz/bar/ ..'
ff_locale_template=$(get_locales_directories "GECKO_STRINGS_PATTERNS")
tb_locale_template=$(get_locales_directories "COMM_STRINGS_PATTERNS")
echo "Fetching Browser locales..."
if [ -d "$FF_L10N_BASE/.git" ]; then
pushd "$FF_L10N_BASE/" || exit 1
git fetch -a || exit 1
popd || exit 1
else
git clone "$FF_L10N_MONOREPO" "$FF_L10N_BASE" || exit 1
fi
# Currently all locales show the same changeset-hash, as they moved to a monorepo. We just take the first one.
changeset=$(jq -r 'to_entries[0]| "\(.key) \(.value|.revision)"' "$FF_LOCALE_FILE" | cut -d " " -f 2)
[ "$RELEASE_TAG" == "default" ] || git -C "$FF_L10N_BASE/" switch --detach "$changeset" || exit 1
# No-op, if we are building FF:
test ! -d $FINAL_L10N_BASE && mkdir $FINAL_L10N_BASE
# If we are doing TB, we have to merge both l10n-repos
if [ "$PRODUCT" = "thunderbird" ] && test -d "$TB_L10N_BASE/$locale/" ; then
jq -r 'to_entries[]| "\(.key) \(.value|.revision)"' "$FF_LOCALE_FILE" | \
while read -r locale changeset ; do
case $locale in
ja-JP-mac|en-US)
;;
*)
create_and_copy_locales "$locale" "$FF_L10N_BASE" "$ff_locale_template" "$FINAL_L10N_BASE"
create_and_copy_locales "$locale" "$TB_L10N_BASE" "$tb_locale_template" "$FINAL_L10N_BASE"
;;
esac
done
fi
echo "creating l10n archive..."
local TAR_FLAGS="--exclude-vcs"
# For reproducable tarballs
# Convert TIMESTAMP to ISO-format, so tar can understand it, then set mtime to it
local MTIME=$(python3 -c "from datetime import datetime; print(datetime.strptime(${TIMESTAMP}, '%Y%m%d%H%M%S').isoformat())")
TAR_FLAGS="$TAR_FLAGS --sort=name --format=posix --pax-option=delete=atime,delete=ctime,exthdr.name=%d/PaxHeaders/%f --numeric-owner --owner=0 --group=0 --mode=go+u,go-w --clamp-mtime --mtime=$MTIME"
if [ "$PRODUCT" = "thunderbird" ]; then
TAR_FLAGS="$TAR_FLAGS --exclude=suite"
fi
tar "$compression" -cf "l10n-$VERSION$VERSION_SUFFIX.tar.xz" $TAR_FLAGS "$FINAL_L10N_BASE"
}
function clean_up_old_tarballs() {
if [ -e "$PREV_SOURCE_TARBALL" ]; then
echo ""
echo "Deleting old sources tarball $PREV_SOURCE_TARBALL"
ask_cont_abort_question "Is this ok?" || exit 0
rm "$PREV_SOURCE_TARBALL"
rm "$PREV_SOURCE_TARBALL.asc"
# if old and new lang-tarball are there, delete the old one
if [ -f "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz" ] && [ -f "l10n-$VERSION$VERSION_SUFFIX.tar.xz" ]; then
rm "l10n-$PREV_VERSION$PREV_VERSION_SUFFIX.tar.xz"
fi
fi
# If we downloaded the upstream zstd-tarball and repackaged it, remove it now
if [ -f "$TB_LOCALE_TARBALL" ] && [ -f "l10n-$VERSION$VERSION_SUFFIX.tar.xz" ]; then
echo ""
echo "Deleting old sources tarball $TB_LOCALE_TARBALL"
ask_cont_abort_question "Is this ok?" || exit 0
rm "$TB_LOCALE_TARBALL"
fi
}
main "$@"

BIN
firefox-128.5.1esr.source.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEErdcHlHlwDcrf3VM34207E/PZMnQFAmdIvLkACgkQ4207E/PZ
MnTntg//WWqNvoivQlg1oQTnYMfYp670oB3DkJvC0LnsGGLrPCqvlgQQxUBgFP2R
fP7PIoZWUZR5yFBuX/81uYrIL2svM5BVIqEec5swXe32gmuK14R3jG0IIeh5d3hu
oSVRL9/j+jQXe/sFIwqutCcr3WABhOPjEmCfjcDOO6SqKChe3XfTo7y0IEBq+pHI
acuhw6RwfBZr8smMMWSPvolKJaGs/Nl2ZEAvgjPwfgTVwZt8+2lVg831kzxd/iXf
1tsikXtslJsUVj7Yx1L8opnG51QBwIUxGGcoJUGFkY8ce9zM+z5OgEIwWqqFMjtA
gfrvH0iy659q960Y/wF00EzH6vno3LFH4/CMQG04IURViyFqEGOgQi7lD2+Q4EMp
CN08V5GOQ1n6CukSHx3CF8ujQavhdUrFlfB+pNsc6zJSsr/FTV2CD6HEgclh0bBc
tMDCICV4A/eVQ8vG3fZIzV/vNv0qZsY+dvJ7RHE6qbTaL3VmrmF4iyrm+avPcZQG
Aee3dKmD6uhzEKNNxvPkbvHVkwuffS9RX6Dc75vp3Sw2cgba8lW5URRk+NtpiWHQ
pq7rRSPgCAtt+k0FtryGVeckGjvz/K11azGxOU0EoD/SM6hX0keoDrqalrxgDDtk
FJmkIu6Po3W0EyexaFBYbFxxTg1MVCT+TbJdY0woxcBc2WttapQ=
=MRPV
-----END PGP SIGNATURE-----

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a00a7712d0f919162ce8181a9a3fc3e9ef37adf1caff0945a863b4c0c1d9f360
size 318559576

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEECXsxMHeuYqAvhNpN8aZmj7t9Vy4FAl4VMc4ACgkQ8aZmj7t9
Vy7UAA/9EBN51JdLRfJGOhXRTZtlwVzHkWz5NU2TqY4mwyOh7hp4t8Ip3NqMuGNS
vP8ApZz3gTIzisi/pnR89eCGrT3HvoWo9wOrlbaQNZJaN705/NOkN+2uzBV1TreL
yZVNaj9h6qP6Qgbk5nhhxygIFoDBv4BioJS6Z7bYxST9l/wKs5bfMSZ3IldTDN40
/qdkr1z5Z3uvuENNDxVgUlWhUfPj8wLVtNXY8XQfKMFntouX6CJP6uramB3bUCq/
W2O0Si9JDlrqNo6o13O3tjHhgLoplqD7jIdnJjLM7WocjtJT53b9wEFIHN8bc7qM
eBHOlaZ+7mITGQm4W7XRx2lkSPRy+Hw8Gv5D+9HTTzWcZViGKayz2r8FbwumU7+N
FGunBYDd9ip0ku2E9oZjOpJiWjbS9kt+HKh1Zy7PijjuDY7EEy/C58HbwYzZwru4
hlVXSffgfSmCODDS44miiYV+/BFABjPj5XbwLniG6WrwE5pMsb3Z13kHDCdEBSsp
hG0fTZbJujb/iB2XpygV68pJXCucr67FLPZsrwaMMZbbVhpDpdkLl0XvqpEkOn/B
10LKx8QrS7B1kBX+Yozj8YqOIK/YnrnqrSq9rPekplvE4eLk/23RDewtmVqhU1uR
yCpdi+IZ3cHYRPTDdsrciEzcT2BfkVAAlPDnSRhinFBUsK1vTJ0=
=o4gD
-----END PGP SIGNATURE-----

View File

@ -10,7 +10,7 @@ so maintain a stub in here.
<name>Firefox Web Browser</name>
<project_license>MPL-2.0</project_license>
<summary>Mozilla Firefox Web Browser</summary>
<url type="homepage">http://www.mozilla.org/</url>
<url type="homepage">https://www.mozilla.org/</url>
<description>
<p>Mozilla Firefox is a standalone web browser, designed for privacy, security, standards
compliance and performance. Its functionality can be enhanced via a plethora of extensions.</p>

View File

@ -1,36 +1,36 @@
# HG changeset patch
# Parent e0751ad74e835e80041a61ea00c2a63bf6fbe2de
# Parent 8a401a01454e9f5e8a357262d774e0ff348d9bc1
# Parent ebf6598a9309200fcea0cedb08e39161b82a73f9
diff --git a/browser/branding/branding-common.mozbuild b/browser/branding/branding-common.mozbuild
--- a/browser/branding/branding-common.mozbuild
+++ b/browser/branding/branding-common.mozbuild
@@ -22,12 +22,15 @@ def FirefoxBranding():
FINAL_TARGET_FILES.VisualElements += [
'VisualElements_150.png',
'VisualElements_70.png',
@@ -26,12 +26,15 @@ def FirefoxBranding():
"PrivateBrowsing_70.png",
"VisualElements_150.png",
"VisualElements_70.png",
]
elif 'gtk' in CONFIG['MOZ_WIDGET_TOOLKIT']:
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
FINAL_TARGET_FILES.chrome.icons.default += [
'default128.png',
'default16.png',
+ 'default22.png',
+ 'default24.png',
+ 'default256.png',
'default32.png',
'default48.png',
'default64.png',
"default128.png",
"default16.png",
+ "default22.png",
+ "default24.png",
+ "default256.png",
"default32.png",
"default48.png",
"default64.png",
]
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -404,20 +404,23 @@
@RESPATH@/browser/chrome/pdfjs.manifest
@RESPATH@/browser/chrome/pdfjs/*
@@ -216,20 +216,23 @@
@RESPATH@/browser/chrome/browser@JAREXT@
@RESPATH@/browser/chrome/browser.manifest
@RESPATH@/chrome/pdfjs.manifest
@RESPATH@/chrome/pdfjs/*
@RESPATH@/chrome/toolkit@JAREXT@
@RESPATH@/chrome/toolkit.manifest
@RESPATH@/chrome/recording.manifest
@RESPATH@/chrome/recording/*
#ifdef MOZ_GTK
@RESPATH@/browser/chrome/icons/default/default16.png
+@RESPATH@/browser/chrome/icons/default/default22.png
@ -43,8 +43,8 @@ diff --git a/browser/installer/package-manifest.in b/browser/installer/package-m
#endif
@RESPATH@/browser/features/*
; [Webide Files]
@RESPATH@/browser/chrome/webide@JAREXT@
@RESPATH@/browser/chrome/webide.manifest
@RESPATH@/browser/@PREF_DIR@/webide.js
; [DevTools Startup Files]
@RESPATH@/browser/chrome/devtools-startup@JAREXT@
@RESPATH@/browser/chrome/devtools-startup.manifest
; DevTools

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
#
# spec file for package firefox-esr
#
# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
# 2006-2019 Wolfgang Rosenauer <wr@rosenauer.org>
# Copyright (c) 2024 SUSE LLC
# Copyright (c) 2006-2024 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
@ -16,17 +16,22 @@
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
# either MozillaFirefox or firefox-esr
# either firefox-esr or MozillaFirefox
%if 0%{?suse_version} > 1549
# On Tumbleweed this package is always called firefox-esr
%define pkgname firefox-esr
%else
# On SLE/Leap this package is called MozillaFirefox unless ff_esr_name overrules it
%if "0%{?ff_esr_name}" != "0"
%define pkgname %{ff_esr_name}
%else
%if 0%{?suse_version} > 1549
%define pkgname firefox-esr
%else
%define pkgname MozillaFirefox
%endif
%endif
%define _dwz_low_mem_die_limit 40000000
%define _dwz_max_die_limit 200000000
# changed with every update
# orig_version vs. mainver: To have beta-builds
# FF70beta3 would be released as FF69.99
@ -34,29 +39,41 @@
# orig_version 70.0
# orig_suffix b3
# major 69
# mainver %major.99
%define major 68
%define mainver %major.4.1
%define orig_version 68.4.1
# mainver %%major.99
%define major 128
%define mainver %major.5.1
%define orig_version 128.5.1
%define orig_suffix esr
%define update_channel esr68
%define update_channel esr
%define branding 1
%define devpkg 0
# always build with GCC as SUSE Security Team requires that
%define clang_build 0
# PGO builds do not work in TW currently (bmo#1680306)
%define do_profiling 0
# PIE, full relro
%define build_hardened 1
# upstream default is clang (to use gcc for large parts set to 0)
%define clang_build 0
%bcond_with only_print_mozconfig
# define if ccache should be used or not
%define useccache 0
# SLE-12 doesn't have this macro
%{!?_rpmmacrodir: %global _rpmmacrodir %{_rpmconfigdir}/macros.d}
# No i586 on SLE-12, as the rpmlints are broken and can't handle the big rpms resulting from this build.
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} < 150000
ExclusiveArch: aarch64 ppc64le x86_64 s390x
%else
# Firefox only supports i686
%ifarch %ix86
ExclusiveArch: i586 i686
BuildArch: i686
%{expand:%%global optflags %(echo "%optflags"|sed -e s/i586/i686/) -march=i686 -mtune=generic}
%{expand:%%global optflags %(echo "%optflags"|sed -e s/i586/i686/) -march=i686 -mtune=generic -msse2}
%endif
%endif
%{expand:%%global optflags %(echo "%optflags"|sed -e s/-flto=auto//) }
# general build definitions
%if "%{pkgname}" == "firefox-esr"
@ -66,20 +83,27 @@ BuildArch: i686
%define progname firefox
%define appname Firefox
%endif
%define srcname firefox
%define progdir %{_prefix}/%_lib/%{progname}
%define gnome_dir %{_prefix}
%define desktop_file_name %{progname}
%define firefox_appid \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\}
%define __provides_exclude ^lib.*\\.so.*$
%define __requires_exclude ^(libmoz.*|liblgpllibs.*|libxul.*)$
%define __requires_exclude ^(libmoz.*|liblgpllibs.*|libxul.*|libgk.*)$
%define localize 1
%ifarch %ix86 x86_64
%define crashreporter 1
%else
%define crashreporter 0
%endif
%define with_pipewire0_3 1
%define wayland_supported 1
%if 0%{?sle_version} > 0 && 0%{?sle_version} < 150200
# pipewire is too old on Leap <=15.1
%define with_pipewire0_3 0
# Wayland is too old on Leap <=15.1 as well
%define wayland_supported 0
%endif
Name: %{pkgname}
BuildRequires: Mesa-devel
@ -89,37 +113,47 @@ BuildRequires: dbus-1-glib-devel
BuildRequires: dejavu-fonts
BuildRequires: fdupes
BuildRequires: memory-constraints
%if 0%{?suse_version} <= 1320
BuildRequires: gcc7-c++
%if 0%{?suse_version} < 1550 && 0%{?sle_version} <= 150600
BuildRequires: gcc13
BuildRequires: gcc13-c++
%else
BuildRequires: gcc-c++
%endif
BuildRequires: cargo >= 1.34
BuildRequires: cargo1.78
BuildRequires: rust1.78
%if 0%{useccache} != 0
BuildRequires: ccache
%endif
BuildRequires: libXcomposite-devel
BuildRequires: libcurl-devel
BuildRequires: libidl-devel
BuildRequires: libiw-devel
BuildRequires: libnotify-devel
BuildRequires: libproxy-devel
BuildRequires: makeinfo
BuildRequires: mozilla-nspr-devel >= 4.21
BuildRequires: mozilla-nss-devel >= 3.44.1
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} < 150000 && !0%{?is_opensuse}
BuildRequires: firefox-nasm >= 2.13
BuildRequires: nodejs10
#BuildRequires: python2-xml
BuildRequires: mozilla-nspr-devel >= 4.35
BuildRequires: mozilla-nss-devel >= 3.100
BuildRequires: nasm >= 2.14
BuildRequires: nodejs >= 12.22.12
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} < 150000
BuildRequires: libXtst-devel
BuildRequires: python-libxml2
BuildRequires: python39
BuildRequires: python39-curses
BuildRequires: python39-devel
%else
BuildRequires: nasm >= 2.13
BuildRequires: nodejs8 >= 8.11
BuildRequires: python2-xml
%if 0%{?sle_version} > 150000 && 0%{?sle_version} <= 150600
BuildRequires: nodejs12 >= 12.22.12
BuildRequires: python39
BuildRequires: python39-curses
BuildRequires: python39-devel
%else
# ALP
BuildRequires: nodejs >= 12.22.12
BuildRequires: python3 >= 3.7
BuildRequires: python3-curses
BuildRequires: python3-devel
%endif
# Official requirement is 3.5, but for SLE-12 we lower (patch) the
# requirement to 3.4, as thats the python-version we have there
BuildRequires: python3 >= 3.4
BuildRequires: python-devel
BuildRequires: rust >= 1.34
BuildRequires: rust-cbindgen >= 0.8.7
BuildRequires: startup-notification-devel
%endif
BuildRequires: rust-cbindgen >= 0.26
BuildRequires: unzip
BuildRequires: update-desktop-files
BuildRequires: xorg-x11-libXt-devel
@ -131,20 +165,19 @@ BuildRequires: zip
%if 0%{?suse_version} < 1550
BuildRequires: pkgconfig(gconf-2.0) >= 1.2.1
%endif
BuildRequires: pkgconfig(gdk-x11-2.0)
%if 0%{?suse_version} < 1599
BuildRequires: clang15-devel
%else
BuildRequires: clang18-devel
%endif
BuildRequires: pkgconfig(glib-2.0) >= 2.22
BuildRequires: pkgconfig(gobject-2.0)
BuildRequires: pkgconfig(gtk+-2.0) >= 2.18.0
BuildRequires: pkgconfig(gtk+-3.0) >= 3.4.0
BuildRequires: pkgconfig(gtk+-unix-print-2.0)
BuildRequires: pkgconfig(gtk+-3.0) >= 3.14.0
BuildRequires: pkgconfig(gtk+-unix-print-3.0)
BuildRequires: pkgconfig(libffi)
BuildRequires: pkgconfig(libpulse)
%if 0%{?suse_version} > 1320
BuildRequires: llvm-clang-devel >= 3.9.0
%else
# this covers the workaround to compile on Leap 42 in OBS
BuildRequires: clang4-devel
%if %{with_pipewire0_3}
BuildRequires: pkgconfig(libpipewire-0.3)
%endif
# libavcodec is required for H.264 support but the
# openSUSE version is currently not able to play H.264
@ -160,29 +193,28 @@ Provides: firefox = %{version}-%{release}
Provides: web_browser
Provides: appdata()
Provides: appdata(firefox.appdata.xml)
# this is needed to match this package with the kde4 helper package without the main package
# having a hard requirement on the kde4 package
%define kde_helper_version 6
Provides: mozilla-kde4-version = %{kde_helper_version}
Summary: Mozilla %{appname} Web Browser
License: MPL-2.0
Group: Productivity/Networking/Web/Browsers
Url: http://www.mozilla.org/
URL: http://www.mozilla.org/
%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
%if %{localize}
Source7: l10n-%{orig_version}%{orig_suffix}.tar.xz
%endif
Source8: firefox-mimeinfo.xml
Source9: firefox.js
Source11: firefox.1
Source12: mozilla-get-app-id
Source13: spellcheck.js
Source14: https://github.com/openSUSE/firefox-scripts/raw/35ade35/create-tar.sh
Source14: https://github.com/openSUSE/firefox-scripts/raw/913fab1/create-tar.sh
Source15: firefox-appdata.xml
Source16: %{name}.changes
Source17: firefox-search-provider.ini
# 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.
@ -192,52 +224,44 @@ Source20: https://ftp.mozilla.org/pub/%{srcname}/releases/%{version}%{orig
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
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-bmo849632.patch
Patch17: mozilla-bmo1504834-part1.patch
Patch18: mozilla-bmo1504834-part2.patch
Patch19: mozilla-bmo1504834-part3.patch
Patch20: mozilla-bmo1602730.patch
Patch21: mozilla-bmo1554971.patch
Patch22: mozilla-nestegg-big-endian.patch
Patch24: mozilla-fix-top-level-asm.patch
Patch25: mozilla-sle12-lower-python-requirement.patch
Patch26: mozilla-bmo1504834-part4.patch
Patch4: mozilla-aarch64-startup-crash.patch
Patch6: mozilla-s390-context.patch
Patch7: mozilla-pgo.patch
Patch8: mozilla-reduce-rust-debuginfo.patch
Patch10: mozilla-bmo1504834-part1.patch
Patch14: mozilla-bmo849632.patch
Patch15: mozilla-bmo998749.patch
Patch17: mozilla-libavcodec58_91.patch
Patch18: mozilla-silence-no-return-type.patch
Patch20: one_swizzle_to_rule_them_all.patch
Patch21: svg-rendering.patch
Patch22: mozilla-fix-cmath-issues.patch
# Firefox/browser
Patch101: firefox-kde.patch
Patch102: firefox-branded-icons.patch
%endif # only_print_mozconfig
%endif
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Requires(post): coreutils shared-mime-info desktop-file-utils
Requires(post): coreutils shared-mime-info desktop-file-utils
Requires(postun): shared-mime-info desktop-file-utils
Requires: %{name}-branding >= 68
Requires: mozilla-nspr >= %(rpm -q --queryformat '%%{VERSION}' mozilla-nspr)
Requires: mozilla-nss >= %(rpm -q --queryformat '%%{VERSION}' mozilla-nss)
Requires: xdg-desktop-portal
%requires_ge mozilla-nspr
%requires_ge mozilla-nss
%requires_ge libfreetype6
Recommends: libcanberra0
Recommends: libpulse0
# To make security-keys (e.g. Yubikey) work with FF, it needs the udev-rules installed.
# A clean package with the most common rules exists only in SP3 onwards. `u2f-hosts` could be used on older
# code streams, but it contains more than just the rules, so we're not recommending it here.
%if 0%{?suse_version} >= 1600 || 0%{?sle_version} >= 150300
Recommends: libfido2-udev
%endif
# 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
%endif
##BuildArch: i686 x86_64 aarch64 ppc64le
ExcludeArch: armv6l armv6hl ppc ppc64
%description
Mozilla Firefox is a standalone web browser, designed for standards
@ -252,6 +276,7 @@ Provides: firefox-devel = %{version}-%{release}
Requires: %{name} = %{version}
Requires: perl(Archive::Zip)
Requires: perl(XML::Simple)
BuildArch: noarch
%description devel
Development files for %{appname} to make packaging of addons easier.
@ -274,7 +299,7 @@ of %{appname}.
%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}
@ -302,16 +327,6 @@ Supplements: packageand(%{name}:branding-upstream)
%description branding-upstream
This package provides upstream look and feel for %{appname}.
%if %crashreporter
%package buildsymbols
Summary: Breakpad buildsymbols for %{appname}
Group: Development/Debug
%description buildsymbols
This subpackage contains the Breakpad created and compatible debugging
symbols meant for upload to Mozilla's crash collector database.
%endif
%if !%{with only_print_mozconfig}
%prep
%if %localize
@ -329,65 +344,51 @@ fi
%setup -q -n %{srcname}-%{orig_version}
%endif
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
%autopatch -p1
%endif
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
# Firefox
%patch101 -p1
%patch102 -p1
%endif # only_print_mozconfig
%build
%if !%{with only_print_mozconfig}
# no need to add build time to binaries
# May have to use "firefox-esr.changes" here explicitly,
# because pkgname could be "MozillaFirefox"
if [ ! -s "%{_sourcedir}/%{pkgname}.changes" ]; then
ln -f "%{_sourcedir}/firefox-esr.changes" "%{_sourcedir}/%{pkgname}.changes"
fi
modified="$(sed -n '/^----/n;s/ - .*$//;p;q' "%{_sourcedir}/%{pkgname}.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" {} +
#
kdehelperversion=$(cat toolkit/xre/nsKDEUtils.cpp | grep '#define KMOZILLAHELPER_VERSION' | cut -d ' ' -f 3)
if test "$kdehelperversion" != %{kde_helper_version}; then
echo fix kde helper version in the .spec file
exit 1
fi
source %{SOURCE4}
%endif # only_print_mozconfig
# SLE-12 provides python39, but that package does not provide a python3 binary
%if 0%{?sle_version} >= 120000 && 0%{?sle_version} < 150000
sed -i "s|/usr/bin/env python3|/usr/bin/env python3.9|" mach
sed -i "s|potential_python_binary = f\"python3.{i}\"|potential_python_binary = f\"python3.9.{i}\"|" mach
export PYTHON3=/usr/bin/python3.9
%endif
# When doing only_print_mozconfig, this file isn't necessarily available, so skip it
cp %{SOURCE4} .obsenv.sh
%else
# We need to make sure its empty
echo "" > .obsenv.sh
%endif
cat >> .obsenv.sh <<EOF
export CARGO_HOME=${RPM_BUILD_DIR}/%{srcname}-%{orig_version}/.cargo
export MOZ_SOURCE_CHANGESET=$RELEASE_TAG
export SOURCE_REPO=$RELEASE_REPO
export source_repo=$RELEASE_REPO
export MOZ_SOURCE_REPO=$RELEASE_REPO
export MOZ_BUILD_DATE=$RELEASE_TIMESTAMP
export MOZ_SOURCE_CHANGESET=\$RELEASE_TAG
export SOURCE_REPO=\$RELEASE_REPO
export source_repo=\$RELEASE_REPO
export MOZ_SOURCE_REPO=\$RELEASE_REPO
export MOZ_BUILD_DATE=\$RELEASE_TIMESTAMP
export MOZILLA_OFFICIAL=1
export BUILD_OFFICIAL=1
export MOZ_TELEMETRY_REPORTING=1
%if 0%{?suse_version} <= 1320
export CC=gcc-7
export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
export CFLAGS="%{optflags}"
%if 0%{?suse_version} < 1550 && 0%{?sle_version} <= 150600
export CC=gcc-13
export CXX=g++-13
%else
%if 0%{?clang_build} == 0
export CC=gcc
@ -395,57 +396,64 @@ export CXX=g++
%endif
%endif
%ifarch %arm %ix86
### NOTE: these sections are not required anymore. Alson --no-keep-memory + -Wl,-z,pack-relative-relocs causes
### ld to go OOM (https://sourceware.org/bugzilla/show_bug.cgi?id=30756)
# Limit RAM usage during link
export LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
%endif
%if 0%{?build_hardened}
export LDFLAGS="${LDFLAGS} -fPIC -Wl,-z,relro,-z,now"
# export LDFLAGS="\$LDFLAGS -Wl,--no-keep-memory -Wl,--reduce-memory-overheads -Wl,--no-map-whole-files -Wl,--hash-size=31"
#
# A lie to prevent -Wl,--gc-sections being set which requires more memory than 32bit can offer
#export GC_SECTIONS_BREAKS_DEBUG_RANGES=yes
%endif
export LDFLAGS="\$LDFLAGS -fPIC -Wl,-z,relro,-z,now"
%ifarch ppc64 ppc64le
%if 0%{?clang_build} == 0
export CFLAGS="$CFLAGS -mminimal-toc"
%endif
%ifarch %ix86
# Not enough memory on 32-bit systems, reduce debug info.
export CFLAGS="\$CFLAGS -g1"
%endif
export CXXFLAGS="$CFLAGS"
export CXXFLAGS="\$CFLAGS"
export MOZCONFIG=$RPM_BUILD_DIR/mozconfig
%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
EOF
# Done with env-variables.
source ./.obsenv.sh
%ifarch aarch64 %arm ppc64 ppc64le riscv64
%limit_build -m 2500
%endif
# Generating mozconfig
cat << EOF > $MOZCONFIG
mk_add_options MOZILLA_OFFICIAL=1
mk_add_options BUILD_OFFICIAL=1
mk_add_options MOZ_MAKE_FLAGS=%{?jobs:-j%jobs}
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../obj
. \$topsrcdir/browser/config/mozconfig
ac_add_options --disable-bootstrap
ac_add_options --prefix=%{_prefix}
ac_add_options --libdir=%{_libdir}
ac_add_options --includedir=%{_includedir}
ac_add_options --enable-release
%if 0%{wayland_supported}
ac_add_options --enable-default-toolkit=cairo-gtk3-wayland
%else
ac_add_options --enable-default-toolkit=cairo-gtk3
%if 0%{?suse_version} >= 1550
ac_add_options --disable-gconf
%endif
# bmo#1441155 - Disable the generation of Rust debug symbols on Linux32
%ifarch %ix86 %arm
ac_add_options --disable-debug-symbols
%else
ac_add_options --enable-debug-symbols
%endif
%if 0%{?suse_version} > 1549
%ifnarch aarch64 ppc64 ppc64le s390x
ac_add_options --disable-elf-hack
ac_add_options --enable-debug-symbols=-g0
%endif
ac_add_options --disable-install-strip
%ifarch %ix86 %arm
# OOM on 32-bit when ld passed -Wl,-z,pack-relative-relocs
# ac_add_options --enable-elf-hack
%endif
ac_add_options --with-system-nspr
ac_add_options --with-system-nss
%if 0%{useccache} != 0
ac_add_options --with-ccache
%endif
%if %{localize}
ac_add_options --with-l10n-base=$RPM_BUILD_DIR/l10n
%endif
@ -456,13 +464,18 @@ ac_add_options --disable-updater
ac_add_options --disable-tests
ac_add_options --enable-alsa
ac_add_options --disable-debug
ac_add_options --enable-startup-notification
#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-location-service-api-keyfile=%{SOURCE19}
# Google-service currently not available for free anymore
#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
ac_add_options --allow-addon-sideload
# at least temporary until the "wasi-sysroot" issue is solved
ac_add_options --without-wasm-sandboxed-libraries
%ifarch x86_64 aarch64
ac_add_options --enable-rust-simd
%endif
%if %branding
ac_add_options --enable-official-branding
%endif
@ -493,51 +506,70 @@ ac_add_options MOZ_PGO=1
%endif
%endif
EOF
%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%{?sle_version} >= 120000 && 0%{?sle_version} < 150000 && !0%{?is_opensuse}
export PATH=/usr/%_lib/firefox/bin:$PATH
export LD_LIBRARY_PATH=/usr/%_lib/firefox/%_lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/%_lib/firefox/%_lib/pkgconfig/
%if %{with only_print_mozconfig}
cat ./.obsenv.sh
cat $MOZCONFIG
%else
%if 0%{useccache} != 0
ccache -s
%endif
%if 0%{?do_profiling}
xvfb-run --server-args="-screen 0 1920x1080x24" \
%endif
./mach build
./mach build -v
# 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/%{srcname}-%{orig_version}/browser/locales/shipped-locales \
| xargs -n 1 -I {} /bin/sh -c '
# langpack-build can not be done in parallel easily (see https://bugzilla.mozilla.org/show_bug.cgi?id=1660943)
# Therefore, we have to have a separate obj-dir for each language
# We do this, by creating a mozconfig-template with the necessary switches
# and a placeholder obj-dir, which gets copied and modified for each language
# Create mozconfig-template for langbuild
cat << EOF > ${MOZCONFIG}_LANG
mk_add_options MOZILLA_OFFICIAL=1
mk_add_options BUILD_OFFICIAL=1
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../obj_LANG
. \$topsrcdir/browser/config/mozconfig
ac_add_options --prefix=%{_prefix}
ac_add_options --with-l10n-base=$RPM_BUILD_DIR/l10n
ac_add_options --disable-updater
ac_add_options --without-wasm-sandboxed-libraries
%if %branding
ac_add_options --enable-official-branding
%endif
EOF
%define njobs 0%{?jobs:%jobs}
mkdir -p $RPM_BUILD_DIR/langpacks_artifacts/
sed -r '/^(ja-JP-mac|ga-IE|en-US|)$/d;s/ .*$//' $RPM_BUILD_DIR/%{srcname}-%{orig_version}/browser/locales/shipped-locales \
| xargs -n 1 %{?njobs:-P %njobs} -I {} /bin/sh -c '
locale=$1
./mach build langpack-$locale
cp -rL ../obj/dist/xpi-stage/locale-$locale \
%{buildroot}%{progdir}/browser/extensions/langpack-$locale@firefox.mozilla.org
# remove prefs, profile defaults, and hyphenation from langpack
rm -rf %{buildroot}%{progdir}/browser/extensions/langpack-$locale@firefox.mozilla.org/defaults
rm -rf %{buildroot}%{progdir}/browser/extensions/langpack-$locale@firefox.mozilla.org/hyphenation
cp ${MOZCONFIG}_LANG ${MOZCONFIG}_$locale
sed -i "s|obj_LANG|obj_$locale|" ${MOZCONFIG}_$locale
export MOZCONFIG=${MOZCONFIG}_$locale
# nsinstall is needed for langpack-build. It is already built by `./mach build`, but building it again is very fast
./mach build config/nsinstall langpack-$locale
cp -L ../obj_$locale/dist/linux-*/xpi/firefox-%{orig_version}.$locale.langpack.xpi \
$RPM_BUILD_DIR/langpacks_artifacts/langpack-$locale@firefox.mozilla.org.xpi
# check against the fixed common list and sort into the right filelist
_matched=0
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
echo %{progdir}/browser/extensions/langpack-$locale@firefox.mozilla.org \
echo %{progdir}/browser/extensions/langpack-$locale@firefox.mozilla.org.xpi \
>> %{_tmppath}/translations.$_l10ntarget
' -- {}
%endif
%endif # only_print_mozconfig
%if 0%{useccache} != 0
ccache -s
%endif
%endif
%install
cd $RPM_BUILD_DIR/obj
@ -554,6 +586,10 @@ grep amazondotcom dist/firefox/browser/omni.ja
# copy tree into RPM_BUILD_ROOT
mkdir -p %{buildroot}%{progdir}
cp -rf $RPM_BUILD_DIR/obj/dist/%{srcname}/* %{buildroot}%{progdir}
%if %localize
mkdir -p %{buildroot}%{progdir}/browser/extensions
cp -rf $RPM_BUILD_DIR/langpacks_artifacts/* %{buildroot}%{progdir}/browser/extensions/
%endif
mkdir -p %{buildroot}%{progdir}/distribution/extensions
mkdir -p %{buildroot}%{progdir}/browser/defaults/preferences/
# renaming executables (for regular vs. ESR)
@ -565,6 +601,7 @@ mv %{buildroot}%{progdir}/%{srcname}-bin %{buildroot}%{progdir}/%{progname}-bin
install -m 644 %{SOURCE13} %{buildroot}%{progdir}/defaults/pref/
# install browser prefs
install -m 644 %{SOURCE9} %{buildroot}%{progdir}/browser/defaults/preferences/firefox.js
# remove some executable permissions
find %{buildroot}%{progdir} \
-name "*.js" -o \
@ -583,6 +620,7 @@ mkdir --parents %{buildroot}/usr/bin
sed "s:%%PREFIX:%{_prefix}:g
s:%%PROGDIR:%{progdir}:g
s:%%APPNAME:%{progname}:g
s:%%WAYLAND_SUPPORTED:%{wayland_supported}:g
s:%%PROFILE:.mozilla/firefox:g" \
%{SOURCE3} > %{buildroot}%{progdir}/%{progname}.sh
chmod 755 %{buildroot}%{progdir}/%{progname}.sh
@ -591,27 +629,29 @@ ln -sf ../..%{progdir}/%{progname}.sh %{buildroot}%{_bindir}/%{progname}
mkdir -p %{buildroot}%{_datadir}/applications
sed "s:%%NAME:%{appname}:g
s:%%EXEC:%{progname}:g
s:%%ICON:%{progname}:g" \
s:%%ICON:%{progname}:g
s:%%WMCLASS:%{progname}%{major}:g" \
%{SOURCE1} > %{buildroot}%{_datadir}/applications/%{desktop_file_name}.desktop
%suse_update_desktop_file %{desktop_file_name} Network WebBrowser GTK
# additional mime-types
mkdir -p %{buildroot}%{_datadir}/mime/packages
cp %{SOURCE8} %{buildroot}%{_datadir}/mime/packages/%{progname}.xml
# appdata
mkdir -p %{buildroot}%{_datadir}/appdata
mkdir -p %{buildroot}%{_datadir}/metainfo
sed "s:firefox.desktop:%{desktop_file_name}:g" \
%{SOURCE15} > %{buildroot}%{_datadir}/appdata/%{desktop_file_name}.appdata.xml
%{SOURCE15} > %{buildroot}%{_datadir}/metainfo/%{desktop_file_name}.appdata.xml
# install man-page
mkdir -p %{buildroot}%{_mandir}/man1/
cp %{SOURCE11} %{buildroot}%{_mandir}/man1/%{progname}.1
# install GNOME Shell search provider
mkdir -p %{buildroot}%{_datadir}/gnome-shell/search-providers
cp %{SOURCE17} %{buildroot}%{_datadir}/gnome-shell/search-providers
##########
# ADDONS
#
mkdir -p %{buildroot}%{_datadir}/mozilla/extensions/%{firefox_appid}
mkdir -p %{buildroot}%{_libdir}/mozilla/extensions/%{firefox_appid}
mkdir -p %{buildroot}/usr/share/pixmaps/
ln -sf %{progdir}/browser/chrome/icons/default/default128.png %{buildroot}/usr/share/pixmaps/%{progname}.png
ln -sf %{progdir}/browser/chrome/icons/default/default128.png %{buildroot}/usr/share/pixmaps/%{progname}-gnome.png
# Install symbolic icon for GNOME
%if %branding
for size in 16 22 24 32 48 64 128 256; do
%else
@ -635,14 +675,14 @@ rm -f %{buildroot}%{progdir}/update-settings.ini
mkdir -p %{buildroot}%{_bindir}
install -m 755 %SOURCE12 %{buildroot}%{_bindir}
# inspired by mandriva
mkdir -p %{buildroot}%{_sysconfdir}/rpm
cat <<'FIN' >%{buildroot}%{_sysconfdir}/rpm/macros.%{progname}
# Macros from %{name} package
mkdir -p %{buildroot}%{_rpmmacrodir}
cat <<'FIN' >%{buildroot}%{_rpmmacrodir}/macros.%{progname}
# Macros from %%{name} package
%%firefox_major %{major}
%%firefox_version %{version}
%%firefox_mainver %{mainver}
%%firefox_mozillapath %%{_libdir}/%{progname}
%%firefox_pluginsdir %%{_libdir}/browser-plugins
%%firefox_pluginsdir %%{_libdir}/mozilla/plugins
%%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)
@ -656,24 +696,6 @@ FIN
# fdupes
%fdupes %{buildroot}%{progdir}
%fdupes %{buildroot}%{_datadir}
# create breakpad debugsymbols
%if %crashreporter
SYMBOLS_NAME="firefox-%{version}-` echo '%{release}' | sed 's@\.[^\.]\+$@@' `.%{_arch}-%{suse_version}-symbols"
make buildsymbols \
SYMBOL_INDEX_NAME="$SYMBOLS_NAME.txt" \
SYMBOL_FULL_ARCHIVE_BASENAME="$SYMBOLS_NAME-full" \
SYMBOL_ARCHIVE_BASENAME="$SYMBOLS_NAME"
if [ -e dist/*symbols.zip ]; then
mkdir -p %{buildroot}%{_datadir}/mozilla/
cp dist/*symbols.zip %{buildroot}%{_datadir}/mozilla/
fi
%endif
%clean
rm -rf %{buildroot}
%if %localize
rm -rf %{_tmppath}/translations.*
%endif
%post
# update mime and desktop database
@ -696,37 +718,40 @@ exit 0
%{progdir}/browser/defaults
%{progdir}/browser/features/
%{progdir}/browser/chrome/icons
%{progdir}/browser/blocklist.xml
%{progdir}/browser/chrome.manifest
%{progdir}/browser/omni.ja
%dir %{progdir}/distribution/
%{progdir}/distribution/extensions/
%{progdir}/defaults/
%dir %{progdir}/gtk2
%{progdir}/gtk2/libmozgtk.so
%{progdir}/gmp-clearkey/
%attr(755,root,root) %{progdir}/%{progname}.sh
%{progdir}/%{progname}
%{progdir}/%{progname}-bin
%{progdir}/application.ini
%{progdir}/chrome.manifest
%{progdir}/dependentlibs.list
%{progdir}/*.so
%{progdir}/glxtest
%if 0%{wayland_supported}
%{progdir}/vaapitest
%endif
%ifarch aarch64 riscv64 %arm
%{progdir}/v4l2test
%endif
%{progdir}/omni.ja
%{progdir}/fonts/
%{progdir}/pingsender
%{progdir}/platform.ini
%{progdir}/plugin-container
%if %crashreporter
%{progdir}/crashreporter
%{progdir}/crashreporter.ini
%{progdir}/Throbber-small.gif
#%{progdir}/crashreporter.ini
#%{progdir}/Throbber-small.gif
%{progdir}/minidump-analyzer
%{progdir}/browser/crashreporter-override.ini
#%{progdir}/browser/crashreporter-override.ini
%endif
%{_datadir}/applications/%{desktop_file_name}.desktop
%{_datadir}/mime/packages/%{progname}.xml
%{_datadir}/pixmaps/firefox*
%dir %{_datadir}/gnome-shell
%dir %{_datadir}/gnome-shell/search-providers
%{_datadir}/gnome-shell/search-providers/*.ini
%dir %{_datadir}/mozilla
%dir %{_datadir}/mozilla/extensions
%dir %{_datadir}/mozilla/extensions/%{firefox_appid}
@ -736,13 +761,13 @@ exit 0
%{gnome_dir}/share/icons/hicolor/
%{_bindir}/%{progname}
%doc %{_mandir}/man1/%{progname}.1.gz
%{_datadir}/appdata/
%{_datadir}/metainfo/
%if 0%{?devpkg}
%files devel
%defattr(-,root,root)
%{_bindir}/mozilla-get-app-id
%config %{_sysconfdir}/rpm/macros.%{progname}
%{_rpmmacrodir}/macros.%{progname}
%endif
%if %localize
@ -763,10 +788,4 @@ exit 0
%defattr(-,root,root)
%dir %{progdir}
%if %crashreporter
%files buildsymbols
%defattr(-,root,root)
%{_datadir}/mozilla/*.zip
%endif
%changelog

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
[Shell Search Provider]
DesktopId=firefox.desktop
BusName=org.mozilla.firefox.SearchProvider
ObjectPath=/org/mozilla/firefox/SearchProvider
Version=2

View File

@ -60,7 +60,7 @@ Open new instance, not a new window in running instance.
\fB\-\-UILocale\fR \fIlocale\fR
Start with \fIlocale\fR resources as UI Locale.
.TP
\fB\-\-save\-mode\fR
\fB\-\-safe\-mode\fR
Disables extensions and themes for this session.
.TP
\fB\-\-headless\fR

View File

@ -2,6 +2,9 @@ pref("intl.locale.requested", "");
pref("geo.wifi.uri", "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%");
/* Disable DoH by default */
pref("network.trr.mode", 5);
// do not disable system-global or app-global extensions
pref("extensions.autoDisableScopes", 3);
// do not disable any scope
pref("extensions.autoDisableScopes", 0);
pref("extensions.shownSelectionUI", true);
pref("extensions.langpacks.signatures.required", false);
// enable D-Bus inteface for Gnome Shell search
pref("browser.gnome-search-provider.enabled", true);

3
l10n-128.5.1esr.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:adc97fe34ba0d08b62ecd0e45bff671dde7d310ff09e7243582bfb3c4ed22310
size 33147652

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2f198419e7a2a1a58db8a73088f0c63eac29fcea4ff3f90c8597ba6768b1c792
size 49175812

View File

@ -3,14 +3,14 @@
# Date 1558442998 -7200
# Tue May 21 14:49:58 2019 +0200
# Node ID 386083b58d8558141901d796ec6919a4aba7ad3a
# Parent 835641be7eb9408aa1eff0d38b37f6c523d2ef98
# Parent 76b747f7d113bddbb8593184d81e1bfe5fd51af0
bsc#991344 - Rpi3: Firefox crashes after a few seconds of usage
bmo#1302554 - ARM/AARCH64: Firefox crashes on NULL nsIChannel** result pointer in nsIOService::NewChannelFromURIWithProxyFlagsInternal()
diff -r 835641be7eb9 -r 386083b58d85 netwerk/base/nsIOService.cpp
--- a/netwerk/base/nsIOService.cpp Fri Feb 26 16:20:09 2016 +0000
+++ b/netwerk/base/nsIOService.cpp Tue May 21 14:49:58 2019 +0200
@@ -1000,7 +1000,13 @@
diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp
--- a/netwerk/base/nsIOService.cpp
+++ b/netwerk/base/nsIOService.cpp
@@ -1159,7 +1159,13 @@ nsresult nsIOService::NewChannelFromURIW
}
}

View File

@ -1,20 +0,0 @@
# HG changeset patch
# User Steve Singer <steve@ssinger.info>
# Date 1558451540 -7200
# Tue May 21 17:12:20 2019 +0200
# Node ID 433beec63e6b5f409683af20a0c1ab137cc7bfad
# Parent 42c99b59a87b904063bad3193f10c51d068d2eac
Bug 1005535 - Get skia GPU building on big endian.
diff -r 42c99b59a87b -r 433beec63e6b gfx/skia/skia/include/private/GrColor.h
--- a/gfx/skia/skia/include/private/GrColor.h Wed Jun 05 08:48:08 2019 +0200
+++ b/gfx/skia/skia/include/private/GrColor.h Tue May 21 17:12:20 2019 +0200
@@ -63,7 +63,7 @@
* Since premultiplied means that alpha >= color, we construct a color with
* each component==255 and alpha == 0 to be "illegal"
*/
-#define GrColor_ILLEGAL (~(0xFF << GrColor_SHIFT_A))
+#define GrColor_ILLEGAL ((uint32_t)(~(0xFF << GrColor_SHIFT_A)))
/** Normalizes and coverts an uint8_t to a float. [0, 255] -> [0.0, 1.0] */
static inline float GrNormalizeByteToFloat(uint8_t value) {

View File

@ -1,78 +0,0 @@
# HG changeset patch
# User Mike Hommey <mh+mozilla@glandium.org>
# Date 1526871862 -32400
# Node ID 94f21505ff13cd089f7129cd24927cf8b31a0f43
# Parent fc741a5ea37dbe145e0ca5f85e5dfb100f3c9091
Bug 1463035 - Remove MOZ_SIGNAL_TRAMPOLINE. r?darchons
For some reason, GNU as is not happy with the assembly generated after
bug 1238661 anymore on Debian armel.
OTOH, as mentioned in bug 1238661 comment 4, we actually don't need this
workaround anymore, so let's just kill it.
diff --git a/mfbt/moz.build b/mfbt/moz.build
--- a/mfbt/moz.build
+++ b/mfbt/moz.build
@@ -122,20 +122,16 @@ EXPORTS["double-conversion"] = [
LOCAL_INCLUDES += [
'/mfbt/double-conversion',
]
if CONFIG['OS_ARCH'] == 'WINNT':
EXPORTS.mozilla += [
'WindowsVersion.h',
]
-elif CONFIG['OS_ARCH'] == 'Linux':
- EXPORTS.mozilla += [
- 'LinuxSignal.h',
- ]
UNIFIED_SOURCES += [
'Assertions.cpp',
'ChaosMode.cpp',
'double-conversion/double-conversion/bignum-dtoa.cc',
'double-conversion/double-conversion/bignum.cc',
'double-conversion/double-conversion/cached-powers.cc',
'double-conversion/double-conversion/diy-fp.cc',
diff --git a/tools/profiler/core/platform-linux-android.cpp b/tools/profiler/core/platform-linux-android.cpp
--- a/tools/profiler/core/platform-linux-android.cpp
+++ b/tools/profiler/core/platform-linux-android.cpp
@@ -55,17 +55,16 @@
#ifdef __GLIBC__
# include <execinfo.h> // backtrace, backtrace_symbols
#endif // def __GLIBC__
#include <strings.h> // index
#include <errno.h>
#include <stdarg.h>
#include "prenv.h"
-#include "mozilla/LinuxSignal.h"
#include "mozilla/PodOperations.h"
#include "mozilla/DebugOnly.h"
#include <string.h>
#include <list>
using namespace mozilla;
@@ -248,17 +247,17 @@ Sampler::Sampler(PSLockRef aLock)
// NOTE: We don't initialize LUL here, instead initializing it in
// SamplerThread's constructor. This is because with the
// profiler_suspend_and_sample_thread entry point, we want to be able to
// sample without waiting for LUL to be initialized.
// Request profiling signals.
struct sigaction sa;
- sa.sa_sigaction = MOZ_SIGNAL_TRAMPOLINE(SigprofHandler);
+ sa.sa_sigaction = SigprofHandler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART | SA_SIGINFO;
if (sigaction(SIGPROF, &sa, &mOldSigprofHandler) != 0) {
MOZ_CRASH("Error installing SIGPROF handler in the profiler");
}
}
void Sampler::Disable(PSLockRef aLock) {

View File

@ -1,64 +1,74 @@
# HG changeset patch
# Parent 051b75a600dfbf7503c3485cebfd34d4eb29be96
# Parent 9fcbd287056a40084b1e679f787bf683b291f323
Taken from https://bugzilla.mozilla.org/show_bug.cgi?id=1504834
diff -r 051b75a600df gfx/2d/DrawTargetSkia.cpp
--- a/gfx/2d/DrawTargetSkia.cpp Fri Jul 05 12:42:44 2019 +0200
+++ b/gfx/2d/DrawTargetSkia.cpp Mon Jul 08 10:59:30 2019 +0200
@@ -138,8 +138,7 @@
return surfaceBounds.Intersect(bounds);
Index: firefox-128.0/gfx/2d/DrawTargetSkia.cpp
===================================================================
--- firefox-128.0.orig/gfx/2d/DrawTargetSkia.cpp
+++ firefox-128.0/gfx/2d/DrawTargetSkia.cpp
@@ -156,7 +156,8 @@ static IntRect CalculateSurfaceBounds(co
}
-static const int kARGBAlphaOffset =
static const int kARGBAlphaOffset =
- SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0;
+static const int kARGBAlphaOffset = 0; // Skia is always BGRA SurfaceFormat::A8R8G8B8_UINT32 == SurfaceFormat::B8G8R8A8 ? 3 : 0;
+ 0; // Skia is always BGRA SurfaceFormat::A8R8G8B8_UINT32 ==
+ // SurfaceFormat::B8G8R8A8 ? 3 : 0;
static bool VerifyRGBXFormat(uint8_t* aData, const IntSize& aSize,
const int32_t aStride, SurfaceFormat aFormat) {
diff -r 051b75a600df gfx/2d/Types.h
--- a/gfx/2d/Types.h Fri Jul 05 12:42:44 2019 +0200
+++ b/gfx/2d/Types.h Mon Jul 08 10:59:30 2019 +0200
@@ -85,15 +85,8 @@
// The following values are endian-independent synonyms. The _UINT32 suffix
// indicates that the name reflects the layout when viewed as a uint32_t
// value.
-#if MOZ_LITTLE_ENDIAN
Index: firefox-128.0/gfx/2d/Types.h
===================================================================
--- firefox-128.0.orig/gfx/2d/Types.h
+++ firefox-128.0/gfx/2d/Types.h
@@ -89,18 +89,11 @@ enum class SurfaceFormat : int8_t {
// This represents the unknown format.
UNKNOWN, // TODO: Replace uses with Maybe<SurfaceFormat>.
-// The following values are endian-independent synonyms. The _UINT32 suffix
-// indicates that the name reflects the layout when viewed as a uint32_t
-// value.
-#if MOZ_LITTLE_ENDIAN()
+ // The following values are endian-independent synonyms. The _UINT32 suffix
+ // indicates that the name reflects the layout when viewed as a uint32_t
+ // value.
A8R8G8B8_UINT32 = B8G8R8A8, // 0xAARRGGBB
X8R8G8B8_UINT32 = B8G8R8X8 // 0x00RRGGBB
-#elif MOZ_BIG_ENDIAN
X8R8G8B8_UINT32 = B8G8R8X8, // 0x00RRGGBB
-#elif MOZ_BIG_ENDIAN()
- A8R8G8B8_UINT32 = A8R8G8B8, // 0xAARRGGBB
- X8R8G8B8_UINT32 = X8R8G8B8 // 0x00RRGGBB
- X8R8G8B8_UINT32 = X8R8G8B8, // 0x00RRGGBB
-#else
-# error "bad endianness"
-#endif
};
static inline int BytesPerPixel(SurfaceFormat aFormat) {
diff -r 051b75a600df gfx/skia/skia/third_party/skcms/skcms.cc
--- a/gfx/skia/skia/third_party/skcms/skcms.cc Fri Jul 05 12:42:44 2019 +0200
+++ b/gfx/skia/skia/third_party/skcms/skcms.cc Mon Jul 08 10:59:30 2019 +0200
@@ -17,6 +17,8 @@
#include <arm_neon.h>
#elif defined(__SSE__)
#include <immintrin.h>
// The following values are OS and endian-independent synonyms.
//
Index: firefox-128.0/gfx/skia/skia/modules/skcms/skcms.cc
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/modules/skcms/skcms.cc
+++ firefox-128.0/gfx/skia/skia/modules/skcms/skcms.cc
@@ -31,6 +31,8 @@
#include <avx512fintrin.h>
#include <avx512dqintrin.h>
#endif
+#else
+ #define SKCMS_PORTABLE
#endif
// sizeof(x) will return size_t, which is 32-bit on some machines and 64-bit on others.
@@ -124,20 +126,28 @@
using namespace skcms_private;
@@ -324,20 +326,28 @@ enum {
static uint16_t read_big_u16(const uint8_t* ptr) {
uint16_t be;
memcpy(&be, ptr, sizeof(be));
-#if defined(_MSC_VER)
- return _byteswap_ushort(be);
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+ return be;
+#else
#else
- return __builtin_bswap16(be);
+ #if defined(_MSC_VER)
return _byteswap_ushort(be);
-#else
+ return _byteswap_ushort(be);
+ #else
return __builtin_bswap16(be);
+ return __builtin_bswap16(be);
+ #endif
#endif
}
@ -67,14 +77,15 @@ diff -r 051b75a600df gfx/skia/skia/third_party/skcms/skcms.cc
uint32_t be;
memcpy(&be, ptr, sizeof(be));
-#if defined(_MSC_VER)
- return _byteswap_ulong(be);
+#if __BYTE_ORDER == __ORDER_BIG_ENDIAN__
+ return be;
+#else
#else
- return __builtin_bswap32(be);
+ #if defined(_MSC_VER)
return _byteswap_ulong(be);
-#else
+ return _byteswap_ulong(be);
+ #else
return __builtin_bswap32(be);
+ return __builtin_bswap32(be);
+ #endif
#endif
}

View File

@ -1,88 +0,0 @@
# HG changeset patch
# Parent 36563351309ddbc6c29559ba50a41d005f925abb
Skia does not support big endian. The places to fix are too numerous and upstream (skia, not Mozilla)
has no interest in maintaining big endian.
So here we try to swizzle the input for skia, so that skia always works on LE, and when it comes
out again, we transform back to BE.
diff -r 36563351309d gfx/2d/ConvolutionFilter.cpp
--- a/gfx/2d/ConvolutionFilter.cpp Mon Sep 09 17:59:28 2019 +0200
+++ b/gfx/2d/ConvolutionFilter.cpp Tue Sep 10 08:25:13 2019 +0200
@@ -35,9 +35,38 @@
return true;
}
+static void ByteSwapArray(uint8_t *u8Array, int32_t size) {
+ uint32_t *array = reinterpret_cast<uint32_t*>(u8Array);
+ for (int pxl = 0; pxl < size; ++pxl) {
+ // Use an endian swap to move the bytes, i.e. BGRA -> ARGB.
+ uint32_t rgba = array[pxl];
+ array[pxl] = NativeEndian::swapToLittleEndian(rgba);
+ }
+}
+
void ConvolutionFilter::ConvolveHorizontally(const uint8_t* aSrc, uint8_t* aDst,
bool aHasAlpha) {
+#if MOZ_BIG_ENDIAN
+ int outputSize = mFilter->numValues();
+
+ // Input size isn't handed in, so we have to calculate it quickly
+ int inputSize = 0;
+ for (int xx = 0; xx < outputSize; ++xx) {
+ // Get the filter that determines the current output pixel.
+ int filterOffset, filterLength;
+ mFilter->FilterForValue(xx, &filterOffset, &filterLength);
+ inputSize = std::max(inputSize, filterOffset + filterLength);
+ }
+
+ ByteSwapArray((uint8_t*)aSrc, inputSize);
+#endif
+
SkOpts::convolve_horizontally(aSrc, *mFilter, aDst, aHasAlpha);
+
+#if MOZ_BIG_ENDIAN
+ ByteSwapArray((uint8_t*)aSrc, inputSize);
+ ByteSwapArray(aDst, outputSize);
+#endif
}
void ConvolutionFilter::ConvolveVertically(uint8_t* const* aSrc, uint8_t* aDst,
@@ -49,8 +78,26 @@
int32_t filterLength;
auto filterValues =
mFilter->FilterForValue(aRowIndex, &filterOffset, &filterLength);
+
+#if MOZ_BIG_ENDIAN
+ for (int filterY = 0; filterY < filterLength; filterY++) {
+ // Skia only knows LE, so we have to swizzle the input
+ ByteSwapArray(aSrc[filterY], aRowSize);
+ }
+#endif
+
SkOpts::convolve_vertically(filterValues, filterLength, aSrc, aRowSize, aDst,
aHasAlpha);
+
+#if MOZ_BIG_ENDIAN
+ // After skia is finished, we swizzle back to BE, in case
+ // the input is used again somewhere else
+ for (int filterY = 0; filterY < filterLength; filterY++) {
+ ByteSwapArray(aSrc[filterY], aRowSize);
+ }
+ // The destination array as well
+ ByteSwapArray(aDst, aRowSize);
+#endif
}
/* ConvolutionFilter::ComputeResizeFactor is derived from Skia's
diff -r 36563351309d gfx/skia/skia/include/core/SkPreConfig.h
--- a/gfx/skia/skia/include/core/SkPreConfig.h Mon Sep 09 17:59:28 2019 +0200
+++ b/gfx/skia/skia/include/core/SkPreConfig.h Tue Sep 10 08:25:13 2019 +0200
@@ -73,7 +73,7 @@
defined(__ppc__) || defined(__hppa) || \
defined(__PPC__) || defined(__PPC64__) || \
defined(_MIPSEB) || defined(__ARMEB__) || \
- defined(__s390__) || \
+ defined(__s390__) || defined(__s390x__) || \
(defined(__sh__) && defined(__BIG_ENDIAN__)) || \
(defined(__ia64) && defined(__BIG_ENDIAN__))
#define SK_CPU_BENDIAN

View File

@ -1,44 +0,0 @@
# HG changeset patch
# Parent aecb4600e5da17443b224c79eee178c1d8e155e3
For FF68, AntiAliasing of XULTexts seem to be broken on big endian (s390x). Text and icons of the sandwich-menu to the
right of the address bar, as well as plugin-windows appears transparant, which usually means unreadable (white on white).
diff -r aecb4600e5da gfx/skia/skia/include/private/SkNx.h
--- a/gfx/skia/skia/include/private/SkNx.h Tue Aug 20 09:46:55 2019 +0200
+++ b/gfx/skia/skia/include/private/SkNx.h Mon Sep 09 10:04:06 2019 +0200
@@ -238,7 +238,18 @@
AI SkNx operator*(const SkNx& y) const { return fVal * y.fVal; }
AI SkNx operator/(const SkNx& y) const { return fVal / y.fVal; }
+ // On Big endian the commented out variant doesn't work,
+ // and honestly, I have no idea why it exists in the first place.
+ // The reason its broken is, I think, that it defaults to the double-variant of ToBits()
+ // which gets a 64-bit integer, and FromBits returns 32-bit,
+ // cutting off the wrong half again.
+ // Overall, I see no reason to have ToBits and FromBits at all (even for floats/doubles).
+ // Still we are only "fixing" this for big endian and leave little endian alone (never touch a running system)
+#ifdef SK_CPU_BENDIAN
+ AI SkNx operator&(const SkNx& y) const { return fVal & y.fVal; }
+#else
AI SkNx operator&(const SkNx& y) const { return FromBits(ToBits(fVal) & ToBits(y.fVal)); }
+#endif
AI SkNx operator|(const SkNx& y) const { return FromBits(ToBits(fVal) | ToBits(y.fVal)); }
AI SkNx operator^(const SkNx& y) const { return FromBits(ToBits(fVal) ^ ToBits(y.fVal)); }
diff -r aecb4600e5da gfx/skia/skia/src/opts/SkBlitMask_opts.h
--- a/gfx/skia/skia/src/opts/SkBlitMask_opts.h Tue Aug 20 09:46:55 2019 +0200
+++ b/gfx/skia/skia/src/opts/SkBlitMask_opts.h Mon Sep 09 10:04:06 2019 +0200
@@ -203,7 +203,13 @@
// ~~~>
// a = 1*aa + d(1-1*aa) = aa + d(1-aa)
// c = 0*aa + d(1-1*aa) = d(1-aa)
+
+ // For big endian we have to swap the alpha-mask from 0,0,0,255 to 255,0,0,0
+#ifdef SK_CPU_BENDIAN
+ return Sk4px(Sk16b(aa) & Sk16b(255,0,0,0, 255,0,0,0, 255,0,0,0, 255,0,0,0))
+#else
return Sk4px(Sk16b(aa) & Sk16b(0,0,0,255, 0,0,0,255, 0,0,0,255, 0,0,0,255))
+#endif
+ d.approxMulDiv255(aa.inv());
};
while (h --> 0) {

View File

@ -1,30 +0,0 @@
# HG changeset patch
# Parent 46ea866ca3acb8bb5e1709ceb799b9c94f591dec
Problem description: Tab-titles that are too long to fit into a tab get faded out.
On big endian this is broken and instead of fading out, the
tab gets white and the font transparent, leading to an unreadable
tab-title
Solution: This is not a real solution, but a hack. The real solution would have been
to byte-swap the correct buffer, but I could not find it.
So the next best thing is to deactivate the fading-effect. Now all tab-titles
are readable, albeit not as pretty to look at as they could be.
Side-effects: I have not yet found an unwanted side-effect.
diff -r 46ea866ca3ac -r 6ef20eee3f8f gfx/2d/DrawTargetSkia.cpp
--- a/gfx/2d/DrawTargetSkia.cpp Tue Oct 22 12:27:22 2019 +0200
+++ b/gfx/2d/DrawTargetSkia.cpp Thu Oct 31 09:11:56 2019 +0100
@@ -1861,6 +1861,14 @@
SkCanvas::kPreserveLCDText_SaveLayerFlag |
(aCopyBackground ? SkCanvas::kInitWithPrevious_SaveLayerFlag : 0));
+#if MOZ_BIG_ENDIAN
+ // Pushing a layer where an aMask is defined produces wrong output.
+ // We _should_ endian swap the data, but I couldn't find a workable way to do so
+ // Therefore I deactivate those layers in the meantime.
+ // The result is: Tab-titles that are longer than the available space should be faded out.
+ // The fading doesn't work, so we deactivate the fading-effect here.
+ if (!aMask)
+#endif
mCanvas->saveLayer(saveRec);
SetPermitSubpixelAA(aOpaque);

View File

@ -1,22 +0,0 @@
# HG changeset patch
# Parent a25cebecb02d5460b8ad757fe9cb4a9c8d1d7658
Eliminate startup error message:
JavaScript error: , line 0: Error: Type error for platformInfo value (Error processing arch: Invalid enumeration value "s390x") for runtime.getPlatformInfo.
Reported here: https://bugzilla.mozilla.org/show_bug.cgi?id=1554971
Uncertain if this is causing real problems or not. Also uncertain if the fix actually fixes anything.
No response from upstream yet.
diff -r a25cebecb02d -r 378b81b00e73 toolkit/components/extensions/schemas/runtime.json
--- a/toolkit/components/extensions/schemas/runtime.json Fri Jul 05 12:42:44 2019 +0200
+++ b/toolkit/components/extensions/schemas/runtime.json Fri Jul 19 13:19:30 2019 +0200
@@ -64,7 +64,7 @@
{
"id": "PlatformArch",
"type": "string",
- "enum": ["arm", "x86-32", "x86-64"],
+ "enum": ["arm", "x86-32", "x86-64", "s390x", "aarch64", "ppc64le"],
"allowedContexts": ["content", "devtools"],
"description": "The machine's processor architecture."
},

View File

@ -1,30 +0,0 @@
Author: Bernhard M. Wiedemann <bwiedemann suse de>
Date: 2019-07-22
Allow to override build date with SOURCE_DATE_EPOCH
in order to make builds reproducible.
See https://reproducible-builds.org/ for why this is good
and https://reproducible-builds.org/specs/source-date-epoch/
for the definition of this variable.
diff --git a/python/mozbuild/mozbuild/action/langpack_manifest.py b/python/mozbuild/mozbuild/action/langpack_manifest.py
index 6f72697..d4cca96 100644
--- a/python/mozbuild/mozbuild/action/langpack_manifest.py
+++ b/python/mozbuild/mozbuild/action/langpack_manifest.py
@@ -16,6 +16,7 @@ import os
import json
import io
import datetime
+import time
import requests
import mozversioncontrol
import mozpack.path as mozpath
@@ -100,7 +101,7 @@ def get_timestamp_for_locale(path):
dt = get_dt_from_hg(path)
if dt is None:
- dt = datetime.datetime.utcnow()
+ dt = datetime.datetime.utcfromtimestamp(int(os.environ.get('SOURCE_DATE_EPOCH', time.time())))
dt = dt.replace(microsecond=0)
return dt.strftime("%Y%m%d%H%M%S")

View File

@ -1,28 +0,0 @@
diff -r 6ef20eee3f8f gfx/layers/basic/BasicCompositor.cpp
--- a/gfx/layers/basic/BasicCompositor.cpp Thu Oct 31 09:11:56 2019 +0100
+++ b/gfx/layers/basic/BasicCompositor.cpp Wed Dec 11 16:16:09 2019 +0100
@@ -693,9 +693,13 @@
RefPtr<SourceSurface> sourceMask;
Matrix maskTransform;
+ // Setting an alpha-mask here breaks the URL-bar on big endian (s390x)
+ // if the typed URL is too long for the textbox (automatic scrolling needed)
+#if MOZ_LITTLE_ENDIAN
if (aTransform.Is2D()) {
SetupMask(aEffectChain, dest, offset, sourceMask, maskTransform);
}
+#endif
CompositionOp blendMode = CompositionOp::OP_OVER;
if (Effect* effect =
diff -r 6ef20eee3f8f gfx/layers/composite/CompositableHost.cpp
--- a/gfx/layers/composite/CompositableHost.cpp Thu Oct 31 09:11:56 2019 +0100
+++ b/gfx/layers/composite/CompositableHost.cpp Wed Dec 11 16:16:09 2019 +0100
@@ -91,6 +91,7 @@
}
MOZ_ASSERT(source);
+ // Alternatively: Comment out these lines where the alpha-mask is set
RefPtr<EffectMask> effect =
new EffectMask(source, source->GetSize(), aTransform);
aEffects.mSecondaryEffects[EffectTypes::MASK] = effect;

View File

@ -1,16 +1,20 @@
# HG changeset patch
# Parent 3de59fe1b8708c01e134ce698c4232b8a854f617
Problem: webGL sites are displayed in the wrong color (usually blue-ish)
Solution: Problem is with skia once again. Output of webgl seems endian-correct, but skia only
knows how to deal with little endian.
So we swizzle the output of webgl after reading it from readpixels()
Note: This does not fix all webGL sites, but is a step in the right direction
diff -r 6b017d3e9733 gfx/gl/GLContext.h
--- a/gfx/gl/GLContext.h Mon Sep 09 10:04:05 2019 +0200
+++ b/gfx/gl/GLContext.h Wed Nov 13 17:13:04 2019 +0100
@@ -1551,6 +1551,13 @@
Index: firefox-115.0/gfx/gl/GLContext.h
===================================================================
--- firefox-115.0.orig/gfx/gl/GLContext.h
+++ firefox-115.0/gfx/gl/GLContext.h
@@ -1560,6 +1560,13 @@ class GLContext : public GenericAtomicRe
BEFORE_GL_CALL;
mSymbols.fReadPixels(x, y, width, height, format, type, pixels);
OnSyncCall();
+#if MOZ_BIG_ENDIAN
+#if MOZ_BIG_ENDIAN()
+ uint8_t* itr = (uint8_t*)pixels;
+ for (GLsizei i = 0; i < width * height; i++) {
+ NativeEndian::swapToLittleEndianInPlace((uint32_t*)itr, 1);
@ -20,4 +24,3 @@ diff -r 6b017d3e9733 gfx/gl/GLContext.h
AFTER_GL_CALL;
mHeavyGLCallsSinceLastFlush = true;
}

29
mozilla-bmo998749.patch Normal file
View File

@ -0,0 +1,29 @@
# HG changeset patch
# User msirringhaus@suse.de
# Date 1583738770 -3600
# Mon Mar 09 08:26:10 2020 +0100
# Node ID 34676feac1a542e409e22acf5b98735f8313b1ce
# Parent 506857dace0a08d1c9685e3ac264646590b3e27f
[mq]: mozilla-bmo998749.patch
diff -r 506857dace0a -r 34676feac1a5 gfx/2d/FilterProcessing.h
--- a/gfx/2d/FilterProcessing.h Fri Feb 28 12:31:51 2020 +0100
+++ b/gfx/2d/FilterProcessing.h Mon Mar 09 08:26:10 2020 +0100
@@ -13,10 +13,17 @@
namespace mozilla {
namespace gfx {
+#if MOZ_BIG_ENDIAN()
+const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_B = 3;
+const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_G = 2;
+const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_R = 1;
+const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_A = 0;
+#else
const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_B = 0;
const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_G = 1;
const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_R = 2;
const ptrdiff_t B8G8R8A8_COMPONENT_BYTEOFFSET_A = 3;
+#endif
class FilterProcessing {
public:

View File

@ -1,18 +0,0 @@
# HG changeset patch
# User Wolfgang Rosenauer <wr@rosenauer.org>
# Parent a9d61a2614b01b1e0ca37d00a6b11b2571868f86
diff --git a/media/libcubeb/src/cubeb_utils.cpp b/media/libcubeb/src/cubeb_utils.cpp
--- a/media/libcubeb/src/cubeb_utils.cpp
+++ b/media/libcubeb/src/cubeb_utils.cpp
@@ -15,9 +15,10 @@ size_t cubeb_sample_size(cubeb_sample_fo
return sizeof(int16_t);
case CUBEB_SAMPLE_FLOAT32LE:
case CUBEB_SAMPLE_FLOAT32BE:
return sizeof(float);
default:
// should never happen as all cases are handled above.
assert(false);
}
+ return 0;
}

View File

@ -1,11 +0,0 @@
--- a/js/src/wasm/WasmSignalHandlers.cpp 2019-05-16 11:25:13.260881532 +0200
+++ b/js/src/wasm/WasmSignalHandlers.cpp 2019-05-16 11:24:35.164589301 +0200
@@ -243,7 +243,7 @@ using mozilla::DebugOnly;
// emulation here.
#if defined(__linux__) && defined(__arm__)
-# define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
+// # define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
#endif
#ifdef WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS

View File

@ -1,25 +0,0 @@
# HG changeset patch
# Parent 1317782cd47f1d1f2410712a1dd283b305393eae
diff --git a/media/libopus/silk/arm/arm_silk_map.c b/media/libopus/silk/arm/arm_silk_map.c
--- a/media/libopus/silk/arm/arm_silk_map.c
+++ b/media/libopus/silk/arm/arm_silk_map.c
@@ -23,17 +23,17 @@ INTERRUPTION) HOWEVER CAUSED AND ON ANY
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
***********************************************************************/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include "main_FIX.h"
+#include "../fixed/main_FIX.h"
#include "NSQ.h"
#include "SigProc_FIX.h"
#if defined(OPUS_HAVE_RTCD)
# if (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && \
!defined(OPUS_ARM_PRESUME_NEON_INTR))

View File

@ -0,0 +1,23 @@
diff -rup a/modules/fdlibm/src/math_private.h b/modules/fdlibm/src/math_private.h
--- a/modules/fdlibm/src/math_private.h 2024-10-22 01:59:57.000000000 +0200
+++ b/modules/fdlibm/src/math_private.h 2024-11-19 09:16:00.223397014 +0100
@@ -17,6 +17,9 @@
#ifndef _MATH_PRIVATE_H_
#define _MATH_PRIVATE_H_
+#include <float.h>
+#include <math.h>
+#include <cmath>
#include <cfloat>
#include <stdint.h>
#include <sys/types.h>
@@ -31,7 +34,9 @@
*/
typedef double __double_t;
+#if ! (defined (__GLIBC_FLT_EVAL_METHOD) || defined (_GLIBCXX_HAVE_C99_FLT_EVAL_TYPES))
typedef __double_t double_t;
+#endif
typedef float __float_t;
/*

View File

@ -1,42 +0,0 @@
From 91bb79836ee274855393bdf6ab10e24899b1b349 Mon Sep 17 00:00:00 2001
From: Martin Liska <mliska@suse.cz>
Date: Fri, 17 May 2019 14:41:35 +0200
Subject: [PATCH] Fix top-level asm issue.
---
security/sandbox/linux/moz.build | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/security/sandbox/linux/moz.build b/security/sandbox/linux/moz.build
index aae85843e9f6..208368dfd189 100644
--- a/security/sandbox/linux/moz.build
+++ b/security/sandbox/linux/moz.build
@@ -61,7 +61,6 @@ UNIFIED_SOURCES += [
'../chromium/sandbox/linux/bpf_dsl/policy_compiler.cc',
'../chromium/sandbox/linux/bpf_dsl/syscall_set.cc',
'../chromium/sandbox/linux/seccomp-bpf/die.cc',
- '../chromium/sandbox/linux/seccomp-bpf/syscall.cc',
'broker/SandboxBrokerCommon.cpp',
'Sandbox.cpp',
'SandboxBrokerClient.cpp',
@@ -77,6 +76,7 @@ UNIFIED_SOURCES += [
SOURCES += [
'../chromium/base/strings/safe_sprintf.cc',
'../chromium/base/third_party/icu/icu_utf.cc',
+ '../chromium/sandbox/linux/seccomp-bpf/syscall.cc',
'../chromium/sandbox/linux/seccomp-bpf/trap.cc',
'../chromium/sandbox/linux/services/syscall_wrappers.cc',
]
@@ -96,6 +96,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
SOURCES['../chromium/sandbox/linux/services/syscall_wrappers.cc'].flags += [
'-Wno-empty-body',
]
+ SOURCES['../chromium/sandbox/linux/seccomp-bpf/syscall.cc'].flags += [
+ '-fno-lto'
+ ]
# gcc lto likes to put the top level asm in syscall.cc in a different partition
# from the function using it which breaks the build. Work around that by
--
2.23.0

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,25 @@
# HG changeset patch
# Parent fdc16b43f28c2e974929ca702563aaac52799654
diff --git a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
--- a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
+++ b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
@@ -44,16 +44,18 @@ static const char* sLibs[] = {
"libavcodec.53.dylib",
#elif defined(XP_OPENBSD)
"libavcodec.so", // OpenBSD hardly controls the major/minor library version
// of ffmpeg and update it regulary on ABI/API changes
#else
"libavcodec.so.61",
"libavcodec.so.60",
"libavcodec.so.59",
+ "libavcodec.so.58.134",
+ "libavcodec.so.58.91",
"libavcodec.so.58",
"libavcodec-ffmpeg.so.58",
"libavcodec-ffmpeg.so.57",
"libavcodec-ffmpeg.so.56",
"libavcodec.so.57",
"libavcodec.so.56",
"libavcodec.so.55",
"libavcodec.so.54",

View File

@ -1,38 +0,0 @@
# HG changeset patch
# Parent 381102061fccdec40efda75c7423a766f68201ba
Bug-behavior: Youtube-videos using VP9 and opus as audio-codec started loading but did not play
Reason: While parsing the audio-stream, the sampling frequency (short rate) was wrongly parsed by
nestegg, returning 0 all the time. This led to the audio-track reporting that it neither had
valid video nor audio. Which led to an endless-loop in the video state machine.
Solution: Correct parsing of rate in nestegg, which is a float and cuts of bytes.
Link: https://github.com/kinetiknz/nestegg/issues/64
diff -r 381102061fcc -r 8da4be020b1e media/libnestegg/src/nestegg.c
--- a/media/libnestegg/src/nestegg.c Tue Aug 13 07:51:27 2019 +0200
+++ b/media/libnestegg/src/nestegg.c Tue Aug 20 07:59:54 2019 +0200
@@ -768,7 +768,15 @@
{
union {
uint64_t u;
- float f;
+ struct {
+#if __FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__
+ uint32_t _pad;
+ float f;
+#else
+ float f;
+ uint32_t _pad;
+#endif
+ } f;
double d;
} value;
int r;
@@ -780,7 +788,7 @@
if (r != 1)
return r;
if (length == 4)
- *val = value.f;
+ *val = value.f.f;
else
*val = value.d;
return 1;

View File

@ -3,32 +3,30 @@
# Date 1558442915 -7200
# Tue May 21 14:48:35 2019 +0200
# Node ID 6bcf2dfebc1ea2aa34e5cc61152709fc8e409dc5
# Parent 4c434d19d03d5461e54fa22dfb82eaed4cd6631b
# Parent 715f01d61df8627117e6aefca540f0c1bba45011
Do not use gconf for proxy settings if not running within Gnome
Index: toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
===================================================================
RCS file: /cvsroot/mozilla/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp,v
retrieving revision 1.1
diff -r 4c434d19d03d -r 6bcf2dfebc1e toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
--- a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp Wed Jun 12 17:43:18 2019 +0000
+++ b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp Tue May 21 14:48:35 2019 +0200
@@ -55,11 +55,14 @@
diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
--- a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
+++ b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
@@ -52,10 +52,13 @@ nsUnixSystemProxySettings::GetMainThread
}
void nsUnixSystemProxySettings::Init() {
- mGSettings = do_GetService(NS_GSETTINGSSERVICE_CONTRACTID);
- if (mGSettings) {
- mGSettings->GetCollectionForSchema(
- NS_LITERAL_CSTRING("org.gnome.system.proxy"),
- getter_AddRefs(mProxySettings));
- mGSettings->GetCollectionForSchema("org.gnome.system.proxy"_ns,
- getter_AddRefs(mProxySettings));
+ const char* sessionType = PR_GetEnv("DESKTOP_SESSION");
+ if (sessionType && !strcmp(sessionType, "gnome")) {
+ mGSettings = do_GetService(NS_GSETTINGSSERVICE_CONTRACTID);
+ if (mGSettings) {
+ mGSettings->GetCollectionForSchema(
+ NS_LITERAL_CSTRING("org.gnome.system.proxy"),
+ getter_AddRefs(mProxySettings));
+ mGSettings->GetCollectionForSchema("org.gnome.system.proxy"_ns,
+ getter_AddRefs(mProxySettings));
+ }
}
}

View File

@ -1,18 +1,13 @@
# HG changeset patch
# User Petr Cerny <pcerny@novell.com>
# Parent 7308e4a7c1f769f4bbbc90870b849cadd99495a6
# Parent 6ab277cf616dc2748e9855101100a97a6cec10a6
# Parent 1c6a565013e4c5f3494f964269783939cd5ed0b8
Bug 634334 - call to the ntlm_auth helper fails
diff --git a/extensions/auth/nsAuthSambaNTLM.cpp b/extensions/auth/nsAuthSambaNTLM.cpp
--- a/extensions/auth/nsAuthSambaNTLM.cpp
+++ b/extensions/auth/nsAuthSambaNTLM.cpp
@@ -156,17 +156,17 @@ static uint8_t* ExtractMessage(const nsA
*aLen = (length / 4) * 3 - numEquals;
return reinterpret_cast<uint8_t*>(PL_Base64Decode(s, length, nullptr));
}
nsresult nsAuthSambaNTLM::SpawnNTLMAuthHelper() {
@@ -160,7 +160,7 @@ nsresult nsAuthSambaNTLM::SpawnNTLMAuthH
const char* username = PR_GetEnv("USER");
if (!username) return NS_ERROR_FAILURE;
@ -21,8 +16,3 @@ diff --git a/extensions/auth/nsAuthSambaNTLM.cpp b/extensions/auth/nsAuthSambaNT
"--helper-protocol",
"ntlmssp-client-1",
"--use-cached-creds",
"--username",
username,
nullptr};
bool isOK = SpawnIOChild(const_cast<char* const*>(args), &mChildPID,

View File

@ -1,26 +0,0 @@
# HG changeset patch
# Parent 33024abb3c58dab7239e32388df58e14f99defd5
# User Wolfgang Rosenauer <wr@rosenauer.org>
# Parent 0cfd693fdbbb0635787f1aeacee2dda43b01c495
diff --git a/media/gmp-clearkey/0.1/openaes/oaes_lib.c b/media/gmp-clearkey/0.1/openaes/oaes_lib.c
--- a/media/gmp-clearkey/0.1/openaes/oaes_lib.c
+++ b/media/gmp-clearkey/0.1/openaes/oaes_lib.c
@@ -24,16 +24,17 @@
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* ---------------------------------------------------------------------------
*/
#include <stdlib.h>
+#include <stdio.h>
#include <stddef.h>
#include <time.h>
#include <string.h>
#include "mozilla/Sprintf.h"
#ifdef WIN32
#include <process.h>

124
mozilla-pgo.patch Normal file
View File

@ -0,0 +1,124 @@
# HG changeset patch
# User Wolfgang Rosenauer <wr@rosenauer.org>
# Parent 9959fe2a13a39cbeb98ca1bef2e21caba16717bd
Index: firefox-115.0/build/moz.configure/lto-pgo.configure
===================================================================
--- firefox-115.0.orig/build/moz.configure/lto-pgo.configure
+++ firefox-115.0/build/moz.configure/lto-pgo.configure
@@ -251,8 +251,8 @@ def lto(
cflags.append("-flto")
ldflags.append("-flto")
else:
- cflags.append("-flto=thin")
- ldflags.append("-flto=thin")
+ cflags.append("-flto")
+ ldflags.append("-flto")
if target.os == "Android" and "cross" in values:
# Work around https://github.com/rust-lang/rust/issues/90088
@@ -268,7 +268,7 @@ def lto(
if "full" in values:
cflags.append("-flto")
else:
- cflags.append("-flto=thin")
+ cflags.append("-flto")
# With clang-cl, -flto can only be used with -c or -fuse-ld=lld.
# AC_TRY_LINKs during configure don't have -c, so pass -fuse-ld=lld.
cflags.append("-fuse-ld=lld")
Index: firefox-115.0/build/pgo/profileserver.py
===================================================================
--- firefox-115.0.orig/build/pgo/profileserver.py
+++ firefox-115.0/build/pgo/profileserver.py
@@ -11,7 +11,7 @@ import subprocess
import sys
import mozcrash
-from mozbuild.base import BinaryNotFoundException, MozbuildObject
+from mozbuild.base import BinaryNotFoundException, MozbuildObject, BuildEnvironmentNotFoundException
from mozfile import TemporaryDirectory
from mozhttpd import MozHttpd
from mozprofile import FirefoxProfile, Preferences
@@ -87,9 +87,22 @@ if __name__ == "__main__":
locations = ServerLocations()
locations.add_host(host="127.0.0.1", port=PORT, options="primary,privileged")
- old_profraw_files = glob.glob("*.profraw")
- for f in old_profraw_files:
- os.remove(f)
+ using_gcc = False
+ try:
+ if build.config_environment.substs.get('CC_TYPE') == 'gcc':
+ using_gcc = True
+ except BuildEnvironmentNotFoundException:
+ pass
+
+ if using_gcc:
+ for dirpath, _, filenames in os.walk('.'):
+ for f in filenames:
+ if f.endswith('.gcda'):
+ os.remove(os.path.join(dirpath, f))
+ else:
+ old_profraw_files = glob.glob('*.profraw')
+ for f in old_profraw_files:
+ os.remove(f)
with TemporaryDirectory() as profilePath:
# TODO: refactor this into mozprofile
@@ -213,6 +226,10 @@ if __name__ == "__main__":
print("Firefox exited successfully, but produced a crashreport")
sys.exit(1)
+ print('Copying profile data....')
+ os.system('pwd');
+ os.system('tar cf profdata.tar.gz `find . -name "*.gcda"`; cd ..; tar xf instrumented/profdata.tar.gz;');
+
llvm_profdata = env.get("LLVM_PROFDATA")
if llvm_profdata:
profraw_files = glob.glob("*.profraw")
Index: firefox-115.0/build/unix/mozconfig.unix
===================================================================
--- firefox-115.0.orig/build/unix/mozconfig.unix
+++ firefox-115.0/build/unix/mozconfig.unix
@@ -4,6 +4,15 @@ if [ -n "$FORCE_GCC" ]; then
CC="$MOZ_FETCHES_DIR/gcc/bin/gcc"
CXX="$MOZ_FETCHES_DIR/gcc/bin/g++"
+ if [ -n "$MOZ_PGO" ]; then
+ if [ -z "$USE_ARTIFACT" ]; then
+ ac_add_options --enable-lto
+ fi
+ export AR="$topsrcdir/gcc/bin/gcc-ar"
+ export NM="$topsrcdir/gcc/bin/gcc-nm"
+ export RANLIB="$topsrcdir/gcc/bin/gcc-ranlib"
+ fi
+
# We want to make sure we use binutils and other binaries in the tooltool
# package.
mk_add_options "export PATH=$MOZ_FETCHES_DIR/gcc/bin:$MOZ_FETCHES_DIR/binutils/bin:$PATH"
Index: firefox-115.0/extensions/spellcheck/src/moz.build
===================================================================
--- firefox-115.0.orig/extensions/spellcheck/src/moz.build
+++ firefox-115.0/extensions/spellcheck/src/moz.build
@@ -28,3 +28,5 @@ EXPORTS.mozilla += [
"mozInlineSpellChecker.h",
"mozSpellChecker.h",
]
+
+CXXFLAGS += ['-fno-devirtualize']
Index: firefox-115.0/toolkit/components/terminator/nsTerminator.cpp
===================================================================
--- firefox-115.0.orig/toolkit/components/terminator/nsTerminator.cpp
+++ firefox-115.0/toolkit/components/terminator/nsTerminator.cpp
@@ -460,6 +460,11 @@ void nsTerminator::StartWatchdog() {
}
#endif
+ // Disable watchdog for PGO train builds - writting profile information at
+ // exit may take time and it is better to make build hang rather than
+ // silently produce poorly performing binary.
+ crashAfterMS = INT32_MAX;
+
UniquePtr<Options> options(new Options());
// crashAfterTicks is guaranteed to be > 0 as
// crashAfterMS >= ADDITIONAL_WAIT_BEFORE_CRASH_MS >> HEARTBEAT_INTERVAL_MS

View File

@ -1,20 +0,0 @@
# HG changeset patch
# User msirringhaus@suse.de
# Date 1558452418 -7200
# Tue May 21 17:26:58 2019 +0200
# Node ID 6cd963b6c82ea6629aaf4050851789b78f310338
# Parent 602e92722e765a3c238d3b96b26c0c8063b5eeb4
imported patch mozilla-ppc-altivec_static_inline.patch
diff -r 602e92722e76 -r 6cd963b6c82e gfx/qcms/transform-altivec.c
--- a/gfx/qcms/transform-altivec.c Tue May 21 17:26:48 2019 +0200
+++ b/gfx/qcms/transform-altivec.c Tue May 21 17:26:58 2019 +0200
@@ -30,7 +30,7 @@
static const ALIGN float floatScaleX4 = FLOATSCALE;
static const ALIGN float clampMaxValueX4 = CLAMPMAXVAL;
-inline vector float load_aligned_float(float *dataPtr)
+static inline vector float load_aligned_float(float *dataPtr)
{
vector float data = vec_lde(0, dataPtr);
vector unsigned char moveToStart = vec_lvsl(0, dataPtr);

View File

@ -1,34 +1,15 @@
# HG changeset patch
# User msirringhaus@suse.de
# Date 1560754926 -7200
# Mon Jun 17 09:02:06 2019 +0200
# Node ID 428161c3b9599083e1b8710eda1760f1f707ab11
# Parent 6cd963b6c82ea6629aaf4050851789b78f310338
#Description: reduce the rust debuginfo level on selected architectures where
# compiling with debuginfo=2 causes the OOM killer to interrupt the build on
# launchpad builders. Initially this was only on 32 bit architectures, but with
# firefox 63 it started happening frequently on arm64 and ppc64el too.
# Parent 135d931b3e674a670473f69f8c079e741ac63643
diff -r 6cd963b6c82e -r 428161c3b959 build/moz.configure/toolchain.configure
--- a/build/moz.configure/toolchain.configure Tue May 21 17:26:58 2019 +0200
+++ b/build/moz.configure/toolchain.configure Mon Jun 17 09:02:06 2019 +0200
@@ -1865,8 +1865,8 @@
return '1' if moz_optimize.optimize else '0'
-@depends(rustc_opt_level, debug_rust, '--enable-debug-symbols')
-def rust_compile_flags(opt_level, debug_rust, debug_symbols):
+@depends(rustc_opt_level, debug_rust, '--enable-debug-symbols', host)
+def rust_compile_flags(opt_level, debug_rust, debug_symbols, host):
# Cargo currently supports only two interesting profiles for building:
# development and release. Those map (roughly) to --enable-debug and
# --disable-debug in Gecko, respectively.
@@ -1889,6 +1889,8 @@
diff --git a/build/moz.configure/rust.configure b/build/moz.configure/rust.configure
--- a/build/moz.configure/rust.configure
+++ b/build/moz.configure/rust.configure
@@ -668,7 +668,7 @@ def rust_compile_flags(
debug_assertions = False
if debug_symbols:
debug_info = '2'
+ if host.bitness == 32 or host.cpu == 'aarch64' or host.cpu == 'ppc64':
+ debug_info = '1'
- debug_info = "2"
+ debug_info = '1'
opts = []

View File

@ -1,20 +0,0 @@
# HG changeset patch
# User msirringhaus@suse.de
# Date 1558452126 -7200
# Tue May 21 17:22:06 2019 +0200
# Node ID a3cc550d25e3a04d906f516928cbcbe50efd585e
# Parent 433beec63e6b5f409683af20a0c1ab137cc7bfad
[mq]: mozilla-s390-bigendian.patch
diff -r 433beec63e6b -r a3cc550d25e3 build/autoconf/icu.m4
--- a/build/autoconf/icu.m4 Tue May 21 17:12:20 2019 +0200
+++ b/build/autoconf/icu.m4 Tue May 21 17:22:06 2019 +0200
@@ -78,7 +78,7 @@
# TODO: the l is actually endian-dependent
# We could make this set as 'l' or 'b' for little or big, respectively,
# but we'd need to check in a big-endian version of the file.
- ICU_DATA_FILE="icudt${version}l.dat"
+ ICU_DATA_FILE="icudt${version}b.dat"
fi
AC_SUBST(MOZ_ICU_VERSION)

View File

@ -3,34 +3,31 @@
# Date 1558452408 -7200
# Tue May 21 17:26:48 2019 +0200
# Node ID 602e92722e765a3c238d3b96b26c0c8063b5eeb4
# Parent a3cc550d25e3a04d906f516928cbcbe50efd585e
# Parent 783ceb006fcdabe5ad23bd561362e721c7ed5f8c
[mq]: mozilla-s390-context.patch
diff -r a3cc550d25e3 -r 602e92722e76 js/src/wasm/WasmSignalHandlers.cpp
--- a/js/src/wasm/WasmSignalHandlers.cpp Tue May 21 17:22:06 2019 +0200
+++ b/js/src/wasm/WasmSignalHandlers.cpp Tue May 21 17:26:48 2019 +0200
@@ -154,6 +154,10 @@
# define R01_sig(p) ((p)->uc_mcontext.gp_regs[1])
# define R32_sig(p) ((p)->uc_mcontext.gp_regs[32])
# endif
+# if defined(__linux__) && defined(__s390x__)
+# define GR_sig(p,x) ((p)->uc_mcontext.gregs[x])
+# define PSWa_sig(p) ((p)->uc_mcontext.psw.addr)
+# endif
#elif defined(__NetBSD__)
# define EIP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EIP])
# define EBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EBP])
@@ -385,8 +389,13 @@
# define PC_sig(p) R32_sig(p)
# define SP_sig(p) R01_sig(p)
# define FP_sig(p) R01_sig(p)
+#elif defined(__s390x__)
+# define PC_sig(p) PSWa_sig(p)
+# define SP_sig(p) GR_sig(p, 15)
+# define FP_sig(p) GR_sig(p, 11)
#endif
+
static void SetContextPC(CONTEXT* context, uint8_t* pc) {
#ifdef PC_sig
*reinterpret_cast<uint8_t**>(&PC_sig(context)) = pc;
diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp
--- a/js/src/wasm/WasmSignalHandlers.cpp
+++ b/js/src/wasm/WasmSignalHandlers.cpp
@@ -174,6 +174,10 @@ using mozilla::DebugOnly;
# define FP_sig(p) ((p)->uc_mcontext.gregs[REG_FPRS])
# define SP_sig(p) ((p)->uc_mcontext.gregs[REG_SP])
# endif
+# if defined(__linux__) && defined(__s390x__)
+# define GR_sig(p, x) ((p)->uc_mcontext.gregs[x])
+# define PSWa_sig(p) ((p)->uc_mcontext.psw.addr)
+# endif
# elif defined(__NetBSD__)
# define EIP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EIP])
# define EBP_sig(p) ((p)->uc_mcontext.__gregs[_REG_EBP])
@@ -416,6 +420,10 @@ struct macos_aarch64_context {
# define FP_sig(p) RFP_sig(p)
# define SP_sig(p) R03_sig(p)
# define LR_sig(p) RRA_sig(p)
+# elif defined(__s390x__)
+# define PC_sig(p) PSWa_sig(p)
+# define SP_sig(p) GR_sig(p, 15)
+# define FP_sig(p) GR_sig(p, 11)
# elif defined(__riscv)
# define PC_sig(p) RPC_sig(p)
# define FP_sig(p) RFP_sig(p)

View File

@ -0,0 +1,590 @@
# HG changeset patch
# Parent af0655f894a27ef60aa8438af7939a5ebc498df0
Index: firefox-128.0/gfx/skia/skia/include/codec/SkEncodedOrigin.h
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/include/codec/SkEncodedOrigin.h
+++ firefox-128.0/gfx/skia/skia/include/codec/SkEncodedOrigin.h
@@ -41,6 +41,7 @@ static inline SkMatrix SkEncodedOriginTo
case kLeftBottom_SkEncodedOrigin: return SkMatrix::MakeAll( 0, 1, 0, -1, 0, h, 0, 0, 1);
}
SK_ABORT("Unexpected origin");
+ SkUNREACHABLE;
}
/**
Index: firefox-128.0/gfx/skia/skia/include/private/gpu/ganesh/GrTypesPriv.h
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/include/private/gpu/ganesh/GrTypesPriv.h
+++ firefox-128.0/gfx/skia/skia/include/private/gpu/ganesh/GrTypesPriv.h
@@ -301,6 +301,7 @@ static inline bool GrTextureTypeHasRestr
default:
SK_ABORT("Unexpected texture type");
}
+ SkUNREACHABLE;
}
//////////////////////////////////////////////////////////////////////////////
Index: firefox-128.0/gfx/skia/skia/src/core/SkDescriptor.cpp
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/src/core/SkDescriptor.cpp
+++ firefox-128.0/gfx/skia/skia/src/core/SkDescriptor.cpp
@@ -26,6 +26,7 @@ std::unique_ptr<SkDescriptor> SkDescript
void SkDescriptor::operator delete(void* p) { ::operator delete(p); }
void* SkDescriptor::operator new(size_t) {
SK_ABORT("Descriptors are created with placement new.");
+ SkUNREACHABLE;
}
void SkDescriptor::flatten(SkWriteBuffer& buffer) const {
Index: firefox-128.0/gfx/skia/skia/src/core/SkGeometry.h
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/src/core/SkGeometry.h
+++ firefox-128.0/gfx/skia/skia/src/core/SkGeometry.h
@@ -281,6 +281,7 @@ static inline bool SkCubicIsDegenerate(S
return true;
}
SK_ABORT("Invalid SkCubicType");
+ SkUNREACHABLE;
}
static inline const char* SkCubicTypeName(SkCubicType type) {
@@ -293,6 +294,7 @@ static inline const char* SkCubicTypeNam
case SkCubicType::kLineOrPoint: return "kLineOrPoint";
}
SK_ABORT("Invalid SkCubicType");
+ SkUNREACHABLE;
}
/** Returns the cubic classification.
Index: firefox-128.0/gfx/skia/skia/src/core/SkTextBlob.cpp
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/src/core/SkTextBlob.cpp
+++ firefox-128.0/gfx/skia/skia/src/core/SkTextBlob.cpp
@@ -213,6 +213,7 @@ void SkTextBlob::operator delete(void* p
void* SkTextBlob::operator new(size_t) {
SK_ABORT("All blobs are created by placement new.");
+ SkUNREACHABLE;
}
void* SkTextBlob::operator new(size_t, void* p) {
Index: firefox-128.0/gfx/skia/skia/src/core/SkTypeface_remote.h
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/src/core/SkTypeface_remote.h
+++ firefox-128.0/gfx/skia/skia/src/core/SkTypeface_remote.h
@@ -108,12 +108,14 @@ public:
bool isLogging() const {return fIsLogging;}
protected:
- int onGetUPEM() const override { SK_ABORT("Should never be called."); }
+ int onGetUPEM() const override { SK_ABORT("Should never be called."); SkUNREACHABLE; }
std::unique_ptr<SkStreamAsset> onOpenStream(int* ttcIndex) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
sk_sp<SkTypeface> onMakeClone(const SkFontArguments& args) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
bool onGlyphMaskNeedsCurrentColor() const override {
return fGlyphMaskNeedsCurrentColor;
@@ -121,10 +123,12 @@ protected:
int onGetVariationDesignPosition(SkFontArguments::VariationPosition::Coordinate coordinates[],
int coordinateCount) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
int onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[],
int parameterCount) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
void onGetFamilyName(SkString* familyName) const override {
// Used by SkStrikeCache::DumpMemoryStatistics.
@@ -132,15 +136,19 @@ protected:
}
bool onGetPostScriptName(SkString*) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
int onGetTableTags(SkFontTableTag tags[]) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
size_t onGetTableData(SkFontTableTag, size_t offset, size_t length, void* data) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
std::unique_ptr<SkScalerContext> onCreateScalerContext(
const SkScalerContextEffects& effects, const SkDescriptor* desc) const override
@@ -154,20 +162,25 @@ protected:
}
void onGetFontDescriptor(SkFontDescriptor*, bool*) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
void getGlyphToUnicodeMap(SkUnichar*) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
void getPostScriptGlyphNames(SkString*) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
std::unique_ptr<SkAdvancedTypefaceMetrics> onGetAdvancedMetrics() const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
void onCharsToGlyphs(const SkUnichar* chars, int count, SkGlyphID glyphs[]) const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
int onCountGlyphs() const override {
return this->glyphCount();
@@ -175,6 +188,7 @@ protected:
void* onGetCTFontRef() const override {
SK_ABORT("Should never be called.");
+ SkUNREACHABLE;
}
private:
Index: firefox-128.0/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp
+++ firefox-128.0/gfx/skia/skia/src/effects/imagefilters/SkBlurImageFilter.cpp
@@ -799,6 +799,7 @@ sk_sp<SkSpecialImage> cpu_blur(const ski
return maker;
}
SK_ABORT("Sigma is out of range.");
+ SkUNREACHABLE;
};
PassMaker* makerX = makeMaker(sigma.width());
Index: firefox-128.0/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp
+++ firefox-128.0/gfx/skia/skia/src/fonts/SkFontMgr_indirect.cpp
@@ -69,6 +69,7 @@ void SkFontMgr_Indirect::onGetFamilyName
sk_sp<SkFontStyleSet> SkFontMgr_Indirect::onCreateStyleSet(int index) const {
SK_ABORT("Not implemented");
+ SkUNREACHABLE;
}
sk_sp<SkFontStyleSet> SkFontMgr_Indirect::onMatchFamily(const char familyName[]) const {
Index: firefox-128.0/gfx/skia/skia/src/sksl/SkSLOperator.cpp
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/src/sksl/SkSLOperator.cpp
+++ firefox-128.0/gfx/skia/skia/src/sksl/SkSLOperator.cpp
@@ -51,7 +51,7 @@ OperatorPrecedence Operator::getBinaryPr
case Kind::BITWISEXOREQ: // fall through
case Kind::BITWISEOREQ: return OperatorPrecedence::kAssignment;
case Kind::COMMA: return OperatorPrecedence::kSequence;
- default: SK_ABORT("unsupported binary operator");
+ default: SkUNREACHABLE;
}
}
Index: firefox-128.0/gfx/skia/skia/src/sksl/ir/SkSLType.h
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/src/sksl/ir/SkSLType.h
+++ firefox-128.0/gfx/skia/skia/src/sksl/ir/SkSLType.h
@@ -468,6 +468,7 @@ public:
virtual SkSpan<const Field> fields() const {
SK_ABORT("Internal error: not a struct");
+ SkUNREACHABLE;
}
/**
Index: firefox-128.0/gfx/skia/skia/src/utils/SkShadowUtils.cpp
===================================================================
--- firefox-128.0.orig/gfx/skia/skia/src/utils/SkShadowUtils.cpp
+++ firefox-128.0/gfx/skia/skia/src/utils/SkShadowUtils.cpp
@@ -140,6 +140,7 @@ struct SpotVerticesFactory {
return true;
}
SK_ABORT("Uninitialized occluder type?");
+ SkUNREACHABLE;
}
sk_sp<SkVertices> makeVertices(const SkPath& path, const SkMatrix& ctm,
Index: firefox-128.0/intl/icu/source/i18n/number_rounding.cpp
===================================================================
--- firefox-128.0.orig/intl/icu/source/i18n/number_rounding.cpp
+++ firefox-128.0/intl/icu/source/i18n/number_rounding.cpp
@@ -287,6 +287,7 @@ FractionPrecision Precision::constructFr
settings.fMaxFrac = static_cast<digits_t>(maxFrac);
settings.fMinSig = -1;
settings.fMaxSig = -1;
+ settings.fPriority = UNUM_ROUNDING_PRIORITY_RELAXED;
PrecisionUnion union_;
union_.fracSig = settings;
return {RND_FRACTION, union_};
@@ -298,6 +299,7 @@ Precision Precision::constructSignifican
settings.fMaxFrac = -1;
settings.fMinSig = static_cast<digits_t>(minSig);
settings.fMaxSig = static_cast<digits_t>(maxSig);
+ settings.fPriority = UNUM_ROUNDING_PRIORITY_RELAXED;
PrecisionUnion union_;
union_.fracSig = settings;
return {RND_SIGNIFICANT, union_};
Index: firefox-128.0/js/src/irregexp/imported/regexp-parser.cc
===================================================================
--- firefox-128.0.orig/js/src/irregexp/imported/regexp-parser.cc
+++ firefox-128.0/js/src/irregexp/imported/regexp-parser.cc
@@ -2781,6 +2781,7 @@ bool MayContainStrings(ClassSetOperandTy
if (operand->IsClassRanges()) return false;
return operand->AsClassSetExpression()->may_contain_strings();
}
+ UNREACHABLE();
}
} // namespace
Index: firefox-128.0/third_party/libwebrtc/api/adaptation/resource.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/api/adaptation/resource.cc
+++ firefox-128.0/third_party/libwebrtc/api/adaptation/resource.cc
@@ -22,6 +22,7 @@ const char* ResourceUsageStateToString(R
return "kUnderuse";
}
RTC_CHECK_NOTREACHED();
+ return nullptr;
}
ResourceListener::~ResourceListener() {}
Index: firefox-128.0/third_party/libwebrtc/api/rtp_parameters.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/api/rtp_parameters.cc
+++ firefox-128.0/third_party/libwebrtc/api/rtp_parameters.cc
@@ -33,6 +33,7 @@ const char* DegradationPreferenceToStrin
return "balanced";
}
RTC_CHECK_NOTREACHED();
+ return "";
}
const double kDefaultBitratePriority = 1.0;
Index: firefox-128.0/third_party/libwebrtc/api/video/video_frame_buffer.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/api/video/video_frame_buffer.cc
+++ firefox-128.0/third_party/libwebrtc/api/video/video_frame_buffer.cc
@@ -106,6 +106,8 @@ const char* VideoFrameBufferTypeToString
default:
RTC_DCHECK_NOTREACHED();
}
+ RTC_DCHECK_NOTREACHED();
+ return nullptr;
}
int I420BufferInterface::ChromaWidth() const {
Index: firefox-128.0/third_party/libwebrtc/api/video_codecs/video_codec.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/api/video_codecs/video_codec.cc
+++ firefox-128.0/third_party/libwebrtc/api/video_codecs/video_codec.cc
@@ -162,6 +162,7 @@ const char* CodecTypeToPayloadString(Vid
return kPayloadNameH265;
}
RTC_CHECK_NOTREACHED();
+ return "";
}
VideoCodecType PayloadStringToCodecType(const std::string& name) {
Index: firefox-128.0/third_party/libwebrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc
+++ firefox-128.0/third_party/libwebrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc
@@ -189,6 +189,7 @@ class VideoEncoderSoftwareFallbackWrappe
return fallback_encoder_.get();
}
RTC_CHECK_NOTREACHED();
+ return nullptr;
}
// Updates encoder with last observed parameters, such as callbacks, rates,
@@ -382,6 +383,7 @@ int32_t VideoEncoderSoftwareFallbackWrap
return fallback_encoder_->Encode(frame, frame_types);
}
RTC_CHECK_NOTREACHED();
+ return WEBRTC_VIDEO_CODEC_ERROR;
}
int32_t VideoEncoderSoftwareFallbackWrapper::EncodeWithMainEncoder(
Index: firefox-128.0/third_party/libwebrtc/call/adaptation/video_stream_adapter.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/call/adaptation/video_stream_adapter.cc
+++ firefox-128.0/third_party/libwebrtc/call/adaptation/video_stream_adapter.cc
@@ -169,6 +169,7 @@ const char* Adaptation::StatusToString(A
return "kRejectedByConstraint";
}
RTC_CHECK_NOTREACHED();
+ return "";
}
Adaptation::Adaptation(int validation_id,
@@ -391,6 +392,7 @@ VideoStreamAdapter::RestrictionsOrState
return Adaptation::Status::kAdaptationDisabled;
}
RTC_CHECK_NOTREACHED();
+ return Adaptation::Status::kAdaptationDisabled;
}
Adaptation VideoStreamAdapter::GetAdaptationDown() {
@@ -473,6 +475,7 @@ VideoStreamAdapter::GetAdaptationDownSte
return Adaptation::Status::kAdaptationDisabled;
}
RTC_CHECK_NOTREACHED();
+ return Adaptation::Status::kAdaptationDisabled;
}
VideoStreamAdapter::RestrictionsOrState VideoStreamAdapter::DecreaseResolution(
@@ -626,6 +629,8 @@ Adaptation VideoStreamAdapter::GetAdaptD
}
}
RTC_CHECK_NOTREACHED();
+ return RestrictionsOrStateToAdaptation(
+ Adaptation::Status::kAdaptationDisabled, input_state);
}
VideoStreamAdapter::RestrictionsOrState
Index: firefox-128.0/third_party/libwebrtc/call/rtp_payload_params.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/call/rtp_payload_params.cc
+++ firefox-128.0/third_party/libwebrtc/call/rtp_payload_params.cc
@@ -406,7 +406,7 @@ absl::optional<FrameDependencyStructure>
case VideoCodecType::kVideoCodecH265:
return absl::nullopt;
}
- RTC_DCHECK_NOTREACHED() << "Unsupported codec.";
+ RTC_CHECK_NOTREACHED();
}
void RtpPayloadParams::GenericToGeneric(int64_t shared_frame_id,
Index: firefox-128.0/third_party/libwebrtc/call/video_send_stream.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/call/video_send_stream.cc
+++ firefox-128.0/third_party/libwebrtc/call/video_send_stream.cc
@@ -30,6 +30,7 @@ const char* StreamTypeToString(VideoSend
return "flexfec";
}
RTC_CHECK_NOTREACHED();
+ return "";
}
} // namespace
Index: firefox-128.0/third_party/libwebrtc/media/base/codec.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/media/base/codec.cc
+++ firefox-128.0/third_party/libwebrtc/media/base/codec.cc
@@ -262,6 +262,7 @@ bool Codec::Matches(const Codec& codec)
case Type::kVideo:
return IsSameCodecSpecific(name, params, codec.name, codec.params);
}
+ return false; // unreached
};
return matches_id && matches_type_specific();
Index: firefox-128.0/third_party/libwebrtc/modules/audio_processing/agc2/clipping_predictor.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/audio_processing/agc2/clipping_predictor.cc
+++ firefox-128.0/third_party/libwebrtc/modules/audio_processing/agc2/clipping_predictor.cc
@@ -378,7 +378,7 @@ std::unique_ptr<ClippingPredictor> Creat
config.reference_window_delay, config.clipping_threshold,
/*adaptive_step_estimation=*/false);
}
- RTC_DCHECK_NOTREACHED();
+ RTC_CHECK_NOTREACHED();
}
} // namespace webrtc
Index: firefox-128.0/third_party/libwebrtc/modules/audio_processing/agc2/input_volume_stats_reporter.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/audio_processing/agc2/input_volume_stats_reporter.cc
+++ firefox-128.0/third_party/libwebrtc/modules/audio_processing/agc2/input_volume_stats_reporter.cc
@@ -48,6 +48,7 @@ constexpr absl::string_view MetricNamePr
case InputVolumeType::kRecommended:
return "WebRTC.Audio.Apm.RecommendedInputVolume.";
}
+ RTC_CHECK_NOTREACHED();
}
metrics::Histogram* CreateVolumeHistogram(InputVolumeType input_volume_type) {
Index: firefox-128.0/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/rnn_fc.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/rnn_fc.cc
+++ firefox-128.0/third_party/libwebrtc/modules/audio_processing/agc2/rnn_vad/rnn_fc.cc
@@ -60,6 +60,8 @@ rtc::FunctionView<float(float)> GetActiv
case ActivationFunction::kSigmoidApproximated:
return ::rnnoise::SigmoidApproximated;
}
+ // supposed to be never reached apparently therefore returning bogus
+ return ::rnnoise::TansigApproximated;
}
} // namespace
Index: firefox-128.0/third_party/libwebrtc/modules/audio_processing/audio_processing_impl.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/audio_processing/audio_processing_impl.cc
+++ firefox-128.0/third_party/libwebrtc/modules/audio_processing/audio_processing_impl.cc
@@ -101,6 +101,7 @@ GainControl::Mode Agc1ConfigModeToInterf
return GainControl::kFixedDigital;
}
RTC_CHECK_NOTREACHED();
+ return GainControl::kAdaptiveAnalog;
}
bool MinimizeProcessingForUnusedOutput() {
@@ -168,7 +169,7 @@ int AudioFormatValidityToErrorCode(Audio
case AudioFormatValidity::kInvalidChannelCount:
return AudioProcessing::kBadNumberChannelsError;
}
- RTC_DCHECK(false);
+ RTC_CHECK_NOTREACHED();
}
// Returns an AudioProcessing::Error together with the best possible option for
@@ -2425,6 +2426,7 @@ void AudioProcessingImpl::InitializeNois
return NsConfig::SuppressionLevel::k21dB;
}
RTC_CHECK_NOTREACHED();
+ return NsConfig::SuppressionLevel::k6dB;
};
NsConfig cfg;
Index: firefox-128.0/third_party/libwebrtc/modules/audio_processing/include/audio_processing.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/audio_processing/include/audio_processing.cc
+++ firefox-128.0/third_party/libwebrtc/modules/audio_processing/include/audio_processing.cc
@@ -32,6 +32,7 @@ std::string NoiseSuppressionLevelToStrin
return "VeryHigh";
}
RTC_CHECK_NOTREACHED();
+ return "";
}
std::string GainController1ModeToString(const Agc1Config::Mode& mode) {
@@ -44,6 +45,7 @@ std::string GainController1ModeToString(
return "FixedDigital";
}
RTC_CHECK_NOTREACHED();
+ return "";
}
} // namespace
Index: firefox-128.0/third_party/libwebrtc/modules/audio_processing/transient/transient_suppressor_impl.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/audio_processing/transient/transient_suppressor_impl.cc
+++ firefox-128.0/third_party/libwebrtc/modules/audio_processing/transient/transient_suppressor_impl.cc
@@ -53,6 +53,7 @@ std::string GetVadModeLabel(TransientSup
case TransientSuppressor::VadMode::kNoVad:
return "no VAD";
}
+ RTC_CHECK_NOTREACHED();
}
} // namespace
Index: firefox-128.0/third_party/libwebrtc/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
+++ firefox-128.0/third_party/libwebrtc/modules/congestion_controller/goog_cc/goog_cc_network_control.cc
@@ -95,6 +95,8 @@ BandwidthLimitedCause GetBandwidthLimite
case LossBasedState::kDelayBasedEstimate:
return BandwidthLimitedCause::kDelayBasedLimited;
}
+ // just return something by default
+ return BandwidthLimitedCause::kLossLimitedBwe;
}
} // namespace
Index: firefox-128.0/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc
+++ firefox-128.0/third_party/libwebrtc/modules/desktop_capture/linux/wayland/screencast_portal.cc
@@ -44,6 +44,7 @@ ScreenCastPortal::CaptureSourceType Scre
case CaptureType::kAnyScreenContent:
return ScreenCastPortal::CaptureSourceType::kAnyScreenContent;
}
+ RTC_CHECK_NOTREACHED();
}
ScreenCastPortal::ScreenCastPortal(CaptureType type, PortalNotifier* notifier)
Index: firefox-128.0/third_party/libwebrtc/modules/pacing/bitrate_prober.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/pacing/bitrate_prober.cc
+++ firefox-128.0/third_party/libwebrtc/modules/pacing/bitrate_prober.cc
@@ -84,6 +84,7 @@ bool BitrateProber::ReadyToSetActiveStat
return packet_size >=
std::min(RecommendedMinProbeSize(), config_.min_packet_size.Get());
}
+ RTC_CHECK_NOTREACHED();
}
void BitrateProber::OnIncomingPacket(DataSize packet_size) {
Index: firefox-128.0/third_party/libwebrtc/modules/rtp_rtcp/source/create_video_rtp_depacketizer.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/rtp_rtcp/source/create_video_rtp_depacketizer.cc
+++ firefox-128.0/third_party/libwebrtc/modules/rtp_rtcp/source/create_video_rtp_depacketizer.cc
@@ -46,6 +46,7 @@ std::unique_ptr<VideoRtpDepacketizer> Cr
return std::make_unique<VideoRtpDepacketizerGeneric>();
}
RTC_CHECK_NOTREACHED();
+ return nullptr;
}
} // namespace webrtc
Index: firefox-128.0/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender.cc
+++ firefox-128.0/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender.cc
@@ -138,6 +138,7 @@ bool IsNonVolatile(RTPExtensionType type
#endif
}
RTC_CHECK_NOTREACHED();
+ return false;
}
bool HasBweExtension(const RtpHeaderExtensionMap& extensions_map) {
Index: firefox-128.0/third_party/libwebrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc
+++ firefox-128.0/third_party/libwebrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc
@@ -110,6 +110,7 @@ size_t BufferToIndex(Vp8BufferReference
case Vp8FrameConfig::Vp8BufferReference::kNone:
RTC_CHECK_NOTREACHED();
}
+ RTC_CHECK_NOTREACHED();
}
} // namespace
Index: firefox-128.0/third_party/libwebrtc/modules/video_coding/codecs/vp8/temporal_layers_checker.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/modules/video_coding/codecs/vp8/temporal_layers_checker.cc
+++ firefox-128.0/third_party/libwebrtc/modules/video_coding/codecs/vp8/temporal_layers_checker.cc
@@ -30,6 +30,7 @@ TemporalLayersChecker::CreateTemporalLay
return std::make_unique<TemporalLayersChecker>(num_temporal_layers);
}
RTC_CHECK_NOTREACHED();
+ return nullptr;
}
TemporalLayersChecker::TemporalLayersChecker(int num_temporal_layers)
Index: firefox-128.0/third_party/libwebrtc/video/adaptation/video_stream_encoder_resource_manager.cc
===================================================================
--- firefox-128.0.orig/third_party/libwebrtc/video/adaptation/video_stream_encoder_resource_manager.cc
+++ firefox-128.0/third_party/libwebrtc/video/adaptation/video_stream_encoder_resource_manager.cc
@@ -64,6 +64,7 @@ std::string ToString(VideoAdaptationReas
return "cpu";
}
RTC_CHECK_NOTREACHED();
+ return "";
}
std::vector<bool> GetActiveLayersFlags(const VideoCodec& codec) {

View File

@ -1,41 +0,0 @@
# HG changeset patch
# Parent 9edebbc21d9835abacb6110b1591d2ae1b6a0727
On SLE-12 we have only python 3.4 available at the moment. But
as it seems, no python 3.5 features are being used to build, so
lowering the requirements work.
diff -r 9edebbc21d98 build/moz.configure/init.configure
--- a/build/moz.configure/init.configure Fri Sep 20 08:00:18 2019 +0200
+++ b/build/moz.configure/init.configure Fri Oct 11 12:44:23 2019 +0200
@@ -412,7 +412,7 @@
'MozillaBuild python: %s' % e)
else:
# Fall back to the search routine.
- python, version = find_python3_executable(min_version='3.5.0')
+ python, version = find_python3_executable(min_version='3.4.5')
# The API returns a bytes whereas everything in configure is unicode.
if python:
@@ -424,7 +424,7 @@
'PATH or define PYTHON3 to point to a Python '
'3.5 executable.')
- if version < (3, 5, 0):
+ if version < (3, 4, 5):
raise FatalCheckError('Python 3.5 or newer is required to build; '
'%s is Python %d.%d' % (python, version[0],
version[1]))
diff -r 9edebbc21d98 taskcluster/scripts/run-task
--- a/taskcluster/scripts/run-task Fri Sep 20 08:00:18 2019 +0200
+++ b/taskcluster/scripts/run-task Fri Oct 11 12:44:23 2019 +0200
@@ -16,8 +16,8 @@
import sys
-if sys.version_info[0:2] < (3, 5):
- print('run-task requires Python 3.5+')
+if sys.version_info[0:2] < (3, 4):
+ print('run-task requires Python 3.4+')
sys.exit(1)

View File

@ -1,5 +1,5 @@
This file contains the PGP keys of various developers that work on
Mozilla and its subprojects (such as Firefox and Thunderbird).
This file contains the public PGP key that is used to sign builds and
artifacts of Mozilla projects (such as Firefox and Thunderbird).
Please realize that this file itself or the public key servers may be
compromised. You are encouraged to validate the authenticity of these keys in
@ -10,9 +10,11 @@ Mozilla users: pgp < KEY
pub rsa4096 2015-07-17 [SC]
14F26682D0916CDD81E37B6D61B7B526D98F0353
uid [ full ] Mozilla Software Releases <release@mozilla.com>
sub rsa4096 2015-07-17 [S] [expires: 2017-07-16]
sub rsa4096 2017-06-22 [S] [expires: 2019-06-22]
sub rsa4096 2019-05-30 [S] [expires: 2021-05-29]
sub rsa4096 2015-07-17 [S] [expired: 2017-07-16]
sub rsa4096 2017-06-22 [S] [expired: 2019-06-22]
sub rsa4096 2019-05-30 [S] [expired: 2021-05-29]
sub rsa4096 2021-05-17 [S] [expired: 2023-05-17]
sub rsa4096 2023-05-05 [S] [expires: 2025-05-04]
-----BEGIN PGP PUBLIC KEY BLOCK-----
@ -28,306 +30,376 @@ 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
=xFcH
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
fxyRMB5BEeLY0+qVPyvOxpXEGnlSHYmdIS4=
=ZEQW
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -58,6 +58,8 @@ MOZ_DIST_BIN="%PREFIX"
MOZ_DIST_LIB="%PROGDIR"
MOZ_APPNAME="%APPNAME"
MOZ_PROGRAM="$MOZ_DIST_LIB/$MOZ_APPNAME"
MOZ_LANGPACKS_DIR="$MOZ_DIST_LIB/langpacks"
MOZ_EXTENSIONS_PROFILE_DIR="$HOME/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
MOZ_APP_LAUNCHER="$MOZ_DIST_LIB/$MOZ_APPNAME.sh"
if [ "$0" = "$MOZ_APP_LAUNCHER" ]; then
@ -70,15 +72,6 @@ else
export MOZ_APP_LAUNCHER="/usr/bin/$MOZ_APPNAME"
fi
mozilla_lib=`file $MOZ_PROGRAM`
LIB=lib
echo $mozilla_lib | grep -q -E 'ELF.64-bit.*(x86-64|S/390|PowerPC|ARM aarch64)' && LIB=lib64
BROWSER_PLUGIN_DIR=/usr/$LIB/browser-plugins
if [ ! -d $BROWSER_PLUGIN_DIR ]; then
BROWSER_PLUGIN_DIR=/opt/netscape/plugins
fi
MOZILLA_FIVE_HOME="$MOZ_DIST_LIB"
export MOZILLA_FIVE_HOME
LD_LIBRARY_PATH=$MOZ_DIST_LIB${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
@ -87,24 +80,97 @@ export LD_LIBRARY_PATH
# needed for SUN Java under Xorg >= 7.2
export LIBXCB_ALLOW_SLOPPY_LOCK=1
##
if [ -z "$MOZ_PLUGIN_PATH" ]; then
export MOZ_PLUGIN_PATH=$BROWSER_PLUGIN_DIR
else
# make sure that BROWSER_PLUGIN_DIR is in MOZ_PLUGIN_PATH
echo "$MOZ_PLUGIN_PATH" | grep "$BROWSER_PLUGIN_DIR" 2>&1 >/dev/null
_retval=$?
if [ ${_retval} -ne 0 ]; then
export MOZ_PLUGIN_PATH=$MOZ_PLUGIN_PATH:$BROWSER_PLUGIN_DIR
fi
fi
# disable Gnome crash dialog (doesn't make sense anyway)
export GNOME_DISABLE_CRASH_DIALOG=1
# enable xinput2 (boo#1032003)
# breaks too many things right now (boo#1053959)
#export MOZ_USE_XINPUT2=1
# Wayland
# Only supported on newer systems
WAYLAND_SUPPORTED=%WAYLAND_SUPPORTED
# $XDG_SESSION_TYPE should contain either x11 or wayland
if [ $WAYLAND_SUPPORTED -eq 1 ] && [ "$XDG_SESSION_TYPE" = "wayland" ] && [ -z "$MOZ_ENABLE_WAYLAND" ]; then
export MOZ_ENABLE_WAYLAND=1
fi
##
## Use D-Bus remote exclusively when there's Wayland display.
##
if [ "$WAYLAND_DISPLAY" ]; then
export MOZ_DBUS_REMOTE=1
fi
# xinput2 (boo#1173320)
. /etc/os-release
if [ "$ID" = "opensuse-tumbleweed" ]; then
export MOZ_USE_XINPUT2=1
fi
##
## To disable the use of Firefox localization handling for
## the home profile, set MOZ_DISABLE_LANGPACKS=1
## in your environment before launching Firefox.
## currently disabled by default since langpacks
## are shipped as app sideloading addons
##
#
MOZ_DISABLE_LANGPACKS=1
export MOZ_DISABLE_LANGPACKS
#
##
## Automatically installed langpacks are tracked by .suse-langpack-install
## config file.
##
SUSE_LANGPACK_CONFIG="$MOZ_EXTENSIONS_PROFILE_DIR/.suse-langpack-install"
# MOZ_DISABLE_LANGPACKS disables language packs completely
MOZILLA_DOWN=0
if ! [ $MOZ_DISABLE_LANGPACKS ] || [ $MOZ_DISABLE_LANGPACKS -eq 0 ]; then
if [ -x $MOZ_PROGRAM ]; then
# Is firefox running?
/bin/pidof %APPNAME% > /dev/null 2>&1
MOZILLA_DOWN=$?
fi
fi
# Modify language pack configuration only when firefox is not running
# and language packs are not disabled
if [ $MOZILLA_DOWN -ne 0 ]; then
# Clear already installed langpacks
mkdir -p $MOZ_EXTENSIONS_PROFILE_DIR
if [ -f $SUSE_LANGPACK_CONFIG ]; then
rm `cat $SUSE_LANGPACK_CONFIG` > /dev/null 2>&1
rm $SUSE_LANGPACK_CONFIG > /dev/null 2>&1
# remove all empty langpacks dirs while they block installation of langpacks
rmdir $MOZ_EXTENSIONS_PROFILE_DIR/langpack* > /dev/null 2>&1
fi
# Get locale from system
CURRENT_LOCALE=$LC_ALL
CURRENT_LOCALE=${CURRENT_LOCALE:-$LC_MESSAGES}
CURRENT_LOCALE=${CURRENT_LOCALE:-$LANG}
# Try with a local variant first, then without a local variant
SHORTMOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*||g" | sed "s|\..*||g"`
MOZLOCALE=`echo $CURRENT_LOCALE | sed "s|_\([^.]*\).*|-\1|g" | sed "s|\..*||g"`
create_langpack_link() {
local language=$*
local langpack=langpack-${language}@firefox.mozilla.org.xpi
if [ -f $MOZ_LANGPACKS_DIR/$langpack ]; then
rm -rf $MOZ_EXTENSIONS_PROFILE_DIR/$langpack
# If the target file is a symlink (the fallback langpack),
# install the original file instead of the fallback one
if [ -h $MOZ_LANGPACKS_DIR/$langpack ]; then
langpack=`readlink $MOZ_LANGPACKS_DIR/$langpack`
fi
ln -s $MOZ_LANGPACKS_DIR/$langpack \
$MOZ_EXTENSIONS_PROFILE_DIR/$langpack
echo $MOZ_EXTENSIONS_PROFILE_DIR/$langpack > $SUSE_LANGPACK_CONFIG
return 0
fi
return 1
}
create_langpack_link $MOZLOCALE || create_langpack_link $SHORTMOZLOCALE || true
fi
moz_debug=0
script_args=""

View File

@ -0,0 +1,34 @@
# HG changeset patch
# User M. Sirringhaus <msirringhaus@suse.de>
# Date 1645518286 -3600
# Tue Feb 22 09:24:46 2022 +0100
# Node ID 494640792b4677f6462e95b90a54a4e22aeb738b
# Parent 81832d035e101471dcf52dd91de287268add7a91
imported patch one_swizzle_to_rule_them_all.patch
Index: firefox-115.0/gfx/webrender_bindings/RenderCompositorSWGL.cpp
===================================================================
--- firefox-115.0.orig/gfx/webrender_bindings/RenderCompositorSWGL.cpp
+++ firefox-115.0/gfx/webrender_bindings/RenderCompositorSWGL.cpp
@@ -7,6 +7,7 @@
#include "RenderCompositorSWGL.h"
#include "mozilla/gfx/Logging.h"
+#include "mozilla/gfx/Swizzle.h"
#include "mozilla/widget/CompositorWidget.h"
#ifdef MOZ_WIDGET_GTK
@@ -242,6 +243,13 @@ void RenderCompositorSWGL::CommitMappedB
}
mDT->Flush();
+#if MOZ_BIG_ENDIAN()
+ // One swizzle to rule them all.
+ gfx::SwizzleData(mMappedData, mMappedStride, gfx::SurfaceFormat::B8G8R8A8,
+ mMappedData, mMappedStride, gfx::SurfaceFormat::A8R8G8B8,
+ mDT->GetSize());
+#endif
+
// Done with the DT. Hand it back to the widget and clear out any trace of it.
mWidget->EndRemoteDrawingInRegion(mDT, mDirtyRegion);
mDirtyRegion.SetEmpty();

29
svg-rendering.patch Normal file
View File

@ -0,0 +1,29 @@
# HG changeset patch
# User M. Sirringhaus <msirringhaus@suse.de>
# Date 1645518286 -3600
# Tue Feb 22 09:24:46 2022 +0100
# Node ID 81832d035e101471dcf52dd91de287268add7a91
# Parent 66f7ce16eb4965108687280e5443edd610631efb
imported patch svg-rendering.patch
diff --git a/image/imgFrame.cpp b/image/imgFrame.cpp
--- a/image/imgFrame.cpp
+++ b/image/imgFrame.cpp
@@ -372,6 +372,17 @@ nsresult imgFrame::InitWithDrawable(gfxD
return NS_ERROR_OUT_OF_MEMORY;
}
+#if MOZ_BIG_ENDIAN()
+ if (aBackend == gfx::BackendType::SKIA && canUseDataSurface) {
+ // SKIA is lying about what format it returns on big endian
+ for (int ii=0; ii < mRawSurface->GetSize().Height()*mRawSurface->Stride() / 4; ++ii) {
+ uint32_t *vals = (uint32_t*)(mRawSurface->GetData());
+ uint32_t val = ((vals[ii] << 8) & 0xFF00FF00 ) | ((vals[ii] >> 8) & 0xFF00FF );
+ vals[ii] = (val << 16) | (val >> 16);
+ }
+ }
+#endif
+
if (!canUseDataSurface) {
// We used an offscreen surface, which is an "optimized" surface from
// imgFrame's perspective.

View File

@ -1,10 +1,10 @@
PRODUCT="firefox"
CHANNEL="esr68"
VERSION="68.4.1"
CHANNEL="esr128"
VERSION="128.5.1"
VERSION_SUFFIX="esr"
PREV_VERSION="68.4.0"
PREV_VERSION="128.5.0"
PREV_VERSION_SUFFIX="esr"
#SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation
RELEASE_REPO="https://hg.mozilla.org/releases/mozilla-esr68"
RELEASE_TAG="8b51bf38ddbb00131188d833c1441bb37128634b"
RELEASE_TIMESTAMP="20200107212959"
RELEASE_REPO="https://hg.mozilla.org/releases/mozilla-esr128"
RELEASE_TAG="a6cdcd2ed9ec3e256f358010672bafd1674b0b8b"
RELEASE_TIMESTAMP="20241128151741"