Architecture specific change in rpms/rust-wasm-bindgen-backend.git
by githook-noreply@fedoraproject.org
The package rpms/rust-wasm-bindgen-backend.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-wasm-bindgen-backend.git/com....
Change:
+ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit 08370bd8f6262d7d4e4e6e928e901cd94dc1e8b6
Author: Artem Polishchuk <ego.cordatus(a)gmail.com>
Date: Wed Jul 1 21:32:44 2020 +0300
Initial import
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..dbef1a8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/wasm-bindgen-backend-0.2.64.crate
diff --git a/rust-wasm-bindgen-backend.spec b/rust-wasm-bindgen-backend.spec
new file mode 100644
index 0000000..0b13f74
--- /dev/null
+++ b/rust-wasm-bindgen-backend.spec
@@ -0,0 +1,101 @@
+# Generated by rust2rpm 13
+%bcond_without check
+%global debug_package %{nil}
+
+%global crate wasm-bindgen-backend
+
+Name: rust-%{crate}
+Version: 0.2.64
+Release: 1%{?dist}
+Summary: Backend code generation of the wasm-bindgen tool
+
+# Upstream license specification: MIT/Apache-2.0
+License: MIT or ASL 2.0
+URL: https://crates.io/crates/wasm-bindgen-backend
+Source: %{crates_source}
+
+ExclusiveArch: %{rust_arches}
+%if %{__cargo_skip_build}
+BuildArch: noarch
+%endif
+
+BuildRequires: rust-packaging
+
+%global _description %{expand:
+Backend code generation of the wasm-bindgen tool.}
+
+%description %{_description}
+
+%package devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description devel %{_description}
+
+This package contains library source intended for building other packages
+which use "%{crate}" crate.
+
+%files devel
+%license LICENSE-APACHE LICENSE-MIT
+%{cargo_registry}/%{crate}-%{version_no_tilde}/
+
+%package -n %{name}+default-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+default-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "default" feature of "%{crate}" crate.
+
+%files -n %{name}+default-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+extra-traits-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+extra-traits-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "extra-traits" feature of "%{crate}" crate.
+
+%files -n %{name}+extra-traits-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+spans-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+spans-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "spans" feature of "%{crate}" crate.
+
+%files -n %{name}+spans-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%prep
+%autosetup -n %{crate}-%{version_no_tilde} -p1
+%cargo_prep
+
+%generate_buildrequires
+%cargo_generate_buildrequires
+
+%build
+%cargo_build
+
+%install
+%cargo_install
+
+%if %{with check}
+%check
+%cargo_test
+%endif
+
+%changelog
+* Wed Jul 01 21:29:45 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.2.64-1
+- Update to 0.2.64
+
+* Thu Jun 25 11:45:06 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.2.63-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..36a3734
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (wasm-bindgen-backend-0.2.64.crate) = 991ec5a3cbe0a2ac56d3e25a378a146eb40bcb7dbbfb11a52650273eb0ab8851d49b7d236baf5f3e8822de214d65af1dde26ea74be94fe77d02139e7b50c993d
3 years, 10 months
Architecture specific change in rpms/rust-bumpalo.git
by githook-noreply@fedoraproject.org
The package rpms/rust-bumpalo.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-bumpalo.git/commit/?id=372fa....
Change:
+ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit 372fa6744288d7c631bb068212aae41e4b3d37e4
Author: Artem Polishchuk <ego.cordatus(a)gmail.com>
Date: Wed Jul 1 21:27:39 2020 +0300
Initial import
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..38a8d19
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/bumpalo-3.4.0.crate
diff --git a/rust-bumpalo.spec b/rust-bumpalo.spec
new file mode 100644
index 0000000..9fe248f
--- /dev/null
+++ b/rust-bumpalo.spec
@@ -0,0 +1,102 @@
+# Generated by rust2rpm 13
+%bcond_without check
+%global debug_package %{nil}
+
+%global crate bumpalo
+
+Name: rust-%{crate}
+Version: 3.4.0
+Release: 1%{?dist}
+Summary: Fast bump allocation arena for Rust
+
+# Upstream license specification: MIT/Apache-2.0
+License: MIT or ASL 2.0
+URL: https://crates.io/crates/bumpalo
+Source: %{crates_source}
+
+ExclusiveArch: %{rust_arches}
+%if %{__cargo_skip_build}
+BuildArch: noarch
+%endif
+
+BuildRequires: rust-packaging
+
+%global _description %{expand:
+Fast bump allocation arena for Rust.}
+
+%description %{_description}
+
+%package devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description devel %{_description}
+
+This package contains library source intended for building other packages
+which use "%{crate}" crate.
+
+%files devel
+%license LICENSE-APACHE LICENSE-MIT
+%doc ./README.md CHANGELOG.md
+%{cargo_registry}/%{crate}-%{version_no_tilde}/
+
+%package -n %{name}+default-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+default-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "default" feature of "%{crate}" crate.
+
+%files -n %{name}+default-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+boxed-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+boxed-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "boxed" feature of "%{crate}" crate.
+
+%files -n %{name}+boxed-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+collections-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+collections-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "collections" feature of "%{crate}" crate.
+
+%files -n %{name}+collections-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%prep
+%autosetup -n %{crate}-%{version_no_tilde} -p1
+%cargo_prep
+
+%generate_buildrequires
+%cargo_generate_buildrequires
+
+%build
+%cargo_build
+
+%install
+%cargo_install
+
+%if %{with check}
+%check
+# Checking that `cargo readme > README.md` is up to date...
+# thread 'cargo_readme_up_to_date' panicked at 'Run `cargo readme > README.md` to update README.md', tests/readme_up_to_date.rs:20:9
+# * https://github.com/fitzgen/bumpalo/issues/80
+%cargo_test -- -- --skip readme_up_to_date
+%endif
+
+%changelog
+* Thu Jun 25 11:51:52 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 3.4.0-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..8a12afb
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (bumpalo-3.4.0.crate) = 955e49eeeb803547092b58c086a2582e905578179d93500c1f55dd3fb7a65349f33ddc4c2710c0ee804abbe4e1f2afbdeb998533d362177298a86a4f9a8822a5
3 years, 10 months
Architecture specific change in rpms/rust-wasm-bindgen-shared.git
by githook-noreply@fedoraproject.org
The package rpms/rust-wasm-bindgen-shared.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-wasm-bindgen-shared.git/comm....
Change:
+ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit c1d0005519bc6ef777dd5ea3ec1d4171261ceda9
Author: Artem Polishchuk <ego.cordatus(a)gmail.com>
Date: Wed Jul 1 21:16:18 2020 +0300
Initial import
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..28eba7b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/wasm-bindgen-shared-0.2.64.crate
diff --git a/rust-wasm-bindgen-shared.spec b/rust-wasm-bindgen-shared.spec
new file mode 100644
index 0000000..2c6a76e
--- /dev/null
+++ b/rust-wasm-bindgen-shared.spec
@@ -0,0 +1,78 @@
+# Generated by rust2rpm 13
+%bcond_without check
+%global debug_package %{nil}
+
+%global crate wasm-bindgen-shared
+
+Name: rust-%{crate}
+Version: 0.2.64
+Release: 1%{?dist}
+Summary: Shared support between wasm-bindgen and wasm-bindgen cli, an internal dependency
+
+# Upstream license specification: MIT/Apache-2.0
+License: MIT or ASL 2.0
+URL: https://crates.io/crates/wasm-bindgen-shared
+Source: %{crates_source}
+
+ExclusiveArch: %{rust_arches}
+%if %{__cargo_skip_build}
+BuildArch: noarch
+%endif
+
+BuildRequires: rust-packaging
+
+%global _description %{expand:
+Shared support between wasm-bindgen and wasm-bindgen cli, an internal
+dependency.}
+
+%description %{_description}
+
+%package devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description devel %{_description}
+
+This package contains library source intended for building other packages
+which use "%{crate}" crate.
+
+%files devel
+%license LICENSE-APACHE LICENSE-MIT
+%{cargo_registry}/%{crate}-%{version_no_tilde}/
+
+%package -n %{name}+default-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+default-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "default" feature of "%{crate}" crate.
+
+%files -n %{name}+default-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%prep
+%autosetup -n %{crate}-%{version_no_tilde} -p1
+%cargo_prep
+
+%generate_buildrequires
+%cargo_generate_buildrequires
+
+%build
+%cargo_build
+
+%install
+%cargo_install
+
+%if %{with check}
+%check
+%cargo_test
+%endif
+
+%changelog
+* Wed Jul 01 21:13:47 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.2.64-1
+- Update to 0.2.64
+
+* Thu Jun 25 11:42:51 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.2.63-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..cc30569
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (wasm-bindgen-shared-0.2.64.crate) = 1554ced919c2a512a3263fff16e54976ec51b411064084c7a68706efdf6150d7a4eb76d6ff15831ce9698df35905189f365e22d0aa539b0b74e5b1c35fb36a3f
3 years, 10 months
Architecture specific change in rpms/rust-wasm-bindgen-test-macro.git
by githook-noreply@fedoraproject.org
The package rpms/rust-wasm-bindgen-test-macro.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-wasm-bindgen-test-macro.git/....
Change:
+ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit 14903c89dcf3597c2730547dcd36e7921a3758f4
Author: Artem Polishchuk <ego.cordatus(a)gmail.com>
Date: Wed Jul 1 20:58:09 2020 +0300
Initial import
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c9cf282
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/wasm-bindgen-test-macro-0.3.14.crate
diff --git a/rust-wasm-bindgen-test-macro.spec b/rust-wasm-bindgen-test-macro.spec
new file mode 100644
index 0000000..2184bca
--- /dev/null
+++ b/rust-wasm-bindgen-test-macro.spec
@@ -0,0 +1,78 @@
+# Generated by rust2rpm 13
+%bcond_without check
+%global debug_package %{nil}
+
+%global crate wasm-bindgen-test-macro
+
+Name: rust-%{crate}
+Version: 0.3.14
+Release: 1%{?dist}
+Summary: Internal testing macro for wasm-bindgen
+
+# Upstream license specification: MIT/Apache-2.0
+License: MIT or ASL 2.0
+URL: https://crates.io/crates/wasm-bindgen-test-macro
+Source: %{crates_source}
+
+ExclusiveArch: %{rust_arches}
+%if %{__cargo_skip_build}
+BuildArch: noarch
+%endif
+
+BuildRequires: rust-packaging
+
+%global _description %{expand:
+Internal testing macro for wasm-bindgen.}
+
+%description %{_description}
+
+%package devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description devel %{_description}
+
+This package contains library source intended for building other packages
+which use "%{crate}" crate.
+
+%files devel
+%license LICENSE-APACHE LICENSE-MIT
+%doc README.md
+%{cargo_registry}/%{crate}-%{version_no_tilde}/
+
+%package -n %{name}+default-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+default-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "default" feature of "%{crate}" crate.
+
+%files -n %{name}+default-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%prep
+%autosetup -n %{crate}-%{version_no_tilde} -p1
+%cargo_prep
+
+%generate_buildrequires
+%cargo_generate_buildrequires
+
+%build
+%cargo_build
+
+%install
+%cargo_install
+
+%if %{with check}
+%check
+%cargo_test
+%endif
+
+%changelog
+* Wed Jul 01 20:56:13 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.3.14-1
+- Update to 0.3.14
+
+* Thu Jun 25 11:20:43 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.3.13-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..49c5a2d
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (wasm-bindgen-test-macro-0.3.14.crate) = d827575a9fc83715cad2233c8d3471f894ddf15d4ff5f7653a4989f0b7e14f895dddb3250a363ab6acc4b720c0322b4559879e290c9a889bd2e0b6120d093b4e
3 years, 10 months
Architecture specific change in rpms/rust-pem.git
by githook-noreply@fedoraproject.org
The package rpms/rust-pem.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-pem.git/commit/?id=e39d9f3b7....
Change:
+ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit e39d9f3b73e169f279f55e92209b8dffa96c14fa
Author: Artem Polishchuk <ego.cordatus(a)gmail.com>
Date: Wed Jul 1 20:41:16 2020 +0300
Initial import
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2ea2a56
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/pem-0.8.1.crate
diff --git a/pem-fix-metadata.diff b/pem-fix-metadata.diff
new file mode 100644
index 0000000..f38434a
--- /dev/null
+++ b/pem-fix-metadata.diff
@@ -0,0 +1,10 @@
+--- pem-0.8.1/Cargo.toml 2020-06-08T14:01:44+00:00
++++ pem-0.8.1/Cargo.toml 2020-06-25T07:55:32.739881+00:00
+@@ -35,6 +35,6 @@
+ [dependencies.regex]
+ version = "1"
+ [dev-dependencies.criterion]
+-version = "0.2.3"
++version = "0.3.0"
+ [badges.travis-ci]
+ repository = "jcreekmore/pem-rs"
diff --git a/rust-pem.spec b/rust-pem.spec
new file mode 100644
index 0000000..d3567de
--- /dev/null
+++ b/rust-pem.spec
@@ -0,0 +1,80 @@
+# Generated by rust2rpm 13
+%bcond_without check
+%global debug_package %{nil}
+
+%global crate pem
+
+Name: rust-%{crate}
+Version: 0.8.1
+Release: 1%{?dist}
+Summary: Parse and encode PEM-encoded data
+
+# Upstream license specification: MIT
+License: MIT
+URL: https://crates.io/crates/pem
+Source: %{crates_source}
+# Initial patched metadata
+# * https://github.com/jcreekmore/pem-rs/pull/24
+# * Bump deps
+# - criterion to 0.3.0
+Patch0: pem-fix-metadata.diff
+
+ExclusiveArch: %{rust_arches}
+%if %{__cargo_skip_build}
+BuildArch: noarch
+%endif
+
+BuildRequires: rust-packaging
+
+%global _description %{expand:
+Parse and encode PEM-encoded data.}
+
+%description %{_description}
+
+%package devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description devel %{_description}
+
+This package contains library source intended for building other packages
+which use "%{crate}" crate.
+
+%files devel
+%license LICENSE.md
+%doc README.md
+%{cargo_registry}/%{crate}-%{version_no_tilde}/
+
+%package -n %{name}+default-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+default-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "default" feature of "%{crate}" crate.
+
+%files -n %{name}+default-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%prep
+%autosetup -n %{crate}-%{version_no_tilde} -p1
+%cargo_prep
+
+%generate_buildrequires
+%cargo_generate_buildrequires
+
+%build
+%cargo_build
+
+%install
+%cargo_install
+
+%if %{with check}
+%check
+%cargo_test
+%endif
+
+%changelog
+* Thu Jun 25 10:55:33 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.8.1-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..8fc1c24
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (pem-0.8.1.crate) = db7a18a7499885262432137c845a81b4daae1e0b6a6e8e83e58735f41f6efa73b3358354d39204295c88a7c241f10588be09f3dd3f034a266a34cfeda82c4466
3 years, 10 months
Architecture specific change in rpms/rust-askama.git
by githook-noreply@fedoraproject.org
The package rpms/rust-askama.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-askama.git/commit/?id=8b581d....
Change:
+ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit 8b581de4d3e81c6cb93afdc06e713918339a1bd4
Author: Artem Polishchuk <ego.cordatus(a)gmail.com>
Date: Wed Jul 1 20:13:34 2020 +0300
Initial import
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7c21e9e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/askama-0.10.0.crate
diff --git a/rust-askama.spec b/rust-askama.spec
new file mode 100644
index 0000000..723ae7b
--- /dev/null
+++ b/rust-askama.spec
@@ -0,0 +1,236 @@
+# Generated by rust2rpm 13
+%bcond_without check
+%global debug_package %{nil}
+
+%global crate askama
+
+Name: rust-%{crate}
+Version: 0.10.0
+Release: 1%{?dist}
+Summary: Type-safe, compiled Jinja-like templates for Rust
+
+# Upstream license specification: MIT OR Apache-2.0
+License: MIT or ASL 2.0
+URL: https://crates.io/crates/askama
+Source: %{crates_source}
+
+ExclusiveArch: %{rust_arches}
+%if %{__cargo_skip_build}
+BuildArch: noarch
+%endif
+
+BuildRequires: rust-packaging
+
+%global _description %{expand:
+Type-safe, compiled Jinja-like templates for Rust.}
+
+%description %{_description}
+
+%package devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description devel %{_description}
+
+This package contains library source intended for building other packages
+which use "%{crate}" crate.
+
+%files devel
+%license LICENSE-APACHE LICENSE-MIT
+# No README file on crates.io
+# * https://github.com/djc/askama/issues/340
+#%%doc ../README.md
+%{cargo_registry}/%{crate}-%{version_no_tilde}/
+
+%package -n %{name}+default-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+default-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "default" feature of "%{crate}" crate.
+
+%files -n %{name}+default-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+config-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+config-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "config" feature of "%{crate}" crate.
+
+%files -n %{name}+config-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+humansize-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+humansize-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "humansize" feature of "%{crate}" crate.
+
+%files -n %{name}+humansize-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+mime-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+mime-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "mime" feature of "%{crate}" crate.
+
+%files -n %{name}+mime-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+mime_guess-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+mime_guess-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "mime_guess" feature of "%{crate}" crate.
+
+%files -n %{name}+mime_guess-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+num-traits-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+num-traits-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "num-traits" feature of "%{crate}" crate.
+
+%files -n %{name}+num-traits-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+serde-json-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+serde-json-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "serde-json" feature of "%{crate}" crate.
+
+%files -n %{name}+serde-json-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+serde-yaml-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+serde-yaml-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "serde-yaml" feature of "%{crate}" crate.
+
+%files -n %{name}+serde-yaml-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+urlencode-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+urlencode-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "urlencode" feature of "%{crate}" crate.
+
+%files -n %{name}+urlencode-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+with-actix-web-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+with-actix-web-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "with-actix-web" feature of "%{crate}" crate.
+
+%files -n %{name}+with-actix-web-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+with-gotham-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+with-gotham-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "with-gotham" feature of "%{crate}" crate.
+
+%files -n %{name}+with-gotham-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+with-iron-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+with-iron-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "with-iron" feature of "%{crate}" crate.
+
+%files -n %{name}+with-iron-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+with-rocket-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+with-rocket-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "with-rocket" feature of "%{crate}" crate.
+
+%files -n %{name}+with-rocket-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+with-warp-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+with-warp-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "with-warp" feature of "%{crate}" crate.
+
+%files -n %{name}+with-warp-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%prep
+%autosetup -n %{crate}-%{version_no_tilde} -p1
+%cargo_prep
+
+%generate_buildrequires
+%cargo_generate_buildrequires
+
+%build
+%cargo_build
+
+%install
+%cargo_install
+
+%if %{with check}
+%check
+%cargo_test
+%endif
+
+%changelog
+* Wed Jul 01 20:08:42 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.10.0-1
+- Update to 0.10.0
+
+* Sun Jun 21 03:36:59 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.9.0-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..687e15f
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (askama-0.10.0.crate) = e013fee23d2e67390f20bd632ec0ca849225dadc72892604684ae2847ca44fe5130afdf9b3d07f59014d72813345397c9e7802b3c51f2e956b2dfff29c9c249e
3 years, 10 months
Architecture specific change in rpms/rust-askama_derive.git
by githook-noreply@fedoraproject.org
The package rpms/rust-askama_derive.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-askama_derive.git/commit/?id....
Change:
+ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit 0eadd1915b33930644ab4d90bb94509d3ec18449
Author: Artem Polishchuk <ego.cordatus(a)gmail.com>
Date: Wed Jul 1 20:03:01 2020 +0300
Initial import
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..bf6d24a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/askama_derive-0.10.0.crate
diff --git a/rust-askama_derive.spec b/rust-askama_derive.spec
new file mode 100644
index 0000000..c212a32
--- /dev/null
+++ b/rust-askama_derive.spec
@@ -0,0 +1,138 @@
+# Generated by rust2rpm 13
+%bcond_without check
+%global debug_package %{nil}
+
+%global crate askama_derive
+
+Name: rust-%{crate}
+Version: 0.10.0
+Release: 1%{?dist}
+Summary: Procedural macro package for Askama
+
+# Upstream license specification: MIT/Apache-2.0
+License: MIT or ASL 2.0
+URL: https://crates.io/crates/askama_derive
+Source: %{crates_source}
+
+ExclusiveArch: %{rust_arches}
+%if %{__cargo_skip_build}
+BuildArch: noarch
+%endif
+
+BuildRequires: rust-packaging
+
+%global _description %{expand:
+Procedural macro package for Askama.}
+
+%description %{_description}
+
+%package devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description devel %{_description}
+
+This package contains library source intended for building other packages
+which use "%{crate}" crate.
+
+%files devel
+%license LICENSE-APACHE LICENSE-MIT
+%doc README.md
+%{cargo_registry}/%{crate}-%{version_no_tilde}/
+
+%package -n %{name}+default-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+default-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "default" feature of "%{crate}" crate.
+
+%files -n %{name}+default-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+actix-web-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+actix-web-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "actix-web" feature of "%{crate}" crate.
+
+%files -n %{name}+actix-web-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+gotham-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+gotham-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "gotham" feature of "%{crate}" crate.
+
+%files -n %{name}+gotham-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+iron-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+iron-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "iron" feature of "%{crate}" crate.
+
+%files -n %{name}+iron-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+rocket-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+rocket-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "rocket" feature of "%{crate}" crate.
+
+%files -n %{name}+rocket-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+warp-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+warp-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "warp" feature of "%{crate}" crate.
+
+%files -n %{name}+warp-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%prep
+%autosetup -n %{crate}-%{version_no_tilde} -p1
+%cargo_prep
+
+%generate_buildrequires
+%cargo_generate_buildrequires
+
+%build
+%cargo_build
+
+%install
+%cargo_install
+
+%if %{with check}
+%check
+%cargo_test
+%endif
+
+%changelog
+* Wed Jul 01 19:52:29 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.10.0-1
+- Update 0.10.0
+
+* Sun Jun 21 03:38:09 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.9.0-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..c502471
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (askama_derive-0.10.0.crate) = d5a78944d5d1ebc48b01ff487ddbeb9ebe30e5a7d90ea33438621004cbb5d6e7e2b8d508cd60519af68f9c5e17d0d4a9107429b8f5b8d5de77c45cf6f08e52ef
3 years, 10 months
Architecture specific change in rpms/rust-askama_shared.git
by githook-noreply@fedoraproject.org
The package rpms/rust-askama_shared.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-askama_shared.git/commit/?id....
Change:
+ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit 6930c3b810344effb887b9cab58556224f3b5a2b
Author: Artem Polishchuk <ego.cordatus(a)gmail.com>
Date: Wed Jul 1 19:35:55 2020 +0300
Initial import
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..56de490
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/askama_shared-0.10.2.crate
diff --git a/rust-askama_shared.spec b/rust-askama_shared.spec
new file mode 100644
index 0000000..a722573
--- /dev/null
+++ b/rust-askama_shared.spec
@@ -0,0 +1,210 @@
+# Generated by rust2rpm 13
+%bcond_without check
+%global debug_package %{nil}
+
+%global crate askama_shared
+
+Name: rust-%{crate}
+Version: 0.10.2
+Release: 1%{?dist}
+Summary: Shared code for Askama
+
+# Upstream license specification: MIT/Apache-2.0
+License: MIT or ASL 2.0
+URL: https://crates.io/crates/askama_shared
+Source: %{crates_source}
+
+ExclusiveArch: %{rust_arches}
+%if %{__cargo_skip_build}
+BuildArch: noarch
+%endif
+
+BuildRequires: rust-packaging
+
+%global _description %{expand:
+Shared code for Askama.}
+
+%description %{_description}
+
+%package devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description devel %{_description}
+
+This package contains library source intended for building other packages
+which use "%{crate}" crate.
+
+%files devel
+%license LICENSE-APACHE LICENSE-MIT
+%doc README.md
+%{cargo_registry}/%{crate}-%{version_no_tilde}/
+
+%package -n %{name}+default-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+default-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "default" feature of "%{crate}" crate.
+
+%files -n %{name}+default-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+config-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+config-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "config" feature of "%{crate}" crate.
+
+%files -n %{name}+config-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+humansize-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+humansize-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "humansize" feature of "%{crate}" crate.
+
+%files -n %{name}+humansize-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+json-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+json-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "json" feature of "%{crate}" crate.
+
+%files -n %{name}+json-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+num-traits-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+num-traits-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "num-traits" feature of "%{crate}" crate.
+
+%files -n %{name}+num-traits-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+percent-encoding-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+percent-encoding-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "percent-encoding" feature of "%{crate}" crate.
+
+%files -n %{name}+percent-encoding-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+serde-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+serde-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "serde" feature of "%{crate}" crate.
+
+%files -n %{name}+serde-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+serde_derive-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+serde_derive-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "serde_derive" feature of "%{crate}" crate.
+
+%files -n %{name}+serde_derive-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+serde_json-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+serde_json-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "serde_json" feature of "%{crate}" crate.
+
+%files -n %{name}+serde_json-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+serde_yaml-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+serde_yaml-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "serde_yaml" feature of "%{crate}" crate.
+
+%files -n %{name}+serde_yaml-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+toml-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+toml-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "toml" feature of "%{crate}" crate.
+
+%files -n %{name}+toml-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%package -n %{name}+yaml-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+yaml-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "yaml" feature of "%{crate}" crate.
+
+%files -n %{name}+yaml-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%prep
+%autosetup -n %{crate}-%{version_no_tilde} -p1
+%cargo_prep
+
+%generate_buildrequires
+%cargo_generate_buildrequires
+
+%build
+%cargo_build
+
+%install
+%cargo_install
+
+%if %{with check}
+%check
+%cargo_test
+%endif
+
+%changelog
+* Wed Jul 01 18:34:37 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.10.2-1
+- Update to 0.10.2
+
+* Sun Jun 21 03:45:01 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.9.1-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..31fc351
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (askama_shared-0.10.2.crate) = 6ce340b021d3e575a9f7b58d323ea360226588ecf7f9efe506da6f52a53110279bff4c92db406a29cbed8ea5adc6eb6eba04516b8739eda7cca6d6ea06e6ed87
3 years, 10 months
Architecture specific change in rpms/icecat.git
by githook-noreply@fedoraproject.org
The package rpms/icecat.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/icecat.git/commit/?id=91d1df5da97....
Change:
+%ifarch x86_64 ppc %{power64} aarch64
Thanks.
Full change:
============
commit 91d1df5da9708f716370c0565772dca1c4780f34
Author: sagitter <sagitter(a)fedoraproject.org>
Date: Wed Jul 1 18:35:03 2020 +0200
Release 78.0 rh1-test
diff --git a/.gitignore b/.gitignore
index 978d442..6602ef9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -116,3 +116,5 @@
/icecat-68.9.0-rh1.tar.bz2
/icecat-68.9.0-rh2.tar.bz2
/icecat-68.9.0-langpacks.tar.gz
+/icecat-78.0-langpacks.tar.gz
+/icecat-78.0-rh1.tar.bz2
diff --git a/build-aarch64-skia.patch b/build-aarch64-skia.patch
index a00ee70..a63e3e8 100644
--- a/build-aarch64-skia.patch
+++ b/build-aarch64-skia.patch
@@ -1,6 +1,6 @@
-diff -up firefox-68.0/gfx/skia/skia/include/private/SkHalf.h.old firefox-68.0/gfx/skia/skia/include/private/SkHalf.h
---- firefox-68.0/gfx/skia/skia/include/private/SkHalf.h.old 2019-07-11 12:33:40.471936951 +0200
-+++ firefox-68.0/gfx/skia/skia/include/private/SkHalf.h 2019-07-11 12:33:50.527913736 +0200
+diff -up firefox-72.0/gfx/skia/skia/include/private/SkHalf.h.aarch64-skia firefox-72.0/gfx/skia/skia/include/private/SkHalf.h
+--- firefox-72.0/gfx/skia/skia/include/private/SkHalf.h.aarch64-skia 2020-01-02 22:33:02.000000000 +0100
++++ firefox-72.0/gfx/skia/skia/include/private/SkHalf.h 2020-01-03 09:00:37.537296105 +0100
@@ -40,7 +40,7 @@ static inline Sk4h SkFloatToHalf_finite_
static inline Sk4f SkHalfToFloat_finite_ftz(uint64_t rgba) {
@@ -19,28 +19,27 @@ diff -up firefox-68.0/gfx/skia/skia/include/private/SkHalf.h.old firefox-68.0/gf
float32x4_t vec = fs.fVec;
asm ("fcvtn %[vec].4h, %[vec].4s \n" // vcvt_f16_f32(vec)
: [vec] "+w" (vec)); // +w: read-write NEON register
-
-diff -up firefox-68.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.old firefox-68.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h
---- firefox-68.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.old 2019-07-11 12:39:08.694166900 +0200
-+++ firefox-68.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h 2019-07-11 12:39:21.572136328 +0200
-@@ -830,7 +830,7 @@ SI F from_half(U16 h) {
+diff -up firefox-72.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia firefox-72.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h
+--- firefox-72.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia 2020-01-03 09:00:37.538296107 +0100
++++ firefox-72.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h 2020-01-03 10:11:41.259219508 +0100
+@@ -1087,7 +1087,7 @@ SI F from_half(U16 h) {
}
SI U16 to_half(F f) {
--#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
-+#if 0 // defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
+-#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) \
++#if 0 //defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) \
+ && !defined(SK_BUILD_FOR_GOOGLE3) // Temporary workaround for some Google3 builds.
return vcvt_f16_f32(f);
- #elif defined(JUMPER_IS_HSW) || defined(JUMPER_IS_AVX512)
-diff -up firefox-68.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h.old firefox-68.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h
---- firefox-68.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h.old 2019-07-11 12:38:45.285222428 +0200
-+++ firefox-68.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h 2019-07-11 12:38:57.414193679 +0200
-@@ -163,7 +163,7 @@ SI F F_from_Half(U16 half) {
- __attribute__((no_sanitize("unsigned-integer-overflow")))
- #endif
+diff -up firefox-72.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h.aarch64-skia firefox-72.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h
+--- firefox-72.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h.aarch64-skia 2020-01-03 09:00:37.538296107 +0100
++++ firefox-72.0/gfx/skia/skia/third_party/skcms/src/Transform_inl.h 2020-01-03 10:11:53.513250979 +0100
+@@ -183,8 +183,6 @@ SI F F_from_Half(U16 half) {
SI U16 Half_from_F(F f) {
--#if defined(USING_NEON_F16C)
-+#if 0 // defined(USING_NEON_F16C)
- return (U16)vcvt_f16_f32(f);
- #elif defined(__AVX512F__)
+ #if defined(USING_NEON_FP16)
+ return bit_pun<U16>(f);
+-#elif defined(USING_NEON_F16C)
+- return (U16)vcvt_f16_f32(f);
+ #elif defined(USING_AVX512F)
return (U16)_mm512_cvtps_ph((__m512 )f, _MM_FROUND_CUR_DIRECTION );
+ #elif defined(USING_AVX_F16C)
diff --git a/firefox-disable-ffvpx-with-vapi.patch b/firefox-disable-ffvpx-with-vapi.patch
new file mode 100644
index 0000000..df179b0
--- /dev/null
+++ b/firefox-disable-ffvpx-with-vapi.patch
@@ -0,0 +1,41 @@
+diff --git a/dom/media/platforms/PDMFactory.cpp b/dom/media/platforms/PDMFactory.cpp
+--- a/dom/media/platforms/PDMFactory.cpp
++++ b/dom/media/platforms/PDMFactory.cpp
+@@ -21,16 +21,17 @@
+ #include "mozilla/GpuDecoderModule.h"
+ #include "mozilla/RemoteDecoderModule.h"
+ #include "mozilla/SharedThreadPool.h"
+ #include "mozilla/StaticPrefs_media.h"
+ #include "mozilla/StaticPtr.h"
+ #include "mozilla/SyncRunnable.h"
+ #include "mozilla/TaskQueue.h"
+ #include "mozilla/gfx/gfxVars.h"
++#include "gfxPlatformGtk.h"
+
+ #ifdef XP_WIN
+ # include "WMFDecoderModule.h"
+ # include "mozilla/WindowsVersion.h"
+ #endif
+ #ifdef MOZ_FFVPX
+ # include "FFVPXRuntimeLinker.h"
+ #endif
+@@ -362,17 +363,18 @@ void PDMFactory::CreatePDMs() {
+ #endif
+ #ifdef MOZ_OMX
+ if (StaticPrefs::media_omx_enabled()) {
+ m = OmxDecoderModule::Create();
+ StartupPDM(m);
+ }
+ #endif
+ #ifdef MOZ_FFVPX
+- if (StaticPrefs::media_ffvpx_enabled()) {
++ if (StaticPrefs::media_ffvpx_enabled() &&
++ !gfxPlatformGtk::GetPlatform()->UseWaylandHardwareVideoDecoding()) {
+ m = FFVPXRuntimeLinker::CreateDecoderModule();
+ StartupPDM(m);
+ }
+ #endif
+ #ifdef MOZ_FFMPEG
+ if (StaticPrefs::media_ffmpeg_enabled()) {
+ m = FFmpegRuntimeLinker::CreateDecoderModule();
+ mFFmpegFailedToLoad = !StartupPDM(m);
diff --git a/firefox-nss-version.patch b/firefox-nss-version.patch
new file mode 100644
index 0000000..fee93bb
--- /dev/null
+++ b/firefox-nss-version.patch
@@ -0,0 +1,12 @@
+diff -up firefox-78.0/toolkit/moz.configure.nss-version firefox-78.0/toolkit/moz.configure
+--- firefox-78.0/toolkit/moz.configure.nss-version 2020-06-30 08:47:09.657501414 +0200
++++ firefox-78.0/toolkit/moz.configure 2020-06-30 08:47:12.652510169 +0200
+@@ -2089,7 +2089,7 @@ option('--with-system-nss', help='Use sy
+
+ imply_option('--with-system-nspr', True, when='--with-system-nss')
+
+-nss_pkg = pkg_check_modules('NSS', 'nss >= 3.53.1', when='--with-system-nss', config=False)
++nss_pkg = pkg_check_modules('NSS', 'nss >= 3.53.0', when='--with-system-nss', config=False)
+
+ set_config('MOZ_SYSTEM_NSS', True, when='--with-system-nss')
+
diff --git a/firefox-pipewire.patch b/firefox-pipewire.patch
index 7233a73..0844209 100644
--- a/firefox-pipewire.patch
+++ b/firefox-pipewire.patch
@@ -1,6 +1,7 @@
-diff -up firefox-68.0/config/system-headers.mozbuild.firefox-pipewire firefox-68.0/config/system-headers.mozbuild
---- firefox-68.0/config/system-headers.mozbuild.firefox-pipewire 2019-07-01 22:30:26.000000000 +0200
-+++ firefox-68.0/config/system-headers.mozbuild 2019-07-08 15:26:15.397161627 +0200
+diff --git a/config/system-headers.mozbuild b/config/system-headers.mozbuild
+index 2081d0c683a4..641133bf1ea4 100644
+--- a/config/system-headers.mozbuild
++++ b/config/system-headers.mozbuild
@@ -314,6 +314,7 @@ system_headers = [
'Gestalt.h',
'getopt.h',
@@ -17,10 +18,24 @@ diff -up firefox-68.0/config/system-headers.mozbuild.firefox-pipewire firefox-68
'pixman.h',
'pk11func.h',
'pk11pqg.h',
-diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build.firefox-pipewire firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
---- firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build.firefox-pipewire 2019-07-01 22:30:33.000000000 +0200
-+++ firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build 2019-07-08 15:26:15.397161627 +0200
-@@ -194,6 +194,28 @@ if CONFIG["OS_TARGET"] == "Linux":
+diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn b/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
+index ba885217b3ba..201d3b755221 100644
+--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
++++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn
+@@ -158,7 +158,7 @@ if (rtc_include_tests) {
+ if (is_linux) {
+ if (rtc_use_pipewire) {
+ pkg_config("pipewire") {
+- packages = [ "libpipewire-0.2" ]
++ packages = [ "libpipewire-0.3" ]
+
+ defines = [ "WEBRTC_USE_PIPEWIRE" ]
+ }
+diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
+index 90b40431c7e4..d844aa79d591 100644
+--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
++++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build
+@@ -194,6 +194,30 @@ if CONFIG["OS_TARGET"] == "Linux":
"/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc"
]
@@ -31,13 +46,15 @@ diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_
+
+ OS_LIBS += [
+ "rt",
-+ "pipewire-0.2",
++ "pipewire-0.3",
+ "glib-2.0",
+ "gio-2.0",
+ "gobject-2.0"
+ ]
+
+ CXXFLAGS += CONFIG['TK_CFLAGS']
++ CXXFLAGS += [ "-I/usr/include/pipewire-0.3" ]
++ CXXFLAGS += [ "-I/usr/include/spa-0.2" ]
+
+ UNIFIED_SOURCES += [
+ "/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc",
@@ -49,9 +66,10 @@ diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_
if CONFIG["OS_TARGET"] == "NetBSD":
DEFINES["USE_X11"] = "1"
-diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h.firefox-pipewire firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
---- firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h.firefox-pipewire 2019-07-08 16:42:13.936254926 +0200
-+++ firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h 2019-07-08 16:42:17.509264974 +0200
+diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
+index 1eb8ead26efa..316468eed1fc 100644
+--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
++++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_options.h
@@ -141,7 +141,7 @@ class DesktopCaptureOptions {
bool disable_effects_ = true;
bool detect_updated_region_ = false;
@@ -61,3 +79,768 @@ diff -up firefox-68.0/media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_
#endif
};
+diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
+index 379341c833de..76349f1fbd4d 100644
+--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
++++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
+@@ -15,8 +15,11 @@
+
+ #include <spa/param/format-utils.h>
+ #include <spa/param/props.h>
+-#include <spa/param/video/raw-utils.h>
+-#include <spa/support/type-map.h>
++
++#include <linux/dma-buf.h>
++#include <sys/mman.h>
++#include <sys/ioctl.h>
++#include <sys/syscall.h>
+
+ #include <memory>
+ #include <utility>
+@@ -36,31 +39,36 @@ const char kSessionInterfaceName[] = "org.freedesktop.portal.Session";
+ const char kRequestInterfaceName[] = "org.freedesktop.portal.Request";
+ const char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast";
+
+-// static
+-void BaseCapturerPipeWire::OnStateChanged(void* data,
+- pw_remote_state old_state,
+- pw_remote_state state,
+- const char* error_message) {
+- BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
+- RTC_DCHECK(that);
+
+- switch (state) {
+- case PW_REMOTE_STATE_ERROR:
+- RTC_LOG(LS_ERROR) << "PipeWire remote state error: " << error_message;
+- break;
+- case PW_REMOTE_STATE_CONNECTED:
+- RTC_LOG(LS_INFO) << "PipeWire remote state: connected.";
+- that->CreateReceivingStream();
+- break;
+- case PW_REMOTE_STATE_CONNECTING:
+- RTC_LOG(LS_INFO) << "PipeWire remote state: connecting.";
++// static
++void BaseCapturerPipeWire::SyncDmaBuf(int fd, uint64_t start_or_end) {
++ struct dma_buf_sync sync = { 0 };
++
++ sync.flags = start_or_end | DMA_BUF_SYNC_READ;
++
++ while(true) {
++ int ret;
++ ret = ioctl (fd, DMA_BUF_IOCTL_SYNC, &sync);
++ if (ret == -1 && errno == EINTR) {
++ continue;
++ } else if (ret == -1) {
++ RTC_LOG(LS_ERROR) << "Failed to synchronize DMA buffer: " << g_strerror(errno);
+ break;
+- case PW_REMOTE_STATE_UNCONNECTED:
+- RTC_LOG(LS_INFO) << "PipeWire remote state: unconnected.";
++ } else {
+ break;
++ }
+ }
+ }
+
++// static
++void BaseCapturerPipeWire::OnCoreError(void *data,
++ uint32_t id,
++ int seq,
++ int res,
++ const char *message) {
++ RTC_LOG(LS_ERROR) << "core error: " << message;
++}
++
+ // static
+ void BaseCapturerPipeWire::OnStreamStateChanged(void* data,
+ pw_stream_state old_state,
+@@ -73,76 +81,54 @@ void BaseCapturerPipeWire::OnStreamStateChanged(void* data,
+ case PW_STREAM_STATE_ERROR:
+ RTC_LOG(LS_ERROR) << "PipeWire stream state error: " << error_message;
+ break;
+- case PW_STREAM_STATE_CONFIGURE:
+- pw_stream_set_active(that->pw_stream_, true);
+- break;
+- case PW_STREAM_STATE_UNCONNECTED:
+- case PW_STREAM_STATE_CONNECTING:
+- case PW_STREAM_STATE_READY:
+ case PW_STREAM_STATE_PAUSED:
+ case PW_STREAM_STATE_STREAMING:
++ case PW_STREAM_STATE_UNCONNECTED:
++ case PW_STREAM_STATE_CONNECTING:
+ break;
+ }
+ }
+
+ // static
+-void BaseCapturerPipeWire::OnStreamFormatChanged(void* data,
+- const struct spa_pod* format) {
++void BaseCapturerPipeWire::OnStreamParamChanged(void *data, uint32_t id,
++ const struct spa_pod *format) {
+ BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
+ RTC_DCHECK(that);
+
+- RTC_LOG(LS_INFO) << "PipeWire stream format changed.";
++ RTC_LOG(LS_INFO) << "PipeWire stream param changed.";
+
+- if (!format) {
+- pw_stream_finish_format(that->pw_stream_, /*res=*/0, /*params=*/nullptr,
+- /*n_params=*/0);
++ if (!format || id != SPA_PARAM_Format) {
+ return;
+ }
+
+- that->spa_video_format_ = new spa_video_info_raw();
+- spa_format_video_raw_parse(format, that->spa_video_format_,
+- &that->pw_type_->format_video);
++ spa_format_video_raw_parse(format, &that->spa_video_format_);
+
+- auto width = that->spa_video_format_->size.width;
+- auto height = that->spa_video_format_->size.height;
++ auto width = that->spa_video_format_.size.width;
++ auto height = that->spa_video_format_.size.height;
+ auto stride = SPA_ROUND_UP_N(width * kBytesPerPixel, 4);
+ auto size = height * stride;
+
++ that->desktop_size_ = DesktopSize(width, height);
++
+ uint8_t buffer[1024] = {};
+ auto builder = spa_pod_builder{buffer, sizeof(buffer)};
+
+ // Setup buffers and meta header for new format.
+- const struct spa_pod* params[2];
+- params[0] = reinterpret_cast<spa_pod*>(spa_pod_builder_object(
+- &builder,
+- // id to enumerate buffer requirements
+- that->pw_core_type_->param.idBuffers,
+- that->pw_core_type_->param_buffers.Buffers,
+- // Size: specified as integer (i) and set to specified size
+- ":", that->pw_core_type_->param_buffers.size, "i", size,
+- // Stride: specified as integer (i) and set to specified stride
+- ":", that->pw_core_type_->param_buffers.stride, "i", stride,
+- // Buffers: specifies how many buffers we want to deal with, set as
+- // integer (i) where preferred number is 8, then allowed number is defined
+- // as range (r) from min and max values and it is undecided (u) to allow
+- // negotiation
+- ":", that->pw_core_type_->param_buffers.buffers, "iru", 8,
+- SPA_POD_PROP_MIN_MAX(1, 32),
+- // Align: memory alignment of the buffer, set as integer (i) to specified
+- // value
+- ":", that->pw_core_type_->param_buffers.align, "i", 16));
+- params[1] = reinterpret_cast<spa_pod*>(spa_pod_builder_object(
+- &builder,
+- // id to enumerate supported metadata
+- that->pw_core_type_->param.idMeta, that->pw_core_type_->param_meta.Meta,
+- // Type: specified as id or enum (I)
+- ":", that->pw_core_type_->param_meta.type, "I",
+- that->pw_core_type_->meta.Header,
+- // Size: size of the metadata, specified as integer (i)
+- ":", that->pw_core_type_->param_meta.size, "i",
+- sizeof(struct spa_meta_header)));
+-
+- pw_stream_finish_format(that->pw_stream_, /*res=*/0, params, /*n_params=*/2);
++ const struct spa_pod* params[3];
++ params[0] = reinterpret_cast<spa_pod *>(spa_pod_builder_add_object(&builder,
++ SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers,
++ SPA_PARAM_BUFFERS_size, SPA_POD_Int(size),
++ SPA_PARAM_BUFFERS_stride, SPA_POD_Int(stride),
++ SPA_PARAM_BUFFERS_buffers, SPA_POD_CHOICE_RANGE_Int(8, 1, 32)));
++ params[1] = reinterpret_cast<spa_pod *>(spa_pod_builder_add_object(&builder,
++ SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta,
++ SPA_PARAM_META_type, SPA_POD_Id(SPA_META_Header),
++ SPA_PARAM_META_size, SPA_POD_Int(sizeof(struct spa_meta_header))));
++ params[2] = reinterpret_cast<spa_pod *>(spa_pod_builder_add_object(&builder,
++ SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta,
++ SPA_PARAM_META_type, SPA_POD_Id (SPA_META_VideoCrop),
++ SPA_PARAM_META_size, SPA_POD_Int (sizeof(struct spa_meta_region))));
++ pw_stream_update_params(that->pw_stream_, params, 3);
+ }
+
+ // static
+@@ -150,15 +136,25 @@ void BaseCapturerPipeWire::OnStreamProcess(void* data) {
+ BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
+ RTC_DCHECK(that);
+
+- pw_buffer* buf = nullptr;
++ struct pw_buffer *next_buffer;
++ struct pw_buffer *buffer = nullptr;
++
++ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
++ while (next_buffer) {
++ buffer = next_buffer;
++ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
+
+- if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) {
++ if (next_buffer)
++ pw_stream_queue_buffer (that->pw_stream_, buffer);
++ }
++
++ if (!buffer) {
+ return;
+ }
+
+- that->HandleBuffer(buf);
++ that->HandleBuffer(buffer);
+
+- pw_stream_queue_buffer(that->pw_stream_, buf);
++ pw_stream_queue_buffer(that->pw_stream_, buffer);
+ }
+
+ BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type)
+@@ -169,38 +165,22 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() {
+ pw_thread_loop_stop(pw_main_loop_);
+ }
+
+- if (pw_type_) {
+- delete pw_type_;
+- }
+-
+- if (spa_video_format_) {
+- delete spa_video_format_;
+- }
+-
+ if (pw_stream_) {
+ pw_stream_destroy(pw_stream_);
+ }
+
+- if (pw_remote_) {
+- pw_remote_destroy(pw_remote_);
++ if (pw_core_) {
++ pw_core_disconnect(pw_core_);
+ }
+
+- if (pw_core_) {
+- pw_core_destroy(pw_core_);
++ if (pw_context_) {
++ pw_context_destroy(pw_context_);
+ }
+
+ if (pw_main_loop_) {
+ pw_thread_loop_destroy(pw_main_loop_);
+ }
+
+- if (pw_loop_) {
+- pw_loop_destroy(pw_loop_);
+- }
+-
+- if (current_frame_) {
+- free(current_frame_);
+- }
+-
+ if (start_request_signal_id_) {
+ g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_);
+ }
+@@ -250,27 +230,35 @@ void BaseCapturerPipeWire::InitPortal() {
+ void BaseCapturerPipeWire::InitPipeWire() {
+ pw_init(/*argc=*/nullptr, /*argc=*/nullptr);
+
+- pw_loop_ = pw_loop_new(/*properties=*/nullptr);
+- pw_main_loop_ = pw_thread_loop_new(pw_loop_, "pipewire-main-loop");
+-
+- pw_core_ = pw_core_new(pw_loop_, /*properties=*/nullptr);
+- pw_core_type_ = pw_core_get_type(pw_core_);
+- pw_remote_ = pw_remote_new(pw_core_, nullptr, /*user_data_size=*/0);
++ pw_main_loop_ = pw_thread_loop_new("pipewire-main-loop", nullptr);
++ pw_context_ = pw_context_new(pw_thread_loop_get_loop(pw_main_loop_), nullptr, 0);
++ if (!pw_context_) {
++ RTC_LOG(LS_ERROR) << "Failed to create PipeWire context";
++ return;
++ }
+
+- InitPipeWireTypes();
++ pw_core_ = pw_context_connect(pw_context_, nullptr, 0);
++ if (!pw_core_) {
++ RTC_LOG(LS_ERROR) << "Failed to connect PipeWire context";
++ return;
++ }
+
+ // Initialize event handlers, remote end and stream-related.
+- pw_remote_events_.version = PW_VERSION_REMOTE_EVENTS;
+- pw_remote_events_.state_changed = &OnStateChanged;
++ pw_core_events_.version = PW_VERSION_CORE_EVENTS;
++ pw_core_events_.error = &OnCoreError;
+
+ pw_stream_events_.version = PW_VERSION_STREAM_EVENTS;
+ pw_stream_events_.state_changed = &OnStreamStateChanged;
+- pw_stream_events_.format_changed = &OnStreamFormatChanged;
++ pw_stream_events_.param_changed = &OnStreamParamChanged;
+ pw_stream_events_.process = &OnStreamProcess;
+
+- pw_remote_add_listener(pw_remote_, &spa_remote_listener_, &pw_remote_events_,
+- this);
+- pw_remote_connect_fd(pw_remote_, pw_fd_);
++ pw_core_add_listener(pw_core_, &spa_core_listener_, &pw_core_events_, this);
++
++ pw_stream_ = CreateReceivingStream();
++ if (!pw_stream_) {
++ RTC_LOG(LS_ERROR) << "Failed to create PipeWire stream";
++ return;
++ }
+
+ if (pw_thread_loop_start(pw_main_loop_) < 0) {
+ RTC_LOG(LS_ERROR) << "Failed to start main PipeWire loop";
+@@ -278,81 +266,132 @@ void BaseCapturerPipeWire::InitPipeWire() {
+ }
+ }
+
+-void BaseCapturerPipeWire::InitPipeWireTypes() {
+- spa_type_map* map = pw_core_type_->map;
+- pw_type_ = new PipeWireType();
+-
+- spa_type_media_type_map(map, &pw_type_->media_type);
+- spa_type_media_subtype_map(map, &pw_type_->media_subtype);
+- spa_type_format_video_map(map, &pw_type_->format_video);
+- spa_type_video_format_map(map, &pw_type_->video_format);
+-}
+-
+-void BaseCapturerPipeWire::CreateReceivingStream() {
++pw_stream* BaseCapturerPipeWire::CreateReceivingStream() {
+ spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1};
+- spa_rectangle pwScreenBounds =
+- spa_rectangle{static_cast<uint32_t>(desktop_size_.width()),
+- static_cast<uint32_t>(desktop_size_.height())};
++ spa_rectangle pwMaxScreenBounds = spa_rectangle{INT32_MAX, INT32_MAX};
+
+- spa_fraction pwFrameRateMin = spa_fraction{0, 1};
+- spa_fraction pwFrameRateMax = spa_fraction{60, 1};
++ auto stream = pw_stream_new(pw_core_, "webrtc-pipewire-stream", nullptr);
+
+- pw_properties* reuseProps = pw_properties_new("pipewire.client.reuse", "1",
+- /*end of varargs*/ nullptr);
+- pw_stream_ = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps);
++ if (!stream) {
++ RTC_LOG(LS_ERROR) << "Could not create receiving stream.";
++ return nullptr;
++ }
+
+ uint8_t buffer[1024] = {};
+- const spa_pod* params[1];
+- spa_pod_builder builder = spa_pod_builder{buffer, sizeof(buffer)};
+- params[0] = reinterpret_cast<spa_pod*>(spa_pod_builder_object(
+- &builder,
+- // id to enumerate formats
+- pw_core_type_->param.idEnumFormat, pw_core_type_->spa_format, "I",
+- pw_type_->media_type.video, "I", pw_type_->media_subtype.raw,
+- // Video format: specified as id or enum (I), preferred format is BGRx,
+- // then allowed formats are enumerated (e) and the format is undecided (u)
+- // to allow negotiation
+- ":", pw_type_->format_video.format, "Ieu", pw_type_->video_format.BGRx,
+- SPA_POD_PROP_ENUM(2, pw_type_->video_format.RGBx,
+- pw_type_->video_format.BGRx),
+- // Video size: specified as rectangle (R), preferred size is specified as
+- // first parameter, then allowed size is defined as range (r) from min and
+- // max values and the format is undecided (u) to allow negotiation
+- ":", pw_type_->format_video.size, "Rru", &pwScreenBounds, 2,
+- &pwMinScreenBounds, &pwScreenBounds,
+- // Frame rate: specified as fraction (F) and set to minimum frame rate
+- // value
+- ":", pw_type_->format_video.framerate, "F", &pwFrameRateMin,
+- // Max frame rate: specified as fraction (F), preferred frame rate is set
+- // to maximum value, then allowed frame rate is defined as range (r) from
+- // min and max values and it is undecided (u) to allow negotiation
+- ":", pw_type_->format_video.max_framerate, "Fru", &pwFrameRateMax, 2,
+- &pwFrameRateMin, &pwFrameRateMax));
+-
+- pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_,
+- this);
++ const spa_pod* params[2];
++ spa_pod_builder builder = SPA_POD_BUILDER_INIT(buffer, sizeof (buffer));
++
++ params[0] = reinterpret_cast<spa_pod *>(spa_pod_builder_add_object(&builder,
++ SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
++ SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video),
++ SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
++ SPA_FORMAT_VIDEO_format, SPA_POD_CHOICE_ENUM_Id(5, SPA_VIDEO_FORMAT_BGRx, SPA_VIDEO_FORMAT_RGBx, SPA_VIDEO_FORMAT_RGBA,
++ SPA_VIDEO_FORMAT_BGRx, SPA_VIDEO_FORMAT_BGRA),
++ SPA_FORMAT_VIDEO_size, SPA_POD_CHOICE_RANGE_Rectangle(&pwMinScreenBounds,
++ &pwMinScreenBounds,
++ &pwMaxScreenBounds),
++ 0));
++ pw_stream_add_listener(stream, &spa_stream_listener_, &pw_stream_events_, this);
++
+ pw_stream_flags flags = static_cast<pw_stream_flags>(
+- PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE |
+- PW_STREAM_FLAG_MAP_BUFFERS);
+- if (pw_stream_connect(pw_stream_, PW_DIRECTION_INPUT, /*port_path=*/nullptr,
+- flags, params,
+- /*n_params=*/1) != 0) {
++ PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE);
++
++ if (pw_stream_connect(stream, PW_DIRECTION_INPUT, pw_stream_node_id_, PW_STREAM_FLAG_AUTOCONNECT, params, 1) != 0) {
+ RTC_LOG(LS_ERROR) << "Could not connect receiving stream.";
+ portal_init_failed_ = true;
+- return;
+ }
++
++ return stream;
+ }
+
+ void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) {
++ struct spa_meta_region* video_crop;
+ spa_buffer* spaBuffer = buffer->buffer;
+- void* src = nullptr;
++ uint8_t *map = nullptr;
++ uint8_t* src = nullptr;
++ uint8_t* dst = nullptr;
++
++ if (spaBuffer->datas[0].chunk->size == 0) {
++ map = nullptr;
++ src = nullptr;
++ } else if (spaBuffer->datas[0].type == SPA_DATA_MemFd) {
++ map = static_cast<uint8_t*>(mmap(
++ nullptr, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset,
++ PROT_READ, MAP_PRIVATE, spaBuffer->datas[0].fd, 0));
++
++ if (map == MAP_FAILED) {
++ RTC_LOG(LS_ERROR) << "Failed to mmap the memory: " << std::strerror(errno);
++ return;
++ }
++
++ src = SPA_MEMBER(map, spaBuffer->datas[0].mapoffset, uint8_t);
++ } else if (spaBuffer->datas[0].type == SPA_DATA_DmaBuf) {
++ int fd;
++ fd = spaBuffer->datas[0].fd;
+
+- if (!(src = spaBuffer->datas[0].data)) {
++ map = static_cast<uint8_t*>(mmap(
++ nullptr, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset,
++ PROT_READ, MAP_PRIVATE, fd, 0));
++
++ if (map == MAP_FAILED) {
++ RTC_LOG(LS_ERROR) << "Failed to mmap the memory: " << std::strerror(errno);
++ return;
++ }
++
++ SyncDmaBuf(fd, DMA_BUF_SYNC_START);
++
++ src = SPA_MEMBER(map, spaBuffer->datas[0].mapoffset, uint8_t);
++ } else if (spaBuffer->datas[0].type == SPA_DATA_MemPtr) {
++ map = nullptr;
++ src = static_cast<uint8_t*>(spaBuffer->datas[0].data);
++ } else {
+ return;
+ }
+
+- uint32_t maxSize = spaBuffer->datas[0].maxsize;
+- int32_t srcStride = spaBuffer->datas[0].chunk->stride;
++ if (!src) {
++ return;
++ }
++
++ DesktopSize prev_crop_size = DesktopSize(0, 0);
++ if (video_crop_size_initialized_) {
++ prev_crop_size = video_crop_size_;
++ }
++
++ if ((video_crop = static_cast<struct spa_meta_region*>(
++ spa_buffer_find_meta_data(spaBuffer, SPA_META_VideoCrop, sizeof(*video_crop))))) {
++ RTC_DCHECK(video_crop->region.size.width <= desktop_size_.width() &&
++ video_crop->region.size.height <= desktop_size_.height());
++ if ((video_crop->region.size.width != desktop_size_.width() ||
++ video_crop->region.size.height != desktop_size_.height()) && video_crop->region.size.width && video_crop->region.size.height) {
++ video_crop_size_ = DesktopSize(video_crop->region.size.width, video_crop->region.size.height);
++ video_crop_size_initialized_ = true;
++ } else {
++ video_crop_size_initialized_ = false;
++ }
++ } else {
++ video_crop_size_initialized_ = false;
++ }
++
++ size_t frame_size;
++ if (video_crop_size_initialized_) {
++ frame_size =
++ video_crop_size_.width() * video_crop_size_.height() * kBytesPerPixel;
++ } else {
++ frame_size =
++ desktop_size_.width() * desktop_size_.height() * kBytesPerPixel;
++ }
++
++ if (!current_frame_ ||
++ (video_crop_size_initialized_ && !video_crop_size_.equals(prev_crop_size))) {
++ current_frame_ = std::make_unique<uint8_t[]>(frame_size);
++ }
++ RTC_DCHECK(current_frame_ != nullptr);
++
++ const int32_t dstStride = video_crop_size_initialized_
++ ? video_crop_size_.width() * kBytesPerPixel
++ : desktop_size_.width() * kBytesPerPixel;
++ const int32_t srcStride = spaBuffer->datas[0].chunk->stride;
++
+ if (srcStride != (desktop_size_.width() * kBytesPerPixel)) {
+ RTC_LOG(LS_ERROR) << "Got buffer with stride different from screen stride: "
+ << srcStride
+@@ -361,21 +400,40 @@ void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) {
+ return;
+ }
+
+- if (!current_frame_) {
+- current_frame_ = static_cast<uint8_t*>(malloc(maxSize));
++ dst = current_frame_.get();
++
++ // Adjust source content based on crop video position
++ if (video_crop_size_initialized_ &&
++ (video_crop->region.position.y + video_crop_size_.height() <= desktop_size_.height())) {
++ for (int i = 0; i < video_crop->region.position.y; ++i) {
++ src += srcStride;
++ }
++ }
++ const int xOffset =
++ video_crop_size_initialized_ && (video_crop->region.position.x + video_crop_size_.width() <=
++ desktop_size_.width())
++ ? video_crop->region.position.x * kBytesPerPixel
++ : 0;
++ const int height = video_crop_size_initialized_ ? video_crop_size_.height() : desktop_size_.height();
++ for (int i = 0; i < height; ++i) {
++ // Adjust source content based on crop video position if needed
++ src += xOffset;
++ std::memcpy(dst, src, dstStride);
++ // If both sides decided to go with the RGBx format we need to convert it to
++ // BGRx to match color format expected by WebRTC.
++ if (spa_video_format_.format == SPA_VIDEO_FORMAT_RGBx ||
++ spa_video_format_.format == SPA_VIDEO_FORMAT_RGBA) {
++ ConvertRGBxToBGRx(dst, dstStride);
++ }
++ src += srcStride - xOffset;
++ dst += dstStride;
+ }
+- RTC_DCHECK(current_frame_ != nullptr);
+
+- // If both sides decided to go with the RGBx format we need to convert it to
+- // BGRx to match color format expected by WebRTC.
+- if (spa_video_format_->format == pw_type_->video_format.RGBx) {
+- uint8_t* tempFrame = static_cast<uint8_t*>(malloc(maxSize));
+- std::memcpy(tempFrame, src, maxSize);
+- ConvertRGBxToBGRx(tempFrame, maxSize);
+- std::memcpy(current_frame_, tempFrame, maxSize);
+- free(tempFrame);
+- } else {
+- std::memcpy(current_frame_, src, maxSize);
++ if (map) {
++ if (spaBuffer->datas[0].type == SPA_DATA_DmaBuf) {
++ SyncDmaBuf(spaBuffer->datas[0].fd, DMA_BUF_SYNC_END);
++ }
++ munmap(map, spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset);
+ }
+ }
+
+@@ -725,10 +783,7 @@ void BaseCapturerPipeWire::OnStartRequestResponseSignal(
+ g_variant_get(variant, "(u@a{sv})", &stream_id, &options);
+ RTC_DCHECK(options != nullptr);
+
+- g_variant_lookup(options, "size", "(ii)", &width, &height);
+-
+- that->desktop_size_.set(width, height);
+-
++ that->pw_stream_node_id_ = stream_id;
+ g_variant_unref(options);
+ g_variant_unref(variant);
+ }
+@@ -813,10 +868,15 @@ void BaseCapturerPipeWire::CaptureFrame() {
+ return;
+ }
+
+- std::unique_ptr<DesktopFrame> result(new BasicDesktopFrame(desktop_size_));
++ DesktopSize frame_size = desktop_size_;
++ if (video_crop_size_initialized_) {
++ frame_size = video_crop_size_;
++ }
++
++ std::unique_ptr<DesktopFrame> result(new BasicDesktopFrame(frame_size));
+ result->CopyPixelsFrom(
+- current_frame_, (desktop_size_.width() * kBytesPerPixel),
+- DesktopRect::MakeWH(desktop_size_.width(), desktop_size_.height()));
++ current_frame_.get(), (frame_size.width() * kBytesPerPixel),
++ DesktopRect::MakeWH(frame_size.width(), frame_size.height()));
+ if (!result) {
+ callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
+ return;
+@@ -837,4 +897,22 @@ bool BaseCapturerPipeWire::SelectSource(SourceId id) {
+ return true;
+ }
+
++// static
++std::unique_ptr<DesktopCapturer>
++BaseCapturerPipeWire::CreateRawScreenCapturer(
++ const DesktopCaptureOptions& options) {
++ std::unique_ptr<BaseCapturerPipeWire> capturer =
++ std::make_unique<BaseCapturerPipeWire>(BaseCapturerPipeWire::CaptureSourceType::kAny);
++ return std::move(capturer);}
++
++// static
++std::unique_ptr<DesktopCapturer>
++BaseCapturerPipeWire::CreateRawWindowCapturer(
++ const DesktopCaptureOptions& options) {
++
++ std::unique_ptr<BaseCapturerPipeWire> capturer =
++ std::make_unique<BaseCapturerPipeWire>(BaseCapturerPipeWire::CaptureSourceType::kAny);
++ return std::move(capturer);
++}
++
+ } // namespace webrtc
+diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
+index 56b101acbaa6..de54157d1a2a 100644
+--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
++++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h
+@@ -22,17 +22,13 @@
+
+ namespace webrtc {
+
+-class PipeWireType {
+- public:
+- spa_type_media_type media_type;
+- spa_type_media_subtype media_subtype;
+- spa_type_format_video format_video;
+- spa_type_video_format video_format;
+-};
+-
+ class BaseCapturerPipeWire : public DesktopCapturer {
+ public:
+- enum CaptureSourceType { Screen = 1, Window };
++ enum CaptureSourceType : uint32_t {
++ kScreen = 0b01,
++ kWindow = 0b10,
++ kAny = 0b11
++ };
+
+ explicit BaseCapturerPipeWire(CaptureSourceType source_type);
+ ~BaseCapturerPipeWire() override;
+@@ -43,28 +39,32 @@ class BaseCapturerPipeWire : public DesktopCapturer {
+ bool GetSourceList(SourceList* sources) override;
+ bool SelectSource(SourceId id) override;
+
++ static std::unique_ptr<DesktopCapturer> CreateRawScreenCapturer(
++ const DesktopCaptureOptions& options);
++
++ static std::unique_ptr<DesktopCapturer> CreateRawWindowCapturer(
++ const DesktopCaptureOptions& options);
++
+ private:
+ // PipeWire types -->
++ pw_context* pw_context_ = nullptr;
+ pw_core* pw_core_ = nullptr;
+- pw_type* pw_core_type_ = nullptr;
+ pw_stream* pw_stream_ = nullptr;
+- pw_remote* pw_remote_ = nullptr;
+- pw_loop* pw_loop_ = nullptr;
+ pw_thread_loop* pw_main_loop_ = nullptr;
+- PipeWireType* pw_type_ = nullptr;
+
++ spa_hook spa_core_listener_ = {};
+ spa_hook spa_stream_listener_ = {};
+- spa_hook spa_remote_listener_ = {};
+
++ pw_core_events pw_core_events_ = {};
+ pw_stream_events pw_stream_events_ = {};
+- pw_remote_events pw_remote_events_ = {};
+
+- spa_video_info_raw* spa_video_format_ = nullptr;
++ struct spa_video_info_raw spa_video_format_;
+
++ guint32 pw_stream_node_id_ = 0;
+ gint32 pw_fd_ = -1;
+
+ CaptureSourceType capture_source_type_ =
+- BaseCapturerPipeWire::CaptureSourceType::Screen;
++ BaseCapturerPipeWire::CaptureSourceType::kAny;
+
+ // <-- end of PipeWire types
+
+@@ -78,33 +78,37 @@ class BaseCapturerPipeWire : public DesktopCapturer {
+ guint sources_request_signal_id_ = 0;
+ guint start_request_signal_id_ = 0;
+
++ bool video_crop_size_initialized_ = false;
++ DesktopSize video_crop_size_;;
+ DesktopSize desktop_size_ = {};
+ DesktopCaptureOptions options_ = {};
+
+- uint8_t* current_frame_ = nullptr;
++ std::unique_ptr<uint8_t[]> current_frame_;
+ Callback* callback_ = nullptr;
+
+ bool portal_init_failed_ = false;
+
+ void InitPortal();
+ void InitPipeWire();
+- void InitPipeWireTypes();
+
+- void CreateReceivingStream();
++ pw_stream* CreateReceivingStream();
+ void HandleBuffer(pw_buffer* buffer);
+
+ void ConvertRGBxToBGRx(uint8_t* frame, uint32_t size);
+
+- static void OnStateChanged(void* data,
+- pw_remote_state old_state,
+- pw_remote_state state,
+- const char* error);
++ static void SyncDmaBuf(int fd, uint64_t start_or_end);
++ static void OnCoreError(void *data,
++ uint32_t id,
++ int seq,
++ int res,
++ const char *message);
++ static void OnStreamParamChanged(void *data,
++ uint32_t id,
++ const struct spa_pod *format);
+ static void OnStreamStateChanged(void* data,
+ pw_stream_state old_state,
+ pw_stream_state state,
+ const char* error_message);
+-
+- static void OnStreamFormatChanged(void* data, const struct spa_pod* format);
+ static void OnStreamProcess(void* data);
+ static void OnNewBuffer(void* data, uint32_t id);
+
+diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
+index 26956fc67dc8..3813d697bb38 100644
+--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
++++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc
+@@ -15,7 +15,7 @@
+ namespace webrtc {
+
+ ScreenCapturerPipeWire::ScreenCapturerPipeWire()
+- : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Screen) {}
++ : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::kScreen) {}
+ ScreenCapturerPipeWire::~ScreenCapturerPipeWire() {}
+
+ // static
+diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
+index 35436475cb4d..c43a1f1a0c4e 100644
+--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
++++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc
+@@ -15,7 +15,7 @@
+ namespace webrtc {
+
+ WindowCapturerPipeWire::WindowCapturerPipeWire()
+- : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Window) {}
++ : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::kWindow) {}
+ WindowCapturerPipeWire::~WindowCapturerPipeWire() {}
+
+ // static
+diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
+index cf8a9dd0e0db..d27fab8d28d9 100644
+--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
++++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer_linux.cc
+@@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer(
+ const DesktopCaptureOptions& options) {
+ #if defined(WEBRTC_USE_PIPEWIRE)
+ if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) {
+- return ScreenCapturerPipeWire::CreateRawScreenCapturer(options);
++ return BaseCapturerPipeWire::CreateRawScreenCapturer(options);
+ }
+ #endif // defined(WEBRTC_USE_PIPEWIRE)
+
+diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
+index 82359e50c2db..bb9724cf7cc2 100644
+--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
++++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/window_capturer_linux.cc
+@@ -26,7 +26,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer(
+ const DesktopCaptureOptions& options) {
+ #if defined(WEBRTC_USE_PIPEWIRE)
+ if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) {
+- return WindowCapturerPipeWire::CreateRawWindowCapturer(options);
++ return BaseCapturerPipeWire::CreateRawWindowCapturer(options);
+ }
+ #endif // defined(WEBRTC_USE_PIPEWIRE)
+
diff --git a/firefox-vaapi-extra-frames.patch b/firefox-vaapi-extra-frames.patch
new file mode 100644
index 0000000..c2ed7a2
--- /dev/null
+++ b/firefox-vaapi-extra-frames.patch
@@ -0,0 +1,14 @@
+diff -up firefox-76.0.1/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp.old firefox-76.0.1/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp
+--- firefox-76.0.1/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp.old 2020-05-13 14:28:26.556800474 +0200
++++ firefox-76.0.1/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp 2020-05-13 14:28:31.562768959 +0200
+@@ -43,7 +43,7 @@ typedef int VAStatus;
+ #endif
+
+ // Use some extra HW frames for potential rendering lags.
+-#define EXTRA_HW_FRAMES 6
++#define EXTRA_HW_FRAMES 20
+
+ typedef mozilla::layers::Image Image;
+ typedef mozilla::layers::PlanarYCbCrImage PlanarYCbCrImage;
+diff -up firefox-76.0.1/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-76.0.1/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
+diff -up firefox-76.0.1/media/webrtc/trunk/Makefile.old firefox-76.0.1/media/webrtc/trunk/Makefile
diff --git a/icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch b/icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch
deleted file mode 100644
index 86d0c08..0000000
--- a/icecat-68.4.0-mozilla-1526653_arm_disable_wasm.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp
-index 636537f847862ef693dd6582e2783de4e3d403c5..383c380f04ceb6a111dbfe9a046e3454a56e31b4 100644
---- a/js/src/wasm/WasmSignalHandlers.cpp
-+++ b/js/src/wasm/WasmSignalHandlers.cpp
-@@ -248,7 +248,16 @@ using mozilla::DebugOnly;
- #endif
-
- #ifdef WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
--# include <sys/user.h>
-+struct user_vfp {
-+ unsigned long long fpregs[32];
-+ unsigned long fpscr;
-+};
-+
-+struct user_vfp_exc {
-+ unsigned long fpexc;
-+ unsigned long fpinst;
-+ unsigned long fpinst2;
-+};
- #endif
-
- #if defined(ANDROID)
-
diff --git a/icecat-68.4.0-build-icu-big-endian.patch b/icecat-78.0-build-icu-big-endian.patch
similarity index 100%
rename from icecat-68.4.0-build-icu-big-endian.patch
rename to icecat-78.0-build-icu-big-endian.patch
diff --git a/icecat-lang_download.sh b/icecat-lang_download.sh
index 98e58f8..cdd7849 100755
--- a/icecat-lang_download.sh
+++ b/icecat-lang_download.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-VERSION=68.9.0
+VERSION=78.0
URL=https://ftp.mozilla.org/pub/firefox/releases/${VERSION}esr/linux-x86_...
for u in $URL; do
diff --git a/icecat-mozconfig-common b/icecat-mozconfig-common
index ceab223..9a8f1ff 100644
--- a/icecat-mozconfig-common
+++ b/icecat-mozconfig-common
@@ -2,7 +2,7 @@
export BUILD_OFFICIAL=1
export MOZILLA_OFFICIAL=1
-export MOZ_TELEMETRY_REPORTING=1
+export MOZ_TELEMETRY_REPORTING=
mk_add_options BUILD_OFFICIAL=1
mk_add_options MOZILLA_OFFICIAL=1
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir
@@ -10,9 +10,9 @@ mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir
ac_add_options --prefix="$PREFIX"
ac_add_options --libdir="$LIBDIR"
ac_add_options --enable-necko-wifi
-ac_add_options --enable-startup-notification
ac_add_options --disable-updater
ac_add_options --enable-chrome-format=omni
ac_add_options --enable-release
# Workaround for mozbz#1341234
ac_add_options BINDGEN_CFLAGS="$(pkg-config nspr pixman-1 --cflags)"
+ac_add_options --allow-addon-sideload
diff --git a/icecat.spec b/icecat.spec
index 36d5eac..8e0be4e 100644
--- a/icecat.spec
+++ b/icecat.spec
@@ -1,5 +1,5 @@
# Set to true if it's going to be submitted as update
-%global release_build 1
+%global release_build 0
# Set to true if it's going to be submitted as release candidate
%global release_candidate 0
@@ -43,17 +43,23 @@ ExcludeArch: %{arm} s390x
%endif
# Use system libicu?
+%if 0%{?fedora} > 32
%global system_libicu 1
+%else
+%global system_libicu 0
+%endif
# Use system nspr/nss?
-%global system_nss 1
+%global system_nss 0
%if 0%{?system_nss}
-%global nspr_version 4.21
+%global nspr_version 4.25.0
%global nspr_build_version %{nspr_version}
-%global nss_version 3.50
+%global nss_version 3.53.0
%global nss_build_version %{nss_version}
%endif
+%global nspr_version 4.25.0
+%global nspr_build_version %{nspr_version}
# Audio backends
%bcond_without pulseaudio
@@ -79,12 +85,12 @@ ExcludeArch: %{arm} s390x
# Set new source-code build version
# This tag indicates a new rebuild for Fedora
-%global redhat_ver rh2
+%global redhat_ver rh1
# Set extra version tag
# This tag comes from Mozilla's releases
%if 0%{?release_candidate}
-%global extra_ver .rc1
+%global extra_ver .rc3
%else
%global extra_ver %{nil}
%endif
@@ -94,7 +100,7 @@ ExcludeArch: %{arm} s390x
%endif
Name: icecat
-Version: 68.9.0
+Version: 78.0
Release: 1%{extra_ver}.%{redhat_ver}%{?pre_tag}%{?dist}
Summary: GNU version of Firefox browser
@@ -151,40 +157,37 @@ Patch7: %{name}-fix_jar.patch
# Fix files list for installer
Patch8: %{name}-fix_installer.patch
-Patch26: %{name}-68.4.0-build-icu-big-endian.patch
+Patch26: %{name}-78.0-build-icu-big-endian.patch
Patch40: build-aarch64-skia.patch
Patch41: build-disable-elfhack.patch
Patch44: build-arm-libopus.patch
-Patch45: %{name}-68.4.0-mozilla-1526653_arm_disable_wasm.patch
# Fedora specific patches
Patch219: rhbz-1173156.patch
+Patch220: firefox-nss-version.patch
# ARM run-time patch
Patch226: rhbz-1354671.patch
# Upstream patches
+Patch402: mozilla-1196777.patch
+Patch412: mozilla-1337988.patch
Patch414: Bug-1238661_fix-mozillaSignalTrampoline-to-work-.patch
-
-# Patches for compatibility with Rust-1.39
-Patch419: mozilla-1564873.patch
-#
+Patch422: mozilla-1580174-webrtc-popup.patch
# Fix crash on ppc64le (mozilla#1512162)
Patch423: mozilla-1512162.patch
-Patch424: mozilla-1566876-webrtc-ind.patch
-Patch425: mozilla-1568569.patch
# Wayland specific upstream patches
Patch565: firefox-pipewire.patch
-Patch575: mozilla-1548475.patch
-Patch576: mozilla-1562827.patch
-Patch578: mozilla-1567434-1.patch
-Patch579: mozilla-1567434-2.patch
-Patch580: mozilla-1573813.patch
#
+#VA-API patches
+Patch584: firefox-disable-ffvpx-with-vapi.patch
+Patch585: firefox-vaapi-extra-frames.patch
+Patch589: mozilla-1634213.patch
+
BuildRequires: alsa-lib-devel
BuildRequires: autoconf213
BuildRequires: bzip2-devel
@@ -235,11 +238,12 @@ BuildRequires: mesa-libGL-devel
BuildRequires: nodejs
BuildRequires: nasm >= 1.13
BuildRequires: strace
+
%if 0%{?system_nss}
-BuildRequires: pkgconfig(nspr) >= %{nspr_version}
BuildRequires: pkgconfig(nss) >= %{nss_version}
BuildRequires: nss-static >= %{nss_version}
%endif
+BuildRequires: pkgconfig(nspr) >= %{nspr_version}
BuildRequires: openjpeg-devel
BuildRequires: pango-devel
@@ -277,9 +281,10 @@ Requires: mozilla-filesystem
Requires: p11-kit-trust
%if 0%{?system_nss}
-Requires: nspr >= %{nspr_build_version}
Requires: nss >= %{nss_build_version}
%endif
+Requires: nspr >= %{nspr_build_version}
+
Requires: fedora-bookmarks
Suggests: mozilla-ublock-origin
@@ -327,7 +332,7 @@ to run GNU IceCat native on Wayland.
find . -type f -name "*.h" -exec chmod 0644 '{}' \;
find . -type f -name "*.cpp" -exec chmod 0644 '{}' \;
find . -type f -name "*.cc" -exec chmod 0644 '{}' \;
-find . -type f -name "*.c" -exec chmod 0644 '{}' \;
+find . -type f -name "*.c" -exec chmod 0644 '{}' \;
# Copy license files
tar -xf %{SOURCE5}
@@ -341,45 +346,39 @@ tar -xf %{SOURCE5}
%patch7 -p0 -b .fix_jar
%patch8 -p0 -b .fix_installer
-%ifarch aarch64
-%patch40 -p1 -b .aarch64-skia
-%endif
%if 0%{?disable_elfhack}
%patch41 -p1 -b .disable-elfhack
%endif
# Fedora patches
%patch219 -p1 -b .rhbz-1173156
+%patch220 -p1 -b .nss-version
# ARM run-time patch
%ifarch aarch64
+%patch40 -p1 -b .aarch64-skia
%patch226 -p1 -b .1354671
%endif
%ifarch %{arm}
%patch414 -p1 -b .Bug-1238661---fix-mozillaSignalTrampoline-to-work
%patch44 -p1 -b .build-arm-libopus
-%patch45 -p1 -b .mozilla-1526653_arm
%endif
# Patch for big endian platforms only
%if 0%{?big_endian}
-%patch26 -p1 -b .icu
+#%%patch26 -p1 -b .icu
%endif
-%patch419 -p1 -b .mozilla-1564873
-
+%patch402 -p1 -b .1196777
%patch423 -p1 -b .mozilla-1596503
-%patch424 -p1 -b .mozilla-1566876-webrtc-ind
-%patch425 -p1 -b .mozilla-1568569
# Wayland specific upstream patches
%patch565 -p1 -b .firefox-pipewire
-%patch575 -p1 -b .mozilla-1548475
-%patch576 -p1 -b .mozilla-1562827
-%patch578 -p1 -b .mozilla-1567434-1
-%patch579 -p1 -b .mozilla-1567434-2
-%patch580 -p1 -b .mozilla-1573813
+
+%patch584 -p1 -b .firefox-disable-ffvpx-with-vapi
+%patch585 -p1 -b .firefox-vaapi-extra-frames
+%patch589 -p1 -b .mozilla-1634213
# Remove default configuration and copy the customized one
rm -f .mozconfig
@@ -415,6 +414,7 @@ echo "ac_add_options --with-system-nss" >> .mozconfig
echo "ac_add_options --without-system-nspr" >> .mozconfig
echo "ac_add_options --without-system-nss" >> .mozconfig
%endif
+
%if 0%{?system_libicu}
echo "ac_add_options --with-system-icu" >> .mozconfig
%else
@@ -422,40 +422,22 @@ echo "ac_add_options --without-system-icu" >> .mozconfig
%endif
echo "ac_add_options --disable-system-cairo" >> .mozconfig
echo "ac_add_options --enable-system-pixman" >> .mozconfig
-%if 0%{?system_sqlite}
-echo "ac_add_options --enable-system-sqlite" >> .mozconfig
-%else
-echo "ac_add_options --disable-system-sqlite" >> .mozconfig
-%endif
-echo "ac_add_options --with-system-zlib" >> .mozconfig
-echo "ac_add_options --with-system-bz2" >> .mozconfig
echo "ac_add_options --with-system-libevent=%{_prefix}" >> .mozconfig
-echo "ac_add_options --enable-llvm-hacks" >> .mozconfig
%if %{?with_vpx}
echo "ac_add_options --with-system-libvpx" >> .mozconfig
%else
echo "ac_add_options --without-system-libvpx" >> .mozconfig
%endif
-echo "ac_add_options --disable-libjpeg-turbo" >> .mozconfig
echo "ac_add_options --with-system-jpeg" >> .mozconfig
-echo "ac_add_options --disable-crashreporter" >> .mozconfig
-%ifnarch %{power64} aarch64 s390x %{arm}
-echo "ac_add_options --disable-eme" >> .mozconfig
-%endif
# This option works on these architectures only
-%ifarch %{ix86} x86_64 %{arm}
+%ifarch %{arm}
echo "ac_add_options --disable-elf-hack" >> .mozconfig
%endif
-%ifarch aarch64 ppc64 s390x %{arm} %{ix86}
-#echo "ac_add_options --disable-skia" >> .mozconfig
-%endif
-
%if 0%{?debug_build}
echo "ac_add_options --enable-debug" >> .mozconfig
echo "ac_add_options --disable-optimize" >> .mozconfig
-echo "ac_add_options --enable-dtrace" >> .mozconfig
%else
%global optimize_flags "none"
%ifnarch s390x
@@ -480,10 +462,8 @@ echo "ac_add_options --disable-debug" >> .mozconfig
%endif
%ifarch %{arm}
echo "ac_add_options --enable-linker=gold" >> .mozconfig
-# mzbz #1436511
-echo "ac_add_options --disable-av1" >> .mozconfig
%endif
-
+echo "ac_add_options --enable-av1" >> .mozconfig
echo "ac_add_options --disable-strip" >> .mozconfig
echo "ac_add_options --disable-install-strip" >> .mozconfig
echo "ac_add_options --disable-tests" >> .mozconfig
@@ -493,14 +473,7 @@ echo "ac_add_options --disable-tests" >> .mozconfig
echo "ac_add_options --with-l10n-base=$PWD/l10n" >> .mozconfig
%endif
-echo "ac_add_options --disable-rust-tests" >> .mozconfig
-echo "ac_add_options --disable-gtest-in-build" >> .mozconfig
-
-%if 0%{?hardened_build}
-echo "ac_add_options --enable-hardening" >> .mozconfig
-%endif
-
-%ifarch s390 s390x
+%ifarch s390x
echo "ac_add_options --disable-ion" >> .mozconfig
%endif
@@ -508,6 +481,10 @@ echo 'export NODEJS="%{_buildrootdir}/bin/node-stdout-nonblocking-wrapper"' >> .
# Remove executable bit to make brp-mangle-shebangs happy.
chmod -x third_party/rust/itertools/src/lib.rs
+chmod a-x third_party/rust/gfx-backend-vulkan/src/*.rs
+chmod a-x third_party/rust/gfx-hal/src/*.rs
+chmod a-x third_party/rust/ash/src/extensions/ext/*.rs
+chmod a-x third_party/rust/ash/src/extensions/khr/*.rs
# Remove unrecognized files
find extensions/gnu -name cose.manifest -delete
@@ -558,7 +535,9 @@ MOZ_OPT_FLAGS=$(echo "%{optflags}" | %{__sed} -e 's/-Wall//')
MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-Werror=format-security//')
# Use hardened build?
+%if %{?hardened_build}
MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fPIC -Wl,-z,relro -Wl,-z,now"
+%endif
%if %{?debug_build}
MOZ_OPT_FLAGS=$(echo "$MOZ_OPT_FLAGS" | %{__sed} -e 's/-O2//')
@@ -606,9 +585,14 @@ export RANLIB="gcc-ranlib"
%endif
MOZ_SMP_FLAGS=-j1
-# On x86 architectures, Mozilla can build up to 4 jobs at once in parallel,
+# On x86_64 architectures, Mozilla can build up to 4 jobs at once in parallel,
# however builds tend to fail on other arches when building in parallel.
-%ifarch x86_64 %{power64} aarch64
+%ifarch %{ix86}
+[ -z "$RPM_BUILD_NCPUS" ] && \
+ RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"
+[ "$RPM_BUILD_NCPUS" -ge 2 ] && MOZ_SMP_FLAGS=-j2
+%endif
+%ifarch x86_64 ppc %{power64} aarch64
[ -z "$RPM_BUILD_NCPUS" ] && \
RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"
[ "$RPM_BUILD_NCPUS" -ge 2 ] && MOZ_SMP_FLAGS=-j2
@@ -616,9 +600,8 @@ MOZ_SMP_FLAGS=-j1
[ "$RPM_BUILD_NCPUS" -ge 8 ] && MOZ_SMP_FLAGS=-j8
%endif
-export MOZ_MAKE_FLAGS="$MOZ_SMP_FLAGS"
-export MOZ_OPTIMIZE_FLAGS=" -freorder-blocks -fno-reorder-functions"
-export STRIP=/bin/true
+echo "export MOZ_MAKE_FLAGS=\"$MOZ_SMP_FLAGS\"" >> .mozconfig
+echo "export STRIP=/bin/true" >> .mozconfig
MOZ_RUN_GTEST=0 ./mach -v build
%install
@@ -790,13 +773,10 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%{icecatappdir}/plugin-container
%{icecatappdir}/pingsender
%{icecatappdir}/gmp-clearkey/
-%{icecatappdir}/chrome.manifest
%{icecatappdir}/gtk2/*.so
-%if !%{?system_nss}
-%{icecatappdir}/libfreeblpriv3.chk
-%{icecatappdir}/libnssdbm3.chk
-%{icecatappdir}/libsoftokn3.chk
-%endif
+%{icecatappdir}/Throbber-small.gif
+%{icecatappdir}/crashreporter
+%{icecatappdir}/minidump-analyzer
%if 0%{?build_langpacks}
%dir %{langpackdir}
%endif
@@ -812,6 +792,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%endif
%changelog
+* Wed Jul 01 2020 Antonio Trande <sagitter(a)fedoraproject.org> - 78.0-1.rh1.test
+- Mozilla Release 78.0ESR
+
* Tue Jun 02 2020 Antonio Trande <sagitter(a)fedoraproject.org> - 68.9.0-1.rh2
- Mozilla release 68.9.0ESR
diff --git a/mozilla-1196777.patch b/mozilla-1196777.patch
new file mode 100644
index 0000000..ed3ab16
--- /dev/null
+++ b/mozilla-1196777.patch
@@ -0,0 +1,13 @@
+diff -up firefox-68.0/widget/gtk/nsWindow.cpp.1196777 firefox-68.0/widget/gtk/nsWindow.cpp
+--- firefox-68.0/widget/gtk/nsWindow.cpp.1196777 2019-07-02 11:47:06.864726826 +0200
++++ firefox-68.0/widget/gtk/nsWindow.cpp 2019-07-02 11:48:09.896544339 +0200
+@@ -156,7 +156,8 @@ const gint kEvents =
+ #if GTK_CHECK_VERSION(3, 4, 0)
+ GDK_SMOOTH_SCROLL_MASK | GDK_TOUCH_MASK |
+ #endif
+- GDK_SCROLL_MASK | GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK;
++ GDK_SCROLL_MASK | GDK_POINTER_MOTION_MASK | GDK_PROPERTY_CHANGE_MASK |
++ GDK_FOCUS_CHANGE_MASK;
+
+ #if !GTK_CHECK_VERSION(3, 22, 0)
+ typedef enum {
diff --git a/mozilla-1337988.patch b/mozilla-1337988.patch
new file mode 100644
index 0000000..8c40445
--- /dev/null
+++ b/mozilla-1337988.patch
@@ -0,0 +1,496 @@
+diff -up firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp.1337988 firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp
+--- firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp.1337988 2017-09-14 22:15:56.000000000 +0200
++++ firefox-56.0/dom/plugins/base/nsJSNPRuntime.cpp 2017-09-25 10:34:11.205611698 +0200
+@@ -1719,7 +1719,7 @@ NPObjWrapper_ObjectMoved(JSObject *obj,
+ auto entry =
+ static_cast<NPObjWrapperHashEntry*>(sNPObjWrappers->Search(npobj));
+ MOZ_ASSERT(entry && entry->mJSObj);
+- MOZ_ASSERT(entry->mJSObj == old);
++ MOZ_ASSERT(entry->mJSObj.unbarrieredGetPtr() == old);
+ entry->mJSObj = obj;
+ }
+
+diff -up firefox-56.0/js/ipc/JavaScriptShared.cpp.1337988 firefox-56.0/js/ipc/JavaScriptShared.cpp
+--- firefox-56.0/js/ipc/JavaScriptShared.cpp.1337988 2017-07-31 18:20:47.000000000 +0200
++++ firefox-56.0/js/ipc/JavaScriptShared.cpp 2017-09-25 10:34:11.205611698 +0200
+@@ -101,7 +101,7 @@ IdToObjectMap::has(const ObjectId& id, c
+ auto p = table_.lookup(id);
+ if (!p)
+ return false;
+- return p->value() == obj;
++ return p->value().unbarrieredGet() == obj;
+ }
+ #endif
+
+diff -up firefox-56.0/js/public/RootingAPI.h.1337988 firefox-56.0/js/public/RootingAPI.h
+--- firefox-56.0/js/public/RootingAPI.h.1337988 2017-07-31 18:20:47.000000000 +0200
++++ firefox-56.0/js/public/RootingAPI.h 2017-09-25 10:34:11.206611695 +0200
+@@ -148,6 +148,10 @@ template<typename T>
+ struct PersistentRootedMarker;
+ } /* namespace gc */
+
++#define DECLARE_POINTER_COMPARISON_OPS(T) \
++ bool operator==(const T& other) const { return get() == other; } \
++ bool operator!=(const T& other) const { return get() != other; }
++
+ // Important: Return a reference so passing a Rooted<T>, etc. to
+ // something that takes a |const T&| is not a GC hazard.
+ #define DECLARE_POINTER_CONSTREF_OPS(T) \
+@@ -237,8 +241,6 @@ class Heap : public js::HeapBase<T, Heap
+ static_assert(js::IsHeapConstructibleType<T>::value,
+ "Type T must be a public GC pointer type");
+ public:
+- using ElementType = T;
+-
+ Heap() {
+ static_assert(sizeof(T) == sizeof(Heap<T>),
+ "Heap<T> must be binary compatible with T.");
+@@ -385,8 +387,6 @@ template <typename T>
+ class TenuredHeap : public js::HeapBase<T, TenuredHeap<T>>
+ {
+ public:
+- using ElementType = T;
+-
+ TenuredHeap() : bits(0) {
+ static_assert(sizeof(T) == sizeof(TenuredHeap<T>),
+ "TenuredHeap<T> must be binary compatible with T.");
+@@ -394,6 +394,9 @@ class TenuredHeap : public js::HeapBase<
+ explicit TenuredHeap(T p) : bits(0) { setPtr(p); }
+ explicit TenuredHeap(const TenuredHeap<T>& p) : bits(0) { setPtr(p.getPtr()); }
+
++ bool operator==(const TenuredHeap<T>& other) { return bits == other.bits; }
++ bool operator!=(const TenuredHeap<T>& other) { return bits != other.bits; }
++
+ void setPtr(T newPtr) {
+ MOZ_ASSERT((reinterpret_cast<uintptr_t>(newPtr) & flagsMask) == 0);
+ if (newPtr)
+@@ -470,8 +473,6 @@ class MOZ_NONHEAP_CLASS Handle : public
+ friend class JS::MutableHandle<T>;
+
+ public:
+- using ElementType = T;
+-
+ /* Creates a handle from a handle of a type convertible to T. */
+ template <typename S>
+ MOZ_IMPLICIT Handle(Handle<S> handle,
+@@ -533,6 +534,7 @@ class MOZ_NONHEAP_CLASS Handle : public
+ MOZ_IMPLICIT Handle(MutableHandle<S>& root,
+ typename mozilla::EnableIf<mozilla::IsConvertible<S, T>::value, int>::Type dummy = 0);
+
++ DECLARE_POINTER_COMPARISON_OPS(T);
+ DECLARE_POINTER_CONSTREF_OPS(T);
+ DECLARE_NONPOINTER_ACCESSOR_METHODS(*ptr);
+
+@@ -559,8 +561,6 @@ template <typename T>
+ class MOZ_STACK_CLASS MutableHandle : public js::MutableHandleBase<T, MutableHandle<T>>
+ {
+ public:
+- using ElementType = T;
+-
+ inline MOZ_IMPLICIT MutableHandle(Rooted<T>* root);
+ inline MOZ_IMPLICIT MutableHandle(PersistentRooted<T>* root);
+
+@@ -589,6 +589,7 @@ class MOZ_STACK_CLASS MutableHandle : pu
+ return h;
+ }
+
++ DECLARE_POINTER_COMPARISON_OPS(T);
+ DECLARE_POINTER_CONSTREF_OPS(T);
+ DECLARE_NONPOINTER_ACCESSOR_METHODS(*ptr);
+ DECLARE_NONPOINTER_MUTABLE_ACCESSOR_METHODS(*ptr);
+@@ -805,8 +806,6 @@ class MOZ_RAII Rooted : public js::Roote
+ }
+
+ public:
+- using ElementType = T;
+-
+ template <typename RootingContext>
+ explicit Rooted(const RootingContext& cx)
+ : ptr(GCPolicy<T>::initial())
+@@ -839,6 +838,7 @@ class MOZ_RAII Rooted : public js::Roote
+ ptr = mozilla::Move(value);
+ }
+
++ DECLARE_POINTER_COMPARISON_OPS(T);
+ DECLARE_POINTER_CONSTREF_OPS(T);
+ DECLARE_POINTER_ASSIGN_OPS(Rooted, T);
+ DECLARE_NONPOINTER_ACCESSOR_METHODS(ptr);
+@@ -903,14 +903,13 @@ template <typename T>
+ class MOZ_RAII FakeRooted : public RootedBase<T, FakeRooted<T>>
+ {
+ public:
+- using ElementType = T;
+-
+ template <typename CX>
+ explicit FakeRooted(CX* cx) : ptr(JS::GCPolicy<T>::initial()) {}
+
+ template <typename CX>
+ FakeRooted(CX* cx, T initial) : ptr(initial) {}
+
++ DECLARE_POINTER_COMPARISON_OPS(T);
+ DECLARE_POINTER_CONSTREF_OPS(T);
+ DECLARE_POINTER_ASSIGN_OPS(FakeRooted, T);
+ DECLARE_NONPOINTER_ACCESSOR_METHODS(ptr);
+@@ -931,8 +930,6 @@ template <typename T>
+ class FakeMutableHandle : public js::MutableHandleBase<T, FakeMutableHandle<T>>
+ {
+ public:
+- using ElementType = T;
+-
+ MOZ_IMPLICIT FakeMutableHandle(T* t) {
+ ptr = t;
+ }
+@@ -1124,8 +1121,6 @@ class PersistentRooted : public js::Root
+ }
+
+ public:
+- using ElementType = T;
+-
+ PersistentRooted() : ptr(GCPolicy<T>::initial()) {}
+
+ explicit PersistentRooted(RootingContext* cx)
+@@ -1203,6 +1198,7 @@ class PersistentRooted : public js::Root
+ }
+ }
+
++ DECLARE_POINTER_COMPARISON_OPS(T);
+ DECLARE_POINTER_CONSTREF_OPS(T);
+ DECLARE_POINTER_ASSIGN_OPS(PersistentRooted, T);
+ DECLARE_NONPOINTER_ACCESSOR_METHODS(ptr);
+@@ -1234,8 +1230,6 @@ class JS_PUBLIC_API(ObjectPtr)
+ Heap<JSObject*> value;
+
+ public:
+- using ElementType = JSObject*;
+-
+ ObjectPtr() : value(nullptr) {}
+
+ explicit ObjectPtr(JSObject* obj) : value(obj) {}
+@@ -1342,177 +1336,6 @@ Swap(JS::TenuredHeap<T>& aX, JS::Tenured
+
+ } /* namespace mozilla */
+
+-namespace js {
+-namespace detail {
+-
+-// DefineComparisonOps is a trait which selects which wrapper classes to define
+-// operator== and operator!= for. It supplies a getter function to extract the
+-// value to compare. This is used to avoid triggering the automatic read
+-// barriers where appropriate.
+-//
+-// If DefineComparisonOps is not specialized for a particular wrapper you may
+-// get errors such as 'invalid operands to binary expression' or 'no match for
+-// operator==' when trying to compare against instances of the wrapper.
+-
+-template <typename T>
+-struct DefineComparisonOps : mozilla::FalseType {};
+-
+-template <typename T>
+-struct DefineComparisonOps<JS::Heap<T>> : mozilla::TrueType {
+- static const T& get(const JS::Heap<T>& v) { return v.unbarrieredGet(); }
+-};
+-
+-template <typename T>
+-struct DefineComparisonOps<JS::TenuredHeap<T>> : mozilla::TrueType {
+- static const T get(const JS::TenuredHeap<T>& v) { return v.unbarrieredGetPtr(); }
+-};
+-
+-template <>
+-struct DefineComparisonOps<JS::ObjectPtr> : mozilla::TrueType {
+- static const JSObject* get(const JS::ObjectPtr& v) { return v.unbarrieredGet(); }
+-};
+-
+-template <typename T>
+-struct DefineComparisonOps<JS::Rooted<T>> : mozilla::TrueType {
+- static const T& get(const JS::Rooted<T>& v) { return v.get(); }
+-};
+-
+-template <typename T>
+-struct DefineComparisonOps<JS::Handle<T>> : mozilla::TrueType {
+- static const T& get(const JS::Handle<T>& v) { return v.get(); }
+-};
+-
+-template <typename T>
+-struct DefineComparisonOps<JS::MutableHandle<T>> : mozilla::TrueType {
+- static const T& get(const JS::MutableHandle<T>& v) { return v.get(); }
+-};
+-
+-template <typename T>
+-struct DefineComparisonOps<JS::PersistentRooted<T>> : mozilla::TrueType {
+- static const T& get(const JS::PersistentRooted<T>& v) { return v.get(); }
+-};
+-
+-template <typename T>
+-struct DefineComparisonOps<js::FakeRooted<T>> : mozilla::TrueType {
+- static const T& get(const js::FakeRooted<T>& v) { return v.get(); }
+-};
+-
+-template <typename T>
+-struct DefineComparisonOps<js::FakeMutableHandle<T>> : mozilla::TrueType {
+- static const T& get(const js::FakeMutableHandle<T>& v) { return v.get(); }
+-};
+-
+-} /* namespace detail */
+-} /* namespace js */
+-
+-// Overload operator== and operator!= for all types with the DefineComparisonOps
+-// trait using the supplied getter.
+-//
+-// There are four cases:
+-
+-// Case 1: comparison between two wrapper objects.
+-
+-template <typename T, typename U>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
+- js::detail::DefineComparisonOps<U>::value, bool>::Type
+-operator==(const T& a, const U& b) {
+- return js::detail::DefineComparisonOps<T>::get(a) == js::detail::DefineComparisonOps<U>::get(b);
+-}
+-
+-template <typename T, typename U>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
+- js::detail::DefineComparisonOps<U>::value, bool>::Type
+-operator!=(const T& a, const U& b) {
+- return !(a == b);
+-}
+-
+-// Case 2: comparison between a wrapper object and its unwrapped element type.
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
+-operator==(const T& a, const typename T::ElementType& b) {
+- return js::detail::DefineComparisonOps<T>::get(a) == b;
+-}
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
+-operator!=(const T& a, const typename T::ElementType& b) {
+- return !(a == b);
+-}
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
+-operator==(const typename T::ElementType& a, const T& b) {
+- return a == js::detail::DefineComparisonOps<T>::get(b);
+-}
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value, bool>::Type
+-operator!=(const typename T::ElementType& a, const T& b) {
+- return !(a == b);
+-}
+-
+-// Case 3: For pointer wrappers, comparison between the wrapper and a const
+-// element pointer.
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
+- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
+-operator==(const typename mozilla::RemovePointer<typename T::ElementType>::Type* a, const T& b) {
+- return a == js::detail::DefineComparisonOps<T>::get(b);
+-}
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
+- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
+-operator!=(const typename mozilla::RemovePointer<typename T::ElementType>::Type* a, const T& b) {
+- return !(a == b);
+-}
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
+- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
+-operator==(const T& a, const typename mozilla::RemovePointer<typename T::ElementType>::Type* b) {
+- return js::detail::DefineComparisonOps<T>::get(a) == b;
+-}
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
+- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
+-operator!=(const T& a, const typename mozilla::RemovePointer<typename T::ElementType>::Type* b) {
+- return !(a == b);
+-}
+-
+-// Case 4: For pointer wrappers, comparison between the wrapper and nullptr.
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
+- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
+-operator==(std::nullptr_t a, const T& b) {
+- return a == js::detail::DefineComparisonOps<T>::get(b);
+-}
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
+- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
+-operator!=(std::nullptr_t a, const T& b) {
+- return !(a == b);
+-}
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
+- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
+-operator==(const T& a, std::nullptr_t b) {
+- return js::detail::DefineComparisonOps<T>::get(a) == b;
+-}
+-
+-template <typename T>
+-typename mozilla::EnableIf<js::detail::DefineComparisonOps<T>::value &&
+- mozilla::IsPointer<typename T::ElementType>::value, bool>::Type
+-operator!=(const T& a, std::nullptr_t b) {
+- return !(a == b);
+-}
+-
+ #undef DELETE_ASSIGNMENT_OPS
+
+ #endif /* js_RootingAPI_h */
+diff -up firefox-56.0/js/src/gc/Barrier.h.1337988 firefox-56.0/js/src/gc/Barrier.h
+--- firefox-56.0/js/src/gc/Barrier.h.1337988 2017-09-14 22:16:01.000000000 +0200
++++ firefox-56.0/js/src/gc/Barrier.h 2017-09-25 10:34:11.206611695 +0200
+@@ -353,8 +353,8 @@ class WriteBarrieredBase : public Barrie
+ explicit WriteBarrieredBase(const T& v) : BarrieredBase<T>(v) {}
+
+ public:
+- using ElementType = T;
+
++ DECLARE_POINTER_COMPARISON_OPS(T);
+ DECLARE_POINTER_CONSTREF_OPS(T);
+
+ // Use this if the automatic coercion to T isn't working.
+@@ -612,13 +612,14 @@ class ReadBarriered : public ReadBarrier
+ return *this;
+ }
+
+- const T& get() const {
+- if (InternalBarrierMethods<T>::isMarkable(this->value))
+- this->read();
++ const T get() const {
++ if (!InternalBarrierMethods<T>::isMarkable(this->value))
++ return JS::GCPolicy<T>::initial();
++ this->read();
+ return this->value;
+ }
+
+- const T& unbarrieredGet() const {
++ const T unbarrieredGet() const {
+ return this->value;
+ }
+
+@@ -626,9 +627,9 @@ class ReadBarriered : public ReadBarrier
+ return bool(this->value);
+ }
+
+- operator const T&() const { return get(); }
++ operator const T() const { return get(); }
+
+- const T& operator->() const { return get(); }
++ const T operator->() const { return get(); }
+
+ T* unsafeGet() { return &this->value; }
+ T const* unsafeGet() const { return &this->value; }
+@@ -955,35 +956,6 @@ typedef ReadBarriered<WasmTableObject*>
+
+ typedef ReadBarriered<Value> ReadBarrieredValue;
+
+-namespace detail {
+-
+-template <typename T>
+-struct DefineComparisonOps<PreBarriered<T>> : mozilla::TrueType {
+- static const T& get(const PreBarriered<T>& v) { return v.get(); }
+-};
+-
+-template <typename T>
+-struct DefineComparisonOps<GCPtr<T>> : mozilla::TrueType {
+- static const T& get(const GCPtr<T>& v) { return v.get(); }
+-};
+-
+-template <typename T>
+-struct DefineComparisonOps<HeapPtr<T>> : mozilla::TrueType {
+- static const T& get(const HeapPtr<T>& v) { return v.get(); }
+-};
+-
+-template <typename T>
+-struct DefineComparisonOps<ReadBarriered<T>> : mozilla::TrueType {
+- static const T& get(const ReadBarriered<T>& v) { return v.unbarrieredGet(); }
+-};
+-
+-template <>
+-struct DefineComparisonOps<HeapSlot> : mozilla::TrueType {
+- static const Value& get(const HeapSlot& v) { return v.get(); }
+-};
+-
+-} /* namespace detail */
+-
+ } /* namespace js */
+
+ #endif /* gc_Barrier_h */
+diff -up firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp.1337988 firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp
+--- firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp.1337988 2017-09-14 22:16:02.000000000 +0200
++++ firefox-56.0/js/src/jsapi-tests/testGCHeapPostBarriers.cpp 2017-09-25 10:34:11.206611695 +0200
+@@ -5,7 +5,6 @@
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+-#include "mozilla/TypeTraits.h"
+ #include "mozilla/UniquePtr.h"
+
+ #include "js/RootingAPI.h"
+diff -up firefox-56.0/js/src/vm/SharedMem.h.1337988 firefox-56.0/js/src/vm/SharedMem.h
+--- firefox-56.0/js/src/vm/SharedMem.h.1337988 2017-06-15 22:52:29.000000000 +0200
++++ firefox-56.0/js/src/vm/SharedMem.h 2017-09-25 10:34:11.206611695 +0200
+@@ -12,8 +12,8 @@
+ template<typename T>
+ class SharedMem
+ {
+- // static_assert(mozilla::IsPointer<T>::value,
+- // "SharedMem encapsulates pointer types");
++ static_assert(mozilla::IsPointer<T>::value,
++ "SharedMem encapsulates pointer types");
+
+ enum Sharedness {
+ IsUnshared,
+diff -up firefox-56.0/js/xpconnect/src/XPCInlines.h.1337988 firefox-56.0/js/xpconnect/src/XPCInlines.h
+--- firefox-56.0/js/xpconnect/src/XPCInlines.h.1337988 2017-09-14 22:16:03.000000000 +0200
++++ firefox-56.0/js/xpconnect/src/XPCInlines.h 2017-09-25 10:34:11.206611695 +0200
+@@ -465,7 +465,7 @@ inline
+ void XPCWrappedNativeTearOff::JSObjectMoved(JSObject* obj, const JSObject* old)
+ {
+ MOZ_ASSERT(!IsMarked());
+- MOZ_ASSERT(mJSObject == old);
++ MOZ_ASSERT(mJSObject.unbarrieredGetPtr() == old);
+ mJSObject = obj;
+ }
+
+diff -up firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp.1337988 firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp
+--- firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp.1337988 2017-09-14 22:16:03.000000000 +0200
++++ firefox-56.0/js/xpconnect/src/XPCWrappedNative.cpp 2017-09-25 10:34:11.207611692 +0200
+@@ -874,7 +874,7 @@ void
+ XPCWrappedNative::FlatJSObjectMoved(JSObject* obj, const JSObject* old)
+ {
+ JS::AutoAssertGCCallback inCallback;
+- MOZ_ASSERT(mFlatJSObject == old);
++ MOZ_ASSERT(mFlatJSObject.unbarrieredGetPtr() == old);
+
+ nsWrapperCache* cache = nullptr;
+ CallQueryInterface(mIdentity, &cache);
+diff -up firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp.1337988 firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp
+--- firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp.1337988 2017-07-31 18:20:47.000000000 +0200
++++ firefox-56.0/js/xpconnect/src/XPCWrappedNativeProto.cpp 2017-09-25 10:34:11.207611692 +0200
+@@ -101,7 +101,7 @@ XPCWrappedNativeProto::CallPostCreatePro
+ void
+ XPCWrappedNativeProto::JSProtoObjectFinalized(js::FreeOp* fop, JSObject* obj)
+ {
+- MOZ_ASSERT(obj == mJSProtoObject, "huh?");
++ MOZ_ASSERT(obj == mJSProtoObject.unbarrieredGet(), "huh?");
+
+ #ifdef DEBUG
+ // Check that this object has already been swept from the map.
+@@ -117,7 +117,7 @@ XPCWrappedNativeProto::JSProtoObjectFina
+ void
+ XPCWrappedNativeProto::JSProtoObjectMoved(JSObject* obj, const JSObject* old)
+ {
+- MOZ_ASSERT(mJSProtoObject == old);
++ MOZ_ASSERT(mJSProtoObject.unbarrieredGet() == old);
+ mJSProtoObject.init(obj); // Update without triggering barriers.
+ }
+
diff --git a/mozilla-1548475.patch b/mozilla-1548475.patch
deleted file mode 100644
index b325683..0000000
--- a/mozilla-1548475.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-diff --git a/dom/plugins/base/nsPluginHost.cpp b/dom/plugins/base/nsPluginHost.cpp
---- a/dom/plugins/base/nsPluginHost.cpp
-+++ b/dom/plugins/base/nsPluginHost.cpp
-@@ -105,6 +105,10 @@
- # include "windows.h"
- # include "winbase.h"
- #endif
-+#if (MOZ_WIDGET_GTK)
-+# include <gdk/gdk.h>
-+# include <gdk/gdkx.h>
-+#endif
-
- #include "npapi.h"
-
-@@ -358,9 +362,15 @@
- mOverrideInternalTypes =
- Preferences::GetBool("plugin.override_internal_types", false);
-
-- mPluginsDisabled = Preferences::GetBool("plugin.disable", false);
--
-- Preferences::AddStrongObserver(this, "plugin.disable");
-+ bool waylandBackend = false;
-+#if MOZ_WIDGET_GTK
-+ waylandBackend = !GDK_IS_X11_DISPLAY(gdk_display_get_default());
-+#endif
-+ mPluginsDisabled =
-+ Preferences::GetBool("plugin.disable", false) || waylandBackend;
-+ if (!waylandBackend) {
-+ Preferences::AddStrongObserver(this, "plugin.disable");
-+ }
-
- nsCOMPtr<nsIObserverService> obsService =
- mozilla::services::GetObserverService();
-
diff --git a/mozilla-1562827.patch b/mozilla-1562827.patch
deleted file mode 100644
index 497133c..0000000
--- a/mozilla-1562827.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-diff -up firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.cpp
---- firefox-69.0/widget/gtk/nsWindow.cpp.mozilla-1562827 2019-09-02 15:16:15.031528276 +0200
-+++ firefox-69.0/widget/gtk/nsWindow.cpp 2019-09-02 15:16:15.037528254 +0200
-@@ -818,7 +818,6 @@ void nsWindow::SetParent(nsIWidget* aNew
- if (mParent) {
- mParent->RemoveChild(this);
- }
--
- mParent = aNewParent;
-
- GtkWidget* oldContainer = GetMozContainerWidget();
-@@ -830,88 +829,73 @@ void nsWindow::SetParent(nsIWidget* aNew
- return;
- }
-
-+ nsWindow* newParent = static_cast<nsWindow*>(aNewParent);
-+ GdkWindow* newParentWindow = nullptr;
-+ GtkWidget* newContainer = nullptr;
- if (aNewParent) {
- aNewParent->AddChild(this);
-- ReparentNativeWidget(aNewParent);
-+ newParentWindow = newParent->mGdkWindow;
-+ newContainer = newParent->GetMozContainerWidget();
- } else {
- // aNewParent is nullptr, but reparent to a hidden window to avoid
- // destroying the GdkWindow and its descendants.
- // An invisible container widget is needed to hold descendant
- // GtkWidgets.
-- GtkWidget* newContainer = EnsureInvisibleContainer();
-- GdkWindow* newParentWindow = gtk_widget_get_window(newContainer);
-- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow,
-- oldContainer);
-- }
--}
--
--bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); }
--
--void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) {
-- MOZ_ASSERT(aNewParent, "null widget");
-- NS_ASSERTION(!mIsDestroyed, "");
-- NS_ASSERTION(!static_cast<nsWindow*>(aNewParent)->mIsDestroyed, "");
--
-- GtkWidget* oldContainer = GetMozContainerWidget();
-- if (!oldContainer) {
-- // The GdkWindows have been destroyed so there is nothing else to
-- // reparent.
-- MOZ_ASSERT(gdk_window_is_destroyed(mGdkWindow),
-- "live GdkWindow with no widget");
-- return;
-+ newContainer = EnsureInvisibleContainer();
-+ newParentWindow = gtk_widget_get_window(newContainer);
- }
-- MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow),
-- "destroyed GdkWindow with widget");
-
-- auto* newParent = static_cast<nsWindow*>(aNewParent);
-- GdkWindow* newParentWindow = newParent->mGdkWindow;
-- GtkWidget* newContainer = newParent->GetMozContainerWidget();
-- GtkWindow* shell = GTK_WINDOW(mShell);
--
-- if (shell && gtk_window_get_transient_for(shell)) {
-- GtkWindow* topLevelParent =
-- GTK_WINDOW(gtk_widget_get_toplevel(newContainer));
-- gtk_window_set_transient_for(shell, topLevelParent);
-- }
--
-- ReparentNativeWidgetInternal(aNewParent, newContainer, newParentWindow,
-- oldContainer);
--}
--
--void nsWindow::ReparentNativeWidgetInternal(nsIWidget* aNewParent,
-- GtkWidget* aNewContainer,
-- GdkWindow* aNewParentWindow,
-- GtkWidget* aOldContainer) {
-- if (!aNewContainer) {
-+ if (!newContainer) {
- // The new parent GdkWindow has been destroyed.
-- MOZ_ASSERT(!aNewParentWindow || gdk_window_is_destroyed(aNewParentWindow),
-+ MOZ_ASSERT(!newParentWindow || gdk_window_is_destroyed(newParentWindow),
- "live GdkWindow with no widget");
- Destroy();
- } else {
-- if (aNewContainer != aOldContainer) {
-- MOZ_ASSERT(!gdk_window_is_destroyed(aNewParentWindow),
-+ if (newContainer != oldContainer) {
-+ MOZ_ASSERT(!gdk_window_is_destroyed(newParentWindow),
- "destroyed GdkWindow with widget");
-- SetWidgetForHierarchy(mGdkWindow, aOldContainer, aNewContainer);
-+ SetWidgetForHierarchy(mGdkWindow, oldContainer, newContainer);
-
-- if (aOldContainer == gInvisibleContainer) {
-+ if (oldContainer == gInvisibleContainer) {
- CheckDestroyInvisibleContainer();
- }
- }
-
-- if (!mIsTopLevel) {
-- gdk_window_reparent(mGdkWindow, aNewParentWindow,
-- DevicePixelsToGdkCoordRoundDown(mBounds.x),
-- DevicePixelsToGdkCoordRoundDown(mBounds.y));
-- }
-+ gdk_window_reparent(mGdkWindow, newParentWindow,
-+ DevicePixelsToGdkCoordRoundDown(mBounds.x),
-+ DevicePixelsToGdkCoordRoundDown(mBounds.y));
-+ mToplevelParentWindow = GTK_WINDOW(gtk_widget_get_toplevel(newContainer));
- }
-
-- auto* newParent = static_cast<nsWindow*>(aNewParent);
- bool parentHasMappedToplevel = newParent && newParent->mHasMappedToplevel;
- if (mHasMappedToplevel != parentHasMappedToplevel) {
- SetHasMappedToplevel(parentHasMappedToplevel);
- }
- }
-
-+bool nsWindow::WidgetTypeSupportsAcceleration() { return !IsSmallPopup(); }
-+
-+void nsWindow::ReparentNativeWidget(nsIWidget* aNewParent) {
-+ MOZ_ASSERT(aNewParent, "null widget");
-+ MOZ_ASSERT(!mIsDestroyed, "");
-+ MOZ_ASSERT(!static_cast<nsWindow*>(aNewParent)->mIsDestroyed, "");
-+ MOZ_ASSERT(!gdk_window_is_destroyed(mGdkWindow),
-+ "destroyed GdkWindow with widget");
-+
-+ MOZ_ASSERT(
-+ !mParent,
-+ "nsWindow::ReparentNativeWidget() works on toplevel windows only.");
-+
-+ auto* newParent = static_cast<nsWindow*>(aNewParent);
-+ GtkWindow* newParentWidget = GTK_WINDOW(newParent->GetGtkWidget());
-+ GtkWindow* shell = GTK_WINDOW(mShell);
-+
-+ if (shell && gtk_window_get_transient_for(shell)) {
-+ gtk_window_set_transient_for(shell, newParentWidget);
-+ mToplevelParentWindow = newParentWidget;
-+ }
-+}
-+
- void nsWindow::SetModal(bool aModal) {
- LOG(("nsWindow::SetModal [%p] %d\n", (void*)this, aModal));
- if (mIsDestroyed) return;
-diff -up firefox-69.0/widget/gtk/nsWindow.h.mozilla-1562827 firefox-69.0/widget/gtk/nsWindow.h
diff --git a/mozilla-1564873.patch b/mozilla-1564873.patch
deleted file mode 100644
index de159c1..0000000
--- a/mozilla-1564873.patch
+++ /dev/null
@@ -1,184 +0,0 @@
-
-# HG changeset patch
-# User Emilio Cobos Álvarez <emilio(a)crisal.io>
-# Date 1574168632 0
-# Node ID 82e4062e839a57c0dbcb08df9965883c162eb8d1
-# Parent ff37a98047d63550c77052e7dfecbda14b188e0d
-Bug 1564873 - Fix straight-forward uses of mem::uninitialized in webrender. r=nical
-
-Differential Revision: https://phabricator.services.mozilla.com/D53359
-
-diff --git a/gfx/wr/webrender/src/platform/unix/font.rs b/gfx/wr/webrender/src/platform/unix/font.rs
---- a/gfx/wr/webrender/src/platform/unix/font.rs
-+++ b/gfx/wr/webrender/src/platform/unix/font.rs
-@@ -530,26 +530,26 @@ impl FontContext {
- // Get the bounding box for a glyph, accounting for sub-pixel positioning.
- fn get_bounding_box(
- &self,
- slot: FT_GlyphSlot,
- font: &FontInstance,
- glyph: &GlyphKey,
- scale: f32,
- ) -> FT_BBox {
-- let mut cbox: FT_BBox = unsafe { mem::uninitialized() };
-+ // Get the estimated bounding box from FT (control points).
-+ let mut cbox = FT_BBox { xMin: 0, yMin: 0, xMax: 0, yMax: 0 };
-
-- // Get the estimated bounding box from FT (control points).
- unsafe {
- FT_Outline_Get_CBox(&(*slot).outline, &mut cbox);
-+ }
-
-- // For spaces and other non-printable characters, early out.
-- if (*slot).outline.n_contours == 0 {
-- return cbox;
-- }
-+ // For spaces and other non-printable characters, early out.
-+ if unsafe { (*slot).outline.n_contours } == 0 {
-+ return cbox;
- }
-
- self.pad_bounding_box(font, &mut cbox);
-
- // Offset the bounding box by subpixel positioning.
- // Convert to 26.6 fixed point format for FT.
- let (dx, dy) = font.get_subpx_offset(glyph);
- let (dx, dy) = (
-@@ -713,17 +713,17 @@ impl FontContext {
- (dx / scale as f64 * 64.0 + 0.5) as FT_Pos,
- -(dy / scale as f64 * 64.0 + 0.5) as FT_Pos,
- );
-
- // Move the outline curves to be at the origin, taking
- // into account the subpixel positioning.
- unsafe {
- let outline = &(*slot).outline;
-- let mut cbox: FT_BBox = mem::uninitialized();
-+ let mut cbox = FT_BBox { xMin: 0, yMin: 0, xMax: 0, yMax: 0 };
- FT_Outline_Get_CBox(outline, &mut cbox);
- self.pad_bounding_box(font, &mut cbox);
- FT_Outline_Translate(
- outline,
- dx - ((cbox.xMin + dx) & !63),
- dy - ((cbox.yMin + dy) & !63),
- );
- }
-diff --git a/gfx/wr/webrender/src/prim_store/gradient.rs b/gfx/wr/webrender/src/prim_store/gradient.rs
---- a/gfx/wr/webrender/src/prim_store/gradient.rs
-+++ b/gfx/wr/webrender/src/prim_store/gradient.rs
-@@ -18,7 +18,7 @@
- use crate::prim_store::{PrimKeyCommonData, PrimTemplateCommonData, PrimitiveStore};
- use crate::prim_store::{NinePatchDescriptor, PointKey, SizeKey, InternablePrimitive};
- use crate::render_task::RenderTaskCacheEntryHandle;
--use std::{hash, ops::{Deref, DerefMut}, mem};
-+use std::{hash, ops::{Deref, DerefMut}};
- use crate::util::pack_as_float;
-
- /// The maximum number of stops a gradient may have to use the fast path.
-@@ -575,22 +575,32 @@ pub const GRADIENT_DATA_TABLE_BEGIN: usi
- // The exclusive bound of the gradient data table
- pub const GRADIENT_DATA_TABLE_END: usize = GRADIENT_DATA_LAST_STOP;
- // The number of entries in the gradient data table.
- pub const GRADIENT_DATA_TABLE_SIZE: usize = 128;
-
- // The number of entries in a gradient data: GRADIENT_DATA_TABLE_SIZE + first stop entry + last stop entry
- pub const GRADIENT_DATA_SIZE: usize = GRADIENT_DATA_TABLE_SIZE + 2;
-
--#[derive(Debug)]
-+/// An entry in a gradient data table representing a segment of the gradient
-+/// color space.
-+#[derive(Debug, Copy, Clone)]
- #[repr(C)]
--// An entry in a gradient data table representing a segment of the gradient color space.
--pub struct GradientDataEntry {
-- pub start_color: PremultipliedColorF,
-- pub end_color: PremultipliedColorF,
-+struct GradientDataEntry {
-+ start_color: PremultipliedColorF,
-+ end_color: PremultipliedColorF,
-+}
-+
-+impl GradientDataEntry {
-+ fn white() -> Self {
-+ Self {
-+ start_color: PremultipliedColorF::WHITE,
-+ end_color: PremultipliedColorF::WHITE,
-+ }
-+ }
- }
-
- // TODO(gw): Tidy this up to be a free function / module?
- struct GradientGpuBlockBuilder {}
-
- impl GradientGpuBlockBuilder {
- /// Generate a color ramp filling the indices in [start_idx, end_idx) and interpolating
- /// from start_color to end_color.
-@@ -657,17 +667,17 @@ impl GradientGpuBlockBuilder {
- // within the segment of the gradient space represented by that entry. To lookup a gradient result,
- // first the entry index is calculated to determine which two colors to interpolate between, then
- // the offset within that entry bucket is used to interpolate between the two colors in that entry.
- // This layout preserves hard stops, as the end color for a given entry can differ from the start
- // color for the following entry, despite them being adjacent. Colors are stored within in BGRA8
- // format for texture upload. This table requires the gradient color stops to be normalized to the
- // range [0, 1]. The first and last entries hold the first and last color stop colors respectively,
- // while the entries in between hold the interpolated color stop values for the range [0, 1].
-- let mut entries: [GradientDataEntry; GRADIENT_DATA_SIZE] = unsafe { mem::uninitialized() };
-+ let mut entries = [GradientDataEntry::white(); GRADIENT_DATA_SIZE];
-
- if reverse_stops {
- // Fill in the first entry (for reversed stops) with the first color stop
- GradientGpuBlockBuilder::fill_colors(
- GRADIENT_DATA_LAST_STOP,
- GRADIENT_DATA_LAST_STOP + 1,
- &cur_color,
- &cur_color,
-@@ -692,23 +702,16 @@ impl GradientGpuBlockBuilder {
- );
- cur_idx = next_idx;
- }
-
- cur_color = next_color;
- }
- if cur_idx != GRADIENT_DATA_TABLE_BEGIN {
- error!("Gradient stops abruptly at {}, auto-completing to white", cur_idx);
-- GradientGpuBlockBuilder::fill_colors(
-- GRADIENT_DATA_TABLE_BEGIN,
-- cur_idx,
-- &PremultipliedColorF::WHITE,
-- &cur_color,
-- &mut entries,
-- );
- }
-
- // Fill in the last entry (for reversed stops) with the last color stop
- GradientGpuBlockBuilder::fill_colors(
- GRADIENT_DATA_FIRST_STOP,
- GRADIENT_DATA_FIRST_STOP + 1,
- &cur_color,
- &cur_color,
-@@ -742,23 +745,16 @@ impl GradientGpuBlockBuilder {
- );
- cur_idx = next_idx;
- }
-
- cur_color = next_color;
- }
- if cur_idx != GRADIENT_DATA_TABLE_END {
- error!("Gradient stops abruptly at {}, auto-completing to white", cur_idx);
-- GradientGpuBlockBuilder::fill_colors(
-- cur_idx,
-- GRADIENT_DATA_TABLE_END,
-- &PremultipliedColorF::WHITE,
-- &cur_color,
-- &mut entries,
-- );
- }
-
- // Fill in the last entry with the last color stop
- GradientGpuBlockBuilder::fill_colors(
- GRADIENT_DATA_LAST_STOP,
- GRADIENT_DATA_LAST_STOP + 1,
- &cur_color,
- &cur_color,
-
-
diff --git a/mozilla-1566876-webrtc-ind.patch b/mozilla-1566876-webrtc-ind.patch
deleted file mode 100644
index 598f58f..0000000
--- a/mozilla-1566876-webrtc-ind.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -3504,12 +3504,6 @@
- mBounds = aRect;
- ConstrainSize(&mBounds.width, &mBounds.height);
-
-- // eWindowType_child is not supported on Wayland. Just switch to toplevel
-- // as a workaround.
-- if (!mIsX11Display && mWindowType == eWindowType_child) {
-- mWindowType = eWindowType_toplevel;
-- }
--
- // figure out our parent window
- GtkWidget* parentMozContainer = nullptr;
- GtkContainer* parentGtkContainer = nullptr;
-@@ -3543,6 +3537,18 @@
- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
- }
-
-+ if (!mIsX11Display) {
-+ if (mWindowType == eWindowType_child) {
-+ // eWindowType_child is not supported on Wayland. Just switch to toplevel
-+ // as a workaround.
-+ mWindowType = eWindowType_toplevel;
-+ } else if (mWindowType == eWindowType_popup && !topLevelParent) {
-+ // Workaround for Wayland where the popup windows always need to have
-+ // parent window. For example webrtc ui is a popup window without parent.
-+ mWindowType = eWindowType_toplevel;
-+ }
-+ }
-+
- // ok, create our windows
- switch (mWindowType) {
- case eWindowType_dialog:
-
diff --git a/mozilla-1567434-1.patch b/mozilla-1567434-1.patch
deleted file mode 100644
index 631645b..0000000
--- a/mozilla-1567434-1.patch
+++ /dev/null
@@ -1,205 +0,0 @@
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
-@@ -487,6 +487,7 @@
- GtkWidget* mShell;
- MozContainer* mContainer;
- GdkWindow* mGdkWindow;
-+ GtkWindow* mToplevelParentWindow;
- bool mWindowShouldStartDragging = false;
- PlatformCompositorWidgetDelegate* mCompositorWidgetDelegate;
-
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -401,6 +401,7 @@
- mContainer = nullptr;
- mGdkWindow = nullptr;
- mShell = nullptr;
-+ mToplevelParentWindow = nullptr;
- mCompositorWidgetDelegate = nullptr;
- mHasMappedToplevel = false;
- mIsFullyObscured = false;
-@@ -1144,6 +1145,8 @@
- nsWindow* window =
- static_cast<nsWindow*>(gVisibleWaylandPopupWindows->data);
- if (window->mPopupType != ePopupTypeTooltip) break;
-+ LOG(("nsWindow::HideWaylandTooltips [%p] hidding tooltip [%p].\n",
-+ (void*)this, window));
- window->HideWaylandWindow();
- gVisibleWaylandPopupWindows = g_list_delete_link(
- gVisibleWaylandPopupWindows, gVisibleWaylandPopupWindows);
-@@ -1172,9 +1175,12 @@
- // before we open another one on that level. It means that every open
- // popup needs to have an unique parent.
- GtkWidget* nsWindow::ConfigureWaylandPopupWindows() {
-+ LOG(("nsWindow::ConfigureWaylandPopupWindows [%p]\n", (void*)this));
-+
- // Check if we're already configured.
- if (gVisibleWaylandPopupWindows &&
- g_list_find(gVisibleWaylandPopupWindows, this)) {
-+ LOG(("...[%p] is already configured.\n", (void*)this));
- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
- }
-
-@@ -1182,9 +1188,15 @@
- // as it's short lived temporary window.
- HideWaylandTooltips();
-
-- GtkWindow* parentWidget = nullptr;
-+ GtkWindow* parentWidget = mToplevelParentWindow;
- if (gVisibleWaylandPopupWindows) {
-+ LOG(("... there's visible active popup [%p]\n",
-+ gVisibleWaylandPopupWindows->data));
-+
- if (mPopupType == ePopupTypeTooltip) {
-+ LOG(("...[%p] is tooltip, parent [%p]\n", (void*)this,
-+ gVisibleWaylandPopupWindows->data));
-+
- // Attach tooltip window to the latest popup window
- // to have both visible.
- nsWindow* window =
-@@ -1200,12 +1212,19 @@
- // nsWindow::Create()) or we're toplevel popup without parent.
- // In both cases just use parent which was passed to nsWindow::Create().
- if (!menuPopupFrame) {
-- return GTK_WIDGET(gtk_window_get_transient_for(GTK_WINDOW(mShell)));
-+ LOG(("...[%p] menuPopupFrame = null, using given parent widget [%p]\n",
-+ (void*)this, parentWidget));
-+ return GTK_WIDGET(parentWidget);
- }
-
- nsWindow* parentWindow =
- static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
-+ LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
-+
- if (!parentWindow) {
-+ LOG(("...[%p] using active/visible popups as a parent [%p]\n",
-+ (void*)this, gVisibleWaylandPopupWindows->data));
-+
- // We're toplevel popup menu attached to another menu. Just use our
- // latest popup as a parent.
- parentWindow =
-@@ -1234,10 +1253,10 @@
- }
- }
-
-+ MOZ_ASSERT(parentWidget, "Missing parent widget for wayland popup!");
- if (parentWidget) {
-+ LOG(("...[%p] set parent widget [%p]\n", (void*)this, parentWidget));
- gtk_window_set_transient_for(GTK_WINDOW(mShell), parentWidget);
-- } else {
-- parentWidget = gtk_window_get_transient_for(GTK_WINDOW(mShell));
- }
- gVisibleWaylandPopupWindows =
- g_list_prepend(gVisibleWaylandPopupWindows, this);
-@@ -1248,9 +1267,11 @@
- static void NativeMoveResizeWaylandPopupCallback(
- GdkWindow* window, const GdkRectangle* flipped_rect,
- const GdkRectangle* final_rect, gboolean flipped_x, gboolean flipped_y,
-- void* unused) {
-- LOG(("%s flipped %d %d\n", __FUNCTION__, flipped_rect->x, flipped_rect->y));
-- LOG(("%s final %d %d\n", __FUNCTION__, final_rect->x, final_rect->y));
-+ void* aWindow) {
-+ LOG(("%s [%p] flipped %d %d\n", __FUNCTION__, aWindow, flipped_rect->x,
-+ flipped_rect->y));
-+ LOG(("%s [%p] final %d %d\n", __FUNCTION__, aWindow, final_rect->x,
-+ final_rect->y));
- }
- #endif
-
-@@ -1264,6 +1285,8 @@
- // Compositor may be confused by windows with width/height = 0
- // and positioning such windows leads to Bug 1555866.
- if (!AreBoundsSane()) {
-+ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] Bounds are not sane\n",
-+ (void*)this));
- return;
- }
-
-@@ -1277,6 +1300,8 @@
- // - gdk_window_move_to_rect() is not available
- // - the widget doesn't have a valid GdkWindow
- if (!sGdkWindowMoveToRect || !gdkWindow) {
-+ LOG(("nsWindow::NativeMoveResizeWaylandPopup [%p] use gtk_window_move()\n",
-+ (void*)this));
- gtk_window_move(GTK_WINDOW(mShell), aPosition->x, aPosition->y);
- return;
- }
-@@ -1302,8 +1327,12 @@
- }
- LOG((" request result %d %d\n", rect.x, rect.y));
- #ifdef DEBUG
-- g_signal_connect(gdkWindow, "moved-to-rect",
-- G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
-+ if (!g_signal_handler_find(
-+ gdkWindow, G_SIGNAL_MATCH_FUNC, 0, 0, nullptr,
-+ FuncToGpointer(NativeMoveResizeWaylandPopupCallback), this)) {
-+ g_signal_connect(gdkWindow, "moved-to-rect",
-+ G_CALLBACK(NativeMoveResizeWaylandPopupCallback), this);
-+ }
- #endif
-
- GdkGravity rectAnchor = GDK_GRAVITY_NORTH_WEST;
-@@ -3508,7 +3537,6 @@
- GtkWidget* parentMozContainer = nullptr;
- GtkContainer* parentGtkContainer = nullptr;
- GdkWindow* parentGdkWindow = nullptr;
-- GtkWindow* topLevelParent = nullptr;
- nsWindow* parentnsWindow = nullptr;
- GtkWidget* eventWidget = nullptr;
- bool drawToContainer = false;
-@@ -3534,7 +3562,8 @@
-
- // get the toplevel window just in case someone needs to use it
- // for setting transients or whatever.
-- topLevelParent = GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
-+ mToplevelParentWindow =
-+ GTK_WINDOW(gtk_widget_get_toplevel(parentMozContainer));
- }
-
- if (!mIsX11Display) {
-@@ -3542,7 +3571,7 @@
- // eWindowType_child is not supported on Wayland. Just switch to toplevel
- // as a workaround.
- mWindowType = eWindowType_toplevel;
-- } else if (mWindowType == eWindowType_popup && !topLevelParent) {
-+ } else if (mWindowType == eWindowType_popup && !mToplevelParentWindow) {
- // Workaround for Wayland where the popup windows always need to have
- // parent window. For example webrtc ui is a popup window without parent.
- mWindowType = eWindowType_toplevel;
-@@ -3677,7 +3706,7 @@
- gdk_get_program_class());
- gtk_window_set_type_hint(GTK_WINDOW(mShell),
- GDK_WINDOW_TYPE_HINT_DIALOG);
-- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
-+ gtk_window_set_transient_for(GTK_WINDOW(mShell), mToplevelParentWindow);
- } else if (mWindowType == eWindowType_popup) {
- gtk_window_set_wmclass(GTK_WINDOW(mShell), "Popup",
- gdk_get_program_class());
-@@ -3730,10 +3759,11 @@
- }
- gtk_window_set_type_hint(GTK_WINDOW(mShell), gtkTypeHint);
-
-- if (topLevelParent) {
-+ if (mToplevelParentWindow) {
- LOG(("nsWindow::Create [%p] Set popup parent %p\n", (void*)this,
-- topLevelParent));
-- gtk_window_set_transient_for(GTK_WINDOW(mShell), topLevelParent);
-+ mToplevelParentWindow));
-+ gtk_window_set_transient_for(GTK_WINDOW(mShell),
-+ mToplevelParentWindow);
- }
-
- // We need realized mShell at NativeMove().
-@@ -4011,7 +4041,8 @@
- #endif
- }
-
-- LOG(("nsWindow [%p]\n", (void*)this));
-+ LOG(("nsWindow [%p] %s\n", (void*)this,
-+ mWindowType == eWindowType_toplevel ? "Toplevel" : "Popup"));
- if (mShell) {
- LOG(("\tmShell %p mContainer %p mGdkWindow %p 0x%lx\n", mShell, mContainer,
- mGdkWindow, mIsX11Display ? gdk_x11_window_get_xid(mGdkWindow) : 0));
-
diff --git a/mozilla-1567434-2.patch b/mozilla-1567434-2.patch
deleted file mode 100644
index 966118a..0000000
--- a/mozilla-1567434-2.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -1208,6 +1208,7 @@
- if (frame) {
- menuPopupFrame = do_QueryFrame(frame);
- }
-+
- // The popup is not fully created yet (we're called from
- // nsWindow::Create()) or we're toplevel popup without parent.
- // In both cases just use parent which was passed to nsWindow::Create().
-@@ -1217,10 +1218,22 @@
- return GTK_WIDGET(parentWidget);
- }
-
-+ LOG(("...[%p] is %s\n", (void*)this,
-+ menuPopupFrame->IsContextMenu() ? "context menu" : "popup"));
-+
- nsWindow* parentWindow =
- static_cast<nsWindow*>(menuPopupFrame->GetParentMenuWidget());
- LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
-
-+ // If the popup is a regular menu but GetParentMenuWidget() returns
-+ // nullptr which means it's connected non-menu parent
-+ // (bookmark toolbar for instance).
-+ // In this case use a parent given at nsWindow::Create().
-+ if (!parentWindow && !menuPopupFrame->IsContextMenu()) {
-+ parentWindow =
-+ get_window_for_gtk_widget(GTK_WIDGET(mToplevelParentWindow));
-+ }
-+
- if (!parentWindow) {
- LOG(("...[%p] using active/visible popups as a parent [%p]\n",
- (void*)this, gVisibleWaylandPopupWindows->data));
-
diff --git a/mozilla-1568569.patch b/mozilla-1568569.patch
deleted file mode 100644
index ab6225a..0000000
--- a/mozilla-1568569.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -3238,16 +3238,18 @@ void nsWindow::OnWindowStateEvent(GtkWid
- // We don't care about anything but changes in the maximized/icon/fullscreen
- // states
- if ((aEvent->changed_mask &
- (GDK_WINDOW_STATE_ICONIFIED | GDK_WINDOW_STATE_MAXIMIZED |
- GDK_WINDOW_STATE_FULLSCREEN)) == 0) {
- return;
- }
-
-+ nsSizeMode lastSizeState = mSizeState;
-+
- if (aEvent->new_window_state & GDK_WINDOW_STATE_ICONIFIED) {
- LOG(("\tIconified\n"));
- mSizeState = nsSizeMode_Minimized;
- #ifdef ACCESSIBILITY
- DispatchMinimizeEventAccessible();
- #endif // ACCESSIBILITY
- } else if (aEvent->new_window_state & GDK_WINDOW_STATE_FULLSCREEN) {
- LOG(("\tFullscreen\n"));
-@@ -3261,16 +3263,28 @@ void nsWindow::OnWindowStateEvent(GtkWid
- } else {
- LOG(("\tNormal\n"));
- mSizeState = nsSizeMode_Normal;
- #ifdef ACCESSIBILITY
- DispatchRestoreEventAccessible();
- #endif // ACCESSIBILITY
- }
-
-+ // Fullscreen video playback may generate bogus alpha values which blends
-+ // with desktop background in fullscreen video playback (Bug 1568569).
-+ // As a workaround enable to draw mShell background in fullscreen mode
-+ // if we draw to mContainer.
-+ if (gtk_widget_get_has_window(GTK_WIDGET(mContainer))) {
-+ if (mSizeState == nsSizeMode_Fullscreen) {
-+ gtk_widget_set_app_paintable(mShell, FALSE);
-+ } else if (lastSizeState == nsSizeMode_Fullscreen) {
-+ gtk_widget_set_app_paintable(mShell, TRUE);
-+ }
-+ }
-+
- if (mWidgetListener) {
- mWidgetListener->SizeModeChanged(mSizeState);
- if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
- mWidgetListener->FullscreenChanged(aEvent->new_window_state &
- GDK_WINDOW_STATE_FULLSCREEN);
- }
- }
-
-@@ -3787,16 +3801,21 @@ nsresult nsWindow::Create(nsIWidget* aPa
- eventWidget = (drawToContainer) ? container : mShell;
-
- // Prevent GtkWindow from painting a background to avoid flickering.
- gtk_widget_set_app_paintable(eventWidget, TRUE);
-
- gtk_widget_add_events(eventWidget, kEvents);
- if (drawToContainer) {
- gtk_widget_add_events(mShell, GDK_PROPERTY_CHANGE_MASK);
-+ // Don't paint mShell background when we draw to mContainer.
-+ // Otherwise we see mShell backround to shine through
-+ // mContainer (Bug 1507608).
-+ // But it may also lead to various bugs where mContainer has unintended
-+ // transparent parts which blend with underlying desktop (Bug 1516224).
- gtk_widget_set_app_paintable(mShell, TRUE);
- }
- if (mTransparencyBitmapForTitlebar) {
- moz_container_force_default_visual(mContainer);
- }
-
- // If we draw to mContainer window then configure it now because
- // gtk_container_add() realizes the child widget.
diff --git a/mozilla-1573813.patch b/mozilla-1573813.patch
deleted file mode 100644
index e9fca07..0000000
--- a/mozilla-1573813.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
-@@ -6577,11 +6577,22 @@
- }
-
- gint nsWindow::GdkScaleFactor() {
-+ // For popup windows with parent window we need to get scale factor of the
-+ // parent window. Otherwise the scale factor of the popup is not updated
-+ // during it's hidden.
-+ GdkWindow* scaledGdkWindow = mGdkWindow;
-+ if (mToplevelParentWindow) {
-+ scaledGdkWindow = gtk_widget_get_window(GTK_WIDGET(mToplevelParentWindow));
-+ // Fallback for windows which parent has been unrealized.
-+ if (!scaledGdkWindow) {
-+ scaledGdkWindow = mGdkWindow;
-+ }
-+ }
- // Available as of GTK 3.10+
- static auto sGdkWindowGetScaleFactorPtr =
- (gint(*)(GdkWindow*))dlsym(RTLD_DEFAULT, "gdk_window_get_scale_factor");
-- if (sGdkWindowGetScaleFactorPtr && mGdkWindow)
-- return (*sGdkWindowGetScaleFactorPtr)(mGdkWindow);
-+ if (sGdkWindowGetScaleFactorPtr && scaledGdkWindow)
-+ return (*sGdkWindowGetScaleFactorPtr)(scaledGdkWindow);
- return ScreenHelperGTK::GetGTKMonitorScaleFactor();
- }
-
-
diff --git a/mozilla-1580174-webrtc-popup.patch b/mozilla-1580174-webrtc-popup.patch
new file mode 100644
index 0000000..2d154eb
--- /dev/null
+++ b/mozilla-1580174-webrtc-popup.patch
@@ -0,0 +1,51 @@
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -1155,6 +1155,28 @@
+ }
+ }
+
++bool IsPopupWithoutToplevelParent(nsMenuPopupFrame* aMenuPopupFrame) {
++ // Check if the popup is autocomplete (like tags autocomplete
++ // in the bookmark edit popup).
++ nsAtom* popupId = aMenuPopupFrame->GetContent()->GetID();
++ if (popupId && popupId->Equals(NS_LITERAL_STRING("PopupAutoComplete"))) {
++ return true;
++ }
++
++ // Check if the popup is in popupnotificationcontent (like choosing capture
++ // device when starting webrtc session).
++ nsIFrame* parentFrame = aMenuPopupFrame->GetParent();
++ if (!parentFrame) {
++ return false;
++ }
++ parentFrame = parentFrame->GetParent();
++ if (parentFrame && parentFrame->GetContent()->NodeName().EqualsLiteral(
++ "popupnotificationcontent")) {
++ return true;
++ }
++ return false;
++}
++
+ // Wayland keeps strong popup window hierarchy. We need to track active
+ // (visible) popup windows and make sure we hide popup on the same level
+ // before we open another one on that level. It means that every open
+@@ -1211,10 +1233,14 @@
+ LOG(("...[%p] GetParentMenuWidget() = %p\n", (void*)this, parentWindow));
+
+ // If the popup is a regular menu but GetParentMenuWidget() returns
+- // nullptr which means it's connected non-menu parent
+- // (bookmark toolbar for instance).
++ // nullptr which means is not a submenu of any other menu.
+ // In this case use a parent given at nsWindow::Create().
+- if (!parentWindow && !menuPopupFrame->IsContextMenu()) {
++ // But we have to avoid using mToplevelParentWindow in case the popup
++ // is in 'popupnotificationcontent' element or autocomplete popup,
++ // otherwise the popupnotification would disappear when for
++ // example opening a popup with microphone selection.
++ if (!parentWindow && !menuPopupFrame->IsContextMenu() &&
++ !IsPopupWithoutToplevelParent(menuPopupFrame)) {
+ parentWindow =
+ get_window_for_gtk_widget(GTK_WIDGET(mToplevelParentWindow));
+ }
+
diff --git a/mozilla-1634213.patch b/mozilla-1634213.patch
new file mode 100644
index 0000000..d2a4138
--- /dev/null
+++ b/mozilla-1634213.patch
@@ -0,0 +1,96 @@
+diff --git a/gfx/gl/GLScreenBuffer.cpp b/gfx/gl/GLScreenBuffer.cpp
+--- a/gfx/gl/GLScreenBuffer.cpp
++++ b/gfx/gl/GLScreenBuffer.cpp
+@@ -88,10 +88,14 @@
+ #if defined(XP_MACOSX)
+ factory = SurfaceFactory_IOSurface::Create(gl, caps, ipcChannel, flags);
+ #elif defined(MOZ_WAYLAND)
+- if (gl->GetContextType() == GLContextType::EGL) {
+- if (gfxPlatformGtk::GetPlatform()->UseWaylandDMABufWebGL()) {
+- factory =
+- MakeUnique<SurfaceFactory_DMABUF>(gl, caps, ipcChannel, flags);
++ if (gl->GetContextType() == GLContextType::EGL &&
++ gfxPlatformGtk::GetPlatform()->UseWaylandDMABufWebGL()) {
++ auto DMABUFFactory =
++ MakeUnique<SurfaceFactory_DMABUF>(gl, caps, ipcChannel, flags);
++ if (DMABUFFactory && DMABUFFactory->CanCreateSurface()) {
++ factory = std::move(DMABUFFactory);
++ } else {
++ gfxPlatformGtk::GetPlatform()->DisableWaylandDMABufWebGL();
+ }
+ }
+ #elif defined(MOZ_X11)
+diff --git a/gfx/gl/SharedSurfaceDMABUF.h b/gfx/gl/SharedSurfaceDMABUF.h
+--- a/gfx/gl/SharedSurfaceDMABUF.h
++++ b/gfx/gl/SharedSurfaceDMABUF.h
+@@ -71,6 +71,11 @@
+ bool hasAlpha = mReadCaps.alpha;
+ return SharedSurface_DMABUF::Create(mGL, mFormats, size, hasAlpha);
+ }
++
++ bool CanCreateSurface() {
++ UniquePtr<SharedSurface> test = CreateShared(gfx::IntSize(1, 1));
++ return test != nullptr;
++ }
+ };
+
+ } // namespace gl
+diff --git a/gfx/thebes/gfxPlatformGtk.h b/gfx/thebes/gfxPlatformGtk.h
+--- a/gfx/thebes/gfxPlatformGtk.h
++++ b/gfx/thebes/gfxPlatformGtk.h
+@@ -88,7 +88,8 @@
+
+ #ifdef MOZ_WAYLAND
+ bool UseWaylandDMABufTextures();
+- bool UseWaylandDMABufWebGL();
++ bool UseWaylandDMABufWebGL() { return mUseWebGLDmabufBackend; }
++ void DisableWaylandDMABufWebGL() { mUseWebGLDmabufBackend = false; }
+ bool UseWaylandHardwareVideoDecoding();
+ #endif
+
+@@ -110,6 +111,9 @@
+ #ifdef MOZ_X11
+ Display* mCompositorDisplay;
+ #endif
++#ifdef MOZ_WAYLAND
++ bool mUseWebGLDmabufBackend;
++#endif
+ };
+
+ #endif /* GFX_PLATFORM_GTK_H */
+diff --git a/gfx/thebes/gfxPlatformGtk.cpp b/gfx/thebes/gfxPlatformGtk.cpp
+--- a/gfx/thebes/gfxPlatformGtk.cpp
++++ b/gfx/thebes/gfxPlatformGtk.cpp
+@@ -116,6 +116,9 @@
+
+ Factory::ReleaseFTLibrary(gPlatformFTLibrary);
+ gPlatformFTLibrary = nullptr;
++
++ mUseWebGLDmabufBackend =
++ IsWaylandDisplay() && nsWaylandDisplay::IsDMABufWebGLEnabled();
+ }
+
+ void gfxPlatformGtk::FlushContentDrawing() {
+@@ -725,9 +728,6 @@
+ bool gfxPlatformGtk::UseWaylandDMABufTextures() {
+ return IsWaylandDisplay() && nsWaylandDisplay::IsDMABufTexturesEnabled();
+ }
+-bool gfxPlatformGtk::UseWaylandDMABufWebGL() {
+- return IsWaylandDisplay() && nsWaylandDisplay::IsDMABufWebGLEnabled();
+-}
+ bool gfxPlatformGtk::UseWaylandHardwareVideoDecoding() {
+ return IsWaylandDisplay() && nsWaylandDisplay::IsDMABufVAAPIEnabled() &&
+ gfxPlatform::CanUseHardwareVideoDecoding();
+diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
+--- a/modules/libpref/init/StaticPrefList.yaml
++++ b/modules/libpref/init/StaticPrefList.yaml
+@@ -9111,7 +9111,7 @@
+ # Use DMABuf backend for WebGL on Wayland.
+ - name: widget.wayland-dmabuf-webgl.enabled
+ type: RelaxedAtomicBool
+- value: false
++ value: true
+ mirror: always
+
+ # Use VA-API for video playback on Wayland.
+
diff --git a/rhbz-1354671.patch b/rhbz-1354671.patch
index 1f867eb..9770fa6 100644
--- a/rhbz-1354671.patch
+++ b/rhbz-1354671.patch
@@ -1,12 +1,11 @@
-diff -up firefox-65.0/layout/base/PresShell.h.1354671 firefox-65.0/layout/base/PresShell.h
---- firefox-65.0/layout/base/PresShell.h.1354671 2019-01-29 11:50:08.516649643 +0100
-+++ firefox-65.0/layout/base/PresShell.h 2019-01-29 11:51:48.930258629 +0100
-@@ -205,7 +205,7 @@ class nsIPresShell : public nsStubDocume
+--- firefox-78.0/layout/base/PresShell.orig.h 2020-06-26 20:10:50.168878803 +0200
++++ firefox-78.0/layout/base/PresShell.h 2020-06-26 23:13:24.174571951 +0200
+@@ -257,7 +257,7 @@
* to the same aSize value. AllocateFrame is infallible and will abort
* on out-of-memory.
*/
- void* AllocateFrame(nsQueryFrame::FrameIID aID, size_t aSize) {
+ void* __attribute__((optimize("no-lifetime-dse"))) AllocateFrame(nsQueryFrame::FrameIID aID, size_t aSize) {
- void* result = mFrameArena.AllocateByFrameID(aID, aSize);
- RecordAlloc(result);
- return result;
+ #define FRAME_ID(classname, ...) \
+ static_assert(size_t(nsQueryFrame::FrameIID::classname##_id) == \
+ size_t(eArenaObjectID_##classname), \
diff --git a/sources b/sources
index a8a1d25..0771cfc 100644
--- a/sources
+++ b/sources
@@ -1,5 +1,5 @@
-SHA512 (cbindgen-vendor.tar.xz) = 562433358bcce81852e5e013068a0961be61785917094b3c0c93df34bc4a060eea6e89d86951f76e9e3d9644a56cf756f7278c8fa85b8a4a8b8c8b58c16a8b7c
-SHA512 (icecat-68.9.0-langpacks.tar.gz) = d3f1acf7505193e587338ffdf3d542dad9b04289d3a87de16e5a36a77624d5ad9d4a3366166fdf2e58066b0bf3bb86adbd66f241f3080a5a395960da806a2f94
-SHA512 (icecat-68.9.0-rh2.tar.bz2) = 080e9765850ece232f1888a2c59f8a65ffeeeea7aeeb9b4fdc6dd6c88bdc3dda2fd0b5585b61c5cbb57d860b85ede59f3c2c6d75be80cb58aaf0b0d501603af5
+SHA512 (cbindgen-vendor.tar.xz) = facde286af6f508db9f8e7658460a92a005c82d135a7c190f7f97a28e01df83b76f26a73a7f3a5be76cda5bdd2263f62dbf75ab1385f6d2185aa372ada336283
+SHA512 (icecat-78.0-langpacks.tar.gz) = be646eda0bda77e6fde10851ee7bef75ba702ab50c54dc95275e9f205d17165dbcbdda0947646483ad03a629fe3b99b680ae78f97945b4ec2cb41418a5011d97
+SHA512 (icecat-78.0-rh1.tar.bz2) = 10c03d4934dadc9e21b0e651ff39c89be0f5ebccfe5807c885cffda0a3391bfd9cb6af9626096ab8e0fca7a8de83b39063a6d5bda0f8a4c9e85518fdf00ecd1d
SHA512 (icecat-COPYING-licensefiles.tar.gz) = ed541845170f1d209e322b0def3248d571e0c42c4a17c74e83197e743bd8a128a1475f5312d905c8e70d047eddeac17e604373892eb6d5f1720c5c361849c42c
SHA512 (icecat.png) = a3cec16cb15a27c3c91b53e2c534e78b07911011ff1331e450c0baf8e13b76da7cea2a90e5d75191fa88cfbfd40a0a7f3e553e92b64d0043dadd5ad5edfdf81c
3 years, 10 months
Architecture specific change in rpms/rust-askama_escape.git
by githook-noreply@fedoraproject.org
The package rpms/rust-askama_escape.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-askama_escape.git/commit/?id....
Change:
+ExclusiveArch: %{rust_arches}
Thanks.
Full change:
============
commit 8859059b4fd19a8bc10664712aedff0df766cee0
Author: Artem Polishchuk <ego.cordatus(a)gmail.com>
Date: Wed Jul 1 18:31:15 2020 +0300
Initial import
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..eb41003
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/askama_escape-0.10.1.crate
diff --git a/rust-askama_escape.spec b/rust-askama_escape.spec
new file mode 100644
index 0000000..f34555d
--- /dev/null
+++ b/rust-askama_escape.spec
@@ -0,0 +1,78 @@
+# Generated by rust2rpm 13
+%bcond_without check
+%global debug_package %{nil}
+
+%global crate askama_escape
+
+Name: rust-%{crate}
+Version: 0.10.1
+Release: 1%{?dist}
+Summary: Optimized HTML escaping code, extracted from Askama
+
+# Upstream license specification: MIT OR Apache-2.0
+License: MIT or ASL 2.0
+URL: https://crates.io/crates/askama_escape
+Source: %{crates_source}
+
+ExclusiveArch: %{rust_arches}
+%if %{__cargo_skip_build}
+BuildArch: noarch
+%endif
+
+BuildRequires: rust-packaging
+
+%global _description %{expand:
+Optimized HTML escaping code, extracted from Askama.}
+
+%description %{_description}
+
+%package devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description devel %{_description}
+
+This package contains library source intended for building other packages
+which use "%{crate}" crate.
+
+%files devel
+%license LICENSE-APACHE LICENSE-MIT
+%doc README.md
+%{cargo_registry}/%{crate}-%{version_no_tilde}/
+
+%package -n %{name}+default-devel
+Summary: %{summary}
+BuildArch: noarch
+
+%description -n %{name}+default-devel %{_description}
+
+This package contains library source intended for building other packages
+which use "default" feature of "%{crate}" crate.
+
+%files -n %{name}+default-devel
+%ghost %{cargo_registry}/%{crate}-%{version_no_tilde}/Cargo.toml
+
+%prep
+%autosetup -n %{crate}-%{version_no_tilde} -p1
+%cargo_prep
+
+%generate_buildrequires
+%cargo_generate_buildrequires
+
+%build
+%cargo_build
+
+%install
+%cargo_install
+
+%if %{with check}
+%check
+%cargo_test
+%endif
+
+%changelog
+* Wed Jul 01 18:24:28 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.10.1-1
+- Update to 0.10.1
+
+* Sun Jun 21 03:52:22 EEST 2020 Artem Polishchuk <ego.cordatus(a)gmail.com> - 0.3.0-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..086c9a5
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (askama_escape-0.10.1.crate) = f5c95051bfac2b3c78c9487bc62b90f171babc41df1c57993c6618e5b254933dce710ae1932a08be6a53c2f7f704137d592e9f0c5b6c555e7e436fc65a2b2a7e
3 years, 10 months