v88.0-1; switch to bionic as base to build on, xenial is EOS/EOL

master
ohfp 2021-04-21 10:52:21 +02:00
parent 062a454cf3
commit 9e90fb3a9b
No known key found for this signature in database
GPG Key ID: 2954CC8585E27A3F
13 changed files with 66 additions and 814 deletions

View File

@ -27,7 +27,7 @@ variables:
- "LibreWolf-${pkgver}-${pkgrel}.${CARCH}.tar.bz2"
tarball_x86_64:
image: ubuntu:16.04
image: ubuntu:18.04
tags: [x86_64b]
<<: *carch_x86_64
<<: *tarball_build_config
@ -36,7 +36,7 @@ tarball_x86_64:
- $X86_64
tarball_aarch64:
image: arm64v8/ubuntu:16.04
image: arm64v8/ubuntu:18.04
tags: [aarch64b]
<<: *carch_aarch64
<<: *tarball_build_config

View File

@ -7,6 +7,16 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
This project follows the official Firefox releases, but also uses
[Arch Linux Package Versioning](https://wiki.archlinux.org/index.php/Arch_package_guidelines#Package_versioning) to mark individual releases in between versions.
## [88.0-1] - TBD
### Changed
- New upstream release 88.0-1
- Several yet-to-be documented changes from previous updates that are not yet added to the changelog (tbd)
- Switched to building on Ubuntu Bionic (18.04) from Xenial (16.04) as the latter is now EOL/EOS
- Releases can from now on be found in the specific subprojects (debian, windows, flatpak, appimage, arch, macos) for consistency; this project will only hold the tarball used for the flatpak and appimage releases
## [85.0.2-2] 2021-02-15
### Changed

View File

@ -1,54 +0,0 @@
Description: point clang to the toolchain provided by the gcc-mozilla package (version 7 required for C++ 17), and statically link against libstdc++
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
Bug-Ubuntu: https://launchpad.net/bugs/1856861
--- a/build/moz.configure/toolchain.configure
+++ b/build/moz.configure/toolchain.configure
@@ -1252,6 +1252,7 @@ try_compile(includes=['cstddef'],
"#endif",
]
),
+ flags=["--gcc-toolchain=/usr/lib/gcc-mozilla"],
check_msg="for new enough STL headers from libstdc++",
when=needs_libstdcxx_newness_check,
onerror=die_on_old_libstdcxx,
@@ -1433,6 +1434,10 @@ set_config('_DEPEND_CFLAGS', depend_cfla
set_config("_HOST_DEPEND_CFLAGS", depend_cflags(host_c_compiler))
+add_old_configure_assignment("CFLAGS", ["--gcc-toolchain=/usr/lib/gcc-mozilla"])
+add_old_configure_assignment("CXXFLAGS", ["--gcc-toolchain=/usr/lib/gcc-mozilla"])
+
+
@depends(c_compiler)
def preprocess_option(compiler):
# The uses of PREPROCESS_OPTION depend on the spacing for -o/-Fi.
@@ -2137,6 +2142,7 @@ def linker_ldflags(linker, macos_sdk, ho
if host.cpu == "arm":
flags.append("-Wl,--no-keep-memory")
+ flags.append("-static-libstdc++")
if sysroot_path and multiarch_dir:
# Non-Debian-patched binutils linkers (both BFD and gold) don't lookup
# in multi-arch directories.
--- a/servo/components/style/build_gecko.rs
+++ b/servo/components/style/build_gecko.rs
@@ -149,6 +149,8 @@ impl BuilderExt for Builder {
builder = builder.with_rustfmt(path);
}
+ builder = builder.clang_arg("--gcc-toolchain=/usr/lib/gcc-mozilla");
+
for dir in SEARCH_PATHS.iter() {
builder = builder.clang_arg("-I").clang_arg(dir.to_str().unwrap());
}
--- a/layout/style/test/moz.build
+++ b/layout/style/test/moz.build
@@ -18,6 +18,7 @@ DIRS += ['gtest']
"host_ListCSSProperties",
]
)
+HOST_CXXFLAGS += ["--gcc-toolchain=/usr/lib/gcc-mozilla"]
MOCHITEST_MANIFESTS += [
"mochitest.ini",

View File

@ -1,71 +0,0 @@
# Revert 6700a8dfaeb1e303955acc05dabd245b9ae3c97e
Bug 1622963 - Require python 3.6 for the build system. r=firefox-build-system-reviewers,rstewart
Differential Revision: https://phabricator.services.mozilla.com/D77754
diff -r 81f3a9d8e5f4 build/moz.configure/init.configure
--- a/build/moz.configure/init.configure Tue Nov 17 21:27:44 2020 +0000
+++ b/build/moz.configure/init.configure Wed Nov 18 08:22:17 2020 +0100
@@ -216,7 +216,7 @@
# Python 3
# ========
-option(env="PYTHON3", nargs=1, help="Python 3 interpreter (3.6 or later)")
+option(env="PYTHON3", nargs=1, help="Python 3 interpreter (3.5 or later)")
option(
env="VIRTUALENV_NAME",
@@ -327,7 +327,7 @@
)
else:
# Fall back to the search routine.
- python, version = find_python3_executable(min_version="3.6.0")
+ python, version = find_python3_executable(min_version="3.5.0")
# The API returns a bytes whereas everything in configure is unicode.
if python:
@@ -335,15 +335,15 @@
if not python:
raise FatalCheckError(
- "Python 3.6 or newer is required to build. "
+ "Python 3.5 or newer is required to build. "
"Ensure a `python3.x` executable is in your "
"PATH or define PYTHON3 to point to a Python "
- "3.6 executable."
+ "3.5 executable."
)
- if version < (3, 6, 0):
+ if version < (3, 5, 0):
raise FatalCheckError(
- "Python 3.6 or newer is required to build; "
+ "Python 3.5 or newer is required to build; "
"%s is Python %d.%d" % (python, version[0], version[1])
)
diff -r 81f3a9d8e5f4 python/mozbuild/mozbuild/pythonutil.py
--- a/python/mozbuild/mozbuild/pythonutil.py Tue Nov 17 21:27:44 2020 +0000
+++ b/python/mozbuild/mozbuild/pythonutil.py Wed Nov 18 08:22:17 2020 +0100
@@ -44,7 +44,7 @@
def _find_python_executable(major):
if major not in (2, 3):
raise ValueError("Expected a Python major version of 2 or 3")
- min_versions = {2: "2.7.0", 3: "3.6.0"}
+ min_versions = {2: "2.7.0", 3: "3.5.0"}
def ret(min_version=min_versions[major]):
from mozfile import which
diff -r 81f3a9d8e5f4 python/mozbuild/mozbuild/virtualenv.py
--- a/python/mozbuild/mozbuild/virtualenv.py Tue Nov 17 21:27:44 2020 +0000
+++ b/python/mozbuild/mozbuild/virtualenv.py Wed Nov 18 08:22:17 2020 +0100
@@ -691,7 +691,7 @@
major, minor, micro = sys.version_info[:3]
minimum_python_versions = {
2: LooseVersion("2.7.3"),
- 3: LooseVersion("3.6.0"),
+ 3: LooseVersion("3.5.0"),
}
our = LooseVersion("%d.%d.%d" % (major, minor, micro))

View File

@ -1,432 +0,0 @@
Description: remove f-strings that require Python 3.6 (https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-pep498)
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
--- a/third_party/python/glean_parser/glean_parser/lint.py
+++ b/third_party/python/glean_parser/glean_parser/lint.py
@@ -42,10 +42,10 @@ def _english_list(items: List[str]) -> s
if len(items) == 0:
return ""
elif len(items) == 1:
- return f"'{items[0]}'"
+ return "'{}'".format(items[0])
else:
return "{}, or '{}'".format(
- ", ".join([f"'{x}'" for x in items[:-1]]), items[-1]
+ ", ".join(["'{}'".format(x) for x in items[:-1]]), items[-1]
)
@@ -88,10 +88,11 @@ def check_common_prefix(
if i > 0:
common_prefix = "_".join(first[:i])
yield (
- f"Within category '{category_name}', all metrics begin with "
- f"prefix '{common_prefix}'."
+ "Within category '{}', all metrics begin with "
+ "prefix '{}'."
"Remove the prefixes on the metric names and (possibly) "
"rename the category."
+ .format(category_name, common_prefix)
)
@@ -131,17 +132,19 @@ def check_unit_in_name(
or unit_in_name == time_unit.name
):
yield (
- f"Suffix '{unit_in_name}' is redundant with time_unit "
- f"'{time_unit.name}'. Only include time_unit."
+ "Suffix '{}' is redundant with time_unit "
+ "'{}'. Only include time_unit."
+ .format(unit_in_name, time_unit.name)
)
elif (
unit_in_name in TIME_UNIT_ABBREV.keys()
or unit_in_name in TIME_UNIT_ABBREV.values()
):
yield (
- f"Suffix '{unit_in_name}' doesn't match time_unit "
- f"'{time_unit.name}'. "
+ "Suffix '{}' doesn't match time_unit "
+ "'{}'. "
"Confirm the unit is correct and only include time_unit."
+ .format(unit_in_name, time_unit.name)
)
elif memory_unit is not None:
@@ -150,26 +153,29 @@ def check_unit_in_name(
or unit_in_name == memory_unit.name
):
yield (
- f"Suffix '{unit_in_name}' is redundant with memory_unit "
- f"'{memory_unit.name}'. "
+ "Suffix '{}' is redundant with memory_unit "
+ "'{}'. "
"Only include memory_unit."
+ .format(unit_in_name, memory_unit.name)
)
elif (
unit_in_name in MEMORY_UNIT_ABBREV.keys()
or unit_in_name in MEMORY_UNIT_ABBREV.values()
):
yield (
- f"Suffix '{unit_in_name}' doesn't match memory_unit "
- f"{memory_unit.name}'. "
+ "Suffix '{}' doesn't match memory_unit "
+ "{}'. "
"Confirm the unit is correct and only include memory_unit."
+ .format(unit_in_name, memory_unit.name)
)
elif unit is not None:
if unit_in_name == unit:
yield (
- f"Suffix '{unit_in_name}' is redundant with unit param "
- f"'{unit}'. "
+ "Suffix '{}' is redundant with unit param "
+ "'{}'. "
"Only include unit."
+ .format(unit_in_name, unit)
)
@@ -183,8 +189,9 @@ def check_category_generic(
if category_name in GENERIC_CATEGORIES:
yield (
- f"Category '{category_name}' is too generic. "
- f"Don't use {_english_list(GENERIC_CATEGORIES)} for category names"
+ "Category '{}' is too generic. "
+ "Don't use {} for category names"
+ .format(category_name, _english_list(GENERIC_CATEGORIES))
)
@@ -195,9 +202,10 @@ def check_bug_number(
if len(number_bugs):
yield (
- f"For bugs {', '.join(number_bugs)}: "
+ "For bugs {}: "
"Bug numbers are deprecated and should be changed to full URLs. "
"For example, use 'http://bugzilla.mozilla.org/12345' instead of '12345'."
+ .format(', '.join(number_bugs))
)
@@ -220,7 +228,7 @@ def check_misspelled_pings(
for builtin in pings.RESERVED_PING_NAMES:
distance = _hamming_distance(ping, builtin)
if distance == 1:
- yield f"Ping '{ping}' seems misspelled. Did you mean '{builtin}'?"
+ yield "Ping '{}' seems misspelled. Did you mean '{}'?".format(ping, builtin)
def check_user_lifetime_expiration(
@@ -281,8 +289,9 @@ class GlinterNit:
def format(self):
return (
- f"{self.check_type.name.upper()}: {self.check_name}: "
- f"{self.name}: {self.msg}"
+ "{}: {}: "
+ "{}: {}"
+ .format(self.check_type.name.upper(), self.check_name, self.name, self.msg)
)
@@ -374,7 +383,7 @@ def lint_yaml_files(input_filepaths: Ite
if len(nits):
print("Sorry, Glean found some glinter nits:", file=file)
for (path, p) in nits:
- print(f"{path} ({p.line}:{p.column}) - {p.message}")
+ print("{} ({}:{}) - {}".format(path, p.line, p.column, p.message))
print("", file=file)
print("Please fix the above nits to continue.", file=file)
--- a/third_party/python/glean_parser/glean_parser/markdown.py
+++ b/third_party/python/glean_parser/glean_parser/markdown.py
@@ -73,7 +73,7 @@ def metrics_docs(obj_name: str) -> str:
if obj_name.startswith("labeled_"):
fixedup_name += "s"
- return f"https://mozilla.github.io/glean/book/user/metrics/{fixedup_name}.html"
+ return "https://mozilla.github.io/glean/book/user/metrics/{}.html".format(fixedup_name)
def ping_docs(ping_name: str) -> str:
@@ -84,7 +84,7 @@ def ping_docs(ping_name: str) -> str:
if ping_name not in pings.RESERVED_PING_NAMES:
return ""
- return f"https://mozilla.github.io/glean/book/user/pings/{ping_name}.html"
+ return "https://mozilla.github.io/glean/book/user/pings/{}.html".format(ping_name)
def if_empty(
--- a/third_party/python/glean_parser/glean_parser/parser.py
+++ b/third_party/python/glean_parser/glean_parser/parser.py
@@ -46,7 +46,8 @@ def _update_validator(validator):
if len(missing_properties):
missing_properties = sorted(list(missing_properties))
yield ValidationError(
- f"Missing required properties: {', '.join(missing_properties)}"
+ "Missing required properties: {}"
+ .format(', '.join(missing_properties))
)
validator.VALIDATORS["required"] = required
@@ -65,7 +66,7 @@ def _load_file(
return {}, None
if content is None:
- yield util.format_error(filepath, "", f"'{filepath}' file can not be empty.")
+ yield util.format_error(filepath, "", "'{}' file can not be empty.".format(filepath))
return {}, None
if not isinstance(content, dict):
@@ -76,7 +77,7 @@ def _load_file(
schema_key = content.get("$schema")
if not isinstance(schema_key, str):
- raise TypeError(f"Invalid schema key {schema_key}")
+ raise TypeError("Invalid schema key {}".format(schema_key))
filetype = FILE_TYPES.get(schema_key)
@@ -117,7 +118,7 @@ def _get_schema(
util.format_error(
filepath,
"",
- f"$schema key must be one of {', '.join(schemas.keys())}",
+ "$schema key must be one of {}".format(', '.join(schemas.keys())),
)
)
return schemas[schema_id]
@@ -189,7 +190,7 @@ def _instantiate_metrics(
if not config.get("allow_reserved") and category_key.split(".")[0] == "glean":
yield util.format_error(
filepath,
- f"For category '{category_key}'",
+ "For category '{}'".format(category_key),
"Categories beginning with 'glean' are reserved for "
"Glean internal use.",
)
@@ -197,7 +198,7 @@ def _instantiate_metrics(
all_objects.setdefault(category_key, OrderedDict())
if not isinstance(category_val, dict):
- raise TypeError(f"Invalid content for {category_key}")
+ raise TypeError("Invalid content for {}".format(category_key))
for metric_key, metric_val in category_val.items():
try:
@@ -207,7 +208,7 @@ def _instantiate_metrics(
except Exception as e:
yield util.format_error(
filepath,
- f"On instance {category_key}.{metric_key}",
+ "On instance {}.{}".format(category_key, metric_key),
str(e),
)
metric_obj = None
@@ -218,7 +219,7 @@ def _instantiate_metrics(
):
yield util.format_error(
filepath,
- f"On instance {category_key}.{metric_key}",
+ "On instance {}.{}".format(category_key, metric_key),
'Only internal metrics may specify "all-pings" '
'in "send_in_pings"',
)
@@ -234,8 +235,9 @@ def _instantiate_metrics(
filepath,
"",
(
- f"Duplicate metric name '{category_key}.{metric_key}' "
- f"already defined in '{already_seen}'"
+ "Duplicate metric name '{}.{}' "
+ "already defined in '{}'"
+ .format(category_key, metric_key, already_seen)
),
)
else:
@@ -261,17 +263,17 @@ def _instantiate_pings(
if ping_key in RESERVED_PING_NAMES:
yield util.format_error(
filepath,
- f"For ping '{ping_key}'",
- f"Ping uses a reserved name ({RESERVED_PING_NAMES})",
+ "For ping '{}'".format(ping_key),
+ "Ping uses a reserved name ({})".format(RESERVED_PING_NAMES),
)
continue
if not isinstance(ping_val, dict):
- raise TypeError(f"Invalid content for ping {ping_key}")
+ raise TypeError("Invalid content for ping {}".format(ping_key))
ping_val["name"] = ping_key
try:
ping_obj = Ping(**ping_val)
except Exception as e:
- yield util.format_error(filepath, f"On instance '{ping_key}'", str(e))
+ yield util.format_error(filepath, "On instance '{}'".format(ping_key), str(e))
continue
already_seen = sources.get(ping_key)
@@ -280,8 +282,9 @@ def _instantiate_pings(
yield util.format_error(
filepath,
"",
- f"Duplicate ping name '{ping_key}' "
- f"already defined in '{already_seen}'",
+ "Duplicate ping name '{}' "
+ "already defined in '{}'"
+ .format(ping_key, already_seen),
)
else:
all_objects.setdefault("pings", {})[ping_key] = ping_obj
--- a/third_party/python/glean_parser/glean_parser/util.py
+++ b/third_party/python/glean_parser/glean_parser/util.py
@@ -132,7 +132,7 @@ def load_yaml_or_json(path: Path, ordere
else:
return yaml.load(fd, Loader=_NoDatesSafeLoader)
else:
- raise ValueError(f"Unknown file extension {path.suffix}")
+ raise ValueError("Unknown file extension {}".format(path.suffix))
def ensure_list(value: Any) -> Sequence[Any]:
@@ -331,9 +331,9 @@ def format_error(filepath: Union[str, Pa
else:
filepath = "<string>"
if header:
- return f"{filepath}: {header}\n{_utils.indent(content)}"
+ return "{}: {}\n{}".format(filepath, header, _utils.indent(content))
else:
- return f"{filepath}:\n{_utils.indent(content)}"
+ return "{}:\n{}".format(filepath, _utils.indent(content))
def parse_expires(expires: str) -> datetime.date:
@@ -351,8 +351,8 @@ def parse_expires(expires: str) -> datet
return datetime.date.fromisoformat(expires)
except ValueError:
raise ValueError(
- f"Invalid expiration date '{expires}'. "
- "Must be of the form yyyy-mm-dd in UTC."
+ "Invalid expiration date '{}'. "
+ "Must be of the form yyyy-mm-dd in UTC.".format(expires)
)
@@ -382,7 +382,7 @@ def validate_expires(expires: str) -> No
max_date = datetime.datetime.now() + datetime.timedelta(days=730)
if date > max_date.date():
raise ValueError(
- f"'{expires}' is more than 730 days (~2 years) in the future.",
+ "'{}' is more than 730 days (~2 years) in the future.".format(expires),
"Please make sure this is intentional.",
"You can supress this warning by adding EXPIRATION_DATE_TOO_FAR to no_lint",
"See: https://mozilla.github.io/glean_parser/metrics-yaml.html#no_lint",
--- a/third_party/python/glean_parser/tools/extract_data_categories.py
+++ b/third_party/python/glean_parser/tools/extract_data_categories.py
@@ -62,7 +62,7 @@ def fetch_url(url: str) -> str:
if content is not None:
return content
- print(f"Fetching {url}")
+ print("Fetching {}".format(url))
content = urlopen(url).read()
cache[url] = content
time.sleep(0.5)
@@ -97,7 +97,7 @@ def categories_as_strings(categories: Se
"""
if len(categories):
return [
- CATEGORY_MAP.get(x, f"!!!UNKNOWN CATEGORY {x}")
+ CATEGORY_MAP.get(x, "!!!UNKNOWN CATEGORY {}".format(x))
for x in sorted(list(categories))
]
else:
@@ -119,24 +119,24 @@ def update_lines(
for line in lines_iter:
output.append(line)
- if line.startswith(f"{category_name}:"):
+ if line.startswith("{}:".format(category_name)):
break
for line in lines_iter:
output.append(line)
- if line.startswith(f" {metric_name}:"):
+ if line.startswith(" {}:".format(metric_name)):
break
for line in lines_iter:
output.append(line)
- if line.startswith(f" data_reviews:"):
+ if line.startswith(" data_reviews:"):
break
for line in lines_iter:
if not line.strip().startswith("- "):
output.append(" data_sensitivity:\n")
for data_sensitivity in data_sensitivity_values:
- output.append(f" - {data_sensitivity}\n")
+ output.append(" - {}\n".format(data_sensitivity))
output.append(line)
break
else:
--- a/third_party/python/glean_parser/glean_parser/metrics.py
+++ b/third_party/python/glean_parser/glean_parser/metrics.py
@@ -138,7 +138,7 @@ class Metric:
metric_type = metric_info["type"]
if not isinstance(metric_type, str):
- raise TypeError(f"Unknown metric type {metric_type}")
+ raise TypeError("Unknown metric type {}".format(metric_type))
return cls.metric_types[metric_type](
category=category,
name=name,
--- a/third_party/python/glean_parser/glean_parser/translate.py
+++ b/third_party/python/glean_parser/glean_parser/translate.py
@@ -112,7 +112,7 @@ def translate_metrics(
for filepath in output_dir.glob(clear_pattern):
filepath.unlink()
if len(list(output_dir.iterdir())):
- print(f"Extra contents found in '{output_dir}'.")
+ print("Extra contents found in '{}'.".format(output_dir))
# We can't use shutil.copytree alone if the directory already exists.
# However, if it doesn't exist, make sure to create one otherwise
@@ -146,7 +146,7 @@ def translate(
format_desc = OUTPUTTERS.get(output_format, None)
if format_desc is None:
- raise ValueError(f"Unknown output format '{output_format}'")
+ raise ValueError("Unknown output format '{}'".format(output_format))
return translate_metrics(
input_filepaths,
--- a/toolkit/components/glean/build_scripts/glean_parser_ext/js.py Tue Nov 17 21:27:44 2020 +0000
+++ b/toolkit/components/glean/build_scripts/glean_parser_ext/js.py Wed Nov 18 10:51:04 2020 +0100
@@ -57,7 +57,7 @@
"""
The metric's unique identifier, including the category and name
"""
- return f"{category}.{util.camelize(metric_name)}"
+ return "{}.{}".format(category, util.camelize(metric_name))
def type_name(obj):
--- a/toolkit/components/glean/build_scripts/glean_parser_ext/rust.py Tue Nov 17 21:27:44 2020 +0000
+++ b/toolkit/components/glean/build_scripts/glean_parser_ext/rust.py Wed Nov 18 10:51:04 2020 +0100
@@ -175,7 +175,7 @@
metric_name = util.snake_case(metric.name)
category_name = util.snake_case(category_name)
- full_path = f"{category_name}::{metric_name}"
+ full_path = "{}::{}".format(category_name, metric_name)
if metric.type == "event":
events_by_id[get_metric_id(metric)] = full_path

View File

@ -1,23 +0,0 @@
Description: revert a change that requires Python 3.6 (https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-pep487)
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
--- a/third_party/python/glean_parser/glean_parser/metrics.py
+++ b/third_party/python/glean_parser/glean_parser/metrics.py
@@ -15,6 +15,8 @@ from typing import Any, Dict, List, Opti
from . import pings
from . import util
+import pep487
+
# Important: if the values are ever changing here, make sure
# to also fix mozilla/glean. Otherwise language bindings may
@@ -32,7 +34,7 @@ class DataSensitivity(enum.Enum):
highly_sensitive = 4
-class Metric:
+class Metric(pep487.PEP487Object):
typename = "ERROR"
glean_internal_metric_cat = "glean.internal.metrics"
metric_types = {}

View File

@ -1,148 +0,0 @@
Description: remove variable annotations that require Python 3.6 (https://docs.python.org/3/whatsnew/3.6.html#whatsnew36-pep526)
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
--- a/xpcom/ds/tools/incremental_dafsa.py
+++ b/xpcom/ds/tools/incremental_dafsa.py
@@ -14,12 +14,6 @@ from typing import List, Dict, Optional,
class Node:
- children: Dict[str, "Node"]
- parents: Dict[str, List["Node"]]
- character: str
- is_root_node: bool
- is_end_node: bool
-
def __init__(self, character, is_root_node=False, is_end_node=False):
self.children = {}
self.parents = {}
@@ -156,9 +150,6 @@ class Node:
class SuffixCursor:
- index: int # Current position of the cursor within the DAFSA.
- node: Node
-
def __init__(self, index, node):
self.index = index
self.node = node
@@ -227,15 +218,6 @@ class DafsaAppendStateMachine:
The next suffix node we'll attempt to find is at index "9".
"""
- root_node: Node
- prefix_index: int
- suffix_cursor: SuffixCursor
- stack: List[Node]
- word: str
- suffix_overlaps_prefix: bool
- first_fork_index: Optional[int]
- _state: Callable
-
def __init__(self, word, root_node, end_node):
self.root_node = root_node
self.prefix_index = 0
@@ -471,9 +453,6 @@ def _duplicate_fork_nodes(stack, fork_in
class Dafsa:
- root_node: Node
- end_node: Node
-
def __init__(self):
self.root_node = Node(None, is_root_node=True)
self.end_node = Node(None, is_end_node=True)
--- a/third_party/python/glean_parser/glean_parser/lint.py
+++ b/third_party/python/glean_parser/glean_parser/lint.py
@@ -237,9 +237,7 @@ def check_user_lifetime_expiration(
# The checks that operate on an entire category of metrics:
# {NAME: (function, is_error)}
-CATEGORY_CHECKS: Dict[
- str, Tuple[Callable[[str, Iterable[metrics.Metric]], LintGenerator], CheckType]
-] = {
+CATEGORY_CHECKS = {
"COMMON_PREFIX": (check_common_prefix, CheckType.error),
"CATEGORY_GENERIC": (check_category_generic, CheckType.error),
}
@@ -247,9 +245,7 @@ CATEGORY_CHECKS: Dict[
# The checks that operate on individual metrics:
# {NAME: (function, is_error)}
-INDIVIDUAL_CHECKS: Dict[
- str, Tuple[Callable[[metrics.Metric, dict], LintGenerator], CheckType]
-] = {
+INDIVIDUAL_CHECKS = {
"UNIT_IN_NAME": (check_unit_in_name, CheckType.error),
"BUG_NUMBER": (check_bug_number, CheckType.error),
"BASELINE_PING": (check_valid_in_baseline, CheckType.error),
@@ -282,7 +278,7 @@ def lint_metrics(
if parser_config is None:
parser_config = {}
- nits: List[GlinterNit] = []
+ nits = []
for (category_name, category) in sorted(list(objs.items())):
if category_name == "pings":
continue
@@ -363,7 +359,7 @@ def lint_yaml_files(input_filepaths: Ite
# Generic type since the actual type comes from yamllint, which we don't
# control.
- nits: List = []
+ nits = []
for path in input_filepaths:
if not path.is_file() and parser_config.get("allow_missing_files", False):
continue
--- a/third_party/python/glean_parser/glean_parser/metrics.py
+++ b/third_party/python/glean_parser/glean_parser/metrics.py
@@ -33,10 +33,10 @@ class DataSensitivity(enum.Enum):
class Metric:
- typename: str = "ERROR"
- glean_internal_metric_cat: str = "glean.internal.metrics"
- metric_types: Dict[str, Any] = {}
- default_store_names: List[str] = ["metrics"]
+ typename = "ERROR"
+ glean_internal_metric_cat = "glean.internal.metrics"
+ metric_types = {}
+ default_store_names = ["metrics"]
def __init__(
self,
--- a/third_party/python/glean_parser/glean_parser/pings.py
+++ b/third_party/python/glean_parser/glean_parser/pings.py
@@ -49,7 +49,7 @@ class Ping:
# _validated indicates whether this metric has already been jsonschema
# validated (but not any of the Python-level validation).
if not _validated:
- data: Dict[str, util.JSONType] = {
+ data = {
"$schema": parser.PINGS_ID,
self.name: self.serialize(),
}
--- a/third_party/python/glean_parser/glean_parser/util.py
+++ b/third_party/python/glean_parser/glean_parser/util.py
@@ -269,7 +269,7 @@ def fetch_remote_url(url: str, cache: bo
if key in dc:
return dc[key]
- contents: str = urllib.request.urlopen(url).read()
+ contents = urllib.request.urlopen(url).read()
if cache:
with diskcache.Cache(cache_dir) as dc:
--- a/third_party/python/glean_parser/glean_parser/parser.py
+++ b/third_party/python/glean_parser/glean_parser/parser.py
@@ -339,8 +339,8 @@ def parse_objects(
if config is None:
config = {}
- all_objects: ObjectTree = OrderedDict()
- sources: Dict[Any, Path] = {}
+ all_objects = OrderedDict()
+ sources = {}
filepaths = util.ensure_list(filepaths)
for filepath in filepaths:
content, filetype = yield from _load_file(filepath, config)

View File

@ -1,42 +0,0 @@
Description: silence GTK style-related assertions caused by the lack of a "selection" CSS node on GtkTextView in the version of gtk3 in xenial.
These assertions were caused by the fix for https://bugzilla.mozilla.org/1654323.
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
--- a/widget/gtk/nsLookAndFeel.cpp
+++ b/widget/gtk/nsLookAndFeel.cpp
@@ -1216,7 +1216,7 @@ void nsLookAndFeel::EnsureInit() {
&color);
mTextSelectedText = GDK_RGBA_TO_NS_RGBA(color);
};
- GrabSelectionColors(selectionStyle);
+ GrabSelectionColors(selectionStyle ? selectionStyle : style);
if (mTextSelectedBackground == mTextSelectedText) {
// Some old distros/themes don't properly use the .selection style, so
// fall back to the regular text view style.
@@ -1413,6 +1413,7 @@ bool nsLookAndFeel::WidgetUsesImage(Widg
GTK_STATE_FLAG_BACKDROP, GTK_STATE_FLAG_INSENSITIVE};
GtkStyleContext* style = GetStyleContext(aNodeType);
+ if (!style) return false;
GValue value = G_VALUE_INIT;
for (GtkStateFlags state : sFlagsToCheck) {
--- a/widget/gtk/WidgetStyleCache.cpp
+++ b/widget/gtk/WidgetStyleCache.cpp
@@ -933,7 +933,7 @@ static GtkStyleContext* GetWidgetRootSty
default:
GtkWidget* widget = GetWidget(aNodeType);
MOZ_ASSERT(widget);
- return gtk_widget_get_style_context(widget);
+ return (widget ? gtk_widget_get_style_context(widget) : nullptr);
}
MOZ_ASSERT(style);
@@ -1356,6 +1356,7 @@ GtkStyleContext* GetStyleContext(WidgetN
style = GetCssNodeStyleInternal(aNodeType);
StyleContextSetScale(style, aScale);
}
+ if (!style) return nullptr;
bool stateChanged = false;
bool stateHasDirection = gtk_get_minor_version() >= 8;
GtkStateFlags oldState = gtk_style_context_get_state(style);

View File

@ -26,7 +26,6 @@ _DEPENDENCIES="wget git xvfb \
libasound2-dev \
libcurl4-openssl-dev \
libdbus-glib-1-dev \
hardening-wrapper \
lsb-release \
libiw-dev \
mesa-common-dev \
@ -38,9 +37,9 @@ _DEPENDENCIES="wget git xvfb \
unzip \
dbus-x11 \
python \
libffi-dev \
nodejs-mozilla \
nasm-mozilla \
gcc-mozilla"
nasm-mozilla"
# cargo \
# rustc \
@ -55,12 +54,16 @@ apt-get -y -qq install $_DEPENDENCIES;
if [[ $CARCH == 'x86_64' ]];then
# Installs (non-ancient) clang
apt install -y software-properties-common apt-transport-https ca-certificates
apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-11 main"
apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main"
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add
apt-get update
apt-get -y install clang-11 libclang-11-dev
else
apt-get -y install clang-8 libclang-8-dev
apt install -y software-properties-common apt-transport-https ca-certificates
apt-add-repository "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-11 main"
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add
apt-get update
apt-get -y install clang-10 libclang-10-dev
fi
# we need a more recent rust

View File

@ -73,15 +73,11 @@ if [[ $CARCH == 'aarch64' ]]; then
# taken from manjaro build:
ac_add_options --enable-optimize="-g0 -O2"
# from ALARM
# should only fail on armv7x
# ac_add_options --disable-webrtc
export CC='clang-8'
export CXX='clang++-8'
export AR=llvm-ar-8
export NM=llvm-nm-8
export RANLIB=llvm-ranlib-8
export CC='clang-10'
export CXX='clang++-10'
export AR=llvm-ar-10
export NM=llvm-nm-10
export RANLIB=llvm-ranlib-10
END
export MOZ_DEBUG_FLAGS=" "
@ -112,18 +108,12 @@ END
fi
# hopefully the magic sauce that makes things build on 16.04 and later on work "everywhere":
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/lower-python3-requirement.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/armhf-reduce-linker-memory-use.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/build-with-libstdc++-7.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/fix-armhf-webrtc-build.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/webrtc-fix-compiler-flags-for-armhf.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/reduce-rust-debuginfo.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/relax-cargo-dep.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/use-system-icupkg.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/python3-remove-variable-annotations.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/python3-remove-fstrings.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/python3-remove-pep487.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/silence-gtk-style-assertions.patch"
patch -p1 -i "${CI_PROJECT_DIR}/deb_patches/sandbox-update-arm-syscall-numbers.patch"
# Remove some pre-installed addons that might be questionable
@ -143,7 +133,7 @@ fi
# Disabling Pocket
printf "\nDisabling Pocket\n";
sed -i "s/'pocket'/#'pocket'/g" browser/components/moz.build
sed -i 's/"pocket"/# "pocket"/g' browser/components/moz.build
patch -Np1 -i "${CI_PROJECT_DIR}/context-menu.patch"

View File

@ -66,7 +66,7 @@ rm -f mozconfig
# source /root/.cargo/env
# install cbindgen
cargo install --version 0.18.0 cbindgen
cargo install --version 0.19.0 cbindgen
if [[ $CARCH == 'aarch64' ]]; then

View File

@ -11,7 +11,7 @@ LAUNCHER_SCRIPT=$3;
CI_PROJECT_DIR=${CI_PROJECT_DIR:-$(realpath $(dirname $0)/../)}
_SCRIPT_FOLDER=$(realpath $(dirname $0));
_EXTRACTED_TARBALL_FOLDER=$_SCRIPT_FOLDER/librewolf;
_SETTINGS_COMMIT=241e6f4d73e6f2de37537cf4473612ae9f8ad81e
_SETTINGS_COMMIT=1b9cc88ccf64993951fe28cf426cf883e37e1b4d
_SETTINGS_REPO='https://gitlab.com/librewolf-community/settings.git';
# Extracts the binary tarball

View File

@ -1,20 +1,22 @@
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -5,7 +5,11 @@
<menubar id="main-menubar"
onpopupshowing="if (event.target.parentNode.parentNode == this &amp;&amp;
@@ -7,7 +7,12 @@
# On macOS, we don't track whether activation of the native menubar happened
# with the keyboard.
#ifndef XP_MACOSX
- onpopupshowing="if (event.target.parentNode.parentNode == this)
+ onpopupshowing="if (event.target.parentNode.parentNode == this &amp;&amp;
+#ifdef MOZ_WIDGET_GTK
+ document.documentElement.getAttribute('shellshowingmenubar') != 'true')
+#else
!('@mozilla.org/widget/nativemenuservice;1' in Cc))
+ true)
+#endif
this.setAttribute('openedwithkey',
event.target.parentNode.openedWithKey);">
<menu id="file-menu" data-l10n-id="menu-file">
event.target.parentNode.openedWithKey);"
#endif
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -6231,11 +6231,18 @@ function onViewToolbarsPopupShowing(aEve
@@ -6291,11 +6291,18 @@ function onViewToolbarsPopupShowing(aEve
MozXULElement.insertFTLIfNeeded("browser/toolbarContextMenu.ftl");
let firstMenuItem = aInsertPoint || popup.firstElementChild;
let toolbarNodes = gNavToolbox.querySelectorAll("toolbar");
@ -98,7 +100,7 @@
"components.conf",
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -305,6 +305,9 @@ pref("dom.mouseevent.click.hack.use_lega
@@ -301,6 +301,9 @@ pref("dom.mouseevent.click.hack.use_lega
// Fastback caching - if this pref is negative, then we calculate the number
// of content viewers to cache based on the amount of available memory.
pref("browser.sessionhistory.max_total_viewers", -1);
@ -110,7 +112,7 @@
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -221,6 +221,13 @@ toolbar[type="menubar"] {
@@ -230,6 +230,13 @@ toolbar[type="menubar"] {
}
%endif
@ -4292,7 +4294,7 @@
+ MOZ_ASSERT(!mContentToObserverTable.Get(aContent, &old) || old == aObserver,
+ "Multiple observers for the same content node are not supported");
+
+ mContentToObserverTable.Put(aContent, aObserver);
+ mContentToObserverTable.InsertOrUpdate(aContent, aObserver);
+}
+
+void
@ -4352,7 +4354,7 @@
+#include "mozilla/Attributes.h"
+#include "mozilla/RefPtr.h"
+#include "mozilla/UniquePtr.h"
+#include "nsDataHashtable.h"
+#include "nsTHashMap.h"
+#include "nsStubMutationObserver.h"
+#include "nsTArray.h"
+
@ -4459,7 +4461,7 @@
+ nsIContent *mLastSource;
+ nsNativeMenuChangeObserver *mLastTarget;
+ nsTArray<mozilla::UniquePtr<MutationRecord> > mPendingMutations;
+ nsDataHashtable<nsPtrHashKey<nsIContent>, nsNativeMenuChangeObserver *> mContentToObserverTable;
+ nsTHashMap<nsPtrHashKey<nsIContent>, nsNativeMenuChangeObserver *> mContentToObserverTable;
+
+ static uint32_t sUpdateBlockersCount;
+};
@ -4737,7 +4739,7 @@
+ }
+
+ GCancellable *cancellable = g_cancellable_new();
+ mMenuBarRegistrationCancellables.Put(aMenuBar, cancellable);
+ mMenuBarRegistrationCancellables.InsertOrUpdate(aMenuBar, cancellable);
+
+ // We keep a weak ref because we can't assume that GDBus cancellation
+ // is reliable (see https://launchpad.net/bugs/953562)
@ -4987,7 +4989,7 @@
+
+#include "mozilla/Attributes.h"
+#include "nsCOMPtr.h"
+#include "nsDataHashtable.h"
+#include "nsTHashMap.h"
+#include "nsINativeMenuService.h"
+#include "nsTArray.h"
+
@ -5053,7 +5055,7 @@
+ GDBusProxy *mDbusProxy;
+ bool mOnline;
+ nsTArray<nsMenuBar *> mMenuBars;
+ nsDataHashtable<nsPtrHashKey<nsMenuBar>, GCancellable*> mMenuBarRegistrationCancellables;
+ nsTHashMap<nsPtrHashKey<nsMenuBar>, GCancellable*> mMenuBarRegistrationCancellables;
+
+ static bool sShutdown;
+ static nsNativeMenuService *sService;
@ -5062,7 +5064,7 @@
+#endif /* __nsNativeMenuService_h__ */
--- a/widget/gtk/nsWindow.cpp
+++ b/widget/gtk/nsWindow.cpp
@@ -6386,6 +6386,10 @@ void nsWindow::HideWindowChrome(bool aSh
@@ -6409,6 +6409,10 @@ void nsWindow::HideWindowChrome(bool aSh
SetWindowDecoration(aShouldHide ? eBorderStyle_none : mBorderStyle);
}
@ -5093,7 +5095,7 @@
/**
* GetLastUserInputTime returns a timestamp for the most recent user input
* event. This is intended for pointer grab requests (including drags).
@@ -719,6 +723,8 @@ class nsWindow final : public nsBaseWidg
@@ -722,6 +726,8 @@ class nsWindow final : public nsBaseWidg
static GtkWindowDecoration sGtkWindowDecoration;
static bool sTransparentMainWindow;
@ -5124,7 +5126,7 @@
import sys
# Static atom definitions, used to generate nsGkAtomList.h.
@@ -2508,7 +2509,7 @@ STATIC_ATOMS = [
@@ -2507,7 +2508,7 @@ STATIC_ATOMS = [
InheritingAnonBoxAtom("AnonBox_mozSVGForeignContent", ":-moz-svg-foreign-content"),
InheritingAnonBoxAtom("AnonBox_mozSVGText", ":-moz-svg-text"),
# END ATOMS
@ -5279,3 +5281,20 @@
+NS_DEFINE_STATIC_IID_ACCESSOR(nsINativeMenuService, NS_INATIVEMENUSERVICE_IID)
+
+#endif // nsINativeMenuService_h_
--- a/widget/nsWidgetsCID.h
+++ b/widget/nsWidgetsCID.h
@@ -66,6 +66,14 @@
// Menus
//-----------------------------------------------------------
+// {0B3FE5AA-BC72-4303-85AE-76365DF1251D}
+#define NS_NATIVEMENUSERVICE_CID \
+ { \
+ 0x0B3FE5AA, 0xBC72, 0x4303, { \
+ 0x85, 0xAE, 0x76, 0x36, 0x5D, 0xF1, 0x25, 0x1D \
+ } \
+ }
+
// {F6CD4F21-53AF-11d2-8DC4-00609703C14E}
#define NS_POPUPMENU_CID \
{ \