From 9e90fb3a9bc38aad9921530ee69ecabf6ac8c7bf Mon Sep 17 00:00:00 2001 From: ohfp <1813007-ohfp@users.noreply.gitlab.com> Date: Wed, 21 Apr 2021 10:52:21 +0200 Subject: [PATCH] v88.0-1; switch to bionic as base to build on, xenial is EOS/EOL --- .gitlab-ci.yml | 4 +- CHANGELOG.md | 10 + deb_patches/build-with-libstdc++-7.patch | 54 --- deb_patches/lower-python3-requirement.patch | 71 --- deb_patches/python3-remove-fstrings.patch | 432 ------------------ deb_patches/python3-remove-pep487.patch | 23 - .../python3-remove-variable-annotations.patch | 148 ------ .../silence-gtk-style-assertions.patch | 42 -- scripts/1_Install_Dependencies.sh | 13 +- scripts/3_Configure_Source_Code.sh | 22 +- scripts/4_Build_Binary_Tarball.sh | 2 +- scripts/5_Configure_Binary_Tarball.sh | 2 +- unity-menubar.patch | 57 ++- 13 files changed, 66 insertions(+), 814 deletions(-) delete mode 100644 deb_patches/build-with-libstdc++-7.patch delete mode 100644 deb_patches/lower-python3-requirement.patch delete mode 100644 deb_patches/python3-remove-fstrings.patch delete mode 100644 deb_patches/python3-remove-pep487.patch delete mode 100644 deb_patches/python3-remove-variable-annotations.patch delete mode 100644 deb_patches/silence-gtk-style-assertions.patch diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index acd4103..1d4956b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 64d9e5f..bcf6f54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/deb_patches/build-with-libstdc++-7.patch b/deb_patches/build-with-libstdc++-7.patch deleted file mode 100644 index 5e8ea58..0000000 --- a/deb_patches/build-with-libstdc++-7.patch +++ /dev/null @@ -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 -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", diff --git a/deb_patches/lower-python3-requirement.patch b/deb_patches/lower-python3-requirement.patch deleted file mode 100644 index b08c811..0000000 --- a/deb_patches/lower-python3-requirement.patch +++ /dev/null @@ -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)) - diff --git a/deb_patches/python3-remove-fstrings.patch b/deb_patches/python3-remove-fstrings.patch deleted file mode 100644 index 7ef3694..0000000 --- a/deb_patches/python3-remove-fstrings.patch +++ /dev/null @@ -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 - ---- 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 = "" - 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 diff --git a/deb_patches/python3-remove-pep487.patch b/deb_patches/python3-remove-pep487.patch deleted file mode 100644 index 996681d..0000000 --- a/deb_patches/python3-remove-pep487.patch +++ /dev/null @@ -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 - ---- 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 = {} diff --git a/deb_patches/python3-remove-variable-annotations.patch b/deb_patches/python3-remove-variable-annotations.patch deleted file mode 100644 index aea5fd8..0000000 --- a/deb_patches/python3-remove-variable-annotations.patch +++ /dev/null @@ -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 - ---- 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) diff --git a/deb_patches/silence-gtk-style-assertions.patch b/deb_patches/silence-gtk-style-assertions.patch deleted file mode 100644 index 36ec8e3..0000000 --- a/deb_patches/silence-gtk-style-assertions.patch +++ /dev/null @@ -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 - ---- 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); diff --git a/scripts/1_Install_Dependencies.sh b/scripts/1_Install_Dependencies.sh index 2454320..3921666 100755 --- a/scripts/1_Install_Dependencies.sh +++ b/scripts/1_Install_Dependencies.sh @@ -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 diff --git a/scripts/3_Configure_Source_Code.sh b/scripts/3_Configure_Source_Code.sh index a1e9430..48aa915 100755 --- a/scripts/3_Configure_Source_Code.sh +++ b/scripts/3_Configure_Source_Code.sh @@ -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" diff --git a/scripts/4_Build_Binary_Tarball.sh b/scripts/4_Build_Binary_Tarball.sh index f284f37..d035c49 100755 --- a/scripts/4_Build_Binary_Tarball.sh +++ b/scripts/4_Build_Binary_Tarball.sh @@ -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 diff --git a/scripts/5_Configure_Binary_Tarball.sh b/scripts/5_Configure_Binary_Tarball.sh index 1921ed8..80217b2 100755 --- a/scripts/5_Configure_Binary_Tarball.sh +++ b/scripts/5_Configure_Binary_Tarball.sh @@ -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 diff --git a/unity-menubar.patch b/unity-menubar.patch index 5833857..d65c250 100644 --- a/unity-menubar.patch +++ b/unity-menubar.patch @@ -1,20 +1,22 @@ --- a/browser/base/content/browser-menubar.inc +++ b/browser/base/content/browser-menubar.inc -@@ -5,7 +5,11 @@ - - - + 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 > mPendingMutations; -+ nsDataHashtable, nsNativeMenuChangeObserver *> mContentToObserverTable; ++ nsTHashMap, 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 mMenuBars; -+ nsDataHashtable, GCancellable*> mMenuBarRegistrationCancellables; ++ nsTHashMap, 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 \ + { \