Architecture specific change in rpms/golang-github-zmap-zcrypto.git
by githook-noreply@fedoraproject.org
The package rpms/golang-github-zmap-zcrypto.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/golang-github-zmap-zcrypto.git/co...
https://src.fedoraproject.org/cgit/rpms/golang-github-zmap-zcrypto.git/co....
Change:
+%ifnarch %{ix86} %{arm32}
+%ifnarch %{ix86}
Thanks.
Full change:
============
commit ba465ab616ae14746abef5067b0275511e76df91
Author: Robert-André Mauchin <zebob.m(a)gmail.com>
Date: Fri Feb 25 02:52:15 2022 +0100
Disable tests on 32bits arches
diff --git a/golang-github-zmap-zcrypto.spec b/golang-github-zmap-zcrypto.spec
index eb07068..6fcf41c 100644
--- a/golang-github-zmap-zcrypto.spec
+++ b/golang-github-zmap-zcrypto.spec
@@ -1,6 +1,6 @@
# Generated by go2rpm 1
# Int overflow in tests
-%ifnarch %{ix86}
+%ifnarch %{ix86} %{arm32}
%bcond_without check
%endif
%bcond_with bootstrap
commit e276036624645f8b2a6f64d3953fb8ae968a0647
Author: Robert-André Mauchin <zebob.m(a)gmail.com>
Date: Fri Feb 25 02:19:18 2022 +0100
Disable tests on 32bits arches
diff --git a/golang-github-zmap-zcrypto.spec b/golang-github-zmap-zcrypto.spec
index 5251c00..eb07068 100644
--- a/golang-github-zmap-zcrypto.spec
+++ b/golang-github-zmap-zcrypto.spec
@@ -1,5 +1,8 @@
# Generated by go2rpm 1
+# Int overflow in tests
+%ifnarch %{ix86}
%bcond_without check
+%endif
%bcond_with bootstrap
# https://github.com/zmap/zcrypto
commit 0404bd7fa0c0952c818c2d5bb9597489c8397fdf
Author: Robert-André Mauchin <zebob.m(a)gmail.com>
Date: Fri Feb 25 01:27:39 2022 +0100
Bump to commit 2d0ffdec8a9b194bc861525e243d7b9b0fbfbba1 (fix FTBFS) Close: rhbz#2045632
diff --git a/.gitignore b/.gitignore
index 5e64691..f60e356 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
/zcrypto-127181aff13da671788fc183661626ebe235389e.tar.gz
/zcrypto-4d171263147247189025e53b13fd2d5828d59755.tar.gz
/zcrypto-1eef27672b80887f9af214faf034e482d9561821.tar.gz
+/zcrypto-2d0ffdec8a9b194bc861525e243d7b9b0fbfbba1.tar.gz
diff --git a/golang-github-zmap-zcrypto.spec b/golang-github-zmap-zcrypto.spec
index 601c2c2..5251c00 100644
--- a/golang-github-zmap-zcrypto.spec
+++ b/golang-github-zmap-zcrypto.spec
@@ -4,7 +4,7 @@
# https://github.com/zmap/zcrypto
%global goipath github.com/zmap/zcrypto
-%global commit 1eef27672b80887f9af214faf034e482d9561821
+%global commit 2d0ffdec8a9b194bc861525e243d7b9b0fbfbba1
%gometa
@@ -43,11 +43,14 @@ BuildRequires: golang(github.com/zmap/rc2)
BuildRequires: golang(github.com/zmap/zcertificate)
%endif
BuildRequires: golang(golang.org/x/crypto/chacha20poly1305)
+BuildRequires: golang(golang.org/x/crypto/ed25519)
BuildRequires: golang(golang.org/x/net/context)
%if %{with check}
# Tests
BuildRequires: golang(github.com/stretchr/testify/assert)
+BuildRequires: golang(github.com/stretchr/testify/require)
+BuildRequires: golang(golang.org/x/crypto/curve25519)
BuildRequires: golang(gopkg.in/check.v1)
%endif
@@ -64,6 +67,10 @@ BuildRequires: golang(gopkg.in/check.v1)
%if %{with check}
%check
+for test in "TestFetchRemote" \
+; do
+awk -i inplace '/^func.*'"$test"'\(/ { print; print "\tt.Skip(\"disabled failing test\")"; next}1' $(grep -rl $test)
+done
%if %{with bootstrap}
%gocheck -d verifier -d tls
%else
diff --git a/sources b/sources
index bf64aad..9b788bb 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (zcrypto-1eef27672b80887f9af214faf034e482d9561821.tar.gz) = 7633aadf7965ed881c8cd6a7995bd3f0954dd933739d93d3e35a26daf94f96210220590f7186f65d86ad9993269fb167f8b3345fa84a1be891eeb86cec016e02
+SHA512 (zcrypto-2d0ffdec8a9b194bc861525e243d7b9b0fbfbba1.tar.gz) = 0970f2c9cbd01a3e287e4e4d583da3021e64c3c91d58a59c317f83d219f5b7824eec836097085f7bf774ee680727a3c51d0710a88b3f9dd88d8e5db0f2b65097
commit cd2ce3a49ed5529d65e853b103d94d0e1728cbc0
Author: Robert-André Mauchin <zebob.m(a)gmail.com>
Date: Fri Feb 25 00:55:20 2022 +0100
Convert to rpmautospec
diff --git a/changelog b/changelog
new file mode 100644
index 0000000..bec219f
--- /dev/null
+++ b/changelog
@@ -0,0 +1,23 @@
+* Thu Jan 20 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Thu Jul 22 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Tue Jan 26 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Mon Jul 27 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Fri Jun 19 18:51:25 CEST 2020 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.4.20200619git4d17126
+- Bump to commit 4d171263147247189025e53b13fd2d5828d59755
+
+* Tue Feb 04 23:23:46 CET 2020 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.3.20200204git127181a
+- Bump to commit 127181aff13da671788fc183661626ebe235389e
+
+* Wed Jan 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Mon Jul 29 21:42:12 CEST 2019 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.1.20190729git9051775
+- Initial package
diff --git a/golang-github-zmap-zcrypto.spec b/golang-github-zmap-zcrypto.spec
index 7b6de6f..601c2c2 100644
--- a/golang-github-zmap-zcrypto.spec
+++ b/golang-github-zmap-zcrypto.spec
@@ -23,7 +23,7 @@ Liberal Go TLS + X.509 Library for Research.}
Name: %{goname}
Version: 0
-Release: 0.9%{?dist}
+Release: %autorelease
Summary: Liberal Go TLS + X.509 Library for Research
# Upstream license specification: Apache-2.0
@@ -74,26 +74,4 @@ BuildRequires: golang(gopkg.in/check.v1)
%gopkgfiles
%changelog
-* Thu Jan 20 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.9
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
-
-* Thu Jul 22 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.8
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
-
-* Tue Jan 26 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.7
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
-
-* Mon Jul 27 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.5
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
-
-* Fri Jun 19 18:51:25 CEST 2020 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.4.20200619git4d17126
-- Bump to commit 4d171263147247189025e53b13fd2d5828d59755
-
-* Tue Feb 04 23:23:46 CET 2020 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.3.20200204git127181a
-- Bump to commit 127181aff13da671788fc183661626ebe235389e
-
-* Wed Jan 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
-
-* Mon Jul 29 21:42:12 CEST 2019 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.1.20190729git9051775
-- Initial package
+%autochangelog
commit aba8f3419a0cb21c468d6c7d0d6d6cf289461e46
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Jan 20 10:54:41 2022 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/golang-github-zmap-zcrypto.spec b/golang-github-zmap-zcrypto.spec
index 09a060b..7b6de6f 100644
--- a/golang-github-zmap-zcrypto.spec
+++ b/golang-github-zmap-zcrypto.spec
@@ -23,7 +23,7 @@ Liberal Go TLS + X.509 Library for Research.}
Name: %{goname}
Version: 0
-Release: 0.8%{?dist}
+Release: 0.9%{?dist}
Summary: Liberal Go TLS + X.509 Library for Research
# Upstream license specification: Apache-2.0
@@ -74,6 +74,9 @@ BuildRequires: golang(gopkg.in/check.v1)
%gopkgfiles
%changelog
+* Thu Jan 20 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
* Thu Jul 22 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
2 years, 1 month
Architecture specific change in rpms/golang-github-zmap-zcrypto.git
by githook-noreply@fedoraproject.org
The package rpms/golang-github-zmap-zcrypto.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/golang-github-zmap-zcrypto.git/co....
Change:
+%ifnarch %{ix86} %{arm32}
Thanks.
Full change:
============
commit ba465ab616ae14746abef5067b0275511e76df91
Author: Robert-André Mauchin <zebob.m(a)gmail.com>
Date: Fri Feb 25 02:52:15 2022 +0100
Disable tests on 32bits arches
diff --git a/golang-github-zmap-zcrypto.spec b/golang-github-zmap-zcrypto.spec
index eb07068..6fcf41c 100644
--- a/golang-github-zmap-zcrypto.spec
+++ b/golang-github-zmap-zcrypto.spec
@@ -1,6 +1,6 @@
# Generated by go2rpm 1
# Int overflow in tests
-%ifnarch %{ix86}
+%ifnarch %{ix86} %{arm32}
%bcond_without check
%endif
%bcond_with bootstrap
2 years, 1 month
Architecture specific change in rpms/golang-github-zmap-zcrypto.git
by githook-noreply@fedoraproject.org
The package rpms/golang-github-zmap-zcrypto.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/golang-github-zmap-zcrypto.git/co....
Change:
+%ifnarch %{ix86}
Thanks.
Full change:
============
commit e276036624645f8b2a6f64d3953fb8ae968a0647
Author: Robert-André Mauchin <zebob.m(a)gmail.com>
Date: Fri Feb 25 02:19:18 2022 +0100
Disable tests on 32bits arches
diff --git a/golang-github-zmap-zcrypto.spec b/golang-github-zmap-zcrypto.spec
index 5251c00..eb07068 100644
--- a/golang-github-zmap-zcrypto.spec
+++ b/golang-github-zmap-zcrypto.spec
@@ -1,5 +1,8 @@
# Generated by go2rpm 1
+# Int overflow in tests
+%ifnarch %{ix86}
%bcond_without check
+%endif
%bcond_with bootstrap
# https://github.com/zmap/zcrypto
commit 0404bd7fa0c0952c818c2d5bb9597489c8397fdf
Author: Robert-André Mauchin <zebob.m(a)gmail.com>
Date: Fri Feb 25 01:27:39 2022 +0100
Bump to commit 2d0ffdec8a9b194bc861525e243d7b9b0fbfbba1 (fix FTBFS) Close: rhbz#2045632
diff --git a/.gitignore b/.gitignore
index 5e64691..f60e356 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
/zcrypto-127181aff13da671788fc183661626ebe235389e.tar.gz
/zcrypto-4d171263147247189025e53b13fd2d5828d59755.tar.gz
/zcrypto-1eef27672b80887f9af214faf034e482d9561821.tar.gz
+/zcrypto-2d0ffdec8a9b194bc861525e243d7b9b0fbfbba1.tar.gz
diff --git a/golang-github-zmap-zcrypto.spec b/golang-github-zmap-zcrypto.spec
index 601c2c2..5251c00 100644
--- a/golang-github-zmap-zcrypto.spec
+++ b/golang-github-zmap-zcrypto.spec
@@ -4,7 +4,7 @@
# https://github.com/zmap/zcrypto
%global goipath github.com/zmap/zcrypto
-%global commit 1eef27672b80887f9af214faf034e482d9561821
+%global commit 2d0ffdec8a9b194bc861525e243d7b9b0fbfbba1
%gometa
@@ -43,11 +43,14 @@ BuildRequires: golang(github.com/zmap/rc2)
BuildRequires: golang(github.com/zmap/zcertificate)
%endif
BuildRequires: golang(golang.org/x/crypto/chacha20poly1305)
+BuildRequires: golang(golang.org/x/crypto/ed25519)
BuildRequires: golang(golang.org/x/net/context)
%if %{with check}
# Tests
BuildRequires: golang(github.com/stretchr/testify/assert)
+BuildRequires: golang(github.com/stretchr/testify/require)
+BuildRequires: golang(golang.org/x/crypto/curve25519)
BuildRequires: golang(gopkg.in/check.v1)
%endif
@@ -64,6 +67,10 @@ BuildRequires: golang(gopkg.in/check.v1)
%if %{with check}
%check
+for test in "TestFetchRemote" \
+; do
+awk -i inplace '/^func.*'"$test"'\(/ { print; print "\tt.Skip(\"disabled failing test\")"; next}1' $(grep -rl $test)
+done
%if %{with bootstrap}
%gocheck -d verifier -d tls
%else
diff --git a/sources b/sources
index bf64aad..9b788bb 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (zcrypto-1eef27672b80887f9af214faf034e482d9561821.tar.gz) = 7633aadf7965ed881c8cd6a7995bd3f0954dd933739d93d3e35a26daf94f96210220590f7186f65d86ad9993269fb167f8b3345fa84a1be891eeb86cec016e02
+SHA512 (zcrypto-2d0ffdec8a9b194bc861525e243d7b9b0fbfbba1.tar.gz) = 0970f2c9cbd01a3e287e4e4d583da3021e64c3c91d58a59c317f83d219f5b7824eec836097085f7bf774ee680727a3c51d0710a88b3f9dd88d8e5db0f2b65097
commit cd2ce3a49ed5529d65e853b103d94d0e1728cbc0
Author: Robert-André Mauchin <zebob.m(a)gmail.com>
Date: Fri Feb 25 00:55:20 2022 +0100
Convert to rpmautospec
diff --git a/changelog b/changelog
new file mode 100644
index 0000000..bec219f
--- /dev/null
+++ b/changelog
@@ -0,0 +1,23 @@
+* Thu Jan 20 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
+* Thu Jul 22 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.8
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
+* Tue Jan 26 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.7
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
+* Mon Jul 27 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
+* Fri Jun 19 18:51:25 CEST 2020 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.4.20200619git4d17126
+- Bump to commit 4d171263147247189025e53b13fd2d5828d59755
+
+* Tue Feb 04 23:23:46 CET 2020 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.3.20200204git127181a
+- Bump to commit 127181aff13da671788fc183661626ebe235389e
+
+* Wed Jan 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
+* Mon Jul 29 21:42:12 CEST 2019 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.1.20190729git9051775
+- Initial package
diff --git a/golang-github-zmap-zcrypto.spec b/golang-github-zmap-zcrypto.spec
index 7b6de6f..601c2c2 100644
--- a/golang-github-zmap-zcrypto.spec
+++ b/golang-github-zmap-zcrypto.spec
@@ -23,7 +23,7 @@ Liberal Go TLS + X.509 Library for Research.}
Name: %{goname}
Version: 0
-Release: 0.9%{?dist}
+Release: %autorelease
Summary: Liberal Go TLS + X.509 Library for Research
# Upstream license specification: Apache-2.0
@@ -74,26 +74,4 @@ BuildRequires: golang(gopkg.in/check.v1)
%gopkgfiles
%changelog
-* Thu Jan 20 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.9
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
-
-* Thu Jul 22 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.8
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
-
-* Tue Jan 26 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.7
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
-
-* Mon Jul 27 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.5
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
-
-* Fri Jun 19 18:51:25 CEST 2020 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.4.20200619git4d17126
-- Bump to commit 4d171263147247189025e53b13fd2d5828d59755
-
-* Tue Feb 04 23:23:46 CET 2020 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.3.20200204git127181a
-- Bump to commit 127181aff13da671788fc183661626ebe235389e
-
-* Wed Jan 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 0-0.2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
-
-* Mon Jul 29 21:42:12 CEST 2019 Robert-André Mauchin <zebob.m(a)gmail.com> - 0-0.1.20190729git9051775
-- Initial package
+%autochangelog
2 years, 1 month
Architecture specific change in rpms/libkml.git
by githook-noreply@fedoraproject.org
The package rpms/libkml.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/libkml.git/commit/?id=f8cf2028144....
Change:
-%ifarch ppc64le
Thanks.
Full change:
============
commit e5af971b098caad9cac4c6eb6093cee9862b6348
Author: Sandro Mani <manisandro(a)gmail.com>
Date: Thu Feb 24 20:12:40 2022 +0100
Make mingw subpackages noarch
diff --git a/libkml.spec b/libkml.spec
index 7ce72be..edae763 100644
--- a/libkml.spec
+++ b/libkml.spec
@@ -5,7 +5,7 @@
Name: libkml
Version: 1.3.0
-Release: 36%{?dist}
+Release: 37%{?dist}
Summary: Reference implementation of OGC KML 2.2
License: BSD
@@ -112,6 +112,7 @@ developing applications that use %{name}.
%package -n mingw32-%{name}
Summary: MinGW Windows %{name} library
Requires: mingw32-boost
+BuildArch: noarch
%description -n mingw32-%{name}
MinGW Windows %{name} library.
@@ -120,6 +121,7 @@ MinGW Windows %{name} library.
%package -n mingw32-python3-%{name}
Summary: MinGW Windows Python 3 %{name} library
Requires: mingw32-%{name} = %{version}-%{release}
+BuildArch: noarch
%description -n mingw32-python3-%{name}
MinGW Windows Python 3 %{name} library.
@@ -128,6 +130,7 @@ MinGW Windows Python 3 %{name} library.
%package -n mingw64-%{name}
Summary: MinGW Windows %{name} library
Requires: mingw64-boost
+BuildArch: noarch
%description -n mingw64-%{name}
MinGW Windows %{name} library.
@@ -136,6 +139,7 @@ MinGW Windows %{name} library.
%package -n mingw64-python3-%{name}
Summary: MinGW Windows Python 3 %{name} library
Requires: mingw64-%{name} = %{version}-%{release}
+BuildArch: noarch
%description -n mingw64-python3-%{name}
MinGW Windows Python 3 %{name} library.
@@ -259,6 +263,9 @@ export MINGW64_CMAKE_ARGS="\
%changelog
+* Thu Feb 24 2022 Sandro Mani <manisandro(a)gmail.com> - 1.3.0-37
+- Make mingw subpackages noarch
+
* Mon Feb 21 2022 Sandro Mani <manisandro(a)gmail.com> - 1.3.0-36
- Add mingw subpackages
commit f8cf20281445634895ef244c7d610db00f990013
Author: Sandro Mani <manisandro(a)gmail.com>
Date: Thu Feb 24 11:31:42 2022 +0100
Add mingw subpackages
diff --git a/libkml.spec b/libkml.spec
index afcc240..7ce72be 100644
--- a/libkml.spec
+++ b/libkml.spec
@@ -1,9 +1,11 @@
-%undefine _ld_as_needed
+# Parallel build broken
+%global _smp_mflags -j1
+
%bcond_with java
Name: libkml
Version: 1.3.0
-Release: 35%{?dist}
+Release: 36%{?dist}
Summary: Reference implementation of OGC KML 2.2
License: BSD
@@ -28,6 +30,8 @@ Patch6: libkml_crypth.patch
Patch7: libkml-bundle-minizip.patch
# Fix possible OOB array access in strcmp due to undersized array
Patch8: libkml_test_strcmp.patch
+# MinGW build fixes
+Patch9: libkml_mingw.patch
BuildRequires: cmake
BuildRequires: curl-devel
@@ -45,10 +49,28 @@ BuildRequires: java-devel
BuildRequires: junit
%endif
+BuildRequires: mingw32-filesystem >= 95
+BuildRequires: mingw32-gcc-c++
+BuildRequires: mingw32-boost
+BuildRequires: mingw32-curl
+BuildRequires: mingw32-expat
+BuildRequires: mingw32-python3
+BuildRequires: mingw32-uriparser
+BuildRequires: mingw32-zlib
+
+BuildRequires: mingw64-filesystem >= 95
+BuildRequires: mingw64-gcc-c++
+BuildRequires: mingw64-boost
+BuildRequires: mingw64-curl
+BuildRequires: mingw64-expat
+BuildRequires: mingw64-python3
+BuildRequires: mingw64-uriparser
+BuildRequires: mingw64-zlib
+
Provides: bundled(minizip) = 1.3.0
%global __requires_exclude_from ^%{_docdir}/.*$
-%global __provides_exclude_from ^%{python2_sitearch}/.*\\.so$
+%global __provides_exclude_from ^%{python3_sitearch}/.*\\.so$
%description
@@ -87,14 +109,60 @@ The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.
+%package -n mingw32-%{name}
+Summary: MinGW Windows %{name} library
+Requires: mingw32-boost
+
+%description -n mingw32-%{name}
+MinGW Windows %{name} library.
+
+
+%package -n mingw32-python3-%{name}
+Summary: MinGW Windows Python 3 %{name} library
+Requires: mingw32-%{name} = %{version}-%{release}
+
+%description -n mingw32-python3-%{name}
+MinGW Windows Python 3 %{name} library.
+
+
+%package -n mingw64-%{name}
+Summary: MinGW Windows %{name} library
+Requires: mingw64-boost
+
+%description -n mingw64-%{name}
+MinGW Windows %{name} library.
+
+
+%package -n mingw64-python3-%{name}
+Summary: MinGW Windows Python 3 %{name} library
+Requires: mingw64-%{name} = %{version}-%{release}
+
+%description -n mingw64-python3-%{name}
+MinGW Windows Python 3 %{name} library.
+
+
+%{?mingw_debug_package}
+
+
%prep
-%autosetup -p1
-mkdir -p %{__cmake_builddir}
-cp -a %{SOURCE1} %{__cmake_builddir}
+%autosetup -p1 -a1
%build
-%global optflags %{optflags} -fPIC
+# Build bundled minizip
+pushd minizip
+(
+%cmake -DBUILD_SHARED_LIBS=OFF
+%cmake_build
+)
+
+(
+%mingw_cmake -DBUILD_SHARED_LIBS=OFF
+%mingw_make_build
+)
+popd
+
+# Native build
%cmake -DWITH_SWIG=ON -DWITH_PYTHON=ON \
%if %{with java}
-DWITH_JAVA=ON -DJNI_INSTALL_DIR=%{_libdir}/%{name} \
@@ -104,24 +172,44 @@ cp -a %{SOURCE1} %{__cmake_builddir}
-DPYTHON_LIBRARY=%{_libdir}/libpython%{python3_version}$(python3-config --abiflags).so \
-DPYTHON_INCLUDE_DIR=%{_includedir}/python%{python3_version}$(python3-config --abiflags)/ \
-DPYTHON_INSTALL_DIR=%{python3_sitearch} \
+ -DMINIZIP_INCLUDE_DIR=$PWD -DMINIZIP_LIBRARY=$PWD/minizip/%{_vpath_builddir}/libminizip.a \
-DBUILD_TESTING=ON \
-DBUILD_EXAMPLES=ON
-# Parallel build broken
-%global _smp_mflags -j1
%cmake_build
+export MINGW32_CMAKE_ARGS="\
+ -DCMAKE_INSTALL_DIR=%{mingw32_libdir}/cmake/%{name} \
+ -DINCLUDE_INSTALL_DIR=%{mingw32_includedir}/kml \
+ -DPYTHON_LIBRARY=%{mingw32_libdir}/libpython%{mingw32_python3_version}.dll.a \
+ -DPYTHON_INCLUDE_DIR=%{mingw32_includedir}/python%{mingw32_python3_version}/ \
+ -DPYTHON_INSTALL_DIR=%{mingw32_python3_sitearch} \
+ -DMINIZIP_INCLUDE_DIR=$PWD -DMINIZIP_LIBRARY=$PWD/minizip/build_win32/libminizip.a"
+
+export MINGW64_CMAKE_ARGS="\
+ -DCMAKE_INSTALL_DIR=%{mingw64_libdir}/cmake/%{name} \
+ -DINCLUDE_INSTALL_DIR=%{mingw64_includedir}/kml \
+ -DPYTHON_LIBRARY=%{mingw64_libdir}/libpython%{mingw64_python3_version}.dll.a \
+ -DPYTHON_INCLUDE_DIR=%{mingw64_includedir}/python%{mingw64_python3_version}/ \
+ -DPYTHON_INSTALL_DIR=%{mingw64_python3_sitearch} \
+ -DMINIZIP_INCLUDE_DIR=$PWD -DMINIZIP_LIBRARY=$PWD/minizip/build_win64/libminizip.a"
+
+# MinGW build
+%mingw_cmake -DWITH_SWIG=ON -DWITH_PYTHON=ON \
+ -DBUILD_TESTING=OFF \
+ -DBUILD_EXAMPLES=OFF
+%mingw_make_build
+
%install
%cmake_install
+%mingw_make_install
+
+
+%mingw_debug_install_post
%check
-# Ignore test failures on ppc64le, base_zip_file test segfaults there
-%ifarch ppc64le
-%ctest || :
-%else
%ctest
-%endif
%files
@@ -147,7 +235,33 @@ cp -a %{SOURCE1} %{__cmake_builddir}
%{_libdir}/pkgconfig/%{name}.pc
%{_libdir}/cmake/%{name}/
+%files -n mingw32-%{name}
+%license LICENSE
+%{mingw32_bindir}/%{name}*.dll
+%{mingw32_includedir}/kml/
+%{mingw32_libdir}/%{name}*.dll.a
+%{mingw32_libdir}/pkgconfig/%{name}.pc
+%{mingw32_libdir}/cmake/%{name}/
+
+%files -n mingw32-python3-%{name}
+%{mingw32_python3_sitearch}/*.py*
+
+%files -n mingw64-%{name}
+%license LICENSE
+%{mingw64_bindir}/%{name}*.dll
+%{mingw64_includedir}/kml/
+%{mingw64_libdir}/%{name}*.dll.a
+%{mingw64_libdir}/pkgconfig/%{name}.pc
+%{mingw64_libdir}/cmake/%{name}/
+
+%files -n mingw64-python3-%{name}
+%{mingw64_python3_sitearch}/*.py*
+
+
%changelog
+* Mon Feb 21 2022 Sandro Mani <manisandro(a)gmail.com> - 1.3.0-36
+- Add mingw subpackages
+
* Sat Feb 05 2022 Jiri Vanek <jvanek(a)redhat.com> - 1.3.0-35
- Rebuilt for java-17-openjdk as system jdk
diff --git a/libkml_mingw.patch b/libkml_mingw.patch
new file mode 100644
index 0000000..1fdabf0
--- /dev/null
+++ b/libkml_mingw.patch
@@ -0,0 +1,47 @@
+diff -rupN libkml-1.3.0/src/kml/base/file_win32.cc libkml-1.3.0-new/src/kml/base/file_win32.cc
+--- libkml-1.3.0/src/kml/base/file_win32.cc 2015-12-21 18:23:05.000000000 +0100
++++ libkml-1.3.0-new/src/kml/base/file_win32.cc 2017-10-30 11:45:08.434800533 +0100
+@@ -34,7 +34,6 @@
+ #include "kml/base/file.h"
+ #include <windows.h>
+ #include <tchar.h>
+-#include <xstring>
+ #include <algorithm>
+
+ namespace kmlbase {
+@@ -42,7 +41,7 @@ namespace kmlbase {
+ // Internal to the win32 file class. We need a conversion from string to
+ // LPCWSTR.
+ static std::wstring Str2Wstr(const string& str) {
+- std::wstring wstr(str.length(), L'');
++ std::wstring wstr(str.length(), '\0');
+ std::copy(str.begin(), str.end(), wstr.begin());
+ return wstr;
+ }
+@@ -62,7 +61,7 @@ bool File::Exists(const string& full_pat
+ return false;
+ }
+ std::wstring wstr = Str2Wstr(full_path);
+- DWORD attrs = ::GetFileAttributes(wstr.c_str());
++ DWORD attrs = ::GetFileAttributesW(wstr.c_str());
+ return (attrs != INVALID_FILE_ATTRIBUTES) &&
+ ((attrs & FILE_ATTRIBUTE_DIRECTORY) == 0);
+ }
+@@ -72,7 +71,7 @@ bool File::Delete(const string& filepath
+ return false;
+ }
+ std::wstring wstr = Str2Wstr(filepath);
+- return ::DeleteFile(wstr.c_str()) ? true : false;
++ return ::DeleteFileW(wstr.c_str()) ? true : false;
+ }
+
+ static const unsigned int BUFSIZE = 1024;
+@@ -97,7 +96,7 @@ bool File::CreateNewTempFile(string* pat
+ if (uRetVal == 0) {
+ return false;
+ }
+- string str = Wstr2Str(szTempName);
++ string str = szTempName;
+ path->assign(str.c_str(), strlen(str.c_str()));
+ return true;
+ }
2 years, 1 month
Architecture specific change in rpms/xrootd.git
by githook-noreply@fedoraproject.org
The package rpms/xrootd.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/xrootd.git/commit/?id=d3dab6243eb....
Change:
-%ifarch %{ix86} %{arm}
Thanks.
Full change:
============
commit d3dab6243eb07372049f599cba21d2eda4ac37f3
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Thu Feb 24 21:42:50 2022 +0100
Update to version 5.4.1
Drop patches accepted upstream
diff --git a/0001-Add-missing-include.patch b/0001-Add-missing-include.patch
deleted file mode 100644
index c65da09..0000000
--- a/0001-Add-missing-include.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From fa7b5bd944771a986e0160afa0252427f9bd084e Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Sun, 12 Dec 2021 22:33:44 +0100
-Subject: [PATCH] Add missing include
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Fixes GNU/Hurd build
-
-/<<PKGBUILDDIR>>/src/XrdApps/XrdPrep.cc: In function ‘int main(int, char**)’:
-/<<PKGBUILDDIR>>/src/XrdApps/XrdPrep.cc:109:34: error: ‘MAXPATHLEN’ was not declared in this scope
- 109 | static const int MaxPathLen = MAXPATHLEN+1;
- | ^~~~~~~~~~
-/<<PKGBUILDDIR>>/src/XrdApps/XrdPrep.cc:213:24: error: size of array ‘fBuff’ is not an integral constant-expression
- 213 | char *sP, fBuff[MaxPathLen];
- | ^~~~~~~~~~
-src/CMakeFiles/xrdprep.dir/build.make:78: recipe for target 'src/CMakeFiles/xrdprep.dir/XrdApps/XrdPrep.cc.o' failed
----
- src/XrdApps/XrdPrep.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/XrdApps/XrdPrep.cc b/src/XrdApps/XrdPrep.cc
-index b90c521c8..1f2d15af2 100644
---- a/src/XrdApps/XrdPrep.cc
-+++ b/src/XrdApps/XrdPrep.cc
-@@ -42,6 +42,7 @@
-
- #include "XrdOuc/XrdOucEnv.hh"
- #include "XrdSys/XrdSysE2T.hh"
-+#include "XrdSys/XrdSysPlatform.hh"
- #include "XrdCl/XrdClFileSystem.hh"
-
- using namespace XrdCl;
---
-2.33.1
-
diff --git a/0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch b/0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch
new file mode 100644
index 0000000..06010de
--- /dev/null
+++ b/0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch
@@ -0,0 +1,27 @@
+From fdb74096242e76427b64c0f82dba77b05e611ad9 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Thu, 24 Feb 2022 18:58:20 +0100
+Subject: [PATCH] Disable LTO for XrdPosix on 32 bit architectures
+
+---
+ src/XrdPosix.cmake | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/XrdPosix.cmake b/src/XrdPosix.cmake
+index cf3247818..453c20379 100644
+--- a/src/XrdPosix.cmake
++++ b/src/XrdPosix.cmake
+@@ -60,6 +60,10 @@ add_library(
+ XrdPosix/XrdPosixExtern.hh
+ XrdPosix/XrdPosixOsDep.hh )
+
++if(CMAKE_SIZEOF_VOID_P EQUAL 4)
++ target_compile_options(XrdPosixPreload PRIVATE -fno-lto)
++endif()
++
+ target_link_libraries(
+ XrdPosixPreload
+ XrdPosix
+--
+2.35.1
+
diff --git a/0001-Fix-compilation-on-GCC-4.8.patch b/0001-Fix-compilation-on-GCC-4.8.patch
deleted file mode 100644
index ec41f60..0000000
--- a/0001-Fix-compilation-on-GCC-4.8.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From e7cf71c11f6504c6ff7a504a9e134ae66d923aa6 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Tue, 14 Dec 2021 16:33:13 +0100
-Subject: [PATCH] Fix compilation on GCC 4.8
-
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc: In member function 'bool XrdAccSciTokens::GenerateAcls(const string&, uint64_t&, {anonymous}::AccessRulesRaw&, std::string&, std::string&, std::string&, std::vector<{anonymous}::MapRule>&, std::vector<std::basic_string<char> >&)':
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: error: no matching function for call to 'regex_replace(std::string&, std::regex, const char [2])'
- std::regex("//"), "/");
- ^
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: note: candidates are:
-In file included from /usr/include/c++/4.8.2/regex:62:0,
- from ../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:18:
-/usr/include/c++/4.8.2/bits/regex.h:2162:5: note: template<class _Out_iter, class _Bi_iter, class _Rx_traits, class _Ch_type> _Out_iter std::regex_replace(_Out_iter, _Bi_iter, _Bi_iter, const std::basic_regex<_Ch_type, _Rx_traits>&, const std::basic_string<_Ch_type>&, std::regex_constants::match_flag_type)
- regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
- ^
-/usr/include/c++/4.8.2/bits/regex.h:2162:5: note: template argument deduction/substitution failed:
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: note: deduced conflicting types for parameter '_Bi_iter' ('std::basic_regex<char>' and 'const char*')
- std::regex("//"), "/");
- ^
-In file included from /usr/include/c++/4.8.2/regex:62:0,
- from ../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:18:
-/usr/include/c++/4.8.2/bits/regex.h:2182:5: note: template<class _Rx_traits, class _Ch_type> std::basic_string<_Ch_type> std::regex_replace(const std::basic_string<_Ch_type>&, const std::basic_regex<_Ch_type, _Rx_traits>&, const std::basic_string<_Ch_type>&, std::regex_constants::match_flag_type)
- regex_replace(const basic_string<_Ch_type>& __s,
- ^
-/usr/include/c++/4.8.2/bits/regex.h:2182:5: note: template argument deduction/substitution failed:
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: note: mismatched types 'const std::basic_string<_Ch_type>' and 'const char [2]'
- std::regex("//"), "/");
- ^
----
- src/XrdMacaroons/XrdMacaroonsHandler.cc | 1 -
- src/XrdSciTokens/XrdSciTokensAccess.cc | 7 ++++---
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/XrdMacaroons/XrdMacaroonsHandler.cc b/src/XrdMacaroons/XrdMacaroonsHandler.cc
-index 42bda11ff..767505fd7 100644
---- a/src/XrdMacaroons/XrdMacaroonsHandler.cc
-+++ b/src/XrdMacaroons/XrdMacaroonsHandler.cc
-@@ -1,5 +1,4 @@
-
--#include <regex>
- #include <cstring>
- #include <string>
- #include <iostream>
-diff --git a/src/XrdSciTokens/XrdSciTokensAccess.cc b/src/XrdSciTokens/XrdSciTokensAccess.cc
-index 29dcfacfb..cf1abd406 100644
---- a/src/XrdSciTokens/XrdSciTokensAccess.cc
-+++ b/src/XrdSciTokens/XrdSciTokensAccess.cc
-@@ -15,7 +15,6 @@
- #include <fstream>
- #include <unordered_map>
- #include <tuple>
--#include <regex>
-
- #include "INIReader.h"
- #include "picojson.h"
-@@ -648,8 +647,10 @@ private:
- for (auto path : config.m_base_paths) {
- auto path_rule = rule;
- path_rule.m_path_prefix = path + rule.m_path_prefix;
-- path_rule.m_path_prefix = std::regex_replace(path_rule.m_path_prefix,
-- std::regex("//"), "/");
-+ auto pos = path_rule.m_path_prefix.find("//");
-+ if (pos != std::string::npos) {
-+ path_rule.m_path_prefix.erase(pos + 1, 1);
-+ }
- map_rules.emplace_back(path_rule);
- }
- }
---
-2.33.1
-
diff --git a/0001-Fix-compilation-when-char-is-unsigned.patch b/0001-Fix-compilation-when-char-is-unsigned.patch
deleted file mode 100644
index b7c76e9..0000000
--- a/0001-Fix-compilation-when-char-is-unsigned.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From b29d0f021275d105f719dbefb07c8dfe17b95809 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Sat, 11 Dec 2021 07:39:20 +0100
-Subject: [PATCH] Fix compilation when char is unsigned (armv7hl, aarch64,
- ppc64le, s390x)
-
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc: In static member function 'static XrdNetPMark* XrdNetPMarkCfg::Config(XrdSysError*, XrdScheduler*, XrdSysTrace*, bool&)':
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc:271:16: error: comparison is always false due to limited range of data type [-Werror=type-limits]
- 271 | if (useFFly < 0)
- | ~~~~~~~~^~~
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc: In static member function 'static int XrdNetPMarkCfg::Parse(XrdSysError*, XrdOucStream&)':
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc:1037:20: error: comparison is always false due to limited range of data type [-Werror=type-limits]
- 1037 | if (useFFly < 0) useFFly = 1;
- | ~~~~~~~~^~~
----
- src/XrdNet/XrdNetPMarkCfg.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdNet/XrdNetPMarkCfg.cc b/src/XrdNet/XrdNetPMarkCfg.cc
-index d82b2938b..e7cb00ed5 100644
---- a/src/XrdNet/XrdNetPMarkCfg.cc
-+++ b/src/XrdNet/XrdNetPMarkCfg.cc
-@@ -132,7 +132,7 @@ bool tryVO = false;
- bool useDefs = false;
-
- bool useFLbl = false;
--char useFFly = -1;
-+signed char useFFly = -1;
- bool addFLFF = false;
- bool useSTag = true;
-
---
-2.33.1
-
diff --git a/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch b/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
deleted file mode 100644
index 513fff6..0000000
--- a/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 654133bc1158e4815a45dc8dd70023e5fff82424 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Thu, 20 Jan 2022 00:19:08 +0100
-Subject: [PATCH] Fix compiler warnings about pointers used after free:
-
-.../src/XrdCms/XrdCmsUtils.cc: In function 'XrdCmsUtils::ParseMan(XrdSysError*, XrdOucTList**, char*, char*, int*, bool)':
-.../src/XrdCms/XrdCmsUtils.cc:226:43: error: pointer 'newMans_175' may be used after 'operator delete(void*, unsigned long)' [-Werror=use-after-free]
- 226 | if (!plus || strcmp(hSpec, newP->text)) isBad = false;
- | ~~~~~~^~~~
-.../src/XrdCms/XrdCmsUtils.cc:221:27: note: call to 'operator delete(void*, unsigned long)' here
- 221 | delete newP;
- | ^~~~
-
-.../src/XrdCl/XrdClCopy.cc: In function 'IndexRemote(XrdCl::FileSystem*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned short)':
-.../src/XrdCl/XrdClCopy.cc:442:17: error: pointer used after 'operator delete(void*, unsigned long)' [-Werror=use-after-free]
- 442 | log->Error( AppMsg, "Bad URL: %s", current->Path );
- | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.../src/XrdCl/XrdClCopy.cc:441:14: note: call to 'operator delete(void*, unsigned long)' here
- 441 | delete current;
- | ^~~~~~~
----
- src/XrdCl/XrdClCopy.cc | 2 +-
- src/XrdCms/XrdCmsUtils.cc | 18 +++++++++---------
- 2 files changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/src/XrdCl/XrdClCopy.cc b/src/XrdCl/XrdClCopy.cc
-index 78d27589c..c2b754bf5 100644
---- a/src/XrdCl/XrdClCopy.cc
-+++ b/src/XrdCl/XrdClCopy.cc
-@@ -438,8 +438,8 @@ XrdCpFile *IndexRemote( XrdCl::FileSystem *fs,
- current = new XrdCpFile( path.c_str(), badUrl );
- if( badUrl )
- {
-- delete current;
- log->Error( AppMsg, "Bad URL: %s", current->Path );
-+ delete current;
- return 0;
- }
-
-diff --git a/src/XrdCms/XrdCmsUtils.cc b/src/XrdCms/XrdCmsUtils.cc
-index 49c448849..8d25973bc 100644
---- a/src/XrdCms/XrdCmsUtils.cc
-+++ b/src/XrdCms/XrdCmsUtils.cc
-@@ -223,15 +223,15 @@ bool XrdCmsUtils::ParseMan(XrdSysError *eDest, XrdOucTList **oldMans,
- }
- oldP = oldP->next;
- }
-- if (!plus || strcmp(hSpec, newP->text)) isBad = false;
-- else {eDest->Say("Config warning: "
-- "Cyclic DNS registration for ",newP->text,"\n"
-- "Config warning: This cluster will exhibit "
-- "undefined behaviour!!!");
-- isBad = true;
-- }
-- if (!oldP)
-- {appList = SInsert(appList, newP);
-+ if (!oldP)
-+ {if (!plus || strcmp(hSpec, newP->text)) isBad = false;
-+ else {eDest->Say("Config warning: "
-+ "Cyclic DNS registration for ",newP->text,"\n"
-+ "Config warning: This cluster will exhibit "
-+ "undefined behaviour!!!");
-+ isBad = true;
-+ }
-+ appList = SInsert(appList, newP);
- if (plus && !hush) Display(eDest, hSpec, newP->text, isBad);
- }
- }
---
-2.34.1
-
diff --git a/0001-Fix-warning-about-uninitialized-variable.patch b/0001-Fix-warning-about-uninitialized-variable.patch
deleted file mode 100644
index fe72398..0000000
--- a/0001-Fix-warning-about-uninitialized-variable.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 0898ed380a457ff1c0c2547953d0fd36eaeaeebe Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 17 Jan 2022 09:14:08 +0100
-Subject: [PATCH 1/4] Fix warning about uninitialized variable
-
-The cond variable is initialized using the mutex before the mutex is
-initialized. Changing the order of the members in the class ensures
-the mutex is initialized first.
-
-.../src/./XrdXrootd/XrdXrootdAioTask.hh:70:51: error: member 'XrdXrootdAioTask::aioMutex' is used uninitialized [-Werror=uninitialized]
- 70 | : XrdJob(what), aioReady(aioMutex) {}
- | ^~~~~~~~
-cc1plus: all warnings being treated as errors
----
- src/XrdXrootd/XrdXrootdAioTask.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdXrootd/XrdXrootdAioTask.hh b/src/XrdXrootd/XrdXrootdAioTask.hh
-index 2c49ff7d1..c04858bba 100644
---- a/src/XrdXrootd/XrdXrootdAioTask.hh
-+++ b/src/XrdXrootd/XrdXrootdAioTask.hh
-@@ -83,8 +83,8 @@ virtual bool CopyL2F(XrdXrootdAioBuff *aioP) = 0;
-
- static const char* TraceID;
-
-- XrdSysCondVar2 aioReady;
- XrdSysMutex aioMutex; // Locks private data
-+ XrdSysCondVar2 aioReady;
- XrdXrootdAioBuff* pendQ;
- XrdXrootdAioBuff* pendQEnd; // -> Last element in pendQ
-
---
-2.34.1
-
diff --git a/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch b/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
deleted file mode 100644
index 7b7cf1d..0000000
--- a/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-From 0dc292fbf63d25c6a9e000a2e66d7e3e0b8db735 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 24 Jan 2022 06:56:43 +0100
-Subject: [PATCH] Fix warnings about allocations exceeding maximum object size
-
-In member function 'Init',
- inlined from 'Init' at .../src/Xrd/XrdBuffXL.cc:64:6:
-.../src/Xrd/XrdBuffXL.cc:90:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 90 | bucket = new BuckVec[lg2+1];
- | ^
-/usr/include/c++/12/new: In member function 'Init':
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-.../src/XrdOuc/XrdOucBuffer.cc: In member function '__ct_base ':
-.../src/XrdOuc/XrdOucBuffer.cc:79:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 79 | bSlot = new BuffSlot[slots];
- | ^
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-.../src/XrdNet/XrdNetUtils.cc: In function 'GetAddrs':
-.../src/XrdNet/XrdNetUtils.cc:262:35: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 262 | *aVec = new XrdNetAddr[aVsz];
- | ^
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-In member function '__ct ',
- inlined from '__ct_base ' at .../src/XrdXrootd/XrdXrootdJob.cc:459:29:
-.../src/./XrdOuc/XrdOucTable.hh:43:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 43 | Table = new OucTable[maxe];
- | ^
-/usr/include/c++/12/new: In member function '__ct_base ':
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-.../src/XrdPosix/XrdPosixAdmin.cc: In member function 'FanOut':
-.../src/XrdPosix/XrdPosixAdmin.cc:69:27: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 69 | uVec = new XrdCl::URL[i];
- | ^
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
----
- src/Xrd/XrdBuffXL.cc | 3 ++-
- src/XrdNet/XrdNetUtils.cc | 2 +-
- src/XrdOuc/XrdOucBuffer.cc | 2 +-
- src/XrdOuc/XrdOucTable.hh | 2 +-
- src/XrdPosix/XrdPosixAdmin.cc | 2 +-
- 5 files changed, 6 insertions(+), 5 deletions(-)
-
-diff --git a/src/Xrd/XrdBuffXL.cc b/src/Xrd/XrdBuffXL.cc
-index f84ef77cb..f769522af 100644
---- a/src/Xrd/XrdBuffXL.cc
-+++ b/src/Xrd/XrdBuffXL.cc
-@@ -63,7 +63,8 @@ XrdBuffXL::XrdBuffXL() : bucket(0), totalo(0), pagsz(getpagesize()), slots(0),
-
- void XrdBuffXL::Init(int maxMSZ)
- {
-- int lg2, chunksz;
-+ unsigned int lg2;
-+ int chunksz;
-
- // If this is a duplicate call, delete the previous setup
- //
-diff --git a/src/XrdNet/XrdNetUtils.cc b/src/XrdNet/XrdNetUtils.cc
-index 0f5eac348..fbc6c5ff7 100644
---- a/src/XrdNet/XrdNetUtils.cc
-+++ b/src/XrdNet/XrdNetUtils.cc
-@@ -259,7 +259,7 @@ const char *XrdNetUtils::GetAddrs(const char *hSpec,
- //
- if (aInfo.aNum4 || aInfo.aNum6)
- {aVsz = aInfo.aNum4 + aInfo.aNum6;
-- *aVec = new XrdNetAddr[aVsz];
-+ *aVec = new XrdNetAddr[(unsigned int)aVsz];
- FillAddr(aInfo, *aVec);
- }
-
-diff --git a/src/XrdOuc/XrdOucBuffer.cc b/src/XrdOuc/XrdOucBuffer.cc
-index 2faee1d51..10f79d999 100644
---- a/src/XrdOuc/XrdOucBuffer.cc
-+++ b/src/XrdOuc/XrdOucBuffer.cc
-@@ -76,7 +76,7 @@ XrdOucBuffPool::XrdOucBuffPool(int minsz, int maxsz,
-
- // Allocate a slot vector for this
- //
-- bSlot = new BuffSlot[slots];
-+ bSlot = new BuffSlot[(unsigned int)slots];
-
- // Complete initializing the slot vector
- //
-diff --git a/src/XrdOuc/XrdOucTable.hh b/src/XrdOuc/XrdOucTable.hh
-index 92058c42b..2805a259c 100644
---- a/src/XrdOuc/XrdOucTable.hh
-+++ b/src/XrdOuc/XrdOucTable.hh
-@@ -40,7 +40,7 @@ public:
-
- XrdOucTable(int maxe)
- {int i;
-- Table = new OucTable[maxe];
-+ Table = new OucTable[(unsigned int)maxe];
- maxnum = maxe; curnum = 0; avlnum = 0;
- for (i = 1; i < maxe; i++) Table[i-1].Fnum = i;
- Table[maxe-1].Fnum = -1;
-diff --git a/src/XrdPosix/XrdPosixAdmin.cc b/src/XrdPosix/XrdPosixAdmin.cc
-index c26571394..2cad5517e 100644
---- a/src/XrdPosix/XrdPosixAdmin.cc
-+++ b/src/XrdPosix/XrdPosixAdmin.cc
-@@ -49,7 +49,7 @@ XrdCl::URL *XrdPosixAdmin::FanOut(int &num)
- XrdCl::URL *uVec;
- XrdNetAddr netLoc;
- const char *hName;
-- int i;
-+ unsigned int i;
-
- // Make sure admin is ok
- //
---
-2.34.1
-
diff --git a/0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch b/0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch
new file mode 100644
index 0000000..de803fc
--- /dev/null
+++ b/0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch
@@ -0,0 +1,94 @@
+From 8095e021588150a584371ffbbf50e5b0bb7d4ede Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Fri, 4 Feb 2022 21:20:47 +0100
+Subject: [PATCH] Ignore -Warray-bounds warnings from stricter check in gcc 12.
+
+.../src/XrdFrm/XrdFrmMonitor.cc: In function 'XrdFrmMonitor::Init(char const*, char const*, char const*)':
+.../src/XrdFrm/XrdFrmMonitor.cc:158:12: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 158 | mP->hdr.pseq = 0;
+ | ~~~~~~~~^~~~
+.../src/XrdFrm/XrdFrmMonitor.cc:155:26: note: object of size [13, 1036] allocated by 'malloc'
+ 155 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+.../src/XrdFrm/XrdFrmMonitor.cc:159:8: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 159 | mP->dictid = 0;
+ | ~~~~^~~~~~
+.../src/XrdFrm/XrdFrmMonitor.cc:155:26: note: object of size [13, 1036] allocated by 'malloc'
+ 155 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+
+.../src/XrdXrootd/XrdXrootdMonitor.cc: In function 'XrdXrootdMonitor::Init(XrdScheduler*, XrdSysError*, char const*, char const*, char const*, int)':
+.../src/XrdXrootd/XrdXrootdMonitor.cc:634:12: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 634 | mP->hdr.pseq = 0;
+ | ~~~~~~~~^~~~
+.../src/XrdXrootd/XrdXrootdMonitor.cc:631:26: note: object of size [13, 1036] allocated by 'malloc'
+ 631 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+.../src/XrdXrootd/XrdXrootdMonitor.cc:635:8: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 635 | mP->dictid = 0;
+ | ~~~~^~~~~~
+.../src/XrdXrootd/XrdXrootdMonitor.cc:631:26: note: object of size [13, 1036] allocated by 'malloc'
+ 631 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+---
+ src/XrdFrm/XrdFrmMonitor.cc | 9 +++++++++
+ src/XrdXrootd/XrdXrootdMonitor.cc | 9 +++++++++
+ 2 files changed, 18 insertions(+)
+
+diff --git a/src/XrdFrm/XrdFrmMonitor.cc b/src/XrdFrm/XrdFrmMonitor.cc
+index a453617a6..5abe5ff31 100644
+--- a/src/XrdFrm/XrdFrmMonitor.cc
++++ b/src/XrdFrm/XrdFrmMonitor.cc
+@@ -149,6 +149,12 @@ int XrdFrmMonitor::Init(const char *iHost, const char *iProg, const char *iName)
+ //
+ if (!isEnabled) return 1;
+
++// Ignore array bounds warning from gcc 12 triggered because the allocated
++// memory for the XrdXrootdMonMap is smaller than sizeof(XrdXrootdMonMap)
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Warray-bounds"
++#endif
+ // Create identification record
+ //
+ idLen = strlen(iBuff) + sizeof(XrdXrootdMonHeader) + sizeof(kXR_int32);
+@@ -158,6 +164,9 @@ int XrdFrmMonitor::Init(const char *iHost, const char *iProg, const char *iName)
+ mP->hdr.pseq = 0;
+ mP->dictid = 0;
+ strcpy(mP->info, iBuff);
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic pop
++#endif
+
+ // Setup the primary destination
+ //
+diff --git a/src/XrdXrootd/XrdXrootdMonitor.cc b/src/XrdXrootd/XrdXrootdMonitor.cc
+index 2926bae75..bb0f0a242 100644
+--- a/src/XrdXrootd/XrdXrootdMonitor.cc
++++ b/src/XrdXrootd/XrdXrootdMonitor.cc
+@@ -625,6 +625,12 @@ void XrdXrootdMonitor::Init(XrdScheduler *sp, XrdSysError *errp,
+ kySIDSZ = strlen(kySID);
+ monHost = strdup(iHost);
+
++// Ignore array bounds warning from gcc 12 triggered because the allocated
++// memory for the XrdXrootdMonMap is smaller than sizeof(XrdXrootdMonMap)
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Warray-bounds"
++#endif
+ // Create identification record
+ //
+ idLen = strlen(iBuff) + sizeof(XrdXrootdMonHeader) + sizeof(kXR_int32);
+@@ -634,6 +640,9 @@ void XrdXrootdMonitor::Init(XrdScheduler *sp, XrdSysError *errp,
+ mP->hdr.pseq = 0;
+ mP->dictid = 0;
+ strcpy(mP->info, iBuff);
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic pop
++#endif
+
+ // Generate a CGI version of all the variations
+ //
+--
+2.34.1
+
diff --git a/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch b/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
deleted file mode 100644
index 34f0cab..0000000
--- a/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From 7615d866986131f3548b5863b38872a2e4dc58d9 Mon Sep 17 00:00:00 2001
-From: Andrew Hanushevsky <abh(a)stanford.edu>
-Date: Thu, 20 Jan 2022 23:22:09 -0800
-Subject: [PATCH] [Server] Prevent SEGV on busy systems due to missing lock
- call for background jobs.
-
----
- src/XrdXrootd/XrdXrootdJob.cc | 50 +++++++++++++++++++++++++++++------
- 1 file changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/src/XrdXrootd/XrdXrootdJob.cc b/src/XrdXrootd/XrdXrootdJob.cc
-index 1b2703d96..467323de5 100644
---- a/src/XrdXrootd/XrdXrootdJob.cc
-+++ b/src/XrdXrootd/XrdXrootdJob.cc
-@@ -37,6 +37,7 @@
- #include "Xrd/XrdScheduler.hh"
- #include "XrdOuc/XrdOucProg.hh"
- #include "XrdOuc/XrdOucStream.hh"
-+#include "XrdSys/XrdSysError.hh"
- #include "XrdSys/XrdSysPlatform.hh"
- #include "XrdSys/XrdSysRAtomic.hh"
- #include "XrdXrootd/XrdXrootdJob.hh"
-@@ -99,6 +100,12 @@ static const int argvnum = sizeof(theArgs)/sizeof(theArgs[0]);
- /* G l o b a l F u n c t i o n s */
- /******************************************************************************/
-
-+namespace XrdXrootd
-+{
-+extern XrdSysError eLog;
-+}
-+using namespace XrdXrootd;
-+
- extern XrdSysTrace XrdXrootdTrace;
-
- int XrdXrootdJobWaiting(XrdXrootdJob2Do *item, void *arg)
-@@ -152,10 +159,15 @@ XrdXrootdJob2Do::~XrdXrootdJob2Do()
- /******************************************************************************/
- /* D o I t */
- /******************************************************************************/
-+
-+#define jobInfo theJob->JobName<<' '<<(theArgs[1] ? theArgs[1] : "")\
-+ <<(theArgs[2] ? " " : "")<<(theArgs[2] ? theArgs[2] : "")
-
- void XrdXrootdJob2Do::DoIt()
- {
-+ static const char *TraceID = "jobXeq";
- XrdXrootdJob2Do *jp = 0;
-+ const char *endStat = " completed";
- char *lp = 0;
- int i, rc = 0;
-
-@@ -163,9 +175,11 @@ void XrdXrootdJob2Do::DoIt()
- // perform the actual function and get the result and send to any async clients
- //
- if (Status != Job_Cancel)
-- {if ((rc = theJob->theProg->Run(&jobStream, theArgs[1], theArgs[2],
-+ {TRACE(REQ, "Job "<<jobInfo<<" started");
-+ if ((rc = theJob->theProg->Run(&jobStream, theArgs[1], theArgs[2],
- theArgs[3], theArgs[4])))
- {Status = Job_Cancel;
-+ endStat= " failed";
- lp = jobStream.GetLine();
- theJob->myMutex.Lock();
- }
-@@ -173,15 +187,22 @@ void XrdXrootdJob2Do::DoIt()
- rc = theJob->theProg->RunDone(jobStream);
- theJob->myMutex.Lock();
- if ((rc && rc != -EPIPE) || (rc == -EPIPE && (!lp || !(*lp))))
-- Status = Job_Cancel;
-+ {Status = Job_Cancel; endStat = " failed";}
- else if (Status != Job_Cancel)
- {Status = Job_Done;
- for (i = 0; i < numClients; i++)
- if (!Client[i].isSync) {sendResult(lp); break;}
- }
- }
-+ } else {
-+ endStat = " cancelled";
-+ theJob->myMutex.Lock();
- }
-
-+// Produce a trace record
-+//
-+ TRACE(REQ, "Job "<<jobInfo<<endStat);
-+
- // If the number of jobs > than the max allowed, then redrive a waiting job
- // if in fact we represent a legitimate job slot (this could a phantom slot
- // due to ourselves being cancelled.
-@@ -313,7 +334,7 @@ XrdOucTList *XrdXrootdJob2Do::lstClient()
- /* v e r C l i e n t */
- /******************************************************************************/
-
--int XrdXrootdJob2Do::verClient(int dodel)
-+int XrdXrootdJob2Do::verClient(int dodel) // Caller must have theJob->myMutex
- {
- int i, j, k;
-
-@@ -330,9 +351,16 @@ int XrdXrootdJob2Do::verClient(int dodel)
- //
- if (!numClients && dodel)
- {XrdXrootdJob2Do *jp = theJob->JobTable.Remove(JobNum);
-- if (jp->Status == XrdXrootdJob2Do::Job_Waiting) theJob->numJobs--;
-- delete jp;
-- return 0;
-+ if (jp)
-+ {if (jp->Status == XrdXrootdJob2Do::Job_Waiting) theJob->numJobs--;
-+ delete jp;
-+ return 0;
-+ } else {
-+ char ebuff[80];
-+ snprintf(ebuff, sizeof(ebuff), "Unable to find %s job %d;",
-+ theJob->JobName, JobNum);
-+ eLog.Emsg("Job2Do", ebuff, "job slot disabled!");
-+ }
- }
- return numClients;
- }
-@@ -341,7 +369,7 @@ int XrdXrootdJob2Do::verClient(int dodel)
- /* R e d r i v e */
- /******************************************************************************/
-
--void XrdXrootdJob2Do::Redrive()
-+void XrdXrootdJob2Do::Redrive() // Caller must have theJob->myMutex held
- {
- XrdXrootdJob2Do *jp;
- int Start = 0;
-@@ -364,10 +392,12 @@ void XrdXrootdJob2Do::Redrive()
- /******************************************************************************/
- /* s e n d R e s u l t */
- /******************************************************************************/
-+
-+// Caller must have theJob->myMutex locked.
-
- void XrdXrootdJob2Do::sendResult(char *lp, int caned, int jrc)
- {
-- static const char *TraceID = "sendResult";
-+ static const char *TraceID = "jobSendResult";
- static const kXR_int32 Xcan = static_cast<kXR_int32>(htonl(kXR_Cancelled));
- XrdXrootdReqID ReqID;
- struct iovec jobVec[6];
-@@ -619,6 +649,8 @@ int XrdXrootdJob::Schedule(const char *jkey,
- /* C l e a n U p */
- /******************************************************************************/
-
-+// The caller must have myMutex locked
-+
- void XrdXrootdJob::CleanUp(XrdXrootdJob2Do *jp)
- {
- int theStatus = jp->Status;
-@@ -641,6 +673,8 @@ void XrdXrootdJob::CleanUp(XrdXrootdJob2Do *jp)
- /* s e n d R e s u l t */
- /******************************************************************************/
-
-+// Caller must have myMutex locked.
-+
- int XrdXrootdJob::sendResult(XrdXrootdResponse *resp,
- const char *rpfx,
- XrdXrootdJob2Do *job)
---
-2.34.1
-
diff --git a/0002-Fix-warning-about-dereferncing-null-pointer.patch b/0002-Fix-warning-about-dereferncing-null-pointer.patch
deleted file mode 100644
index 09c04e2..0000000
--- a/0002-Fix-warning-about-dereferncing-null-pointer.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 1780fc12fb947a2bda22007a715527a18621a6cb Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 17 Jan 2022 09:21:23 +0100
-Subject: [PATCH 2/4] Fix warning about dereferncing null pointer
-
-In member function 'XrdCl::ChunkHandler::ToPgInfo(XrdCl::AnyObject*, XrdCl::PageInfo*&)',
- inlined from 'XrdCl::ChunkHandler::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*)' at .../src/XrdCl/XrdClXCpSrc.cc:58:17:
-.../src/XrdCl/XrdClXCpSrc.cc:97:66: error: 'this' pointer is null [-Werror=nonnull]
- 97 | *chunk = PageInfo( rsp->offset, rsp->length, rsp->buffer );
- | ^
-In file included from .../src/./XrdCl/XrdClFileSystem.hh:32,
- from .../src/./XrdCl/XrdClFile.hh:28,
- from .../src/./XrdCl/XrdClXCpSrc.hh:28,
- from .../src/XrdCl/XrdClXCpSrc.cc:25:
-.../src/./XrdCl/XrdClXRootDResponses.hh: In member function 'XrdCl::ChunkHandler::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*)':
-.../src/./XrdCl/XrdClXRootDResponses.hh:962:15: note: in a call to non-static member function 'XrdCl::PageInfo::operator=(XrdCl::PageInfo&&)'
- 962 | PageInfo& operator=( PageInfo &&pginf );
- | ^~~~~~~~
-cc1plus: all warnings being treated as errors
----
- src/XrdCl/XrdClXCpSrc.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdCl/XrdClXCpSrc.cc b/src/XrdCl/XrdClXCpSrc.cc
-index 532df79a4..c68fbc499 100644
---- a/src/XrdCl/XrdClXCpSrc.cc
-+++ b/src/XrdCl/XrdClXCpSrc.cc
-@@ -94,7 +94,7 @@ class ChunkHandler: public ResponseHandler
- {
- ChunkInfo *rsp = nullptr;
- response->Get( rsp );
-- *chunk = PageInfo( rsp->offset, rsp->length, rsp->buffer );
-+ chunk = new PageInfo( rsp->offset, rsp->length, rsp->buffer );
- response->Set( ( int* )0 );
- }
- }
---
-2.34.1
-
diff --git a/0003-Fix-warning-about-comparing-arrays.patch b/0003-Fix-warning-about-comparing-arrays.patch
deleted file mode 100644
index 33c8bcf..0000000
--- a/0003-Fix-warning-about-comparing-arrays.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 62337be8ada4692bfd10eceaa042e3c4a553ece8 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 17 Jan 2022 09:24:46 +0100
-Subject: [PATCH 3/4] Fix warning about comparing arrays
-
-Cast the arrays to pointers to avoid the warning
-
-.../src/XrdPosix/XrdPosixXrootd.cc:955:22: error: comparison between two arrays [-Werror=array-compare]
- 955 | if (dp32->d_name != dp64->d_name)
- | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
----
- src/XrdPosix/XrdPosixXrootd.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdPosix/XrdPosixXrootd.cc b/src/XrdPosix/XrdPosixXrootd.cc
-index 517dc07ec..cedb3ca40 100644
---- a/src/XrdPosix/XrdPosixXrootd.cc
-+++ b/src/XrdPosix/XrdPosixXrootd.cc
-@@ -952,7 +952,7 @@ struct dirent* XrdPosixXrootd::Readdir(DIR *dirp)
- if (!(dp64 = Readdir64(dirp))) return 0;
-
- dp32 = (struct dirent *)dp64;
-- if (dp32->d_name != dp64->d_name)
-+ if ((char*)dp32->d_name != (char*)dp64->d_name)
- {dp32->d_ino = dp64->d_ino;
- #if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__GNU__) && !(defined(__FreeBSD_kernel__) && defined(__GLIBC__))
- dp32->d_off = dp64->d_off;
---
-2.34.1
-
diff --git a/0004-Do-not-give-up-ownership-of-ChunkInfo.patch b/0004-Do-not-give-up-ownership-of-ChunkInfo.patch
deleted file mode 100644
index 0d88bab..0000000
--- a/0004-Do-not-give-up-ownership-of-ChunkInfo.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 86d40e79b4ece53d9e5c2dfb6b40ff77888ebad6 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Tue, 18 Jan 2022 16:01:34 +0100
-Subject: [PATCH 4/4] Do not give up ownership of ChunkInfo
-
----
- src/XrdCl/XrdClXCpSrc.cc | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/src/XrdCl/XrdClXCpSrc.cc b/src/XrdCl/XrdClXCpSrc.cc
-index c68fbc499..c19332c74 100644
---- a/src/XrdCl/XrdClXCpSrc.cc
-+++ b/src/XrdCl/XrdClXCpSrc.cc
-@@ -95,7 +95,6 @@ class ChunkHandler: public ResponseHandler
- ChunkInfo *rsp = nullptr;
- response->Get( rsp );
- chunk = new PageInfo( rsp->offset, rsp->length, rsp->buffer );
-- response->Set( ( int* )0 );
- }
- }
-
---
-2.34.1
-
diff --git a/xrootd.spec b/xrootd.spec
index 4266a0b..89d82a4 100644
--- a/xrootd.spec
+++ b/xrootd.spec
@@ -1,8 +1,3 @@
-%ifarch %{ix86} %{arm}
-# LTO does not work for the POSIX preload code on 32 bit architectures
-%define _lto_cflags %{nil}
-%endif
-
%if %{?fedora}%{!?fedora:0}
%ifarch %{ix86} %{arm}
%global ceph 0
@@ -18,32 +13,19 @@
Name: xrootd
Epoch: 1
-Version: 5.4.0
-Release: 5%{?dist}
+Version: 5.4.1
+Release: 1%{?dist}
Summary: Extended ROOT file server
License: LGPLv3+
URL: https://xrootd.slac.stanford.edu/
Source0: https://xrootd.slac.stanford.edu/download/v%{version}/%{name}-%{version}....
-# https://github.com/xrootd/xrootd/pull/1570
-Patch0: 0001-Fix-compilation-when-char-is-unsigned.patch
-# https://github.com/xrootd/xrootd/pull/1571
-Patch1: 0001-Fix-compilation-on-GCC-4.8.patch
-# https://github.com/xrootd/xrootd/pull/1573
-Patch2: 0001-Add-missing-include.patch
# https://github.com/xrootd/xrootd/pull/1575
-Patch3: 0001-Define-ENODATA-if-not-defined.patch
-# https://github.com/xrootd/xrootd/pull/1592
-Patch4: 0001-Fix-warning-about-uninitialized-variable.patch
-Patch5: 0002-Fix-warning-about-dereferncing-null-pointer.patch
-Patch6: 0003-Fix-warning-about-comparing-arrays.patch
-Patch7: 0004-Do-not-give-up-ownership-of-ChunkInfo.patch
-# https://github.com/xrootd/xrootd/pull/1598
-Patch8: 0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
-# https://github.com/xrootd/xrootd/pull/1600
-Patch9: 0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
-# Backport from upstream - fixes a gcc 12 compiler warning
-Patch10: 0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
+Patch0: 0001-Define-ENODATA-if-not-defined.patch
+# https://github.com/xrootd/xrootd/pull/1620
+Patch1: 0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch
+# Disable LTO for XrdPosix on 32 bit architectures
+Patch2: 0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch
BuildRequires: gcc-c++
%if %{?rhel}%{!?rhel:0} == 7
@@ -302,21 +284,13 @@ This package contains the API documentation of the xrootd libraries.
%patch0 -p1
%patch1 -p1
%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p1
%build
%if %{?fedora}%{!?fedora:0} >= 36
# Mark some warnings from gcc 12 as not errors
# These are likely bogus - hopefully they can be fixed in gcc updates
%set_build_flags
-CXXFLAGS="${CXXFLAGS} -Wno-error=array-bounds -Wno-error=restrict"
+CXXFLAGS="${CXXFLAGS} -Wno-error=restrict"
%endif
%cmake3 \
@@ -684,6 +658,10 @@ fi
%doc %{_pkgdocdir}
%changelog
+* Thu Feb 24 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.1-1
+- Update to version 5.4.1
+- Drop patches accepted upstream
+
* Mon Jan 31 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-5
- Use openssl 3 compatible code on EPEL 9
2 years, 1 month
Architecture specific change in rpms/xrootd.git
by githook-noreply@fedoraproject.org
The package rpms/xrootd.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/xrootd.git/commit/?id=d3dab6243eb...
https://src.fedoraproject.org/cgit/rpms/xrootd.git/commit/?id=9c466e1ca18...
https://src.fedoraproject.org/cgit/rpms/xrootd.git/commit/?id=3c4a5ea8217....
Change:
-%ifarch %{ix86} %{arm}
-%ifarch %{arm}
+%ifarch %{arm}
Thanks.
Full change:
============
commit d3dab6243eb07372049f599cba21d2eda4ac37f3
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Thu Feb 24 21:42:50 2022 +0100
Update to version 5.4.1
Drop patches accepted upstream
diff --git a/0001-Add-missing-include.patch b/0001-Add-missing-include.patch
deleted file mode 100644
index c65da09..0000000
--- a/0001-Add-missing-include.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From fa7b5bd944771a986e0160afa0252427f9bd084e Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Sun, 12 Dec 2021 22:33:44 +0100
-Subject: [PATCH] Add missing include
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Fixes GNU/Hurd build
-
-/<<PKGBUILDDIR>>/src/XrdApps/XrdPrep.cc: In function ‘int main(int, char**)’:
-/<<PKGBUILDDIR>>/src/XrdApps/XrdPrep.cc:109:34: error: ‘MAXPATHLEN’ was not declared in this scope
- 109 | static const int MaxPathLen = MAXPATHLEN+1;
- | ^~~~~~~~~~
-/<<PKGBUILDDIR>>/src/XrdApps/XrdPrep.cc:213:24: error: size of array ‘fBuff’ is not an integral constant-expression
- 213 | char *sP, fBuff[MaxPathLen];
- | ^~~~~~~~~~
-src/CMakeFiles/xrdprep.dir/build.make:78: recipe for target 'src/CMakeFiles/xrdprep.dir/XrdApps/XrdPrep.cc.o' failed
----
- src/XrdApps/XrdPrep.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/XrdApps/XrdPrep.cc b/src/XrdApps/XrdPrep.cc
-index b90c521c8..1f2d15af2 100644
---- a/src/XrdApps/XrdPrep.cc
-+++ b/src/XrdApps/XrdPrep.cc
-@@ -42,6 +42,7 @@
-
- #include "XrdOuc/XrdOucEnv.hh"
- #include "XrdSys/XrdSysE2T.hh"
-+#include "XrdSys/XrdSysPlatform.hh"
- #include "XrdCl/XrdClFileSystem.hh"
-
- using namespace XrdCl;
---
-2.33.1
-
diff --git a/0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch b/0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch
new file mode 100644
index 0000000..06010de
--- /dev/null
+++ b/0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch
@@ -0,0 +1,27 @@
+From fdb74096242e76427b64c0f82dba77b05e611ad9 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Thu, 24 Feb 2022 18:58:20 +0100
+Subject: [PATCH] Disable LTO for XrdPosix on 32 bit architectures
+
+---
+ src/XrdPosix.cmake | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/XrdPosix.cmake b/src/XrdPosix.cmake
+index cf3247818..453c20379 100644
+--- a/src/XrdPosix.cmake
++++ b/src/XrdPosix.cmake
+@@ -60,6 +60,10 @@ add_library(
+ XrdPosix/XrdPosixExtern.hh
+ XrdPosix/XrdPosixOsDep.hh )
+
++if(CMAKE_SIZEOF_VOID_P EQUAL 4)
++ target_compile_options(XrdPosixPreload PRIVATE -fno-lto)
++endif()
++
+ target_link_libraries(
+ XrdPosixPreload
+ XrdPosix
+--
+2.35.1
+
diff --git a/0001-Fix-compilation-on-GCC-4.8.patch b/0001-Fix-compilation-on-GCC-4.8.patch
deleted file mode 100644
index ec41f60..0000000
--- a/0001-Fix-compilation-on-GCC-4.8.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From e7cf71c11f6504c6ff7a504a9e134ae66d923aa6 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Tue, 14 Dec 2021 16:33:13 +0100
-Subject: [PATCH] Fix compilation on GCC 4.8
-
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc: In member function 'bool XrdAccSciTokens::GenerateAcls(const string&, uint64_t&, {anonymous}::AccessRulesRaw&, std::string&, std::string&, std::string&, std::vector<{anonymous}::MapRule>&, std::vector<std::basic_string<char> >&)':
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: error: no matching function for call to 'regex_replace(std::string&, std::regex, const char [2])'
- std::regex("//"), "/");
- ^
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: note: candidates are:
-In file included from /usr/include/c++/4.8.2/regex:62:0,
- from ../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:18:
-/usr/include/c++/4.8.2/bits/regex.h:2162:5: note: template<class _Out_iter, class _Bi_iter, class _Rx_traits, class _Ch_type> _Out_iter std::regex_replace(_Out_iter, _Bi_iter, _Bi_iter, const std::basic_regex<_Ch_type, _Rx_traits>&, const std::basic_string<_Ch_type>&, std::regex_constants::match_flag_type)
- regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
- ^
-/usr/include/c++/4.8.2/bits/regex.h:2162:5: note: template argument deduction/substitution failed:
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: note: deduced conflicting types for parameter '_Bi_iter' ('std::basic_regex<char>' and 'const char*')
- std::regex("//"), "/");
- ^
-In file included from /usr/include/c++/4.8.2/regex:62:0,
- from ../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:18:
-/usr/include/c++/4.8.2/bits/regex.h:2182:5: note: template<class _Rx_traits, class _Ch_type> std::basic_string<_Ch_type> std::regex_replace(const std::basic_string<_Ch_type>&, const std::basic_regex<_Ch_type, _Rx_traits>&, const std::basic_string<_Ch_type>&, std::regex_constants::match_flag_type)
- regex_replace(const basic_string<_Ch_type>& __s,
- ^
-/usr/include/c++/4.8.2/bits/regex.h:2182:5: note: template argument deduction/substitution failed:
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: note: mismatched types 'const std::basic_string<_Ch_type>' and 'const char [2]'
- std::regex("//"), "/");
- ^
----
- src/XrdMacaroons/XrdMacaroonsHandler.cc | 1 -
- src/XrdSciTokens/XrdSciTokensAccess.cc | 7 ++++---
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/XrdMacaroons/XrdMacaroonsHandler.cc b/src/XrdMacaroons/XrdMacaroonsHandler.cc
-index 42bda11ff..767505fd7 100644
---- a/src/XrdMacaroons/XrdMacaroonsHandler.cc
-+++ b/src/XrdMacaroons/XrdMacaroonsHandler.cc
-@@ -1,5 +1,4 @@
-
--#include <regex>
- #include <cstring>
- #include <string>
- #include <iostream>
-diff --git a/src/XrdSciTokens/XrdSciTokensAccess.cc b/src/XrdSciTokens/XrdSciTokensAccess.cc
-index 29dcfacfb..cf1abd406 100644
---- a/src/XrdSciTokens/XrdSciTokensAccess.cc
-+++ b/src/XrdSciTokens/XrdSciTokensAccess.cc
-@@ -15,7 +15,6 @@
- #include <fstream>
- #include <unordered_map>
- #include <tuple>
--#include <regex>
-
- #include "INIReader.h"
- #include "picojson.h"
-@@ -648,8 +647,10 @@ private:
- for (auto path : config.m_base_paths) {
- auto path_rule = rule;
- path_rule.m_path_prefix = path + rule.m_path_prefix;
-- path_rule.m_path_prefix = std::regex_replace(path_rule.m_path_prefix,
-- std::regex("//"), "/");
-+ auto pos = path_rule.m_path_prefix.find("//");
-+ if (pos != std::string::npos) {
-+ path_rule.m_path_prefix.erase(pos + 1, 1);
-+ }
- map_rules.emplace_back(path_rule);
- }
- }
---
-2.33.1
-
diff --git a/0001-Fix-compilation-when-char-is-unsigned.patch b/0001-Fix-compilation-when-char-is-unsigned.patch
deleted file mode 100644
index b7c76e9..0000000
--- a/0001-Fix-compilation-when-char-is-unsigned.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From b29d0f021275d105f719dbefb07c8dfe17b95809 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Sat, 11 Dec 2021 07:39:20 +0100
-Subject: [PATCH] Fix compilation when char is unsigned (armv7hl, aarch64,
- ppc64le, s390x)
-
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc: In static member function 'static XrdNetPMark* XrdNetPMarkCfg::Config(XrdSysError*, XrdScheduler*, XrdSysTrace*, bool&)':
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc:271:16: error: comparison is always false due to limited range of data type [-Werror=type-limits]
- 271 | if (useFFly < 0)
- | ~~~~~~~~^~~
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc: In static member function 'static int XrdNetPMarkCfg::Parse(XrdSysError*, XrdOucStream&)':
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc:1037:20: error: comparison is always false due to limited range of data type [-Werror=type-limits]
- 1037 | if (useFFly < 0) useFFly = 1;
- | ~~~~~~~~^~~
----
- src/XrdNet/XrdNetPMarkCfg.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdNet/XrdNetPMarkCfg.cc b/src/XrdNet/XrdNetPMarkCfg.cc
-index d82b2938b..e7cb00ed5 100644
---- a/src/XrdNet/XrdNetPMarkCfg.cc
-+++ b/src/XrdNet/XrdNetPMarkCfg.cc
-@@ -132,7 +132,7 @@ bool tryVO = false;
- bool useDefs = false;
-
- bool useFLbl = false;
--char useFFly = -1;
-+signed char useFFly = -1;
- bool addFLFF = false;
- bool useSTag = true;
-
---
-2.33.1
-
diff --git a/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch b/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
deleted file mode 100644
index 513fff6..0000000
--- a/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 654133bc1158e4815a45dc8dd70023e5fff82424 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Thu, 20 Jan 2022 00:19:08 +0100
-Subject: [PATCH] Fix compiler warnings about pointers used after free:
-
-.../src/XrdCms/XrdCmsUtils.cc: In function 'XrdCmsUtils::ParseMan(XrdSysError*, XrdOucTList**, char*, char*, int*, bool)':
-.../src/XrdCms/XrdCmsUtils.cc:226:43: error: pointer 'newMans_175' may be used after 'operator delete(void*, unsigned long)' [-Werror=use-after-free]
- 226 | if (!plus || strcmp(hSpec, newP->text)) isBad = false;
- | ~~~~~~^~~~
-.../src/XrdCms/XrdCmsUtils.cc:221:27: note: call to 'operator delete(void*, unsigned long)' here
- 221 | delete newP;
- | ^~~~
-
-.../src/XrdCl/XrdClCopy.cc: In function 'IndexRemote(XrdCl::FileSystem*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned short)':
-.../src/XrdCl/XrdClCopy.cc:442:17: error: pointer used after 'operator delete(void*, unsigned long)' [-Werror=use-after-free]
- 442 | log->Error( AppMsg, "Bad URL: %s", current->Path );
- | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.../src/XrdCl/XrdClCopy.cc:441:14: note: call to 'operator delete(void*, unsigned long)' here
- 441 | delete current;
- | ^~~~~~~
----
- src/XrdCl/XrdClCopy.cc | 2 +-
- src/XrdCms/XrdCmsUtils.cc | 18 +++++++++---------
- 2 files changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/src/XrdCl/XrdClCopy.cc b/src/XrdCl/XrdClCopy.cc
-index 78d27589c..c2b754bf5 100644
---- a/src/XrdCl/XrdClCopy.cc
-+++ b/src/XrdCl/XrdClCopy.cc
-@@ -438,8 +438,8 @@ XrdCpFile *IndexRemote( XrdCl::FileSystem *fs,
- current = new XrdCpFile( path.c_str(), badUrl );
- if( badUrl )
- {
-- delete current;
- log->Error( AppMsg, "Bad URL: %s", current->Path );
-+ delete current;
- return 0;
- }
-
-diff --git a/src/XrdCms/XrdCmsUtils.cc b/src/XrdCms/XrdCmsUtils.cc
-index 49c448849..8d25973bc 100644
---- a/src/XrdCms/XrdCmsUtils.cc
-+++ b/src/XrdCms/XrdCmsUtils.cc
-@@ -223,15 +223,15 @@ bool XrdCmsUtils::ParseMan(XrdSysError *eDest, XrdOucTList **oldMans,
- }
- oldP = oldP->next;
- }
-- if (!plus || strcmp(hSpec, newP->text)) isBad = false;
-- else {eDest->Say("Config warning: "
-- "Cyclic DNS registration for ",newP->text,"\n"
-- "Config warning: This cluster will exhibit "
-- "undefined behaviour!!!");
-- isBad = true;
-- }
-- if (!oldP)
-- {appList = SInsert(appList, newP);
-+ if (!oldP)
-+ {if (!plus || strcmp(hSpec, newP->text)) isBad = false;
-+ else {eDest->Say("Config warning: "
-+ "Cyclic DNS registration for ",newP->text,"\n"
-+ "Config warning: This cluster will exhibit "
-+ "undefined behaviour!!!");
-+ isBad = true;
-+ }
-+ appList = SInsert(appList, newP);
- if (plus && !hush) Display(eDest, hSpec, newP->text, isBad);
- }
- }
---
-2.34.1
-
diff --git a/0001-Fix-warning-about-uninitialized-variable.patch b/0001-Fix-warning-about-uninitialized-variable.patch
deleted file mode 100644
index fe72398..0000000
--- a/0001-Fix-warning-about-uninitialized-variable.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 0898ed380a457ff1c0c2547953d0fd36eaeaeebe Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 17 Jan 2022 09:14:08 +0100
-Subject: [PATCH 1/4] Fix warning about uninitialized variable
-
-The cond variable is initialized using the mutex before the mutex is
-initialized. Changing the order of the members in the class ensures
-the mutex is initialized first.
-
-.../src/./XrdXrootd/XrdXrootdAioTask.hh:70:51: error: member 'XrdXrootdAioTask::aioMutex' is used uninitialized [-Werror=uninitialized]
- 70 | : XrdJob(what), aioReady(aioMutex) {}
- | ^~~~~~~~
-cc1plus: all warnings being treated as errors
----
- src/XrdXrootd/XrdXrootdAioTask.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdXrootd/XrdXrootdAioTask.hh b/src/XrdXrootd/XrdXrootdAioTask.hh
-index 2c49ff7d1..c04858bba 100644
---- a/src/XrdXrootd/XrdXrootdAioTask.hh
-+++ b/src/XrdXrootd/XrdXrootdAioTask.hh
-@@ -83,8 +83,8 @@ virtual bool CopyL2F(XrdXrootdAioBuff *aioP) = 0;
-
- static const char* TraceID;
-
-- XrdSysCondVar2 aioReady;
- XrdSysMutex aioMutex; // Locks private data
-+ XrdSysCondVar2 aioReady;
- XrdXrootdAioBuff* pendQ;
- XrdXrootdAioBuff* pendQEnd; // -> Last element in pendQ
-
---
-2.34.1
-
diff --git a/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch b/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
deleted file mode 100644
index 7b7cf1d..0000000
--- a/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-From 0dc292fbf63d25c6a9e000a2e66d7e3e0b8db735 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 24 Jan 2022 06:56:43 +0100
-Subject: [PATCH] Fix warnings about allocations exceeding maximum object size
-
-In member function 'Init',
- inlined from 'Init' at .../src/Xrd/XrdBuffXL.cc:64:6:
-.../src/Xrd/XrdBuffXL.cc:90:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 90 | bucket = new BuckVec[lg2+1];
- | ^
-/usr/include/c++/12/new: In member function 'Init':
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-.../src/XrdOuc/XrdOucBuffer.cc: In member function '__ct_base ':
-.../src/XrdOuc/XrdOucBuffer.cc:79:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 79 | bSlot = new BuffSlot[slots];
- | ^
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-.../src/XrdNet/XrdNetUtils.cc: In function 'GetAddrs':
-.../src/XrdNet/XrdNetUtils.cc:262:35: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 262 | *aVec = new XrdNetAddr[aVsz];
- | ^
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-In member function '__ct ',
- inlined from '__ct_base ' at .../src/XrdXrootd/XrdXrootdJob.cc:459:29:
-.../src/./XrdOuc/XrdOucTable.hh:43:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 43 | Table = new OucTable[maxe];
- | ^
-/usr/include/c++/12/new: In member function '__ct_base ':
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-.../src/XrdPosix/XrdPosixAdmin.cc: In member function 'FanOut':
-.../src/XrdPosix/XrdPosixAdmin.cc:69:27: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 69 | uVec = new XrdCl::URL[i];
- | ^
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
----
- src/Xrd/XrdBuffXL.cc | 3 ++-
- src/XrdNet/XrdNetUtils.cc | 2 +-
- src/XrdOuc/XrdOucBuffer.cc | 2 +-
- src/XrdOuc/XrdOucTable.hh | 2 +-
- src/XrdPosix/XrdPosixAdmin.cc | 2 +-
- 5 files changed, 6 insertions(+), 5 deletions(-)
-
-diff --git a/src/Xrd/XrdBuffXL.cc b/src/Xrd/XrdBuffXL.cc
-index f84ef77cb..f769522af 100644
---- a/src/Xrd/XrdBuffXL.cc
-+++ b/src/Xrd/XrdBuffXL.cc
-@@ -63,7 +63,8 @@ XrdBuffXL::XrdBuffXL() : bucket(0), totalo(0), pagsz(getpagesize()), slots(0),
-
- void XrdBuffXL::Init(int maxMSZ)
- {
-- int lg2, chunksz;
-+ unsigned int lg2;
-+ int chunksz;
-
- // If this is a duplicate call, delete the previous setup
- //
-diff --git a/src/XrdNet/XrdNetUtils.cc b/src/XrdNet/XrdNetUtils.cc
-index 0f5eac348..fbc6c5ff7 100644
---- a/src/XrdNet/XrdNetUtils.cc
-+++ b/src/XrdNet/XrdNetUtils.cc
-@@ -259,7 +259,7 @@ const char *XrdNetUtils::GetAddrs(const char *hSpec,
- //
- if (aInfo.aNum4 || aInfo.aNum6)
- {aVsz = aInfo.aNum4 + aInfo.aNum6;
-- *aVec = new XrdNetAddr[aVsz];
-+ *aVec = new XrdNetAddr[(unsigned int)aVsz];
- FillAddr(aInfo, *aVec);
- }
-
-diff --git a/src/XrdOuc/XrdOucBuffer.cc b/src/XrdOuc/XrdOucBuffer.cc
-index 2faee1d51..10f79d999 100644
---- a/src/XrdOuc/XrdOucBuffer.cc
-+++ b/src/XrdOuc/XrdOucBuffer.cc
-@@ -76,7 +76,7 @@ XrdOucBuffPool::XrdOucBuffPool(int minsz, int maxsz,
-
- // Allocate a slot vector for this
- //
-- bSlot = new BuffSlot[slots];
-+ bSlot = new BuffSlot[(unsigned int)slots];
-
- // Complete initializing the slot vector
- //
-diff --git a/src/XrdOuc/XrdOucTable.hh b/src/XrdOuc/XrdOucTable.hh
-index 92058c42b..2805a259c 100644
---- a/src/XrdOuc/XrdOucTable.hh
-+++ b/src/XrdOuc/XrdOucTable.hh
-@@ -40,7 +40,7 @@ public:
-
- XrdOucTable(int maxe)
- {int i;
-- Table = new OucTable[maxe];
-+ Table = new OucTable[(unsigned int)maxe];
- maxnum = maxe; curnum = 0; avlnum = 0;
- for (i = 1; i < maxe; i++) Table[i-1].Fnum = i;
- Table[maxe-1].Fnum = -1;
-diff --git a/src/XrdPosix/XrdPosixAdmin.cc b/src/XrdPosix/XrdPosixAdmin.cc
-index c26571394..2cad5517e 100644
---- a/src/XrdPosix/XrdPosixAdmin.cc
-+++ b/src/XrdPosix/XrdPosixAdmin.cc
-@@ -49,7 +49,7 @@ XrdCl::URL *XrdPosixAdmin::FanOut(int &num)
- XrdCl::URL *uVec;
- XrdNetAddr netLoc;
- const char *hName;
-- int i;
-+ unsigned int i;
-
- // Make sure admin is ok
- //
---
-2.34.1
-
diff --git a/0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch b/0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch
new file mode 100644
index 0000000..de803fc
--- /dev/null
+++ b/0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch
@@ -0,0 +1,94 @@
+From 8095e021588150a584371ffbbf50e5b0bb7d4ede Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Fri, 4 Feb 2022 21:20:47 +0100
+Subject: [PATCH] Ignore -Warray-bounds warnings from stricter check in gcc 12.
+
+.../src/XrdFrm/XrdFrmMonitor.cc: In function 'XrdFrmMonitor::Init(char const*, char const*, char const*)':
+.../src/XrdFrm/XrdFrmMonitor.cc:158:12: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 158 | mP->hdr.pseq = 0;
+ | ~~~~~~~~^~~~
+.../src/XrdFrm/XrdFrmMonitor.cc:155:26: note: object of size [13, 1036] allocated by 'malloc'
+ 155 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+.../src/XrdFrm/XrdFrmMonitor.cc:159:8: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 159 | mP->dictid = 0;
+ | ~~~~^~~~~~
+.../src/XrdFrm/XrdFrmMonitor.cc:155:26: note: object of size [13, 1036] allocated by 'malloc'
+ 155 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+
+.../src/XrdXrootd/XrdXrootdMonitor.cc: In function 'XrdXrootdMonitor::Init(XrdScheduler*, XrdSysError*, char const*, char const*, char const*, int)':
+.../src/XrdXrootd/XrdXrootdMonitor.cc:634:12: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 634 | mP->hdr.pseq = 0;
+ | ~~~~~~~~^~~~
+.../src/XrdXrootd/XrdXrootdMonitor.cc:631:26: note: object of size [13, 1036] allocated by 'malloc'
+ 631 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+.../src/XrdXrootd/XrdXrootdMonitor.cc:635:8: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 635 | mP->dictid = 0;
+ | ~~~~^~~~~~
+.../src/XrdXrootd/XrdXrootdMonitor.cc:631:26: note: object of size [13, 1036] allocated by 'malloc'
+ 631 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+---
+ src/XrdFrm/XrdFrmMonitor.cc | 9 +++++++++
+ src/XrdXrootd/XrdXrootdMonitor.cc | 9 +++++++++
+ 2 files changed, 18 insertions(+)
+
+diff --git a/src/XrdFrm/XrdFrmMonitor.cc b/src/XrdFrm/XrdFrmMonitor.cc
+index a453617a6..5abe5ff31 100644
+--- a/src/XrdFrm/XrdFrmMonitor.cc
++++ b/src/XrdFrm/XrdFrmMonitor.cc
+@@ -149,6 +149,12 @@ int XrdFrmMonitor::Init(const char *iHost, const char *iProg, const char *iName)
+ //
+ if (!isEnabled) return 1;
+
++// Ignore array bounds warning from gcc 12 triggered because the allocated
++// memory for the XrdXrootdMonMap is smaller than sizeof(XrdXrootdMonMap)
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Warray-bounds"
++#endif
+ // Create identification record
+ //
+ idLen = strlen(iBuff) + sizeof(XrdXrootdMonHeader) + sizeof(kXR_int32);
+@@ -158,6 +164,9 @@ int XrdFrmMonitor::Init(const char *iHost, const char *iProg, const char *iName)
+ mP->hdr.pseq = 0;
+ mP->dictid = 0;
+ strcpy(mP->info, iBuff);
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic pop
++#endif
+
+ // Setup the primary destination
+ //
+diff --git a/src/XrdXrootd/XrdXrootdMonitor.cc b/src/XrdXrootd/XrdXrootdMonitor.cc
+index 2926bae75..bb0f0a242 100644
+--- a/src/XrdXrootd/XrdXrootdMonitor.cc
++++ b/src/XrdXrootd/XrdXrootdMonitor.cc
+@@ -625,6 +625,12 @@ void XrdXrootdMonitor::Init(XrdScheduler *sp, XrdSysError *errp,
+ kySIDSZ = strlen(kySID);
+ monHost = strdup(iHost);
+
++// Ignore array bounds warning from gcc 12 triggered because the allocated
++// memory for the XrdXrootdMonMap is smaller than sizeof(XrdXrootdMonMap)
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Warray-bounds"
++#endif
+ // Create identification record
+ //
+ idLen = strlen(iBuff) + sizeof(XrdXrootdMonHeader) + sizeof(kXR_int32);
+@@ -634,6 +640,9 @@ void XrdXrootdMonitor::Init(XrdScheduler *sp, XrdSysError *errp,
+ mP->hdr.pseq = 0;
+ mP->dictid = 0;
+ strcpy(mP->info, iBuff);
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic pop
++#endif
+
+ // Generate a CGI version of all the variations
+ //
+--
+2.34.1
+
diff --git a/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch b/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
deleted file mode 100644
index 34f0cab..0000000
--- a/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From 7615d866986131f3548b5863b38872a2e4dc58d9 Mon Sep 17 00:00:00 2001
-From: Andrew Hanushevsky <abh(a)stanford.edu>
-Date: Thu, 20 Jan 2022 23:22:09 -0800
-Subject: [PATCH] [Server] Prevent SEGV on busy systems due to missing lock
- call for background jobs.
-
----
- src/XrdXrootd/XrdXrootdJob.cc | 50 +++++++++++++++++++++++++++++------
- 1 file changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/src/XrdXrootd/XrdXrootdJob.cc b/src/XrdXrootd/XrdXrootdJob.cc
-index 1b2703d96..467323de5 100644
---- a/src/XrdXrootd/XrdXrootdJob.cc
-+++ b/src/XrdXrootd/XrdXrootdJob.cc
-@@ -37,6 +37,7 @@
- #include "Xrd/XrdScheduler.hh"
- #include "XrdOuc/XrdOucProg.hh"
- #include "XrdOuc/XrdOucStream.hh"
-+#include "XrdSys/XrdSysError.hh"
- #include "XrdSys/XrdSysPlatform.hh"
- #include "XrdSys/XrdSysRAtomic.hh"
- #include "XrdXrootd/XrdXrootdJob.hh"
-@@ -99,6 +100,12 @@ static const int argvnum = sizeof(theArgs)/sizeof(theArgs[0]);
- /* G l o b a l F u n c t i o n s */
- /******************************************************************************/
-
-+namespace XrdXrootd
-+{
-+extern XrdSysError eLog;
-+}
-+using namespace XrdXrootd;
-+
- extern XrdSysTrace XrdXrootdTrace;
-
- int XrdXrootdJobWaiting(XrdXrootdJob2Do *item, void *arg)
-@@ -152,10 +159,15 @@ XrdXrootdJob2Do::~XrdXrootdJob2Do()
- /******************************************************************************/
- /* D o I t */
- /******************************************************************************/
-+
-+#define jobInfo theJob->JobName<<' '<<(theArgs[1] ? theArgs[1] : "")\
-+ <<(theArgs[2] ? " " : "")<<(theArgs[2] ? theArgs[2] : "")
-
- void XrdXrootdJob2Do::DoIt()
- {
-+ static const char *TraceID = "jobXeq";
- XrdXrootdJob2Do *jp = 0;
-+ const char *endStat = " completed";
- char *lp = 0;
- int i, rc = 0;
-
-@@ -163,9 +175,11 @@ void XrdXrootdJob2Do::DoIt()
- // perform the actual function and get the result and send to any async clients
- //
- if (Status != Job_Cancel)
-- {if ((rc = theJob->theProg->Run(&jobStream, theArgs[1], theArgs[2],
-+ {TRACE(REQ, "Job "<<jobInfo<<" started");
-+ if ((rc = theJob->theProg->Run(&jobStream, theArgs[1], theArgs[2],
- theArgs[3], theArgs[4])))
- {Status = Job_Cancel;
-+ endStat= " failed";
- lp = jobStream.GetLine();
- theJob->myMutex.Lock();
- }
-@@ -173,15 +187,22 @@ void XrdXrootdJob2Do::DoIt()
- rc = theJob->theProg->RunDone(jobStream);
- theJob->myMutex.Lock();
- if ((rc && rc != -EPIPE) || (rc == -EPIPE && (!lp || !(*lp))))
-- Status = Job_Cancel;
-+ {Status = Job_Cancel; endStat = " failed";}
- else if (Status != Job_Cancel)
- {Status = Job_Done;
- for (i = 0; i < numClients; i++)
- if (!Client[i].isSync) {sendResult(lp); break;}
- }
- }
-+ } else {
-+ endStat = " cancelled";
-+ theJob->myMutex.Lock();
- }
-
-+// Produce a trace record
-+//
-+ TRACE(REQ, "Job "<<jobInfo<<endStat);
-+
- // If the number of jobs > than the max allowed, then redrive a waiting job
- // if in fact we represent a legitimate job slot (this could a phantom slot
- // due to ourselves being cancelled.
-@@ -313,7 +334,7 @@ XrdOucTList *XrdXrootdJob2Do::lstClient()
- /* v e r C l i e n t */
- /******************************************************************************/
-
--int XrdXrootdJob2Do::verClient(int dodel)
-+int XrdXrootdJob2Do::verClient(int dodel) // Caller must have theJob->myMutex
- {
- int i, j, k;
-
-@@ -330,9 +351,16 @@ int XrdXrootdJob2Do::verClient(int dodel)
- //
- if (!numClients && dodel)
- {XrdXrootdJob2Do *jp = theJob->JobTable.Remove(JobNum);
-- if (jp->Status == XrdXrootdJob2Do::Job_Waiting) theJob->numJobs--;
-- delete jp;
-- return 0;
-+ if (jp)
-+ {if (jp->Status == XrdXrootdJob2Do::Job_Waiting) theJob->numJobs--;
-+ delete jp;
-+ return 0;
-+ } else {
-+ char ebuff[80];
-+ snprintf(ebuff, sizeof(ebuff), "Unable to find %s job %d;",
-+ theJob->JobName, JobNum);
-+ eLog.Emsg("Job2Do", ebuff, "job slot disabled!");
-+ }
- }
- return numClients;
- }
-@@ -341,7 +369,7 @@ int XrdXrootdJob2Do::verClient(int dodel)
- /* R e d r i v e */
- /******************************************************************************/
-
--void XrdXrootdJob2Do::Redrive()
-+void XrdXrootdJob2Do::Redrive() // Caller must have theJob->myMutex held
- {
- XrdXrootdJob2Do *jp;
- int Start = 0;
-@@ -364,10 +392,12 @@ void XrdXrootdJob2Do::Redrive()
- /******************************************************************************/
- /* s e n d R e s u l t */
- /******************************************************************************/
-+
-+// Caller must have theJob->myMutex locked.
-
- void XrdXrootdJob2Do::sendResult(char *lp, int caned, int jrc)
- {
-- static const char *TraceID = "sendResult";
-+ static const char *TraceID = "jobSendResult";
- static const kXR_int32 Xcan = static_cast<kXR_int32>(htonl(kXR_Cancelled));
- XrdXrootdReqID ReqID;
- struct iovec jobVec[6];
-@@ -619,6 +649,8 @@ int XrdXrootdJob::Schedule(const char *jkey,
- /* C l e a n U p */
- /******************************************************************************/
-
-+// The caller must have myMutex locked
-+
- void XrdXrootdJob::CleanUp(XrdXrootdJob2Do *jp)
- {
- int theStatus = jp->Status;
-@@ -641,6 +673,8 @@ void XrdXrootdJob::CleanUp(XrdXrootdJob2Do *jp)
- /* s e n d R e s u l t */
- /******************************************************************************/
-
-+// Caller must have myMutex locked.
-+
- int XrdXrootdJob::sendResult(XrdXrootdResponse *resp,
- const char *rpfx,
- XrdXrootdJob2Do *job)
---
-2.34.1
-
diff --git a/0002-Fix-warning-about-dereferncing-null-pointer.patch b/0002-Fix-warning-about-dereferncing-null-pointer.patch
deleted file mode 100644
index 09c04e2..0000000
--- a/0002-Fix-warning-about-dereferncing-null-pointer.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 1780fc12fb947a2bda22007a715527a18621a6cb Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 17 Jan 2022 09:21:23 +0100
-Subject: [PATCH 2/4] Fix warning about dereferncing null pointer
-
-In member function 'XrdCl::ChunkHandler::ToPgInfo(XrdCl::AnyObject*, XrdCl::PageInfo*&)',
- inlined from 'XrdCl::ChunkHandler::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*)' at .../src/XrdCl/XrdClXCpSrc.cc:58:17:
-.../src/XrdCl/XrdClXCpSrc.cc:97:66: error: 'this' pointer is null [-Werror=nonnull]
- 97 | *chunk = PageInfo( rsp->offset, rsp->length, rsp->buffer );
- | ^
-In file included from .../src/./XrdCl/XrdClFileSystem.hh:32,
- from .../src/./XrdCl/XrdClFile.hh:28,
- from .../src/./XrdCl/XrdClXCpSrc.hh:28,
- from .../src/XrdCl/XrdClXCpSrc.cc:25:
-.../src/./XrdCl/XrdClXRootDResponses.hh: In member function 'XrdCl::ChunkHandler::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*)':
-.../src/./XrdCl/XrdClXRootDResponses.hh:962:15: note: in a call to non-static member function 'XrdCl::PageInfo::operator=(XrdCl::PageInfo&&)'
- 962 | PageInfo& operator=( PageInfo &&pginf );
- | ^~~~~~~~
-cc1plus: all warnings being treated as errors
----
- src/XrdCl/XrdClXCpSrc.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdCl/XrdClXCpSrc.cc b/src/XrdCl/XrdClXCpSrc.cc
-index 532df79a4..c68fbc499 100644
---- a/src/XrdCl/XrdClXCpSrc.cc
-+++ b/src/XrdCl/XrdClXCpSrc.cc
-@@ -94,7 +94,7 @@ class ChunkHandler: public ResponseHandler
- {
- ChunkInfo *rsp = nullptr;
- response->Get( rsp );
-- *chunk = PageInfo( rsp->offset, rsp->length, rsp->buffer );
-+ chunk = new PageInfo( rsp->offset, rsp->length, rsp->buffer );
- response->Set( ( int* )0 );
- }
- }
---
-2.34.1
-
diff --git a/0003-Fix-warning-about-comparing-arrays.patch b/0003-Fix-warning-about-comparing-arrays.patch
deleted file mode 100644
index 33c8bcf..0000000
--- a/0003-Fix-warning-about-comparing-arrays.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 62337be8ada4692bfd10eceaa042e3c4a553ece8 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 17 Jan 2022 09:24:46 +0100
-Subject: [PATCH 3/4] Fix warning about comparing arrays
-
-Cast the arrays to pointers to avoid the warning
-
-.../src/XrdPosix/XrdPosixXrootd.cc:955:22: error: comparison between two arrays [-Werror=array-compare]
- 955 | if (dp32->d_name != dp64->d_name)
- | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
----
- src/XrdPosix/XrdPosixXrootd.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdPosix/XrdPosixXrootd.cc b/src/XrdPosix/XrdPosixXrootd.cc
-index 517dc07ec..cedb3ca40 100644
---- a/src/XrdPosix/XrdPosixXrootd.cc
-+++ b/src/XrdPosix/XrdPosixXrootd.cc
-@@ -952,7 +952,7 @@ struct dirent* XrdPosixXrootd::Readdir(DIR *dirp)
- if (!(dp64 = Readdir64(dirp))) return 0;
-
- dp32 = (struct dirent *)dp64;
-- if (dp32->d_name != dp64->d_name)
-+ if ((char*)dp32->d_name != (char*)dp64->d_name)
- {dp32->d_ino = dp64->d_ino;
- #if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__GNU__) && !(defined(__FreeBSD_kernel__) && defined(__GLIBC__))
- dp32->d_off = dp64->d_off;
---
-2.34.1
-
diff --git a/0004-Do-not-give-up-ownership-of-ChunkInfo.patch b/0004-Do-not-give-up-ownership-of-ChunkInfo.patch
deleted file mode 100644
index 0d88bab..0000000
--- a/0004-Do-not-give-up-ownership-of-ChunkInfo.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 86d40e79b4ece53d9e5c2dfb6b40ff77888ebad6 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Tue, 18 Jan 2022 16:01:34 +0100
-Subject: [PATCH 4/4] Do not give up ownership of ChunkInfo
-
----
- src/XrdCl/XrdClXCpSrc.cc | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/src/XrdCl/XrdClXCpSrc.cc b/src/XrdCl/XrdClXCpSrc.cc
-index c68fbc499..c19332c74 100644
---- a/src/XrdCl/XrdClXCpSrc.cc
-+++ b/src/XrdCl/XrdClXCpSrc.cc
-@@ -95,7 +95,6 @@ class ChunkHandler: public ResponseHandler
- ChunkInfo *rsp = nullptr;
- response->Get( rsp );
- chunk = new PageInfo( rsp->offset, rsp->length, rsp->buffer );
-- response->Set( ( int* )0 );
- }
- }
-
---
-2.34.1
-
diff --git a/xrootd.spec b/xrootd.spec
index 4266a0b..89d82a4 100644
--- a/xrootd.spec
+++ b/xrootd.spec
@@ -1,8 +1,3 @@
-%ifarch %{ix86} %{arm}
-# LTO does not work for the POSIX preload code on 32 bit architectures
-%define _lto_cflags %{nil}
-%endif
-
%if %{?fedora}%{!?fedora:0}
%ifarch %{ix86} %{arm}
%global ceph 0
@@ -18,32 +13,19 @@
Name: xrootd
Epoch: 1
-Version: 5.4.0
-Release: 5%{?dist}
+Version: 5.4.1
+Release: 1%{?dist}
Summary: Extended ROOT file server
License: LGPLv3+
URL: https://xrootd.slac.stanford.edu/
Source0: https://xrootd.slac.stanford.edu/download/v%{version}/%{name}-%{version}....
-# https://github.com/xrootd/xrootd/pull/1570
-Patch0: 0001-Fix-compilation-when-char-is-unsigned.patch
-# https://github.com/xrootd/xrootd/pull/1571
-Patch1: 0001-Fix-compilation-on-GCC-4.8.patch
-# https://github.com/xrootd/xrootd/pull/1573
-Patch2: 0001-Add-missing-include.patch
# https://github.com/xrootd/xrootd/pull/1575
-Patch3: 0001-Define-ENODATA-if-not-defined.patch
-# https://github.com/xrootd/xrootd/pull/1592
-Patch4: 0001-Fix-warning-about-uninitialized-variable.patch
-Patch5: 0002-Fix-warning-about-dereferncing-null-pointer.patch
-Patch6: 0003-Fix-warning-about-comparing-arrays.patch
-Patch7: 0004-Do-not-give-up-ownership-of-ChunkInfo.patch
-# https://github.com/xrootd/xrootd/pull/1598
-Patch8: 0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
-# https://github.com/xrootd/xrootd/pull/1600
-Patch9: 0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
-# Backport from upstream - fixes a gcc 12 compiler warning
-Patch10: 0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
+Patch0: 0001-Define-ENODATA-if-not-defined.patch
+# https://github.com/xrootd/xrootd/pull/1620
+Patch1: 0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch
+# Disable LTO for XrdPosix on 32 bit architectures
+Patch2: 0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch
BuildRequires: gcc-c++
%if %{?rhel}%{!?rhel:0} == 7
@@ -302,21 +284,13 @@ This package contains the API documentation of the xrootd libraries.
%patch0 -p1
%patch1 -p1
%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p1
%build
%if %{?fedora}%{!?fedora:0} >= 36
# Mark some warnings from gcc 12 as not errors
# These are likely bogus - hopefully they can be fixed in gcc updates
%set_build_flags
-CXXFLAGS="${CXXFLAGS} -Wno-error=array-bounds -Wno-error=restrict"
+CXXFLAGS="${CXXFLAGS} -Wno-error=restrict"
%endif
%cmake3 \
@@ -684,6 +658,10 @@ fi
%doc %{_pkgdocdir}
%changelog
+* Thu Feb 24 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.1-1
+- Update to version 5.4.1
+- Drop patches accepted upstream
+
* Mon Jan 31 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-5
- Use openssl 3 compatible code on EPEL 9
commit 9c466e1ca188cd34d84d43c6f1197e06682cac49
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Mon Jan 31 20:14:06 2022 +0100
Use openssl 3 compatible code on EPEL 9
diff --git a/xrootd.spec b/xrootd.spec
index aeab40b..4266a0b 100644
--- a/xrootd.spec
+++ b/xrootd.spec
@@ -19,7 +19,7 @@
Name: xrootd
Epoch: 1
Version: 5.4.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Extended ROOT file server
License: LGPLv3+
@@ -317,13 +317,10 @@ This package contains the API documentation of the xrootd libraries.
# These are likely bogus - hopefully they can be fixed in gcc updates
%set_build_flags
CXXFLAGS="${CXXFLAGS} -Wno-error=array-bounds -Wno-error=restrict"
-%ifarch %{arm}
-CXXFLAGS="${CXXFLAGS} -Wno-error=use-after-free"
-%endif
%endif
%cmake3 \
-%if %{?fedora}%{!?fedora:0} >= 36
+%if %{?fedora}%{!?fedora:0} >= 36 || %{?rhel}%{!?rhel:0} >= 9
-DWITH_OPENSSL3:BOOL=ON \
%endif
%if %{ceph}
@@ -687,6 +684,9 @@ fi
%doc %{_pkgdocdir}
%changelog
+* Mon Jan 31 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-5
+- Use openssl 3 compatible code on EPEL 9
+
* Mon Jan 24 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-4
- Fix compiler warnings from gcc 12
commit 3c4a5ea82176c86adc3219942a033a8ba673a089
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Mon Jan 24 10:05:25 2022 +0100
Fix compiler warnings from gcc 12
diff --git a/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch b/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
new file mode 100644
index 0000000..513fff6
--- /dev/null
+++ b/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
@@ -0,0 +1,71 @@
+From 654133bc1158e4815a45dc8dd70023e5fff82424 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Thu, 20 Jan 2022 00:19:08 +0100
+Subject: [PATCH] Fix compiler warnings about pointers used after free:
+
+.../src/XrdCms/XrdCmsUtils.cc: In function 'XrdCmsUtils::ParseMan(XrdSysError*, XrdOucTList**, char*, char*, int*, bool)':
+.../src/XrdCms/XrdCmsUtils.cc:226:43: error: pointer 'newMans_175' may be used after 'operator delete(void*, unsigned long)' [-Werror=use-after-free]
+ 226 | if (!plus || strcmp(hSpec, newP->text)) isBad = false;
+ | ~~~~~~^~~~
+.../src/XrdCms/XrdCmsUtils.cc:221:27: note: call to 'operator delete(void*, unsigned long)' here
+ 221 | delete newP;
+ | ^~~~
+
+.../src/XrdCl/XrdClCopy.cc: In function 'IndexRemote(XrdCl::FileSystem*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned short)':
+.../src/XrdCl/XrdClCopy.cc:442:17: error: pointer used after 'operator delete(void*, unsigned long)' [-Werror=use-after-free]
+ 442 | log->Error( AppMsg, "Bad URL: %s", current->Path );
+ | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.../src/XrdCl/XrdClCopy.cc:441:14: note: call to 'operator delete(void*, unsigned long)' here
+ 441 | delete current;
+ | ^~~~~~~
+---
+ src/XrdCl/XrdClCopy.cc | 2 +-
+ src/XrdCms/XrdCmsUtils.cc | 18 +++++++++---------
+ 2 files changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/src/XrdCl/XrdClCopy.cc b/src/XrdCl/XrdClCopy.cc
+index 78d27589c..c2b754bf5 100644
+--- a/src/XrdCl/XrdClCopy.cc
++++ b/src/XrdCl/XrdClCopy.cc
+@@ -438,8 +438,8 @@ XrdCpFile *IndexRemote( XrdCl::FileSystem *fs,
+ current = new XrdCpFile( path.c_str(), badUrl );
+ if( badUrl )
+ {
+- delete current;
+ log->Error( AppMsg, "Bad URL: %s", current->Path );
++ delete current;
+ return 0;
+ }
+
+diff --git a/src/XrdCms/XrdCmsUtils.cc b/src/XrdCms/XrdCmsUtils.cc
+index 49c448849..8d25973bc 100644
+--- a/src/XrdCms/XrdCmsUtils.cc
++++ b/src/XrdCms/XrdCmsUtils.cc
+@@ -223,15 +223,15 @@ bool XrdCmsUtils::ParseMan(XrdSysError *eDest, XrdOucTList **oldMans,
+ }
+ oldP = oldP->next;
+ }
+- if (!plus || strcmp(hSpec, newP->text)) isBad = false;
+- else {eDest->Say("Config warning: "
+- "Cyclic DNS registration for ",newP->text,"\n"
+- "Config warning: This cluster will exhibit "
+- "undefined behaviour!!!");
+- isBad = true;
+- }
+- if (!oldP)
+- {appList = SInsert(appList, newP);
++ if (!oldP)
++ {if (!plus || strcmp(hSpec, newP->text)) isBad = false;
++ else {eDest->Say("Config warning: "
++ "Cyclic DNS registration for ",newP->text,"\n"
++ "Config warning: This cluster will exhibit "
++ "undefined behaviour!!!");
++ isBad = true;
++ }
++ appList = SInsert(appList, newP);
+ if (plus && !hush) Display(eDest, hSpec, newP->text, isBad);
+ }
+ }
+--
+2.34.1
+
diff --git a/0001-Fix-warning-about-uninitialized-variable.patch b/0001-Fix-warning-about-uninitialized-variable.patch
new file mode 100644
index 0000000..fe72398
--- /dev/null
+++ b/0001-Fix-warning-about-uninitialized-variable.patch
@@ -0,0 +1,34 @@
+From 0898ed380a457ff1c0c2547953d0fd36eaeaeebe Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Mon, 17 Jan 2022 09:14:08 +0100
+Subject: [PATCH 1/4] Fix warning about uninitialized variable
+
+The cond variable is initialized using the mutex before the mutex is
+initialized. Changing the order of the members in the class ensures
+the mutex is initialized first.
+
+.../src/./XrdXrootd/XrdXrootdAioTask.hh:70:51: error: member 'XrdXrootdAioTask::aioMutex' is used uninitialized [-Werror=uninitialized]
+ 70 | : XrdJob(what), aioReady(aioMutex) {}
+ | ^~~~~~~~
+cc1plus: all warnings being treated as errors
+---
+ src/XrdXrootd/XrdXrootdAioTask.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/XrdXrootd/XrdXrootdAioTask.hh b/src/XrdXrootd/XrdXrootdAioTask.hh
+index 2c49ff7d1..c04858bba 100644
+--- a/src/XrdXrootd/XrdXrootdAioTask.hh
++++ b/src/XrdXrootd/XrdXrootdAioTask.hh
+@@ -83,8 +83,8 @@ virtual bool CopyL2F(XrdXrootdAioBuff *aioP) = 0;
+
+ static const char* TraceID;
+
+- XrdSysCondVar2 aioReady;
+ XrdSysMutex aioMutex; // Locks private data
++ XrdSysCondVar2 aioReady;
+ XrdXrootdAioBuff* pendQ;
+ XrdXrootdAioBuff* pendQEnd; // -> Last element in pendQ
+
+--
+2.34.1
+
diff --git a/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch b/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
new file mode 100644
index 0000000..7b7cf1d
--- /dev/null
+++ b/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
@@ -0,0 +1,125 @@
+From 0dc292fbf63d25c6a9e000a2e66d7e3e0b8db735 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Mon, 24 Jan 2022 06:56:43 +0100
+Subject: [PATCH] Fix warnings about allocations exceeding maximum object size
+
+In member function 'Init',
+ inlined from 'Init' at .../src/Xrd/XrdBuffXL.cc:64:6:
+.../src/Xrd/XrdBuffXL.cc:90:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
+ 90 | bucket = new BuckVec[lg2+1];
+ | ^
+/usr/include/c++/12/new: In member function 'Init':
+/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
+ 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ | ^
+
+.../src/XrdOuc/XrdOucBuffer.cc: In member function '__ct_base ':
+.../src/XrdOuc/XrdOucBuffer.cc:79:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
+ 79 | bSlot = new BuffSlot[slots];
+ | ^
+/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
+ 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ | ^
+
+.../src/XrdNet/XrdNetUtils.cc: In function 'GetAddrs':
+.../src/XrdNet/XrdNetUtils.cc:262:35: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
+ 262 | *aVec = new XrdNetAddr[aVsz];
+ | ^
+/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
+ 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ | ^
+
+In member function '__ct ',
+ inlined from '__ct_base ' at .../src/XrdXrootd/XrdXrootdJob.cc:459:29:
+.../src/./XrdOuc/XrdOucTable.hh:43:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
+ 43 | Table = new OucTable[maxe];
+ | ^
+/usr/include/c++/12/new: In member function '__ct_base ':
+/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
+ 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ | ^
+
+.../src/XrdPosix/XrdPosixAdmin.cc: In member function 'FanOut':
+.../src/XrdPosix/XrdPosixAdmin.cc:69:27: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
+ 69 | uVec = new XrdCl::URL[i];
+ | ^
+/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
+ 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ | ^
+---
+ src/Xrd/XrdBuffXL.cc | 3 ++-
+ src/XrdNet/XrdNetUtils.cc | 2 +-
+ src/XrdOuc/XrdOucBuffer.cc | 2 +-
+ src/XrdOuc/XrdOucTable.hh | 2 +-
+ src/XrdPosix/XrdPosixAdmin.cc | 2 +-
+ 5 files changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/src/Xrd/XrdBuffXL.cc b/src/Xrd/XrdBuffXL.cc
+index f84ef77cb..f769522af 100644
+--- a/src/Xrd/XrdBuffXL.cc
++++ b/src/Xrd/XrdBuffXL.cc
+@@ -63,7 +63,8 @@ XrdBuffXL::XrdBuffXL() : bucket(0), totalo(0), pagsz(getpagesize()), slots(0),
+
+ void XrdBuffXL::Init(int maxMSZ)
+ {
+- int lg2, chunksz;
++ unsigned int lg2;
++ int chunksz;
+
+ // If this is a duplicate call, delete the previous setup
+ //
+diff --git a/src/XrdNet/XrdNetUtils.cc b/src/XrdNet/XrdNetUtils.cc
+index 0f5eac348..fbc6c5ff7 100644
+--- a/src/XrdNet/XrdNetUtils.cc
++++ b/src/XrdNet/XrdNetUtils.cc
+@@ -259,7 +259,7 @@ const char *XrdNetUtils::GetAddrs(const char *hSpec,
+ //
+ if (aInfo.aNum4 || aInfo.aNum6)
+ {aVsz = aInfo.aNum4 + aInfo.aNum6;
+- *aVec = new XrdNetAddr[aVsz];
++ *aVec = new XrdNetAddr[(unsigned int)aVsz];
+ FillAddr(aInfo, *aVec);
+ }
+
+diff --git a/src/XrdOuc/XrdOucBuffer.cc b/src/XrdOuc/XrdOucBuffer.cc
+index 2faee1d51..10f79d999 100644
+--- a/src/XrdOuc/XrdOucBuffer.cc
++++ b/src/XrdOuc/XrdOucBuffer.cc
+@@ -76,7 +76,7 @@ XrdOucBuffPool::XrdOucBuffPool(int minsz, int maxsz,
+
+ // Allocate a slot vector for this
+ //
+- bSlot = new BuffSlot[slots];
++ bSlot = new BuffSlot[(unsigned int)slots];
+
+ // Complete initializing the slot vector
+ //
+diff --git a/src/XrdOuc/XrdOucTable.hh b/src/XrdOuc/XrdOucTable.hh
+index 92058c42b..2805a259c 100644
+--- a/src/XrdOuc/XrdOucTable.hh
++++ b/src/XrdOuc/XrdOucTable.hh
+@@ -40,7 +40,7 @@ public:
+
+ XrdOucTable(int maxe)
+ {int i;
+- Table = new OucTable[maxe];
++ Table = new OucTable[(unsigned int)maxe];
+ maxnum = maxe; curnum = 0; avlnum = 0;
+ for (i = 1; i < maxe; i++) Table[i-1].Fnum = i;
+ Table[maxe-1].Fnum = -1;
+diff --git a/src/XrdPosix/XrdPosixAdmin.cc b/src/XrdPosix/XrdPosixAdmin.cc
+index c26571394..2cad5517e 100644
+--- a/src/XrdPosix/XrdPosixAdmin.cc
++++ b/src/XrdPosix/XrdPosixAdmin.cc
+@@ -49,7 +49,7 @@ XrdCl::URL *XrdPosixAdmin::FanOut(int &num)
+ XrdCl::URL *uVec;
+ XrdNetAddr netLoc;
+ const char *hName;
+- int i;
++ unsigned int i;
+
+ // Make sure admin is ok
+ //
+--
+2.34.1
+
diff --git a/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch b/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
new file mode 100644
index 0000000..34f0cab
--- /dev/null
+++ b/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
@@ -0,0 +1,161 @@
+From 7615d866986131f3548b5863b38872a2e4dc58d9 Mon Sep 17 00:00:00 2001
+From: Andrew Hanushevsky <abh(a)stanford.edu>
+Date: Thu, 20 Jan 2022 23:22:09 -0800
+Subject: [PATCH] [Server] Prevent SEGV on busy systems due to missing lock
+ call for background jobs.
+
+---
+ src/XrdXrootd/XrdXrootdJob.cc | 50 +++++++++++++++++++++++++++++------
+ 1 file changed, 42 insertions(+), 8 deletions(-)
+
+diff --git a/src/XrdXrootd/XrdXrootdJob.cc b/src/XrdXrootd/XrdXrootdJob.cc
+index 1b2703d96..467323de5 100644
+--- a/src/XrdXrootd/XrdXrootdJob.cc
++++ b/src/XrdXrootd/XrdXrootdJob.cc
+@@ -37,6 +37,7 @@
+ #include "Xrd/XrdScheduler.hh"
+ #include "XrdOuc/XrdOucProg.hh"
+ #include "XrdOuc/XrdOucStream.hh"
++#include "XrdSys/XrdSysError.hh"
+ #include "XrdSys/XrdSysPlatform.hh"
+ #include "XrdSys/XrdSysRAtomic.hh"
+ #include "XrdXrootd/XrdXrootdJob.hh"
+@@ -99,6 +100,12 @@ static const int argvnum = sizeof(theArgs)/sizeof(theArgs[0]);
+ /* G l o b a l F u n c t i o n s */
+ /******************************************************************************/
+
++namespace XrdXrootd
++{
++extern XrdSysError eLog;
++}
++using namespace XrdXrootd;
++
+ extern XrdSysTrace XrdXrootdTrace;
+
+ int XrdXrootdJobWaiting(XrdXrootdJob2Do *item, void *arg)
+@@ -152,10 +159,15 @@ XrdXrootdJob2Do::~XrdXrootdJob2Do()
+ /******************************************************************************/
+ /* D o I t */
+ /******************************************************************************/
++
++#define jobInfo theJob->JobName<<' '<<(theArgs[1] ? theArgs[1] : "")\
++ <<(theArgs[2] ? " " : "")<<(theArgs[2] ? theArgs[2] : "")
+
+ void XrdXrootdJob2Do::DoIt()
+ {
++ static const char *TraceID = "jobXeq";
+ XrdXrootdJob2Do *jp = 0;
++ const char *endStat = " completed";
+ char *lp = 0;
+ int i, rc = 0;
+
+@@ -163,9 +175,11 @@ void XrdXrootdJob2Do::DoIt()
+ // perform the actual function and get the result and send to any async clients
+ //
+ if (Status != Job_Cancel)
+- {if ((rc = theJob->theProg->Run(&jobStream, theArgs[1], theArgs[2],
++ {TRACE(REQ, "Job "<<jobInfo<<" started");
++ if ((rc = theJob->theProg->Run(&jobStream, theArgs[1], theArgs[2],
+ theArgs[3], theArgs[4])))
+ {Status = Job_Cancel;
++ endStat= " failed";
+ lp = jobStream.GetLine();
+ theJob->myMutex.Lock();
+ }
+@@ -173,15 +187,22 @@ void XrdXrootdJob2Do::DoIt()
+ rc = theJob->theProg->RunDone(jobStream);
+ theJob->myMutex.Lock();
+ if ((rc && rc != -EPIPE) || (rc == -EPIPE && (!lp || !(*lp))))
+- Status = Job_Cancel;
++ {Status = Job_Cancel; endStat = " failed";}
+ else if (Status != Job_Cancel)
+ {Status = Job_Done;
+ for (i = 0; i < numClients; i++)
+ if (!Client[i].isSync) {sendResult(lp); break;}
+ }
+ }
++ } else {
++ endStat = " cancelled";
++ theJob->myMutex.Lock();
+ }
+
++// Produce a trace record
++//
++ TRACE(REQ, "Job "<<jobInfo<<endStat);
++
+ // If the number of jobs > than the max allowed, then redrive a waiting job
+ // if in fact we represent a legitimate job slot (this could a phantom slot
+ // due to ourselves being cancelled.
+@@ -313,7 +334,7 @@ XrdOucTList *XrdXrootdJob2Do::lstClient()
+ /* v e r C l i e n t */
+ /******************************************************************************/
+
+-int XrdXrootdJob2Do::verClient(int dodel)
++int XrdXrootdJob2Do::verClient(int dodel) // Caller must have theJob->myMutex
+ {
+ int i, j, k;
+
+@@ -330,9 +351,16 @@ int XrdXrootdJob2Do::verClient(int dodel)
+ //
+ if (!numClients && dodel)
+ {XrdXrootdJob2Do *jp = theJob->JobTable.Remove(JobNum);
+- if (jp->Status == XrdXrootdJob2Do::Job_Waiting) theJob->numJobs--;
+- delete jp;
+- return 0;
++ if (jp)
++ {if (jp->Status == XrdXrootdJob2Do::Job_Waiting) theJob->numJobs--;
++ delete jp;
++ return 0;
++ } else {
++ char ebuff[80];
++ snprintf(ebuff, sizeof(ebuff), "Unable to find %s job %d;",
++ theJob->JobName, JobNum);
++ eLog.Emsg("Job2Do", ebuff, "job slot disabled!");
++ }
+ }
+ return numClients;
+ }
+@@ -341,7 +369,7 @@ int XrdXrootdJob2Do::verClient(int dodel)
+ /* R e d r i v e */
+ /******************************************************************************/
+
+-void XrdXrootdJob2Do::Redrive()
++void XrdXrootdJob2Do::Redrive() // Caller must have theJob->myMutex held
+ {
+ XrdXrootdJob2Do *jp;
+ int Start = 0;
+@@ -364,10 +392,12 @@ void XrdXrootdJob2Do::Redrive()
+ /******************************************************************************/
+ /* s e n d R e s u l t */
+ /******************************************************************************/
++
++// Caller must have theJob->myMutex locked.
+
+ void XrdXrootdJob2Do::sendResult(char *lp, int caned, int jrc)
+ {
+- static const char *TraceID = "sendResult";
++ static const char *TraceID = "jobSendResult";
+ static const kXR_int32 Xcan = static_cast<kXR_int32>(htonl(kXR_Cancelled));
+ XrdXrootdReqID ReqID;
+ struct iovec jobVec[6];
+@@ -619,6 +649,8 @@ int XrdXrootdJob::Schedule(const char *jkey,
+ /* C l e a n U p */
+ /******************************************************************************/
+
++// The caller must have myMutex locked
++
+ void XrdXrootdJob::CleanUp(XrdXrootdJob2Do *jp)
+ {
+ int theStatus = jp->Status;
+@@ -641,6 +673,8 @@ void XrdXrootdJob::CleanUp(XrdXrootdJob2Do *jp)
+ /* s e n d R e s u l t */
+ /******************************************************************************/
+
++// Caller must have myMutex locked.
++
+ int XrdXrootdJob::sendResult(XrdXrootdResponse *resp,
+ const char *rpfx,
+ XrdXrootdJob2Do *job)
+--
+2.34.1
+
diff --git a/0002-Fix-warning-about-dereferncing-null-pointer.patch b/0002-Fix-warning-about-dereferncing-null-pointer.patch
new file mode 100644
index 0000000..09c04e2
--- /dev/null
+++ b/0002-Fix-warning-about-dereferncing-null-pointer.patch
@@ -0,0 +1,39 @@
+From 1780fc12fb947a2bda22007a715527a18621a6cb Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Mon, 17 Jan 2022 09:21:23 +0100
+Subject: [PATCH 2/4] Fix warning about dereferncing null pointer
+
+In member function 'XrdCl::ChunkHandler::ToPgInfo(XrdCl::AnyObject*, XrdCl::PageInfo*&)',
+ inlined from 'XrdCl::ChunkHandler::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*)' at .../src/XrdCl/XrdClXCpSrc.cc:58:17:
+.../src/XrdCl/XrdClXCpSrc.cc:97:66: error: 'this' pointer is null [-Werror=nonnull]
+ 97 | *chunk = PageInfo( rsp->offset, rsp->length, rsp->buffer );
+ | ^
+In file included from .../src/./XrdCl/XrdClFileSystem.hh:32,
+ from .../src/./XrdCl/XrdClFile.hh:28,
+ from .../src/./XrdCl/XrdClXCpSrc.hh:28,
+ from .../src/XrdCl/XrdClXCpSrc.cc:25:
+.../src/./XrdCl/XrdClXRootDResponses.hh: In member function 'XrdCl::ChunkHandler::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*)':
+.../src/./XrdCl/XrdClXRootDResponses.hh:962:15: note: in a call to non-static member function 'XrdCl::PageInfo::operator=(XrdCl::PageInfo&&)'
+ 962 | PageInfo& operator=( PageInfo &&pginf );
+ | ^~~~~~~~
+cc1plus: all warnings being treated as errors
+---
+ src/XrdCl/XrdClXCpSrc.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/XrdCl/XrdClXCpSrc.cc b/src/XrdCl/XrdClXCpSrc.cc
+index 532df79a4..c68fbc499 100644
+--- a/src/XrdCl/XrdClXCpSrc.cc
++++ b/src/XrdCl/XrdClXCpSrc.cc
+@@ -94,7 +94,7 @@ class ChunkHandler: public ResponseHandler
+ {
+ ChunkInfo *rsp = nullptr;
+ response->Get( rsp );
+- *chunk = PageInfo( rsp->offset, rsp->length, rsp->buffer );
++ chunk = new PageInfo( rsp->offset, rsp->length, rsp->buffer );
+ response->Set( ( int* )0 );
+ }
+ }
+--
+2.34.1
+
diff --git a/0003-Fix-warning-about-comparing-arrays.patch b/0003-Fix-warning-about-comparing-arrays.patch
new file mode 100644
index 0000000..33c8bcf
--- /dev/null
+++ b/0003-Fix-warning-about-comparing-arrays.patch
@@ -0,0 +1,30 @@
+From 62337be8ada4692bfd10eceaa042e3c4a553ece8 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Mon, 17 Jan 2022 09:24:46 +0100
+Subject: [PATCH 3/4] Fix warning about comparing arrays
+
+Cast the arrays to pointers to avoid the warning
+
+.../src/XrdPosix/XrdPosixXrootd.cc:955:22: error: comparison between two arrays [-Werror=array-compare]
+ 955 | if (dp32->d_name != dp64->d_name)
+ | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
+---
+ src/XrdPosix/XrdPosixXrootd.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/XrdPosix/XrdPosixXrootd.cc b/src/XrdPosix/XrdPosixXrootd.cc
+index 517dc07ec..cedb3ca40 100644
+--- a/src/XrdPosix/XrdPosixXrootd.cc
++++ b/src/XrdPosix/XrdPosixXrootd.cc
+@@ -952,7 +952,7 @@ struct dirent* XrdPosixXrootd::Readdir(DIR *dirp)
+ if (!(dp64 = Readdir64(dirp))) return 0;
+
+ dp32 = (struct dirent *)dp64;
+- if (dp32->d_name != dp64->d_name)
++ if ((char*)dp32->d_name != (char*)dp64->d_name)
+ {dp32->d_ino = dp64->d_ino;
+ #if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__GNU__) && !(defined(__FreeBSD_kernel__) && defined(__GLIBC__))
+ dp32->d_off = dp64->d_off;
+--
+2.34.1
+
diff --git a/0004-Do-not-give-up-ownership-of-ChunkInfo.patch b/0004-Do-not-give-up-ownership-of-ChunkInfo.patch
new file mode 100644
index 0000000..0d88bab
--- /dev/null
+++ b/0004-Do-not-give-up-ownership-of-ChunkInfo.patch
@@ -0,0 +1,24 @@
+From 86d40e79b4ece53d9e5c2dfb6b40ff77888ebad6 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Tue, 18 Jan 2022 16:01:34 +0100
+Subject: [PATCH 4/4] Do not give up ownership of ChunkInfo
+
+---
+ src/XrdCl/XrdClXCpSrc.cc | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/XrdCl/XrdClXCpSrc.cc b/src/XrdCl/XrdClXCpSrc.cc
+index c68fbc499..c19332c74 100644
+--- a/src/XrdCl/XrdClXCpSrc.cc
++++ b/src/XrdCl/XrdClXCpSrc.cc
+@@ -95,7 +95,6 @@ class ChunkHandler: public ResponseHandler
+ ChunkInfo *rsp = nullptr;
+ response->Get( rsp );
+ chunk = new PageInfo( rsp->offset, rsp->length, rsp->buffer );
+- response->Set( ( int* )0 );
+ }
+ }
+
+--
+2.34.1
+
diff --git a/xrootd.spec b/xrootd.spec
index 5e4f370..aeab40b 100644
--- a/xrootd.spec
+++ b/xrootd.spec
@@ -19,7 +19,7 @@
Name: xrootd
Epoch: 1
Version: 5.4.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Extended ROOT file server
License: LGPLv3+
@@ -33,6 +33,17 @@ Patch1: 0001-Fix-compilation-on-GCC-4.8.patch
Patch2: 0001-Add-missing-include.patch
# https://github.com/xrootd/xrootd/pull/1575
Patch3: 0001-Define-ENODATA-if-not-defined.patch
+# https://github.com/xrootd/xrootd/pull/1592
+Patch4: 0001-Fix-warning-about-uninitialized-variable.patch
+Patch5: 0002-Fix-warning-about-dereferncing-null-pointer.patch
+Patch6: 0003-Fix-warning-about-comparing-arrays.patch
+Patch7: 0004-Do-not-give-up-ownership-of-ChunkInfo.patch
+# https://github.com/xrootd/xrootd/pull/1598
+Patch8: 0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
+# https://github.com/xrootd/xrootd/pull/1600
+Patch9: 0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
+# Backport from upstream - fixes a gcc 12 compiler warning
+Patch10: 0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
BuildRequires: gcc-c++
%if %{?rhel}%{!?rhel:0} == 7
@@ -292,8 +303,25 @@ This package contains the API documentation of the xrootd libraries.
%patch1 -p1
%patch2 -p1
%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
%build
+%if %{?fedora}%{!?fedora:0} >= 36
+# Mark some warnings from gcc 12 as not errors
+# These are likely bogus - hopefully they can be fixed in gcc updates
+%set_build_flags
+CXXFLAGS="${CXXFLAGS} -Wno-error=array-bounds -Wno-error=restrict"
+%ifarch %{arm}
+CXXFLAGS="${CXXFLAGS} -Wno-error=use-after-free"
+%endif
+%endif
+
%cmake3 \
%if %{?fedora}%{!?fedora:0} >= 36
-DWITH_OPENSSL3:BOOL=ON \
@@ -659,6 +687,9 @@ fi
%doc %{_pkgdocdir}
%changelog
+* Mon Jan 24 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-4
+- Fix compiler warnings from gcc 12
+
* Sat Jan 22 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:5.4.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
commit 8573f1201109554385158a3d41111776edfdd0f8
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Jan 22 05:30:09 2022 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/xrootd.spec b/xrootd.spec
index 665b6ac..5e4f370 100644
--- a/xrootd.spec
+++ b/xrootd.spec
@@ -19,7 +19,7 @@
Name: xrootd
Epoch: 1
Version: 5.4.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Extended ROOT file server
License: LGPLv3+
@@ -659,6 +659,9 @@ fi
%doc %{_pkgdocdir}
%changelog
+* Sat Jan 22 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:5.4.0-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
* Tue Dec 14 2021 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-2
- Don't use unimplemented regex functions on EPEL 7.
- Add missing include (GNU/Hurd)
2 years, 1 month
Architecture specific change in rpms/xrootd.git
by githook-noreply@fedoraproject.org
The package rpms/xrootd.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/xrootd.git/commit/?id=d3dab6243eb...
https://src.fedoraproject.org/cgit/rpms/xrootd.git/commit/?id=9c466e1ca18...
https://src.fedoraproject.org/cgit/rpms/xrootd.git/commit/?id=3c4a5ea8217....
Change:
-%ifarch %{ix86} %{arm}
-%ifarch %{arm}
+%ifarch %{arm}
Thanks.
Full change:
============
commit d3dab6243eb07372049f599cba21d2eda4ac37f3
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Thu Feb 24 21:42:50 2022 +0100
Update to version 5.4.1
Drop patches accepted upstream
diff --git a/0001-Add-missing-include.patch b/0001-Add-missing-include.patch
deleted file mode 100644
index c65da09..0000000
--- a/0001-Add-missing-include.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From fa7b5bd944771a986e0160afa0252427f9bd084e Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Sun, 12 Dec 2021 22:33:44 +0100
-Subject: [PATCH] Add missing include
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Fixes GNU/Hurd build
-
-/<<PKGBUILDDIR>>/src/XrdApps/XrdPrep.cc: In function ‘int main(int, char**)’:
-/<<PKGBUILDDIR>>/src/XrdApps/XrdPrep.cc:109:34: error: ‘MAXPATHLEN’ was not declared in this scope
- 109 | static const int MaxPathLen = MAXPATHLEN+1;
- | ^~~~~~~~~~
-/<<PKGBUILDDIR>>/src/XrdApps/XrdPrep.cc:213:24: error: size of array ‘fBuff’ is not an integral constant-expression
- 213 | char *sP, fBuff[MaxPathLen];
- | ^~~~~~~~~~
-src/CMakeFiles/xrdprep.dir/build.make:78: recipe for target 'src/CMakeFiles/xrdprep.dir/XrdApps/XrdPrep.cc.o' failed
----
- src/XrdApps/XrdPrep.cc | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/XrdApps/XrdPrep.cc b/src/XrdApps/XrdPrep.cc
-index b90c521c8..1f2d15af2 100644
---- a/src/XrdApps/XrdPrep.cc
-+++ b/src/XrdApps/XrdPrep.cc
-@@ -42,6 +42,7 @@
-
- #include "XrdOuc/XrdOucEnv.hh"
- #include "XrdSys/XrdSysE2T.hh"
-+#include "XrdSys/XrdSysPlatform.hh"
- #include "XrdCl/XrdClFileSystem.hh"
-
- using namespace XrdCl;
---
-2.33.1
-
diff --git a/0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch b/0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch
new file mode 100644
index 0000000..06010de
--- /dev/null
+++ b/0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch
@@ -0,0 +1,27 @@
+From fdb74096242e76427b64c0f82dba77b05e611ad9 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Thu, 24 Feb 2022 18:58:20 +0100
+Subject: [PATCH] Disable LTO for XrdPosix on 32 bit architectures
+
+---
+ src/XrdPosix.cmake | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/XrdPosix.cmake b/src/XrdPosix.cmake
+index cf3247818..453c20379 100644
+--- a/src/XrdPosix.cmake
++++ b/src/XrdPosix.cmake
+@@ -60,6 +60,10 @@ add_library(
+ XrdPosix/XrdPosixExtern.hh
+ XrdPosix/XrdPosixOsDep.hh )
+
++if(CMAKE_SIZEOF_VOID_P EQUAL 4)
++ target_compile_options(XrdPosixPreload PRIVATE -fno-lto)
++endif()
++
+ target_link_libraries(
+ XrdPosixPreload
+ XrdPosix
+--
+2.35.1
+
diff --git a/0001-Fix-compilation-on-GCC-4.8.patch b/0001-Fix-compilation-on-GCC-4.8.patch
deleted file mode 100644
index ec41f60..0000000
--- a/0001-Fix-compilation-on-GCC-4.8.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From e7cf71c11f6504c6ff7a504a9e134ae66d923aa6 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Tue, 14 Dec 2021 16:33:13 +0100
-Subject: [PATCH] Fix compilation on GCC 4.8
-
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc: In member function 'bool XrdAccSciTokens::GenerateAcls(const string&, uint64_t&, {anonymous}::AccessRulesRaw&, std::string&, std::string&, std::string&, std::vector<{anonymous}::MapRule>&, std::vector<std::basic_string<char> >&)':
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: error: no matching function for call to 'regex_replace(std::string&, std::regex, const char [2])'
- std::regex("//"), "/");
- ^
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: note: candidates are:
-In file included from /usr/include/c++/4.8.2/regex:62:0,
- from ../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:18:
-/usr/include/c++/4.8.2/bits/regex.h:2162:5: note: template<class _Out_iter, class _Bi_iter, class _Rx_traits, class _Ch_type> _Out_iter std::regex_replace(_Out_iter, _Bi_iter, _Bi_iter, const std::basic_regex<_Ch_type, _Rx_traits>&, const std::basic_string<_Ch_type>&, std::regex_constants::match_flag_type)
- regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
- ^
-/usr/include/c++/4.8.2/bits/regex.h:2162:5: note: template argument deduction/substitution failed:
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: note: deduced conflicting types for parameter '_Bi_iter' ('std::basic_regex<char>' and 'const char*')
- std::regex("//"), "/");
- ^
-In file included from /usr/include/c++/4.8.2/regex:62:0,
- from ../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:18:
-/usr/include/c++/4.8.2/bits/regex.h:2182:5: note: template<class _Rx_traits, class _Ch_type> std::basic_string<_Ch_type> std::regex_replace(const std::basic_string<_Ch_type>&, const std::basic_regex<_Ch_type, _Rx_traits>&, const std::basic_string<_Ch_type>&, std::regex_constants::match_flag_type)
- regex_replace(const basic_string<_Ch_type>& __s,
- ^
-/usr/include/c++/4.8.2/bits/regex.h:2182:5: note: template argument deduction/substitution failed:
-../xrootd-5.4.0/src/XrdSciTokens/XrdSciTokensAccess.cc:652:83: note: mismatched types 'const std::basic_string<_Ch_type>' and 'const char [2]'
- std::regex("//"), "/");
- ^
----
- src/XrdMacaroons/XrdMacaroonsHandler.cc | 1 -
- src/XrdSciTokens/XrdSciTokensAccess.cc | 7 ++++---
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/src/XrdMacaroons/XrdMacaroonsHandler.cc b/src/XrdMacaroons/XrdMacaroonsHandler.cc
-index 42bda11ff..767505fd7 100644
---- a/src/XrdMacaroons/XrdMacaroonsHandler.cc
-+++ b/src/XrdMacaroons/XrdMacaroonsHandler.cc
-@@ -1,5 +1,4 @@
-
--#include <regex>
- #include <cstring>
- #include <string>
- #include <iostream>
-diff --git a/src/XrdSciTokens/XrdSciTokensAccess.cc b/src/XrdSciTokens/XrdSciTokensAccess.cc
-index 29dcfacfb..cf1abd406 100644
---- a/src/XrdSciTokens/XrdSciTokensAccess.cc
-+++ b/src/XrdSciTokens/XrdSciTokensAccess.cc
-@@ -15,7 +15,6 @@
- #include <fstream>
- #include <unordered_map>
- #include <tuple>
--#include <regex>
-
- #include "INIReader.h"
- #include "picojson.h"
-@@ -648,8 +647,10 @@ private:
- for (auto path : config.m_base_paths) {
- auto path_rule = rule;
- path_rule.m_path_prefix = path + rule.m_path_prefix;
-- path_rule.m_path_prefix = std::regex_replace(path_rule.m_path_prefix,
-- std::regex("//"), "/");
-+ auto pos = path_rule.m_path_prefix.find("//");
-+ if (pos != std::string::npos) {
-+ path_rule.m_path_prefix.erase(pos + 1, 1);
-+ }
- map_rules.emplace_back(path_rule);
- }
- }
---
-2.33.1
-
diff --git a/0001-Fix-compilation-when-char-is-unsigned.patch b/0001-Fix-compilation-when-char-is-unsigned.patch
deleted file mode 100644
index b7c76e9..0000000
--- a/0001-Fix-compilation-when-char-is-unsigned.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From b29d0f021275d105f719dbefb07c8dfe17b95809 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Sat, 11 Dec 2021 07:39:20 +0100
-Subject: [PATCH] Fix compilation when char is unsigned (armv7hl, aarch64,
- ppc64le, s390x)
-
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc: In static member function 'static XrdNetPMark* XrdNetPMarkCfg::Config(XrdSysError*, XrdScheduler*, XrdSysTrace*, bool&)':
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc:271:16: error: comparison is always false due to limited range of data type [-Werror=type-limits]
- 271 | if (useFFly < 0)
- | ~~~~~~~~^~~
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc: In static member function 'static int XrdNetPMarkCfg::Parse(XrdSysError*, XrdOucStream&)':
-../xrootd-5.4.0/src/XrdNet/XrdNetPMarkCfg.cc:1037:20: error: comparison is always false due to limited range of data type [-Werror=type-limits]
- 1037 | if (useFFly < 0) useFFly = 1;
- | ~~~~~~~~^~~
----
- src/XrdNet/XrdNetPMarkCfg.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdNet/XrdNetPMarkCfg.cc b/src/XrdNet/XrdNetPMarkCfg.cc
-index d82b2938b..e7cb00ed5 100644
---- a/src/XrdNet/XrdNetPMarkCfg.cc
-+++ b/src/XrdNet/XrdNetPMarkCfg.cc
-@@ -132,7 +132,7 @@ bool tryVO = false;
- bool useDefs = false;
-
- bool useFLbl = false;
--char useFFly = -1;
-+signed char useFFly = -1;
- bool addFLFF = false;
- bool useSTag = true;
-
---
-2.33.1
-
diff --git a/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch b/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
deleted file mode 100644
index 513fff6..0000000
--- a/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 654133bc1158e4815a45dc8dd70023e5fff82424 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Thu, 20 Jan 2022 00:19:08 +0100
-Subject: [PATCH] Fix compiler warnings about pointers used after free:
-
-.../src/XrdCms/XrdCmsUtils.cc: In function 'XrdCmsUtils::ParseMan(XrdSysError*, XrdOucTList**, char*, char*, int*, bool)':
-.../src/XrdCms/XrdCmsUtils.cc:226:43: error: pointer 'newMans_175' may be used after 'operator delete(void*, unsigned long)' [-Werror=use-after-free]
- 226 | if (!plus || strcmp(hSpec, newP->text)) isBad = false;
- | ~~~~~~^~~~
-.../src/XrdCms/XrdCmsUtils.cc:221:27: note: call to 'operator delete(void*, unsigned long)' here
- 221 | delete newP;
- | ^~~~
-
-.../src/XrdCl/XrdClCopy.cc: In function 'IndexRemote(XrdCl::FileSystem*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned short)':
-.../src/XrdCl/XrdClCopy.cc:442:17: error: pointer used after 'operator delete(void*, unsigned long)' [-Werror=use-after-free]
- 442 | log->Error( AppMsg, "Bad URL: %s", current->Path );
- | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.../src/XrdCl/XrdClCopy.cc:441:14: note: call to 'operator delete(void*, unsigned long)' here
- 441 | delete current;
- | ^~~~~~~
----
- src/XrdCl/XrdClCopy.cc | 2 +-
- src/XrdCms/XrdCmsUtils.cc | 18 +++++++++---------
- 2 files changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/src/XrdCl/XrdClCopy.cc b/src/XrdCl/XrdClCopy.cc
-index 78d27589c..c2b754bf5 100644
---- a/src/XrdCl/XrdClCopy.cc
-+++ b/src/XrdCl/XrdClCopy.cc
-@@ -438,8 +438,8 @@ XrdCpFile *IndexRemote( XrdCl::FileSystem *fs,
- current = new XrdCpFile( path.c_str(), badUrl );
- if( badUrl )
- {
-- delete current;
- log->Error( AppMsg, "Bad URL: %s", current->Path );
-+ delete current;
- return 0;
- }
-
-diff --git a/src/XrdCms/XrdCmsUtils.cc b/src/XrdCms/XrdCmsUtils.cc
-index 49c448849..8d25973bc 100644
---- a/src/XrdCms/XrdCmsUtils.cc
-+++ b/src/XrdCms/XrdCmsUtils.cc
-@@ -223,15 +223,15 @@ bool XrdCmsUtils::ParseMan(XrdSysError *eDest, XrdOucTList **oldMans,
- }
- oldP = oldP->next;
- }
-- if (!plus || strcmp(hSpec, newP->text)) isBad = false;
-- else {eDest->Say("Config warning: "
-- "Cyclic DNS registration for ",newP->text,"\n"
-- "Config warning: This cluster will exhibit "
-- "undefined behaviour!!!");
-- isBad = true;
-- }
-- if (!oldP)
-- {appList = SInsert(appList, newP);
-+ if (!oldP)
-+ {if (!plus || strcmp(hSpec, newP->text)) isBad = false;
-+ else {eDest->Say("Config warning: "
-+ "Cyclic DNS registration for ",newP->text,"\n"
-+ "Config warning: This cluster will exhibit "
-+ "undefined behaviour!!!");
-+ isBad = true;
-+ }
-+ appList = SInsert(appList, newP);
- if (plus && !hush) Display(eDest, hSpec, newP->text, isBad);
- }
- }
---
-2.34.1
-
diff --git a/0001-Fix-warning-about-uninitialized-variable.patch b/0001-Fix-warning-about-uninitialized-variable.patch
deleted file mode 100644
index fe72398..0000000
--- a/0001-Fix-warning-about-uninitialized-variable.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 0898ed380a457ff1c0c2547953d0fd36eaeaeebe Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 17 Jan 2022 09:14:08 +0100
-Subject: [PATCH 1/4] Fix warning about uninitialized variable
-
-The cond variable is initialized using the mutex before the mutex is
-initialized. Changing the order of the members in the class ensures
-the mutex is initialized first.
-
-.../src/./XrdXrootd/XrdXrootdAioTask.hh:70:51: error: member 'XrdXrootdAioTask::aioMutex' is used uninitialized [-Werror=uninitialized]
- 70 | : XrdJob(what), aioReady(aioMutex) {}
- | ^~~~~~~~
-cc1plus: all warnings being treated as errors
----
- src/XrdXrootd/XrdXrootdAioTask.hh | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdXrootd/XrdXrootdAioTask.hh b/src/XrdXrootd/XrdXrootdAioTask.hh
-index 2c49ff7d1..c04858bba 100644
---- a/src/XrdXrootd/XrdXrootdAioTask.hh
-+++ b/src/XrdXrootd/XrdXrootdAioTask.hh
-@@ -83,8 +83,8 @@ virtual bool CopyL2F(XrdXrootdAioBuff *aioP) = 0;
-
- static const char* TraceID;
-
-- XrdSysCondVar2 aioReady;
- XrdSysMutex aioMutex; // Locks private data
-+ XrdSysCondVar2 aioReady;
- XrdXrootdAioBuff* pendQ;
- XrdXrootdAioBuff* pendQEnd; // -> Last element in pendQ
-
---
-2.34.1
-
diff --git a/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch b/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
deleted file mode 100644
index 7b7cf1d..0000000
--- a/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-From 0dc292fbf63d25c6a9e000a2e66d7e3e0b8db735 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 24 Jan 2022 06:56:43 +0100
-Subject: [PATCH] Fix warnings about allocations exceeding maximum object size
-
-In member function 'Init',
- inlined from 'Init' at .../src/Xrd/XrdBuffXL.cc:64:6:
-.../src/Xrd/XrdBuffXL.cc:90:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 90 | bucket = new BuckVec[lg2+1];
- | ^
-/usr/include/c++/12/new: In member function 'Init':
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-.../src/XrdOuc/XrdOucBuffer.cc: In member function '__ct_base ':
-.../src/XrdOuc/XrdOucBuffer.cc:79:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 79 | bSlot = new BuffSlot[slots];
- | ^
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-.../src/XrdNet/XrdNetUtils.cc: In function 'GetAddrs':
-.../src/XrdNet/XrdNetUtils.cc:262:35: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 262 | *aVec = new XrdNetAddr[aVsz];
- | ^
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-In member function '__ct ',
- inlined from '__ct_base ' at .../src/XrdXrootd/XrdXrootdJob.cc:459:29:
-.../src/./XrdOuc/XrdOucTable.hh:43:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 43 | Table = new OucTable[maxe];
- | ^
-/usr/include/c++/12/new: In member function '__ct_base ':
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
-
-.../src/XrdPosix/XrdPosixAdmin.cc: In member function 'FanOut':
-.../src/XrdPosix/XrdPosixAdmin.cc:69:27: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
- 69 | uVec = new XrdCl::URL[i];
- | ^
-/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
- 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
- | ^
----
- src/Xrd/XrdBuffXL.cc | 3 ++-
- src/XrdNet/XrdNetUtils.cc | 2 +-
- src/XrdOuc/XrdOucBuffer.cc | 2 +-
- src/XrdOuc/XrdOucTable.hh | 2 +-
- src/XrdPosix/XrdPosixAdmin.cc | 2 +-
- 5 files changed, 6 insertions(+), 5 deletions(-)
-
-diff --git a/src/Xrd/XrdBuffXL.cc b/src/Xrd/XrdBuffXL.cc
-index f84ef77cb..f769522af 100644
---- a/src/Xrd/XrdBuffXL.cc
-+++ b/src/Xrd/XrdBuffXL.cc
-@@ -63,7 +63,8 @@ XrdBuffXL::XrdBuffXL() : bucket(0), totalo(0), pagsz(getpagesize()), slots(0),
-
- void XrdBuffXL::Init(int maxMSZ)
- {
-- int lg2, chunksz;
-+ unsigned int lg2;
-+ int chunksz;
-
- // If this is a duplicate call, delete the previous setup
- //
-diff --git a/src/XrdNet/XrdNetUtils.cc b/src/XrdNet/XrdNetUtils.cc
-index 0f5eac348..fbc6c5ff7 100644
---- a/src/XrdNet/XrdNetUtils.cc
-+++ b/src/XrdNet/XrdNetUtils.cc
-@@ -259,7 +259,7 @@ const char *XrdNetUtils::GetAddrs(const char *hSpec,
- //
- if (aInfo.aNum4 || aInfo.aNum6)
- {aVsz = aInfo.aNum4 + aInfo.aNum6;
-- *aVec = new XrdNetAddr[aVsz];
-+ *aVec = new XrdNetAddr[(unsigned int)aVsz];
- FillAddr(aInfo, *aVec);
- }
-
-diff --git a/src/XrdOuc/XrdOucBuffer.cc b/src/XrdOuc/XrdOucBuffer.cc
-index 2faee1d51..10f79d999 100644
---- a/src/XrdOuc/XrdOucBuffer.cc
-+++ b/src/XrdOuc/XrdOucBuffer.cc
-@@ -76,7 +76,7 @@ XrdOucBuffPool::XrdOucBuffPool(int minsz, int maxsz,
-
- // Allocate a slot vector for this
- //
-- bSlot = new BuffSlot[slots];
-+ bSlot = new BuffSlot[(unsigned int)slots];
-
- // Complete initializing the slot vector
- //
-diff --git a/src/XrdOuc/XrdOucTable.hh b/src/XrdOuc/XrdOucTable.hh
-index 92058c42b..2805a259c 100644
---- a/src/XrdOuc/XrdOucTable.hh
-+++ b/src/XrdOuc/XrdOucTable.hh
-@@ -40,7 +40,7 @@ public:
-
- XrdOucTable(int maxe)
- {int i;
-- Table = new OucTable[maxe];
-+ Table = new OucTable[(unsigned int)maxe];
- maxnum = maxe; curnum = 0; avlnum = 0;
- for (i = 1; i < maxe; i++) Table[i-1].Fnum = i;
- Table[maxe-1].Fnum = -1;
-diff --git a/src/XrdPosix/XrdPosixAdmin.cc b/src/XrdPosix/XrdPosixAdmin.cc
-index c26571394..2cad5517e 100644
---- a/src/XrdPosix/XrdPosixAdmin.cc
-+++ b/src/XrdPosix/XrdPosixAdmin.cc
-@@ -49,7 +49,7 @@ XrdCl::URL *XrdPosixAdmin::FanOut(int &num)
- XrdCl::URL *uVec;
- XrdNetAddr netLoc;
- const char *hName;
-- int i;
-+ unsigned int i;
-
- // Make sure admin is ok
- //
---
-2.34.1
-
diff --git a/0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch b/0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch
new file mode 100644
index 0000000..de803fc
--- /dev/null
+++ b/0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch
@@ -0,0 +1,94 @@
+From 8095e021588150a584371ffbbf50e5b0bb7d4ede Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Fri, 4 Feb 2022 21:20:47 +0100
+Subject: [PATCH] Ignore -Warray-bounds warnings from stricter check in gcc 12.
+
+.../src/XrdFrm/XrdFrmMonitor.cc: In function 'XrdFrmMonitor::Init(char const*, char const*, char const*)':
+.../src/XrdFrm/XrdFrmMonitor.cc:158:12: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 158 | mP->hdr.pseq = 0;
+ | ~~~~~~~~^~~~
+.../src/XrdFrm/XrdFrmMonitor.cc:155:26: note: object of size [13, 1036] allocated by 'malloc'
+ 155 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+.../src/XrdFrm/XrdFrmMonitor.cc:159:8: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 159 | mP->dictid = 0;
+ | ~~~~^~~~~~
+.../src/XrdFrm/XrdFrmMonitor.cc:155:26: note: object of size [13, 1036] allocated by 'malloc'
+ 155 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+
+.../src/XrdXrootd/XrdXrootdMonitor.cc: In function 'XrdXrootdMonitor::Init(XrdScheduler*, XrdSysError*, char const*, char const*, char const*, int)':
+.../src/XrdXrootd/XrdXrootdMonitor.cc:634:12: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 634 | mP->hdr.pseq = 0;
+ | ~~~~~~~~^~~~
+.../src/XrdXrootd/XrdXrootdMonitor.cc:631:26: note: object of size [13, 1036] allocated by 'malloc'
+ 631 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+.../src/XrdXrootd/XrdXrootdMonitor.cc:635:8: warning: array subscript 'struct XrdXrootdMonMap[0]' is partly outside array bounds of 'unsigned char[1036]' [-Warray-bounds]
+ 635 | mP->dictid = 0;
+ | ~~~~^~~~~~
+.../src/XrdXrootd/XrdXrootdMonitor.cc:631:26: note: object of size [13, 1036] allocated by 'malloc'
+ 631 | idRec = (char *)malloc(idLen+1);
+ | ~~~~~~^~~~~~~~~
+---
+ src/XrdFrm/XrdFrmMonitor.cc | 9 +++++++++
+ src/XrdXrootd/XrdXrootdMonitor.cc | 9 +++++++++
+ 2 files changed, 18 insertions(+)
+
+diff --git a/src/XrdFrm/XrdFrmMonitor.cc b/src/XrdFrm/XrdFrmMonitor.cc
+index a453617a6..5abe5ff31 100644
+--- a/src/XrdFrm/XrdFrmMonitor.cc
++++ b/src/XrdFrm/XrdFrmMonitor.cc
+@@ -149,6 +149,12 @@ int XrdFrmMonitor::Init(const char *iHost, const char *iProg, const char *iName)
+ //
+ if (!isEnabled) return 1;
+
++// Ignore array bounds warning from gcc 12 triggered because the allocated
++// memory for the XrdXrootdMonMap is smaller than sizeof(XrdXrootdMonMap)
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Warray-bounds"
++#endif
+ // Create identification record
+ //
+ idLen = strlen(iBuff) + sizeof(XrdXrootdMonHeader) + sizeof(kXR_int32);
+@@ -158,6 +164,9 @@ int XrdFrmMonitor::Init(const char *iHost, const char *iProg, const char *iName)
+ mP->hdr.pseq = 0;
+ mP->dictid = 0;
+ strcpy(mP->info, iBuff);
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic pop
++#endif
+
+ // Setup the primary destination
+ //
+diff --git a/src/XrdXrootd/XrdXrootdMonitor.cc b/src/XrdXrootd/XrdXrootdMonitor.cc
+index 2926bae75..bb0f0a242 100644
+--- a/src/XrdXrootd/XrdXrootdMonitor.cc
++++ b/src/XrdXrootd/XrdXrootdMonitor.cc
+@@ -625,6 +625,12 @@ void XrdXrootdMonitor::Init(XrdScheduler *sp, XrdSysError *errp,
+ kySIDSZ = strlen(kySID);
+ monHost = strdup(iHost);
+
++// Ignore array bounds warning from gcc 12 triggered because the allocated
++// memory for the XrdXrootdMonMap is smaller than sizeof(XrdXrootdMonMap)
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Warray-bounds"
++#endif
+ // Create identification record
+ //
+ idLen = strlen(iBuff) + sizeof(XrdXrootdMonHeader) + sizeof(kXR_int32);
+@@ -634,6 +640,9 @@ void XrdXrootdMonitor::Init(XrdScheduler *sp, XrdSysError *errp,
+ mP->hdr.pseq = 0;
+ mP->dictid = 0;
+ strcpy(mP->info, iBuff);
++#if defined(__GNUC__) && __GNUC__ >= 12
++#pragma GCC diagnostic pop
++#endif
+
+ // Generate a CGI version of all the variations
+ //
+--
+2.34.1
+
diff --git a/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch b/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
deleted file mode 100644
index 34f0cab..0000000
--- a/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
+++ /dev/null
@@ -1,161 +0,0 @@
-From 7615d866986131f3548b5863b38872a2e4dc58d9 Mon Sep 17 00:00:00 2001
-From: Andrew Hanushevsky <abh(a)stanford.edu>
-Date: Thu, 20 Jan 2022 23:22:09 -0800
-Subject: [PATCH] [Server] Prevent SEGV on busy systems due to missing lock
- call for background jobs.
-
----
- src/XrdXrootd/XrdXrootdJob.cc | 50 +++++++++++++++++++++++++++++------
- 1 file changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/src/XrdXrootd/XrdXrootdJob.cc b/src/XrdXrootd/XrdXrootdJob.cc
-index 1b2703d96..467323de5 100644
---- a/src/XrdXrootd/XrdXrootdJob.cc
-+++ b/src/XrdXrootd/XrdXrootdJob.cc
-@@ -37,6 +37,7 @@
- #include "Xrd/XrdScheduler.hh"
- #include "XrdOuc/XrdOucProg.hh"
- #include "XrdOuc/XrdOucStream.hh"
-+#include "XrdSys/XrdSysError.hh"
- #include "XrdSys/XrdSysPlatform.hh"
- #include "XrdSys/XrdSysRAtomic.hh"
- #include "XrdXrootd/XrdXrootdJob.hh"
-@@ -99,6 +100,12 @@ static const int argvnum = sizeof(theArgs)/sizeof(theArgs[0]);
- /* G l o b a l F u n c t i o n s */
- /******************************************************************************/
-
-+namespace XrdXrootd
-+{
-+extern XrdSysError eLog;
-+}
-+using namespace XrdXrootd;
-+
- extern XrdSysTrace XrdXrootdTrace;
-
- int XrdXrootdJobWaiting(XrdXrootdJob2Do *item, void *arg)
-@@ -152,10 +159,15 @@ XrdXrootdJob2Do::~XrdXrootdJob2Do()
- /******************************************************************************/
- /* D o I t */
- /******************************************************************************/
-+
-+#define jobInfo theJob->JobName<<' '<<(theArgs[1] ? theArgs[1] : "")\
-+ <<(theArgs[2] ? " " : "")<<(theArgs[2] ? theArgs[2] : "")
-
- void XrdXrootdJob2Do::DoIt()
- {
-+ static const char *TraceID = "jobXeq";
- XrdXrootdJob2Do *jp = 0;
-+ const char *endStat = " completed";
- char *lp = 0;
- int i, rc = 0;
-
-@@ -163,9 +175,11 @@ void XrdXrootdJob2Do::DoIt()
- // perform the actual function and get the result and send to any async clients
- //
- if (Status != Job_Cancel)
-- {if ((rc = theJob->theProg->Run(&jobStream, theArgs[1], theArgs[2],
-+ {TRACE(REQ, "Job "<<jobInfo<<" started");
-+ if ((rc = theJob->theProg->Run(&jobStream, theArgs[1], theArgs[2],
- theArgs[3], theArgs[4])))
- {Status = Job_Cancel;
-+ endStat= " failed";
- lp = jobStream.GetLine();
- theJob->myMutex.Lock();
- }
-@@ -173,15 +187,22 @@ void XrdXrootdJob2Do::DoIt()
- rc = theJob->theProg->RunDone(jobStream);
- theJob->myMutex.Lock();
- if ((rc && rc != -EPIPE) || (rc == -EPIPE && (!lp || !(*lp))))
-- Status = Job_Cancel;
-+ {Status = Job_Cancel; endStat = " failed";}
- else if (Status != Job_Cancel)
- {Status = Job_Done;
- for (i = 0; i < numClients; i++)
- if (!Client[i].isSync) {sendResult(lp); break;}
- }
- }
-+ } else {
-+ endStat = " cancelled";
-+ theJob->myMutex.Lock();
- }
-
-+// Produce a trace record
-+//
-+ TRACE(REQ, "Job "<<jobInfo<<endStat);
-+
- // If the number of jobs > than the max allowed, then redrive a waiting job
- // if in fact we represent a legitimate job slot (this could a phantom slot
- // due to ourselves being cancelled.
-@@ -313,7 +334,7 @@ XrdOucTList *XrdXrootdJob2Do::lstClient()
- /* v e r C l i e n t */
- /******************************************************************************/
-
--int XrdXrootdJob2Do::verClient(int dodel)
-+int XrdXrootdJob2Do::verClient(int dodel) // Caller must have theJob->myMutex
- {
- int i, j, k;
-
-@@ -330,9 +351,16 @@ int XrdXrootdJob2Do::verClient(int dodel)
- //
- if (!numClients && dodel)
- {XrdXrootdJob2Do *jp = theJob->JobTable.Remove(JobNum);
-- if (jp->Status == XrdXrootdJob2Do::Job_Waiting) theJob->numJobs--;
-- delete jp;
-- return 0;
-+ if (jp)
-+ {if (jp->Status == XrdXrootdJob2Do::Job_Waiting) theJob->numJobs--;
-+ delete jp;
-+ return 0;
-+ } else {
-+ char ebuff[80];
-+ snprintf(ebuff, sizeof(ebuff), "Unable to find %s job %d;",
-+ theJob->JobName, JobNum);
-+ eLog.Emsg("Job2Do", ebuff, "job slot disabled!");
-+ }
- }
- return numClients;
- }
-@@ -341,7 +369,7 @@ int XrdXrootdJob2Do::verClient(int dodel)
- /* R e d r i v e */
- /******************************************************************************/
-
--void XrdXrootdJob2Do::Redrive()
-+void XrdXrootdJob2Do::Redrive() // Caller must have theJob->myMutex held
- {
- XrdXrootdJob2Do *jp;
- int Start = 0;
-@@ -364,10 +392,12 @@ void XrdXrootdJob2Do::Redrive()
- /******************************************************************************/
- /* s e n d R e s u l t */
- /******************************************************************************/
-+
-+// Caller must have theJob->myMutex locked.
-
- void XrdXrootdJob2Do::sendResult(char *lp, int caned, int jrc)
- {
-- static const char *TraceID = "sendResult";
-+ static const char *TraceID = "jobSendResult";
- static const kXR_int32 Xcan = static_cast<kXR_int32>(htonl(kXR_Cancelled));
- XrdXrootdReqID ReqID;
- struct iovec jobVec[6];
-@@ -619,6 +649,8 @@ int XrdXrootdJob::Schedule(const char *jkey,
- /* C l e a n U p */
- /******************************************************************************/
-
-+// The caller must have myMutex locked
-+
- void XrdXrootdJob::CleanUp(XrdXrootdJob2Do *jp)
- {
- int theStatus = jp->Status;
-@@ -641,6 +673,8 @@ void XrdXrootdJob::CleanUp(XrdXrootdJob2Do *jp)
- /* s e n d R e s u l t */
- /******************************************************************************/
-
-+// Caller must have myMutex locked.
-+
- int XrdXrootdJob::sendResult(XrdXrootdResponse *resp,
- const char *rpfx,
- XrdXrootdJob2Do *job)
---
-2.34.1
-
diff --git a/0002-Fix-warning-about-dereferncing-null-pointer.patch b/0002-Fix-warning-about-dereferncing-null-pointer.patch
deleted file mode 100644
index 09c04e2..0000000
--- a/0002-Fix-warning-about-dereferncing-null-pointer.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 1780fc12fb947a2bda22007a715527a18621a6cb Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 17 Jan 2022 09:21:23 +0100
-Subject: [PATCH 2/4] Fix warning about dereferncing null pointer
-
-In member function 'XrdCl::ChunkHandler::ToPgInfo(XrdCl::AnyObject*, XrdCl::PageInfo*&)',
- inlined from 'XrdCl::ChunkHandler::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*)' at .../src/XrdCl/XrdClXCpSrc.cc:58:17:
-.../src/XrdCl/XrdClXCpSrc.cc:97:66: error: 'this' pointer is null [-Werror=nonnull]
- 97 | *chunk = PageInfo( rsp->offset, rsp->length, rsp->buffer );
- | ^
-In file included from .../src/./XrdCl/XrdClFileSystem.hh:32,
- from .../src/./XrdCl/XrdClFile.hh:28,
- from .../src/./XrdCl/XrdClXCpSrc.hh:28,
- from .../src/XrdCl/XrdClXCpSrc.cc:25:
-.../src/./XrdCl/XrdClXRootDResponses.hh: In member function 'XrdCl::ChunkHandler::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*)':
-.../src/./XrdCl/XrdClXRootDResponses.hh:962:15: note: in a call to non-static member function 'XrdCl::PageInfo::operator=(XrdCl::PageInfo&&)'
- 962 | PageInfo& operator=( PageInfo &&pginf );
- | ^~~~~~~~
-cc1plus: all warnings being treated as errors
----
- src/XrdCl/XrdClXCpSrc.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdCl/XrdClXCpSrc.cc b/src/XrdCl/XrdClXCpSrc.cc
-index 532df79a4..c68fbc499 100644
---- a/src/XrdCl/XrdClXCpSrc.cc
-+++ b/src/XrdCl/XrdClXCpSrc.cc
-@@ -94,7 +94,7 @@ class ChunkHandler: public ResponseHandler
- {
- ChunkInfo *rsp = nullptr;
- response->Get( rsp );
-- *chunk = PageInfo( rsp->offset, rsp->length, rsp->buffer );
-+ chunk = new PageInfo( rsp->offset, rsp->length, rsp->buffer );
- response->Set( ( int* )0 );
- }
- }
---
-2.34.1
-
diff --git a/0003-Fix-warning-about-comparing-arrays.patch b/0003-Fix-warning-about-comparing-arrays.patch
deleted file mode 100644
index 33c8bcf..0000000
--- a/0003-Fix-warning-about-comparing-arrays.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 62337be8ada4692bfd10eceaa042e3c4a553ece8 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Mon, 17 Jan 2022 09:24:46 +0100
-Subject: [PATCH 3/4] Fix warning about comparing arrays
-
-Cast the arrays to pointers to avoid the warning
-
-.../src/XrdPosix/XrdPosixXrootd.cc:955:22: error: comparison between two arrays [-Werror=array-compare]
- 955 | if (dp32->d_name != dp64->d_name)
- | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
----
- src/XrdPosix/XrdPosixXrootd.cc | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/XrdPosix/XrdPosixXrootd.cc b/src/XrdPosix/XrdPosixXrootd.cc
-index 517dc07ec..cedb3ca40 100644
---- a/src/XrdPosix/XrdPosixXrootd.cc
-+++ b/src/XrdPosix/XrdPosixXrootd.cc
-@@ -952,7 +952,7 @@ struct dirent* XrdPosixXrootd::Readdir(DIR *dirp)
- if (!(dp64 = Readdir64(dirp))) return 0;
-
- dp32 = (struct dirent *)dp64;
-- if (dp32->d_name != dp64->d_name)
-+ if ((char*)dp32->d_name != (char*)dp64->d_name)
- {dp32->d_ino = dp64->d_ino;
- #if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__GNU__) && !(defined(__FreeBSD_kernel__) && defined(__GLIBC__))
- dp32->d_off = dp64->d_off;
---
-2.34.1
-
diff --git a/0004-Do-not-give-up-ownership-of-ChunkInfo.patch b/0004-Do-not-give-up-ownership-of-ChunkInfo.patch
deleted file mode 100644
index 0d88bab..0000000
--- a/0004-Do-not-give-up-ownership-of-ChunkInfo.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From 86d40e79b4ece53d9e5c2dfb6b40ff77888ebad6 Mon Sep 17 00:00:00 2001
-From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
-Date: Tue, 18 Jan 2022 16:01:34 +0100
-Subject: [PATCH 4/4] Do not give up ownership of ChunkInfo
-
----
- src/XrdCl/XrdClXCpSrc.cc | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/src/XrdCl/XrdClXCpSrc.cc b/src/XrdCl/XrdClXCpSrc.cc
-index c68fbc499..c19332c74 100644
---- a/src/XrdCl/XrdClXCpSrc.cc
-+++ b/src/XrdCl/XrdClXCpSrc.cc
-@@ -95,7 +95,6 @@ class ChunkHandler: public ResponseHandler
- ChunkInfo *rsp = nullptr;
- response->Get( rsp );
- chunk = new PageInfo( rsp->offset, rsp->length, rsp->buffer );
-- response->Set( ( int* )0 );
- }
- }
-
---
-2.34.1
-
diff --git a/xrootd.spec b/xrootd.spec
index 4266a0b..89d82a4 100644
--- a/xrootd.spec
+++ b/xrootd.spec
@@ -1,8 +1,3 @@
-%ifarch %{ix86} %{arm}
-# LTO does not work for the POSIX preload code on 32 bit architectures
-%define _lto_cflags %{nil}
-%endif
-
%if %{?fedora}%{!?fedora:0}
%ifarch %{ix86} %{arm}
%global ceph 0
@@ -18,32 +13,19 @@
Name: xrootd
Epoch: 1
-Version: 5.4.0
-Release: 5%{?dist}
+Version: 5.4.1
+Release: 1%{?dist}
Summary: Extended ROOT file server
License: LGPLv3+
URL: https://xrootd.slac.stanford.edu/
Source0: https://xrootd.slac.stanford.edu/download/v%{version}/%{name}-%{version}....
-# https://github.com/xrootd/xrootd/pull/1570
-Patch0: 0001-Fix-compilation-when-char-is-unsigned.patch
-# https://github.com/xrootd/xrootd/pull/1571
-Patch1: 0001-Fix-compilation-on-GCC-4.8.patch
-# https://github.com/xrootd/xrootd/pull/1573
-Patch2: 0001-Add-missing-include.patch
# https://github.com/xrootd/xrootd/pull/1575
-Patch3: 0001-Define-ENODATA-if-not-defined.patch
-# https://github.com/xrootd/xrootd/pull/1592
-Patch4: 0001-Fix-warning-about-uninitialized-variable.patch
-Patch5: 0002-Fix-warning-about-dereferncing-null-pointer.patch
-Patch6: 0003-Fix-warning-about-comparing-arrays.patch
-Patch7: 0004-Do-not-give-up-ownership-of-ChunkInfo.patch
-# https://github.com/xrootd/xrootd/pull/1598
-Patch8: 0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
-# https://github.com/xrootd/xrootd/pull/1600
-Patch9: 0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
-# Backport from upstream - fixes a gcc 12 compiler warning
-Patch10: 0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
+Patch0: 0001-Define-ENODATA-if-not-defined.patch
+# https://github.com/xrootd/xrootd/pull/1620
+Patch1: 0001-Ignore-Warray-bounds-warnings-from-stricter-check-in.patch
+# Disable LTO for XrdPosix on 32 bit architectures
+Patch2: 0001-Disable-LTO-for-XrdPosix-on-32-bit-architectures.patch
BuildRequires: gcc-c++
%if %{?rhel}%{!?rhel:0} == 7
@@ -302,21 +284,13 @@ This package contains the API documentation of the xrootd libraries.
%patch0 -p1
%patch1 -p1
%patch2 -p1
-%patch3 -p1
-%patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p1
%build
%if %{?fedora}%{!?fedora:0} >= 36
# Mark some warnings from gcc 12 as not errors
# These are likely bogus - hopefully they can be fixed in gcc updates
%set_build_flags
-CXXFLAGS="${CXXFLAGS} -Wno-error=array-bounds -Wno-error=restrict"
+CXXFLAGS="${CXXFLAGS} -Wno-error=restrict"
%endif
%cmake3 \
@@ -684,6 +658,10 @@ fi
%doc %{_pkgdocdir}
%changelog
+* Thu Feb 24 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.1-1
+- Update to version 5.4.1
+- Drop patches accepted upstream
+
* Mon Jan 31 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-5
- Use openssl 3 compatible code on EPEL 9
commit 9c466e1ca188cd34d84d43c6f1197e06682cac49
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Mon Jan 31 20:14:06 2022 +0100
Use openssl 3 compatible code on EPEL 9
diff --git a/xrootd.spec b/xrootd.spec
index aeab40b..4266a0b 100644
--- a/xrootd.spec
+++ b/xrootd.spec
@@ -19,7 +19,7 @@
Name: xrootd
Epoch: 1
Version: 5.4.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Extended ROOT file server
License: LGPLv3+
@@ -317,13 +317,10 @@ This package contains the API documentation of the xrootd libraries.
# These are likely bogus - hopefully they can be fixed in gcc updates
%set_build_flags
CXXFLAGS="${CXXFLAGS} -Wno-error=array-bounds -Wno-error=restrict"
-%ifarch %{arm}
-CXXFLAGS="${CXXFLAGS} -Wno-error=use-after-free"
-%endif
%endif
%cmake3 \
-%if %{?fedora}%{!?fedora:0} >= 36
+%if %{?fedora}%{!?fedora:0} >= 36 || %{?rhel}%{!?rhel:0} >= 9
-DWITH_OPENSSL3:BOOL=ON \
%endif
%if %{ceph}
@@ -687,6 +684,9 @@ fi
%doc %{_pkgdocdir}
%changelog
+* Mon Jan 31 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-5
+- Use openssl 3 compatible code on EPEL 9
+
* Mon Jan 24 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-4
- Fix compiler warnings from gcc 12
commit 3c4a5ea82176c86adc3219942a033a8ba673a089
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Mon Jan 24 10:05:25 2022 +0100
Fix compiler warnings from gcc 12
diff --git a/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch b/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
new file mode 100644
index 0000000..513fff6
--- /dev/null
+++ b/0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
@@ -0,0 +1,71 @@
+From 654133bc1158e4815a45dc8dd70023e5fff82424 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Thu, 20 Jan 2022 00:19:08 +0100
+Subject: [PATCH] Fix compiler warnings about pointers used after free:
+
+.../src/XrdCms/XrdCmsUtils.cc: In function 'XrdCmsUtils::ParseMan(XrdSysError*, XrdOucTList**, char*, char*, int*, bool)':
+.../src/XrdCms/XrdCmsUtils.cc:226:43: error: pointer 'newMans_175' may be used after 'operator delete(void*, unsigned long)' [-Werror=use-after-free]
+ 226 | if (!plus || strcmp(hSpec, newP->text)) isBad = false;
+ | ~~~~~~^~~~
+.../src/XrdCms/XrdCmsUtils.cc:221:27: note: call to 'operator delete(void*, unsigned long)' here
+ 221 | delete newP;
+ | ^~~~
+
+.../src/XrdCl/XrdClCopy.cc: In function 'IndexRemote(XrdCl::FileSystem*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned short)':
+.../src/XrdCl/XrdClCopy.cc:442:17: error: pointer used after 'operator delete(void*, unsigned long)' [-Werror=use-after-free]
+ 442 | log->Error( AppMsg, "Bad URL: %s", current->Path );
+ | ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.../src/XrdCl/XrdClCopy.cc:441:14: note: call to 'operator delete(void*, unsigned long)' here
+ 441 | delete current;
+ | ^~~~~~~
+---
+ src/XrdCl/XrdClCopy.cc | 2 +-
+ src/XrdCms/XrdCmsUtils.cc | 18 +++++++++---------
+ 2 files changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/src/XrdCl/XrdClCopy.cc b/src/XrdCl/XrdClCopy.cc
+index 78d27589c..c2b754bf5 100644
+--- a/src/XrdCl/XrdClCopy.cc
++++ b/src/XrdCl/XrdClCopy.cc
+@@ -438,8 +438,8 @@ XrdCpFile *IndexRemote( XrdCl::FileSystem *fs,
+ current = new XrdCpFile( path.c_str(), badUrl );
+ if( badUrl )
+ {
+- delete current;
+ log->Error( AppMsg, "Bad URL: %s", current->Path );
++ delete current;
+ return 0;
+ }
+
+diff --git a/src/XrdCms/XrdCmsUtils.cc b/src/XrdCms/XrdCmsUtils.cc
+index 49c448849..8d25973bc 100644
+--- a/src/XrdCms/XrdCmsUtils.cc
++++ b/src/XrdCms/XrdCmsUtils.cc
+@@ -223,15 +223,15 @@ bool XrdCmsUtils::ParseMan(XrdSysError *eDest, XrdOucTList **oldMans,
+ }
+ oldP = oldP->next;
+ }
+- if (!plus || strcmp(hSpec, newP->text)) isBad = false;
+- else {eDest->Say("Config warning: "
+- "Cyclic DNS registration for ",newP->text,"\n"
+- "Config warning: This cluster will exhibit "
+- "undefined behaviour!!!");
+- isBad = true;
+- }
+- if (!oldP)
+- {appList = SInsert(appList, newP);
++ if (!oldP)
++ {if (!plus || strcmp(hSpec, newP->text)) isBad = false;
++ else {eDest->Say("Config warning: "
++ "Cyclic DNS registration for ",newP->text,"\n"
++ "Config warning: This cluster will exhibit "
++ "undefined behaviour!!!");
++ isBad = true;
++ }
++ appList = SInsert(appList, newP);
+ if (plus && !hush) Display(eDest, hSpec, newP->text, isBad);
+ }
+ }
+--
+2.34.1
+
diff --git a/0001-Fix-warning-about-uninitialized-variable.patch b/0001-Fix-warning-about-uninitialized-variable.patch
new file mode 100644
index 0000000..fe72398
--- /dev/null
+++ b/0001-Fix-warning-about-uninitialized-variable.patch
@@ -0,0 +1,34 @@
+From 0898ed380a457ff1c0c2547953d0fd36eaeaeebe Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Mon, 17 Jan 2022 09:14:08 +0100
+Subject: [PATCH 1/4] Fix warning about uninitialized variable
+
+The cond variable is initialized using the mutex before the mutex is
+initialized. Changing the order of the members in the class ensures
+the mutex is initialized first.
+
+.../src/./XrdXrootd/XrdXrootdAioTask.hh:70:51: error: member 'XrdXrootdAioTask::aioMutex' is used uninitialized [-Werror=uninitialized]
+ 70 | : XrdJob(what), aioReady(aioMutex) {}
+ | ^~~~~~~~
+cc1plus: all warnings being treated as errors
+---
+ src/XrdXrootd/XrdXrootdAioTask.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/XrdXrootd/XrdXrootdAioTask.hh b/src/XrdXrootd/XrdXrootdAioTask.hh
+index 2c49ff7d1..c04858bba 100644
+--- a/src/XrdXrootd/XrdXrootdAioTask.hh
++++ b/src/XrdXrootd/XrdXrootdAioTask.hh
+@@ -83,8 +83,8 @@ virtual bool CopyL2F(XrdXrootdAioBuff *aioP) = 0;
+
+ static const char* TraceID;
+
+- XrdSysCondVar2 aioReady;
+ XrdSysMutex aioMutex; // Locks private data
++ XrdSysCondVar2 aioReady;
+ XrdXrootdAioBuff* pendQ;
+ XrdXrootdAioBuff* pendQEnd; // -> Last element in pendQ
+
+--
+2.34.1
+
diff --git a/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch b/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
new file mode 100644
index 0000000..7b7cf1d
--- /dev/null
+++ b/0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
@@ -0,0 +1,125 @@
+From 0dc292fbf63d25c6a9e000a2e66d7e3e0b8db735 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Mon, 24 Jan 2022 06:56:43 +0100
+Subject: [PATCH] Fix warnings about allocations exceeding maximum object size
+
+In member function 'Init',
+ inlined from 'Init' at .../src/Xrd/XrdBuffXL.cc:64:6:
+.../src/Xrd/XrdBuffXL.cc:90:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
+ 90 | bucket = new BuckVec[lg2+1];
+ | ^
+/usr/include/c++/12/new: In member function 'Init':
+/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
+ 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ | ^
+
+.../src/XrdOuc/XrdOucBuffer.cc: In member function '__ct_base ':
+.../src/XrdOuc/XrdOucBuffer.cc:79:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
+ 79 | bSlot = new BuffSlot[slots];
+ | ^
+/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
+ 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ | ^
+
+.../src/XrdNet/XrdNetUtils.cc: In function 'GetAddrs':
+.../src/XrdNet/XrdNetUtils.cc:262:35: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
+ 262 | *aVec = new XrdNetAddr[aVsz];
+ | ^
+/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
+ 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ | ^
+
+In member function '__ct ',
+ inlined from '__ct_base ' at .../src/XrdXrootd/XrdXrootdJob.cc:459:29:
+.../src/./XrdOuc/XrdOucTable.hh:43:30: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
+ 43 | Table = new OucTable[maxe];
+ | ^
+/usr/include/c++/12/new: In member function '__ct_base ':
+/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
+ 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ | ^
+
+.../src/XrdPosix/XrdPosixAdmin.cc: In member function 'FanOut':
+.../src/XrdPosix/XrdPosixAdmin.cc:69:27: warning: argument 1 value '18446744073709551615' exceeds maximum object size 9223372036854775807 [-Walloc-size-larger-than=]
+ 69 | uVec = new XrdCl::URL[i];
+ | ^
+/usr/include/c++/12/new:128:26: note: in a call to allocation function 'operator new []' declared here
+ 128 | _GLIBCXX_NODISCARD void* operator new[](std::size_t) _GLIBCXX_THROW (std::bad_alloc)
+ | ^
+---
+ src/Xrd/XrdBuffXL.cc | 3 ++-
+ src/XrdNet/XrdNetUtils.cc | 2 +-
+ src/XrdOuc/XrdOucBuffer.cc | 2 +-
+ src/XrdOuc/XrdOucTable.hh | 2 +-
+ src/XrdPosix/XrdPosixAdmin.cc | 2 +-
+ 5 files changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/src/Xrd/XrdBuffXL.cc b/src/Xrd/XrdBuffXL.cc
+index f84ef77cb..f769522af 100644
+--- a/src/Xrd/XrdBuffXL.cc
++++ b/src/Xrd/XrdBuffXL.cc
+@@ -63,7 +63,8 @@ XrdBuffXL::XrdBuffXL() : bucket(0), totalo(0), pagsz(getpagesize()), slots(0),
+
+ void XrdBuffXL::Init(int maxMSZ)
+ {
+- int lg2, chunksz;
++ unsigned int lg2;
++ int chunksz;
+
+ // If this is a duplicate call, delete the previous setup
+ //
+diff --git a/src/XrdNet/XrdNetUtils.cc b/src/XrdNet/XrdNetUtils.cc
+index 0f5eac348..fbc6c5ff7 100644
+--- a/src/XrdNet/XrdNetUtils.cc
++++ b/src/XrdNet/XrdNetUtils.cc
+@@ -259,7 +259,7 @@ const char *XrdNetUtils::GetAddrs(const char *hSpec,
+ //
+ if (aInfo.aNum4 || aInfo.aNum6)
+ {aVsz = aInfo.aNum4 + aInfo.aNum6;
+- *aVec = new XrdNetAddr[aVsz];
++ *aVec = new XrdNetAddr[(unsigned int)aVsz];
+ FillAddr(aInfo, *aVec);
+ }
+
+diff --git a/src/XrdOuc/XrdOucBuffer.cc b/src/XrdOuc/XrdOucBuffer.cc
+index 2faee1d51..10f79d999 100644
+--- a/src/XrdOuc/XrdOucBuffer.cc
++++ b/src/XrdOuc/XrdOucBuffer.cc
+@@ -76,7 +76,7 @@ XrdOucBuffPool::XrdOucBuffPool(int minsz, int maxsz,
+
+ // Allocate a slot vector for this
+ //
+- bSlot = new BuffSlot[slots];
++ bSlot = new BuffSlot[(unsigned int)slots];
+
+ // Complete initializing the slot vector
+ //
+diff --git a/src/XrdOuc/XrdOucTable.hh b/src/XrdOuc/XrdOucTable.hh
+index 92058c42b..2805a259c 100644
+--- a/src/XrdOuc/XrdOucTable.hh
++++ b/src/XrdOuc/XrdOucTable.hh
+@@ -40,7 +40,7 @@ public:
+
+ XrdOucTable(int maxe)
+ {int i;
+- Table = new OucTable[maxe];
++ Table = new OucTable[(unsigned int)maxe];
+ maxnum = maxe; curnum = 0; avlnum = 0;
+ for (i = 1; i < maxe; i++) Table[i-1].Fnum = i;
+ Table[maxe-1].Fnum = -1;
+diff --git a/src/XrdPosix/XrdPosixAdmin.cc b/src/XrdPosix/XrdPosixAdmin.cc
+index c26571394..2cad5517e 100644
+--- a/src/XrdPosix/XrdPosixAdmin.cc
++++ b/src/XrdPosix/XrdPosixAdmin.cc
+@@ -49,7 +49,7 @@ XrdCl::URL *XrdPosixAdmin::FanOut(int &num)
+ XrdCl::URL *uVec;
+ XrdNetAddr netLoc;
+ const char *hName;
+- int i;
++ unsigned int i;
+
+ // Make sure admin is ok
+ //
+--
+2.34.1
+
diff --git a/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch b/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
new file mode 100644
index 0000000..34f0cab
--- /dev/null
+++ b/0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
@@ -0,0 +1,161 @@
+From 7615d866986131f3548b5863b38872a2e4dc58d9 Mon Sep 17 00:00:00 2001
+From: Andrew Hanushevsky <abh(a)stanford.edu>
+Date: Thu, 20 Jan 2022 23:22:09 -0800
+Subject: [PATCH] [Server] Prevent SEGV on busy systems due to missing lock
+ call for background jobs.
+
+---
+ src/XrdXrootd/XrdXrootdJob.cc | 50 +++++++++++++++++++++++++++++------
+ 1 file changed, 42 insertions(+), 8 deletions(-)
+
+diff --git a/src/XrdXrootd/XrdXrootdJob.cc b/src/XrdXrootd/XrdXrootdJob.cc
+index 1b2703d96..467323de5 100644
+--- a/src/XrdXrootd/XrdXrootdJob.cc
++++ b/src/XrdXrootd/XrdXrootdJob.cc
+@@ -37,6 +37,7 @@
+ #include "Xrd/XrdScheduler.hh"
+ #include "XrdOuc/XrdOucProg.hh"
+ #include "XrdOuc/XrdOucStream.hh"
++#include "XrdSys/XrdSysError.hh"
+ #include "XrdSys/XrdSysPlatform.hh"
+ #include "XrdSys/XrdSysRAtomic.hh"
+ #include "XrdXrootd/XrdXrootdJob.hh"
+@@ -99,6 +100,12 @@ static const int argvnum = sizeof(theArgs)/sizeof(theArgs[0]);
+ /* G l o b a l F u n c t i o n s */
+ /******************************************************************************/
+
++namespace XrdXrootd
++{
++extern XrdSysError eLog;
++}
++using namespace XrdXrootd;
++
+ extern XrdSysTrace XrdXrootdTrace;
+
+ int XrdXrootdJobWaiting(XrdXrootdJob2Do *item, void *arg)
+@@ -152,10 +159,15 @@ XrdXrootdJob2Do::~XrdXrootdJob2Do()
+ /******************************************************************************/
+ /* D o I t */
+ /******************************************************************************/
++
++#define jobInfo theJob->JobName<<' '<<(theArgs[1] ? theArgs[1] : "")\
++ <<(theArgs[2] ? " " : "")<<(theArgs[2] ? theArgs[2] : "")
+
+ void XrdXrootdJob2Do::DoIt()
+ {
++ static const char *TraceID = "jobXeq";
+ XrdXrootdJob2Do *jp = 0;
++ const char *endStat = " completed";
+ char *lp = 0;
+ int i, rc = 0;
+
+@@ -163,9 +175,11 @@ void XrdXrootdJob2Do::DoIt()
+ // perform the actual function and get the result and send to any async clients
+ //
+ if (Status != Job_Cancel)
+- {if ((rc = theJob->theProg->Run(&jobStream, theArgs[1], theArgs[2],
++ {TRACE(REQ, "Job "<<jobInfo<<" started");
++ if ((rc = theJob->theProg->Run(&jobStream, theArgs[1], theArgs[2],
+ theArgs[3], theArgs[4])))
+ {Status = Job_Cancel;
++ endStat= " failed";
+ lp = jobStream.GetLine();
+ theJob->myMutex.Lock();
+ }
+@@ -173,15 +187,22 @@ void XrdXrootdJob2Do::DoIt()
+ rc = theJob->theProg->RunDone(jobStream);
+ theJob->myMutex.Lock();
+ if ((rc && rc != -EPIPE) || (rc == -EPIPE && (!lp || !(*lp))))
+- Status = Job_Cancel;
++ {Status = Job_Cancel; endStat = " failed";}
+ else if (Status != Job_Cancel)
+ {Status = Job_Done;
+ for (i = 0; i < numClients; i++)
+ if (!Client[i].isSync) {sendResult(lp); break;}
+ }
+ }
++ } else {
++ endStat = " cancelled";
++ theJob->myMutex.Lock();
+ }
+
++// Produce a trace record
++//
++ TRACE(REQ, "Job "<<jobInfo<<endStat);
++
+ // If the number of jobs > than the max allowed, then redrive a waiting job
+ // if in fact we represent a legitimate job slot (this could a phantom slot
+ // due to ourselves being cancelled.
+@@ -313,7 +334,7 @@ XrdOucTList *XrdXrootdJob2Do::lstClient()
+ /* v e r C l i e n t */
+ /******************************************************************************/
+
+-int XrdXrootdJob2Do::verClient(int dodel)
++int XrdXrootdJob2Do::verClient(int dodel) // Caller must have theJob->myMutex
+ {
+ int i, j, k;
+
+@@ -330,9 +351,16 @@ int XrdXrootdJob2Do::verClient(int dodel)
+ //
+ if (!numClients && dodel)
+ {XrdXrootdJob2Do *jp = theJob->JobTable.Remove(JobNum);
+- if (jp->Status == XrdXrootdJob2Do::Job_Waiting) theJob->numJobs--;
+- delete jp;
+- return 0;
++ if (jp)
++ {if (jp->Status == XrdXrootdJob2Do::Job_Waiting) theJob->numJobs--;
++ delete jp;
++ return 0;
++ } else {
++ char ebuff[80];
++ snprintf(ebuff, sizeof(ebuff), "Unable to find %s job %d;",
++ theJob->JobName, JobNum);
++ eLog.Emsg("Job2Do", ebuff, "job slot disabled!");
++ }
+ }
+ return numClients;
+ }
+@@ -341,7 +369,7 @@ int XrdXrootdJob2Do::verClient(int dodel)
+ /* R e d r i v e */
+ /******************************************************************************/
+
+-void XrdXrootdJob2Do::Redrive()
++void XrdXrootdJob2Do::Redrive() // Caller must have theJob->myMutex held
+ {
+ XrdXrootdJob2Do *jp;
+ int Start = 0;
+@@ -364,10 +392,12 @@ void XrdXrootdJob2Do::Redrive()
+ /******************************************************************************/
+ /* s e n d R e s u l t */
+ /******************************************************************************/
++
++// Caller must have theJob->myMutex locked.
+
+ void XrdXrootdJob2Do::sendResult(char *lp, int caned, int jrc)
+ {
+- static const char *TraceID = "sendResult";
++ static const char *TraceID = "jobSendResult";
+ static const kXR_int32 Xcan = static_cast<kXR_int32>(htonl(kXR_Cancelled));
+ XrdXrootdReqID ReqID;
+ struct iovec jobVec[6];
+@@ -619,6 +649,8 @@ int XrdXrootdJob::Schedule(const char *jkey,
+ /* C l e a n U p */
+ /******************************************************************************/
+
++// The caller must have myMutex locked
++
+ void XrdXrootdJob::CleanUp(XrdXrootdJob2Do *jp)
+ {
+ int theStatus = jp->Status;
+@@ -641,6 +673,8 @@ void XrdXrootdJob::CleanUp(XrdXrootdJob2Do *jp)
+ /* s e n d R e s u l t */
+ /******************************************************************************/
+
++// Caller must have myMutex locked.
++
+ int XrdXrootdJob::sendResult(XrdXrootdResponse *resp,
+ const char *rpfx,
+ XrdXrootdJob2Do *job)
+--
+2.34.1
+
diff --git a/0002-Fix-warning-about-dereferncing-null-pointer.patch b/0002-Fix-warning-about-dereferncing-null-pointer.patch
new file mode 100644
index 0000000..09c04e2
--- /dev/null
+++ b/0002-Fix-warning-about-dereferncing-null-pointer.patch
@@ -0,0 +1,39 @@
+From 1780fc12fb947a2bda22007a715527a18621a6cb Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Mon, 17 Jan 2022 09:21:23 +0100
+Subject: [PATCH 2/4] Fix warning about dereferncing null pointer
+
+In member function 'XrdCl::ChunkHandler::ToPgInfo(XrdCl::AnyObject*, XrdCl::PageInfo*&)',
+ inlined from 'XrdCl::ChunkHandler::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*)' at .../src/XrdCl/XrdClXCpSrc.cc:58:17:
+.../src/XrdCl/XrdClXCpSrc.cc:97:66: error: 'this' pointer is null [-Werror=nonnull]
+ 97 | *chunk = PageInfo( rsp->offset, rsp->length, rsp->buffer );
+ | ^
+In file included from .../src/./XrdCl/XrdClFileSystem.hh:32,
+ from .../src/./XrdCl/XrdClFile.hh:28,
+ from .../src/./XrdCl/XrdClXCpSrc.hh:28,
+ from .../src/XrdCl/XrdClXCpSrc.cc:25:
+.../src/./XrdCl/XrdClXRootDResponses.hh: In member function 'XrdCl::ChunkHandler::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*)':
+.../src/./XrdCl/XrdClXRootDResponses.hh:962:15: note: in a call to non-static member function 'XrdCl::PageInfo::operator=(XrdCl::PageInfo&&)'
+ 962 | PageInfo& operator=( PageInfo &&pginf );
+ | ^~~~~~~~
+cc1plus: all warnings being treated as errors
+---
+ src/XrdCl/XrdClXCpSrc.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/XrdCl/XrdClXCpSrc.cc b/src/XrdCl/XrdClXCpSrc.cc
+index 532df79a4..c68fbc499 100644
+--- a/src/XrdCl/XrdClXCpSrc.cc
++++ b/src/XrdCl/XrdClXCpSrc.cc
+@@ -94,7 +94,7 @@ class ChunkHandler: public ResponseHandler
+ {
+ ChunkInfo *rsp = nullptr;
+ response->Get( rsp );
+- *chunk = PageInfo( rsp->offset, rsp->length, rsp->buffer );
++ chunk = new PageInfo( rsp->offset, rsp->length, rsp->buffer );
+ response->Set( ( int* )0 );
+ }
+ }
+--
+2.34.1
+
diff --git a/0003-Fix-warning-about-comparing-arrays.patch b/0003-Fix-warning-about-comparing-arrays.patch
new file mode 100644
index 0000000..33c8bcf
--- /dev/null
+++ b/0003-Fix-warning-about-comparing-arrays.patch
@@ -0,0 +1,30 @@
+From 62337be8ada4692bfd10eceaa042e3c4a553ece8 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Mon, 17 Jan 2022 09:24:46 +0100
+Subject: [PATCH 3/4] Fix warning about comparing arrays
+
+Cast the arrays to pointers to avoid the warning
+
+.../src/XrdPosix/XrdPosixXrootd.cc:955:22: error: comparison between two arrays [-Werror=array-compare]
+ 955 | if (dp32->d_name != dp64->d_name)
+ | ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~
+---
+ src/XrdPosix/XrdPosixXrootd.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/XrdPosix/XrdPosixXrootd.cc b/src/XrdPosix/XrdPosixXrootd.cc
+index 517dc07ec..cedb3ca40 100644
+--- a/src/XrdPosix/XrdPosixXrootd.cc
++++ b/src/XrdPosix/XrdPosixXrootd.cc
+@@ -952,7 +952,7 @@ struct dirent* XrdPosixXrootd::Readdir(DIR *dirp)
+ if (!(dp64 = Readdir64(dirp))) return 0;
+
+ dp32 = (struct dirent *)dp64;
+- if (dp32->d_name != dp64->d_name)
++ if ((char*)dp32->d_name != (char*)dp64->d_name)
+ {dp32->d_ino = dp64->d_ino;
+ #if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__GNU__) && !(defined(__FreeBSD_kernel__) && defined(__GLIBC__))
+ dp32->d_off = dp64->d_off;
+--
+2.34.1
+
diff --git a/0004-Do-not-give-up-ownership-of-ChunkInfo.patch b/0004-Do-not-give-up-ownership-of-ChunkInfo.patch
new file mode 100644
index 0000000..0d88bab
--- /dev/null
+++ b/0004-Do-not-give-up-ownership-of-ChunkInfo.patch
@@ -0,0 +1,24 @@
+From 86d40e79b4ece53d9e5c2dfb6b40ff77888ebad6 Mon Sep 17 00:00:00 2001
+From: Mattias Ellert <mattias.ellert(a)physics.uu.se>
+Date: Tue, 18 Jan 2022 16:01:34 +0100
+Subject: [PATCH 4/4] Do not give up ownership of ChunkInfo
+
+---
+ src/XrdCl/XrdClXCpSrc.cc | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/XrdCl/XrdClXCpSrc.cc b/src/XrdCl/XrdClXCpSrc.cc
+index c68fbc499..c19332c74 100644
+--- a/src/XrdCl/XrdClXCpSrc.cc
++++ b/src/XrdCl/XrdClXCpSrc.cc
+@@ -95,7 +95,6 @@ class ChunkHandler: public ResponseHandler
+ ChunkInfo *rsp = nullptr;
+ response->Get( rsp );
+ chunk = new PageInfo( rsp->offset, rsp->length, rsp->buffer );
+- response->Set( ( int* )0 );
+ }
+ }
+
+--
+2.34.1
+
diff --git a/xrootd.spec b/xrootd.spec
index 5e4f370..aeab40b 100644
--- a/xrootd.spec
+++ b/xrootd.spec
@@ -19,7 +19,7 @@
Name: xrootd
Epoch: 1
Version: 5.4.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Extended ROOT file server
License: LGPLv3+
@@ -33,6 +33,17 @@ Patch1: 0001-Fix-compilation-on-GCC-4.8.patch
Patch2: 0001-Add-missing-include.patch
# https://github.com/xrootd/xrootd/pull/1575
Patch3: 0001-Define-ENODATA-if-not-defined.patch
+# https://github.com/xrootd/xrootd/pull/1592
+Patch4: 0001-Fix-warning-about-uninitialized-variable.patch
+Patch5: 0002-Fix-warning-about-dereferncing-null-pointer.patch
+Patch6: 0003-Fix-warning-about-comparing-arrays.patch
+Patch7: 0004-Do-not-give-up-ownership-of-ChunkInfo.patch
+# https://github.com/xrootd/xrootd/pull/1598
+Patch8: 0001-Fix-compiler-warnings-about-pointers-used-after-free.patch
+# https://github.com/xrootd/xrootd/pull/1600
+Patch9: 0001-Fix-warnings-about-allocations-exceeding-maximum-obj.patch
+# Backport from upstream - fixes a gcc 12 compiler warning
+Patch10: 0001-Server-Prevent-SEGV-on-busy-systems-due-to-missing-l.patch
BuildRequires: gcc-c++
%if %{?rhel}%{!?rhel:0} == 7
@@ -292,8 +303,25 @@ This package contains the API documentation of the xrootd libraries.
%patch1 -p1
%patch2 -p1
%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
%build
+%if %{?fedora}%{!?fedora:0} >= 36
+# Mark some warnings from gcc 12 as not errors
+# These are likely bogus - hopefully they can be fixed in gcc updates
+%set_build_flags
+CXXFLAGS="${CXXFLAGS} -Wno-error=array-bounds -Wno-error=restrict"
+%ifarch %{arm}
+CXXFLAGS="${CXXFLAGS} -Wno-error=use-after-free"
+%endif
+%endif
+
%cmake3 \
%if %{?fedora}%{!?fedora:0} >= 36
-DWITH_OPENSSL3:BOOL=ON \
@@ -659,6 +687,9 @@ fi
%doc %{_pkgdocdir}
%changelog
+* Mon Jan 24 2022 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-4
+- Fix compiler warnings from gcc 12
+
* Sat Jan 22 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:5.4.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
commit 8573f1201109554385158a3d41111776edfdd0f8
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Jan 22 05:30:09 2022 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/xrootd.spec b/xrootd.spec
index 665b6ac..5e4f370 100644
--- a/xrootd.spec
+++ b/xrootd.spec
@@ -19,7 +19,7 @@
Name: xrootd
Epoch: 1
Version: 5.4.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Extended ROOT file server
License: LGPLv3+
@@ -659,6 +659,9 @@ fi
%doc %{_pkgdocdir}
%changelog
+* Sat Jan 22 2022 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:5.4.0-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
+
* Tue Dec 14 2021 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.4.0-2
- Don't use unimplemented regex functions on EPEL 7.
- Add missing include (GNU/Hurd)
2 years, 1 month
Architecture specific change in rpms/qemu.git
by githook-noreply@fedoraproject.org
The package rpms/qemu.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/qemu.git/commit/?id=28427057d87cb....
Change:
+%ifnarch %{ix86} x86_64 %{arm} aarch64
Thanks.
Full change:
============
commit eef9c627be90f8e1d44465664440206c1c8a28a6
Author: Cole Robinson <crobinso(a)redhat.com>
Date: Thu Feb 24 14:49:11 2022 -0500
Add edk-arm dep for system-arm
It's expected nowdays for -M virt
Signed-off-by: Cole Robinson <crobinso(a)redhat.com>
diff --git a/qemu.spec b/qemu.spec
index bfd87d2..43c8ac5 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -956,6 +956,9 @@ This package provides the QEMU system emulator for ARM systems.
%package system-arm-core
Summary: QEMU system emulator for ARM
Requires: %{name}-common = %{epoch}:%{version}-%{release}
+%if %{have_edk2}
+Requires: edk2-arm
+%endif
%description system-arm-core
This package provides the QEMU system emulator for ARM boards.
commit 28427057d87cb5ad82012812c5c4e0419815baa4
Author: Cole Robinson <crobinso(a)redhat.com>
Date: Thu Feb 24 14:47:58 2022 -0500
spec: Some fixes for centos9 stream virt-preview builds
Signed-off-by: Cole Robinson <crobinso(a)redhat.com>
diff --git a/qemu.spec b/qemu.spec
index 1e98f91..bfd87d2 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -70,9 +70,12 @@
%endif
# Matches spice ExclusiveArch
-%global have_spice 0
-%ifarch %{ix86} x86_64 %{arm} aarch64
%global have_spice 1
+%ifnarch %{ix86} x86_64 %{arm} aarch64
+%global have_spice 0
+%endif
+%if 0%{?rhel} >= 9
+%global have_spice 0
%endif
# Matches xen ExclusiveArch
@@ -124,7 +127,11 @@
%define have_block_rbd 0
%endif
+
%global have_block_gluster 1
+%if 0%{?rhel} >= 9
+%global have_block_gluster 0
+%endif
%define have_block_nfs 0
%if 0%{?fedora}
@@ -143,6 +150,11 @@
%define have_librdma 0
%endif
+%define have_libcacard 1
+%if 0%{?rhel} >= 9
+%define have_libcacard 0
+%endif
+
# LTO still has issues with qemu on armv7hl and aarch64
# https://bugzilla.redhat.com/show_bug.cgi?id=1952483
%global _lto_cflags %{nil}
@@ -189,7 +201,6 @@
%define requires_char_baum Requires: %{name}-char-baum = %{evr}
%define requires_device_usb_host Requires: %{name}-device-usb-host = %{evr}
%define requires_device_usb_redirect Requires: %{name}-device-usb-redirect = %{evr}
-%define requires_device_usb_smartcard Requires: %{name}-device-usb-smartcard = %{evr}
%define requires_ui_curses Requires: %{name}-ui-curses = %{evr}
%define requires_ui_gtk Requires: %{name}-ui-gtk = %{evr}
%define requires_ui_sdl Requires: %{name}-ui-sdl = %{evr}
@@ -230,6 +241,12 @@
%define requires_char_spice %{nil}
%endif
+%if %{have_libcacard}
+%define requires_device_usb_smartcard Requires: %{name}-device-usb-smartcard = %{evr}
+%else
+%define requires_device_usb_smartcard %{nil}
+%endif
+
%global requires_all_modules \
%{requires_block_curl} \
%{requires_block_dmg} \
@@ -421,8 +438,10 @@ BuildRequires: xen-devel
BuildRequires: bzip2-devel
# TLS test suite
BuildRequires: libtasn1-devel
+%if %{have_libcacard}
# smartcard device
BuildRequires: libcacard-devel
+%endif
%if %{have_virgl}
# virgl 3d support
BuildRequires: virglrenderer-devel
@@ -783,11 +802,13 @@ Requires: %{name}-common%{?_isa} = %{epoch}:%{version}-%{release}
%description device-usb-redirect
This package provides the usbredir device for QEMU.
+%if %{have_libcacard}
%package device-usb-smartcard
Summary: QEMU USB smartcard device
Requires: %{name}-common%{?_isa} = %{epoch}:%{version}-%{release}
%description device-usb-smartcard
This package provides the USB smartcard device for QEMU.
+%endif
%if %{have_virgl}
%package device-display-vhost-user-gpu
@@ -1465,7 +1486,9 @@ run_configure \
--enable-dmg \
--enable-fuse \
--enable-gio \
+%if %{have_block_gluster}
--enable-glusterfs \
+%endif
--enable-gtk \
--enable-libdaxctl \
%if %{have_block_nfs}
@@ -1492,7 +1515,9 @@ run_configure \
%if %{have_sdl_image}
--enable-sdl-image \
%endif
+%if %{have_libcacard}
--enable-smartcard \
+%endif
%if %{have_spice}
--enable-spice \
--enable-spice-protocol \
@@ -1967,8 +1992,10 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \
%{_libdir}/%{name}/hw-usb-host.so
%files device-usb-redirect
%{_libdir}/%{name}/hw-usb-redirect.so
+%if %{have_libcacard}
%files device-usb-smartcard
%{_libdir}/%{name}/hw-usb-smartcard.so
+%endif
%if %{have_virgl}
2 years, 1 month
Architecture specific change in rpms/rust-image-roll.git
by githook-noreply@fedoraproject.org
The package rpms/rust-image-roll.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-image-roll.git/commit/?id=91....
Change:
+%ifarch s390x
Thanks.
Full change:
============
commit 91b1863c2aa8b5a6562b2b961f981047f9031661
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 12:34:27 2022 -0500
Patch for rust-gtk 0.15 support
diff --git a/0001-updated-gtk-rs-version-added-zooming-with-mouse-scro.patch b/0001-updated-gtk-rs-version-added-zooming-with-mouse-scro.patch
new file mode 100644
index 0000000..154dc7b
--- /dev/null
+++ b/0001-updated-gtk-rs-version-added-zooming-with-mouse-scro.patch
@@ -0,0 +1,946 @@
+diff --git a/src/app.rs b/src/app.rs
+index 9c200cf..beabab2 100644
+--- a/src/app.rs
++++ b/src/app.rs
+@@ -160,8 +160,12 @@ impl App {
+ self.image_list.clone(),
+ self.selection_coords.clone(),
+ ),
+- Event::PreviewSmaller => action::preview_smaller(&self.sender, &self.settings),
+- Event::PreviewLarger => action::preview_larger(&self.sender, &self.settings),
++ Event::PreviewSmaller(value) => {
++ action::preview_smaller(&self.sender, &self.settings, value)
++ }
++ Event::PreviewLarger(value) => {
++ action::preview_larger(&self.sender, &self.settings, value)
++ }
+ Event::PreviewFitScreen => action::preview_fit_screen(&self.sender),
+ Event::NextImage => {
+ action::next_image(&self.sender, self.image_list.clone(), &mut self.file_list)
+diff --git a/src/file_list.rs b/src/file_list.rs
+index 15bc3fe..bcf7688 100644
+--- a/src/file_list.rs
++++ b/src/file_list.rs
+@@ -41,7 +41,7 @@ impl FileList {
+ )
+ })?;
+ let folder_monitor = current_folder
+- .monitor_directory::<Cancellable>(FileMonitorFlags::NONE, None)
++ .monitor_directory(FileMonitorFlags::NONE, <Option<&Cancellable>>::None)
+ .ok();
+
+ if folder_monitor.is_none() {
+@@ -69,7 +69,7 @@ impl FileList {
+
+ pub fn refresh(&mut self) -> Result<()> {
+ if let Some(current_folder) = &self.current_folder {
+- if !current_folder.query_exists::<Cancellable>(None) {
++ if !current_folder.query_exists(<Option<&Cancellable>>::None) {
+ self.file_list = Vec::new();
+ self.current_file = None;
+ self.current_folder = None;
+@@ -163,7 +163,11 @@ impl FileList {
+
+ fn enumerate_files(folder: &gio::File) -> Result<Vec<gio::FileInfo>> {
+ Ok(folder
+- .enumerate_children::<Cancellable>("standard::*", FileQueryInfoFlags::NONE, None)?
++ .enumerate_children(
++ "standard::*",
++ FileQueryInfoFlags::NONE,
++ <Option<&Cancellable>>::None,
++ )?
+ .into_iter()
+ .filter_map(|file| file.ok())
+ .filter(|file| file.file_type() == FileType::Regular)
+diff --git a/src/image.rs b/src/image.rs
+index 8dcdcbb..d5cc064 100644
+--- a/src/image.rs
++++ b/src/image.rs
+@@ -286,46 +286,86 @@ impl From<PreviewSize> for String {
+ }
+
+ impl PreviewSize {
+- pub fn smaller(self) -> PreviewSize {
++ pub fn smaller(self) -> Option<PreviewSize> {
+ match self {
+- PreviewSize::BestFit(_, _) => PreviewSize::OriginalSize,
+- PreviewSize::OriginalSize => PreviewSize::Resized(75),
+- PreviewSize::Resized(value) if value == 500 => PreviewSize::Resized(200),
+- PreviewSize::Resized(value) if value == 200 => PreviewSize::Resized(150),
+- PreviewSize::Resized(value) if value == 150 => PreviewSize::Resized(133),
+- PreviewSize::Resized(value) if value == 133 => PreviewSize::OriginalSize,
+- PreviewSize::Resized(value) if value == 75 => PreviewSize::Resized(66),
+- PreviewSize::Resized(value) if value == 66 => PreviewSize::Resized(50),
+- PreviewSize::Resized(value) if value == 50 => PreviewSize::Resized(33),
+- PreviewSize::Resized(value) if value == 33 => PreviewSize::Resized(25),
+- PreviewSize::Resized(value) if value == 25 => PreviewSize::Resized(10),
+- PreviewSize::Resized(value) if value == 10 => PreviewSize::Resized(5),
+- PreviewSize::Resized(_) => panic!("Preview size with given scale is not supported"),
++ PreviewSize::BestFit(_, _) => Some(PreviewSize::OriginalSize),
++ PreviewSize::OriginalSize => Some(PreviewSize::Resized(75)),
++ PreviewSize::Resized(value) if value > 200 => Some(PreviewSize::Resized(200)),
++ PreviewSize::Resized(value) if value > 150 => Some(PreviewSize::Resized(150)),
++ PreviewSize::Resized(value) if value > 133 => Some(PreviewSize::Resized(133)),
++ PreviewSize::Resized(value) if value > 100 => Some(PreviewSize::OriginalSize),
++ PreviewSize::Resized(value) if value > 75 => Some(PreviewSize::Resized(75)),
++ PreviewSize::Resized(value) if value > 66 => Some(PreviewSize::Resized(66)),
++ PreviewSize::Resized(value) if value > 50 => Some(PreviewSize::Resized(50)),
++ PreviewSize::Resized(value) if value > 33 => Some(PreviewSize::Resized(33)),
++ PreviewSize::Resized(value) if value > 25 => Some(PreviewSize::Resized(25)),
++ PreviewSize::Resized(value) if value > 10 => Some(PreviewSize::Resized(10)),
++ PreviewSize::Resized(value) if value > 5 => Some(PreviewSize::Resized(5)),
++ PreviewSize::Resized(_) => None,
+ }
+ }
+
++ pub fn smaller_by(self, value: u32) -> Option<PreviewSize> {
++ let old_value = match self {
++ PreviewSize::BestFit(_, _) => return Some(PreviewSize::OriginalSize),
++ PreviewSize::OriginalSize => 100,
++ PreviewSize::Resized(value) => value,
++ };
++
++ old_value
++ .checked_sub(value)
++ .filter(|value| value >= &5)
++ .map(|value| {
++ if value == 100 {
++ PreviewSize::OriginalSize
++ } else {
++ PreviewSize::Resized(value)
++ }
++ })
++ }
++
+ pub fn can_be_smaller(&self) -> bool {
+ !matches!(self, PreviewSize::Resized(value) if value <= &5)
+ }
+
+- pub fn larger(self) -> PreviewSize {
++ pub fn larger(self) -> Option<PreviewSize> {
+ match self {
+- PreviewSize::BestFit(_, _) => PreviewSize::OriginalSize,
+- PreviewSize::OriginalSize => PreviewSize::Resized(133),
+- PreviewSize::Resized(value) if value == 5 => PreviewSize::Resized(10),
+- PreviewSize::Resized(value) if value == 10 => PreviewSize::Resized(25),
+- PreviewSize::Resized(value) if value == 25 => PreviewSize::Resized(33),
+- PreviewSize::Resized(value) if value == 33 => PreviewSize::Resized(50),
+- PreviewSize::Resized(value) if value == 50 => PreviewSize::Resized(66),
+- PreviewSize::Resized(value) if value == 66 => PreviewSize::Resized(75),
+- PreviewSize::Resized(value) if value == 75 => PreviewSize::OriginalSize,
+- PreviewSize::Resized(value) if value == 133 => PreviewSize::Resized(150),
+- PreviewSize::Resized(value) if value == 150 => PreviewSize::Resized(200),
+- PreviewSize::Resized(value) if value == 200 => PreviewSize::Resized(500),
+- PreviewSize::Resized(_) => panic!("Preview size with given scale is not supported"),
++ PreviewSize::BestFit(_, _) => Some(PreviewSize::OriginalSize),
++ PreviewSize::OriginalSize => Some(PreviewSize::Resized(133)),
++ PreviewSize::Resized(value) if value < 10 => Some(PreviewSize::Resized(10)),
++ PreviewSize::Resized(value) if value < 25 => Some(PreviewSize::Resized(25)),
++ PreviewSize::Resized(value) if value < 33 => Some(PreviewSize::Resized(33)),
++ PreviewSize::Resized(value) if value < 50 => Some(PreviewSize::Resized(50)),
++ PreviewSize::Resized(value) if value < 66 => Some(PreviewSize::Resized(66)),
++ PreviewSize::Resized(value) if value < 75 => Some(PreviewSize::Resized(75)),
++ PreviewSize::Resized(value) if value < 100 => Some(PreviewSize::OriginalSize),
++ PreviewSize::Resized(value) if value < 133 => Some(PreviewSize::Resized(133)),
++ PreviewSize::Resized(value) if value < 150 => Some(PreviewSize::Resized(150)),
++ PreviewSize::Resized(value) if value < 200 => Some(PreviewSize::Resized(200)),
++ PreviewSize::Resized(value) if value < 500 => Some(PreviewSize::Resized(500)),
++ PreviewSize::Resized(_) => None,
+ }
+ }
+
++ pub fn larger_by(self, value: u32) -> Option<PreviewSize> {
++ let old_value = match self {
++ PreviewSize::BestFit(_, _) => return Some(PreviewSize::OriginalSize),
++ PreviewSize::OriginalSize => 100,
++ PreviewSize::Resized(value) => value,
++ };
++
++ old_value
++ .checked_add(value)
++ .filter(|value| value <= &500)
++ .map(|value| {
++ if value == 100 {
++ PreviewSize::OriginalSize
++ } else {
++ PreviewSize::Resized(value)
++ }
++ })
++ }
++
+ pub fn can_be_larger(&self) -> bool {
+ !matches!(self, PreviewSize::Resized(value) if value >= &500)
+ }
+diff --git a/src/image_list.rs b/src/image_list.rs
+index f0cd27b..9afffc9 100644
+--- a/src/image_list.rs
++++ b/src/image_list.rs
+@@ -98,7 +98,7 @@ impl ImageList {
+ .map(|file_name| file_name.to_str())
+ .flatten()
+ .ok_or_else(|| anyhow!("Current image file name is not a valid name"))?;
+- current_image_file.trash::<Cancellable>(None)?;
++ current_image_file.trash(<Option<&Cancellable>>::None)?;
+ self.images.remove(current_image_path);
+ Ok(current_image_name.to_string())
+ }
+diff --git a/src/resources/cargo-sources.json b/src/resources/cargo-sources.json
+index a4f0388..05b8802 100644
+--- a/src/resources/cargo-sources.json
++++ b/src/resources/cargo-sources.json
+@@ -28,27 +28,27 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/atk/atk-0.14.0.crate",
+- "sha256": "a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba",
+- "dest": "cargo/vendor/atk-0.14.0"
++ "url": "https://static.crates.io/crates/atk/atk-0.15.1.crate",
++ "sha256": "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd",
++ "dest": "cargo/vendor/atk-0.15.1"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/atk-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%222c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/atk-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/atk-sys/atk-sys-0.14.0.crate",
+- "sha256": "badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea",
+- "dest": "cargo/vendor/atk-sys-0.14.0"
++ "url": "https://static.crates.io/crates/atk-sys/atk-sys-0.15.1.crate",
++ "sha256": "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6",
++ "dest": "cargo/vendor/atk-sys-0.15.1"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/atk-sys-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%2258aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/atk-sys-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -80,14 +80,14 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/bitflags/bitflags-1.2.1.crate",
+- "sha256": "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693",
+- "dest": "cargo/vendor/bitflags-1.2.1"
++ "url": "https://static.crates.io/crates/bitflags/bitflags-1.3.2.crate",
++ "sha256": "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
++ "dest": "cargo/vendor/bitflags-1.3.2"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/bitflags-1.2.1",
++ "url": "data:%7B%22package%22%3A%20%22bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/bitflags-1.3.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -106,27 +106,27 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/cairo-rs/cairo-rs-0.14.1.crate",
+- "sha256": "a408c13bbc04c3337b94194c1a4d04067097439b79dbc1dcbceba299d828b9ea",
+- "dest": "cargo/vendor/cairo-rs-0.14.1"
++ "url": "https://static.crates.io/crates/cairo-rs/cairo-rs-0.15.1.crate",
++ "sha256": "b869e97a87170f96762f9f178eae8c461147e722ba21dd8814105bf5716bf14a",
++ "dest": "cargo/vendor/cairo-rs-0.15.1"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22a408c13bbc04c3337b94194c1a4d04067097439b79dbc1dcbceba299d828b9ea%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/cairo-rs-0.14.1",
++ "url": "data:%7B%22package%22%3A%20%22b869e97a87170f96762f9f178eae8c461147e722ba21dd8814105bf5716bf14a%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/cairo-rs-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/cairo-sys-rs/cairo-sys-rs-0.14.0.crate",
+- "sha256": "d7c9c3928781e8a017ece15eace05230f04b647457d170d2d9641c94a444ff80",
+- "dest": "cargo/vendor/cairo-sys-rs-0.14.0"
++ "url": "https://static.crates.io/crates/cairo-sys-rs/cairo-sys-rs-0.15.1.crate",
++ "sha256": "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8",
++ "dest": "cargo/vendor/cairo-sys-rs-0.15.1"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22d7c9c3928781e8a017ece15eace05230f04b647457d170d2d9641c94a444ff80%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/cairo-sys-rs-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%223c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/cairo-sys-rs-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -145,14 +145,14 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/cfg-expr/cfg-expr-0.8.1.crate",
+- "sha256": "b412e83326147c2bb881f8b40edfbf9905b9b8abaebd0e47ca190ba62fda8f0e",
+- "dest": "cargo/vendor/cfg-expr-0.8.1"
++ "url": "https://static.crates.io/crates/cfg-expr/cfg-expr-0.10.1.crate",
++ "sha256": "295b6eb918a60a25fec0b23a5e633e74fddbaf7bb04411e65a10c366aca4b5cd",
++ "dest": "cargo/vendor/cfg-expr-0.10.1"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22b412e83326147c2bb881f8b40edfbf9905b9b8abaebd0e47ca190ba62fda8f0e%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/cfg-expr-0.8.1",
++ "url": "data:%7B%22package%22%3A%20%22295b6eb918a60a25fec0b23a5e633e74fddbaf7bb04411e65a10c366aca4b5cd%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/cfg-expr-0.10.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -288,53 +288,53 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/gdk/gdk-0.14.0.crate",
+- "sha256": "679e22651cd15888e7acd01767950edca2ee9fcd6421fbf5b3c3b420d4e88bb0",
+- "dest": "cargo/vendor/gdk-0.14.0"
++ "url": "https://static.crates.io/crates/gdk/gdk-0.15.2.crate",
++ "sha256": "614258e81ec35ed8770e64a0838f3a47f95b398bc51e724d3b3fa09c1ee0f8d5",
++ "dest": "cargo/vendor/gdk-0.15.2"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22679e22651cd15888e7acd01767950edca2ee9fcd6421fbf5b3c3b420d4e88bb0%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gdk-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%22614258e81ec35ed8770e64a0838f3a47f95b398bc51e724d3b3fa09c1ee0f8d5%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gdk-0.15.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/gdk-pixbuf/gdk-pixbuf-0.14.0.crate",
+- "sha256": "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f",
+- "dest": "cargo/vendor/gdk-pixbuf-0.14.0"
++ "url": "https://static.crates.io/crates/gdk-pixbuf/gdk-pixbuf-0.15.4.crate",
++ "sha256": "73aa2f5de1b45710da90a55863276667dc3a3264aaf6a2aeace62bb015244d49",
++ "dest": "cargo/vendor/gdk-pixbuf-0.15.4"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gdk-pixbuf-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%2273aa2f5de1b45710da90a55863276667dc3a3264aaf6a2aeace62bb015244d49%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gdk-pixbuf-0.15.4",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/gdk-pixbuf-sys/gdk-pixbuf-sys-0.14.0.crate",
+- "sha256": "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590",
+- "dest": "cargo/vendor/gdk-pixbuf-sys-0.14.0"
++ "url": "https://static.crates.io/crates/gdk-pixbuf-sys/gdk-pixbuf-sys-0.15.1.crate",
++ "sha256": "413424d9818621fa3cfc8a3a915cdb89a7c3c507d56761b4ec83a9a98e587171",
++ "dest": "cargo/vendor/gdk-pixbuf-sys-0.15.1"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gdk-pixbuf-sys-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%22413424d9818621fa3cfc8a3a915cdb89a7c3c507d56761b4ec83a9a98e587171%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gdk-pixbuf-sys-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/gdk-sys/gdk-sys-0.14.0.crate",
+- "sha256": "0e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e",
+- "dest": "cargo/vendor/gdk-sys-0.14.0"
++ "url": "https://static.crates.io/crates/gdk-sys/gdk-sys-0.15.1.crate",
++ "sha256": "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88",
++ "dest": "cargo/vendor/gdk-sys-0.15.1"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%220e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gdk-sys-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%2232e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gdk-sys-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -353,131 +353,131 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/gio/gio-0.14.0.crate",
+- "sha256": "86c6823b39d46d22cac2466de261f28d7f049ebc18f7b35296a42c7ed8a88325",
+- "dest": "cargo/vendor/gio-0.14.0"
++ "url": "https://static.crates.io/crates/gio/gio-0.15.5.crate",
++ "sha256": "59105fa464928adf56b159c8d980cc11fbfbe414befb904caac5163d383049bf",
++ "dest": "cargo/vendor/gio-0.15.5"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%2286c6823b39d46d22cac2466de261f28d7f049ebc18f7b35296a42c7ed8a88325%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gio-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%2259105fa464928adf56b159c8d980cc11fbfbe414befb904caac5163d383049bf%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gio-0.15.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/gio-sys/gio-sys-0.14.0.crate",
+- "sha256": "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa",
+- "dest": "cargo/vendor/gio-sys-0.14.0"
++ "url": "https://static.crates.io/crates/gio-sys/gio-sys-0.15.5.crate",
++ "sha256": "4f0bc4cfc9ebcdd05cc5057bc51b99c32f8f9bf246274f6a556ffd27279f8fe3",
++ "dest": "cargo/vendor/gio-sys-0.15.5"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gio-sys-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%224f0bc4cfc9ebcdd05cc5057bc51b99c32f8f9bf246274f6a556ffd27279f8fe3%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gio-sys-0.15.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/glib/glib-0.14.2.crate",
+- "sha256": "dbecad7a3a898ee749d491ce2ae0decb0bce9e736f9747bc49159b1cea5d37f4",
+- "dest": "cargo/vendor/glib-0.14.2"
++ "url": "https://static.crates.io/crates/glib/glib-0.15.5.crate",
++ "sha256": "41dcfbdb6cc6c02aee163339465d8a40d6f3f64c3a43f729a4195f0e153338b7",
++ "dest": "cargo/vendor/glib-0.15.5"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22dbecad7a3a898ee749d491ce2ae0decb0bce9e736f9747bc49159b1cea5d37f4%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/glib-0.14.2",
++ "url": "data:%7B%22package%22%3A%20%2241dcfbdb6cc6c02aee163339465d8a40d6f3f64c3a43f729a4195f0e153338b7%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/glib-0.15.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/glib-macros/glib-macros-0.14.1.crate",
+- "sha256": "2aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518",
+- "dest": "cargo/vendor/glib-macros-0.14.1"
++ "url": "https://static.crates.io/crates/glib-macros/glib-macros-0.15.3.crate",
++ "sha256": "e58b262ff65ef771003873cea8c10e0fe854f1c508d48d62a4111a1ff163f7d1",
++ "dest": "cargo/vendor/glib-macros-0.15.3"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%222aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/glib-macros-0.14.1",
++ "url": "data:%7B%22package%22%3A%20%22e58b262ff65ef771003873cea8c10e0fe854f1c508d48d62a4111a1ff163f7d1%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/glib-macros-0.15.3",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/glib-sys/glib-sys-0.14.0.crate",
+- "sha256": "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae",
+- "dest": "cargo/vendor/glib-sys-0.14.0"
++ "url": "https://static.crates.io/crates/glib-sys/glib-sys-0.15.5.crate",
++ "sha256": "fa1d4e1a63d8574541e5b92931e4e669ddc87ffa85d58e84e631dba13ad2e10c",
++ "dest": "cargo/vendor/glib-sys-0.15.5"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%221c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/glib-sys-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%22fa1d4e1a63d8574541e5b92931e4e669ddc87ffa85d58e84e631dba13ad2e10c%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/glib-sys-0.15.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/gobject-sys/gobject-sys-0.14.0.crate",
+- "sha256": "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5",
+- "dest": "cargo/vendor/gobject-sys-0.14.0"
++ "url": "https://static.crates.io/crates/gobject-sys/gobject-sys-0.15.5.crate",
++ "sha256": "df6859463843c20cf3837e3a9069b6ab2051aeeadf4c899d33344f4aea83189a",
++ "dest": "cargo/vendor/gobject-sys-0.15.5"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gobject-sys-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%22df6859463843c20cf3837e3a9069b6ab2051aeeadf4c899d33344f4aea83189a%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gobject-sys-0.15.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/gtk/gtk-0.14.3.crate",
+- "sha256": "2eb51122dd3317e9327ec1e4faa151d1fa0d95664cd8fb8dcfacf4d4d29ac70c",
+- "dest": "cargo/vendor/gtk-0.14.3"
++ "url": "https://static.crates.io/crates/gtk/gtk-0.15.3.crate",
++ "sha256": "c7978eaec05bea63947c801d29a21372f2ed39aec0bf56bf7725d3599094675e",
++ "dest": "cargo/vendor/gtk-0.15.3"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%222eb51122dd3317e9327ec1e4faa151d1fa0d95664cd8fb8dcfacf4d4d29ac70c%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gtk-0.14.3",
++ "url": "data:%7B%22package%22%3A%20%22c7978eaec05bea63947c801d29a21372f2ed39aec0bf56bf7725d3599094675e%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gtk-0.15.3",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/gtk-sys/gtk-sys-0.14.0.crate",
+- "sha256": "8c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e",
+- "dest": "cargo/vendor/gtk-sys-0.14.0"
++ "url": "https://static.crates.io/crates/gtk-sys/gtk-sys-0.15.3.crate",
++ "sha256": "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84",
++ "dest": "cargo/vendor/gtk-sys-0.15.3"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%228c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gtk-sys-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%22d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gtk-sys-0.15.3",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/gtk3-macros/gtk3-macros-0.14.0.crate",
+- "sha256": "21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79",
+- "dest": "cargo/vendor/gtk3-macros-0.14.0"
++ "url": "https://static.crates.io/crates/gtk3-macros/gtk3-macros-0.15.1.crate",
++ "sha256": "8c891188af69e77a1e8a0b1746fbd03b9b396e7d34d518c5331b15950259f541",
++ "dest": "cargo/vendor/gtk3-macros-0.15.1"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%2221de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gtk3-macros-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%228c891188af69e77a1e8a0b1746fbd03b9b396e7d34d518c5331b15950259f541%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gtk3-macros-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/heck/heck-0.3.3.crate",
+- "sha256": "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c",
+- "dest": "cargo/vendor/heck-0.3.3"
++ "url": "https://static.crates.io/crates/heck/heck-0.4.0.crate",
++ "sha256": "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9",
++ "dest": "cargo/vendor/heck-0.4.0"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%226d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/heck-0.3.3",
++ "url": "data:%7B%22package%22%3A%20%222540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/heck-0.4.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -600,27 +600,27 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/pango/pango-0.14.0.crate",
+- "sha256": "415823a4fb9f1789785cd6e2d2413816f2ecff92380382969aaca9c400e13a19",
+- "dest": "cargo/vendor/pango-0.14.0"
++ "url": "https://static.crates.io/crates/pango/pango-0.15.2.crate",
++ "sha256": "79211eff430c29cc38c69e0ab54bc78fa1568121ca9737707eee7f92a8417a94",
++ "dest": "cargo/vendor/pango-0.15.2"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22415823a4fb9f1789785cd6e2d2413816f2ecff92380382969aaca9c400e13a19%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/pango-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%2279211eff430c29cc38c69e0ab54bc78fa1568121ca9737707eee7f92a8417a94%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/pango-0.15.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/pango-sys/pango-sys-0.14.0.crate",
+- "sha256": "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe",
+- "dest": "cargo/vendor/pango-sys-0.14.0"
++ "url": "https://static.crates.io/crates/pango-sys/pango-sys-0.15.1.crate",
++ "sha256": "7022c2fb88cd2d9d55e1a708a8c53a3ae8678234c4a54bf623400aeb7f31fac2",
++ "dest": "cargo/vendor/pango-sys-0.15.1"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%222367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/pango-sys-0.14.0",
++ "url": "data:%7B%22package%22%3A%20%227022c2fb88cd2d9d55e1a708a8c53a3ae8678234c4a54bf623400aeb7f31fac2%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/pango-sys-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -909,32 +909,6 @@
+ "dest": "cargo/vendor/smallvec-1.6.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+- {
+- "type": "archive",
+- "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/strum/strum-0.21.0.crate",
+- "sha256": "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2",
+- "dest": "cargo/vendor/strum-0.21.0"
+- },
+- {
+- "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/strum-0.21.0",
+- "dest-filename": ".cargo-checksum.json"
+- },
+- {
+- "type": "archive",
+- "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/strum_macros/strum_macros-0.21.1.crate",
+- "sha256": "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec",
+- "dest": "cargo/vendor/strum_macros-0.21.1"
+- },
+- {
+- "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/strum_macros-0.21.1",
+- "dest-filename": ".cargo-checksum.json"
+- },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+@@ -951,14 +925,14 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/system-deps/system-deps-3.2.0.crate",
+- "sha256": "480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6",
+- "dest": "cargo/vendor/system-deps-3.2.0"
++ "url": "https://static.crates.io/crates/system-deps/system-deps-6.0.2.crate",
++ "sha256": "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709",
++ "dest": "cargo/vendor/system-deps-6.0.2"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%22480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/system-deps-3.2.0",
++ "url": "data:%7B%22package%22%3A%20%22a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/system-deps-6.0.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -1026,19 +1000,6 @@
+ "dest": "cargo/vendor/ucd-trie-0.1.3",
+ "dest-filename": ".cargo-checksum.json"
+ },
+- {
+- "type": "archive",
+- "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/unicode-segmentation/unicode-segmentation...",
+- "sha256": "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b",
+- "dest": "cargo/vendor/unicode-segmentation-1.8.0"
+- },
+- {
+- "type": "file",
+- "url": "data:%7B%22package%22%3A%20%228895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/unicode-segmentation-1.8.0",
+- "dest-filename": ".cargo-checksum.json"
+- },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+@@ -1068,14 +1029,14 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url": "https://static.crates.io/crates/version-compare/version-compare-0.0.11.crate",
+- "sha256": "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b",
+- "dest": "cargo/vendor/version-compare-0.0.11"
++ "url": "https://static.crates.io/crates/version-compare/version-compare-0.1.0.crate",
++ "sha256": "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73",
++ "dest": "cargo/vendor/version-compare-0.1.0"
+ },
+ {
+ "type": "file",
+- "url": "data:%7B%22package%22%3A%20%221c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/version-compare-0.0.11",
++ "url": "data:%7B%22package%22%3A%20%22fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/version-compare-0.1.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+diff --git a/src/ui/action.rs b/src/ui/action.rs
+index 56708a4..54b21c9 100644
+--- a/src/ui/action.rs
++++ b/src/ui/action.rs
+@@ -146,7 +146,7 @@ pub fn image_viewport_resize(
+ allocation: gdk::Rectangle,
+ ) {
+ if let PreviewSize::BestFit(_, _) = settings.scale() {
+- let new_scale = PreviewSize::BestFit(allocation.width as u32, allocation.height as u32);
++ let new_scale = PreviewSize::BestFit(allocation.width() as u32, allocation.height() as u32);
+ settings.set_scale(new_scale);
+ post_event(sender, Event::RefreshPreview(new_scale));
+ }
+@@ -177,22 +177,32 @@ pub fn change_preview_size(
+ if let PreviewSize::BestFit(_, _) = preview_size {
+ let viewport_allocation = widgets.image_viewport().allocation();
+ preview_size = PreviewSize::BestFit(
+- viewport_allocation.width as u32,
+- viewport_allocation.height as u32,
++ viewport_allocation.width() as u32,
++ viewport_allocation.height() as u32,
+ );
+ }
+ settings.set_scale(preview_size);
+ post_event(sender, Event::RefreshPreview(preview_size));
+ }
+
+-pub fn preview_smaller(sender: &Sender<Event>, settings: &Settings) {
+- let new_scale = settings.scale().smaller();
+- post_event(sender, Event::ChangePreviewSize(new_scale));
++pub fn preview_smaller(sender: &Sender<Event>, settings: &Settings, value: Option<u32>) {
++ let new_scale = match value {
++ None => settings.scale().smaller(),
++ Some(value) => settings.scale().smaller_by(value),
++ };
++ if let Some(new_scale) = new_scale {
++ post_event(sender, Event::ChangePreviewSize(new_scale));
++ }
+ }
+
+-pub fn preview_larger(sender: &Sender<Event>, settings: &Settings) {
+- let new_scale = settings.scale().larger();
+- post_event(sender, Event::ChangePreviewSize(new_scale));
++pub fn preview_larger(sender: &Sender<Event>, settings: &Settings, value: Option<u32>) {
++ let new_scale = match value {
++ None => settings.scale().larger(),
++ Some(value) => settings.scale().larger_by(value),
++ };
++ if let Some(new_scale) = new_scale {
++ post_event(sender, Event::ChangePreviewSize(new_scale));
++ }
+ }
+
+ pub fn preview_fit_screen(sender: &Sender<Event>) {
+@@ -226,8 +236,8 @@ pub fn start_selection(
+ let (position_x, position_y) = position;
+ let event_box_allocation = widgets.image_event_box().allocation();
+ let (image_coords_position_x, image_coords_position_y) = (
+- position_x as i32 - ((event_box_allocation.width - image_width as i32) / 2),
+- position_y as i32 - ((event_box_allocation.height - image_height as i32) / 2),
++ position_x as i32 - ((event_box_allocation.width() - image_width as i32) / 2),
++ position_y as i32 - ((event_box_allocation.height() - image_height as i32) / 2),
+ );
+ if image_coords_position_x >= 0
+ && image_coords_position_x < image_width as i32
+@@ -252,8 +262,8 @@ pub fn drag_selection(
+ let (position_x, position_y) = position;
+ let event_box_allocation = widgets.image_event_box().allocation();
+ let (image_coords_position_x, image_coords_position_y) = (
+- position_x as i32 - ((event_box_allocation.width - image_width as i32) / 2),
+- position_y as i32 - ((event_box_allocation.height - image_height as i32) / 2),
++ position_x as i32 - ((event_box_allocation.width() - image_width as i32) / 2),
++ position_y as i32 - ((event_box_allocation.height() - image_height as i32) / 2),
+ );
+ if image_coords_position_x >= 0
+ && image_coords_position_x < image_width as i32
+@@ -283,12 +293,13 @@ pub fn end_selection(
+ let (image_width, image_height) = current_image.preview_image_buffer_size().unwrap();
+ let event_box_allocation = widgets.image_event_box().allocation();
+ let (image_coords_start_position_x, image_coords_start_position_y) = (
+- start_position_x as i32 - ((event_box_allocation.width - image_width as i32) / 2),
+- start_position_y as i32 - ((event_box_allocation.height - image_height as i32) / 2),
++ start_position_x as i32 - ((event_box_allocation.width() - image_width as i32) / 2),
++ start_position_y as i32
++ - ((event_box_allocation.height() - image_height as i32) / 2),
+ );
+ let (image_coords_end_position_x, image_coords_end_position_y) = (
+- end_position_x as i32 - ((event_box_allocation.width - image_width as i32) / 2),
+- end_position_y as i32 - ((event_box_allocation.height - image_height as i32) / 2),
++ end_position_x as i32 - ((event_box_allocation.width() - image_width as i32) / 2),
++ end_position_y as i32 - ((event_box_allocation.height() - image_height as i32) / 2),
+ );
+
+ let crop_operation = ImageOperation::Crop(
+diff --git a/src/ui/event.rs b/src/ui/event.rs
+index d428149..ad4a653 100644
+--- a/src/ui/event.rs
++++ b/src/ui/event.rs
+@@ -1,5 +1,5 @@
+ use gtk::{
+- gdk::{self, Rectangle},
++ gdk::{self, Rectangle, ScrollDirection},
+ gdk_pixbuf::PixbufRotation,
+ gio::{self, SimpleAction},
+ glib::{self, Sender},
+@@ -7,7 +7,7 @@ use gtk::{
+ ActionMapExt, ButtonExt, FileChooserExt, GdkContextExt, InfoBarExt, NativeDialogExt,
+ PopoverExt, SpinButtonExt, ToggleButtonExt, WidgetExt, WidgetExtManual,
+ },
+- MessageType, SpinButtonSignals,
++ MessageType, SpinButtonSignals, Window,
+ };
+ use std::{
+ cell::{Cell, RefCell},
+@@ -37,8 +37,8 @@ pub enum Event {
+ SaveCurrentImage(Option<PathBuf>),
+ DeleteCurrentImage,
+ EndSelection,
+- PreviewSmaller,
+- PreviewLarger,
++ PreviewSmaller(Option<u32>),
++ PreviewLarger(Option<u32>),
+ PreviewFitScreen,
+ NextImage,
+ PreviousImage,
+@@ -99,7 +99,8 @@ pub fn connect_events(
+ connect_info_bar_response(widgets.clone());
+ connect_window_resized(widgets.clone(), settings);
+ connect_toggle_fullscreen(widgets.clone(), sender.clone());
+- connect_quit(application, sender);
++ connect_quit(application, sender.clone());
++ connect_image_scrolled_window_scroll_event(widgets.clone(), sender);
+
+ widgets.window().show_all();
+ }
+@@ -112,7 +113,7 @@ fn connect_open_menu_button_clicked(widgets: Widgets, sender: Sender<Event>) {
+ widgets.popover_menu().popdown();
+ let file_chooser = gtk::FileChooserNative::new(
+ Some("Open file"),
+- gtk::NONE_WINDOW,
++ <Option<&Window>>::None,
+ gtk::FileChooserAction::Open,
+ None,
+ None,
+@@ -173,13 +174,13 @@ fn connect_image_viewport_size_allocate(widgets: Widgets, sender: Sender<Event>)
+
+ fn connect_preview_smaller_button_clicked(widgets: Widgets, sender: Sender<Event>) {
+ widgets.preview_smaller_button().connect_clicked(move |_| {
+- post_event(&sender, Event::PreviewSmaller);
++ post_event(&sender, Event::PreviewSmaller(None));
+ });
+ }
+
+ fn connect_preview_larger_button_clicked(widgets: Widgets, sender: Sender<Event>) {
+ widgets.preview_larger_button().connect_clicked(move |_| {
+- post_event(&sender, Event::PreviewLarger);
++ post_event(&sender, Event::PreviewLarger(None));
+ });
+ }
+
+@@ -263,9 +264,9 @@ fn connect_image_widget_draw(
+ let image_buffer = current_image.preview_image_buffer().unwrap();
+ cairo_context.set_source_pixbuf(
+ image_buffer,
+- (image_widget.allocation().width as f64 - image_buffer.width() as f64)
++ (image_widget.allocation().width() as f64 - image_buffer.width() as f64)
+ / 2.0,
+- (image_widget.allocation().height as f64 - image_buffer.height() as f64)
++ (image_widget.allocation().height() as f64 - image_buffer.height() as f64)
+ / 2.0,
+ );
+ if let Err(error) = cairo_context.paint() {
+@@ -360,7 +361,7 @@ fn connect_save_as_menu_button_clicked(
+ widgets.popover_menu().popdown();
+ let file_chooser = gtk::FileChooserNative::new(
+ Some("Save as..."),
+- gtk::NONE_WINDOW,
++ <Option<&Window>>::None,
+ gtk::FileChooserAction::Save,
+ None,
+ None,
+@@ -441,7 +442,7 @@ fn connect_window_resized(widgets: Widgets, settings: Settings) {
+ widgets
+ .window()
+ .connect_size_allocate(move |_, allocation| {
+- settings.set_window_size((allocation.width as u32, allocation.height as u32));
++ settings.set_window_size((allocation.width() as u32, allocation.height() as u32));
+ });
+ }
+
+@@ -460,3 +461,18 @@ fn connect_quit(application: gtk::Application, sender: Sender<Event>) {
+ });
+ application.add_action(&action_quit);
+ }
++
++fn connect_image_scrolled_window_scroll_event(widgets: Widgets, sender: Sender<Event>) {
++ widgets
++ .image_scrolled_window()
++ .connect_scroll_event(move |_, scroll_event| {
++ if scroll_event.direction() == ScrollDirection::Up || scroll_event.delta().1 < 0.0 {
++ post_event(&sender, Event::PreviewLarger(Some(5)));
++ }
++ if scroll_event.direction() == ScrollDirection::Down || scroll_event.delta().1 > 0.0 {
++ post_event(&sender, Event::PreviewSmaller(Some(5)));
++ }
++
++ gtk::Inhibit(true)
++ });
++}
+diff --git a/src/ui/widgets.rs b/src/ui/widgets.rs
+index acc67b5..05b92b3 100644
+--- a/src/ui/widgets.rs
++++ b/src/ui/widgets.rs
+@@ -13,6 +13,7 @@ pub struct Widgets {
+ previous_button: gtk::Button,
+ preview_smaller_button: gtk::Button,
+ preview_larger_button: gtk::Button,
++ image_scrolled_window: gtk::ScrolledWindow,
+ image_viewport: gtk::Viewport,
+ preview_size_label: gtk::Label,
+ image_event_box: gtk::EventBox,
+@@ -68,6 +69,10 @@ impl Widgets {
+ .object("preview_larger_button")
+ .expect("Couldn't get preview_larger_button");
+
++ let image_scrolled_window: gtk::ScrolledWindow = builder
++ .object("image_scrolled_window")
++ .expect("Couldn't get image_scrolled_window");
++
+ let image_viewport: gtk::Viewport = builder
+ .object("image_viewport")
+ .expect("Couldn't get image_viewport");
+@@ -156,6 +161,7 @@ impl Widgets {
+ previous_button,
+ preview_smaller_button,
+ preview_larger_button,
++ image_scrolled_window,
+ image_viewport,
+ preview_size_label,
+ image_event_box,
+@@ -318,4 +324,9 @@ impl Widgets {
+ pub fn preview_size_label(&self) -> >k::Label {
+ &self.preview_size_label
+ }
++
++ /// Get a reference to the widgets's image scrolled window.
++ pub fn image_scrolled_window(&self) -> >k::ScrolledWindow {
++ &self.image_scrolled_window
++ }
+ }
+--
+2.35.1
+
diff --git a/image-roll-fix-metadata.diff b/image-roll-fix-metadata.diff
index f564d33..b6a6f8e 100644
--- a/image-roll-fix-metadata.diff
+++ b/image-roll-fix-metadata.diff
@@ -1,11 +1,18 @@
--- image-roll-1.5.0/Cargo.toml 1970-01-01T00:00:01+00:00
-+++ image-roll-1.5.0/Cargo.toml 2022-02-24T07:46:47.269285+00:00
-@@ -39,7 +39,7 @@
++++ image-roll-1.5.0/Cargo.toml 2022-02-24T17:15:37.591701+00:00
+@@ -33,13 +33,13 @@
+ version = "0.9.0"
+
+ [dependencies.gtk]
+-version = "0.14.3"
++version = "0.15"
+ features = ["v3_22_29"]
+
[dependencies.log]
version = "0.4.14"
[dev-dependencies.infer]
-version = "0.6.0"
-+version = "0.7.0"
++version = "0.7"
[dev-dependencies.itertools]
version = "0.10.3"
diff --git a/rust-image-roll.spec b/rust-image-roll.spec
index e92f358..ddb02fd 100644
--- a/rust-image-roll.spec
+++ b/rust-image-roll.spec
@@ -1,5 +1,11 @@
# Generated by rust2rpm 20
+# Deactivate test on s390x due to endianess problem
+# https://github.com/weclaw1/image-roll/issues/40
+%ifarch s390x
+%bcond_with check
+%else
%bcond_without check
+%endif
%global crate image-roll
@@ -13,9 +19,12 @@ License: MIT and CC0
URL: https://crates.io/crates/image-roll
Source: %{crates_source}
# Initial patched metadata
-# * Update infer to version 0.7.0
-# https://github.com/weclaw1/image-roll/pull/39
+# * Update infer to version 0.7
+# * Update gtk to version 0.15
+# * https://github.com/weclaw1/image-roll/pull/39
Patch0: image-roll-fix-metadata.diff
+# * Backport gtk version 0.15 support
+Patch1: 0001-updated-gtk-rs-version-added-zooming-with-mouse-scro.patch
ExclusiveArch: %{rust_arches}
commit fbfe6a6dba533af54728594cef6ebc93bf3c68d9
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 11:54:05 2022 -0500
Revert "Update to version 1.6.0; Fixes RHBZ#2049188"
This reverts commit 0c376fe9462d42541b59f8efb5b167c06d95092d.
diff --git a/image-roll-fix-metadata.diff b/image-roll-fix-metadata.diff
index 80c4f92..f564d33 100644
--- a/image-roll-fix-metadata.diff
+++ b/image-roll-fix-metadata.diff
@@ -1,6 +1,6 @@
---- image-roll-1.6.0/Cargo.toml 1970-01-01T00:00:01+00:00
-+++ image-roll-1.6.0/Cargo.toml 2022-02-24T08:09:57.607803+00:00
-@@ -42,7 +42,7 @@
+--- image-roll-1.5.0/Cargo.toml 1970-01-01T00:00:01+00:00
++++ image-roll-1.5.0/Cargo.toml 2022-02-24T07:46:47.269285+00:00
+@@ -39,7 +39,7 @@
[dependencies.log]
version = "0.4.14"
[dev-dependencies.infer]
diff --git a/rust-image-roll.spec b/rust-image-roll.spec
index 5b3c13d..e92f358 100644
--- a/rust-image-roll.spec
+++ b/rust-image-roll.spec
@@ -4,7 +4,7 @@
%global crate image-roll
Name: rust-%{crate}
-Version: 1.6.0
+Version: 1.5.0
Release: %autorelease
Summary: Image Roll is a simple and fast GTK image viewer
commit 814f9c017dff5266525c2c147e8271a0dcd0c495
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 11:53:38 2022 -0500
Revert "Update source"
This reverts commit ed69ba2630c09f18a41ff5b23ae27ba9e556c051.
diff --git a/.gitignore b/.gitignore
index eed9bec..68493a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,3 @@
/image-roll-1.4.0.crate
/image-roll-1.4.1.crate
/image-roll-1.5.0.crate
-/image-roll-1.6.0.crate
diff --git a/sources b/sources
index 8a28b0e..eff4917 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (image-roll-1.6.0.crate) = 2078ab130956527f494ee86f89834c7e74cceac7a1cc7cdf47edbdf097983606d99d654c107c6211665a40f869824a87730a43638a5b584d756d35f205fd90f5
+SHA512 (image-roll-1.5.0.crate) = 08e0af7f8e3a04510b3b9b72b81410d6985b633963aa60c9dcdcf8d560e2ea6688af80620d5dcf5b88b51a40cad7e21f7453a961d5a29c42e4f01749faa6d2fc
commit ed69ba2630c09f18a41ff5b23ae27ba9e556c051
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 03:38:48 2022 -0500
Update source
diff --git a/.gitignore b/.gitignore
index 68493a5..eed9bec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
/image-roll-1.4.0.crate
/image-roll-1.4.1.crate
/image-roll-1.5.0.crate
+/image-roll-1.6.0.crate
diff --git a/sources b/sources
index eff4917..8a28b0e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (image-roll-1.5.0.crate) = 08e0af7f8e3a04510b3b9b72b81410d6985b633963aa60c9dcdcf8d560e2ea6688af80620d5dcf5b88b51a40cad7e21f7453a961d5a29c42e4f01749faa6d2fc
+SHA512 (image-roll-1.6.0.crate) = 2078ab130956527f494ee86f89834c7e74cceac7a1cc7cdf47edbdf097983606d99d654c107c6211665a40f869824a87730a43638a5b584d756d35f205fd90f5
commit 0c376fe9462d42541b59f8efb5b167c06d95092d
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 03:32:57 2022 -0500
Update to version 1.6.0; Fixes RHBZ#2049188
diff --git a/image-roll-fix-metadata.diff b/image-roll-fix-metadata.diff
index f564d33..80c4f92 100644
--- a/image-roll-fix-metadata.diff
+++ b/image-roll-fix-metadata.diff
@@ -1,6 +1,6 @@
---- image-roll-1.5.0/Cargo.toml 1970-01-01T00:00:01+00:00
-+++ image-roll-1.5.0/Cargo.toml 2022-02-24T07:46:47.269285+00:00
-@@ -39,7 +39,7 @@
+--- image-roll-1.6.0/Cargo.toml 1970-01-01T00:00:01+00:00
++++ image-roll-1.6.0/Cargo.toml 2022-02-24T08:09:57.607803+00:00
+@@ -42,7 +42,7 @@
[dependencies.log]
version = "0.4.14"
[dev-dependencies.infer]
diff --git a/rust-image-roll.spec b/rust-image-roll.spec
index e92f358..5b3c13d 100644
--- a/rust-image-roll.spec
+++ b/rust-image-roll.spec
@@ -4,7 +4,7 @@
%global crate image-roll
Name: rust-%{crate}
-Version: 1.5.0
+Version: 1.6.0
Release: %autorelease
Summary: Image Roll is a simple and fast GTK image viewer
commit 96eb64051fd2b5ea1613935237dae03eb090aa89
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 03:08:14 2022 -0500
Add patch to update infer to version 0.7.0
diff --git a/image-roll-fix-metadata.diff b/image-roll-fix-metadata.diff
new file mode 100644
index 0000000..f564d33
--- /dev/null
+++ b/image-roll-fix-metadata.diff
@@ -0,0 +1,11 @@
+--- image-roll-1.5.0/Cargo.toml 1970-01-01T00:00:01+00:00
++++ image-roll-1.5.0/Cargo.toml 2022-02-24T07:46:47.269285+00:00
+@@ -39,7 +39,7 @@
+ [dependencies.log]
+ version = "0.4.14"
+ [dev-dependencies.infer]
+-version = "0.6.0"
++version = "0.7.0"
+
+ [dev-dependencies.itertools]
+ version = "0.10.3"
diff --git a/rust-image-roll.spec b/rust-image-roll.spec
index 24f4f22..e92f358 100644
--- a/rust-image-roll.spec
+++ b/rust-image-roll.spec
@@ -12,6 +12,10 @@ Summary: Image Roll is a simple and fast GTK image viewer
License: MIT and CC0
URL: https://crates.io/crates/image-roll
Source: %{crates_source}
+# Initial patched metadata
+# * Update infer to version 0.7.0
+# https://github.com/weclaw1/image-roll/pull/39
+Patch0: image-roll-fix-metadata.diff
ExclusiveArch: %{rust_arches}
commit 9956b1798b30048523f5193161d48aa5d44637c0
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Mon Feb 14 18:37:48 2022 -0500
Update to version 1.5.0; Fixes RHBZ#2049188
diff --git a/.gitignore b/.gitignore
index 3534499..68493a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/image-roll-1.3.1.crate
/image-roll-1.4.0.crate
/image-roll-1.4.1.crate
+/image-roll-1.5.0.crate
diff --git a/rust-image-roll.spec b/rust-image-roll.spec
index a81ae28..24f4f22 100644
--- a/rust-image-roll.spec
+++ b/rust-image-roll.spec
@@ -4,7 +4,7 @@
%global crate image-roll
Name: rust-%{crate}
-Version: 1.4.1
+Version: 1.5.0
Release: %autorelease
Summary: Image Roll is a simple and fast GTK image viewer
diff --git a/sources b/sources
index 6b4eee0..eff4917 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (image-roll-1.4.1.crate) = 78a5a318eacdfc9f7db3ff01a002bff4d7cbb22070519e6d0e7d471744134dcbebb0338db7b3f0d2c525c81dff38af0fee8bc881f4b49cb5e73a441c0f99bde6
+SHA512 (image-roll-1.5.0.crate) = 08e0af7f8e3a04510b3b9b72b81410d6985b633963aa60c9dcdcf8d560e2ea6688af80620d5dcf5b88b51a40cad7e21f7453a961d5a29c42e4f01749faa6d2fc
2 years, 1 month
[Report] Packages Restricting Arches
by root
New package excluding arches (2)
============================
- rust-infer
ExclusiveArch: %{rust_arches}
- rust-pistoncore-input
ExclusiveArch: %{rust_arches}
List of packages currently excluding arches (2409)
===========================================
- 0ad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- 90-Second-Portraits
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- GoldenCheetah
ExclusiveArch: %{qt5_qtwebengine_arches}
- GtkAda
ExclusiveArch: %{GPRbuild_arches}
- GtkAda3
ExclusiveArch: %{GPRbuild_arches}
- OpenColorIO
ExclusiveArch: x86_64 ppc64le
- OpenImageIO
ExclusiveArch: x86_64 ppc64le
- OpenMolcas
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- PragmARC
ExclusiveArch: %{GPRbuild_arches}
- R-V8
ExclusiveArch: %{nodejs_arches}
- RdRand
ExclusiveArch: %{ix86} x86_64
- RediSearch
ExclusiveArch: x86_64
- SLOF
ExclusiveArch: ppc64le
- YafaRay
ExclusiveArch: %{ix86} x86_64
- aardvark-dns
ExclusiveArch: %{rust_arches}
- aboot
ExclusiveArch: alpha
- accel-config
ExclusiveArch: %{ix86} x86_64
- acpid
ExclusiveArch: ia64 x86_64 %{ix86} %{arm} aarch64
- ahven
ExclusiveArch: %{GPRbuild_arches}
- algobox
ExclusiveArch: %{qt5_qtwebengine_arches}
- alleyoop
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x %{arm} aarch64
- american-fuzzy-lop
ExclusiveArch: %{ix86} x86_64 s390x
- anet
ExclusiveArch: %{GPRbuild_arches}
- anki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- apmd
ExclusiveArch: %{ix86}
- appstream-generator
ExclusiveArch: %{ldc_arches}
- arm-trusted-firmware
ExclusiveArch: aarch64
- aunit
ExclusiveArch: %GPRbuild_arches
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- bcal
ExclusiveArch: x86_64 aarch64 ia64 ppc64 ppc64le s390x
- bcc
ExclusiveArch: x86_64 %{power64} aarch64 s390x armv7hl
- bcm283x-firmware
ExclusiveArch: %{arm} aarch64
- berusky2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{mips}
- biosdevname
ExclusiveArch: %{ix86} x86_64
- blender
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- bless
ExclusiveArch: %mono_arches
- bpftrace
ExclusiveArch: x86_64 %{power64} aarch64 s390x
- calamares
ExclusiveArch: %{ix86} x86_64 aarch64
- calibre
ExclusiveArch: %{qt5_qtwebengine_arches}
- ccdciel
ExclusiveArch: %{fpc_arches}
- cdcollect
ExclusiveArch: %{mono_arches}
- ceph
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- chromium
ExclusiveArch: x86_64 i686
ExclusiveArch: x86_64 aarch64
ExclusiveArch: x86_64 i686 aarch64
- cjdns
ExclusiveArch: %{nodejs_arches}
- clevis-pin-tpm2
ExclusiveArch: %{rust_arches}
- cmospwd
ExclusiveArch: %{ix86} x86_64
- cmrt
ExclusiveArch: %{ix86} x86_64 ia64
- coffee-script
ExclusiveArch: %{nodejs_arches} noarch
- colorful
ExclusiveArch: %{fpc_arches}
- cpu-x
ExclusiveArch: i686 x86_64
- cpufetch
ExclusiveArch: %{arm} aarch64 x86_64 ppc ppc64 ppc64le
- cpuid
ExclusiveArch: %{ix86} x86_64
- cqrlog
ExclusiveArch: %{fpc_arches}
- crash
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- crash-gcore-command
ExclusiveArch: aarch64 ppc64le x86_64
- crash-trace-command
ExclusiveArch: aarch64 ppc64le s390x x86_64
- cri-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- criu
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- cryptlib
ExclusiveArch: x86_64 aarch64 ppc64 ppc64le
- cryptobone
ExclusiveArch: x86_64 %{ix86} ppc64 ppc64le aarch64
- csslint
ExclusiveArch: %{nodejs_arches} noarch
- daq
ExclusiveArch: x86_64 aarch64
- dbus-parsec
ExclusiveArch: %{rust_arches}
- dbus-sharp
ExclusiveArch: %mono_arches
- dbus-sharp-glib
ExclusiveArch: %mono_arches
- dbxtool
ExclusiveArch: i386 x86_64 aarch64
- deepin-daemon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- deepin-desktop-schemas
ExclusiveArch: %{go_arches}
- dlm
ExclusiveArch: i686 x86_64
- dmidecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- dmtcp
ExclusiveArch: x86_64
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dolphin-emu
ExclusiveArch: x86_64 aarch64
- dotnet-build-reference-packages
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet3.1
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet6.0
ExclusiveArch: aarch64 x86_64 s390x
ExclusiveArch: x86_64
- doublecmd
ExclusiveArch: %{ix86} x86_64
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dub
ExclusiveArch: %{ldc_arches}
- dxvk-native
ExclusiveArch: %{ix86} x86_64
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc64le aarch64
- e3
ExclusiveArch: %{ix86} x86_64
- eclipse-swt
ExclusiveArch: s390x x86_64 aarch64 ppc64le
- edk2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: x86_64 aarch64
- efibootmgr
ExclusiveArch: %{efi}
- efifs
ExclusiveArch: %{efi}
- efitools
ExclusiveArch: %{efi}
- efivar
ExclusiveArch: %{efi}
- elk
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- emacs-slime
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- enki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- eric
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- eth-tools
ExclusiveArch: x86_64
- extlinux-bootloader
ExclusiveArch: %{arm} aarch64
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- fes
ExclusiveArch: %{ix86} x86_64
- florist
ExclusiveArch: %{GPRbuild_arches}
- fluent-bit
ExclusiveArch: x86_64 aarch64
- fpc
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64 ppc64le
- frescobaldi
ExclusiveArch: %{qt5_qtwebengine_arches}
- frysk
ExclusiveArch: %{ix86} x86_64 ppc64
- fwts
ExclusiveArch: x86_64 %{arm} aarch64 s390x riscv64 %{power64}
- fwupd-efi
ExclusiveArch: x86_64 aarch64
- ga
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- gbrainy
ExclusiveArch: %mono_arches
- gdb-exploitable
ExclusiveArch: x86_64 i386
ExclusiveArch: x86_64 noarch
- gearhead1
ExclusiveArch: %{fpc_arches}
- gela-asis
ExclusiveArch: %GPRbuild_arches
- ghdl
ExclusiveArch: %{GNAT_arches}
- ghostwriter
ExclusiveArch: %{qt5_qtwebengine_arches}
- gio-sharp
ExclusiveArch: %mono_arches
- gir-to-d
ExclusiveArch: %{ldc_arches}
- git-octopus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- gitqlient
ExclusiveArch: %{qt5_qtwebengine_arches}
- giver
ExclusiveArch: %{mono_arches}
- gkeyfile-sharp
ExclusiveArch: %mono_arches
- glibc32
ExclusiveArch: x86_64
- glibd
ExclusiveArch: %{ldc_arches}
- gmqcc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- gnatcoll
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-bindings
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-db
ExclusiveArch: %{GPRbuild_arches}
- gnome-boxes
ExclusiveArch: x86_64
- gnome-desktop-sharp
ExclusiveArch: %mono_arches
- gnome-do
ExclusiveArch: %mono_arches
- gnome-keyring-sharp
ExclusiveArch: %mono_arches
- gnome-rdp
ExclusiveArch: %{mono_arches}
- gnome-sharp
ExclusiveArch: %mono_arches
- gnome-subtitles
ExclusiveArch: %mono_arches
- gnu-efi
ExclusiveArch: %{efi}
- go-bindata
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- go-compilers
ExclusiveArch: %{go_arches}
- go-rpm-macros
ExclusiveArch: %{golang_arches} %{gccgo_arches}
- godep
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang
ExclusiveArch: %{golang_arches}
- gomtree
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gotun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: x86_64
- goverlay
ExclusiveArch: %{fpc_arches}
- gprbuild
ExclusiveArch: %{GPRbuild_arches} %{bootstrap_arch}
- gprolog
ExclusiveArch: x86_64 %{ix86} ppc alpha aarch64
- grafana
ExclusiveArch: %{grafana_arches}
- grafana-pcp
ExclusiveArch: %{grafanapcp_arches}
- gtk-sharp-beans
ExclusiveArch: %mono_arches
- gtk-sharp2
ExclusiveArch: %mono_arches
- gtk-sharp3
ExclusiveArch: %{mono_arches}
- gtkd
ExclusiveArch: %{ldc_arches}
- gudev-sharp
ExclusiveArch: %mono_arches
- guestfs-tools
ExclusiveArch: %{kernel_arches}
- hedgewars
ExclusiveArch: %{fpc_arches}
- hsakmt
ExclusiveArch: x86_64 aarch64
- hyena
ExclusiveArch: %{mono_arches}
- hyperscan
ExclusiveArch: x86_64
- hyperv-daemons
ExclusiveArch: i686 x86_64
- i3status-rs
ExclusiveArch: %{rust_arches}
- icaro
ExclusiveArch: %{ix86} x86_64 noarch
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- intel-cm-compiler
ExclusiveArch: i686 x86_64
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- intel-compute-runtime
ExclusiveArch: x86_64
- intel-gmmlib
ExclusiveArch: x86_64 i686
- intel-igc
ExclusiveArch: x86_64 i686
- intel-ipp-crypto-mb
ExclusiveArch: x86_64
ExclusiveArch: x86_64
- intel-ipsec-mb
ExclusiveArch: x86_64
ExclusiveArch: x86_64
- intel-mediasdk
ExclusiveArch: x86_64
- intel-undervolt
ExclusiveArch: i386 x86_64
- ioport
ExclusiveArch: %{ix86} x86_64
- ipmctl
ExclusiveArch: x86_64
- ispc
ExclusiveArch: x86_64 aarch64
- iucode-tool
ExclusiveArch: %{ix86} x86_64
- iyfct
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- java-1.8.0-openjdk-aarch32
ExclusiveArch: %{arm}
- jigawatts
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- kchmviewer
ExclusiveArch: %{qt5_qtwebengine_arches}
- keepass
ExclusiveArch: %{mono_arches}
- kernel
ExclusiveArch: noarch x86_64 s390x %{arm} aarch64 ppc64le
ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le
- keylime-agent-rust
ExclusiveArch: %{rust_arches}
- keyring-ima-signer
ExclusiveArch: %{rust_arches}
- kf5-akonadi-search
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-audiocd-kio
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kalarmcal
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kblog
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kcalendarcore
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kcalendarutils
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kitinerary
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-ktnef
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-libkdcraw
ExclusiveArch: x86_64 ppc64le %{arm}
- kicad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- kiwix-desktop
ExclusiveArch: %{qt5_qtwebengine_arches}
- klee
ExclusiveArch: x86_64
- knot-resolver
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- knotes
ExclusiveArch: x86_64 %{arm}
- kompose
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 s390x
- kubernetes
ExclusiveArch: x86_64 aarch64 ppc64le s390x %{arm}
- lazarus
ExclusiveArch: %{fpc_arches}
- lazpaint
ExclusiveArch: %{fpc_arches}
- ldc
ExclusiveArch: %{ldc_arches}
- libbsr
ExclusiveArch: %{power64}
- libclc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
- libcxl
ExclusiveArch: %{power64}
- libdfp
ExclusiveArch: ppc ppc64 ppc64le s390 s390x x86_64
- libdispatch
ExclusiveArch: x86_64 aarch64
- libguestfs
ExclusiveArch: %{kernel_arches}
- libica
ExclusiveArch: s390 s390x
- libipt
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- libkgapi
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- libnxz
ExclusiveArch: ppc64le
- libocxl
ExclusiveArch: ppc64le
- libpmemobj-cpp
ExclusiveArch: x86_64 ppc64le
- libpsm2
ExclusiveArch: x86_64
- libquentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- libretro-desmume2015
ExclusiveArch: i686 x86_64
- librtas
ExclusiveArch: %{power64}
- libservicelog
ExclusiveArch: ppc %{power64}
- libsmbios
ExclusiveArch: x86_64 %{ix86}
- libunwind
ExclusiveArch: %{arm} aarch64 hppa ia64 mips ppc %{power64} s390x %{ix86} x86_64
- libva-intel-hybrid-driver
ExclusiveArch: %{ix86} x86_64 ia64
- libvma
ExclusiveArch: x86_64 ppc64le ppc64 aarch64
- libvmi
ExclusiveArch: x86_64
- libvpd
ExclusiveArch: %{power64}
- libxsmm
ExclusiveArch: x86_64
- libzdnn
ExclusiveArch: s390x
- libzfcphbaapi
ExclusiveArch: s390 s390x
- lightdm
ExclusiveArch: x86_64 ppc64le
- llhttp
ExclusiveArch: %{nodejs_arches}
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- luxcorerender
ExclusiveArch: x86_64
- mactel-boot
ExclusiveArch: x86_64
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matreshka
ExclusiveArch: %GPRbuild_arches
- maui-mauikit
ExclusiveArch: %{ix86} s390x aarch64 x86_64
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mbpfan
ExclusiveArch: x86_64
- mcelog
ExclusiveArch: i686 x86_64
- mdevctl
ExclusiveArch: %{rust_arches}
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- mellowplayer
ExclusiveArch: %{qt5_qtwebengine_arches}
- memkind
ExclusiveArch: x86_64 ppc64 ppc64le s390x aarch64
- memtest86+
ExclusiveArch: %{ix86} x86_64
- mesos
ExclusiveArch: x86_64
- microcode_ctl
ExclusiveArch: %{ix86} x86_64
- micropython
ExclusiveArch: %{arm} %{ix86} x86_64
- mine_detector
ExclusiveArch: %{GPRbuild_arches}
- minetest
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mingw-libidn2
ExclusiveArch: %{ix86} x86_64 %{arm}
- mingw-wine-gecko
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- mirrorlist-server
ExclusiveArch: %{rust_arches}
- mkbootdisk
ExclusiveArch: %{ix86} sparc sparc64 x86_64
- mod_mono
ExclusiveArch: %mono_arches
- module-build-service
ExclusiveArch: %{ix86} x86_64 noarch
- mokutil
ExclusiveArch: %{ix86} x86_64 aarch64 %{arm}
- mold
ExclusiveArch: x86_64 aarch64 riscv64
- mono
ExclusiveArch: %mono_arches
- mono-addins
ExclusiveArch: %mono_arches
- mono-basic
ExclusiveArch: %{mono_arches}
- mono-bouncycastle
ExclusiveArch: %mono_arches
- mono-cecil
ExclusiveArch: %mono_arches
- mono-cecil-flowanalysis
ExclusiveArch: %mono_arches
- mono-reflection
ExclusiveArch: %mono_arches
- mono-tools
ExclusiveArch: %mono_arches
- mono-zeroconf
ExclusiveArch: %mono_arches
- monobristol
ExclusiveArch: %{mono_arches}
- monodevelop
ExclusiveArch: %mono_arches
- monodevelop-debugger-gdb
ExclusiveArch: %{mono_arches}
- monosim
ExclusiveArch: %mono_arches
- mrrescue
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- msr-tools
ExclusiveArch: %{ix86} x86_64
- mustache-d
ExclusiveArch: %{ldc_arches}
- mysql-connector-net
ExclusiveArch: %{mono_arches}
- naev
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- nant
ExclusiveArch: %mono_arches
- nativejit
ExclusiveArch: x86_64
- nbc
ExclusiveArch: %{fpc_arches}
- nbdkit
ExclusiveArch: x86_64
- ndesk-dbus
ExclusiveArch: %{mono_arches}
- ndesk-dbus-glib
ExclusiveArch: %{mono_arches}
- netavark
ExclusiveArch: %{rust_arches}
- newsflash
ExclusiveArch: %{rust_arches}
- newtonsoft-json
ExclusiveArch: %{mono_arches}
- nispor
ExclusiveArch: %{rust_arches}
- nodejs
ExclusiveArch: %{nodejs_arches}
- nodejs-acorn-object-spread
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-backbone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bash-language-server
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buble
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generic-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-linefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nodemon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-packaging
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-replace-require-self
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supervisor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typescript
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-underscore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- notify-sharp
ExclusiveArch: %{mono_arches}
- notify-sharp3
ExclusiveArch: %{mono_arches}
- nuget
ExclusiveArch: %{mono_arches}
- numatop
ExclusiveArch: x86_64 ppc64le
- nunit
ExclusiveArch: %{mono_arches}
- nunit2
ExclusiveArch: %{mono_arches}
- nvml
ExclusiveArch: x86_64 ppc64le
- nwchem
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- obs-service-rust2rpm
ExclusiveArch: %{rust_arches} noarch
- oci-seccomp-bpf-hook
ExclusiveArch: x86_64 %%{power64} aarch64 s390x armv7hl
- oci-umount
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- oidn
ExclusiveArch: x86_64
- olpc-kbdshim
ExclusiveArch: %{ix86} %{arm}
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- oneVPL
ExclusiveArch: x86_64
- oneVPL-intel-gpu
ExclusiveArch: x86_64
- onednn
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- onedrive
ExclusiveArch: %{ldc_arches}
- opae
ExclusiveArch: x86_64
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 aarch64
- openblas
ExclusiveArch: %{openblas_arches}
- openjfx
ExclusiveArch: x86_64
- openjfx8
ExclusiveArch: x86_64
- openlibm
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 %{power64}
- openni
ExclusiveArch: %{ix86} x86_64 %{arm}
- openni-primesense
ExclusiveArch: %{ix86} x86_64 %{arm}
- openshadinglanguage
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- openssl-ibmca
ExclusiveArch: s390 s390x
- origin
ExclusiveArch: %{go_arches}
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- orion
ExclusiveArch: %{qt5_qtwebengine_arches}
- orthorobot
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- pacemaker
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64 %{arm}
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- paflib
ExclusiveArch: ppc %{power64}
- parsec
ExclusiveArch: %{rust_arches}
- parsec-tool
ExclusiveArch: %{rust_arches}
- pasdoc
ExclusiveArch: %{fpc_arches}
- pcc
ExclusiveArch: %{ix86} x86_64
- pcm
ExclusiveArch: %{ix86} x86_64
- pcmciautils
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 %{arm}
- pdbg
ExclusiveArch: ppc64le
- pdfmod
ExclusiveArch: %mono_arches
- perl-Dumbbench
ExclusiveArch: %{ix86} x86_64 noarch
- perl-Parse-DMIDecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- pesign
ExclusiveArch: %{ix86} x86_64 ia64 aarch64 %{arm}
- pesign-test-app
ExclusiveArch: x86_64
- pinta
ExclusiveArch: %mono_arches
- pioneer
ExclusiveArch: %{ix86} x86_64
- playonlinux
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- pmdk-convert
ExclusiveArch: x86_64
- pmemkv
ExclusiveArch: x86_64
- podman
ExclusiveArch: %{golang_arches}
- poppler-sharp
ExclusiveArch: %mono_arches
- popub
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- powerpc-utils
ExclusiveArch: ppc %{power64}
- ppc64-diag
ExclusiveArch: ppc %{power64}
- pveclib
ExclusiveArch: ppc %{power64}
- pvs-sbcl
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- pyqtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- python-cryptography
ExclusiveArch: %{rust_arches}
- python-etcd
ExclusiveArch: noarch %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- python-healpy
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-javabridge
ExclusiveArch: i686 x86_64
- python-openoffice
ExclusiveArch: noarch x86_64
- python-pymoc
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-setuptools-rust
ExclusiveArch: %{rust_arches}
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- qatzip
ExclusiveArch: x86_64
- qcint
ExclusiveArch: x86_64
- qclib
ExclusiveArch: s390 s390x
- qemu-sanity-check
ExclusiveArch: %{kernel_arches}
- qevercloud
ExclusiveArch: %{qt5_qtwebengine_arches}
- qmapshack
ExclusiveArch: %{qt5_qtwebengine_arches}
- qt4pas
ExclusiveArch: %{fpc_arches}
- qt5-qtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- quantum-espresso
ExclusiveArch: x86_64 %{ix86} aarch64 %{power64}
- quentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- reg
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- renderdoc
ExclusiveArch: x86_64
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm}
- rescene
ExclusiveArch: %{mono_arches}
- restool
ExclusiveArch: aarch64
- restsharp
ExclusiveArch: %{mono_arches}
- rhythmbox-alternative-toolbar
ExclusiveArch: %{ix86} %{arm} x86_64 ppc64 ppc64le
- rocm-compilersupport
ExclusiveArch: x86_64 aarch64
- rocm-device-libs
ExclusiveArch: x86_64 aarch64
- rocm-runtime
ExclusiveArch: x86_64 aarch64
- rocminfo
ExclusiveArch: x86_64 aarch64
- rpg-cli
ExclusiveArch: %{rust_arches}
- rpm-ostree
ExclusiveArch: %{rust_arches}
- rr
ExclusiveArch: %{ix86} x86_64 aarch64
- rssguard
ExclusiveArch: %{qt5_qtwebengine_arches}
- rubygem-childprocess
ExclusiveArch: %{ix86} x86_64 noarch
- runc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le %{mips} s390x
- rust
ExclusiveArch: %{rust_arches}
- rust-Inflector
ExclusiveArch: %{rust_arches}
- rust-ab_glyph
ExclusiveArch: %{rust_arches}
- rust-ab_glyph_rasterizer
ExclusiveArch: %{rust_arches}
- rust-abomonation
ExclusiveArch: %{rust_arches}
- rust-actix
ExclusiveArch: %{rust_arches}
- rust-actix-codec
ExclusiveArch: %{rust_arches}
- rust-actix-connect
ExclusiveArch: %{rust_arches}
- rust-actix-http
ExclusiveArch: %{rust_arches}
- rust-actix-macros
ExclusiveArch: %{rust_arches}
- rust-actix-macros0.1
ExclusiveArch: %{rust_arches}
- rust-actix-router
ExclusiveArch: %{rust_arches}
- rust-actix-rt
ExclusiveArch: %{rust_arches}
- rust-actix-rt1
ExclusiveArch: %{rust_arches}
- rust-actix-server
ExclusiveArch: %{rust_arches}
- rust-actix-service
ExclusiveArch: %{rust_arches}
- rust-actix-testing
ExclusiveArch: %{rust_arches}
- rust-actix-threadpool
ExclusiveArch: %{rust_arches}
- rust-actix-tls
ExclusiveArch: %{rust_arches}
- rust-actix-utils
ExclusiveArch: %{rust_arches}
- rust-actix-web
ExclusiveArch: %{rust_arches}
- rust-actix-web-codegen
ExclusiveArch: %{rust_arches}
- rust-actix0.10
ExclusiveArch: %{rust_arches}
- rust-actix_derive
ExclusiveArch: %{rust_arches}
- rust-actix_derive0.5
ExclusiveArch: %{rust_arches}
- rust-addr2line
ExclusiveArch: %{rust_arches}
- rust-adler
ExclusiveArch: %{rust_arches}
- rust-adler32
ExclusiveArch: %{rust_arches}
- rust-aead
ExclusiveArch: %{rust_arches}
- rust-aes
ExclusiveArch: %{rust_arches}
- rust-aes-gcm
ExclusiveArch: %{rust_arches}
- rust-aes0.7
ExclusiveArch: %{rust_arches}
- rust-afterburn
ExclusiveArch: %{rust_arches}
- rust-ahash
ExclusiveArch: %{rust_arches}
- rust-ahash0.4
ExclusiveArch: %{rust_arches}
- rust-aho-corasick
ExclusiveArch: %{rust_arches}
- rust-alacritty
ExclusiveArch: %{rust_arches}
- rust-alacritty_config_derive
ExclusiveArch: %{rust_arches}
- rust-alacritty_terminal
ExclusiveArch: %{rust_arches}
- rust-alga
ExclusiveArch: %{rust_arches}
- rust-alga_derive
ExclusiveArch: %{rust_arches}
- rust-aliasable
ExclusiveArch: %{rust_arches}
- rust-alloc-no-stdlib
ExclusiveArch: %{rust_arches}
- rust-alloc-stdlib
ExclusiveArch: %{rust_arches}
- rust-alsa
ExclusiveArch: %{rust_arches}
- rust-alsa-sys
ExclusiveArch: %{rust_arches}
- rust-ambient-authority
ExclusiveArch: %{rust_arches}
- rust-ammonia
ExclusiveArch: %{rust_arches}
- rust-andrew
ExclusiveArch: %{rust_arches}
- rust-ansi_colours
ExclusiveArch: %{rust_arches}
- rust-ansi_term
ExclusiveArch: %{rust_arches}
- rust-ansi_term0.11
ExclusiveArch: %{rust_arches}
- rust-antidote
ExclusiveArch: %{rust_arches}
- rust-anyhow
ExclusiveArch: %{rust_arches}
- rust-aom-sys
ExclusiveArch: %{rust_arches}
- rust-app_dirs
ExclusiveArch: %{rust_arches}
- rust-approx
ExclusiveArch: %{rust_arches}
- rust-ar
ExclusiveArch: %{rust_arches}
- rust-arbitrary
ExclusiveArch: %{rust_arches}
- rust-arbitrary0.4
ExclusiveArch: %{rust_arches}
- rust-arc-swap
ExclusiveArch: %{rust_arches}
- rust-arf-strings
ExclusiveArch: %{rust_arches}
- rust-arg_enum_proc_macro
ExclusiveArch: %{rust_arches}
- rust-argh
ExclusiveArch: %{rust_arches}
- rust-argh_derive
ExclusiveArch: %{rust_arches}
- rust-argh_shared
ExclusiveArch: %{rust_arches}
- rust-argparse
ExclusiveArch: %{rust_arches}
- rust-array-init
ExclusiveArch: %{rust_arches}
- rust-arrayref
ExclusiveArch: %{rust_arches}
- rust-arrayvec
ExclusiveArch: %{rust_arches}
- rust-arrayvec0.5
ExclusiveArch: %{rust_arches}
- rust-article_scraper
ExclusiveArch: %{rust_arches}
- rust-ascii
ExclusiveArch: %{rust_arches}
- rust-ascii-canvas
ExclusiveArch: %{rust_arches}
- rust-askalono
ExclusiveArch: %{rust_arches}
- rust-askalono-cli
ExclusiveArch: %{rust_arches}
- rust-askama
ExclusiveArch: %{rust_arches}
- rust-askama_derive
ExclusiveArch: %{rust_arches}
- rust-askama_escape
ExclusiveArch: %{rust_arches}
- rust-askama_shared
ExclusiveArch: %{rust_arches}
- rust-asn1
ExclusiveArch: %{rust_arches}
- rust-asn1_derive
ExclusiveArch: %{rust_arches}
- rust-assert-impl
ExclusiveArch: %{rust_arches}
- rust-assert-json-diff
ExclusiveArch: %{rust_arches}
- rust-assert_approx_eq
ExclusiveArch: %{rust_arches}
- rust-assert_cli
ExclusiveArch: %{rust_arches}
- rust-assert_cmd
ExclusiveArch: %{rust_arches}
- rust-assert_fs
ExclusiveArch: %{rust_arches}
- rust-assert_matches
ExclusiveArch: %{rust_arches}
- rust-assign
ExclusiveArch: %{rust_arches}
- rust-async-attributes
ExclusiveArch: %{rust_arches}
- rust-async-channel
ExclusiveArch: %{rust_arches}
- rust-async-compression
ExclusiveArch: %{rust_arches}
- rust-async-executor
ExclusiveArch: %{rust_arches}
- rust-async-global-executor
ExclusiveArch: %{rust_arches}
- rust-async-io
ExclusiveArch: %{rust_arches}
- rust-async-lock
ExclusiveArch: %{rust_arches}
- rust-async-mutex
ExclusiveArch: %{rust_arches}
- rust-async-process
ExclusiveArch: %{rust_arches}
- rust-async-std
ExclusiveArch: %{rust_arches}
- rust-async-stream
ExclusiveArch: %{rust_arches}
- rust-async-stream-impl
ExclusiveArch: %{rust_arches}
- rust-async-task
ExclusiveArch: %{rust_arches}
- rust-async-trait
ExclusiveArch: %{rust_arches}
- rust-asyncgit
ExclusiveArch: %{rust_arches}
- rust-atk
ExclusiveArch: %{rust_arches}
- rust-atk-sys
ExclusiveArch: %{rust_arches}
- rust-atom
ExclusiveArch: %{rust_arches}
- rust-atomic
ExclusiveArch: %{rust_arches}
- rust-atomic-traits
ExclusiveArch: %{rust_arches}
- rust-atomic-waker
ExclusiveArch: %{rust_arches}
- rust-attohttpc
ExclusiveArch: %{rust_arches}
- rust-atty
ExclusiveArch: %{rust_arches}
- rust-autocfg
ExclusiveArch: %{rust_arches}
- rust-automod
ExclusiveArch: %{rust_arches}
- rust-av-metrics
ExclusiveArch: %{rust_arches}
- rust-average
ExclusiveArch: %{rust_arches}
- rust-awc
ExclusiveArch: %{rust_arches}
- rust-aws-nitro-enclaves-cose
ExclusiveArch: %{rust_arches}
- rust-az
ExclusiveArch: %{rust_arches}
- rust-backtrace
ExclusiveArch: %{rust_arches}
- rust-base100
ExclusiveArch: %{rust_arches}
- rust-base64
ExclusiveArch: %{rust_arches}
- rust-base64-0.10
ExclusiveArch: %{rust_arches}
- rust-base64-0.11
ExclusiveArch: %{rust_arches}
- rust-base64_0.12
ExclusiveArch: %{rust_arches}
- rust-base64ct
ExclusiveArch: %{rust_arches}
- rust-bat
ExclusiveArch: %{rust_arches}
- rust-battery
ExclusiveArch: %{rust_arches}
- rust-beef
ExclusiveArch: %{rust_arches}
- rust-below
ExclusiveArch: %{rust_arches}
- rust-below-common
ExclusiveArch: %{rust_arches}
- rust-below-config
ExclusiveArch: %{rust_arches}
- rust-below-dump
ExclusiveArch: %{rust_arches}
- rust-below-model
ExclusiveArch: %{rust_arches}
- rust-below-render
ExclusiveArch: %{rust_arches}
- rust-below-store
ExclusiveArch: %{rust_arches}
- rust-below-view
ExclusiveArch: %{rust_arches}
- rust-below_derive
ExclusiveArch: %{rust_arches}
- rust-bencher
ExclusiveArch: %{rust_arches}
- rust-benfred-read-process-memory
ExclusiveArch: %{rust_arches}
- rust-bigdecimal
ExclusiveArch: %{rust_arches}
- rust-bincode
ExclusiveArch: %{rust_arches}
- rust-bincode0.8
ExclusiveArch: %{rust_arches}
- rust-bindgen
ExclusiveArch: %{rust_arches}
- rust-binfarce
ExclusiveArch: %{rust_arches}
- rust-bit-set
ExclusiveArch: %{rust_arches}
- rust-bit-vec
ExclusiveArch: %{rust_arches}
- rust-bitfield
ExclusiveArch: %{rust_arches}
- rust-bitflags
ExclusiveArch: %{rust_arches}
- rust-bitmaps
ExclusiveArch: %{rust_arches}
- rust-bitreader
ExclusiveArch: %{rust_arches}
- rust-bitstream-io
ExclusiveArch: %{rust_arches}
- rust-bitvec
ExclusiveArch: %{rust_arches}
- rust-blake2
ExclusiveArch: %{rust_arches}
- rust-blobby
ExclusiveArch: %{rust_arches}
- rust-blobby0.1
ExclusiveArch: %{rust_arches}
- rust-block-buffer
ExclusiveArch: %{rust_arches}
- rust-block-buffer0.9
ExclusiveArch: %{rust_arches}
- rust-block-modes
ExclusiveArch: %{rust_arches}
- rust-block-padding
ExclusiveArch: %{rust_arches}
- rust-block-padding0.2
ExclusiveArch: %{rust_arches}
- rust-blocking
ExclusiveArch: %{rust_arches}
- rust-blsctl
ExclusiveArch: %{rust_arches}
- rust-bodhi
ExclusiveArch: %{rust_arches}
- rust-bodhi-cli
ExclusiveArch: %{rust_arches}
- rust-bootupd
ExclusiveArch: x86_64 aarch64
- rust-box_drawing
ExclusiveArch: %{rust_arches}
- rust-boxfnonce
ExclusiveArch: %{rust_arches}
- rust-brotli
ExclusiveArch: %{rust_arches}
- rust-brotli-decompressor
ExclusiveArch: %{rust_arches}
- rust-brotli-sys
ExclusiveArch: %{rust_arches}
- rust-brotli2
ExclusiveArch: %{rust_arches}
- rust-bstr
ExclusiveArch: %{rust_arches}
- rust-btrd
ExclusiveArch: %{rust_arches}
- rust-buf_redux
ExclusiveArch: %{rust_arches}
- rust-buffered-reader
ExclusiveArch: %{rust_arches}
- rust-bufsize
ExclusiveArch: %{rust_arches}
- rust-bufstream
ExclusiveArch: %{rust_arches}
- rust-bugreport
ExclusiveArch: %{rust_arches}
- rust-build-env
ExclusiveArch: %{rust_arches}
- rust-build_const
ExclusiveArch: %{rust_arches}
- rust-bumpalo
ExclusiveArch: %{rust_arches}
- rust-byte-unit
ExclusiveArch: %{rust_arches}
- rust-byte-unit3
ExclusiveArch: %{rust_arches}
- rust-bytecheck
ExclusiveArch: %{rust_arches}
- rust-bytecheck_derive
ExclusiveArch: %{rust_arches}
- rust-bytecount
ExclusiveArch: %{rust_arches}
- rust-bytelines
ExclusiveArch: %{rust_arches}
- rust-bytemuck
ExclusiveArch: %{rust_arches}
- rust-bytemuck_derive
ExclusiveArch: %{rust_arches}
- rust-byteorder
ExclusiveArch: %{rust_arches}
- rust-bytes
ExclusiveArch: %{rust_arches}
- rust-bytes0.4
ExclusiveArch: %{rust_arches}
- rust-bytes0.5
ExclusiveArch: %{rust_arches}
- rust-bytesize
ExclusiveArch: %{rust_arches}
- rust-bytestring
ExclusiveArch: %{rust_arches}
- rust-bzip2
ExclusiveArch: %{rust_arches}
- rust-bzip2-sys
ExclusiveArch: %{rust_arches}
- rust-cache-padded
ExclusiveArch: %{rust_arches}
- rust-cairo-rs
ExclusiveArch: %{rust_arches}
- rust-cairo-sys-rs
ExclusiveArch: %{rust_arches}
- rust-calloop
ExclusiveArch: %{rust_arches}
- rust-calloop0.6
ExclusiveArch: %{rust_arches}
- rust-camino
ExclusiveArch: %{rust_arches}
- rust-cap-primitives
ExclusiveArch: %{rust_arches}
- rust-cap-rand
ExclusiveArch: %{rust_arches}
- rust-cap-std
ExclusiveArch: %{rust_arches}
- rust-cap-tempfile
ExclusiveArch: %{rust_arches}
- rust-cap-time-ext
ExclusiveArch: %{rust_arches}
- rust-capng
ExclusiveArch: %{rust_arches}
- rust-capnp
ExclusiveArch: %{rust_arches}
- rust-capnp-futures
ExclusiveArch: %{rust_arches}
- rust-capnp-rpc
ExclusiveArch: %{rust_arches}
- rust-caps
ExclusiveArch: %{rust_arches}
- rust-cargo
ExclusiveArch: %{rust_arches}
- rust-cargo-bloat
ExclusiveArch: %{rust_arches}
- rust-cargo-c
ExclusiveArch: %{rust_arches}
- rust-cargo-edit
ExclusiveArch: %{rust_arches}
- rust-cargo-husky
ExclusiveArch: %{rust_arches}
- rust-cargo-insta
ExclusiveArch: %{rust_arches}
- rust-cargo-platform
ExclusiveArch: %{rust_arches}
- rust-cargo-readme
ExclusiveArch: %{rust_arches}
- rust-cargo-util
ExclusiveArch: %{rust_arches}
- rust-cargo_metadata
ExclusiveArch: %{rust_arches}
- rust-cascade
ExclusiveArch: %{rust_arches}
- rust-case
ExclusiveArch: %{rust_arches}
- rust-cassowary
ExclusiveArch: %{rust_arches}
- rust-cast
ExclusiveArch: %{rust_arches}
- rust-cbindgen
ExclusiveArch: %{rust_arches}
- rust-cc
ExclusiveArch: %{rust_arches}
- rust-cedarwood
ExclusiveArch: %{rust_arches}
- rust-cexpr
ExclusiveArch: %{rust_arches}
- rust-cfb
ExclusiveArch: %{rust_arches}
- rust-cfg-expr
ExclusiveArch: %{rust_arches}
- rust-cfg-if
ExclusiveArch: %{rust_arches}
- rust-cfg-if0.1
ExclusiveArch: %{rust_arches}
- rust-cgmath
ExclusiveArch: %{rust_arches}
- rust-cgroupfs
ExclusiveArch: %{rust_arches}
- rust-chainerror
ExclusiveArch: %{rust_arches}
- rust-charset
ExclusiveArch: %{rust_arches}
- rust-chbs
ExclusiveArch: %{rust_arches}
- rust-checked_int_cast
ExclusiveArch: %{rust_arches}
- rust-chlorine
ExclusiveArch: %{rust_arches}
- rust-choosier
ExclusiveArch: %{rust_arches}
- rust-chrono
ExclusiveArch: %{rust_arches}
- rust-chrono-humanize
ExclusiveArch: %{rust_arches}
- rust-chrono-tz
ExclusiveArch: %{rust_arches}
- rust-chunked_transfer
ExclusiveArch: %{rust_arches}
- rust-cipher
ExclusiveArch: %{rust_arches}
- rust-cipher0.3
ExclusiveArch: %{rust_arches}
- rust-clang-ast
ExclusiveArch: %{rust_arches}
- rust-clang-sys
ExclusiveArch: %{rust_arches}
- rust-clap
ExclusiveArch: %{rust_arches}
- rust-clap-verbosity-flag
ExclusiveArch: %{rust_arches}
- rust-clap2
ExclusiveArch: %{rust_arches}
- rust-clap_complete
ExclusiveArch: %{rust_arches}
- rust-clap_complete_fig
ExclusiveArch: %{rust_arches}
- rust-clap_derive
ExclusiveArch: %{rust_arches}
- rust-clap_generate
ExclusiveArch: %{rust_arches}
- rust-clap_generate_fig
ExclusiveArch: %{rust_arches}
- rust-claxon
ExclusiveArch: %{rust_arches}
- rust-clicolors-control
ExclusiveArch: %{rust_arches}
- rust-clipboard
ExclusiveArch: %{rust_arches}
- rust-clircle
ExclusiveArch: %{rust_arches}
- rust-cloudflare-zlib
ExclusiveArch: x86_64 aarch64
- rust-cloudflare-zlib-sys
ExclusiveArch: x86_64 aarch64
- rust-cmake
ExclusiveArch: %{rust_arches}
- rust-codespan-reporting
ExclusiveArch: %{rust_arches}
- rust-codicon
ExclusiveArch: %{rust_arches}
- rust-color-backtrace
ExclusiveArch: %{rust_arches}
- rust-color_quant
ExclusiveArch: %{rust_arches}
- rust-colored
ExclusiveArch: %{rust_arches}
- rust-colored1
ExclusiveArch: %{rust_arches}
- rust-colored_json
ExclusiveArch: %{rust_arches}
- rust-colorful
ExclusiveArch: %{rust_arches}
- rust-combine
ExclusiveArch: %{rust_arches}
- rust-comfy-table
ExclusiveArch: %{rust_arches}
- rust-common-path
ExclusiveArch: %{rust_arches}
- rust-compiletest_rs
ExclusiveArch: %{rust_arches}
- rust-compress-tools
ExclusiveArch: %{rust_arches}
- rust-comrak
ExclusiveArch: %{rust_arches}
- rust-concurrent-queue
ExclusiveArch: %{rust_arches}
- rust-configparser
ExclusiveArch: %{rust_arches}
- rust-confy
ExclusiveArch: %{rust_arches}
- rust-conhash
ExclusiveArch: %{rust_arches}
- rust-console
ExclusiveArch: %{rust_arches}
- rust-console0.11
ExclusiveArch: %{rust_arches}
- rust-console0.12
ExclusiveArch: %{rust_arches}
- rust-console0.13
ExclusiveArch: %{rust_arches}
- rust-console0.14
ExclusiveArch: %{rust_arches}
- rust-console0.9
ExclusiveArch: %{rust_arches}
- rust-console_error_panic_hook
ExclusiveArch: %{rust_arches}
- rust-const-cstr
ExclusiveArch: %{rust_arches}
- rust-const-oid
ExclusiveArch: %{rust_arches}
- rust-const-random
ExclusiveArch: %{rust_arches}
- rust-const-random-macro
ExclusiveArch: %{rust_arches}
- rust-const_fn
ExclusiveArch: %{rust_arches}
- rust-constant_time_eq
ExclusiveArch: %{rust_arches}
- rust-content_inspector
ExclusiveArch: %{rust_arches}
- rust-conv
ExclusiveArch: %{rust_arches}
- rust-convert_case
ExclusiveArch: %{rust_arches}
- rust-cookie
ExclusiveArch: %{rust_arches}
- rust-cookie-factory
ExclusiveArch: %{rust_arches}
- rust-cookie0.14
ExclusiveArch: %{rust_arches}
- rust-cookie_store
ExclusiveArch: %{rust_arches}
- rust-cookie_store0.12
ExclusiveArch: %{rust_arches}
- rust-coolor
ExclusiveArch: %{rust_arches}
- rust-copydeps
ExclusiveArch: %{rust_arches}
- rust-copyless
ExclusiveArch: %{rust_arches}
- rust-copypasta
ExclusiveArch: %{rust_arches}
- rust-cordic
ExclusiveArch: %{rust_arches}
- rust-coreos-installer
ExclusiveArch: %{rust_arches}
- rust-count-zeroes
ExclusiveArch: %{rust_arches}
- rust-counted-array
ExclusiveArch: %{rust_arches}
- rust-cpal
ExclusiveArch: %{rust_arches}
- rust-cpio
ExclusiveArch: %{rust_arches}
- rust-cpp_demangle
ExclusiveArch: %{rust_arches}
- rust-cpufeatures
ExclusiveArch: %{rust_arches}
- rust-cpython
ExclusiveArch: %{rust_arches}
- rust-cranelift-bforest
ExclusiveArch: %{rust_arches}
- rust-cranelift-codegen
ExclusiveArch: x86_64 aarch64 s390x
- rust-cranelift-codegen-meta
ExclusiveArch: %{rust_arches}
- rust-cranelift-codegen-shared
ExclusiveArch: %{rust_arches}
- rust-cranelift-entity
ExclusiveArch: %{rust_arches}
- rust-cranelift-frontend
ExclusiveArch: x86_64 aarch64 s390x
- rust-cranelift-native
ExclusiveArch: x86_64 aarch64 s390x
- rust-cranelift-wasm
ExclusiveArch: x86_64 aarch64 s390x
- rust-crates-io
ExclusiveArch: %{rust_arches}
- rust-crc
ExclusiveArch: %{rust_arches}
- rust-crc-any
ExclusiveArch: %{rust_arches}
- rust-crc-catalog
ExclusiveArch: %{rust_arches}
- rust-crc-core
ExclusiveArch: %{rust_arches}
- rust-crc32fast
ExclusiveArch: %{rust_arches}
- rust-criterion
ExclusiveArch: %{rust_arches}
- rust-criterion-plot
ExclusiveArch: %{rust_arches}
- rust-crossbeam
ExclusiveArch: %{rust_arches}
- rust-crossbeam-channel
ExclusiveArch: %{rust_arches}
- rust-crossbeam-channel0.4
ExclusiveArch: %{rust_arches}
- rust-crossbeam-deque
ExclusiveArch: %{rust_arches}
- rust-crossbeam-deque0.7
ExclusiveArch: %{rust_arches}
- rust-crossbeam-epoch
ExclusiveArch: %{rust_arches}
- rust-crossbeam-epoch0.8
ExclusiveArch: %{rust_arches}
- rust-crossbeam-queue
ExclusiveArch: %{rust_arches}
- rust-crossbeam-queue0.2
ExclusiveArch: %{rust_arches}
- rust-crossbeam-utils
ExclusiveArch: %{rust_arches}
- rust-crossbeam-utils0.7
ExclusiveArch: %{rust_arches}
- rust-crossbeam0.7
ExclusiveArch: %{rust_arches}
- rust-crossfont
ExclusiveArch: %{rust_arches}
- rust-crossterm
ExclusiveArch: %{rust_arches}
- rust-crossterm0.17
ExclusiveArch: %{rust_arches}
- rust-crossterm0.19
ExclusiveArch: %{rust_arches}
- rust-crosstermion
ExclusiveArch: %{rust_arches}
- rust-crunchy
ExclusiveArch: %{rust_arches}
- rust-crypto-bigint
ExclusiveArch: %{rust_arches}
- rust-crypto-common
ExclusiveArch: %{rust_arches}
- rust-crypto-hash
ExclusiveArch: %{rust_arches}
- rust-crypto-mac
ExclusiveArch: %{rust_arches}
- rust-cryptoki
ExclusiveArch: %{rust_arches}
- rust-cryptoki-sys
ExclusiveArch: %{rust_arches}
- rust-cryptovec
ExclusiveArch: %{rust_arches}
- rust-cssparser
ExclusiveArch: %{rust_arches}
- rust-cssparser-macros
ExclusiveArch: %{rust_arches}
- rust-cstr-argument
ExclusiveArch: %{rust_arches}
- rust-cstr_core
ExclusiveArch: %{rust_arches}
- rust-csv
ExclusiveArch: %{rust_arches}
- rust-csv-core
ExclusiveArch: %{rust_arches}
- rust-ct-logs
ExclusiveArch: %{rust_arches}
- rust-ctor
ExclusiveArch: %{rust_arches}
- rust-ctr
ExclusiveArch: %{rust_arches}
- rust-ctr0.8
ExclusiveArch: %{rust_arches}
- rust-ctrlc
ExclusiveArch: %{rust_arches}
- rust-cty
ExclusiveArch: %{rust_arches}
- rust-curl
ExclusiveArch: %{rust_arches}
- rust-curl-sys
ExclusiveArch: %{rust_arches}
- rust-cursive
ExclusiveArch: %{rust_arches}
- rust-cursive-tabs
ExclusiveArch: %{rust_arches}
- rust-cursive_buffered_backend
ExclusiveArch: %{rust_arches}
- rust-cursive_core
ExclusiveArch: %{rust_arches}
- rust-curve25519-dalek
ExclusiveArch: %{rust_arches}
- rust-custom_derive
ExclusiveArch: %{rust_arches}
- rust-custom_error
ExclusiveArch: %{rust_arches}
- rust-cxx
ExclusiveArch: %{rust_arches}
- rust-cxx-build
ExclusiveArch: %{rust_arches}
- rust-cxx-gen
ExclusiveArch: %{rust_arches}
- rust-cxxbridge-flags
ExclusiveArch: %{rust_arches}
- rust-cxxbridge-macro
ExclusiveArch: %{rust_arches}
- rust-darling
ExclusiveArch: %{rust_arches}
- rust-darling0.12
ExclusiveArch: %{rust_arches}
- rust-darling_core
ExclusiveArch: %{rust_arches}
- rust-darling_core0.12
ExclusiveArch: %{rust_arches}
- rust-darling_macro
ExclusiveArch: %{rust_arches}
- rust-darling_macro0.12
ExclusiveArch: %{rust_arches}
- rust-dashmap
ExclusiveArch: %{rust_arches}
- rust-data-encoding
ExclusiveArch: %{rust_arches}
- rust-data-url
ExclusiveArch: %{rust_arches}
- rust-datetime
ExclusiveArch: %{rust_arches}
- rust-dav1d-sys
ExclusiveArch: %{rust_arches}
- rust-dbus
ExclusiveArch: %{rust_arches}
- rust-dbus-codegen
ExclusiveArch: %{rust_arches}
- rust-dbus-crossroads
ExclusiveArch: %{rust_arches}
- rust-dbus-tokio
ExclusiveArch: %{rust_arches}
- rust-dbus-tree
ExclusiveArch: %{rust_arches}
- rust-dbus0.8
ExclusiveArch: %{rust_arches}
- rust-debug-helper
ExclusiveArch: %{rust_arches}
- rust-decimal
ExclusiveArch: %{rust_arches}
- rust-defer-drop
ExclusiveArch: %{rust_arches}
- rust-deflate
ExclusiveArch: %{rust_arches}
- rust-deflate0.8
ExclusiveArch: %{rust_arches}
- rust-defmac
ExclusiveArch: %{rust_arches}
- rust-delta_e
ExclusiveArch: %{rust_arches}
- rust-der
ExclusiveArch: %{rust_arches}
- rust-der_derive
ExclusiveArch: %{rust_arches}
- rust-derivative
ExclusiveArch: %{rust_arches}
- rust-derive-new
ExclusiveArch: %{rust_arches}
- rust-derive_arbitrary
ExclusiveArch: %{rust_arches}
- rust-derive_arbitrary0.4
ExclusiveArch: %{rust_arches}
- rust-derive_builder
ExclusiveArch: %{rust_arches}
- rust-derive_builder0.9
ExclusiveArch: %{rust_arches}
- rust-derive_builder_core
ExclusiveArch: %{rust_arches}
- rust-derive_builder_core0.9
ExclusiveArch: %{rust_arches}
- rust-derive_builder_macro
ExclusiveArch: %{rust_arches}
- rust-derive_more
ExclusiveArch: %{rust_arches}
- rust-des
ExclusiveArch: %{rust_arches}
- rust-des0.7
ExclusiveArch: %{rust_arches}
- rust-desed
ExclusiveArch: %{rust_arches}
- rust-deunicode
ExclusiveArch: %{rust_arches}
- rust-devicemapper
ExclusiveArch: %{rust_arches}
- rust-devicemapper-sys
ExclusiveArch: %{rust_arches}
- rust-dialoguer
ExclusiveArch: %{rust_arches}
- rust-diesel
ExclusiveArch: %{rust_arches}
- rust-diesel_derives
ExclusiveArch: %{rust_arches}
- rust-diesel_migrations
ExclusiveArch: %{rust_arches}
- rust-diff
ExclusiveArch: %{rust_arches}
- rust-difference
ExclusiveArch: %{rust_arches}
- rust-difflib
ExclusiveArch: %{rust_arches}
- rust-diffus
ExclusiveArch: %{rust_arches}
- rust-diffus-derive
ExclusiveArch: %{rust_arches}
- rust-digest
ExclusiveArch: %{rust_arches}
- rust-digest0.9
ExclusiveArch: %{rust_arches}
- rust-directories
ExclusiveArch: %{rust_arches}
- rust-directories-next
ExclusiveArch: %{rust_arches}
- rust-dirs
ExclusiveArch: %{rust_arches}
- rust-dirs-next
ExclusiveArch: %{rust_arches}
- rust-dirs-sys
ExclusiveArch: %{rust_arches}
- rust-dirs-sys-next
ExclusiveArch: %{rust_arches}
- rust-dirs2
ExclusiveArch: %{rust_arches}
- rust-dirs3
ExclusiveArch: %{rust_arches}
- rust-diskonaut
ExclusiveArch: %{rust_arches}
- rust-displaydoc
ExclusiveArch: %{rust_arches}
- rust-dissimilar
ExclusiveArch: %{rust_arches}
- rust-dlib
ExclusiveArch: %{rust_arches}
- rust-dlib0.4
ExclusiveArch: %{rust_arches}
- rust-dlv-list
ExclusiveArch: %{rust_arches}
- rust-dns-lookup
ExclusiveArch: %{rust_arches}
- rust-dns-parser
ExclusiveArch: %{rust_arches}
- rust-doc-comment
ExclusiveArch: %{rust_arches}
- rust-docmatic
ExclusiveArch: %{rust_arches}
- rust-docopt
ExclusiveArch: %{rust_arches}
- rust-dotenv
ExclusiveArch: %{rust_arches}
- rust-downcast
ExclusiveArch: %{rust_arches}
- rust-downcast-rs
ExclusiveArch: %{rust_arches}
- rust-drg
ExclusiveArch: %{rust_arches}
- rust-dtoa
ExclusiveArch: %{rust_arches}
- rust-dtoa-short
ExclusiveArch: %{rust_arches}
- rust-dua-cli
ExclusiveArch: %{rust_arches}
- rust-duct
ExclusiveArch: %{rust_arches}
- rust-dummy
ExclusiveArch: %{rust_arches}
- rust-dunce
ExclusiveArch: %{rust_arches}
- rust-dutree
ExclusiveArch: %{rust_arches}
- rust-dyn-clone
ExclusiveArch: %{rust_arches}
- rust-easy-cast
ExclusiveArch: %{rust_arches}
- rust-easy-parallel
ExclusiveArch: %{rust_arches}
- rust-edit
ExclusiveArch: %{rust_arches}
- rust-edit-distance
ExclusiveArch: %{rust_arches}
- rust-either
ExclusiveArch: %{rust_arches}
- rust-elasticlunr-rs
ExclusiveArch: %{rust_arches}
- rust-elf
ExclusiveArch: %{rust_arches}
- rust-elfcat
ExclusiveArch: %{rust_arches}
- rust-ena
ExclusiveArch: %{rust_arches}
- rust-encode_unicode
ExclusiveArch: %{rust_arches}
- rust-encoding
ExclusiveArch: %{rust_arches}
- rust-encoding-index-japanese
ExclusiveArch: %{rust_arches}
- rust-encoding-index-korean
ExclusiveArch: %{rust_arches}
- rust-encoding-index-simpchinese
ExclusiveArch: %{rust_arches}
- rust-encoding-index-singlebyte
ExclusiveArch: %{rust_arches}
- rust-encoding-index-tradchinese
ExclusiveArch: %{rust_arches}
- rust-encoding_index_tests
ExclusiveArch: %{rust_arches}
- rust-encoding_rs
ExclusiveArch: %{rust_arches}
- rust-encoding_rs_io
ExclusiveArch: %{rust_arches}
- rust-endian-type
ExclusiveArch: %{rust_arches}
- rust-enquote
ExclusiveArch: %{rust_arches}
- rust-entities
ExclusiveArch: %{rust_arches}
- rust-enum-as-inner
ExclusiveArch: %{rust_arches}
- rust-enum-iterator
ExclusiveArch: %{rust_arches}
- rust-enum-iterator-derive
ExclusiveArch: %{rust_arches}
- rust-enum-map
ExclusiveArch: %{rust_arches}
- rust-enum-map-derive
ExclusiveArch: %{rust_arches}
- rust-enum-repr
ExclusiveArch: %{rust_arches}
- rust-enum_primitive
ExclusiveArch: %{rust_arches}
- rust-enumflags2
ExclusiveArch: %{rust_arches}
- rust-enumflags2_0.6
ExclusiveArch: %{rust_arches}
- rust-enumflags2_derive
ExclusiveArch: %{rust_arches}
- rust-enumflags2_derive0.6
ExclusiveArch: %{rust_arches}
- rust-enumset
ExclusiveArch: %{rust_arches}
- rust-enumset_derive
ExclusiveArch: %{rust_arches}
- rust-env_logger
ExclusiveArch: %{rust_arches}
- rust-env_logger0.4
ExclusiveArch: %{rust_arches}
- rust-env_logger0.5
ExclusiveArch: %{rust_arches}
- rust-env_logger0.6
ExclusiveArch: %{rust_arches}
- rust-env_logger0.7
ExclusiveArch: %{rust_arches}
- rust-env_logger0.8
ExclusiveArch: %{rust_arches}
- rust-env_proxy
ExclusiveArch: %{rust_arches}
- rust-environment
ExclusiveArch: %{rust_arches}
- rust-envsubst
ExclusiveArch: %{rust_arches}
- rust-epoll
ExclusiveArch: %{rust_arches}
- rust-erased-serde
ExclusiveArch: %{rust_arches}
- rust-err-derive
ExclusiveArch: %{rust_arches}
- rust-errln
ExclusiveArch: %{rust_arches}
- rust-errno
ExclusiveArch: %{rust_arches}
- rust-error-chain
ExclusiveArch: %{rust_arches}
- rust-escaper
ExclusiveArch: %{rust_arches}
- rust-escargot
ExclusiveArch: %{rust_arches}
- rust-ethtool
ExclusiveArch: %{rust_arches}
- rust-euclid
ExclusiveArch: %{rust_arches}
- rust-event-listener
ExclusiveArch: %{rust_arches}
- rust-exa
ExclusiveArch: %{rust_arches}
- rust-executable-path
ExclusiveArch: %{rust_arches}
- rust-exitcode
ExclusiveArch: %{rust_arches}
- rust-exitfailure
ExclusiveArch: %{rust_arches}
- rust-expat-sys
ExclusiveArch: %{rust_arches}
- rust-extend
ExclusiveArch: %{rust_arches}
- rust-extprim
ExclusiveArch: %{rust_arches}
- rust-extprim_literals_macros
ExclusiveArch: %{rust_arches}
- rust-faccess
ExclusiveArch: %{rust_arches}
- rust-fail
ExclusiveArch: %{rust_arches}
- rust-failure
ExclusiveArch: %{rust_arches}
- rust-failure-tools
ExclusiveArch: %{rust_arches}
- rust-failure_derive
ExclusiveArch: %{rust_arches}
- rust-fake
ExclusiveArch: %{rust_arches}
- rust-fake-simd
ExclusiveArch: %{rust_arches}
- rust-fallible-iterator
ExclusiveArch: %{rust_arches}
- rust-fallible-streaming-iterator
ExclusiveArch: %{rust_arches}
- rust-fallible_collections
ExclusiveArch: %{rust_arches}
- rust-fancy-regex
ExclusiveArch: %{rust_arches}
- rust-fastrand
ExclusiveArch: %{rust_arches}
- rust-fatfs
ExclusiveArch: %{rust_arches}
- rust-fb_procfs
ExclusiveArch: %{rust_arches}
- rust-fbthrift_codegen_includer_proc_macro
ExclusiveArch: %{rust_arches}
- rust-fd-find
ExclusiveArch: %{rust_arches}
- rust-fd-lock
ExclusiveArch: %{rust_arches}
- rust-fdlimit
ExclusiveArch: %{rust_arches}
- rust-fedora
ExclusiveArch: %{rust_arches}
- rust-fedora-coreos-pinger
ExclusiveArch: %{rust_arches}
- rust-fedora-update-feedback
ExclusiveArch: %{rust_arches}
- rust-feed-rs
ExclusiveArch: %{rust_arches}
- rust-feedbin_api
ExclusiveArch: %{rust_arches}
- rust-feedly_api
ExclusiveArch: %{rust_arches}
- rust-femme
ExclusiveArch: %{rust_arches}
- rust-fern
ExclusiveArch: %{rust_arches}
- rust-fever_api
ExclusiveArch: %{rust_arches}
- rust-ffsend
ExclusiveArch: %{rust_arches}
- rust-ffsend-api
ExclusiveArch: %{rust_arches}
- rust-field-offset
ExclusiveArch: %{rust_arches}
- rust-file-per-thread-logger
ExclusiveArch: %{rust_arches}
- rust-filedescriptor
ExclusiveArch: %{rust_arches}
- rust-filesize
ExclusiveArch: %{rust_arches}
- rust-filetime
ExclusiveArch: %{rust_arches}
- rust-filetreelist
ExclusiveArch: %{rust_arches}
- rust-find-crate
ExclusiveArch: %{rust_arches}
- rust-fixed
ExclusiveArch: %{rust_arches}
- rust-fixedbitset
ExclusiveArch: %{rust_arches}
- rust-flate2
ExclusiveArch: %{rust_arches}
- rust-float-cmp
ExclusiveArch: %{rust_arches}
- rust-float-ord
ExclusiveArch: %{rust_arches}
- rust-fluent
ExclusiveArch: %{rust_arches}
- rust-fluent-bundle
ExclusiveArch: %{rust_arches}
- rust-fluent-langneg
ExclusiveArch: %{rust_arches}
- rust-fluent-syntax
ExclusiveArch: %{rust_arches}
- rust-fn-error-context
ExclusiveArch: %{rust_arches}
- rust-fnv
ExclusiveArch: %{rust_arches}
- rust-font-kit
ExclusiveArch: %{rust_arches}
- rust-fontdb
ExclusiveArch: %{rust_arches}
- rust-fontdue
ExclusiveArch: %{rust_arches}
- rust-foreign-types
ExclusiveArch: %{rust_arches}
- rust-foreign-types-macros
ExclusiveArch: %{rust_arches}
- rust-foreign-types-shared
ExclusiveArch: %{rust_arches}
- rust-foreign-types-shared0.1
ExclusiveArch: %{rust_arches}
- rust-foreign-types0.3
ExclusiveArch: %{rust_arches}
- rust-form_urlencoded
ExclusiveArch: %{rust_arches}
- rust-fragile
ExclusiveArch: %{rust_arches}
- rust-freetype
ExclusiveArch: %{rust_arches}
- rust-freetype-rs
ExclusiveArch: %{rust_arches}
- rust-freetype-sys
ExclusiveArch: %{rust_arches}
- rust-fs-err
ExclusiveArch: %{rust_arches}
- rust-fs-set-times
ExclusiveArch: %{rust_arches}
- rust-fs2
ExclusiveArch: %{rust_arches}
- rust-fs_extra
ExclusiveArch: %{rust_arches}
- rust-fscommon
ExclusiveArch: %{rust_arches}
- rust-funty
ExclusiveArch: %{rust_arches}
- rust-futf
ExclusiveArch: %{rust_arches}
- rust-futures
ExclusiveArch: %{rust_arches}
- rust-futures-channel
ExclusiveArch: %{rust_arches}
- rust-futures-core
ExclusiveArch: %{rust_arches}
- rust-futures-cpupool
ExclusiveArch: %{rust_arches}
- rust-futures-executor
ExclusiveArch: %{rust_arches}
- rust-futures-io
ExclusiveArch: %{rust_arches}
- rust-futures-lite
ExclusiveArch: %{rust_arches}
- rust-futures-macro
ExclusiveArch: %{rust_arches}
- rust-futures-sink
ExclusiveArch: %{rust_arches}
- rust-futures-task
ExclusiveArch: %{rust_arches}
- rust-futures-test
ExclusiveArch: %{rust_arches}
- rust-futures-timer
ExclusiveArch: %{rust_arches}
- rust-futures-util
ExclusiveArch: %{rust_arches}
- rust-futures0.1
ExclusiveArch: %{rust_arches}
- rust-fuzzy-matcher
ExclusiveArch: %{rust_arches}
- rust-fxhash
ExclusiveArch: %{rust_arches}
- rust-gdk
ExclusiveArch: %{rust_arches}
- rust-gdk-pixbuf
ExclusiveArch: %{rust_arches}
- rust-gdk-pixbuf-sys
ExclusiveArch: %{rust_arches}
- rust-gdk-sys
ExclusiveArch: %{rust_arches}
- rust-gdk4
ExclusiveArch: %{rust_arches}
- rust-gdk4-sys
ExclusiveArch: %{rust_arches}
- rust-generic-array
ExclusiveArch: %{rust_arches}
- rust-generic-array0.12
ExclusiveArch: %{rust_arches}
- rust-genetlink
ExclusiveArch: %{rust_arches}
- rust-genmesh
ExclusiveArch: %{rust_arches}
- rust-getch
ExclusiveArch: %{rust_arches}
- rust-gethostname
ExclusiveArch: %{rust_arches}
- rust-getopts
ExclusiveArch: %{rust_arches}
- rust-getrandom
ExclusiveArch: %{rust_arches}
- rust-getrandom0.1
ExclusiveArch: %{rust_arches}
- rust-getset
ExclusiveArch: %{rust_arches}
- rust-gettext-rs
ExclusiveArch: %{rust_arches}
- rust-gettext-sys
ExclusiveArch: %{rust_arches}
- rust-gh-emoji
ExclusiveArch: %{rust_arches}
- rust-ghash
ExclusiveArch: %{rust_arches}
- rust-ghost
ExclusiveArch: %{rust_arches}
- rust-gif
ExclusiveArch: %{rust_arches}
- rust-gimli
ExclusiveArch: %{rust_arches}
- rust-gio
ExclusiveArch: %{rust_arches}
- rust-gio-sys
ExclusiveArch: %{rust_arches}
- rust-gir-format-check
ExclusiveArch: %{rust_arches}
- rust-git-delta
ExclusiveArch: %{rust_arches}
- rust-git-version
ExclusiveArch: %{rust_arches}
- rust-git-version-macro
ExclusiveArch: %{rust_arches}
- rust-git2
ExclusiveArch: %{rust_arches}
- rust-git2-curl
ExclusiveArch: %{rust_arches}
- rust-gitui
ExclusiveArch: %{rust_arches}
- rust-gl_generator
ExclusiveArch: %{rust_arches}
- rust-glam
ExclusiveArch: %{rust_arches}
- rust-glib
ExclusiveArch: %{rust_arches}
- rust-glib-macros
ExclusiveArch: %{rust_arches}
- rust-glib-sys
ExclusiveArch: %{rust_arches}
- rust-glob
ExclusiveArch: %{rust_arches}
- rust-globset
ExclusiveArch: %{rust_arches}
- rust-globwalk
ExclusiveArch: %{rust_arches}
- rust-glutin
ExclusiveArch: %{rust_arches}
- rust-glutin_egl_sys
ExclusiveArch: %{rust_arches}
- rust-glutin_glx_sys
ExclusiveArch: %{rust_arches}
- rust-glyph_brush_layout
ExclusiveArch: %{rust_arches}
- rust-gobject-sys
ExclusiveArch: %{rust_arches}
- rust-goblin
ExclusiveArch: %{rust_arches}
- rust-gptman
ExclusiveArch: %{rust_arches}
- rust-graphene-rs
ExclusiveArch: %{rust_arches}
- rust-graphene-sys
ExclusiveArch: %{rust_arches}
- rust-greetd_ipc
ExclusiveArch: %{rust_arches}
- rust-grep
ExclusiveArch: %{rust_arches}
- rust-grep-cli
ExclusiveArch: %{rust_arches}
- rust-grep-matcher
ExclusiveArch: %{rust_arches}
- rust-grep-pcre2
ExclusiveArch: %{rust_arches}
- rust-grep-printer
ExclusiveArch: %{rust_arches}
- rust-grep-regex
ExclusiveArch: %{rust_arches}
- rust-grep-searcher
ExclusiveArch: %{rust_arches}
- rust-groupable
ExclusiveArch: %{rust_arches}
- rust-gsk4
ExclusiveArch: %{rust_arches}
- rust-gsk4-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer
ExclusiveArch: %{rust_arches}
- rust-gstreamer-audio
ExclusiveArch: %{rust_arches}
- rust-gstreamer-audio-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-base
ExclusiveArch: %{rust_arches}
- rust-gstreamer-base-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-editing-services
ExclusiveArch: %{rust_arches}
- rust-gstreamer-editing-services-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-pbutils
ExclusiveArch: %{rust_arches}
- rust-gstreamer-pbutils-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-player
ExclusiveArch: %{rust_arches}
- rust-gstreamer-player-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-video
ExclusiveArch: %{rust_arches}
- rust-gstreamer-video-sys
ExclusiveArch: %{rust_arches}
- rust-gtk
ExclusiveArch: %{rust_arches}
- rust-gtk-sys
ExclusiveArch: %{rust_arches}
- rust-gtk3-macros
ExclusiveArch: %{rust_arches}
- rust-gtk4
ExclusiveArch: %{rust_arches}
- rust-gtk4-macros
ExclusiveArch: %{rust_arches}
- rust-gtk4-sys
ExclusiveArch: %{rust_arches}
- rust-gzip-header
ExclusiveArch: %{rust_arches}
- rust-h2
ExclusiveArch: %{rust_arches}
- rust-h2_0.2
ExclusiveArch: %{rust_arches}
- rust-half
ExclusiveArch: %{rust_arches}
- rust-hamcrest2
ExclusiveArch: %{rust_arches}
- rust-handlebars
ExclusiveArch: %{rust_arches}
- rust-hashbrown
ExclusiveArch: %{rust_arches}
- rust-hashbrown0.9
ExclusiveArch: %{rust_arches}
- rust-hashlink
ExclusiveArch: %{rust_arches}
- rust-headers
ExclusiveArch: %{rust_arches}
- rust-headers-core
ExclusiveArch: %{rust_arches}
- rust-headers-derive
ExclusiveArch: %{rust_arches}
- rust-heapsize
ExclusiveArch: %{rust_arches}
- rust-heatseeker
ExclusiveArch: %{rust_arches}
- rust-heck
ExclusiveArch: %{rust_arches}
- rust-heck0.3
ExclusiveArch: %{rust_arches}
- rust-helvum
ExclusiveArch: %{rust_arches}
- rust-hex
ExclusiveArch: %{rust_arches}
- rust-hex-literal
ExclusiveArch: %{rust_arches}
- rust-hex-literal-impl
ExclusiveArch: %{rust_arches}
- rust-hex-literal0.2
ExclusiveArch: %{rust_arches}
- rust-hexyl
ExclusiveArch: %{rust_arches}
- rust-hidapi
ExclusiveArch: %{rust_arches}
- rust-hkdf
ExclusiveArch: %{rust_arches}
- rust-hkdf0.11
ExclusiveArch: %{rust_arches}
- rust-hmac
ExclusiveArch: %{rust_arches}
- rust-hmac0.11
ExclusiveArch: %{rust_arches}
- rust-home
ExclusiveArch: %{rust_arches}
- rust-horrorshow
ExclusiveArch: %{rust_arches}
- rust-hostname
ExclusiveArch: %{rust_arches}
- rust-hostname-validator
ExclusiveArch: %{rust_arches}
- rust-hound
ExclusiveArch: %{rust_arches}
- rust-html-escape
ExclusiveArch: %{rust_arches}
- rust-html2pango
ExclusiveArch: %{rust_arches}
- rust-html5ever
ExclusiveArch: %{rust_arches}
- rust-http
ExclusiveArch: %{rust_arches}
- rust-http-body
ExclusiveArch: %{rust_arches}
- rust-http-body0.3
ExclusiveArch: %{rust_arches}
- rust-http0.1
ExclusiveArch: %{rust_arches}
- rust-httparse
ExclusiveArch: %{rust_arches}
- rust-httpdate
ExclusiveArch: %{rust_arches}
- rust-human-panic
ExclusiveArch: %{rust_arches}
- rust-human-sort
ExclusiveArch: %{rust_arches}
- rust-humansize
ExclusiveArch: %{rust_arches}
- rust-humantime
ExclusiveArch: %{rust_arches}
- rust-humantime-serde
ExclusiveArch: %{rust_arches}
- rust-humantime1
ExclusiveArch: %{rust_arches}
- rust-hyper
ExclusiveArch: %{rust_arches}
- rust-hyper-native-tls
ExclusiveArch: %{rust_arches}
- rust-hyper-rustls
ExclusiveArch: %{rust_arches}
- rust-hyper-staticfile
ExclusiveArch: %{rust_arches}
- rust-hyper-tls
ExclusiveArch: %{rust_arches}
- rust-hyper-tls0.4
ExclusiveArch: %{rust_arches}
- rust-hyper0.10
ExclusiveArch: %{rust_arches}
- rust-hyper0.13
ExclusiveArch: %{rust_arches}
- rust-hyperfine
ExclusiveArch: %{rust_arches}
- rust-i18n-config
ExclusiveArch: %{rust_arches}
- rust-i18n-embed
ExclusiveArch: %{rust_arches}
- rust-i18n-embed-fl
ExclusiveArch: %{rust_arches}
- rust-i18n-embed-impl
ExclusiveArch: %{rust_arches}
- rust-i3ipc
ExclusiveArch: %{rust_arches}
- rust-iai
ExclusiveArch: %{rust_arches}
- rust-id-arena
ExclusiveArch: %{rust_arches}
- rust-ident_case
ExclusiveArch: %{rust_arches}
- rust-idna
ExclusiveArch: %{rust_arches}
- rust-idna0.1
ExclusiveArch: %{rust_arches}
- rust-ignition-config
ExclusiveArch: %{rust_arches}
- rust-ignore
ExclusiveArch: %{rust_arches}
- rust-im-rc
ExclusiveArch: %{rust_arches}
- rust-image
ExclusiveArch: %{rust_arches}
- rust-image-roll
ExclusiveArch: %{rust_arches}
- rust-imgref
ExclusiveArch: %{rust_arches}
- rust-imgui
ExclusiveArch: %{rust_arches}
- rust-imgui-sys
ExclusiveArch: %{rust_arches}
- rust-imgui-winit-support
ExclusiveArch: %{rust_arches}
- rust-indexmap
ExclusiveArch: %{rust_arches}
- rust-indicatif
ExclusiveArch: %{rust_arches}
- rust-indicatif0.15
ExclusiveArch: %{rust_arches}
- rust-indoc
ExclusiveArch: %{rust_arches}
- rust-infer
ExclusiveArch: %{rust_arches}
- rust-inferno
ExclusiveArch: %{rust_arches}
- rust-inflate
ExclusiveArch: %{rust_arches}
- rust-inotify
ExclusiveArch: %{rust_arches}
- rust-inotify-sys
ExclusiveArch: %{rust_arches}
- rust-inout
ExclusiveArch: %{rust_arches}
- rust-input_buffer
ExclusiveArch: %{rust_arches}
- rust-insta
ExclusiveArch: %{rust_arches}
- rust-instant
ExclusiveArch: %{rust_arches}
- rust-interpolate_name
ExclusiveArch: %{rust_arches}
- rust-intervaltree
ExclusiveArch: %{rust_arches}
- rust-intl-memoizer
ExclusiveArch: %{rust_arches}
- rust-intl_pluralrules
ExclusiveArch: %{rust_arches}
- rust-invalidstring
ExclusiveArch: %{rust_arches}
- rust-inventory
ExclusiveArch: %{rust_arches}
- rust-inventory-impl
ExclusiveArch: %{rust_arches}
- rust-io-extras
ExclusiveArch: %{rust_arches}
- rust-io-lifetimes
ExclusiveArch: %{rust_arches}
- rust-ioctl-rs
ExclusiveArch: %{rust_arches}
- rust-iocuddle
ExclusiveArch: %{rust_arches}
- rust-iovec
ExclusiveArch: %{rust_arches}
- rust-ipnet
ExclusiveArch: %{rust_arches}
- rust-ipnetwork
ExclusiveArch: %{rust_arches}
- rust-ipnetwork0.17
ExclusiveArch: %{rust_arches}
- rust-iptables
ExclusiveArch: %{rust_arches}
- rust-iron
ExclusiveArch: %{rust_arches}
- rust-is_debug
ExclusiveArch: %{rust_arches}
- rust-iso8601
ExclusiveArch: %{rust_arches}
- rust-iter-read
ExclusiveArch: %{rust_arches}
- rust-itertools
ExclusiveArch: %{rust_arches}
- rust-itertools-num
ExclusiveArch: %{rust_arches}
- rust-itertools0.8
ExclusiveArch: %{rust_arches}
- rust-itertools0.9
ExclusiveArch: %{rust_arches}
- rust-itoa
ExclusiveArch: %{rust_arches}
- rust-itoa0.4
ExclusiveArch: %{rust_arches}
- rust-ivf
ExclusiveArch: %{rust_arches}
- rust-jetscii
ExclusiveArch: %{rust_arches}
- rust-jieba-rs
ExclusiveArch: %{rust_arches}
- rust-jobserver
ExclusiveArch: %{rust_arches}
- rust-josekit
ExclusiveArch: %{rust_arches}
- rust-jpeg-decoder
ExclusiveArch: %{rust_arches}
- rust-jql
ExclusiveArch: %{rust_arches}
- rust-js-sys
ExclusiveArch: %{rust_arches}
- rust-js_int
ExclusiveArch: %{rust_arches}
- rust-json
ExclusiveArch: %{rust_arches}
- rust-json_value_merge
ExclusiveArch: %{rust_arches}
- rust-just
ExclusiveArch: %{rust_arches}
- rust-jwalk
ExclusiveArch: %{rust_arches}
- rust-k9
ExclusiveArch: %{rust_arches}
- rust-keccak
ExclusiveArch: %{rust_arches}
- rust-khronos_api
ExclusiveArch: %{rust_arches}
- rust-kstring
ExclusiveArch: %{rust_arches}
- rust-kurbo
ExclusiveArch: %{rust_arches}
- rust-kv-log-macro
ExclusiveArch: %{rust_arches}
- rust-lab
ExclusiveArch: %{rust_arches}
- rust-lalrpop
ExclusiveArch: %{rust_arches}
- rust-lalrpop-util
ExclusiveArch: %{rust_arches}
- rust-language-tags
ExclusiveArch: %{rust_arches}
- rust-lazy-init
ExclusiveArch: %{rust_arches}
- rust-lazy_static
ExclusiveArch: %{rust_arches}
- rust-lazycell
ExclusiveArch: %{rust_arches}
- rust-leb128
ExclusiveArch: %{rust_arches}
- rust-lewton
ExclusiveArch: %{rust_arches}
- rust-lexical-core
ExclusiveArch: %{rust_arches}
- rust-lexiclean
ExclusiveArch: %{rust_arches}
- rust-libblkid-rs
ExclusiveArch: %{rust_arches}
- rust-libblkid-rs-sys
ExclusiveArch: %{rust_arches}
- rust-libbpf-cargo
ExclusiveArch: %{rust_arches}
- rust-libbpf-rs
ExclusiveArch: %{rust_arches}
- rust-libbpf-sys
ExclusiveArch: %{rust_arches}
- rust-libc
ExclusiveArch: %{rust_arches}
- rust-libcryptsetup-rs
ExclusiveArch: %{rust_arches}
- rust-libcryptsetup-rs-sys
ExclusiveArch: %{rust_arches}
- rust-libdbus-sys
ExclusiveArch: %{rust_arches}
- rust-libdeflate-sys
ExclusiveArch: %{rust_arches}
- rust-libdeflater
ExclusiveArch: %{rust_arches}
- rust-libflate
ExclusiveArch: %{rust_arches}
- rust-libflate_lz77
ExclusiveArch: %{rust_arches}
- rust-libgit2-sys
ExclusiveArch: %{rust_arches}
- rust-libhandy
ExclusiveArch: %{rust_arches}
- rust-libhandy-sys
ExclusiveArch: %{rust_arches}
- rust-libloading
ExclusiveArch: %{rust_arches}
- rust-libloading0.6
ExclusiveArch: %{rust_arches}
- rust-libm
ExclusiveArch: %{rust_arches}
- rust-libmount
ExclusiveArch: %{rust_arches}
- rust-libnotcurses-sys
ExclusiveArch: %{rust_arches}
- rust-liboverdrop
ExclusiveArch: %{rust_arches}
- rust-libpulse-binding
ExclusiveArch: %{rust_arches}
- rust-libpulse-sys
ExclusiveArch: %{rust_arches}
- rust-libseccomp-sys
ExclusiveArch: %{rust_arches}
- rust-libslirp
ExclusiveArch: %{rust_arches}
- rust-libslirp-sys
ExclusiveArch: %{rust_arches}
- rust-libspa
ExclusiveArch: %{rust_arches}
- rust-libspa-sys
ExclusiveArch: %{rust_arches}
- rust-libsqlite3-sys
ExclusiveArch: %{rust_arches}
- rust-libssh2-sys
ExclusiveArch: %{rust_arches}
- rust-libsystemd
ExclusiveArch: %{rust_arches}
- rust-libsystemd-sys
ExclusiveArch: %{rust_arches}
- rust-libudev
ExclusiveArch: %{rust_arches}
- rust-libudev-sys
ExclusiveArch: %{rust_arches}
- rust-libwebp
ExclusiveArch: %{rust_arches}
- rust-libwebp-sys2
ExclusiveArch: %{rust_arches}
- rust-libxml
ExclusiveArch: %{rust_arches}
- rust-libz-sys
ExclusiveArch: %{rust_arches}
- rust-line-wrap
ExclusiveArch: %{rust_arches}
- rust-link-cplusplus
ExclusiveArch: %{rust_arches}
- rust-linked-hash-map
ExclusiveArch: %{rust_arches}
- rust-linkify
ExclusiveArch: %{rust_arches}
- rust-linreg
ExclusiveArch: %{rust_arches}
- rust-linux-raw-sys
ExclusiveArch: %{rust_arches}
- rust-linux_proc
ExclusiveArch: %{rust_arches}
- rust-lipsum
ExclusiveArch: %{rust_arches}
- rust-listenfd
ExclusiveArch: %{rust_arches}
- rust-lmdb
ExclusiveArch: %{rust_arches}
- rust-lmdb-sys
ExclusiveArch: %{rust_arches}
- rust-locale
ExclusiveArch: %{rust_arches}
- rust-locale_config
ExclusiveArch: %{rust_arches}
- rust-lock_api
ExclusiveArch: %{rust_arches}
- rust-lockfree
ExclusiveArch: %{rust_arches}
- rust-log
ExclusiveArch: %{rust_arches}
- rust-log-mdc
ExclusiveArch: %{rust_arches}
- rust-log-panics
ExclusiveArch: %{rust_arches}
- rust-log0.3
ExclusiveArch: %{rust_arches}
- rust-log4rs
ExclusiveArch: %{rust_arches}
- rust-loggerv
ExclusiveArch: %{rust_arches}
- rust-loopdev
ExclusiveArch: %{rust_arches}
- rust-lru-cache
ExclusiveArch: %{rust_arches}
- rust-lscolors
ExclusiveArch: %{rust_arches}
- rust-lsd
ExclusiveArch: %{rust_arches}
- rust-lzma-sys
ExclusiveArch: %{rust_arches}
- rust-lzw
ExclusiveArch: %{rust_arches}
- rust-mac
ExclusiveArch: %{rust_arches}
- rust-mac_address
ExclusiveArch: %{rust_arches}
- rust-macro-attr
ExclusiveArch: %{rust_arches}
- rust-macroquad_macro
ExclusiveArch: %{rust_arches}
- rust-madvr_parse
ExclusiveArch: %{rust_arches}
- rust-magic-crypt
ExclusiveArch: %{rust_arches}
- rust-maildir
ExclusiveArch: %{rust_arches}
- rust-mailparse
ExclusiveArch: %{rust_arches}
- rust-man
ExclusiveArch: %{rust_arches}
- rust-maplit
ExclusiveArch: %{rust_arches}
- rust-markup5ever
ExclusiveArch: %{rust_arches}
- rust-markup5ever_rcdom
ExclusiveArch: %{rust_arches}
- rust-match_cfg
ExclusiveArch: %{rust_arches}
- rust-matches
ExclusiveArch: %{rust_arches}
- rust-matrixcompare
ExclusiveArch: %{rust_arches}
- rust-matrixcompare-core
ExclusiveArch: %{rust_arches}
- rust-matrixcompare-mock
ExclusiveArch: %{rust_arches}
- rust-matrixmultiply
ExclusiveArch: %{rust_arches}
- rust-maxminddb
ExclusiveArch: %{rust_arches}
- rust-maybe-owned
ExclusiveArch: %{rust_arches}
- rust-maybe-uninit
ExclusiveArch: %{rust_arches}
- rust-mbox
ExclusiveArch: %{rust_arches}
- rust-mbrman
ExclusiveArch: %{rust_arches}
- rust-md-5
ExclusiveArch: %{rust_arches}
- rust-md-5_0.9
ExclusiveArch: %{rust_arches}
- rust-md5
ExclusiveArch: %{rust_arches}
- rust-mdl
ExclusiveArch: %{rust_arches}
- rust-memchr
ExclusiveArch: %{rust_arches}
- rust-memmap
ExclusiveArch: %{rust_arches}
- rust-memmap2
ExclusiveArch: %{rust_arches}
- rust-memmap2_0.1
ExclusiveArch: %{rust_arches}
- rust-memmem
ExclusiveArch: %{rust_arches}
- rust-memoffset
ExclusiveArch: %{rust_arches}
- rust-memoffset0.5
ExclusiveArch: %{rust_arches}
- rust-memsec
ExclusiveArch: %{rust_arches}
- rust-migrations_internals
ExclusiveArch: %{rust_arches}
- rust-migrations_macros
ExclusiveArch: %{rust_arches}
- rust-mime
ExclusiveArch: %{rust_arches}
- rust-mime0.2
ExclusiveArch: %{rust_arches}
- rust-mime_guess
ExclusiveArch: %{rust_arches}
- rust-mime_guess1
ExclusiveArch: %{rust_arches}
- rust-miniflux_api
ExclusiveArch: %{rust_arches}
- rust-minify-html
ExclusiveArch: %{rust_arches}
- rust-minimad
ExclusiveArch: %{rust_arches}
- rust-minimal-lexical
ExclusiveArch: %{rust_arches}
- rust-minimp3
ExclusiveArch: %{rust_arches}
- rust-minimp3-sys
ExclusiveArch: %{rust_arches}
- rust-miniz-sys
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide0.3
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide_c_api
ExclusiveArch: %{rust_arches}
- rust-mint
ExclusiveArch: %{rust_arches}
- rust-mio
ExclusiveArch: %{rust_arches}
- rust-mio-extras
ExclusiveArch: %{rust_arches}
- rust-mio-uds
ExclusiveArch: %{rust_arches}
- rust-mio0.6
ExclusiveArch: %{rust_arches}
- rust-mio0.7
ExclusiveArch: %{rust_arches}
- rust-mktemp
ExclusiveArch: %{rust_arches}
- rust-mnt
ExclusiveArch: %{rust_arches}
- rust-mockall
ExclusiveArch: %{rust_arches}
- rust-mockall_derive
ExclusiveArch: %{rust_arches}
- rust-mockall_double
ExclusiveArch: %{rust_arches}
- rust-mockito
ExclusiveArch: %{rust_arches}
- rust-modifier
ExclusiveArch: %{rust_arches}
- rust-more-asserts
ExclusiveArch: %{rust_arches}
- rust-mp4parse
ExclusiveArch: %{rust_arches}
- rust-msgbox
ExclusiveArch: %{rust_arches}
- rust-muldiv
ExclusiveArch: %{rust_arches}
- rust-multimap
ExclusiveArch: %{rust_arches}
- rust-multipart
ExclusiveArch: %{rust_arches}
- rust-mustache
ExclusiveArch: %{rust_arches}
- rust-nalgebra
ExclusiveArch: %{rust_arches}
- rust-nalgebra-macros
ExclusiveArch: %{rust_arches}
- rust-nasm-rs
ExclusiveArch: %{rust_arches}
- rust-native-tls
ExclusiveArch: %{rust_arches}
- rust-natord
ExclusiveArch: %{rust_arches}
- rust-navi
ExclusiveArch: %{rust_arches}
- rust-nb-connect
ExclusiveArch: %{rust_arches}
- rust-ncurses
ExclusiveArch: %{rust_arches}
- rust-net2
ExclusiveArch: %{rust_arches}
- rust-netlink-packet-core
ExclusiveArch: %{rust_arches}
- rust-netlink-packet-generic
ExclusiveArch: %{rust_arches}
- rust-netlink-packet-route
ExclusiveArch: %{rust_arches}
- rust-netlink-packet-utils
ExclusiveArch: %{rust_arches}
- rust-netlink-proto
ExclusiveArch: %{rust_arches}
- rust-netlink-sys
ExclusiveArch: %{rust_arches}
- rust-netmap_sys
ExclusiveArch: %{rust_arches}
- rust-nettle
ExclusiveArch: %{rust_arches}
- rust-nettle-sys
ExclusiveArch: %{rust_arches}
- rust-new_debug_unreachable
ExclusiveArch: %{rust_arches}
- rust-news-flash
ExclusiveArch: %{rust_arches}
- rust-newsblur_api
ExclusiveArch: %{rust_arches}
- rust-newtype_derive
ExclusiveArch: %{rust_arches}
- rust-nibble_vec
ExclusiveArch: %{rust_arches}
- rust-nix
ExclusiveArch: %{rust_arches}
- rust-nix0.14
ExclusiveArch: %{rust_arches}
- rust-nix0.17
ExclusiveArch: %{rust_arches}
- rust-nix0.18
ExclusiveArch: %{rust_arches}
- rust-nix0.20
ExclusiveArch: %{rust_arches}
- rust-nix0.22
ExclusiveArch: %{rust_arches}
- rust-no-panic
ExclusiveArch: %{rust_arches}
- rust-nodrop
ExclusiveArch: %{rust_arches}
- rust-nohash-hasher
ExclusiveArch: %{rust_arches}
- rust-nom
ExclusiveArch: %{rust_arches}
- rust-nom4
ExclusiveArch: %{rust_arches}
- rust-nom5
ExclusiveArch: %{rust_arches}
- rust-nom6
ExclusiveArch: %{rust_arches}
- rust-noop_proc_macro
ExclusiveArch: %{rust_arches}
- rust-normalize-line-endings
ExclusiveArch: %{rust_arches}
- rust-notify
ExclusiveArch: %{rust_arches}
- rust-notify-rust
ExclusiveArch: %{rust_arches}
- rust-num
ExclusiveArch: %{rust_arches}
- rust-num-bigint
ExclusiveArch: %{rust_arches}
- rust-num-bigint-dig
ExclusiveArch: %{rust_arches}
- rust-num-bigint0.3
ExclusiveArch: %{rust_arches}
- rust-num-complex
ExclusiveArch: %{rust_arches}
- rust-num-complex0.3
ExclusiveArch: %{rust_arches}
- rust-num-derive
ExclusiveArch: %{rust_arches}
- rust-num-format
ExclusiveArch: %{rust_arches}
- rust-num-integer
ExclusiveArch: %{rust_arches}
- rust-num-iter
ExclusiveArch: %{rust_arches}
- rust-num-rational
ExclusiveArch: %{rust_arches}
- rust-num-rational0.3
ExclusiveArch: %{rust_arches}
- rust-num-traits
ExclusiveArch: %{rust_arches}
- rust-num-traits0.1
ExclusiveArch: %{rust_arches}
- rust-num0.3
ExclusiveArch: %{rust_arches}
- rust-num_cpus
ExclusiveArch: %{rust_arches}
- rust-num_enum
ExclusiveArch: %{rust_arches}
- rust-num_enum_derive
ExclusiveArch: %{rust_arches}
- rust-number_prefix
ExclusiveArch: %{rust_arches}
- rust-numtoa
ExclusiveArch: %{rust_arches}
- rust-oauth2
ExclusiveArch: %{rust_arches}
- rust-obfstr
ExclusiveArch: %{rust_arches}
- rust-obj
ExclusiveArch: %{rust_arches}
- rust-object
ExclusiveArch: %{rust_arches}
- rust-odds
ExclusiveArch: %{rust_arches}
- rust-ogg
ExclusiveArch: %{rust_arches}
- rust-oid
ExclusiveArch: %{rust_arches}
- rust-once_cell
ExclusiveArch: %{rust_arches}
- rust-onig
ExclusiveArch: %{rust_arches}
- rust-onig_sys
ExclusiveArch: %{rust_arches}
- rust-oorandom
ExclusiveArch: %{rust_arches}
- rust-opaque-debug
ExclusiveArch: %{rust_arches}
- rust-open
ExclusiveArch: %{rust_arches}
- rust-open1
ExclusiveArch: %{rust_arches}
- rust-openat
ExclusiveArch: %{rust_arches}
- rust-openat-ext
ExclusiveArch: %{rust_arches}
- rust-opener
ExclusiveArch: %{rust_arches}
- rust-openssh-keys
ExclusiveArch: %{rust_arches}
- rust-openssl
ExclusiveArch: %{rust_arches}
- rust-openssl-probe
ExclusiveArch: %{rust_arches}
- rust-openssl-sys
ExclusiveArch: %{rust_arches}
- rust-opml
ExclusiveArch: %{rust_arches}
- rust-option-operations
ExclusiveArch: %{rust_arches}
- rust-ord_subset
ExclusiveArch: %{rust_arches}
- rust-ordered-float
ExclusiveArch: %{rust_arches}
- rust-ordered-multimap
ExclusiveArch: %{rust_arches}
- rust-os-release
ExclusiveArch: %{rust_arches}
- rust-os_info
ExclusiveArch: %{rust_arches}
- rust-os_pipe
ExclusiveArch: %{rust_arches}
- rust-os_pipe0.9
ExclusiveArch: %{rust_arches}
- rust-os_str_bytes
ExclusiveArch: %{rust_arches}
- rust-os_type
ExclusiveArch: %{rust_arches}
- rust-osmesa-sys
ExclusiveArch: %{rust_arches}
- rust-osstrtools
ExclusiveArch: %{rust_arches}
- rust-ouroboros
ExclusiveArch: %{rust_arches}
- rust-ouroboros_macro
ExclusiveArch: %{rust_arches}
- rust-overload
ExclusiveArch: %{rust_arches}
- rust-owned-alloc
ExclusiveArch: %{rust_arches}
- rust-owned_ttf_parser
ExclusiveArch: %{rust_arches}
- rust-owning_ref
ExclusiveArch: %{rust_arches}
- rust-oxipng
ExclusiveArch: %{rust_arches}
- rust-packaging
ExclusiveArch: %{rust_arches}
- rust-pad
ExclusiveArch: %{rust_arches}
- rust-page_size
ExclusiveArch: %{rust_arches}
- rust-pager
ExclusiveArch: %{rust_arches}
- rust-palette
ExclusiveArch: %{rust_arches}
- rust-palette_derive
ExclusiveArch: %{rust_arches}
- rust-pam
ExclusiveArch: %{rust_arches}
- rust-pam-client
ExclusiveArch: %{rust_arches}
- rust-pam-sys
ExclusiveArch: %{rust_arches}
- rust-pancurses
ExclusiveArch: %{rust_arches}
- rust-pango
ExclusiveArch: %{rust_arches}
- rust-pango-sys
ExclusiveArch: %{rust_arches}
- rust-pangocairo
ExclusiveArch: %{rust_arches}
- rust-pangocairo-sys
ExclusiveArch: %{rust_arches}
- rust-paris
ExclusiveArch: %{rust_arches}
- rust-parity-wasm
ExclusiveArch: %{rust_arches}
- rust-parking
ExclusiveArch: %{rust_arches}
- rust-parking_lot
ExclusiveArch: %{rust_arches}
- rust-parking_lot_core
ExclusiveArch: %{rust_arches}
- rust-parse-zoneinfo
ExclusiveArch: %{rust_arches}
- rust-parse_cfg
ExclusiveArch: %{rust_arches}
- rust-parsec-client
ExclusiveArch: %{rust_arches}
- rust-parsec-interface
ExclusiveArch: %{rust_arches}
- rust-partial-io
ExclusiveArch: %{rust_arches}
- rust-partition-identity
ExclusiveArch: %{rust_arches}
- rust-password-hash
ExclusiveArch: %{rust_arches}
- rust-paste
ExclusiveArch: %{rust_arches}
- rust-path-absolutize
ExclusiveArch: %{rust_arches}
- rust-path-dedot
ExclusiveArch: %{rust_arches}
- rust-path-slash
ExclusiveArch: %{rust_arches}
- rust-pathdiff
ExclusiveArch: %{rust_arches}
- rust-pathfinder_geometry
ExclusiveArch: %{rust_arches}
- rust-pathfinder_simd
ExclusiveArch: %{rust_arches}
- rust-pbkdf2
ExclusiveArch: %{rust_arches}
- rust-pbr
ExclusiveArch: %{rust_arches}
- rust-pcap
ExclusiveArch: %{rust_arches}
- rust-pcre2
ExclusiveArch: %{rust_arches}
- rust-pcre2-sys
ExclusiveArch: %{rust_arches}
- rust-peeking_take_while
ExclusiveArch: %{rust_arches}
- rust-peg
ExclusiveArch: %{rust_arches}
- rust-peg-macros
ExclusiveArch: %{rust_arches}
- rust-peg-runtime
ExclusiveArch: %{rust_arches}
- rust-peg0.5
ExclusiveArch: %{rust_arches}
- rust-pem
ExclusiveArch: %{rust_arches}
- rust-pem-rfc7468
ExclusiveArch: %{rust_arches}
- rust-pem0.8
ExclusiveArch: %{rust_arches}
- rust-percent-encoding
ExclusiveArch: %{rust_arches}
- rust-percent-encoding1
ExclusiveArch: %{rust_arches}
- rust-peresil
ExclusiveArch: %{rust_arches}
- rust-permutate
ExclusiveArch: %{rust_arches}
- rust-permutohedron
ExclusiveArch: %{rust_arches}
- rust-pest
ExclusiveArch: %{rust_arches}
- rust-pest_derive
ExclusiveArch: %{rust_arches}
- rust-pest_generator
ExclusiveArch: %{rust_arches}
- rust-pest_meta
ExclusiveArch: %{rust_arches}
- rust-petgraph
ExclusiveArch: %{rust_arches}
- rust-phf
ExclusiveArch: %{rust_arches}
- rust-phf0.7
ExclusiveArch: %{rust_arches}
- rust-phf0.8
ExclusiveArch: %{rust_arches}
- rust-phf_codegen
ExclusiveArch: %{rust_arches}
- rust-phf_codegen0.7
ExclusiveArch: %{rust_arches}
- rust-phf_generator
ExclusiveArch: %{rust_arches}
- rust-phf_generator0.7
ExclusiveArch: %{rust_arches}
- rust-phf_generator0.8
ExclusiveArch: %{rust_arches}
- rust-phf_macros
ExclusiveArch: %{rust_arches}
- rust-phf_macros0.7
ExclusiveArch: %{rust_arches}
- rust-phf_macros0.8
ExclusiveArch: %{rust_arches}
- rust-phf_shared
ExclusiveArch: %{rust_arches}
- rust-phf_shared0.7
ExclusiveArch: %{rust_arches}
- rust-phf_shared0.8
ExclusiveArch: %{rust_arches}
- rust-picky-asn1
ExclusiveArch: %{rust_arches}
- rust-picky-asn1-der
ExclusiveArch: %{rust_arches}
- rust-picky-asn1-x509
ExclusiveArch: %{rust_arches}
- rust-pico-args
ExclusiveArch: %{rust_arches}
- rust-pid
ExclusiveArch: %{rust_arches}
- rust-pin-project
ExclusiveArch: %{rust_arches}
- rust-pin-project-internal
ExclusiveArch: %{rust_arches}
- rust-pin-project-internal0.4
ExclusiveArch: %{rust_arches}
- rust-pin-project-lite
ExclusiveArch: %{rust_arches}
- rust-pin-project-lite0.1
ExclusiveArch: %{rust_arches}
- rust-pin-project0.4
ExclusiveArch: %{rust_arches}
- rust-pin-utils
ExclusiveArch: %{rust_arches}
- rust-pipe
ExclusiveArch: %{rust_arches}
- rust-piper
ExclusiveArch: %{rust_arches}
- rust-pipewire
ExclusiveArch: %{rust_arches}
- rust-pipewire-sys
ExclusiveArch: %{rust_arches}
- rust-piston-float
ExclusiveArch: %{rust_arches}
- rust-piston-graphics_api_version
ExclusiveArch: %{rust_arches}
- rust-piston-viewport
ExclusiveArch: %{rust_arches}
- rust-pistoncore-input
ExclusiveArch: %{rust_arches}
- rust-pkcs1
ExclusiveArch: %{rust_arches}
- rust-pkcs11
ExclusiveArch: %{rust_arches}
- rust-pkcs5
ExclusiveArch: %{rust_arches}
- rust-pkcs8
ExclusiveArch: %{rust_arches}
- rust-pkg-config
ExclusiveArch: %{rust_arches}
- rust-plain
ExclusiveArch: %{rust_arches}
- rust-pleaser
ExclusiveArch: %{rust_arches}
- rust-plist
ExclusiveArch: %{rust_arches}
- rust-plotlib
ExclusiveArch: %{rust_arches}
- rust-plotters
ExclusiveArch: %{rust_arches}
- rust-plotters-backend
ExclusiveArch: %{rust_arches}
- rust-plotters-bitmap
ExclusiveArch: %{rust_arches}
- rust-plotters-svg
ExclusiveArch: %{rust_arches}
- rust-plugin
ExclusiveArch: %{rust_arches}
- rust-pnet_base
ExclusiveArch: %{rust_arches}
- rust-pnet_datalink
ExclusiveArch: %{rust_arches}
- rust-pnet_sys
ExclusiveArch: %{rust_arches}
- rust-png
ExclusiveArch: %{rust_arches}
- rust-png0.16
ExclusiveArch: %{rust_arches}
- rust-podio
ExclusiveArch: %{rust_arches}
- rust-polling
ExclusiveArch: %{rust_arches}
- rust-polyval
ExclusiveArch: %{rust_arches}
- rust-pom
ExclusiveArch: %{rust_arches}
- rust-pommes
ExclusiveArch: %{rust_arches}
- rust-ppv-lite86
ExclusiveArch: %{rust_arches}
- rust-pq-sys
ExclusiveArch: %{rust_arches}
- rust-precomputed-hash
ExclusiveArch: %{rust_arches}
- rust-predicates
ExclusiveArch: %{rust_arches}
- rust-predicates-core
ExclusiveArch: %{rust_arches}
- rust-predicates-tree
ExclusiveArch: %{rust_arches}
- rust-predicates1
ExclusiveArch: %{rust_arches}
- rust-pretty
ExclusiveArch: %{rust_arches}
- rust-pretty-git-prompt
ExclusiveArch: %{rust_arches}
- rust-pretty-hex
ExclusiveArch: %{rust_arches}
- rust-pretty_assertions
ExclusiveArch: %{rust_arches}
- rust-pretty_assertions0.6
ExclusiveArch: %{rust_arches}
- rust-pretty_assertions0.7
ExclusiveArch: %{rust_arches}
- rust-pretty_env_logger
ExclusiveArch: %{rust_arches}
- rust-prettytable-rs
ExclusiveArch: %{rust_arches}
- rust-proc-macro-crate
ExclusiveArch: %{rust_arches}
- rust-proc-macro-crate0.1
ExclusiveArch: %{rust_arches}
- rust-proc-macro-error
ExclusiveArch: %{rust_arches}
- rust-proc-macro-error-attr
ExclusiveArch: %{rust_arches}
- rust-proc-macro-hack
ExclusiveArch: %{rust_arches}
- rust-proc-macro2
ExclusiveArch: %{rust_arches}
- rust-proc-macro2-0.4
ExclusiveArch: %{rust_arches}
- rust-proc-maps
ExclusiveArch: %{rust_arches}
- rust-proc-mounts
ExclusiveArch: %{rust_arches}
- rust-proc-quote-impl
ExclusiveArch: %{rust_arches}
- rust-procedural-masquerade
ExclusiveArch: %{rust_arches}
- rust-process_control
ExclusiveArch: %{rust_arches}
- rust-process_path
ExclusiveArch: %{rust_arches}
- rust-procfs
ExclusiveArch: %{rust_arches}
- rust-procs
ExclusiveArch: %{rust_arches}
- rust-progress-streams
ExclusiveArch: %{rust_arches}
- rust-prometheus
ExclusiveArch: %{rust_arches}
- rust-proptest
ExclusiveArch: %{rust_arches}
- rust-proptest-derive
ExclusiveArch: %{rust_arches}
- rust-proptest0.10
ExclusiveArch: %{rust_arches}
- rust-prost
ExclusiveArch: %{rust_arches}
- rust-prost-build
ExclusiveArch: %{rust_arches}
- rust-prost-derive
ExclusiveArch: %{rust_arches}
- rust-prost-types
ExclusiveArch: %{rust_arches}
- rust-protobuf
ExclusiveArch: %{rust_arches}
- rust-protobuf-codegen
ExclusiveArch: %{rust_arches}
- rust-protobuf-codegen-pure
ExclusiveArch: %{rust_arches}
- rust-protoc
ExclusiveArch: %{rust_arches}
- rust-protoc-rust
ExclusiveArch: %{rust_arches}
- rust-psa-crypto
ExclusiveArch: %{rust_arches}
- rust-psa-crypto-sys
ExclusiveArch: %{rust_arches}
- rust-psd
ExclusiveArch: %{rust_arches}
- rust-psl-types
ExclusiveArch: %{rust_arches}
- rust-psm
ExclusiveArch: %{rust_arches}
- rust-ptr_meta
ExclusiveArch: %{rust_arches}
- rust-ptr_meta_derive
ExclusiveArch: %{rust_arches}
- rust-publicsuffix
ExclusiveArch: %{rust_arches}
- rust-publicsuffix1
ExclusiveArch: %{rust_arches}
- rust-pulldown-cmark
ExclusiveArch: %{rust_arches}
- rust-pulse
ExclusiveArch: %{rust_arches}
- rust-pure-rust-locales
ExclusiveArch: %{rust_arches}
- rust-pyo3
ExclusiveArch: %{rust_arches}
- rust-pyo3-build-config
ExclusiveArch: %{rust_arches}
- rust-pyo3-macros
ExclusiveArch: %{rust_arches}
- rust-pyo3-macros-backend
ExclusiveArch: %{rust_arches}
- rust-python-launcher
ExclusiveArch: %{rust_arches}
- rust-python3-sys
ExclusiveArch: %{rust_arches}
- rust-qr2term
ExclusiveArch: %{rust_arches}
- rust-qrcode
ExclusiveArch: %{rust_arches}
- rust-qstring
ExclusiveArch: %{rust_arches}
- rust-quad-rand
ExclusiveArch: %{rust_arches}
- rust-quantiles
ExclusiveArch: %{rust_arches}
- rust-quick-error
ExclusiveArch: %{rust_arches}
- rust-quick-error1
ExclusiveArch: %{rust_arches}
- rust-quick-xml
ExclusiveArch: %{rust_arches}
- rust-quick-xml0.20
ExclusiveArch: %{rust_arches}
- rust-quickcheck
ExclusiveArch: %{rust_arches}
- rust-quickcheck0.6
ExclusiveArch: %{rust_arches}
- rust-quickcheck0.9
ExclusiveArch: %{rust_arches}
- rust-quickcheck_macros
ExclusiveArch: %{rust_arches}
- rust-quickersort
ExclusiveArch: %{rust_arches}
- rust-quicli
ExclusiveArch: %{rust_arches}
- rust-quote
ExclusiveArch: %{rust_arches}
- rust-quote0.3
ExclusiveArch: %{rust_arches}
- rust-quote0.6
ExclusiveArch: %{rust_arches}
- rust-quoted_printable
ExclusiveArch: %{rust_arches}
- rust-r2d2
ExclusiveArch: %{rust_arches}
- rust-radium
ExclusiveArch: %{rust_arches}
- rust-radix64
ExclusiveArch: %{rust_arches}
- rust-radix_trie
ExclusiveArch: %{rust_arches}
- rust-rand
ExclusiveArch: %{rust_arches}
- rust-rand0.4
ExclusiveArch: %{rust_arches}
- rust-rand0.5
ExclusiveArch: %{rust_arches}
- rust-rand0.6
ExclusiveArch: %{rust_arches}
- rust-rand0.7
ExclusiveArch: %{rust_arches}
- rust-rand_chacha
ExclusiveArch: %{rust_arches}
- rust-rand_chacha0.1
ExclusiveArch: %{rust_arches}
- rust-rand_chacha0.2
ExclusiveArch: %{rust_arches}
- rust-rand_core
ExclusiveArch: %{rust_arches}
- rust-rand_core0.3
ExclusiveArch: %{rust_arches}
- rust-rand_core0.4
ExclusiveArch: %{rust_arches}
- rust-rand_core0.5
ExclusiveArch: %{rust_arches}
- rust-rand_distr
ExclusiveArch: %{rust_arches}
- rust-rand_hc
ExclusiveArch: %{rust_arches}
- rust-rand_hc0.1
ExclusiveArch: %{rust_arches}
- rust-rand_isaac
ExclusiveArch: %{rust_arches}
- rust-rand_isaac0.1
ExclusiveArch: %{rust_arches}
- rust-rand_jitter
ExclusiveArch: %{rust_arches}
- rust-rand_jitter0.1
ExclusiveArch: %{rust_arches}
- rust-rand_os
ExclusiveArch: %{rust_arches}
- rust-rand_os0.1
ExclusiveArch: %{rust_arches}
- rust-rand_pcg
ExclusiveArch: %{rust_arches}
- rust-rand_pcg0.1
ExclusiveArch: %{rust_arches}
- rust-rand_pcg0.2
ExclusiveArch: %{rust_arches}
- rust-rand_xorshift
ExclusiveArch: %{rust_arches}
- rust-rand_xorshift0.1
ExclusiveArch: %{rust_arches}
- rust-rand_xorshift0.2
ExclusiveArch: %{rust_arches}
- rust-rand_xoshiro
ExclusiveArch: %{rust_arches}
- rust-random
ExclusiveArch: %{rust_arches}
- rust-random-fast-rng
ExclusiveArch: %{rust_arches}
- rust-random-trait
ExclusiveArch: %{rust_arches}
- rust-randomize
ExclusiveArch: %{rust_arches}
- rust-rav1e
ExclusiveArch: %{rust_arches}
- rust-raw-window-handle
ExclusiveArch: %{rust_arches}
- rust-rawpointer
ExclusiveArch: %{rust_arches}
- rust-rawslice
ExclusiveArch: %{rust_arches}
- rust-rayon
ExclusiveArch: %{rust_arches}
- rust-rayon-core
ExclusiveArch: %{rust_arches}
- rust-rbspy
ExclusiveArch: %{rust_arches}
- rust-rbspy-ruby-structs
ExclusiveArch: %{rust_arches}
- rust-rbspy-testdata
ExclusiveArch: %{rust_arches}
- rust-rd-agent
ExclusiveArch: %{rust_arches}
- rust-rd-agent-intf
ExclusiveArch: %{rust_arches}
- rust-rd-hashd
ExclusiveArch: %{rust_arches}
- rust-rd-hashd-intf
ExclusiveArch: %{rust_arches}
- rust-rd-util
ExclusiveArch: %{rust_arches}
- rust-read-process-memory
ExclusiveArch: %{rust_arches}
- rust-read_input
ExclusiveArch: %{rust_arches}
- rust-readability-fork
ExclusiveArch: %{rust_arches}
- rust-readwrite
ExclusiveArch: %{rust_arches}
- rust-recycler
ExclusiveArch: %{rust_arches}
- rust-ref-cast
ExclusiveArch: %{rust_arches}
- rust-ref-cast-impl
ExclusiveArch: %{rust_arches}
- rust-regalloc
ExclusiveArch: %{rust_arches}
- rust-regex
ExclusiveArch: %{rust_arches}
- rust-regex-automata
ExclusiveArch: %{rust_arches}
- rust-regex-syntax
ExclusiveArch: %{rust_arches}
- rust-region
ExclusiveArch: %{rust_arches}
- rust-relative-path
ExclusiveArch: %{rust_arches}
- rust-relay
ExclusiveArch: %{rust_arches}
- rust-remoteprocess
ExclusiveArch: %{rust_arches}
- rust-remove_dir_all
ExclusiveArch: %{rust_arches}
- rust-rend
ExclusiveArch: %{rust_arches}
- rust-rental
ExclusiveArch: %{rust_arches}
- rust-rental-impl
ExclusiveArch: %{rust_arches}
- rust-reqwest
ExclusiveArch: %{rust_arches}
- rust-reqwest0.10
ExclusiveArch: %{rust_arches}
- rust-resctl-bench
ExclusiveArch: %{rust_arches}
- rust-resctl-bench-intf
ExclusiveArch: %{rust_arches}
- rust-resctl-demo
ExclusiveArch: %{rust_arches}
- rust-resize
ExclusiveArch: %{rust_arches}
- rust-resolv-conf
ExclusiveArch: %{rust_arches}
- rust-restson
ExclusiveArch: %{rust_arches}
- rust-retry
ExclusiveArch: %{rust_arches}
- rust-rgb
ExclusiveArch: %{rust_arches}
- rust-ring
ExclusiveArch: %{rust_arches}
- rust-ringbuf
ExclusiveArch: %{rust_arches}
- rust-ripgrep
ExclusiveArch: %{rust_arches}
- rust-rkyv
ExclusiveArch: %{rust_arches}
- rust-rkyv_derive
ExclusiveArch: %{rust_arches}
- rust-rle-decode-fast
ExclusiveArch: %{rust_arches}
- rust-rmp
ExclusiveArch: %{rust_arches}
- rust-rmp-serde
ExclusiveArch: %{rust_arches}
- rust-rodio
ExclusiveArch: %{rust_arches}
- rust-roff
ExclusiveArch: %{rust_arches}
- rust-ron
ExclusiveArch: %{rust_arches}
- rust-roxmltree
ExclusiveArch: %{rust_arches}
- rust-rpassword
ExclusiveArch: %{rust_arches}
- rust-rpick
ExclusiveArch: %{rust_arches}
- rust-rsa
ExclusiveArch: %{rust_arches}
- rust-rspec
ExclusiveArch: %{rust_arches}
- rust-rtnetlink
ExclusiveArch: %{rust_arches}
- rust-rudo
ExclusiveArch: %{rust_arches}
- rust-rusqlite
ExclusiveArch: %{rust_arches}
- rust-rust-embed
ExclusiveArch: %{rust_arches}
- rust-rust-embed-impl
ExclusiveArch: %{rust_arches}
- rust-rust-embed-utils
ExclusiveArch: %{rust_arches}
- rust-rust-ini
ExclusiveArch: %{rust_arches}
- rust-rust-stemmers
ExclusiveArch: %{rust_arches}
- rust-rust_decimal
ExclusiveArch: %{rust_arches}
- rust-rust_hawktracer
ExclusiveArch: %{rust_arches}
- rust-rust_hawktracer_normal_macro
ExclusiveArch: %{rust_arches}
- rust-rust_hawktracer_proc_macro
ExclusiveArch: %{rust_arches}
- rust-rust_hawktracer_sys
ExclusiveArch: %{rust_arches}
- rust-rustbus
ExclusiveArch: %{rust_arches}
- rust-rustbus_derive
ExclusiveArch: %{rust_arches}
- rust-rustc-demangle
ExclusiveArch: %{rust_arches}
- rust-rustc-hash
ExclusiveArch: %{rust_arches}
- rust-rustc-serialize
ExclusiveArch: %{rust_arches}
- rust-rustc-test
ExclusiveArch: %{rust_arches}
- rust-rustc_tools_util
ExclusiveArch: %{rust_arches}
- rust-rustc_version
ExclusiveArch: %{rust_arches}
- rust-rustc_version0.3
ExclusiveArch: %{rust_arches}
- rust-rustdoc-stripper
ExclusiveArch: %{rust_arches}
- rust-rustfilt
ExclusiveArch: %{rust_arches}
- rust-rustfix
ExclusiveArch: %{rust_arches}
- rust-rustio
ExclusiveArch: %{rust_arches}
- rust-rustix
ExclusiveArch: %{rust_arches}
- rust-rustls
ExclusiveArch: %{rust_arches}
- rust-rustls-native-certs
ExclusiveArch: %{rust_arches}
- rust-rusttype
ExclusiveArch: %{rust_arches}
- rust-rustversion
ExclusiveArch: %{rust_arches}
- rust-rusty-fork
ExclusiveArch: %{rust_arches}
- rust-rustyline
ExclusiveArch: %{rust_arches}
- rust-rustyline-derive
ExclusiveArch: %{rust_arches}
- rust-ryu
ExclusiveArch: %{rust_arches}
- rust-safe-transmute
ExclusiveArch: %{rust_arches}
- rust-safe_arch
ExclusiveArch: %{rust_arches}
- rust-safemem
ExclusiveArch: %{rust_arches}
- rust-salsa20
ExclusiveArch: %{rust_arches}
- rust-same-file
ExclusiveArch: %{rust_arches}
- rust-sapp-kms
ExclusiveArch: %{rust_arches}
- rust-sapp-linux
ExclusiveArch: %{rust_arches}
- rust-sass-rs
ExclusiveArch: %{rust_arches}
- rust-sass-sys
ExclusiveArch: %{rust_arches}
- rust-scan_fmt
ExclusiveArch: %{rust_arches}
- rust-scheduled-thread-pool
ExclusiveArch: %{rust_arches}
- rust-scoped-tls
ExclusiveArch: %{rust_arches}
- rust-scoped-tls-hkt
ExclusiveArch: %{rust_arches}
- rust-scoped_threadpool
ExclusiveArch: %{rust_arches}
- rust-scopeguard
ExclusiveArch: %{rust_arches}
- rust-scopetime
ExclusiveArch: %{rust_arches}
- rust-scratch
ExclusiveArch: %{rust_arches}
- rust-scroll
ExclusiveArch: %{rust_arches}
- rust-scroll_derive
ExclusiveArch: %{rust_arches}
- rust-scrypt
ExclusiveArch: %{rust_arches}
- rust-sct
ExclusiveArch: %{rust_arches}
- rust-sd
ExclusiveArch: %{rust_arches}
- rust-sd-notify
ExclusiveArch: %{rust_arches}
- rust-seahash
ExclusiveArch: %{rust_arches}
- rust-seahash3
ExclusiveArch: %{rust_arches}
- rust-secrecy
ExclusiveArch: %{rust_arches}
- rust-secret-service
ExclusiveArch: %{rust_arches}
- rust-self_cell
ExclusiveArch: %{rust_arches}
- rust-semver
ExclusiveArch: %{rust_arches}
- rust-semver-parser
ExclusiveArch: %{rust_arches}
- rust-semver-parser0.9
ExclusiveArch: %{rust_arches}
- rust-semver0.11
ExclusiveArch: %{rust_arches}
- rust-sequoia-autocrypt
ExclusiveArch: %{rust_arches}
- rust-sequoia-ipc
ExclusiveArch: %{rust_arches}
- rust-sequoia-keyring-linter
ExclusiveArch: %{rust_arches}
- rust-sequoia-net
ExclusiveArch: %{rust_arches}
- rust-sequoia-octopus-librnp
ExclusiveArch: %{rust_arches}
- rust-sequoia-openpgp
ExclusiveArch: %{rust_arches}
- rust-sequoia-openpgp-mt
ExclusiveArch: %{rust_arches}
- rust-sequoia-sop
ExclusiveArch: %{rust_arches}
- rust-sequoia-sq
ExclusiveArch: %{rust_arches}
- rust-sequoia-sqv
ExclusiveArch: %{rust_arches}
- rust-serde
ExclusiveArch: %{rust_arches}
- rust-serde-big-array
ExclusiveArch: %{rust_arches}
- rust-serde-pickle
ExclusiveArch: %{rust_arches}
- rust-serde-value
ExclusiveArch: %{rust_arches}
- rust-serde-xml-rs
ExclusiveArch: %{rust_arches}
- rust-serde_bser
ExclusiveArch: %{rust_arches}
- rust-serde_bytes
ExclusiveArch: %{rust_arches}
- rust-serde_cbor
ExclusiveArch: %{rust_arches}
- rust-serde_derive
ExclusiveArch: %{rust_arches}
- rust-serde_fmt
ExclusiveArch: %{rust_arches}
- rust-serde_ignored
ExclusiveArch: %{rust_arches}
- rust-serde_json
ExclusiveArch: %{rust_arches}
- rust-serde_repr
ExclusiveArch: %{rust_arches}
- rust-serde_stacker
ExclusiveArch: %{rust_arches}
- rust-serde_test
ExclusiveArch: %{rust_arches}
- rust-serde_url_params
ExclusiveArch: %{rust_arches}
- rust-serde_urlencoded
ExclusiveArch: %{rust_arches}
- rust-serde_urlencoded0.6
ExclusiveArch: %{rust_arches}
- rust-serde_with
ExclusiveArch: %{rust_arches}
- rust-serde_with_macros
ExclusiveArch: %{rust_arches}
- rust-serde_yaml
ExclusiveArch: %{rust_arches}
- rust-serial-core
ExclusiveArch: %{rust_arches}
- rust-serial_test
ExclusiveArch: %{rust_arches}
- rust-serial_test_derive
ExclusiveArch: %{rust_arches}
- rust-servo-fontconfig
ExclusiveArch: %{rust_arches}
- rust-servo-fontconfig-sys
ExclusiveArch: %{rust_arches}
- rust-sev
ExclusiveArch: %{rust_arches}
- rust-sevctl
ExclusiveArch: x86_64
- rust-sha-1
ExclusiveArch: %{rust_arches}
- rust-sha-1_0.9
ExclusiveArch: %{rust_arches}
- rust-sha1
ExclusiveArch: %{rust_arches}
- rust-sha1_0.6
ExclusiveArch: %{rust_arches}
- rust-sha1_smol
ExclusiveArch: %{rust_arches}
- rust-sha1collisiondetection
ExclusiveArch: %{rust_arches}
- rust-sha2
ExclusiveArch: %{rust_arches}
- rust-sha2_0.9
ExclusiveArch: %{rust_arches}
- rust-sha3
ExclusiveArch: %{rust_arches}
- rust-sha3_0.9
ExclusiveArch: %{rust_arches}
- rust-shadow-rs
ExclusiveArch: %{rust_arches}
- rust-shared_child
ExclusiveArch: %{rust_arches}
- rust-shared_library
ExclusiveArch: %{rust_arches}
- rust-shell-escape
ExclusiveArch: %{rust_arches}
- rust-shell-words
ExclusiveArch: %{rust_arches}
- rust-shellexpand
ExclusiveArch: %{rust_arches}
- rust-shellwords
ExclusiveArch: %{rust_arches}
- rust-shlex
ExclusiveArch: %{rust_arches}
- rust-signal
ExclusiveArch: %{rust_arches}
- rust-signal-hook
ExclusiveArch: %{rust_arches}
- rust-signal-hook-mio
ExclusiveArch: %{rust_arches}
- rust-signal-hook-registry
ExclusiveArch: %{rust_arches}
- rust-signal-hook0.1
ExclusiveArch: %{rust_arches}
- rust-silver
ExclusiveArch: %{rust_arches}
- rust-simba
ExclusiveArch: %{rust_arches}
- rust-simd_helpers
ExclusiveArch: %{rust_arches}
- rust-simdutf8
ExclusiveArch: %{rust_arches}
- rust-similar
ExclusiveArch: %{rust_arches}
- rust-similar-asserts
ExclusiveArch: %{rust_arches}
- rust-simple-error
ExclusiveArch: %{rust_arches}
- rust-simple_asn1
ExclusiveArch: %{rust_arches}
- rust-simple_logger
ExclusiveArch: %{rust_arches}
- rust-simplelog
ExclusiveArch: %{rust_arches}
- rust-siphasher
ExclusiveArch: %{rust_arches}
- rust-size
ExclusiveArch: %{rust_arches}
- rust-sized-chunks
ExclusiveArch: %{rust_arches}
- rust-skeptic
ExclusiveArch: %{rust_arches}
- rust-skim
ExclusiveArch: %{rust_arches}
- rust-slab
ExclusiveArch: %{rust_arches}
- rust-slice-deque
ExclusiveArch: %{rust_arches}
- rust-slog
ExclusiveArch: %{rust_arches}
- rust-slog-async
ExclusiveArch: %{rust_arches}
- rust-slog-scope
ExclusiveArch: %{rust_arches}
- rust-slog-term
ExclusiveArch: %{rust_arches}
- rust-slotmap
ExclusiveArch: %{rust_arches}
- rust-slug
ExclusiveArch: %{rust_arches}
- rust-sluice
ExclusiveArch: %{rust_arches}
- rust-smallbitvec
ExclusiveArch: %{rust_arches}
- rust-smallstr
ExclusiveArch: %{rust_arches}
- rust-smallvec
ExclusiveArch: %{rust_arches}
- rust-smart-default
ExclusiveArch: %{rust_arches}
- rust-smawk
ExclusiveArch: %{rust_arches}
- rust-smithay-client-toolkit
ExclusiveArch: %{rust_arches}
- rust-smithay-client-toolkit0.12
ExclusiveArch: %{rust_arches}
- rust-smithay-clipboard
ExclusiveArch: %{rust_arches}
- rust-smol_str
ExclusiveArch: %{rust_arches}
- rust-snafu
ExclusiveArch: %{rust_arches}
- rust-snafu-derive
ExclusiveArch: %{rust_arches}
- rust-snake_case
ExclusiveArch: %{rust_arches}
- rust-socket2
ExclusiveArch: %{rust_arches}
- rust-socket2_0.3
ExclusiveArch: %{rust_arches}
- rust-sop
ExclusiveArch: %{rust_arches}
- rust-spin
ExclusiveArch: %{rust_arches}
- rust-spin0.5
ExclusiveArch: %{rust_arches}
- rust-spin_on
ExclusiveArch: %{rust_arches}
- rust-spin_sleep
ExclusiveArch: %{rust_arches}
- rust-spinning_top
ExclusiveArch: %{rust_arches}
- rust-spki
ExclusiveArch: %{rust_arches}
- rust-spmc
ExclusiveArch: %{rust_arches}
- rust-ssh-key-dir
ExclusiveArch: %{rust_arches}
- rust-stable_deref_trait
ExclusiveArch: %{rust_arches}
- rust-stacker
ExclusiveArch: %{rust_arches}
- rust-standback
ExclusiveArch: %{rust_arches}
- rust-starship
ExclusiveArch: %{rust_arches}
- rust-starship-battery
ExclusiveArch: %{rust_arches}
- rust-starship_module_config_derive
ExclusiveArch: %{rust_arches}
- rust-static_assertions
ExclusiveArch: %{rust_arches}
- rust-statistical
ExclusiveArch: %{rust_arches}
- rust-statrs
ExclusiveArch: %{rust_arches}
- rust-stb_truetype
ExclusiveArch: %{rust_arches}
- rust-stderrlog
ExclusiveArch: %{rust_arches}
- rust-str_stack
ExclusiveArch: %{rust_arches}
- rust-stratisd_proc_macros
ExclusiveArch: %{rust_arches}
- rust-streaming-stats
ExclusiveArch: %{rust_arches}
- rust-streebog
ExclusiveArch: %{rust_arches}
- rust-streebog0.9
ExclusiveArch: %{rust_arches}
- rust-strict
ExclusiveArch: %{rust_arches}
- rust-string
ExclusiveArch: %{rust_arches}
- rust-string_cache
ExclusiveArch: %{rust_arches}
- rust-string_cache_codegen
ExclusiveArch: %{rust_arches}
- rust-string_cache_shared
ExclusiveArch: %{rust_arches}
- rust-strings
ExclusiveArch: %{rust_arches}
- rust-strip-ansi-escapes
ExclusiveArch: %{rust_arches}
- rust-strong-xml
ExclusiveArch: %{rust_arches}
- rust-strong-xml-derive
ExclusiveArch: %{rust_arches}
- rust-strsim
ExclusiveArch: %{rust_arches}
- rust-structopt
ExclusiveArch: %{rust_arches}
- rust-structopt-derive
ExclusiveArch: %{rust_arches}
- rust-structopt-derive0.2
ExclusiveArch: %{rust_arches}
- rust-structopt0.2
ExclusiveArch: %{rust_arches}
- rust-strum
ExclusiveArch: %{rust_arches}
- rust-strum_macros
ExclusiveArch: %{rust_arches}
- rust-subprocess
ExclusiveArch: %{rust_arches}
- rust-subtle
ExclusiveArch: %{rust_arches}
- rust-sudo_plugin
ExclusiveArch: %{rust_arches}
- rust-sudo_plugin-sys
ExclusiveArch: %{rust_arches}
- rust-sval
ExclusiveArch: %{rust_arches}
- rust-sval_derive
ExclusiveArch: %{rust_arches}
- rust-sval_json
ExclusiveArch: %{rust_arches}
- rust-svg
ExclusiveArch: %{rust_arches}
- rust-svg_metadata
ExclusiveArch: %{rust_arches}
- rust-svgfilters
ExclusiveArch: %{rust_arches}
- rust-svgtypes
ExclusiveArch: %{rust_arches}
- rust-sxd-document
ExclusiveArch: %{rust_arches}
- rust-syn
ExclusiveArch: %{rust_arches}
- rust-syn0.15
ExclusiveArch: %{rust_arches}
- rust-synom
ExclusiveArch: %{rust_arches}
- rust-synstructure
ExclusiveArch: %{rust_arches}
- rust-syntect
ExclusiveArch: %{rust_arches}
- rust-sys-info
ExclusiveArch: %{rust_arches}
- rust-sysctl
ExclusiveArch: %{rust_arches}
- rust-sysinfo
ExclusiveArch: %{rust_arches}
- rust-syslog
ExclusiveArch: %{rust_arches}
- rust-system-deps
ExclusiveArch: %{rust_arches}
- rust-system76_ectool
ExclusiveArch: %{rust_arches}
- rust-systemd
ExclusiveArch: %{rust_arches}
- rust-tabular
ExclusiveArch: %{rust_arches}
- rust-tabwriter
ExclusiveArch: %{rust_arches}
- rust-take
ExclusiveArch: %{rust_arches}
- rust-take_mut
ExclusiveArch: %{rust_arches}
- rust-takeable
ExclusiveArch: %{rust_arches}
- rust-takeable-option
ExclusiveArch: %{rust_arches}
- rust-tap
ExclusiveArch: %{rust_arches}
- rust-tar
ExclusiveArch: %{rust_arches}
- rust-target
ExclusiveArch: %{rust_arches}
- rust-target-lexicon
ExclusiveArch: %{rust_arches}
- rust-tealdeer
ExclusiveArch: %{rust_arches}
- rust-teloxide
ExclusiveArch: %{rust_arches}
- rust-teloxide-macros
ExclusiveArch: %{rust_arches}
- rust-tempdir
ExclusiveArch: %{rust_arches}
- rust-tempfile
ExclusiveArch: %{rust_arches}
- rust-temporary
ExclusiveArch: %{rust_arches}
- rust-temptree
ExclusiveArch: %{rust_arches}
- rust-tendril
ExclusiveArch: %{rust_arches}
- rust-tera
ExclusiveArch: %{rust_arches}
- rust-term
ExclusiveArch: %{rust_arches}
- rust-term0.6
ExclusiveArch: %{rust_arches}
- rust-term_grid
ExclusiveArch: %{rust_arches}
- rust-term_size
ExclusiveArch: %{rust_arches}
- rust-termbg
ExclusiveArch: %{rust_arches}
- rust-termcolor
ExclusiveArch: %{rust_arches}
- rust-terminal_size
ExclusiveArch: %{rust_arches}
- rust-terminfo
ExclusiveArch: %{rust_arches}
- rust-termion
ExclusiveArch: %{rust_arches}
- rust-termios
ExclusiveArch: %{rust_arches}
- rust-termwiz
ExclusiveArch: %{rust_arches}
- rust-test-assembler
ExclusiveArch: %{rust_arches}
- rust-test-case
ExclusiveArch: %{rust_arches}
- rust-tester
ExclusiveArch: %{rust_arches}
- rust-testing_logger
ExclusiveArch: %{rust_arches}
- rust-textwrap
ExclusiveArch: %{rust_arches}
- rust-textwrap0.11
ExclusiveArch: %{rust_arches}
- rust-thiserror
ExclusiveArch: %{rust_arches}
- rust-thiserror-impl
ExclusiveArch: %{rust_arches}
- rust-thread-id
ExclusiveArch: %{rust_arches}
- rust-thread-tree
ExclusiveArch: %{rust_arches}
- rust-thread_local
ExclusiveArch: %{rust_arches}
- rust-threadpool
ExclusiveArch: %{rust_arches}
- rust-tiff
ExclusiveArch: %{rust_arches}
- rust-tiger
ExclusiveArch: %{rust_arches}
- rust-tiger0.1
ExclusiveArch: %{rust_arches}
- rust-time
ExclusiveArch: %{rust_arches}
- rust-time-macros
ExclusiveArch: %{rust_arches}
- rust-time-macros-impl
ExclusiveArch: %{rust_arches}
- rust-time-macros0.1
ExclusiveArch: %{rust_arches}
- rust-time0.1
ExclusiveArch: %{rust_arches}
- rust-time0.2
ExclusiveArch: %{rust_arches}
- rust-timebomb
ExclusiveArch: %{rust_arches}
- rust-timer
ExclusiveArch: %{rust_arches}
- rust-timerfd
ExclusiveArch: %{rust_arches}
- rust-tiny-keccak
ExclusiveArch: %{rust_arches}
- rust-tiny-skia
ExclusiveArch: %{rust_arches}
- rust-tiny_http
ExclusiveArch: %{rust_arches}
- rust-tiny_http0.6
ExclusiveArch: %{rust_arches}
- rust-tinyfiledialogs
ExclusiveArch: %{rust_arches}
- rust-tinystr
ExclusiveArch: %{rust_arches}
- rust-tinytemplate
ExclusiveArch: %{rust_arches}
- rust-tinyvec
ExclusiveArch: %{rust_arches}
- rust-tinyvec_macros
ExclusiveArch: %{rust_arches}
- rust-tokei
ExclusiveArch: %{rust_arches}
- rust-tokio
ExclusiveArch: %{rust_arches}
- rust-tokio-codec
ExclusiveArch: %{rust_arches}
- rust-tokio-core
ExclusiveArch: %{rust_arches}
- rust-tokio-current-thread
ExclusiveArch: %{rust_arches}
- rust-tokio-executor
ExclusiveArch: %{rust_arches}
- rust-tokio-fs
ExclusiveArch: %{rust_arches}
- rust-tokio-io
ExclusiveArch: %{rust_arches}
- rust-tokio-macros
ExclusiveArch: %{rust_arches}
- rust-tokio-macros0.2
ExclusiveArch: %{rust_arches}
- rust-tokio-mock-task
ExclusiveArch: %{rust_arches}
- rust-tokio-native-tls
ExclusiveArch: %{rust_arches}
- rust-tokio-openssl
ExclusiveArch: %{rust_arches}
- rust-tokio-openssl0.4
ExclusiveArch: %{rust_arches}
- rust-tokio-reactor
ExclusiveArch: %{rust_arches}
- rust-tokio-rustls
ExclusiveArch: %{rust_arches}
- rust-tokio-socks
ExclusiveArch: %{rust_arches}
- rust-tokio-socks0.3
ExclusiveArch: %{rust_arches}
- rust-tokio-stream
ExclusiveArch: %{rust_arches}
- rust-tokio-sync
ExclusiveArch: %{rust_arches}
- rust-tokio-tcp
ExclusiveArch: %{rust_arches}
- rust-tokio-test
ExclusiveArch: %{rust_arches}
- rust-tokio-threadpool
ExclusiveArch: %{rust_arches}
- rust-tokio-timer
ExclusiveArch: %{rust_arches}
- rust-tokio-tls
ExclusiveArch: %{rust_arches}
- rust-tokio-tls0.2
ExclusiveArch: %{rust_arches}
- rust-tokio-tungstenite
ExclusiveArch: %{rust_arches}
- rust-tokio-udp
ExclusiveArch: %{rust_arches}
- rust-tokio-uds
ExclusiveArch: %{rust_arches}
- rust-tokio-util
ExclusiveArch: %{rust_arches}
- rust-tokio-util0.3
ExclusiveArch: %{rust_arches}
- rust-tokio0.1
ExclusiveArch: %{rust_arches}
- rust-tokio0.2
ExclusiveArch: %{rust_arches}
- rust-toml
ExclusiveArch: %{rust_arches}
- rust-toml0.4
ExclusiveArch: %{rust_arches}
- rust-toml_edit
ExclusiveArch: %{rust_arches}
- rust-tower-layer
ExclusiveArch: %{rust_arches}
- rust-tower-service
ExclusiveArch: %{rust_arches}
- rust-tower-test
ExclusiveArch: %{rust_arches}
- rust-tower-util
ExclusiveArch: %{rust_arches}
- rust-tpm2-policy
ExclusiveArch: %{rust_arches}
- rust-tracing
ExclusiveArch: %{rust_arches}
- rust-tracing-attributes
ExclusiveArch: %{rust_arches}
- rust-tracing-core
ExclusiveArch: %{rust_arches}
- rust-tracing-futures
ExclusiveArch: %{rust_arches}
- rust-traitobject
ExclusiveArch: %{rust_arches}
- rust-trash
ExclusiveArch: %{rust_arches}
- rust-treebitmap
ExclusiveArch: %{rust_arches}
- rust-treeline
ExclusiveArch: %{rust_arches}
- rust-trust-dns-https
ExclusiveArch: %{rust_arches}
- rust-trust-dns-native-tls
ExclusiveArch: %{rust_arches}
- rust-trust-dns-native-tls0.19
ExclusiveArch: %{rust_arches}
- rust-trust-dns-openssl
ExclusiveArch: %{rust_arches}
- rust-trust-dns-openssl0.19
ExclusiveArch: %{rust_arches}
- rust-trust-dns-proto
ExclusiveArch: %{rust_arches}
- rust-trust-dns-proto0.19
ExclusiveArch: %{rust_arches}
- rust-trust-dns-resolver
ExclusiveArch: %{rust_arches}
- rust-trust-dns-resolver0.19
ExclusiveArch: %{rust_arches}
- rust-trust-dns-rustls
ExclusiveArch: %{rust_arches}
- rust-try-lock
ExclusiveArch: %{rust_arches}
- rust-trybuild
ExclusiveArch: %{rust_arches}
- rust-tss-esapi
ExclusiveArch: %{rust_arches}
- rust-tss-esapi-sys
ExclusiveArch: %{rust_arches}
- rust-ttf-parser
ExclusiveArch: %{rust_arches}
- rust-tui
ExclusiveArch: %{rust_arches}
- rust-tui-react
ExclusiveArch: %{rust_arches}
- rust-tui0.11
ExclusiveArch: %{rust_arches}
- rust-tui0.9
ExclusiveArch: %{rust_arches}
- rust-tuikit
ExclusiveArch: %{rust_arches}
- rust-tungstenite
ExclusiveArch: %{rust_arches}
- rust-twoway
ExclusiveArch: %{rust_arches}
- rust-type-map
ExclusiveArch: %{rust_arches}
- rust-typeable
ExclusiveArch: %{rust_arches}
- rust-typed-arena
ExclusiveArch: %{rust_arches}
- rust-typemap
ExclusiveArch: %{rust_arches}
- rust-typenum
ExclusiveArch: %{rust_arches}
- rust-typetag
ExclusiveArch: %{rust_arches}
- rust-typetag-impl
ExclusiveArch: %{rust_arches}
- rust-tzfile
ExclusiveArch: %{rust_arches}
- rust-ucd-parse
ExclusiveArch: %{rust_arches}
- rust-ucd-trie
ExclusiveArch: %{rust_arches}
- rust-ucd-util
ExclusiveArch: %{rust_arches}
- rust-umask
ExclusiveArch: %{rust_arches}
- rust-uncased
ExclusiveArch: %{rust_arches}
- rust-unchecked-index
ExclusiveArch: %{rust_arches}
- rust-unescape
ExclusiveArch: %{rust_arches}
- rust-unic-char-property
ExclusiveArch: %{rust_arches}
- rust-unic-char-range
ExclusiveArch: %{rust_arches}
- rust-unic-common
ExclusiveArch: %{rust_arches}
- rust-unic-langid
ExclusiveArch: %{rust_arches}
- rust-unic-langid-impl
ExclusiveArch: %{rust_arches}
- rust-unic-langid-macros
ExclusiveArch: %{rust_arches}
- rust-unic-langid-macros-impl
ExclusiveArch: %{rust_arches}
- rust-unic-locale
ExclusiveArch: %{rust_arches}
- rust-unic-locale-impl
ExclusiveArch: %{rust_arches}
- rust-unic-locale-macros
ExclusiveArch: %{rust_arches}
- rust-unic-locale-macros-impl
ExclusiveArch: %{rust_arches}
- rust-unic-segment
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-category
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-common
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-segment
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-version
ExclusiveArch: %{rust_arches}
- rust-unicase
ExclusiveArch: %{rust_arches}
- rust-unicase1
ExclusiveArch: %{rust_arches}
- rust-unicode-bidi
ExclusiveArch: %{rust_arches}
- rust-unicode-linebreak
ExclusiveArch: %{rust_arches}
- rust-unicode-normalization
ExclusiveArch: %{rust_arches}
- rust-unicode-segmentation
ExclusiveArch: %{rust_arches}
- rust-unicode-truncate
ExclusiveArch: %{rust_arches}
- rust-unicode-width
ExclusiveArch: %{rust_arches}
- rust-unicode-xid
ExclusiveArch: %{rust_arches}
- rust-unicode-xid0.1
ExclusiveArch: %{rust_arches}
- rust-unicode_categories
ExclusiveArch: %{rust_arches}
- rust-unindent
ExclusiveArch: %{rust_arches}
- rust-universal-hash
ExclusiveArch: %{rust_arches}
- rust-unix_socket
ExclusiveArch: %{rust_arches}
- rust-unreachable
ExclusiveArch: %{rust_arches}
- rust-unsafe-any
ExclusiveArch: %{rust_arches}
- rust-untrusted
ExclusiveArch: %{rust_arches}
- rust-uom
ExclusiveArch: %{rust_arches}
- rust-url
ExclusiveArch: %{rust_arches}
- rust-url1
ExclusiveArch: %{rust_arches}
- rust-url_serde
ExclusiveArch: %{rust_arches}
- rust-urlencoding
ExclusiveArch: %{rust_arches}
- rust-urlocator
ExclusiveArch: %{rust_arches}
- rust-urlshortener
ExclusiveArch: %{rust_arches}
- rust-users
ExclusiveArch: %{rust_arches}
- rust-users0.10
ExclusiveArch: %{rust_arches}
- rust-utf-8
ExclusiveArch: %{rust_arches}
- rust-utf8-cstr
ExclusiveArch: %{rust_arches}
- rust-utf8-ranges
ExclusiveArch: %{rust_arches}
- rust-utf8-width
ExclusiveArch: %{rust_arches}
- rust-utf8parse
ExclusiveArch: %{rust_arches}
- rust-uuid
ExclusiveArch: %{rust_arches}
- rust-uuid0.7
ExclusiveArch: %{rust_arches}
- rust-v_frame
ExclusiveArch: %{rust_arches}
- rust-value-bag
ExclusiveArch: %{rust_arches}
- rust-varbincode
ExclusiveArch: %{rust_arches}
- rust-varlink
ExclusiveArch: %{rust_arches}
- rust-varlink-cli
ExclusiveArch: %{rust_arches}
- rust-varlink_generator
ExclusiveArch: %{rust_arches}
- rust-varlink_parser
ExclusiveArch: %{rust_arches}
- rust-varlink_stdinterfaces
ExclusiveArch: %{rust_arches}
- rust-vcpkg
ExclusiveArch: %{rust_arches}
- rust-vec_map
ExclusiveArch: %{rust_arches}
- rust-vergen
ExclusiveArch: %{rust_arches}
- rust-vergen3
ExclusiveArch: %{rust_arches}
- rust-version
ExclusiveArch: %{rust_arches}
- rust-version-compare
ExclusiveArch: %{rust_arches}
- rust-version-sync
ExclusiveArch: %{rust_arches}
- rust-version-sync0.8
ExclusiveArch: %{rust_arches}
- rust-version_check
ExclusiveArch: %{rust_arches}
- rust-versions
ExclusiveArch: %{rust_arches}
- rust-virtio-bindings
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vm-memory
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vmm-sys-util
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vmw_backdoor
ExclusiveArch: %{rust_arches}
- rust-void
ExclusiveArch: %{rust_arches}
- rust-vsprintf
ExclusiveArch: %{rust_arches}
- rust-vte
ExclusiveArch: %{rust_arches}
- rust-vte_generate_state_changes
ExclusiveArch: %{rust_arches}
- rust-vtparse
ExclusiveArch: %{rust_arches}
- rust-wait-timeout
ExclusiveArch: %{rust_arches}
- rust-waker-fn
ExclusiveArch: %{rust_arches}
- rust-walkdir
ExclusiveArch: %{rust_arches}
- rust-want
ExclusiveArch: %{rust_arches}
- rust-warp
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-backend
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-futures
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-macro
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-macro-support
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-shared
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-test
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-test-macro
ExclusiveArch: %{rust_arches}
- rust-wasmer_enumset
ExclusiveArch: %{rust_arches}
- rust-wasmer_enumset_derive
ExclusiveArch: %{rust_arches}
- rust-wasmparser
ExclusiveArch: %{rust_arches}
- rust-wasmtime-cache
ExclusiveArch: %{rust_arches}
- rust-wasmtime-environ
ExclusiveArch: %{rust_arches}
- rust-wasmtime-fiber
ExclusiveArch: x86_64 aarch64 s390x
- rust-wasmtime-types
ExclusiveArch: %{rust_arches}
- rust-wast
ExclusiveArch: %{rust_arches}
- rust-wat
ExclusiveArch: %{rust_arches}
- rust-watchman_client
ExclusiveArch: %{rust_arches}
- rust-wayland-client
ExclusiveArch: %{rust_arches}
- rust-wayland-commons
ExclusiveArch: %{rust_arches}
- rust-wayland-cursor
ExclusiveArch: %{rust_arches}
- rust-wayland-egl
ExclusiveArch: %{rust_arches}
- rust-wayland-protocols
ExclusiveArch: %{rust_arches}
- rust-wayland-scanner
ExclusiveArch: %{rust_arches}
- rust-wayland-server
ExclusiveArch: %{rust_arches}
- rust-wayland-sys
ExclusiveArch: %{rust_arches}
- rust-web-sys
ExclusiveArch: %{rust_arches}
- rust-webbrowser
ExclusiveArch: %{rust_arches}
- rust-webpki
ExclusiveArch: %{rust_arches}
- rust-webpki-roots
ExclusiveArch: %{rust_arches}
- rust-websocket
ExclusiveArch: %{rust_arches}
- rust-websocket-base
ExclusiveArch: %{rust_arches}
- rust-weezl
ExclusiveArch: %{rust_arches}
- rust-which
ExclusiveArch: %{rust_arches}
- rust-wide
ExclusiveArch: %{rust_arches}
- rust-wild
ExclusiveArch: %{rust_arches}
- rust-wildmatch
ExclusiveArch: %{rust_arches}
- rust-winit
ExclusiveArch: %{rust_arches}
- rust-witx
ExclusiveArch: %{rust_arches}
- rust-ws
ExclusiveArch: %{rust_arches}
- rust-wyz
ExclusiveArch: %{rust_arches}
- rust-x11
ExclusiveArch: %{rust_arches}
- rust-x11-clipboard
ExclusiveArch: %{rust_arches}
- rust-x11-dl
ExclusiveArch: %{rust_arches}
- rust-xattr
ExclusiveArch: %{rust_arches}
- rust-xcb
ExclusiveArch: %{rust_arches}
- rust-xcursor
ExclusiveArch: %{rust_arches}
- rust-xdg
ExclusiveArch: %{rust_arches}
- rust-xi-unicode
ExclusiveArch: %{rust_arches}
- rust-xkbcommon
ExclusiveArch: %{rust_arches}
- rust-xml-rs
ExclusiveArch: %{rust_arches}
- rust-xml5ever
ExclusiveArch: %{rust_arches}
- rust-xmlparser
ExclusiveArch: %{rust_arches}
- rust-xmltree
ExclusiveArch: %{rust_arches}
- rust-xmlwriter
ExclusiveArch: %{rust_arches}
- rust-xz2
ExclusiveArch: %{rust_arches}
- rust-y4m
ExclusiveArch: %{rust_arches}
- rust-yaml-rust
ExclusiveArch: %{rust_arches}
- rust-yaml-rust0.3
ExclusiveArch: %{rust_arches}
- rust-ybaas
ExclusiveArch: %{rust_arches}
- rust-yubibomb
ExclusiveArch: %{rust_arches}
- rust-zbase32
ExclusiveArch: %{rust_arches}
- rust-zbus
ExclusiveArch: %{rust_arches}
- rust-zbus_macros
ExclusiveArch: %{rust_arches}
- rust-zcomponents
ExclusiveArch: %{rust_arches}
- rust-zeroize
ExclusiveArch: %{rust_arches}
- rust-zeroize_derive
ExclusiveArch: %{rust_arches}
- rust-zincati
ExclusiveArch: %{rust_arches}
- rust-zip
ExclusiveArch: %{rust_arches}
- rust-zmq
ExclusiveArch: %{rust_arches}
- rust-zmq-sys
ExclusiveArch: %{rust_arches}
- rust-zoneinfo_compiled
ExclusiveArch: %{rust_arches}
- rust-zopfli
ExclusiveArch: %{rust_arches}
- rust-zoxide
ExclusiveArch: %{rust_arches}
- rust-zram-generator
ExclusiveArch: %{rust_arches}
- rust-zstd
ExclusiveArch: %{rust_arches}
- rust-zstd-safe
ExclusiveArch: %{rust_arches}
- rust-zstd-sys
ExclusiveArch: %{rust_arches}
- rust-zvariant
ExclusiveArch: %{rust_arches}
- rust-zvariant_derive
ExclusiveArch: %{rust_arches}
- s390utils
ExclusiveArch: s390 s390x
- safetyblanket
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- sagemath
ExclusiveArch: aarch64 %{ix86} x86_64 ppc sparcv9
- sbcl
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- sbd
ExclusiveArch: i686 x86_64 s390x aarch64 ppc64le
- sbsigntools
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- sdsl-lite
ExclusiveArch: %{power64} x86_64 aarch64
- seabios
ExclusiveArch: x86_64
- seadrive-gui
ExclusiveArch: %{qt5_qtwebengine_arches}
- seafile-client
ExclusiveArch: %{qt5_qtwebengine_arches}
- seamonkey
ExclusiveArch: x86_64
- seqan3
ExclusiveArch: %{power64} x86_64 aarch64
- servicelog
ExclusiveArch: ppc %{power64}
- sgabios
ExclusiveArch: %{ix86} x86_64
- sharpfont
ExclusiveArch: %mono_arches
- sharpziplib
ExclusiveArch: %{mono_arches}
- shim
ExclusiveArch: %{efi}
- shim-unsigned-aarch64
ExclusiveArch: aarch64
- shim-unsigned-x64
ExclusiveArch: x86_64
- sigul
ExclusiveArch: x86_64
- skopeo
ExclusiveArch: %{go_arches}
- skychart
ExclusiveArch: %{fpc_arches}
- snapd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- soup-sharp
ExclusiveArch: %{mono_arches}
- sparkleshare
ExclusiveArch: %{mono_arches}
- spicctrl
ExclusiveArch: %{ix86} x86_64
- spice
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- springlobby
ExclusiveArch: %{ix86} x86_64
- squeekboard
ExclusiveArch: %{rust_arches}
- startdde
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- statsd
ExclusiveArch: %{nodejs_arches} noarch
- stratis-cli
ExclusiveArch: %{rust_arches} noarch
- stratisd
ExclusiveArch: %{rust_arches}
ExclusiveArch: ${rust_arches}
- stripesnoop
ExclusiveArch: %{ix86} x86_64
- supercollider
ExclusiveArch: %{qt5_qtwebengine_arches}
- supermin
ExclusiveArch: %{kernel_arches}
- svt-av1
ExclusiveArch: x86_64
- svt-vp9
ExclusiveArch: x86_64
- swift-lang
ExclusiveArch: x86_64 aarch64
- sysbench
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64le s390x
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- system76-keyboard-configurator
ExclusiveArch: %{rust_arches}
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tarantool
ExclusiveArch: %{ix86} x86_64
- tboot
ExclusiveArch: %{ix86} x86_64
- tdlib
ExclusiveArch: x86_64 aarch64
- templates_parser
ExclusiveArch: %GPRbuild_arches
- ternimal
ExclusiveArch: %{rust_arches}
- testcloud
ExclusiveArch: %{kernel_arches} noarch
- themonospot-base
ExclusiveArch: %mono_arches
- themonospot-console
ExclusiveArch: %mono_arches
- themonospot-gui-gtk
ExclusiveArch: %mono_arches
- themonospot-plugin-avi
ExclusiveArch: %mono_arches
- themonospot-plugin-mkv
ExclusiveArch: %mono_arches
- thermald
ExclusiveArch: %{ix86} x86_64
- tilix
ExclusiveArch: %{ldc_arches}
- tmux-top
ExclusiveArch: %{go_arches}
- tomboy
ExclusiveArch: %{mono_arches}
- torbrowser-launcher
ExclusiveArch: %{ix86} x86_64
- tuned-profiles-nfv-host-bin
ExclusiveArch: %{ix86} x86_64
- uClibc
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
- ucx
ExclusiveArch: aarch64 ppc64le x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
- unetbootin
ExclusiveArch: %{ix86} x86_64
- ursa-major
ExclusiveArch: noarch aarch64 ppc64le s390x x86_64
- usd
ExclusiveArch: aarch64 x86_64
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vboot-utils
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- vim-go
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm}}
- virt-p2v
ExclusiveArch: x86_64
- virt-v2v
ExclusiveArch: x86_64
- virtualbox-guest-additions
ExclusiveArch: i686 x86_64
- vkd3d
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- vmaf
ExclusiveArch: x86_64
- vmemcache
ExclusiveArch: x86_64 ppc64 ppc64le s390x aarch64
- vrq
ExclusiveArch: %{ix86} x86_64
- warsow
ExclusiveArch: %{ix86} x86_64 %{arm}
- warsow-data
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{ix86} x86_64 %{arm}
- webkit2-sharp
ExclusiveArch: %mono_arches
- wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: %{ix86} %{arm}
- wine-dxvk
ExclusiveArch: %{ix86} x86_64
- winetricks
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- wxMaxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
- x2goclient
ExclusiveArch: x86_64
- xe-guest-utilities-latest
ExclusiveArch: %{ix86} x86_64
- xen
ExclusiveArch: %{ix86} x86_64 armv7hl aarch64
- xmlada
ExclusiveArch: %{GPRbuild_arches}
- xorg-x11-drv-armsoc
ExclusiveArch: %{arm} aarch64
- xorg-x11-drv-intel
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-openchrome
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vesa
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vmware
ExclusiveArch: %{ix86} x86_64 ia64
- xsp
ExclusiveArch: %mono_arches
- yarnpkg
ExclusiveArch: %{nodejs_arches} noarch
- zeal
ExclusiveArch: %{qt5_qtwebengine_arches}
- zeromq-ada
ExclusiveArch: %{GPRbuild_arches}
- zig
ExclusiveArch: %{zig_arches}
- zlib-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ng
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- zola
ExclusiveArch: %{rust_arches}
2 years, 1 month