[Report] Packages Restricting Arches
by root
Package that edited their arches constraints (1)
=============================================
- mokutil
was ExclusiveArch: %{ix86} x86_64 aarch64
is ExclusiveArch: %{ix86} x86_64 aarch64 %{arm}
List of packages currently excluding arches (1924)
===========================================
- 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}
- OpenImageIO
ExclusiveArch: x86_64 ppc64le
- 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
- aboot
ExclusiveArch: alpha
- accel-config
ExclusiveArch: 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
- anet
ExclusiveArch: %{GPRbuild_arches}
- anki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- apmd
ExclusiveArch: %{ix86}
- appstream-generator
ExclusiveArch: %{ldc_arches}
- arduino
ExclusiveArch: %{go_arches}
- arduino-builder
ExclusiveArch: %{go_arches}
- arm-trusted-firmware
ExclusiveArch: aarch64
- aunit
ExclusiveArch: %GPRbuild_arches
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- bareftp
ExclusiveArch: %{mono_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
- bless
ExclusiveArch: %mono_arches
- bpftrace
ExclusiveArch: x86_64 %{power64} aarch64 s390x
- calamares
ExclusiveArch: %{ix86} x86_64
- 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 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
- 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 %{ix86} aarch64 ppc64 ppc64le
- cryptobone
ExclusiveArch: x86_64 %{ix86} ppc64 ppc64le aarch64
- daq
ExclusiveArch: x86_64 aarch64
- darktable
ExclusiveArch: x86_64 aarch64
ExclusiveArch: x86_64 ppc64le
- 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: %ix86 x86_64 aarch64
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dolphin-emu
ExclusiveArch: x86_64 aarch64 ppc64le
- dotnet-build-reference-packages
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet3.1
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet5.0
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet5.0-build-reference-packages
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- doublecmd
ExclusiveArch: %{ix86} x86_64
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dssi-vst
ExclusiveArch: %{ix86} x86_64
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc64le aarch64
- e3
ExclusiveArch: %{ix86} x86_64
- 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
- embree
ExclusiveArch: x86_64
- enki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- eric
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- extlinux-bootloader
ExclusiveArch: %{arm} aarch64
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- fes
ExclusiveArch: %{ix86} x86_64
- flannel
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- florist
ExclusiveArch: %{GPRbuild_arches}
- 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}
- fx
ExclusiveArch: %{nodejs_arches} noarch
- ga
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- gbrainy
ExclusiveArch: %mono_arches
- gdata-sharp
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}}
- 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-guitar
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
- 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
- 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
- ignition
ExclusiveArch: %{go_arches}
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- intel-gmmlib
ExclusiveArch: x86_64 i686
- 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
- ipw2100-firmware
ExclusiveArch: noarch i386 x86_64
- ipw2200-firmware
ExclusiveArch: noarch i386 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}
- keepass
ExclusiveArch: %{mono_arches}
- kernel
ExclusiveArch: x86_64 s390x %{arm} aarch64 ppc64le
ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le
- 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-kmailtransport
ExclusiveArch: x86_64 %{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}
- 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
- libnxz
ExclusiveArch: ppc64le
- libocxl
ExclusiveArch: ppc64le
- libpmemobj-cpp
ExclusiveArch: x86_64
- 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
- libzfcphbaapi
ExclusiveArch: s390 s390x
- lightdm
ExclusiveArch: x86_64 ppc64le
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 s390x ppc64le
- luxcorerender
ExclusiveArch: x86_64
- mactel-boot
ExclusiveArch: x86_64
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- mantle
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matreshka
ExclusiveArch: %GPRbuild_arches
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mbpfan
ExclusiveArch: x86_64
- mcelog
ExclusiveArch: i686 x86_64
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- megapixels
ExclusiveArch: aarch64 armv7hl
- 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-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}
- 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}
- 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}
- 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-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-svgo
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}
- npm-name-cli
ExclusiveArch: %{nodejs_arches} noarch
- ntfs2btrfs
ExclusiveArch: x86_64
- 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-kvm-hook
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- 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-netutils
ExclusiveArch: %{ix86} %{arm}
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- onednn
ExclusiveArch: x86_64 aarch64 ppc64le
- onedrive
ExclusiveArch: %{ldc_arches}
- opae
ExclusiveArch: x86_64
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64
- 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
- paflib
ExclusiveArch: ppc %{power64}
- parsec
ExclusiveArch: %{rust_arches}
- parsec-tool
ExclusiveArch: %{rust_arches}
- pcc
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
- 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}
- psi-plus
ExclusiveArch: %{qt5_qtwebengine_arches}
- 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-rpi-gpio
ExclusiveArch: %{arm} aarch64
- python-setuptools-rust
ExclusiveArch: %{rust_arches}
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- 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}
ExclusiveArch: x86_64 %{ix86}
- quentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- redhat-lsb
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- renderdoc
ExclusiveArch: x86_64
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm}
- rescene
ExclusiveArch: %{mono_arches}
- restsharp
ExclusiveArch: %{mono_arches}
- rhythmbox-alternative-toolbar
ExclusiveArch: %{ix86} %{arm} x86_64 ppc64 ppc64le
- rmd
ExclusiveArch: %{ix86} x86_64
- rocm-runtime
ExclusiveArch: x86_64 aarch64
- rocminfo
ExclusiveArch: x86_64 aarch64
- rpm-ostree
ExclusiveArch: %{rust_arches}
- rr
ExclusiveArch: %{ix86} x86_64
- 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-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-files
ExclusiveArch: %{rust_arches}
- rust-actix-http
ExclusiveArch: %{rust_arches}
- rust-actix-macros
ExclusiveArch: %{rust_arches}
- rust-actix-router
ExclusiveArch: %{rust_arches}
- rust-actix-rt
ExclusiveArch: %{rust_arches}
- rust-actix-server
ExclusiveArch: %{rust_arches}
- rust-actix-server-config
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-actix_derive
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-aes-soft
ExclusiveArch: %{rust_arches}
- rust-afterburn
ExclusiveArch: %{rust_arches}
- rust-ahash
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-alloc-no-stdlib
ExclusiveArch: %{rust_arches}
- rust-alloc-stdlib
ExclusiveArch: %{rust_arches}
- rust-alphanumeric-sort
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-anymap
ExclusiveArch: %{rust_arches}
- rust-aom-sys
ExclusiveArch: %{rust_arches}
- rust-app_dirs
ExclusiveArch: %{rust_arches}
- rust-approx
ExclusiveArch: %{rust_arches}
- rust-arbitrary
ExclusiveArch: %{rust_arches}
- rust-arc-swap
ExclusiveArch: %{rust_arches}
- rust-arg_enum_proc_macro
ExclusiveArch: %{rust_arches}
- rust-argparse
ExclusiveArch: %{rust_arches}
- rust-array-init
ExclusiveArch: %{rust_arches}
- rust-arraydeque
ExclusiveArch: %{rust_arches}
- rust-arrayref
ExclusiveArch: %{rust_arches}
- rust-arrayvec
ExclusiveArch: %{rust_arches}
- rust-article_scraper
ExclusiveArch: %{rust_arches}
- rust-ascii
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-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-compression
ExclusiveArch: %{rust_arches}
- rust-async-io
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-atomicwrites
ExclusiveArch: %{rust_arches}
- rust-attohttpc
ExclusiveArch: %{rust_arches}
- rust-atty
ExclusiveArch: %{rust_arches}
- rust-autocfg
ExclusiveArch: %{rust_arches}
- rust-av-metrics
ExclusiveArch: %{rust_arches}
- rust-average
ExclusiveArch: %{rust_arches}
- rust-awc
ExclusiveArch: %{rust_arches}
- rust-backtrace
ExclusiveArch: %{rust_arches}
- rust-backtrace-sys
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-bat
ExclusiveArch: %{rust_arches}
- rust-battery
ExclusiveArch: %{rust_arches}
- rust-bencher
ExclusiveArch: %{rust_arches}
- rust-better-panic
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-biscuit
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-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.7
ExclusiveArch: %{rust_arches}
- rust-block-cipher
ExclusiveArch: %{rust_arches}
- rust-block-modes
ExclusiveArch: %{rust_arches}
- rust-block-padding
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-brev
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-buf-min
ExclusiveArch: %{rust_arches}
- rust-buf_redux
ExclusiveArch: %{rust_arches}
- rust-bufsize
ExclusiveArch: %{rust_arches}
- rust-bufstream
ExclusiveArch: %{rust_arches}
- rust-build_const
ExclusiveArch: %{rust_arches}
- rust-bumpalo
ExclusiveArch: %{rust_arches}
- rust-byte-tools
ExclusiveArch: %{rust_arches}
- rust-byte-unit
ExclusiveArch: %{rust_arches}
- rust-byte-unit3
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.3
ExclusiveArch: %{rust_arches}
- rust-bytes0.4
ExclusiveArch: %{rust_arches}
- rust-bytes0.5
ExclusiveArch: %{rust_arches}
- rust-bytes0.6
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-c_vec
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-caps
ExclusiveArch: %{rust_arches}
- rust-cargo
ExclusiveArch: %{rust_arches}
- rust-cargo-bloat
ExclusiveArch: %{rust_arches}
- rust-cargo-c
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_metadata
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-cfg-if
ExclusiveArch: %{rust_arches}
- rust-cfg-if0.1
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-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-clang-sys
ExclusiveArch: %{rust_arches}
- rust-clap
ExclusiveArch: %{rust_arches}
- rust-clap2
ExclusiveArch: %{rust_arches}
- rust-clap_derive
ExclusiveArch: %{rust_arches}
- rust-clicolors-control
ExclusiveArch: %{rust_arches}
- 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-compiletest_rs
ExclusiveArch: %{rust_arches}
- rust-comrak
ExclusiveArch: %{rust_arches}
- rust-concurrent-queue
ExclusiveArch: %{rust_arches}
- rust-config
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.9
ExclusiveArch: %{rust_arches}
- rust-const-cstr
ExclusiveArch: %{rust_arches}
- rust-const-random
ExclusiveArch: %{rust_arches}
- rust-const-random-macro
ExclusiveArch: %{rust_arches}
- rust-const_fn
ExclusiveArch: %{rust_arches}
- rust-content_inspector
ExclusiveArch: %{rust_arches}
- rust-conv
ExclusiveArch: %{rust_arches}
- rust-cookie
ExclusiveArch: %{rust_arches}
- rust-cookie_store
ExclusiveArch: %{rust_arches}
- rust-copydeps
ExclusiveArch: %{rust_arches}
- rust-copyless
ExclusiveArch: %{rust_arches}
- rust-copypasta
ExclusiveArch: %{rust_arches}
- rust-coreos-installer
ExclusiveArch: %{rust_arches}
- rust-cpio
ExclusiveArch: %{rust_arches}
- rust-cpp_demangle
ExclusiveArch: %{rust_arches}
- rust-cpuid-bool
ExclusiveArch: %{rust_arches}
- rust-cpython
ExclusiveArch: %{rust_arches}
- rust-crates-io
ExclusiveArch: %{rust_arches}
- rust-crc
ExclusiveArch: %{rust_arches}
- rust-crc-any
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-crosstermion
ExclusiveArch: %{rust_arches}
- rust-crunchy
ExclusiveArch: %{rust_arches}
- rust-crypto-hash
ExclusiveArch: %{rust_arches}
- rust-crypto-mac
ExclusiveArch: %{rust_arches}
- rust-crypto-mac0.8
ExclusiveArch: %{rust_arches}
- rust-cryptovec
ExclusiveArch: %{rust_arches}
- rust-cssparser
ExclusiveArch: %{rust_arches}
- rust-cssparser-macros
ExclusiveArch: %{rust_arches}
- rust-csv
ExclusiveArch: %{rust_arches}
- rust-csv-core
ExclusiveArch: %{rust_arches}
- rust-ctor
ExclusiveArch: %{rust_arches}
- rust-ctr
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-custom_derive
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-darling_core
ExclusiveArch: %{rust_arches}
- rust-darling_macro
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-dbus0.2
ExclusiveArch: %{rust_arches}
- rust-dbus0.6
ExclusiveArch: %{rust_arches}
- rust-dbus0.8
ExclusiveArch: %{rust_arches}
- rust-debug-helper
ExclusiveArch: %{rust_arches}
- rust-decimal
ExclusiveArch: %{rust_arches}
- rust-deflate
ExclusiveArch: %{rust_arches}
- rust-defmac
ExclusiveArch: %{rust_arches}
- rust-delta_e
ExclusiveArch: %{rust_arches}
- rust-derivative
ExclusiveArch: %{rust_arches}
- rust-derive-new
ExclusiveArch: %{rust_arches}
- rust-derive_arbitrary
ExclusiveArch: %{rust_arches}
- rust-derive_builder
ExclusiveArch: %{rust_arches}
- rust-derive_builder_core
ExclusiveArch: %{rust_arches}
- rust-derive_more
ExclusiveArch: %{rust_arches}
- rust-des
ExclusiveArch: %{rust_arches}
- rust-desed
ExclusiveArch: %{rust_arches}
- rust-deunicode
ExclusiveArch: %{rust_arches}
- rust-devicemapper
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-diffus
ExclusiveArch: %{rust_arches}
- rust-diffus-derive
ExclusiveArch: %{rust_arches}
- rust-digest
ExclusiveArch: %{rust_arches}
- rust-digest0.8
ExclusiveArch: %{rust_arches}
- rust-directories
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-diskonaut
ExclusiveArch: %{rust_arches}
- rust-dissimilar
ExclusiveArch: %{rust_arches}
- rust-dlib
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-rs
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-easy-parallel
ExclusiveArch: %{rust_arches}
- rust-edit-distance
ExclusiveArch: %{rust_arches}
- rust-either
ExclusiveArch: %{rust_arches}
- rust-elasticlunr-rs
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-entities
ExclusiveArch: %{rust_arches}
- rust-enum-as-inner
ExclusiveArch: %{rust_arches}
- rust-enum_primitive
ExclusiveArch: %{rust_arches}
- rust-enumflags2
ExclusiveArch: %{rust_arches}
- rust-enumflags2_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-environment
ExclusiveArch: %{rust_arches}
- rust-envsubst
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-euclid
ExclusiveArch: %{rust_arches}
- rust-exa
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-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-fake_clock
ExclusiveArch: %{rust_arches}
- rust-fallible-iterator
ExclusiveArch: %{rust_arches}
- rust-fastrand
ExclusiveArch: %{rust_arches}
- rust-fbthrift_codegen_includer_proc_macro
ExclusiveArch: %{rust_arches}
- rust-fd-find
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-fern
ExclusiveArch: %{rust_arches}
- rust-fever_api
ExclusiveArch: %{rust_arches}
- rust-ffsend
ExclusiveArch: %{rust_arches}
- rust-ffsend-api
ExclusiveArch: %{rust_arches}
- rust-filesize
ExclusiveArch: %{rust_arches}
- rust-filetime
ExclusiveArch: %{rust_arches}
- rust-findshlibs
ExclusiveArch: %{rust_arches}
- rust-fixedbitset
ExclusiveArch: %{rust_arches}
- rust-flame
ExclusiveArch: %{rust_arches}
- rust-flate2
ExclusiveArch: %{rust_arches}
- rust-float-cmp
ExclusiveArch: %{rust_arches}
- rust-float-cmp0.6
ExclusiveArch: %{rust_arches}
- rust-float-ord
ExclusiveArch: %{rust_arches}
- rust-flume
ExclusiveArch: %{rust_arches}
- rust-fnv
ExclusiveArch: %{rust_arches}
- rust-font-kit
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-fs2
ExclusiveArch: %{rust_arches}
- rust-fs_extra
ExclusiveArch: %{rust_arches}
- rust-funty
ExclusiveArch: %{rust_arches}
- rust-fuse
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-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-gcsf
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-generic-array
ExclusiveArch: %{rust_arches}
- rust-generic-array0.12
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-gettext-rs
ExclusiveArch: %{rust_arches}
- rust-gettext-sys
ExclusiveArch: %{rust_arches}
- rust-ghash
ExclusiveArch: %{rust_arches}
- rust-ghost
ExclusiveArch: %{rust_arches}
- rust-gif
ExclusiveArch: %{rust_arches}
- rust-gif0.10
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-git2
ExclusiveArch: %{rust_arches}
- rust-git2-curl
ExclusiveArch: %{rust_arches}
- rust-gitui
ExclusiveArch: %{rust_arches}
- rust-gl_generator
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-gobject-sys
ExclusiveArch: %{rust_arches}
- rust-goblin
ExclusiveArch: %{rust_arches}
- rust-google-drive3-fork
ExclusiveArch: %{rust_arches}
- rust-gptman
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-gspell
ExclusiveArch: %{rust_arches}
- rust-gspell-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-macros
ExclusiveArch: %{rust_arches}
- rust-gtk-rs-lgpl-docs
ExclusiveArch: %{rust_arches}
- rust-gtk-source-sys
ExclusiveArch: %{rust_arches}
- rust-gtk-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-hamcrest
ExclusiveArch: %{rust_arches}
- rust-handlebars
ExclusiveArch: %{rust_arches}
- rust-hashbrown
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-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-hkdf
ExclusiveArch: %{rust_arches}
- rust-hmac
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-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-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-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-i3ipc
ExclusiveArch: %{rust_arches}
- rust-id_tree
ExclusiveArch: %{rust_arches}
- rust-ident_case
ExclusiveArch: %{rust_arches}
- rust-idna
ExclusiveArch: %{rust_arches}
- rust-idna0.1
ExclusiveArch: %{rust_arches}
- rust-ignore
ExclusiveArch: %{rust_arches}
- rust-im-rc
ExclusiveArch: %{rust_arches}
- rust-image
ExclusiveArch: %{rust_arches}
- rust-imgref
ExclusiveArch: %{rust_arches}
- rust-indexmap
ExclusiveArch: %{rust_arches}
- rust-indicatif
ExclusiveArch: %{rust_arches}
- rust-indoc
ExclusiveArch: %{rust_arches}
- rust-inflate
ExclusiveArch: %{rust_arches}
- rust-inotify
ExclusiveArch: %{rust_arches}
- rust-inotify-sys
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-invalidstring
ExclusiveArch: %{rust_arches}
- rust-inventory
ExclusiveArch: %{rust_arches}
- rust-inventory-impl
ExclusiveArch: %{rust_arches}
- rust-iocuddle
ExclusiveArch: %{rust_arches}
- rust-iovec
ExclusiveArch: %{rust_arches}
- rust-ipnet
ExclusiveArch: %{rust_arches}
- rust-ipnetwork
ExclusiveArch: %{rust_arches}
- rust-iron
ExclusiveArch: %{rust_arches}
- rust-isahc
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-ivf
ExclusiveArch: %{rust_arches}
- rust-javascriptcore-rs
ExclusiveArch: %{rust_arches}
- rust-javascriptcore-rs-sys
ExclusiveArch: %{rust_arches}
- rust-jetscii
ExclusiveArch: %{rust_arches}
- rust-jieba-rs
ExclusiveArch: %{rust_arches}
- rust-jobserver
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-jwalk
ExclusiveArch: %{rust_arches}
- rust-keccak
ExclusiveArch: %{rust_arches}
- rust-khronos_api
ExclusiveArch: %{rust_arches}
- rust-kstring
ExclusiveArch: %{rust_arches}
- rust-kv-log-macro
ExclusiveArch: %{rust_arches}
- rust-lab
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-letter-avatar
ExclusiveArch: %{rust_arches}
- rust-lexical-core
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-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-libslirp
ExclusiveArch: %{rust_arches}
- rust-libslirp-sys
ExclusiveArch: %{rust_arches}
- rust-libsqlite3-sys
ExclusiveArch: %{rust_arches}
- rust-libssh2-sys
ExclusiveArch: %{rust_arches}
- rust-libsystemd
ExclusiveArch: %{rust_arches}
- rust-libudev
ExclusiveArch: %{rust_arches}
- rust-libudev-sys
ExclusiveArch: %{rust_arches}
- rust-libxml
ExclusiveArch: %{rust_arches}
- rust-libz-sys
ExclusiveArch: %{rust_arches}
- rust-line-wrap
ExclusiveArch: %{rust_arches}
- rust-line_drawing
ExclusiveArch: %{rust_arches}
- rust-link-cplusplus
ExclusiveArch: %{rust_arches}
- rust-linked-hash-map
ExclusiveArch: %{rust_arches}
- rust-linkify
ExclusiveArch: %{rust_arches}
- rust-lipsum
ExclusiveArch: %{rust_arches}
- rust-liquid
ExclusiveArch: %{rust_arches}
- rust-liquid-core
ExclusiveArch: %{rust_arches}
- rust-liquid-derive
ExclusiveArch: %{rust_arches}
- rust-liquid-lib
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-lru_time_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-macro-attr
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-matrixmultiply
ExclusiveArch: %{rust_arches}
- rust-maxminddb
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-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-memoffset
ExclusiveArch: %{rust_arches}
- rust-memoffset0.5
ExclusiveArch: %{rust_arches}
- rust-metadeps
ExclusiveArch: %{rust_arches}
- rust-migrations_internals
ExclusiveArch: %{rust_arches}
- rust-migrations_macros
ExclusiveArch: %{rust_arches}
- rust-mime
ExclusiveArch: %{rust_arches}
- rust-mime-sniffer
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-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-mktemp
ExclusiveArch: %{rust_arches}
- rust-mnt
ExclusiveArch: %{rust_arches}
- rust-mockito
ExclusiveArch: %{rust_arches}
- rust-modifier
ExclusiveArch: %{rust_arches}
- rust-more-asserts
ExclusiveArch: %{rust_arches}
- rust-muldiv
ExclusiveArch: %{rust_arches}
- rust-multimap
ExclusiveArch: %{rust_arches}
- rust-multipart
ExclusiveArch: %{rust_arches}
- rust-mustache
ExclusiveArch: %{rust_arches}
- rust-nasm-rs
ExclusiveArch: %{rust_arches}
- rust-native-tls
ExclusiveArch: %{rust_arches}
- rust-natord
ExclusiveArch: %{rust_arches}
- rust-nb-connect
ExclusiveArch: %{rust_arches}
- rust-net2
ExclusiveArch: %{rust_arches}
- rust-netlink-packet-core
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-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-nickel
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-no-panic
ExclusiveArch: %{rust_arches}
- rust-nodrop
ExclusiveArch: %{rust_arches}
- rust-nom
ExclusiveArch: %{rust_arches}
- rust-nom4
ExclusiveArch: %{rust_arches}
- rust-nom5
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-complex
ExclusiveArch: %{rust_arches}
- rust-num-derive
ExclusiveArch: %{rust_arches}
- rust-num-integer
ExclusiveArch: %{rust_arches}
- rust-num-iter
ExclusiveArch: %{rust_arches}
- rust-num-rational
ExclusiveArch: %{rust_arches}
- rust-num-traits
ExclusiveArch: %{rust_arches}
- rust-num-traits0.1
ExclusiveArch: %{rust_arches}
- rust-num_cpus
ExclusiveArch: %{rust_arches}
- rust-number_prefix
ExclusiveArch: %{rust_arches}
- rust-numtoa
ExclusiveArch: %{rust_arches}
- rust-obfstr
ExclusiveArch: %{rust_arches}
- rust-object
ExclusiveArch: %{rust_arches}
- rust-odds
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-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-ord_subset
ExclusiveArch: %{rust_arches}
- rust-ordered-float
ExclusiveArch: %{rust_arches}
- rust-ordered-multimap
ExclusiveArch: %{rust_arches}
- rust-os_info
ExclusiveArch: %{rust_arches}
- rust-os_pipe
ExclusiveArch: %{rust_arches}
- rust-os_str_bytes
ExclusiveArch: %{rust_arches}
- rust-osmesa-sys
ExclusiveArch: %{rust_arches}
- rust-osstrtools
ExclusiveArch: %{rust_arches}
- rust-ostree
ExclusiveArch: %{rust_arches}
- rust-ostree-sys
ExclusiveArch: %{rust_arches}
- rust-owned-alloc
ExclusiveArch: %{rust_arches}
- rust-owned_ttf_parser
ExclusiveArch: %{rust_arches}
- rust-owning_ref
ExclusiveArch: %{rust_arches}
- rust-packaging
ExclusiveArch: %{rust_arches}
- rust-pad
ExclusiveArch: %{rust_arches}
- rust-pager
ExclusiveArch: %{rust_arches}
- rust-palette
ExclusiveArch: %{rust_arches}
- rust-palette_derive
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-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-paste
ExclusiveArch: %{rust_arches}
- rust-paste-impl
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-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-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-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_macros
ExclusiveArch: %{rust_arches}
- rust-phf_macros0.7
ExclusiveArch: %{rust_arches}
- rust-phf_shared
ExclusiveArch: %{rust_arches}
- rust-phf_shared0.7
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-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-pkcs11
ExclusiveArch: %{rust_arches}
- rust-pkg-config
ExclusiveArch: %{rust_arches}
- rust-plain
ExclusiveArch: %{rust_arches}
- rust-platform-dirs
ExclusiveArch: %{rust_arches}
- rust-platforms
ExclusiveArch: %{rust_arches}
- rust-plist
ExclusiveArch: %{rust_arches}
- rust-plotters
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-podio
ExclusiveArch: %{rust_arches}
- rust-polling
ExclusiveArch: %{rust_arches}
- rust-polyval
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-pretty-git-prompt
ExclusiveArch: %{rust_arches}
- rust-pretty-hex
ExclusiveArch: %{rust_arches}
- rust-pretty_assertions
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-error
ExclusiveArch: %{rust_arches}
- rust-proc-macro-error-attr
ExclusiveArch: %{rust_arches}
- rust-proc-macro-hack
ExclusiveArch: %{rust_arches}
- rust-proc-macro-nested
ExclusiveArch: %{rust_arches}
- rust-proc-macro2
ExclusiveArch: %{rust_arches}
- rust-proc-macro2-0.4
ExclusiveArch: %{rust_arches}
- rust-proc-quote
ExclusiveArch: %{rust_arches}
- rust-proc-quote-impl
ExclusiveArch: %{rust_arches}
- rust-procedural-masquerade
ExclusiveArch: %{rust_arches}
- rust-process_path
ExclusiveArch: %{rust_arches}
- rust-procfs
ExclusiveArch: %{rust_arches}
- rust-procfs0.8
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-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-psm
ExclusiveArch: %{rust_arches}
- rust-psutil
ExclusiveArch: %{rust_arches}
- rust-publicsuffix
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-macros
ExclusiveArch: %{rust_arches}
- rust-pyo3-macros-backend
ExclusiveArch: %{rust_arches}
- rust-python3-sys
ExclusiveArch: %{rust_arches}
- rust-qr2term
ExclusiveArch: %{rust_arches}
- rust-qrcode
ExclusiveArch: %{rust_arches}
- rust-quick-error
ExclusiveArch: %{rust_arches}
- rust-quick-error1
ExclusiveArch: %{rust_arches}
- rust-quick-xml
ExclusiveArch: %{rust_arches}
- rust-quickcheck
ExclusiveArch: %{rust_arches}
- rust-quickcheck0.6
ExclusiveArch: %{rust_arches}
- rust-quickcheck_macros
ExclusiveArch: %{rust_arches}
- rust-quickersort
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-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_distr0.2
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_xoshiro
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-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-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-remove_dir_all
ExclusiveArch: %{rust_arches}
- rust-reqwest
ExclusiveArch: %{rust_arches}
- rust-reqwest0.10
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-ripgrep
ExclusiveArch: %{rust_arches}
- rust-rle-decode-fast
ExclusiveArch: %{rust_arches}
- rust-rmp
ExclusiveArch: %{rust_arches}
- rust-rmp-serde
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-ruma
ExclusiveArch: %{rust_arches}
- rust-ruma-api
ExclusiveArch: %{rust_arches}
- rust-ruma-api-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-appservice-api
ExclusiveArch: %{rust_arches}
- rust-ruma-client-api
ExclusiveArch: %{rust_arches}
- rust-ruma-common
ExclusiveArch: %{rust_arches}
- rust-ruma-events
ExclusiveArch: %{rust_arches}
- rust-ruma-events-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-federation-api
ExclusiveArch: %{rust_arches}
- rust-ruma-identifiers
ExclusiveArch: %{rust_arches}
- rust-ruma-identifiers-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-identifiers-validation
ExclusiveArch: %{rust_arches}
- rust-ruma-identity-service-api
ExclusiveArch: %{rust_arches}
- rust-ruma-push-gateway-api
ExclusiveArch: %{rust_arches}
- rust-ruma-serde
ExclusiveArch: %{rust_arches}
- rust-ruma-serde-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-signatures
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-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-rustdoc-stripper
ExclusiveArch: %{rust_arches}
- rust-rustfilt
ExclusiveArch: %{rust_arches}
- rust-rustfix
ExclusiveArch: %{rust_arches}
- rust-rustio
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-safemem
ExclusiveArch: %{rust_arches}
- rust-same-file
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-sct
ExclusiveArch: %{rust_arches}
- rust-sd
ExclusiveArch: %{rust_arches}
- rust-sd-notify
ExclusiveArch: %{rust_arches}
- rust-seahash
ExclusiveArch: %{rust_arches}
- rust-secrecy
ExclusiveArch: %{rust_arches}
- rust-secret-service
ExclusiveArch: %{rust_arches}
- rust-semver
ExclusiveArch: %{rust_arches}
- rust-semver-parser
ExclusiveArch: %{rust_arches}
- rust-semver-parser0.7
ExclusiveArch: %{rust_arches}
- rust-semver-parser0.9
ExclusiveArch: %{rust_arches}
- rust-semver0.10
ExclusiveArch: %{rust_arches}
- rust-semver0.9
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_bytes
ExclusiveArch: %{rust_arches}
- rust-serde_cbor
ExclusiveArch: %{rust_arches}
- rust-serde_derive
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_macros
ExclusiveArch: %{rust_arches}
- rust-serde_yaml
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-sha-1
ExclusiveArch: %{rust_arches}
- rust-sha1
ExclusiveArch: %{rust_arches}
- rust-sha2
ExclusiveArch: %{rust_arches}
- rust-sha3
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-shlex
ExclusiveArch: %{rust_arches}
- rust-signal-hook
ExclusiveArch: %{rust_arches}
- rust-signal-hook-registry
ExclusiveArch: %{rust_arches}
- rust-silver
ExclusiveArch: %{rust_arches}
- rust-simd_helpers
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-slash-formatter
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-smallvec
ExclusiveArch: %{rust_arches}
- rust-smart-default
ExclusiveArch: %{rust_arches}
- rust-smawk
ExclusiveArch: %{rust_arches}
- rust-smithay-client-toolkit
ExclusiveArch: %{rust_arches}
- rust-smithay-clipboard
ExclusiveArch: %{rust_arches}
- rust-snafu
ExclusiveArch: %{rust_arches}
- rust-snafu-derive
ExclusiveArch: %{rust_arches}
- rust-snake_case
ExclusiveArch: %{rust_arches}
- rust-snowflake
ExclusiveArch: %{rust_arches}
- rust-socket2
ExclusiveArch: %{rust_arches}
- rust-soup-sys
ExclusiveArch: %{rust_arches}
- rust-sourceview
ExclusiveArch: %{rust_arches}
- rust-spin
ExclusiveArch: %{rust_arches}
- rust-spin_on
ExclusiveArch: %{rust_arches}
- rust-spinning_top
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_module_config_derive
ExclusiveArch: %{rust_arches}
- rust-static_assertions
ExclusiveArch: %{rust_arches}
- rust-statistical
ExclusiveArch: %{rust_arches}
- rust-stb_truetype
ExclusiveArch: %{rust_arches}
- rust-stream-cipher
ExclusiveArch: %{rust_arches}
- rust-streaming-stats
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-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-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-svg_metadata
ExclusiveArch: %{rust_arches}
- rust-sxd-document
ExclusiveArch: %{rust_arches}
- rust-syn
ExclusiveArch: %{rust_arches}
- rust-syn-mid
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-sysinfo
ExclusiveArch: %{rust_arches}
- rust-system-deps
ExclusiveArch: %{rust_arches}
- rust-tabwriter
ExclusiveArch: %{rust_arches}
- rust-take
ExclusiveArch: %{rust_arches}
- rust-take_mut
ExclusiveArch: %{rust_arches}
- rust-tap
ExclusiveArch: %{rust_arches}
- rust-tar
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-tendril
ExclusiveArch: %{rust_arches}
- rust-tera
ExclusiveArch: %{rust_arches}
- rust-term
ExclusiveArch: %{rust_arches}
- rust-term_grid
ExclusiveArch: %{rust_arches}
- rust-term_size
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-test-assembler
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-textwrap0.12
ExclusiveArch: %{rust_arches}
- rust-thiserror
ExclusiveArch: %{rust_arches}
- rust-thiserror-impl
ExclusiveArch: %{rust_arches}
- rust-thread-id
ExclusiveArch: %{rust_arches}
- rust-thread-scoped
ExclusiveArch: %{rust_arches}
- rust-thread_local
ExclusiveArch: %{rust_arches}
- rust-threadpool
ExclusiveArch: %{rust_arches}
- rust-tiff
ExclusiveArch: %{rust_arches}
- rust-tiger-digest
ExclusiveArch: %{rust_arches}
- rust-time
ExclusiveArch: %{rust_arches}
- rust-time-macros
ExclusiveArch: %{rust_arches}
- rust-time-macros-impl
ExclusiveArch: %{rust_arches}
- rust-time0.1
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_http
ExclusiveArch: %{rust_arches}
- rust-tinytemplate
ExclusiveArch: %{rust_arches}
- rust-tinyvec
ExclusiveArch: %{rust_arches}
- rust-tinyvec0.3
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-io-pool
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-socks
ExclusiveArch: %{rust_arches}
- rust-tokio-socks0.3
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.2
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-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-treebitmap
ExclusiveArch: %{rust_arches}
- rust-treeline
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-try-lock
ExclusiveArch: %{rust_arches}
- rust-try_from
ExclusiveArch: %{rust_arches}
- rust-try_or
ExclusiveArch: %{rust_arches}
- rust-trybuild
ExclusiveArch: %{rust_arches}
- rust-tss-esapi
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-typeable
ExclusiveArch: %{rust_arches}
- rust-typed-arena
ExclusiveArch: %{rust_arches}
- rust-typemap
ExclusiveArch: %{rust_arches}
- rust-typenum
ExclusiveArch: %{rust_arches}
- rust-typetag-impl
ExclusiveArch: %{rust_arches}
- rust-ucd-parse
ExclusiveArch: %{rust_arches}
- rust-ucd-trie
ExclusiveArch: %{rust_arches}
- rust-ucd-util
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-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-normalization
ExclusiveArch: %{rust_arches}
- rust-unicode-segmentation
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-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_escape
ExclusiveArch: %{rust_arches}
- rust-v_escape_derive
ExclusiveArch: %{rust_arches}
- rust-v_frame
ExclusiveArch: %{rust_arches}
- rust-v_htmlescape
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-vec-arena
ExclusiveArch: %{rust_arches}
- rust-vec_map
ExclusiveArch: %{rust_arches}
- rust-vergen
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-vmw_backdoor
ExclusiveArch: %{rust_arches}
- rust-void
ExclusiveArch: %{rust_arches}
- rust-vte
ExclusiveArch: %{rust_arches}
- rust-vte0.3
ExclusiveArch: %{rust_arches}
- rust-vte_generate_state_changes
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-macro
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-macro-support
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-shared
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-test-macro
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-webkit2gtk
ExclusiveArch: %{rust_arches}
- rust-webkit2gtk-sys
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-wild
ExclusiveArch: %{rust_arches}
- rust-wildmatch
ExclusiveArch: %{rust_arches}
- rust-winit
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-xkbcommon
ExclusiveArch: %{rust_arches}
- rust-xml-rs
ExclusiveArch: %{rust_arches}
- rust-xml5ever
ExclusiveArch: %{rust_arches}
- rust-xmlparser
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-ytop
ExclusiveArch: %{rust_arches}
- rust-yubibomb
ExclusiveArch: %{rust_arches}
- rust-yup-oauth2
ExclusiveArch: %{rust_arches}
- rust-zbus
ExclusiveArch: %{rust_arches}
- rust-zbus_macros
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-zoneinfo_compiled
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}
- 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
- 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}
- 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 ppc64le s390x
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tarantool
ExclusiveArch: %{ix86} x86_64
- tboot
ExclusiveArch: %{ix86} x86_64
- tdlib
ExclusiveArch: x86_64
- 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}
- topojson-client
ExclusiveArch: %{nodejs_arches} noarch
- topojson-server
ExclusiveArch: %{nodejs_arches} noarch
- topojson-simplify
ExclusiveArch: %{nodejs_arches} noarch
- 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
- ugene
ExclusiveArch: %{ix86} x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
- uglify-js1
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- unetbootin
ExclusiveArch: %{ix86} x86_64
- ursa-major
ExclusiveArch: noarch aarch64 ppc64le s390x x86_64
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vapoursynth
ExclusiveArch: %{ix86} x86_64
- 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
- virtualplanet
ExclusiveArch: %{fpc_arches}
- vkd3d
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- vmaf
ExclusiveArch: x86_64
- vmem
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
- zeromq-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ng
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- zola
ExclusiveArch: %{rust_arches}
3 years, 1 month
Architecture specific change in rpms/ceph.git
by githook-noreply@fedoraproject.org
The package rpms/ceph.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/ceph.git/commit/?id=3aa610e268069....
Change:
+%ifarch x86_64 ppc64le
Thanks.
Full change:
============
commit 3aa610e2680695642bdb5188fd0589c398314239
Author: Kaleb S. KEITHLEY <kkeithle(a)redhat.com>
Date: Sat Mar 20 05:49:12 2021 -0400
16.1.0 RC (ceph-16.1.0-944-ge53ee8bd)
Signed-off-by: Kaleb S. KEITHLEY <kkeithle(a)redhat.com>
diff --git a/ceph.spec b/ceph.spec
index f2f92d4..1190c81 100644
--- a/ceph.spec
+++ b/ceph.spec
@@ -33,6 +33,15 @@
%endif
%if 0%{?fedora} || 0%{?rhel}
%bcond_without selinux
+%ifarch x86_64 ppc64le
+%global _system_pmdk 1
+%bcond_without rbd_rwl_cache
+%bcond_without rbd_ssd_cache
+%else
+%global _system_pmdk 0
+%bcond_with rbd_rwl_cache
+%bcond_with rbd_ssd_cache
+%endif
%if 0%{?rhel} >= 8
%bcond_with cephfs_java
%else
@@ -52,8 +61,14 @@
%bcond_with libradosstriper
%ifarch x86_64 aarch64 ppc64le
%bcond_without lttng
+%global _system_pmdk 1
+%bcond_without rbd_rwl_cache
+%bcond_without rbd_ssd_cache
%else
%bcond_with lttng
+%global _system_pmdk 0
+%bcond_with rbd_rwl_cache
+%bcond_with rbd_ssd_cache
%endif
%bcond_with ocf
%bcond_with selinux
@@ -64,8 +79,6 @@
%endif
%bcond_with seastar
%bcond_with jaeger
-%bcond_with rbd_rwl_cache
-%bcond_with rbd_ssd_cache
%if 0%{?fedora} || 0%{?suse_version} >= 1500
# distros that ship cmd2 and/or colorama
%bcond_without cephfs_shell
@@ -113,7 +126,7 @@
#################################################################################
Name: ceph
Version: 16.1.0
-Release: 0.6.snapshot%{?dist}
+Release: 0.7.snapshot%{?dist}
%if 0%{?fedora} || 0%{?rhel}
Epoch: 2
%endif
@@ -131,7 +144,7 @@ Group: System/Filesystems
URL: http://ceph.com/
#Source0: %%{?_remote_tarball_prefix}ceph-%%{version}.tar.gz
# https://2.chacra.ceph.com/r/ceph/pacific/abe639e639eb...
-Source0: ceph-16.1.0-308-gabe639eb.tar.bz2
+Source0: ceph-16.1.0-944-ge53ee8bd.tar.bz2
Patch0001: 0001-src-common-crc32c_intel_fast.patch
Patch0002: 0002-src-common-CMakeLists.txt.patch
Patch0003: 0003-src-common-bitstr.h.patch
@@ -253,6 +266,10 @@ BuildRequires: nlohmann_json-devel
%endif
BuildRequires: libevent-devel
BuildRequires: yaml-cpp-devel
+%if 0%{?_system_pmdk}
+BuildRequires: libpmem-devel
+BuildRequires: libpmemobj-devel
+%endif
%endif
%if 0%{with seastar}
BuildRequires: c-ares-devel
@@ -1176,7 +1193,7 @@ This package provides Ceph default alerts for Prometheus.
# common
#################################################################################
%prep
-%autosetup -p1 -n ceph-16.1.0-308-gabe639eb
+%autosetup -p1 -n ceph-16.1.0-944-ge53ee8bd
%ifarch x86_64
patch -p1 < %{SOURCE1}
%endif
@@ -1320,6 +1337,9 @@ cd build
-DBOOST_J=$CEPH_SMP_NCPUS \
%if 0%{with ceph_test_package}
-DWITH_SYSTEM_GTEST=ON \
+%endif
+%if 0%{?_system_pmdk}
+ -DWITH_SYSTEM_PMDK:BOOL=ON \
%endif
-DWITH_GRAFANA=ON
@@ -1999,6 +2019,8 @@ fi
%{_bindir}/radosgw-token
%{_bindir}/radosgw-es
%{_bindir}/radosgw-object-expirer
+%{_bindir}/rgw-gap-list
+%{_bindir}/rgw-gap-list-comparator
%{_bindir}/rgw-orphan-list
%{_libdir}/libradosgw.so*
%{_mandir}/man8/radosgw.8*
@@ -2432,6 +2454,9 @@ exit 0
%config %{_sysconfdir}/prometheus/ceph/ceph_default_alerts.yml
%changelog
+* Sat Mar 20 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.1.0-0.7.snapshot
+- 16.1.0 RC (ceph-16.1.0-944-ge53ee8bd)
+
* Fri Mar 19 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.1.0-0.6.snapshot
- 16.1.0 RC (ceph-16.1.0-308-gabe639eb)
diff --git a/sources b/sources
index 36b795e..ff38237 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (ceph-16.1.0-308-gabe639eb.tar.bz2) = 41433257c59a6a9ef852e3810f3ed244d143ba7874a0f896fb5e94b7ed48f282c59b06b406df9cfb4b9b5a48bfdf7ce23acfa1cc82ee8b61c171bfefc75ead98
+SHA512 (ceph-16.1.0-944-ge53ee8bd.tar.bz2) = 6105a008088fb09e0ee456da14bdfe714188f78c3ac22df611b212a34f7a8e13ee8a00fe88698a3633eda8380892297e94530dd9e8736c00dd3d893bd2380b94
3 years, 1 month
[Report] Packages Restricting Arches
by root
List of packages currently excluding arches (1924)
===========================================
- 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}
- OpenImageIO
ExclusiveArch: x86_64 ppc64le
- 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
- aboot
ExclusiveArch: alpha
- accel-config
ExclusiveArch: 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
- anet
ExclusiveArch: %{GPRbuild_arches}
- anki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- apmd
ExclusiveArch: %{ix86}
- appstream-generator
ExclusiveArch: %{ldc_arches}
- arduino
ExclusiveArch: %{go_arches}
- arduino-builder
ExclusiveArch: %{go_arches}
- arm-trusted-firmware
ExclusiveArch: aarch64
- aunit
ExclusiveArch: %GPRbuild_arches
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- bareftp
ExclusiveArch: %{mono_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
- bless
ExclusiveArch: %mono_arches
- bpftrace
ExclusiveArch: x86_64 %{power64} aarch64 s390x
- calamares
ExclusiveArch: %{ix86} x86_64
- 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 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
- 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 %{ix86} aarch64 ppc64 ppc64le
- cryptobone
ExclusiveArch: x86_64 %{ix86} ppc64 ppc64le aarch64
- daq
ExclusiveArch: x86_64 aarch64
- darktable
ExclusiveArch: x86_64 aarch64
ExclusiveArch: x86_64 ppc64le
- 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: %ix86 x86_64 aarch64
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dolphin-emu
ExclusiveArch: x86_64 aarch64 ppc64le
- dotnet-build-reference-packages
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet3.1
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet5.0
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet5.0-build-reference-packages
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- doublecmd
ExclusiveArch: %{ix86} x86_64
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dssi-vst
ExclusiveArch: %{ix86} x86_64
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc64le aarch64
- e3
ExclusiveArch: %{ix86} x86_64
- 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
- embree
ExclusiveArch: x86_64
- enki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- eric
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- extlinux-bootloader
ExclusiveArch: %{arm} aarch64
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- fes
ExclusiveArch: %{ix86} x86_64
- flannel
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- florist
ExclusiveArch: %{GPRbuild_arches}
- 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}
- fx
ExclusiveArch: %{nodejs_arches} noarch
- ga
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- gbrainy
ExclusiveArch: %mono_arches
- gdata-sharp
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}}
- 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-guitar
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
- 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
- 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
- ignition
ExclusiveArch: %{go_arches}
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- intel-gmmlib
ExclusiveArch: x86_64 i686
- 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
- ipw2100-firmware
ExclusiveArch: noarch i386 x86_64
- ipw2200-firmware
ExclusiveArch: noarch i386 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}
- keepass
ExclusiveArch: %{mono_arches}
- kernel
ExclusiveArch: x86_64 s390x %{arm} aarch64 ppc64le
ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le
- 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-kmailtransport
ExclusiveArch: x86_64 %{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}
- 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
- libnxz
ExclusiveArch: ppc64le
- libocxl
ExclusiveArch: ppc64le
- libpmemobj-cpp
ExclusiveArch: x86_64
- 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
- libzfcphbaapi
ExclusiveArch: s390 s390x
- lightdm
ExclusiveArch: x86_64 ppc64le
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 s390x ppc64le
- luxcorerender
ExclusiveArch: x86_64
- mactel-boot
ExclusiveArch: x86_64
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- mantle
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matreshka
ExclusiveArch: %GPRbuild_arches
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mbpfan
ExclusiveArch: x86_64
- mcelog
ExclusiveArch: i686 x86_64
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- megapixels
ExclusiveArch: aarch64 armv7hl
- 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-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
- 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}
- 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}
- 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-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-svgo
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}
- npm-name-cli
ExclusiveArch: %{nodejs_arches} noarch
- ntfs2btrfs
ExclusiveArch: x86_64
- 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-kvm-hook
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- 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-netutils
ExclusiveArch: %{ix86} %{arm}
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- onednn
ExclusiveArch: x86_64 aarch64 ppc64le
- onedrive
ExclusiveArch: %{ldc_arches}
- opae
ExclusiveArch: x86_64
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64
- 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
- paflib
ExclusiveArch: ppc %{power64}
- parsec
ExclusiveArch: %{rust_arches}
- parsec-tool
ExclusiveArch: %{rust_arches}
- pcc
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
- 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}
- psi-plus
ExclusiveArch: %{qt5_qtwebengine_arches}
- 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-rpi-gpio
ExclusiveArch: %{arm} aarch64
- python-setuptools-rust
ExclusiveArch: %{rust_arches}
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- 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}
ExclusiveArch: x86_64 %{ix86}
- quentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- redhat-lsb
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- renderdoc
ExclusiveArch: x86_64
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm}
- rescene
ExclusiveArch: %{mono_arches}
- restsharp
ExclusiveArch: %{mono_arches}
- rhythmbox-alternative-toolbar
ExclusiveArch: %{ix86} %{arm} x86_64 ppc64 ppc64le
- rmd
ExclusiveArch: %{ix86} x86_64
- rocm-runtime
ExclusiveArch: x86_64 aarch64
- rocminfo
ExclusiveArch: x86_64 aarch64
- rpm-ostree
ExclusiveArch: %{rust_arches}
- rr
ExclusiveArch: %{ix86} x86_64
- 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-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-files
ExclusiveArch: %{rust_arches}
- rust-actix-http
ExclusiveArch: %{rust_arches}
- rust-actix-macros
ExclusiveArch: %{rust_arches}
- rust-actix-router
ExclusiveArch: %{rust_arches}
- rust-actix-rt
ExclusiveArch: %{rust_arches}
- rust-actix-server
ExclusiveArch: %{rust_arches}
- rust-actix-server-config
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-actix_derive
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-aes-soft
ExclusiveArch: %{rust_arches}
- rust-afterburn
ExclusiveArch: %{rust_arches}
- rust-ahash
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-alloc-no-stdlib
ExclusiveArch: %{rust_arches}
- rust-alloc-stdlib
ExclusiveArch: %{rust_arches}
- rust-alphanumeric-sort
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-anymap
ExclusiveArch: %{rust_arches}
- rust-aom-sys
ExclusiveArch: %{rust_arches}
- rust-app_dirs
ExclusiveArch: %{rust_arches}
- rust-approx
ExclusiveArch: %{rust_arches}
- rust-arbitrary
ExclusiveArch: %{rust_arches}
- rust-arc-swap
ExclusiveArch: %{rust_arches}
- rust-arg_enum_proc_macro
ExclusiveArch: %{rust_arches}
- rust-argparse
ExclusiveArch: %{rust_arches}
- rust-array-init
ExclusiveArch: %{rust_arches}
- rust-arraydeque
ExclusiveArch: %{rust_arches}
- rust-arrayref
ExclusiveArch: %{rust_arches}
- rust-arrayvec
ExclusiveArch: %{rust_arches}
- rust-article_scraper
ExclusiveArch: %{rust_arches}
- rust-ascii
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-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-compression
ExclusiveArch: %{rust_arches}
- rust-async-io
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-atomicwrites
ExclusiveArch: %{rust_arches}
- rust-attohttpc
ExclusiveArch: %{rust_arches}
- rust-atty
ExclusiveArch: %{rust_arches}
- rust-autocfg
ExclusiveArch: %{rust_arches}
- rust-av-metrics
ExclusiveArch: %{rust_arches}
- rust-average
ExclusiveArch: %{rust_arches}
- rust-awc
ExclusiveArch: %{rust_arches}
- rust-backtrace
ExclusiveArch: %{rust_arches}
- rust-backtrace-sys
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-bat
ExclusiveArch: %{rust_arches}
- rust-battery
ExclusiveArch: %{rust_arches}
- rust-bencher
ExclusiveArch: %{rust_arches}
- rust-better-panic
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-biscuit
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-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.7
ExclusiveArch: %{rust_arches}
- rust-block-cipher
ExclusiveArch: %{rust_arches}
- rust-block-modes
ExclusiveArch: %{rust_arches}
- rust-block-padding
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-brev
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-buf-min
ExclusiveArch: %{rust_arches}
- rust-buf_redux
ExclusiveArch: %{rust_arches}
- rust-bufsize
ExclusiveArch: %{rust_arches}
- rust-bufstream
ExclusiveArch: %{rust_arches}
- rust-build_const
ExclusiveArch: %{rust_arches}
- rust-bumpalo
ExclusiveArch: %{rust_arches}
- rust-byte-tools
ExclusiveArch: %{rust_arches}
- rust-byte-unit
ExclusiveArch: %{rust_arches}
- rust-byte-unit3
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.3
ExclusiveArch: %{rust_arches}
- rust-bytes0.4
ExclusiveArch: %{rust_arches}
- rust-bytes0.5
ExclusiveArch: %{rust_arches}
- rust-bytes0.6
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-c_vec
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-caps
ExclusiveArch: %{rust_arches}
- rust-cargo
ExclusiveArch: %{rust_arches}
- rust-cargo-bloat
ExclusiveArch: %{rust_arches}
- rust-cargo-c
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_metadata
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-cfg-if
ExclusiveArch: %{rust_arches}
- rust-cfg-if0.1
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-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-clang-sys
ExclusiveArch: %{rust_arches}
- rust-clap
ExclusiveArch: %{rust_arches}
- rust-clap2
ExclusiveArch: %{rust_arches}
- rust-clap_derive
ExclusiveArch: %{rust_arches}
- rust-clicolors-control
ExclusiveArch: %{rust_arches}
- 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-compiletest_rs
ExclusiveArch: %{rust_arches}
- rust-comrak
ExclusiveArch: %{rust_arches}
- rust-concurrent-queue
ExclusiveArch: %{rust_arches}
- rust-config
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.9
ExclusiveArch: %{rust_arches}
- rust-const-cstr
ExclusiveArch: %{rust_arches}
- rust-const-random
ExclusiveArch: %{rust_arches}
- rust-const-random-macro
ExclusiveArch: %{rust_arches}
- rust-const_fn
ExclusiveArch: %{rust_arches}
- rust-content_inspector
ExclusiveArch: %{rust_arches}
- rust-conv
ExclusiveArch: %{rust_arches}
- rust-cookie
ExclusiveArch: %{rust_arches}
- rust-cookie_store
ExclusiveArch: %{rust_arches}
- rust-copydeps
ExclusiveArch: %{rust_arches}
- rust-copyless
ExclusiveArch: %{rust_arches}
- rust-copypasta
ExclusiveArch: %{rust_arches}
- rust-coreos-installer
ExclusiveArch: %{rust_arches}
- rust-cpio
ExclusiveArch: %{rust_arches}
- rust-cpp_demangle
ExclusiveArch: %{rust_arches}
- rust-cpuid-bool
ExclusiveArch: %{rust_arches}
- rust-cpython
ExclusiveArch: %{rust_arches}
- rust-crates-io
ExclusiveArch: %{rust_arches}
- rust-crc
ExclusiveArch: %{rust_arches}
- rust-crc-any
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-crosstermion
ExclusiveArch: %{rust_arches}
- rust-crunchy
ExclusiveArch: %{rust_arches}
- rust-crypto-hash
ExclusiveArch: %{rust_arches}
- rust-crypto-mac
ExclusiveArch: %{rust_arches}
- rust-crypto-mac0.8
ExclusiveArch: %{rust_arches}
- rust-cryptovec
ExclusiveArch: %{rust_arches}
- rust-cssparser
ExclusiveArch: %{rust_arches}
- rust-cssparser-macros
ExclusiveArch: %{rust_arches}
- rust-csv
ExclusiveArch: %{rust_arches}
- rust-csv-core
ExclusiveArch: %{rust_arches}
- rust-ctor
ExclusiveArch: %{rust_arches}
- rust-ctr
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-custom_derive
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-darling_core
ExclusiveArch: %{rust_arches}
- rust-darling_macro
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-dbus0.2
ExclusiveArch: %{rust_arches}
- rust-dbus0.6
ExclusiveArch: %{rust_arches}
- rust-dbus0.8
ExclusiveArch: %{rust_arches}
- rust-debug-helper
ExclusiveArch: %{rust_arches}
- rust-decimal
ExclusiveArch: %{rust_arches}
- rust-deflate
ExclusiveArch: %{rust_arches}
- rust-defmac
ExclusiveArch: %{rust_arches}
- rust-delta_e
ExclusiveArch: %{rust_arches}
- rust-derivative
ExclusiveArch: %{rust_arches}
- rust-derive-new
ExclusiveArch: %{rust_arches}
- rust-derive_arbitrary
ExclusiveArch: %{rust_arches}
- rust-derive_builder
ExclusiveArch: %{rust_arches}
- rust-derive_builder_core
ExclusiveArch: %{rust_arches}
- rust-derive_more
ExclusiveArch: %{rust_arches}
- rust-des
ExclusiveArch: %{rust_arches}
- rust-desed
ExclusiveArch: %{rust_arches}
- rust-deunicode
ExclusiveArch: %{rust_arches}
- rust-devicemapper
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-diffus
ExclusiveArch: %{rust_arches}
- rust-diffus-derive
ExclusiveArch: %{rust_arches}
- rust-digest
ExclusiveArch: %{rust_arches}
- rust-digest0.8
ExclusiveArch: %{rust_arches}
- rust-directories
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-diskonaut
ExclusiveArch: %{rust_arches}
- rust-dissimilar
ExclusiveArch: %{rust_arches}
- rust-dlib
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-rs
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-easy-parallel
ExclusiveArch: %{rust_arches}
- rust-edit-distance
ExclusiveArch: %{rust_arches}
- rust-either
ExclusiveArch: %{rust_arches}
- rust-elasticlunr-rs
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-entities
ExclusiveArch: %{rust_arches}
- rust-enum-as-inner
ExclusiveArch: %{rust_arches}
- rust-enum_primitive
ExclusiveArch: %{rust_arches}
- rust-enumflags2
ExclusiveArch: %{rust_arches}
- rust-enumflags2_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-environment
ExclusiveArch: %{rust_arches}
- rust-envsubst
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-euclid
ExclusiveArch: %{rust_arches}
- rust-exa
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-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-fake_clock
ExclusiveArch: %{rust_arches}
- rust-fallible-iterator
ExclusiveArch: %{rust_arches}
- rust-fastrand
ExclusiveArch: %{rust_arches}
- rust-fbthrift_codegen_includer_proc_macro
ExclusiveArch: %{rust_arches}
- rust-fd-find
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-fern
ExclusiveArch: %{rust_arches}
- rust-fever_api
ExclusiveArch: %{rust_arches}
- rust-ffsend
ExclusiveArch: %{rust_arches}
- rust-ffsend-api
ExclusiveArch: %{rust_arches}
- rust-filesize
ExclusiveArch: %{rust_arches}
- rust-filetime
ExclusiveArch: %{rust_arches}
- rust-findshlibs
ExclusiveArch: %{rust_arches}
- rust-fixedbitset
ExclusiveArch: %{rust_arches}
- rust-flame
ExclusiveArch: %{rust_arches}
- rust-flate2
ExclusiveArch: %{rust_arches}
- rust-float-cmp
ExclusiveArch: %{rust_arches}
- rust-float-cmp0.6
ExclusiveArch: %{rust_arches}
- rust-float-ord
ExclusiveArch: %{rust_arches}
- rust-flume
ExclusiveArch: %{rust_arches}
- rust-fnv
ExclusiveArch: %{rust_arches}
- rust-font-kit
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-fs2
ExclusiveArch: %{rust_arches}
- rust-fs_extra
ExclusiveArch: %{rust_arches}
- rust-funty
ExclusiveArch: %{rust_arches}
- rust-fuse
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-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-gcsf
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-generic-array
ExclusiveArch: %{rust_arches}
- rust-generic-array0.12
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-gettext-rs
ExclusiveArch: %{rust_arches}
- rust-gettext-sys
ExclusiveArch: %{rust_arches}
- rust-ghash
ExclusiveArch: %{rust_arches}
- rust-ghost
ExclusiveArch: %{rust_arches}
- rust-gif
ExclusiveArch: %{rust_arches}
- rust-gif0.10
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-git2
ExclusiveArch: %{rust_arches}
- rust-git2-curl
ExclusiveArch: %{rust_arches}
- rust-gitui
ExclusiveArch: %{rust_arches}
- rust-gl_generator
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-gobject-sys
ExclusiveArch: %{rust_arches}
- rust-goblin
ExclusiveArch: %{rust_arches}
- rust-google-drive3-fork
ExclusiveArch: %{rust_arches}
- rust-gptman
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-gspell
ExclusiveArch: %{rust_arches}
- rust-gspell-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-macros
ExclusiveArch: %{rust_arches}
- rust-gtk-rs-lgpl-docs
ExclusiveArch: %{rust_arches}
- rust-gtk-source-sys
ExclusiveArch: %{rust_arches}
- rust-gtk-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-hamcrest
ExclusiveArch: %{rust_arches}
- rust-handlebars
ExclusiveArch: %{rust_arches}
- rust-hashbrown
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-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-hkdf
ExclusiveArch: %{rust_arches}
- rust-hmac
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-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-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-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-i3ipc
ExclusiveArch: %{rust_arches}
- rust-id_tree
ExclusiveArch: %{rust_arches}
- rust-ident_case
ExclusiveArch: %{rust_arches}
- rust-idna
ExclusiveArch: %{rust_arches}
- rust-idna0.1
ExclusiveArch: %{rust_arches}
- rust-ignore
ExclusiveArch: %{rust_arches}
- rust-im-rc
ExclusiveArch: %{rust_arches}
- rust-image
ExclusiveArch: %{rust_arches}
- rust-imgref
ExclusiveArch: %{rust_arches}
- rust-indexmap
ExclusiveArch: %{rust_arches}
- rust-indicatif
ExclusiveArch: %{rust_arches}
- rust-indoc
ExclusiveArch: %{rust_arches}
- rust-inflate
ExclusiveArch: %{rust_arches}
- rust-inotify
ExclusiveArch: %{rust_arches}
- rust-inotify-sys
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-invalidstring
ExclusiveArch: %{rust_arches}
- rust-inventory
ExclusiveArch: %{rust_arches}
- rust-inventory-impl
ExclusiveArch: %{rust_arches}
- rust-iocuddle
ExclusiveArch: %{rust_arches}
- rust-iovec
ExclusiveArch: %{rust_arches}
- rust-ipnet
ExclusiveArch: %{rust_arches}
- rust-ipnetwork
ExclusiveArch: %{rust_arches}
- rust-iron
ExclusiveArch: %{rust_arches}
- rust-isahc
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-ivf
ExclusiveArch: %{rust_arches}
- rust-javascriptcore-rs
ExclusiveArch: %{rust_arches}
- rust-javascriptcore-rs-sys
ExclusiveArch: %{rust_arches}
- rust-jetscii
ExclusiveArch: %{rust_arches}
- rust-jieba-rs
ExclusiveArch: %{rust_arches}
- rust-jobserver
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-jwalk
ExclusiveArch: %{rust_arches}
- rust-keccak
ExclusiveArch: %{rust_arches}
- rust-khronos_api
ExclusiveArch: %{rust_arches}
- rust-kstring
ExclusiveArch: %{rust_arches}
- rust-kv-log-macro
ExclusiveArch: %{rust_arches}
- rust-lab
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-letter-avatar
ExclusiveArch: %{rust_arches}
- rust-lexical-core
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-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-libslirp
ExclusiveArch: %{rust_arches}
- rust-libslirp-sys
ExclusiveArch: %{rust_arches}
- rust-libsqlite3-sys
ExclusiveArch: %{rust_arches}
- rust-libssh2-sys
ExclusiveArch: %{rust_arches}
- rust-libsystemd
ExclusiveArch: %{rust_arches}
- rust-libudev
ExclusiveArch: %{rust_arches}
- rust-libudev-sys
ExclusiveArch: %{rust_arches}
- rust-libxml
ExclusiveArch: %{rust_arches}
- rust-libz-sys
ExclusiveArch: %{rust_arches}
- rust-line-wrap
ExclusiveArch: %{rust_arches}
- rust-line_drawing
ExclusiveArch: %{rust_arches}
- rust-link-cplusplus
ExclusiveArch: %{rust_arches}
- rust-linked-hash-map
ExclusiveArch: %{rust_arches}
- rust-linkify
ExclusiveArch: %{rust_arches}
- rust-lipsum
ExclusiveArch: %{rust_arches}
- rust-liquid
ExclusiveArch: %{rust_arches}
- rust-liquid-core
ExclusiveArch: %{rust_arches}
- rust-liquid-derive
ExclusiveArch: %{rust_arches}
- rust-liquid-lib
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-lru_time_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-macro-attr
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-matrixmultiply
ExclusiveArch: %{rust_arches}
- rust-maxminddb
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-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-memoffset
ExclusiveArch: %{rust_arches}
- rust-memoffset0.5
ExclusiveArch: %{rust_arches}
- rust-metadeps
ExclusiveArch: %{rust_arches}
- rust-migrations_internals
ExclusiveArch: %{rust_arches}
- rust-migrations_macros
ExclusiveArch: %{rust_arches}
- rust-mime
ExclusiveArch: %{rust_arches}
- rust-mime-sniffer
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-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-mktemp
ExclusiveArch: %{rust_arches}
- rust-mnt
ExclusiveArch: %{rust_arches}
- rust-mockito
ExclusiveArch: %{rust_arches}
- rust-modifier
ExclusiveArch: %{rust_arches}
- rust-more-asserts
ExclusiveArch: %{rust_arches}
- rust-muldiv
ExclusiveArch: %{rust_arches}
- rust-multimap
ExclusiveArch: %{rust_arches}
- rust-multipart
ExclusiveArch: %{rust_arches}
- rust-mustache
ExclusiveArch: %{rust_arches}
- rust-nasm-rs
ExclusiveArch: %{rust_arches}
- rust-native-tls
ExclusiveArch: %{rust_arches}
- rust-natord
ExclusiveArch: %{rust_arches}
- rust-nb-connect
ExclusiveArch: %{rust_arches}
- rust-net2
ExclusiveArch: %{rust_arches}
- rust-netlink-packet-core
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-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-nickel
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-no-panic
ExclusiveArch: %{rust_arches}
- rust-nodrop
ExclusiveArch: %{rust_arches}
- rust-nom
ExclusiveArch: %{rust_arches}
- rust-nom4
ExclusiveArch: %{rust_arches}
- rust-nom5
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-complex
ExclusiveArch: %{rust_arches}
- rust-num-derive
ExclusiveArch: %{rust_arches}
- rust-num-integer
ExclusiveArch: %{rust_arches}
- rust-num-iter
ExclusiveArch: %{rust_arches}
- rust-num-rational
ExclusiveArch: %{rust_arches}
- rust-num-traits
ExclusiveArch: %{rust_arches}
- rust-num-traits0.1
ExclusiveArch: %{rust_arches}
- rust-num_cpus
ExclusiveArch: %{rust_arches}
- rust-number_prefix
ExclusiveArch: %{rust_arches}
- rust-numtoa
ExclusiveArch: %{rust_arches}
- rust-obfstr
ExclusiveArch: %{rust_arches}
- rust-object
ExclusiveArch: %{rust_arches}
- rust-odds
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-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-ord_subset
ExclusiveArch: %{rust_arches}
- rust-ordered-float
ExclusiveArch: %{rust_arches}
- rust-ordered-multimap
ExclusiveArch: %{rust_arches}
- rust-os_info
ExclusiveArch: %{rust_arches}
- rust-os_pipe
ExclusiveArch: %{rust_arches}
- rust-os_str_bytes
ExclusiveArch: %{rust_arches}
- rust-osmesa-sys
ExclusiveArch: %{rust_arches}
- rust-osstrtools
ExclusiveArch: %{rust_arches}
- rust-ostree
ExclusiveArch: %{rust_arches}
- rust-ostree-sys
ExclusiveArch: %{rust_arches}
- rust-owned-alloc
ExclusiveArch: %{rust_arches}
- rust-owned_ttf_parser
ExclusiveArch: %{rust_arches}
- rust-owning_ref
ExclusiveArch: %{rust_arches}
- rust-packaging
ExclusiveArch: %{rust_arches}
- rust-pad
ExclusiveArch: %{rust_arches}
- rust-pager
ExclusiveArch: %{rust_arches}
- rust-palette
ExclusiveArch: %{rust_arches}
- rust-palette_derive
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-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-paste
ExclusiveArch: %{rust_arches}
- rust-paste-impl
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-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-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-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_macros
ExclusiveArch: %{rust_arches}
- rust-phf_macros0.7
ExclusiveArch: %{rust_arches}
- rust-phf_shared
ExclusiveArch: %{rust_arches}
- rust-phf_shared0.7
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-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-pkcs11
ExclusiveArch: %{rust_arches}
- rust-pkg-config
ExclusiveArch: %{rust_arches}
- rust-plain
ExclusiveArch: %{rust_arches}
- rust-platform-dirs
ExclusiveArch: %{rust_arches}
- rust-platforms
ExclusiveArch: %{rust_arches}
- rust-plist
ExclusiveArch: %{rust_arches}
- rust-plotters
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-podio
ExclusiveArch: %{rust_arches}
- rust-polling
ExclusiveArch: %{rust_arches}
- rust-polyval
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-pretty-git-prompt
ExclusiveArch: %{rust_arches}
- rust-pretty-hex
ExclusiveArch: %{rust_arches}
- rust-pretty_assertions
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-error
ExclusiveArch: %{rust_arches}
- rust-proc-macro-error-attr
ExclusiveArch: %{rust_arches}
- rust-proc-macro-hack
ExclusiveArch: %{rust_arches}
- rust-proc-macro-nested
ExclusiveArch: %{rust_arches}
- rust-proc-macro2
ExclusiveArch: %{rust_arches}
- rust-proc-macro2-0.4
ExclusiveArch: %{rust_arches}
- rust-proc-quote
ExclusiveArch: %{rust_arches}
- rust-proc-quote-impl
ExclusiveArch: %{rust_arches}
- rust-procedural-masquerade
ExclusiveArch: %{rust_arches}
- rust-process_path
ExclusiveArch: %{rust_arches}
- rust-procfs
ExclusiveArch: %{rust_arches}
- rust-procfs0.8
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-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-psm
ExclusiveArch: %{rust_arches}
- rust-psutil
ExclusiveArch: %{rust_arches}
- rust-publicsuffix
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-macros
ExclusiveArch: %{rust_arches}
- rust-pyo3-macros-backend
ExclusiveArch: %{rust_arches}
- rust-python3-sys
ExclusiveArch: %{rust_arches}
- rust-qr2term
ExclusiveArch: %{rust_arches}
- rust-qrcode
ExclusiveArch: %{rust_arches}
- rust-quick-error
ExclusiveArch: %{rust_arches}
- rust-quick-error1
ExclusiveArch: %{rust_arches}
- rust-quick-xml
ExclusiveArch: %{rust_arches}
- rust-quickcheck
ExclusiveArch: %{rust_arches}
- rust-quickcheck0.6
ExclusiveArch: %{rust_arches}
- rust-quickcheck_macros
ExclusiveArch: %{rust_arches}
- rust-quickersort
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-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_distr0.2
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_xoshiro
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-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-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-remove_dir_all
ExclusiveArch: %{rust_arches}
- rust-reqwest
ExclusiveArch: %{rust_arches}
- rust-reqwest0.10
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-ripgrep
ExclusiveArch: %{rust_arches}
- rust-rle-decode-fast
ExclusiveArch: %{rust_arches}
- rust-rmp
ExclusiveArch: %{rust_arches}
- rust-rmp-serde
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-ruma
ExclusiveArch: %{rust_arches}
- rust-ruma-api
ExclusiveArch: %{rust_arches}
- rust-ruma-api-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-appservice-api
ExclusiveArch: %{rust_arches}
- rust-ruma-client-api
ExclusiveArch: %{rust_arches}
- rust-ruma-common
ExclusiveArch: %{rust_arches}
- rust-ruma-events
ExclusiveArch: %{rust_arches}
- rust-ruma-events-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-federation-api
ExclusiveArch: %{rust_arches}
- rust-ruma-identifiers
ExclusiveArch: %{rust_arches}
- rust-ruma-identifiers-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-identifiers-validation
ExclusiveArch: %{rust_arches}
- rust-ruma-identity-service-api
ExclusiveArch: %{rust_arches}
- rust-ruma-push-gateway-api
ExclusiveArch: %{rust_arches}
- rust-ruma-serde
ExclusiveArch: %{rust_arches}
- rust-ruma-serde-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-signatures
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-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-rustdoc-stripper
ExclusiveArch: %{rust_arches}
- rust-rustfilt
ExclusiveArch: %{rust_arches}
- rust-rustfix
ExclusiveArch: %{rust_arches}
- rust-rustio
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-safemem
ExclusiveArch: %{rust_arches}
- rust-same-file
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-sct
ExclusiveArch: %{rust_arches}
- rust-sd
ExclusiveArch: %{rust_arches}
- rust-sd-notify
ExclusiveArch: %{rust_arches}
- rust-seahash
ExclusiveArch: %{rust_arches}
- rust-secrecy
ExclusiveArch: %{rust_arches}
- rust-secret-service
ExclusiveArch: %{rust_arches}
- rust-semver
ExclusiveArch: %{rust_arches}
- rust-semver-parser
ExclusiveArch: %{rust_arches}
- rust-semver-parser0.7
ExclusiveArch: %{rust_arches}
- rust-semver-parser0.9
ExclusiveArch: %{rust_arches}
- rust-semver0.10
ExclusiveArch: %{rust_arches}
- rust-semver0.9
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_bytes
ExclusiveArch: %{rust_arches}
- rust-serde_cbor
ExclusiveArch: %{rust_arches}
- rust-serde_derive
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_macros
ExclusiveArch: %{rust_arches}
- rust-serde_yaml
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-sha-1
ExclusiveArch: %{rust_arches}
- rust-sha1
ExclusiveArch: %{rust_arches}
- rust-sha2
ExclusiveArch: %{rust_arches}
- rust-sha3
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-shlex
ExclusiveArch: %{rust_arches}
- rust-signal-hook
ExclusiveArch: %{rust_arches}
- rust-signal-hook-registry
ExclusiveArch: %{rust_arches}
- rust-silver
ExclusiveArch: %{rust_arches}
- rust-simd_helpers
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-slash-formatter
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-smallvec
ExclusiveArch: %{rust_arches}
- rust-smart-default
ExclusiveArch: %{rust_arches}
- rust-smawk
ExclusiveArch: %{rust_arches}
- rust-smithay-client-toolkit
ExclusiveArch: %{rust_arches}
- rust-smithay-clipboard
ExclusiveArch: %{rust_arches}
- rust-snafu
ExclusiveArch: %{rust_arches}
- rust-snafu-derive
ExclusiveArch: %{rust_arches}
- rust-snake_case
ExclusiveArch: %{rust_arches}
- rust-snowflake
ExclusiveArch: %{rust_arches}
- rust-socket2
ExclusiveArch: %{rust_arches}
- rust-soup-sys
ExclusiveArch: %{rust_arches}
- rust-sourceview
ExclusiveArch: %{rust_arches}
- rust-spin
ExclusiveArch: %{rust_arches}
- rust-spin_on
ExclusiveArch: %{rust_arches}
- rust-spinning_top
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_module_config_derive
ExclusiveArch: %{rust_arches}
- rust-static_assertions
ExclusiveArch: %{rust_arches}
- rust-statistical
ExclusiveArch: %{rust_arches}
- rust-stb_truetype
ExclusiveArch: %{rust_arches}
- rust-stream-cipher
ExclusiveArch: %{rust_arches}
- rust-streaming-stats
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-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-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-svg_metadata
ExclusiveArch: %{rust_arches}
- rust-sxd-document
ExclusiveArch: %{rust_arches}
- rust-syn
ExclusiveArch: %{rust_arches}
- rust-syn-mid
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-sysinfo
ExclusiveArch: %{rust_arches}
- rust-system-deps
ExclusiveArch: %{rust_arches}
- rust-tabwriter
ExclusiveArch: %{rust_arches}
- rust-take
ExclusiveArch: %{rust_arches}
- rust-take_mut
ExclusiveArch: %{rust_arches}
- rust-tap
ExclusiveArch: %{rust_arches}
- rust-tar
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-tendril
ExclusiveArch: %{rust_arches}
- rust-tera
ExclusiveArch: %{rust_arches}
- rust-term
ExclusiveArch: %{rust_arches}
- rust-term_grid
ExclusiveArch: %{rust_arches}
- rust-term_size
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-test-assembler
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-textwrap0.12
ExclusiveArch: %{rust_arches}
- rust-thiserror
ExclusiveArch: %{rust_arches}
- rust-thiserror-impl
ExclusiveArch: %{rust_arches}
- rust-thread-id
ExclusiveArch: %{rust_arches}
- rust-thread-scoped
ExclusiveArch: %{rust_arches}
- rust-thread_local
ExclusiveArch: %{rust_arches}
- rust-threadpool
ExclusiveArch: %{rust_arches}
- rust-tiff
ExclusiveArch: %{rust_arches}
- rust-tiger-digest
ExclusiveArch: %{rust_arches}
- rust-time
ExclusiveArch: %{rust_arches}
- rust-time-macros
ExclusiveArch: %{rust_arches}
- rust-time-macros-impl
ExclusiveArch: %{rust_arches}
- rust-time0.1
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_http
ExclusiveArch: %{rust_arches}
- rust-tinytemplate
ExclusiveArch: %{rust_arches}
- rust-tinyvec
ExclusiveArch: %{rust_arches}
- rust-tinyvec0.3
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-io-pool
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-socks
ExclusiveArch: %{rust_arches}
- rust-tokio-socks0.3
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.2
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-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-treebitmap
ExclusiveArch: %{rust_arches}
- rust-treeline
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-try-lock
ExclusiveArch: %{rust_arches}
- rust-try_from
ExclusiveArch: %{rust_arches}
- rust-try_or
ExclusiveArch: %{rust_arches}
- rust-trybuild
ExclusiveArch: %{rust_arches}
- rust-tss-esapi
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-typeable
ExclusiveArch: %{rust_arches}
- rust-typed-arena
ExclusiveArch: %{rust_arches}
- rust-typemap
ExclusiveArch: %{rust_arches}
- rust-typenum
ExclusiveArch: %{rust_arches}
- rust-typetag-impl
ExclusiveArch: %{rust_arches}
- rust-ucd-parse
ExclusiveArch: %{rust_arches}
- rust-ucd-trie
ExclusiveArch: %{rust_arches}
- rust-ucd-util
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-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-normalization
ExclusiveArch: %{rust_arches}
- rust-unicode-segmentation
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-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_escape
ExclusiveArch: %{rust_arches}
- rust-v_escape_derive
ExclusiveArch: %{rust_arches}
- rust-v_frame
ExclusiveArch: %{rust_arches}
- rust-v_htmlescape
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-vec-arena
ExclusiveArch: %{rust_arches}
- rust-vec_map
ExclusiveArch: %{rust_arches}
- rust-vergen
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-vmw_backdoor
ExclusiveArch: %{rust_arches}
- rust-void
ExclusiveArch: %{rust_arches}
- rust-vte
ExclusiveArch: %{rust_arches}
- rust-vte0.3
ExclusiveArch: %{rust_arches}
- rust-vte_generate_state_changes
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-macro
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-macro-support
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-shared
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-test-macro
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-webkit2gtk
ExclusiveArch: %{rust_arches}
- rust-webkit2gtk-sys
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-wild
ExclusiveArch: %{rust_arches}
- rust-wildmatch
ExclusiveArch: %{rust_arches}
- rust-winit
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-xkbcommon
ExclusiveArch: %{rust_arches}
- rust-xml-rs
ExclusiveArch: %{rust_arches}
- rust-xml5ever
ExclusiveArch: %{rust_arches}
- rust-xmlparser
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-ytop
ExclusiveArch: %{rust_arches}
- rust-yubibomb
ExclusiveArch: %{rust_arches}
- rust-yup-oauth2
ExclusiveArch: %{rust_arches}
- rust-zbus
ExclusiveArch: %{rust_arches}
- rust-zbus_macros
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-zoneinfo_compiled
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}
- 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
- 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}
- 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 ppc64le s390x
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tarantool
ExclusiveArch: %{ix86} x86_64
- tboot
ExclusiveArch: %{ix86} x86_64
- tdlib
ExclusiveArch: x86_64
- 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}
- topojson-client
ExclusiveArch: %{nodejs_arches} noarch
- topojson-server
ExclusiveArch: %{nodejs_arches} noarch
- topojson-simplify
ExclusiveArch: %{nodejs_arches} noarch
- 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
- ugene
ExclusiveArch: %{ix86} x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
- uglify-js1
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- unetbootin
ExclusiveArch: %{ix86} x86_64
- ursa-major
ExclusiveArch: noarch aarch64 ppc64le s390x x86_64
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vapoursynth
ExclusiveArch: %{ix86} x86_64
- 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
- virtualplanet
ExclusiveArch: %{fpc_arches}
- vkd3d
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- vmaf
ExclusiveArch: x86_64
- vmem
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
- zeromq-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ng
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- zola
ExclusiveArch: %{rust_arches}
3 years, 1 month
Architecture specific change in rpms/xrootd-ceph.git
by githook-noreply@fedoraproject.org
The package rpms/xrootd-ceph.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-ceph.git/commit/?id=1b4821....
Change:
-ExcludeArch: %{ix86} %{arm}
Thanks.
Full change:
============
commit 1b48214d378785877244c5fc34079e76cf7d9ad6
Author: Mattias Ellert <mattias.ellert(a)physics.uu.se>
Date: Fri Feb 26 07:51:50 2021 +0100
From version 5.1.0 xrootd-ceph is built from the main xrootd source rpm.
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index f6a3a77..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/*.tar.gz
diff --git a/README.md b/README.md
deleted file mode 100644
index 56bd622..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# xrootd-ceph
-
-The xrootd-ceph package
\ No newline at end of file
diff --git a/dead.package b/dead.package
new file mode 100644
index 0000000..9d8b8f4
--- /dev/null
+++ b/dead.package
@@ -0,0 +1 @@
+From version 5.1.0 xrootd-ceph is built from the main xrootd source rpm.
diff --git a/sources b/sources
deleted file mode 100644
index 979f737..0000000
--- a/sources
+++ /dev/null
@@ -1 +0,0 @@
-SHA512 (xrootd-ceph-5.0.3.tar.gz) = 3338a0ab0446e4c7ee3d232f5cce8f93c49e040b4792aa52f9dcf6f27f6767e6ffbaff17eb30a87c5b3ff713e1b0c4edb24d8d116c91351c4ed0c13963f80fc9
diff --git a/xrootd-ceph.spec b/xrootd-ceph.spec
deleted file mode 100644
index 4f0dcdf..0000000
--- a/xrootd-ceph.spec
+++ /dev/null
@@ -1,74 +0,0 @@
-%undefine __cmake_in_source_build
-
-Name: xrootd-ceph
-Epoch: 1
-Version: 5.0.3
-Release: 2%{?dist}
-Summary: XRootD plug-in for interfacing with the Ceph storage platform
-
-License: LGPLv3+
-URL: https://github.com/xrootd/xrootd-ceph
-Source0: https://github.com/xrootd/xrootd-ceph/archive/v%{version}/%{name}-%{versi...
-
-BuildRequires: gcc-c++
-BuildRequires: cmake
-BuildRequires: xrootd-server-devel
-BuildRequires: xrootd-private-devel
-BuildRequires: librados-devel
-BuildRequires: libradosstriper-devel
-
-%if %{?fedora}%{!?fedora:0} >= 30
-# Ceph is not available for 32 bit arches in Fedora 30+
-ExcludeArch: %{ix86} %{arm}
-%endif
-
-%description
-The xrootd-ceph is an OSS layer plug-in for the XRootD server for interfacing
-with the Ceph storage platform.
-
-%prep
-%setup -q
-
-%build
-%cmake -DPLUGIN_VERSION:STRING=$(xrootd-config --plugin-version)
-%cmake_build
-
-%install
-%cmake_install
-rm %{buildroot}%{_libdir}/libXrdCephPosix.so
-
-%ldconfig_scriptlets
-
-%files
-%{_libdir}/libXrdCeph-5.so
-%{_libdir}/libXrdCephXattr-5.so
-%{_libdir}/libXrdCephPosix.so.*
-%license COPYING* LICENSE
-
-%changelog
-* Thu Jan 28 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:5.0.3-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
-
-* Thu Nov 12 2020 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.0.3-1
-- Update to version 5.0.3
-
-* Fri Sep 18 2020 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.0.2-1
-- Update to version 5.0.2
-
-* Thu Aug 27 2020 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:5.0.1-1
-- Update to version 5.0.1 (no code changes)
-
-* Wed Jul 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:4.11.3-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
-
-* Sat Mar 21 2020 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:4.11.3-1
-- Update to version 4.11.3
-
-* Fri Jan 31 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:4.11.0-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
-
-* Fri Oct 18 2019 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:4.11.0-1
-- Update to version 4.11.0
-
-* Sun Jul 28 2019 Mattias Ellert <mattias.ellert(a)physics.uu.se> - 1:4.10.0-1
-- xrootd-ceph split off to a separate source RPM
3 years, 1 month
Architecture specific change in rpms/ceph.git
by githook-noreply@fedoraproject.org
The package rpms/ceph.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/ceph.git/commit/?id=cbed2814c27b4...
https://src.fedoraproject.org/cgit/rpms/ceph.git/commit/?id=92605c05f0d76....
Change:
-%ifarch x86_64 ppc64le
+%ifarch x86_64 ppc64le
Thanks.
Full change:
============
commit af4b4952f8dd2b03030bc8f20b588f189b057016
Author: Kaleb S. KEITHLEY <kkeithle(a)redhat.com>
Date: Fri Mar 19 20:23:47 2021 -0400
16.1.0 RC (ceph-16.1.0-308-gabe639eb)
Signed-off-by: Kaleb S. KEITHLEY <kkeithle(a)redhat.com>
diff --git a/ceph.spec b/ceph.spec
index 7301c4f..f2f92d4 100644
--- a/ceph.spec
+++ b/ceph.spec
@@ -33,8 +33,6 @@
%endif
%if 0%{?fedora} || 0%{?rhel}
%bcond_without selinux
-%bcond_without rbd_rwl_cache
-%bcond_without rbd_ssd_cache
%if 0%{?rhel} >= 8
%bcond_with cephfs_java
%else
@@ -54,12 +52,8 @@
%bcond_with libradosstriper
%ifarch x86_64 aarch64 ppc64le
%bcond_without lttng
-%bcond_without rbd_rwl_cache
-%bcond_without rbd_ssd_cache
%else
%bcond_with lttng
-%bcond_with rbd_rwl_cache
-%bcond_with rbd_ssd_cache
%endif
%bcond_with ocf
%bcond_with selinux
@@ -70,6 +64,8 @@
%endif
%bcond_with seastar
%bcond_with jaeger
+%bcond_with rbd_rwl_cache
+%bcond_with rbd_ssd_cache
%if 0%{?fedora} || 0%{?suse_version} >= 1500
# distros that ship cmd2 and/or colorama
%bcond_without cephfs_shell
commit cbed2814c27b48b25f05640ee998b34e9d2d308d
Author: Kaleb S. KEITHLEY <kkeithle(a)redhat.com>
Date: Fri Mar 19 20:12:48 2021 -0400
16.1.0 RC (ceph-16.1.0-308-gabe639eb)
Signed-off-by: Kaleb S. KEITHLEY <kkeithle(a)redhat.com>
diff --git a/ceph.spec b/ceph.spec
index 4795350..7301c4f 100644
--- a/ceph.spec
+++ b/ceph.spec
@@ -35,11 +35,6 @@
%bcond_without selinux
%bcond_without rbd_rwl_cache
%bcond_without rbd_ssd_cache
-%ifarch x86_64 ppc64le
-%global _system_pmdk 1
-%else
-%global _system_pmdk 0
-%endif
%if 0%{?rhel} >= 8
%bcond_with cephfs_java
%else
@@ -59,12 +54,10 @@
%bcond_with libradosstriper
%ifarch x86_64 aarch64 ppc64le
%bcond_without lttng
-%global _system_pmdk 1
%bcond_without rbd_rwl_cache
%bcond_without rbd_ssd_cache
%else
%bcond_with lttng
-%global _system_pmdk 0
%bcond_with rbd_rwl_cache
%bcond_with rbd_ssd_cache
%endif
@@ -141,8 +134,8 @@ Group: System/Filesystems
%endif
URL: http://ceph.com/
#Source0: %%{?_remote_tarball_prefix}ceph-%%{version}.tar.gz
-# https://2.chacra.ceph.com/r/ceph/pacific/e53ee8bd1d...
-Source0: ceph-16.1.0-944-ge53ee8bd.tar.bz2
+# https://2.chacra.ceph.com/r/ceph/pacific/abe639e639eb...
+Source0: ceph-16.1.0-308-gabe639eb.tar.bz2
Patch0001: 0001-src-common-crc32c_intel_fast.patch
Patch0002: 0002-src-common-CMakeLists.txt.patch
Patch0003: 0003-src-common-bitstr.h.patch
@@ -265,10 +258,6 @@ BuildRequires: nlohmann_json-devel
BuildRequires: libevent-devel
BuildRequires: yaml-cpp-devel
%endif
-%if 0%{?_system_pmdk}
-BuildRequires: libpmem-devel
-BuildRequires: libpmemobj-devel
-%endif
%if 0%{with seastar}
BuildRequires: c-ares-devel
BuildRequires: gnutls-devel
@@ -1191,7 +1180,7 @@ This package provides Ceph default alerts for Prometheus.
# common
#################################################################################
%prep
-%autosetup -p1 -n ceph-16.1.0-944-ge53ee8bd
+%autosetup -p1 -n ceph-16.1.0-308-gabe639eb
%ifarch x86_64
patch -p1 < %{SOURCE1}
%endif
@@ -1335,9 +1324,6 @@ cd build
-DBOOST_J=$CEPH_SMP_NCPUS \
%if 0%{with ceph_test_package}
-DWITH_SYSTEM_GTEST=ON \
-%endif
-%if 0%{?_system_pmdk}
- -DWITH_SYSTEM_PMDK:BOOL=ON \
%endif
-DWITH_GRAFANA=ON
@@ -2017,8 +2003,6 @@ fi
%{_bindir}/radosgw-token
%{_bindir}/radosgw-es
%{_bindir}/radosgw-object-expirer
-%{_bindir}/rgw-gap-list
-%{_bindir}/rgw-gap-list-comparator
%{_bindir}/rgw-orphan-list
%{_libdir}/libradosgw.so*
%{_mandir}/man8/radosgw.8*
@@ -2453,7 +2437,7 @@ exit 0
%changelog
* Fri Mar 19 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.1.0-0.6.snapshot
-- 16.1.0 RC (ceph-16.1.0-922-ge6063369)
+- 16.1.0 RC (ceph-16.1.0-308-gabe639eb)
* Fri Mar 5 2021 Kaleb S. KEITHLEY <kkeithle[at]redhat.com> - 2:16.1.0-0.5.snapshot
- ceph 16.1.0 RC (ceph-16.1.0-308-gabe639eb)
diff --git a/sources b/sources
index ff38237..36b795e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (ceph-16.1.0-944-ge53ee8bd.tar.bz2) = 6105a008088fb09e0ee456da14bdfe714188f78c3ac22df611b212a34f7a8e13ee8a00fe88698a3633eda8380892297e94530dd9e8736c00dd3d893bd2380b94
+SHA512 (ceph-16.1.0-308-gabe639eb.tar.bz2) = 41433257c59a6a9ef852e3810f3ed244d143ba7874a0f896fb5e94b7ed48f282c59b06b406df9cfb4b9b5a48bfdf7ce23acfa1cc82ee8b61c171bfefc75ead98
commit 92605c05f0d7660b871f746190c02fbe32963be4
Author: Kaleb S. KEITHLEY <kkeithle(a)redhat.com>
Date: Fri Mar 19 19:59:04 2021 -0400
16.1.0 RC (ceph-16.1.0-922-ge6063369)
Signed-off-by: Kaleb S. KEITHLEY <kkeithle(a)redhat.com>
diff --git a/ceph.spec b/ceph.spec
index 8cf3019..4795350 100644
--- a/ceph.spec
+++ b/ceph.spec
@@ -35,7 +35,11 @@
%bcond_without selinux
%bcond_without rbd_rwl_cache
%bcond_without rbd_ssd_cache
+%ifarch x86_64 ppc64le
%global _system_pmdk 1
+%else
+%global _system_pmdk 0
+%endif
%if 0%{?rhel} >= 8
%bcond_with cephfs_java
%else
3 years, 1 month
Architecture specific change in rpms/qpid-dispatch.git
by githook-noreply@fedoraproject.org
The package rpms/qpid-dispatch.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/qpid-dispatch.git/commit/?id=93f1....
Change:
-ExcludeArch: i686
Thanks.
Full change:
============
commit 93f1bd35f0eb118441834af0be23405ae6c478d0
Author: Irina Boverman <iboverma(a)redhat.com>
Date: Fri Mar 19 16:29:04 2021 -0400
0.15.0-2
diff --git a/qpid-dispatch.spec b/qpid-dispatch.spec
index 47eebaa..54b8e03 100644
--- a/qpid-dispatch.spec
+++ b/qpid-dispatch.spec
@@ -29,8 +29,7 @@
%endif
-ExcludeArch: i686
-#ExcludeArch: armv7hl
+#ExcludeArch: i686
%global proton_minimum_version 0.33.0
%global libwebsockets_minimum_version 3.2.0
3 years, 1 month
Architecture specific change in rpms/qpid-dispatch.git
by githook-noreply@fedoraproject.org
The package rpms/qpid-dispatch.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/qpid-dispatch.git/commit/?id=8dc8....
Change:
-ExcludeArch: armv7hl
Thanks.
Full change:
============
commit 8dc882fe86e4235582b782d9198491b488d5645b
Author: Irina Boverman <iboverma(a)redhat.com>
Date: Fri Mar 19 15:53:39 2021 -0400
0.15.0-2
diff --git a/dispatch.patch b/dispatch.patch
new file mode 100644
index 0000000..c03cc3c
--- /dev/null
+++ b/dispatch.patch
@@ -0,0 +1,2998 @@
+From b07d0de0f6c8d115047c6ceca453ca495b4f483f Mon Sep 17 00:00:00 2001
+From: Ganesh Murthy <gmurthy(a)apache.org>
+Date: Tue, 9 Feb 2021 17:07:47 -0500
+Subject: [PATCH 02/16] DISPATCH-1909: Requests are now recorded just before
+ freeing streams. Also modified test to account for no stats being present.
+ This closes #1024
+
+---
+ src/adaptors/http2/http2_adaptor.c | 82 ++++++++++++++----------------
+ tests/system_tests_http2.py | 33 +++++++-----
+ 2 files changed, 57 insertions(+), 58 deletions(-)
+
+diff --git a/src/adaptors/http2/http2_adaptor.c b/src/adaptors/http2/http2_adaptor.c
+index a08328c7..2330ece8 100644
+--- a/src/adaptors/http2/http2_adaptor.c
++++ b/src/adaptors/http2/http2_adaptor.c
+@@ -68,6 +68,7 @@ typedef struct qdr_http2_adaptor_t {
+ static qdr_http2_adaptor_t *http2_adaptor;
+
+ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void *context);
++static void _http_record_request(qdr_http2_connection_t *conn, qdr_http2_stream_data_t *stream_data);
+
+ static void set_stream_data_delivery_flags(qdr_http2_stream_data_t * stream_data, qdr_delivery_t *dlv) {
+ if (dlv == stream_data->in_dlv) {
+@@ -284,6 +285,10 @@ static void free_http2_stream_data(qdr_http2_stream_data_t *stream_data, bool on
+
+ qdr_http2_session_data_t *session_data = stream_data->session_data;
+ qdr_http2_connection_t *conn = session_data->conn;
++
++ // Record the request just before freeing the stream.
++ _http_record_request(conn, stream_data);
++
+ if (!on_shutdown) {
+ if (conn->qdr_conn && stream_data->in_link) {
+ qdr_link_set_context(stream_data->in_link, 0);
+@@ -339,6 +344,14 @@ static char *get_address_string(pn_raw_connection_t *pn_raw_conn)
+
+ void free_qdr_http2_connection(qdr_http2_connection_t* http_conn, bool on_shutdown)
+ {
++ // Free all the stream data associated with this connection/session.
++ qdr_http2_stream_data_t *stream_data = DEQ_HEAD(http_conn->session_data->streams);
++ while (stream_data) {
++ qd_log(http2_adaptor->log_source, QD_LOG_TRACE, "[C%"PRIu64"][S%"PRId32"] Freeing stream in free_qdr_http2_connection", stream_data->session_data->conn->conn_id, stream_data->stream_id);
++ free_http2_stream_data(stream_data, on_shutdown);
++ stream_data = DEQ_HEAD(http_conn->session_data->streams);
++ }
++
+ if(http_conn->remote_address) {
+ free(http_conn->remote_address);
+ http_conn->remote_address = 0;
+@@ -353,15 +366,6 @@ void free_qdr_http2_connection(qdr_http2_connection_t* http_conn, bool on_shutdo
+ http_conn->ping_timer = 0;
+ }
+
+- // Free all the stream data associated with this connection/session.
+- qdr_http2_stream_data_t *stream_data = DEQ_HEAD(http_conn->session_data->streams);
+- while (stream_data) {
+- DEQ_REMOVE_HEAD(http_conn->session_data->streams);
+- qd_log(http2_adaptor->log_source, QD_LOG_TRACE, "[C%"PRIu64"][S%"PRId32"] Freeing stream in free_qdr_http2_connection", stream_data->session_data->conn->conn_id, stream_data->stream_id);
+- free_http2_stream_data(stream_data, on_shutdown);
+- stream_data = DEQ_HEAD(http_conn->session_data->streams);
+- }
+-
+ http_conn->context.context = 0;
+
+ nghttp2_session_del(http_conn->session_data->session);
+@@ -378,6 +382,10 @@ void free_qdr_http2_connection(qdr_http2_connection_t* http_conn, bool on_shutdo
+ buff = DEQ_HEAD(http_conn->granted_read_buffs);
+ }
+
++ if (http_conn->delete_egress_connections) {
++ http_conn->config = 0;
++ }
++
+ qd_log(http2_adaptor->log_source, QD_LOG_TRACE, "[C%"PRIu64"] Freeing http2 connection in free_qdr_http2_connection", http_conn->conn_id);
+
+ free_qdr_http2_connection_t(http_conn);
+@@ -864,9 +872,13 @@ static void _http_record_request(qdr_http2_connection_t *conn, qdr_http2_stream_
+ } else {
+ remote_addr = conn->config->host;
+ }
+- qd_http_record_request(http2_adaptor->core, stream_data->method, stream_data->request_status,
+- conn->config->address, remote_addr, conn->config->site,
+- stream_data->remote_site, conn->ingress, stream_data->bytes_in, stream_data->bytes_out,
++ qd_http_record_request(http2_adaptor->core,
++ stream_data->method,
++ stream_data->request_status,
++ conn->config->address,
++ remote_addr, conn->config->site,
++ stream_data->remote_site,
++ conn->ingress, stream_data->bytes_in, stream_data->bytes_out,
+ stream_data->stop && stream_data->start ? stream_data->stop - stream_data->start : 0);
+ if (free_remote_addr) {
+ free(remote_addr);
+@@ -912,10 +924,6 @@ static int on_frame_recv_callback(nghttp2_session *session,
+ qd_log(http2_adaptor->protocol_log_source, QD_LOG_TRACE, "[C%"PRIu64"][S%"PRId32"] NGHTTP2_DATA NGHTTP2_FLAG_END_STREAM flag received, setting receive_complete = true", conn->conn_id, stream_id);
+ }
+ advance_stream_status(stream_data);
+-
+- if (!conn->ingress) {
+- _http_record_request(conn, stream_data);
+- }
+ }
+
+ if (stream_data->in_dlv && !stream_data->stream_force_closed) {
+@@ -979,9 +987,6 @@ static int on_frame_recv_callback(nghttp2_session *session,
+ qd_message_set_receive_complete(stream_data->message);
+ advance_stream_status(stream_data);
+ receive_complete = true;
+- if (!conn->ingress) {
+- _http_record_request(conn, stream_data);
+- }
+ }
+
+ if (stream_data->entire_footer_arrived) {
+@@ -1095,9 +1100,6 @@ ssize_t read_data_callback(nghttp2_session *session,
+ stream_data->next_stream_data = 0;
+ }
+ stream_data->out_dlv_local_disposition = PN_ACCEPTED;
+- if ((*data_flags & NGHTTP2_DATA_FLAG_EOF) && conn->ingress) {
+- _http_record_request(conn, stream_data);
+- }
+ qd_log(http2_adaptor->protocol_log_source, QD_LOG_TRACE, "[C%"PRIu64"][S%"PRId32"] read_data_callback, payload_length=0 and next_stream_data=QD_MESSAGE_STREAM_DATA_NO_MORE", conn->conn_id, stream_data->stream_id);
+ }
+ else if (stream_data->next_stream_data_result == QD_MESSAGE_STREAM_DATA_FOOTER_OK) {
+@@ -1166,10 +1168,6 @@ ssize_t read_data_callback(nghttp2_session *session,
+ }
+
+ stream_data->bytes_out += bytes_to_send;
+-
+- if ((*data_flags & NGHTTP2_DATA_FLAG_EOF) && conn->ingress) {
+- _http_record_request(conn, stream_data);
+- }
+ qd_log(http2_adaptor->protocol_log_source, QD_LOG_TRACE, "[C%"PRIu64"][S%"PRId32"] read_data_callback returning bytes_to_send=%zu", conn->conn_id, stream_data->stream_id, bytes_to_send);
+ return bytes_to_send;
+ }
+@@ -1251,9 +1249,6 @@ ssize_t read_data_callback(nghttp2_session *session,
+ return NGHTTP2_ERR_DEFERRED;
+ }
+
+- if ((*data_flags & NGHTTP2_DATA_FLAG_EOF) && conn->ingress) {
+- _http_record_request(conn, stream_data);
+- }
+ qd_log(http2_adaptor->protocol_log_source, QD_LOG_ERROR, "[C%"PRIu64"][S%"PRId32"] read_data_callback Returning zero", conn->conn_id, stream_data->stream_id);
+ return 0;
+ }
+@@ -2055,8 +2050,6 @@ static void restart_streams(qdr_http2_connection_t *http_conn)
+ static void qdr_del_http2_connection_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
+ {
+ qdr_http2_connection_t *conn = (qdr_http2_connection_t*) action->args.general.context_1;
+- if (conn->config)
+- qd_log(http2_adaptor->log_source, QD_LOG_DEBUG, "Removed http2 connection %s", conn->config->host_port);
+ free_qdr_http2_connection(conn, false);
+ }
+
+@@ -2097,7 +2090,6 @@ static void handle_disconnected(qdr_http2_connection_t* conn)
+ conn->stream_dispatcher_stream_data = 0;
+
+ if (conn->delete_egress_connections) {
+- conn->config = 0;
+ close_connections(conn);
+ }
+ }
+@@ -2445,6 +2437,19 @@ static void qdr_http2_adaptor_final(void *adaptor_context)
+ qdr_http2_adaptor_t *adaptor = (qdr_http2_adaptor_t*) adaptor_context;
+ qdr_protocol_adaptor_free(adaptor->core, adaptor->adaptor);
+
++ // Free all remaining connections.
++ qdr_http2_connection_t *http_conn = DEQ_HEAD(adaptor->connections);
++ while (http_conn) {
++ if (http_conn->stream_dispatcher_stream_data) {
++ qd_log(http2_adaptor->log_source, QD_LOG_INFO, "[C%"PRIu64"] Freeing stream_data (stream_dispatcher, qdr_http2_adaptor_final) (%lx)", http_conn->conn_id, (long) http_conn->stream_dispatcher_stream_data);
++ free_qdr_http2_stream_data_t(http_conn->stream_dispatcher_stream_data);
++ http_conn->stream_dispatcher_stream_data = 0;
++ }
++ qd_log(http2_adaptor->log_source, QD_LOG_INFO, "[C%"PRIu64"] Freeing http2 connection (calling free_qdr_http2_connection)", http_conn->conn_id);
++ free_qdr_http2_connection(http_conn, true);
++ http_conn = DEQ_HEAD(adaptor->connections);
++ }
++
+ // Free all http listeners
+ qd_http_listener_t *li = DEQ_HEAD(adaptor->listeners);
+ while (li) {
+@@ -2459,19 +2464,6 @@ static void qdr_http2_adaptor_final(void *adaptor_context)
+ ct = DEQ_HEAD(adaptor->connectors);
+ }
+
+- // Free all remaining connections.
+- qdr_http2_connection_t *http_conn = DEQ_HEAD(adaptor->connections);
+- while (http_conn) {
+- if (http_conn->stream_dispatcher_stream_data) {
+- qd_log(http2_adaptor->log_source, QD_LOG_INFO, "[C%"PRIu64"] Freeing stream_data (stream_dispatcher, qdr_http2_adaptor_final) (%lx)", http_conn->conn_id, (long) http_conn->stream_dispatcher_stream_data);
+- free_qdr_http2_stream_data_t(http_conn->stream_dispatcher_stream_data);
+- http_conn->stream_dispatcher_stream_data = 0;
+- }
+- qd_log(http2_adaptor->log_source, QD_LOG_INFO, "[C%"PRIu64"] Freeing http2 connection (calling free_qdr_http2_connection)", http_conn->conn_id);
+- free_qdr_http2_connection(http_conn, true);
+- http_conn = DEQ_HEAD(adaptor->connections);
+- }
+-
+ sys_mutex_free(adaptor->lock);
+ nghttp2_session_callbacks_del(adaptor->callbacks);
+ http2_adaptor = NULL;
+diff --git a/tests/system_tests_http2.py b/tests/system_tests_http2.py
+index fb9d6716..59a7a23a 100644
+--- a/tests/system_tests_http2.py
++++ b/tests/system_tests_http2.py
+@@ -281,7 +281,7 @@ class Http2TestOneStandaloneRouter(Http2TestBase, CommonHttp2Tests):
+ listen_port=int(os.getenv('SERVER_LISTEN_PORT')),
+ py_string='python3',
+ server_file="http2_server.py")
+- name = "http2-test-router"
++ name = "http2-test-standalone-router"
+ cls.connector_name = 'connectorToBeDeleted'
+ cls.connector_props = {
+ 'port': os.getenv('SERVER_LISTEN_PORT'),
+@@ -310,20 +310,24 @@ class Http2TestOneStandaloneRouter(Http2TestBase, CommonHttp2Tests):
+ def test_000_stats(self):
+ # Run curl 127.0.0.1:port --http2-prior-knowledge
+ address = self.router_qdra.http_addresses[0]
+- self.run_curl(address=address)
++ qd_manager = QdManager(self, address=self.router_qdra.addresses[0])
++
++ # First request
++ out = self.run_curl(address=address)
++
++ # Second request
+ address = self.router_qdra.http_addresses[0] + "/myinfo"
+ out = self.run_curl(args=['-d', 'fname=Mickey&lname=Mouse', '-X', 'POST'], address=address)
+ self.assertIn('Success! Your first name is Mickey, last name is Mouse', out)
+- qd_manager = QdManager(self, address=self.router_qdra.addresses[0])
++
+ stats = qd_manager.query('org.apache.qpid.dispatch.httpRequestInfo')
+ self.assertEqual(len(stats), 2)
+
+ # Give time for the core thread to augment the stats.
+ i = 0
+ while i < 3:
+- s = stats[0]
+- i += 1
+- if s.get('requests') < 2:
++ if not stats or stats[0].get('requests') < 2:
++ i += 1
+ sleep(1)
+ stats = qd_manager.query('org.apache.qpid.dispatch.httpRequestInfo')
+ else:
+@@ -475,20 +479,23 @@ class Http2TestTwoRouter(Http2TestBase, CommonHttp2Tests):
+ def test_000_stats(self):
+ # Run curl 127.0.0.1:port --http2-prior-knowledge
+ address = self.router_qdra.http_addresses[0]
++ qd_manager_a = QdManager(self, address=self.router_qdra.addresses[0])
++ stats_a = qd_manager_a.query('org.apache.qpid.dispatch.httpRequestInfo')
++
++ # First request
+ self.run_curl(address=address)
+ address = self.router_qdra.http_addresses[0] + "/myinfo"
++
++ # Second request
+ out = self.run_curl(args=['-d', 'fname=Mickey&lname=Mouse', '-X', 'POST'], address=address)
+ self.assertIn('Success! Your first name is Mickey, last name is Mouse', out)
+- qd_manager_a = QdManager(self, address=self.router_qdra.addresses[0])
+- stats_a = qd_manager_a.query('org.apache.qpid.dispatch.httpRequestInfo')
+
+ # Give time for the core thread to augment the stats.
+ i = 0
+ while i < 3:
+- s = stats_a[0]
+- i += 1
+- if s.get('requests') < 2:
++ if not stats_a or stats_a[0].get('requests') < 2:
+ sleep(1)
++ i += 1
+ stats_a = qd_manager_a.query('org.apache.qpid.dispatch.httpRequestInfo')
+ else:
+ break
+@@ -505,8 +512,8 @@ class Http2TestTwoRouter(Http2TestBase, CommonHttp2Tests):
+ i = 0
+ while i < 3:
+ s = stats_b[0]
+- i += 1
+- if s.get('requests') < 2:
++ if not stats_b or stats_b[0].get('requests') < 2:
++ i += 1
+ sleep(1)
+ stats_b = qd_manager_b.query('org.apache.qpid.dispatch.httpRequestInfo')
+ else:
+--
+2.20.1
+
+From cb97f9c84ddaadece8ec3495e18c6b3a0c35ec3b Mon Sep 17 00:00:00 2001
+From: Fernando Giorgetti <fgiorgetti(a)users.noreply.github.com>
+Date: Fri, 12 Feb 2021 09:17:06 -0300
+Subject: [PATCH 03/16] DISPATCH-1586 - Add allocator metrics (#696)
+
+---
+ src/http-libwebsockets.c | 140 +++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 136 insertions(+), 4 deletions(-)
+
+diff --git a/src/http-libwebsockets.c b/src/http-libwebsockets.c
+index 9a2e803e..66cf1874 100644
+--- a/src/http-libwebsockets.c
++++ b/src/http-libwebsockets.c
+@@ -460,6 +460,11 @@ typedef struct metric_definition {
+ int_metric value;
+ } metric_definition;
+
++typedef struct allocator_metric_definition {
++ const char* name;
++ qd_alloc_stats_t *(*fn)(void);
++} allocator_metric_definition;
++
+ static int stats_get_connections(qdr_global_stats_t *stats) { return stats->connections; }
+ static int stats_get_links(qdr_global_stats_t *stats) { return stats->links; }
+ static int stats_get_addrs(qdr_global_stats_t *stats) { return stats->addrs; }
+@@ -483,6 +488,43 @@ static int stats_get_deliveries_stuck(qdr_global_stats_t *stats) { return stats-
+ static int stats_get_links_blocked(qdr_global_stats_t *stats) { return stats->links_blocked; }
+ static int stats_get_deliveries_redirected_to_fallback(qdr_global_stats_t *stats) { return stats->deliveries_redirected_to_fallback; }
+
++qd_alloc_stats_t *alloc_stats_qd_bitmask_t(void);
++qd_alloc_stats_t *alloc_stats_qd_buffer_t(void);
++qd_alloc_stats_t *alloc_stats_qd_composed_field_t(void);
++qd_alloc_stats_t *alloc_stats_qd_composite_t(void);
++qd_alloc_stats_t *alloc_stats_qd_connection_t(void);
++qd_alloc_stats_t *alloc_stats_qd_hash_handle_t(void);
++qd_alloc_stats_t *alloc_stats_qd_hash_item_t(void);
++qd_alloc_stats_t *alloc_stats_qd_iterator_t(void);
++qd_alloc_stats_t *alloc_stats_qd_link_ref_t(void);
++qd_alloc_stats_t *alloc_stats_qd_link_t(void);
++qd_alloc_stats_t *alloc_stats_qd_listener_t(void);
++qd_alloc_stats_t *alloc_stats_qd_log_entry_t(void);
++qd_alloc_stats_t *alloc_stats_qd_management_context_t(void);
++qd_alloc_stats_t *alloc_stats_qd_message_content_t(void);
++qd_alloc_stats_t *alloc_stats_qd_message_t(void);
++qd_alloc_stats_t *alloc_stats_qd_node_t(void);
++qd_alloc_stats_t *alloc_stats_qd_parse_node_t(void);
++qd_alloc_stats_t *alloc_stats_qd_parsed_field_t(void);
++qd_alloc_stats_t *alloc_stats_qd_timer_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_action_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_address_config_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_address_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_connection_info_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_connection_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_connection_work_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_core_timer_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_delivery_cleanup_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_delivery_ref_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_delivery_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_field_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_general_work_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_link_ref_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_link_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_link_work_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_query_t(void);
++qd_alloc_stats_t *alloc_stats_qdr_terminus_t(void);
++
+ static struct metric_definition metrics[] = {
+ {"qdr_connections_total", "gauge", stats_get_connections},
+ {"qdr_links_total", "gauge", stats_get_links},
+@@ -509,9 +551,60 @@ static struct metric_definition metrics[] = {
+ };
+ static size_t metrics_length = sizeof(metrics)/sizeof(metrics[0]);
+
++static struct allocator_metric_definition allocator_metrics[] = {
++ {"qdr_allocator_qd_bitmask_t", alloc_stats_qd_bitmask_t},
++ {"qdr_allocator_qd_buffer_t", alloc_stats_qd_buffer_t},
++ {"qdr_allocator_qd_composed_field_t", alloc_stats_qd_composed_field_t},
++ {"qdr_allocator_qd_composite_t", alloc_stats_qd_composite_t},
++ {"qdr_allocator_qd_connection_t", alloc_stats_qd_connection_t},
++ {"qdr_allocator_qd_hash_handle_t", alloc_stats_qd_hash_handle_t},
++ {"qdr_allocator_qd_hash_item_t", alloc_stats_qd_hash_item_t},
++ {"qdr_allocator_qd_iterator_t", alloc_stats_qd_iterator_t},
++ {"qdr_allocator_qd_link_ref_t", alloc_stats_qd_link_ref_t},
++ {"qdr_allocator_qd_link_t", alloc_stats_qd_link_t},
++ {"qdr_allocator_qd_listener_t", alloc_stats_qd_listener_t},
++ {"qdr_allocator_qd_log_entry_t", alloc_stats_qd_log_entry_t},
++ {"qdr_allocator_qd_management_context_t", alloc_stats_qd_management_context_t},
++ {"qdr_allocator_qd_message_content_t", alloc_stats_qd_message_content_t},
++ {"qdr_allocator_qd_message_t", alloc_stats_qd_message_t},
++ {"qdr_allocator_qd_node_t", alloc_stats_qd_node_t},
++ {"qdr_allocator_qd_parse_node_t", alloc_stats_qd_parse_node_t},
++ {"qdr_allocator_qd_parsed_field_t", alloc_stats_qd_parsed_field_t},
++ {"qdr_allocator_qd_timer_t", alloc_stats_qd_timer_t},
++ {"qdr_allocator_qdr_action_t", alloc_stats_qdr_action_t},
++ {"qdr_allocator_qdr_address_config_t", alloc_stats_qdr_address_config_t},
++ {"qdr_allocator_qdr_address_t", alloc_stats_qdr_address_t},
++ {"qdr_allocator_qdr_connection_info_t", alloc_stats_qdr_connection_info_t},
++ {"qdr_allocator_qdr_connection_t", alloc_stats_qdr_connection_t},
++ {"qdr_allocator_qdr_connection_work_t", alloc_stats_qdr_connection_work_t},
++ {"qdr_allocator_qdr_core_timer_t", alloc_stats_qdr_core_timer_t},
++ {"qdr_allocator_qdr_delivery_cleanup_t", alloc_stats_qdr_delivery_cleanup_t},
++ {"qdr_allocator_qdr_delivery_ref_t", alloc_stats_qdr_delivery_ref_t},
++ {"qdr_allocator_qdr_delivery_t", alloc_stats_qdr_delivery_t},
++ {"qdr_allocator_qdr_field_t", alloc_stats_qdr_field_t},
++ {"qdr_allocator_qdr_general_work_t", alloc_stats_qdr_general_work_t},
++ {"qdr_allocator_qdr_link_ref_t", alloc_stats_qdr_link_ref_t},
++ {"qdr_allocator_qdr_link_t", alloc_stats_qdr_link_t},
++ {"qdr_allocator_qdr_link_work_t", alloc_stats_qdr_link_work_t},
++ {"qdr_allocator_qdr_query_t", alloc_stats_qdr_query_t},
++ {"qdr_allocator_qdr_terminus_t", alloc_stats_qdr_terminus_t}
++};
++static size_t allocator_metrics_length = sizeof(allocator_metrics)/sizeof(allocator_metrics[0]);
++
++#define ALLOC_DATA(S, F) ((allocator_field) {#F, (S!=NULL? S->F: 0)})
++
++typedef struct allocator_field {
++ const char* name;
++ uint64_t value;
++} allocator_field;
++
+ static bool write_stats(uint8_t **position, const uint8_t * const end, const char* name, const char* type, int value)
+ {
+ //11 chars + type + 2*name + 20 chars for int
++ // average metric name size is 30 bytes
++ // average metric type size is 8 bytes
++ // current number of metrics is 22
++ // total metric buffer size = 22 * (11 + 8 + 2*30 + 20) = 2178
+ size_t length = 11 + strlen(type) + strlen(name)*2 + 20;
+ if (end - *position >= length) {
+ *position += lws_snprintf((char*) *position, end - *position, "# TYPE %s %s\n", name, type);
+@@ -522,11 +615,38 @@ static bool write_stats(uint8_t **position, const uint8_t * const end, const cha
+ }
+ }
+
++static bool write_allocator_stats(uint8_t **position, const uint8_t * const end, const char* name, allocator_field field)
++{
++ // 30 chars (static) + 2*name + 2*field.name + 20 for int
++ // average allocator metric name size is 54 bytes (name:field.name)
++ // current number of metrics is 180
++ // total allocator buffer size = 180 * (30 + 2*54 + 20) = 28440
++ size_t length = 30 + strlen(name)*2 + strlen(field.name)*2 + 20;
++ if (end - *position >= length) {
++ *position += lws_snprintf((char*) *position, end - *position, "# TYPE %s:%s_bytes gauge\n", name, field.name);
++ *position += lws_snprintf((char*) *position, end - *position, "%s:%s_bytes %"PRIu64"\n", name, field.name, field.value);
++ return true;
++ } else {
++ return false;
++ }
++}
++
+ static bool write_metric(uint8_t **position, const uint8_t * const end, metric_definition* definition, qdr_global_stats_t* stats)
+ {
+ return write_stats(position, end, definition->name, definition->type, definition->value(stats));
+ }
+
++static bool write_allocator_metric(uint8_t **position, const uint8_t * const end, allocator_metric_definition* definition)
++{
++ qd_alloc_stats_t *allocator_stats = definition->fn();
++ if (!write_allocator_stats(position, end, definition->name, ALLOC_DATA(allocator_stats, total_alloc_from_heap))) return false;
++ if (!write_allocator_stats(position, end, definition->name, ALLOC_DATA(allocator_stats, total_free_to_heap))) return false;
++ if (!write_allocator_stats(position, end, definition->name, ALLOC_DATA(allocator_stats, held_by_threads))) return false;
++ if (!write_allocator_stats(position, end, definition->name, ALLOC_DATA(allocator_stats, batches_rebalanced_to_threads))) return false;
++ if (!write_allocator_stats(position, end, definition->name, ALLOC_DATA(allocator_stats, batches_rebalanced_to_global))) return false;
++ return true;
++}
++
+ static int add_header_by_name(struct lws *wsi, const char* name, const char* value, uint8_t** position, uint8_t* end)
+ {
+ return lws_add_http_header_by_name(wsi, (unsigned char*) name, (unsigned char*) value, strlen(value), position, end);
+@@ -537,7 +657,8 @@ static int callback_metrics(struct lws *wsi, enum lws_callback_reasons reason,
+ {
+ qd_http_server_t *hs = wsi_server(wsi);
+ stats_t *stats = (stats_t*) user;
+- uint8_t buffer[LWS_PRE + 2048];
++ // rationale for buffer size is explained at write_stats and write_allocator_stats
++ uint8_t buffer[LWS_PRE + 30618];
+ uint8_t *start = &buffer[LWS_PRE], *position = start, *end = &buffer[sizeof(buffer) - LWS_PRE - 1];
+
+ switch (reason) {
+@@ -569,15 +690,26 @@ static int callback_metrics(struct lws *wsi, enum lws_callback_reasons reason,
+ stats->current++;
+ qd_log(hs->log, QD_LOG_DEBUG, "wrote metric %lu of %lu", stats->current, metrics_length);
+ } else {
+- qd_log(hs->log, QD_LOG_DEBUG, "insufficient space in buffer");
++ qd_log(hs->log, QD_LOG_WARNING, "insufficient space in buffer");
+ break;
+ }
+ }
+- int n = stats->current < metrics_length ? LWS_WRITE_HTTP : LWS_WRITE_HTTP_FINAL;
++
++ int alloc_cur = 0;
++ while (alloc_cur < allocator_metrics_length) {
++ if (write_allocator_metric(&position, end, &allocator_metrics[alloc_cur])) {
++ qd_log(hs->log, QD_LOG_DEBUG, "wrote allocator metric %lu of %lu", alloc_cur, allocator_metrics_length);
++ alloc_cur++;
++ } else {
++ qd_log(hs->log, QD_LOG_WARNING, "insufficient space in buffer");
++ break;
++ }
++ }
++ int n = (stats->current < metrics_length) || (alloc_cur < allocator_metrics_length) ? LWS_WRITE_HTTP : LWS_WRITE_HTTP_FINAL;
+
+ //write buffer
+ size_t available = position - start;
+- if (lws_write(wsi, (unsigned char*) start, available, n) != available)
++ if (lws_write(wsi, (unsigned char*) start, available, n) != available)
+ return 1;
+ if (n == LWS_WRITE_HTTP_FINAL) {
+ if (lws_http_transaction_completed(wsi)) return -1;
+--
+2.20.1
+
+From 750f86f10fa19b8e0f939d2e188e86218355ece4 Mon Sep 17 00:00:00 2001
+From: Kenneth Giusti <kgiusti(a)apache.org>
+Date: Tue, 2 Feb 2021 16:52:51 -0500
+Subject: [PATCH 04/16] DISPATCH-1948: fix alignment issues in alloc_pool.c
+
+This closes #1015
+---
+ src/alloc_pool.c | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/src/alloc_pool.c b/src/alloc_pool.c
+index 0feb20e7..284630ec 100644
+--- a/src/alloc_pool.c
++++ b/src/alloc_pool.c
+@@ -348,7 +348,8 @@ void *qd_alloc(qd_alloc_type_desc_t *desc, qd_alloc_pool_t **tpool)
+ DEQ_INSERT_TAIL(qtype->allocated, item);
+ sys_mutex_unlock(desc->lock);
+ item->header = PATTERN_FRONT;
+- *((uint32_t*) ((char*) &item[1] + desc->total_size))= PATTERN_BACK;
++ const uint32_t pb = PATTERN_BACK;
++ memcpy((char*) &item[1] + desc->total_size, &pb, sizeof(pb));
+ QD_MEMORY_FILL(&item[1], QD_MEMORY_INIT, desc->total_size);
+ #endif
+ return &item[1];
+@@ -414,7 +415,8 @@ void *qd_alloc(qd_alloc_type_desc_t *desc, qd_alloc_pool_t **tpool)
+ DEQ_INSERT_TAIL(qtype->allocated, item);
+ sys_mutex_unlock(desc->lock);
+ item->header = PATTERN_FRONT;
+- *((uint32_t*) ((char*) &item[1] + desc->total_size))= PATTERN_BACK;
++ const uint32_t pb = PATTERN_BACK;
++ memcpy((char*) &item[1] + desc->total_size, &pb, sizeof(pb));
+ QD_MEMORY_FILL(&item[1], QD_MEMORY_INIT, desc->total_size);
+ #endif
+ return &item[1];
+@@ -434,7 +436,9 @@ void qd_dealloc(qd_alloc_type_desc_t *desc, qd_alloc_pool_t **tpool, char *p)
+ assert (desc->header == PATTERN_FRONT);
+ assert (desc->trailer == PATTERN_BACK);
+ assert (item->header == PATTERN_FRONT);
+- assert (*((uint32_t*) (p + desc->total_size)) == PATTERN_BACK);
++ const uint32_t pb = PATTERN_BACK;
++ (void)pb; // prevent unused warning
++ assert (memcmp(p + desc->total_size, &pb, sizeof(pb)) == 0);
+ assert (item->desc == desc); // Check for double-free
+ qd_alloc_type_t *qtype = (qd_alloc_type_t*) desc->debug;
+ sys_mutex_lock(desc->lock);
+--
+2.20.1
+
+From b1e309e1c59f50a67fdb6d5c2bd0ff54a64680bb Mon Sep 17 00:00:00 2001
+From: Kenneth Giusti <kgiusti(a)apache.org>
+Date: Mon, 8 Feb 2021 13:25:35 -0500
+Subject: [PATCH 05/16] DISPATCH-1941: fix http1 parser to detect null
+ characters
+
+---
+ src/adaptors/http1/http1_codec.c | 18 ++++++++++++++----
+ src/adaptors/http1/http1_server.c | 4 ++--
+ 2 files changed, 16 insertions(+), 6 deletions(-)
+
+diff --git a/src/adaptors/http1/http1_codec.c b/src/adaptors/http1/http1_codec.c
+index 7669d26f..a11f2260 100644
+--- a/src/adaptors/http1/http1_codec.c
++++ b/src/adaptors/http1/http1_codec.c
+@@ -353,6 +353,8 @@ static void ensure_outgoing_capacity(struct encoder_t *encoder, size_t capacity)
+ static void write_string(struct encoder_t *encoder, const char *string)
+ {
+ size_t needed = strlen(string);
++ if (needed == 0) return;
++
+ ensure_outgoing_capacity(encoder, needed);
+
+ encoder->hrs->out_octets += needed;
+@@ -492,6 +494,14 @@ static bool ensure_scratch_size(scratch_memory_t *b, size_t required)
+ }
+
+
++// return true if octet in str
++static inline bool filter_str(const char *str, uint8_t octet)
++{
++ const char *ptr = strchr(str, (int)((unsigned int)octet));
++ return ptr && *ptr != 0;
++}
++
++
+ // trims any optional whitespace characters at the start of 'line'
+ // RFC7230 defines OWS as zero or more spaces or horizontal tabs
+ //
+@@ -538,7 +548,7 @@ static bool parse_token(qd_iterator_pointer_t *line, qd_iterator_pointer_t *toke
+ && (('A' <= octet && octet <= 'Z') ||
+ ('a' <= octet && octet <= 'z') ||
+ ('0' <= octet && octet <= '9') ||
+- (strchr(TOKEN_EXTRA, octet)))) {
++ (filter_str(TOKEN_EXTRA, octet)))) {
+ len++;
+ }
+
+@@ -1733,17 +1743,17 @@ const char *h1_codec_token_list_next(const char *start, size_t *len, const char
+
+ if (!start) return 0;
+
+- while (*start && strchr(SKIPME, *start))
++ while (*start && filter_str(SKIPME, *start))
+ ++start;
+
+ if (!*start) return 0;
+
+ const char *end = start;
+- while (*end && !strchr(SKIPME, *end))
++ while (*end && !filter_str(SKIPME, *end))
+ ++end;
+
+ *len = end - start;
+- while (*end && strchr(SKIPME, *end))
++ while (*end && filter_str(SKIPME, *end))
+ ++end;
+
+ *next = end;
+diff --git a/src/adaptors/http1/http1_server.c b/src/adaptors/http1/http1_server.c
+index 61a0634d..3f46e448 100644
+--- a/src/adaptors/http1/http1_server.c
++++ b/src/adaptors/http1/http1_server.c
+@@ -1247,7 +1247,7 @@ static uint64_t _send_request_headers(_server_request_t *hreq, qd_message_t *msg
+
+ method_str = (char*) qd_iterator_copy(method_iter);
+ qd_iterator_free(method_iter);
+- if (!method_str) {
++ if (!method_str || *method_str == 0) {
+ return PN_REJECTED;
+ }
+
+@@ -1267,7 +1267,7 @@ static uint64_t _send_request_headers(_server_request_t *hreq, qd_message_t *msg
+
+ qd_parsed_field_t *ref = qd_parse_value_by_key(app_props, TARGET_HEADER_KEY);
+ target_str = (char*) qd_iterator_copy(qd_parse_raw(ref));
+- if (!target_str) {
++ if (!target_str || *target_str == 0) {
+ outcome = PN_REJECTED;
+ goto exit;
+ }
+--
+2.20.1
+
+From 479a73afdd55eb0590370c037e4056514a6db4d6 Mon Sep 17 00:00:00 2001
+From: Chuck Rolke <chug(a)apache.org>
+Date: Mon, 15 Feb 2021 11:19:45 -0500
+Subject: [PATCH 06/16] DISPATCH-1955: TCP adaptor adds byte totals and other
+ stats to logs
+
+ 1. Add byte total to logs where incremental values are shown.
+ 2. Add management stat summary when connection is closed/deleted.
+
+This closes #1026
+---
+ src/adaptors/tcp_adaptor.c | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/src/adaptors/tcp_adaptor.c b/src/adaptors/tcp_adaptor.c
+index a38167f4..51d9316d 100644
+--- a/src/adaptors/tcp_adaptor.c
++++ b/src/adaptors/tcp_adaptor.c
+@@ -567,7 +567,7 @@ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void
+ int read = handle_incoming(conn);
+ conn->last_in_time = tcp_adaptor->core->uptime_ticks;
+ conn->bytes_in += read;
+- qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] PN_RAW_CONNECTION_READ Read %i bytes", conn->conn_id, read);
++ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] PN_RAW_CONNECTION_READ Read %i bytes. Total read %"PRIu64" bytes", conn->conn_id, read, conn->bytes_in);
+ while (qdr_connection_process(conn->qdr_conn)) {}
+ break;
+ }
+@@ -583,9 +583,9 @@ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void
+ }
+ }
+ }
+- qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] PN_RAW_CONNECTION_WRITTEN Wrote %zu bytes", conn->conn_id, written);
+ conn->last_out_time = tcp_adaptor->core->uptime_ticks;
+ conn->bytes_out += written;
++ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] PN_RAW_CONNECTION_WRITTEN Wrote %zu bytes. Total written %"PRIu64" bytes", conn->conn_id, written, conn->bytes_out);
+ while (qdr_connection_process(conn->qdr_conn)) {}
+ break;
+ }
+@@ -1527,8 +1527,12 @@ static void qdr_del_tcp_connection_CT(qdr_core_t *core, qdr_action_t *action, bo
+ qdr_tcp_connection_t *conn = (qdr_tcp_connection_t*) action->args.general.context_1;
+ if (conn->in_list) {
+ DEQ_REMOVE(tcp_adaptor->connections, conn);
+- qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] qdr_del_tcp_connection_CT %s (%zu)",
+- conn->conn_id, conn->config.host_port, DEQ_SIZE(tcp_adaptor->connections));
++ qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG,
++ "[C%"PRIu64"] qdr_del_tcp_connection_CT %s deleted. bytes_in=%"PRIu64", bytes_out=%"PRId64", "
++ "opened_time=%"PRId64", last_in_time=%"PRId64", last_out_time=%"PRId64". Connections remaining %zu",
++ conn->conn_id, conn->config.host_port,
++ conn->bytes_in, conn->bytes_out, conn->opened_time, conn->last_in_time, conn->last_out_time,
++ DEQ_SIZE(tcp_adaptor->connections));
+ }
+ free_qdr_tcp_connection(conn);
+ }
+--
+2.20.1
+
+From 53a5bbca01678e615b1181c95c293b658a68e9e1 Mon Sep 17 00:00:00 2001
+From: Chuck Rolke <chug(a)apache.org>
+Date: Mon, 15 Feb 2021 11:38:37 -0500
+Subject: [PATCH 07/16] DISPATCH-1964: TCP adaptor connection object should be
+ a pooled type
+
+---
+ src/adaptors/tcp_adaptor.c | 9 ++++++---
+ 1 file changed, 6 insertions(+), 3 deletions(-)
+
+diff --git a/src/adaptors/tcp_adaptor.c b/src/adaptors/tcp_adaptor.c
+index 51d9316d..fce22192 100644
+--- a/src/adaptors/tcp_adaptor.c
++++ b/src/adaptors/tcp_adaptor.c
+@@ -22,6 +22,7 @@
+ #include <proton/netaddr.h>
+ #include <proton/proactor.h>
+ #include <proton/raw_connection.h>
++#include "qpid/dispatch/alloc_pool.h"
+ #include "qpid/dispatch/ctools.h"
+ #include "qpid/dispatch/protocol_adaptor.h"
+ #include "delivery.h"
+@@ -79,6 +80,8 @@ struct qdr_tcp_connection_t {
+ };
+
+ DEQ_DECLARE(qdr_tcp_connection_t, qdr_tcp_connection_list_t);
++ALLOC_DECLARE(qdr_tcp_connection_t);
++ALLOC_DEFINE(qdr_tcp_connection_t);
+
+ typedef struct qdr_tcp_adaptor_t {
+ qdr_core_t *core;
+@@ -241,7 +244,7 @@ static void free_qdr_tcp_connection(qdr_tcp_connection_t* tc)
+ }
+ sys_mutex_free(tc->activation_lock);
+ //proactor will free the socket
+- free(tc);
++ free_qdr_tcp_connection_t(tc);
+ }
+
+ static void handle_disconnected(qdr_tcp_connection_t* conn)
+@@ -597,7 +600,7 @@ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void
+
+ static qdr_tcp_connection_t *qdr_tcp_connection_ingress(qd_tcp_listener_t* listener)
+ {
+- qdr_tcp_connection_t* tc = NEW(qdr_tcp_connection_t);
++ qdr_tcp_connection_t* tc = new_qdr_tcp_connection_t();
+ ZERO(tc);
+ tc->activation_lock = sys_mutex();
+ tc->ingress = true;
+@@ -682,7 +685,7 @@ static void qdr_tcp_open_server_side_connection(qdr_tcp_connection_t* tc)
+
+ static qdr_tcp_connection_t *qdr_tcp_connection_egress(qd_bridge_config_t *config, qd_server_t *server, qdr_delivery_t *initial_delivery)
+ {
+- qdr_tcp_connection_t* tc = NEW(qdr_tcp_connection_t);
++ qdr_tcp_connection_t* tc = new_qdr_tcp_connection_t();
+ ZERO(tc);
+ tc->activation_lock = sys_mutex();
+ if (initial_delivery) {
+--
+2.20.1
+
+From 31c23ca83df6aea7feb724811af09aa6a197dd37 Mon Sep 17 00:00:00 2001
+From: Kenneth Giusti <kgiusti(a)apache.org>
+Date: Wed, 10 Feb 2021 17:23:34 -0500
+Subject: [PATCH 08/16] DISPATCH-1960: Refactor Q2 flow control for protocol
+ adaptor use.
+
+This closes #1027
+---
+ include/qpid/dispatch/alloc_pool.h | 25 +++++++-
+ include/qpid/dispatch/container.h | 2 +-
+ include/qpid/dispatch/message.h | 27 +++++---
+ src/adaptors/http1/http1_client.c | 3 +-
+ src/adaptors/http1/http1_server.c | 3 +-
+ src/adaptors/http2/http2_adaptor.c | 12 ++--
+ src/adaptors/reference_adaptor.c | 6 +-
+ src/adaptors/tcp_adaptor.c | 3 +-
+ src/alloc_pool.c | 4 ++
+ src/message.c | 100 ++++++++++++++++++++++-------
+ src/message_private.h | 10 ++-
+ src/router_node.c | 24 +++----
+ tests/message_test.c | 25 ++++++--
+ 13 files changed, 184 insertions(+), 60 deletions(-)
+
+diff --git a/include/qpid/dispatch/alloc_pool.h b/include/qpid/dispatch/alloc_pool.h
+index e8722a52..d872ff49 100644
+--- a/include/qpid/dispatch/alloc_pool.h
++++ b/include/qpid/dispatch/alloc_pool.h
+@@ -80,7 +80,26 @@ void *qd_alloc(qd_alloc_type_desc_t *desc, qd_alloc_pool_t **tpool);
+ /** De-allocate from a thread pool. Use via ALLOC_DECLARE */
+ void qd_dealloc(qd_alloc_type_desc_t *desc, qd_alloc_pool_t **tpool, char *p);
+ uint32_t qd_alloc_sequence(void *p);
+-static inline void qd_nullify_safe_ptr(qd_alloc_safe_ptr_t *sp) { sp->ptr = 0; }
++
++// generic safe pointer api for any alloc pool item
++
++#define QD_SAFE_PTR_INIT(p) { .ptr = (void*)(p), .seq = qd_alloc_sequence(p) }
++
++static inline void qd_nullify_safe_ptr(qd_alloc_safe_ptr_t *sp)
++{
++ sp->ptr = 0;
++}
++
++static inline void qd_alloc_set_safe_ptr(qd_alloc_safe_ptr_t *sp, void *p)
++{
++ sp->ptr = p;
++ sp->seq = qd_alloc_sequence(p);
++}
++
++static inline void *qd_alloc_deref_safe_ptr(const qd_alloc_safe_ptr_t *sp)
++{
++ return sp->seq == qd_alloc_sequence(sp->ptr) ? sp->ptr : (void*) 0;
++}
+
+ /**
+ * Declare functions new_T and alloc_T
+@@ -102,8 +121,8 @@ static inline void qd_nullify_safe_ptr(qd_alloc_safe_ptr_t *sp) { sp->ptr = 0; }
+ __thread qd_alloc_pool_t *__local_pool_##T = 0; \
+ T *new_##T(void) { return (T*) qd_alloc(&__desc_##T, &__local_pool_##T); } \
+ void free_##T(T *p) { qd_dealloc(&__desc_##T, &__local_pool_##T, (char*) p); } \
+- void set_safe_ptr_##T(T *p, T##_sp *sp) { sp->ptr = (void*) p; sp->seq = qd_alloc_sequence((void*) p); } \
+- T *safe_deref_##T(T##_sp sp) { return sp.seq == qd_alloc_sequence((void*) sp.ptr) ? (T*) sp.ptr : (T*) 0; } \
++ void set_safe_ptr_##T(T *p, T##_sp *sp) { qd_alloc_set_safe_ptr(sp, (void*)p); } \
++ T *safe_deref_##T(T##_sp sp) { return (T*) qd_alloc_deref_safe_ptr((qd_alloc_safe_ptr_t*) &(sp)); } \
+ qd_alloc_stats_t *alloc_stats_##T(void) { return __desc_##T.stats; } \
+ void *unused##T
+
+diff --git a/include/qpid/dispatch/container.h b/include/qpid/dispatch/container.h
+index 08caba13..82d9ad8b 100644
+--- a/include/qpid/dispatch/container.h
++++ b/include/qpid/dispatch/container.h
+@@ -228,7 +228,7 @@ void qd_link_close(qd_link_t *link);
+ void qd_link_detach(qd_link_t *link);
+ void qd_link_free(qd_link_t *link);
+ void *qd_link_get_node_context(const qd_link_t *link);
+-void qd_link_restart_rx(qd_link_t *link);
++void qd_link_q2_restart_receive(const qd_alloc_safe_ptr_t context);
+ void qd_link_q3_block(qd_link_t *link);
+ void qd_link_q3_unblock(qd_link_t *link);
+ uint64_t qd_link_link_id(const qd_link_t *link);
+diff --git a/include/qpid/dispatch/message.h b/include/qpid/dispatch/message.h
+index 657477d0..07e144ad 100644
+--- a/include/qpid/dispatch/message.h
++++ b/include/qpid/dispatch/message.h
+@@ -253,10 +253,9 @@ qd_message_t * qd_get_message_context(pn_delivery_t *delivery);
+ * @param msg A pointer to a message to be sent.
+ * @param link The outgoing link on which to send the message.
+ * @param strip_outbound_annotations [in] annotation control flag
+- * @param restart_rx [out] indication to wake up receive process
+ * @param q3_stalled [out] indicates that the link is stalled due to proton-buffer-full
+ */
+-void qd_message_send(qd_message_t *msg, qd_link_t *link, bool strip_outbound_annotations, bool *restart_rx, bool *q3_stalled);
++void qd_message_send(qd_message_t *msg, qd_link_t *link, bool strip_outbound_annotations, bool *q3_stalled);
+
+ /**
+ * Check that the message is well-formed up to a certain depth. Any part of the message that is
+@@ -304,9 +303,10 @@ void qd_message_compose_4(qd_message_t *msg, qd_composed_field_t *content1, qd_c
+ *
+ * @param msg Pointer to a message
+ * @param field A composed field to be appended to the end of the message's stream
++ * @param q2_blocked Set to true if this call caused Q2 to block
+ * @return The number of buffers stored in the message's content
+ */
+-int qd_message_extend(qd_message_t *msg, qd_composed_field_t *field);
++int qd_message_extend(qd_message_t *msg, qd_composed_field_t *field, bool *q2_blocked);
+
+
+ /**
+@@ -404,9 +404,10 @@ qd_message_stream_data_result_t qd_message_next_stream_data(qd_message_t *msg, q
+ *
+ * @param msg Pointer to message under construction
+ * @param data List of buffers containing body data.
++ * @param qd_blocked Set to true if this call caused Q2 to block
+ * @return The number of buffers stored in the message's content
+ */
+-int qd_message_stream_data_append(qd_message_t *msg, qd_buffer_list_t *data);
++int qd_message_stream_data_append(qd_message_t *msg, qd_buffer_list_t *data, bool *q2_blocked);
+
+
+ /** Put string representation of a message suitable for logging in buffer.
+@@ -556,12 +557,22 @@ bool qd_message_Q2_holdoff_should_unblock(qd_message_t *msg);
+ */
+ bool qd_message_is_Q2_blocked(const qd_message_t *msg);
+
++
+ /**
+- * Return qd_link through which the message is being received.
+- * @param msg A pointer to the message
+- * @return the qd_link
++ * Register a callback that will be invoked when the message has exited the Q2
++ * blocking state. Note that the callback can be invoked on any I/O thread.
++ * The callback must be thread safe.
++ *
++ * @param msg The message to monitor.
++ * @param callback The method to invoke
++ * @param context safe pointer holding the context
+ */
+-qd_link_t * qd_message_get_receiving_link(const qd_message_t *msg);
++
++typedef void (*qd_message_q2_unblocked_handler_t)(qd_alloc_safe_ptr_t context);
++void qd_message_set_q2_unblocked_handler(qd_message_t *msg,
++ qd_message_q2_unblocked_handler_t callback,
++ qd_alloc_safe_ptr_t context);
++void qd_message_clear_q2_unblocked_handler(qd_message_t *msg);
+
+ /**
+ * Return message aborted state
+diff --git a/src/adaptors/http1/http1_client.c b/src/adaptors/http1/http1_client.c
+index 1d17724d..27b25cde 100644
+--- a/src/adaptors/http1/http1_client.c
++++ b/src/adaptors/http1/http1_client.c
+@@ -860,7 +860,8 @@ static int _client_rx_body_cb(h1_codec_request_state_t *hrs, qd_buffer_list_t *b
+ "[C%"PRIu64"][L%"PRIu64"] HTTP request body received len=%zu.",
+ hconn->conn_id, hconn->in_link_id, len);
+
+- qd_message_stream_data_append(msg, body);
++ // @TODO(kgiusti): handle Q2 block event:
++ qd_message_stream_data_append(msg, body, 0);
+
+ //
+ // Notify the router that more data is ready to be pushed out on the delivery
+diff --git a/src/adaptors/http1/http1_server.c b/src/adaptors/http1/http1_server.c
+index 3f46e448..1ef6b2ab 100644
+--- a/src/adaptors/http1/http1_server.c
++++ b/src/adaptors/http1/http1_server.c
+@@ -976,7 +976,8 @@ static int _server_rx_body_cb(h1_codec_request_state_t *hrs, qd_buffer_list_t *b
+
+ qd_message_t *msg = rmsg->msg ? rmsg->msg : qdr_delivery_message(rmsg->dlv);
+
+- qd_message_stream_data_append(msg, body);
++ // @TODO(kgiusti): handle Q2 block event:
++ qd_message_stream_data_append(msg, body, 0);
+
+ //
+ // Notify the router that more data is ready to be pushed out on the delivery
+diff --git a/src/adaptors/http2/http2_adaptor.c b/src/adaptors/http2/http2_adaptor.c
+index 2330ece8..25347e40 100644
+--- a/src/adaptors/http2/http2_adaptor.c
++++ b/src/adaptors/http2/http2_adaptor.c
+@@ -465,7 +465,8 @@ static int on_data_chunk_recv_callback(nghttp2_session *session,
+ qd_buffer_list_t existing_buffers;
+ DEQ_INIT(existing_buffers);
+ qd_compose_take_buffers(stream_data->body, &existing_buffers);
+- qd_message_stream_data_append(stream_data->message, &existing_buffers);
++ // @TODO(kgiusti): handle Q2 block event:
++ qd_message_stream_data_append(stream_data->message, &existing_buffers, 0);
+ stream_data->body_data_added = true;
+ }
+ }
+@@ -475,7 +476,8 @@ static int on_data_chunk_recv_callback(nghttp2_session *session,
+ stream_data->body = qd_compose(QD_PERFORMATIVE_BODY_DATA, 0);
+ stream_data->body_data_added = true;
+ }
+- qd_message_stream_data_append(stream_data->message, &buffers);
++ // @TODO(kgiusti): handle Q2 block event:
++ qd_message_stream_data_append(stream_data->message, &buffers, 0);
+ qd_log(http2_adaptor->protocol_log_source, QD_LOG_TRACE, "[C%"PRIu64"][S%"PRId32"] HTTP2 DATA on_data_chunk_recv_callback qd_compose_insert_binary_buffers into stream_data->message", conn->conn_id, stream_id);
+ }
+ else {
+@@ -930,7 +932,8 @@ static int on_frame_recv_callback(nghttp2_session *session,
+ if (!stream_data->body) {
+ stream_data->body = qd_compose(QD_PERFORMATIVE_BODY_DATA, 0);
+ qd_compose_insert_binary(stream_data->body, 0, 0);
+- qd_message_extend(stream_data->message, stream_data->body);
++ // @TODO(kgiusti): handle Q2 block event:
++ qd_message_extend(stream_data->message, stream_data->body, 0);
+ }
+ }
+
+@@ -965,7 +968,8 @@ static int on_frame_recv_callback(nghttp2_session *session,
+ if (stream_data->use_footer_properties) {
+ qd_compose_end_map(stream_data->footer_properties);
+ stream_data->entire_footer_arrived = true;
+- qd_message_extend(stream_data->message, stream_data->footer_properties);
++ // @TODO(kgiusti): handle Q2 block event:
++ qd_message_extend(stream_data->message, stream_data->footer_properties, 0);
+ qd_log(http2_adaptor->protocol_log_source, QD_LOG_TRACE, "[C%"PRIu64"][S%"PRId32"] Closing footer map, extending message with footer", conn->conn_id, stream_id);
+ }
+ else {
+diff --git a/src/adaptors/reference_adaptor.c b/src/adaptors/reference_adaptor.c
+index 2fd3ff2e..9982ad04 100644
+--- a/src/adaptors/reference_adaptor.c
++++ b/src/adaptors/reference_adaptor.c
+@@ -497,7 +497,8 @@ static void on_stream(void *context)
+ //
+ // Extend the streaming message and free the composed field
+ //
+- depth = qd_message_extend(adaptor->streaming_message, field);
++ // TODO(kgiusti): need to handle Q2 blocking event
++ depth = qd_message_extend(adaptor->streaming_message, field, 0);
+ qd_compose_free(field);
+ }
+
+@@ -519,7 +520,8 @@ static void on_stream(void *context)
+ qd_compose_insert_symbol(footer, "second");
+ qd_compose_insert_string(footer, "value2");
+ qd_compose_end_map(footer);
+- depth = qd_message_extend(adaptor->streaming_message, footer);
++ // @TODO(kgiusti): need to handle Q2 blocking event
++ depth = qd_message_extend(adaptor->streaming_message, footer, 0);
+ qd_compose_free(footer);
+
+ qd_message_set_receive_complete(adaptor->streaming_message);
+diff --git a/src/adaptors/tcp_adaptor.c b/src/adaptors/tcp_adaptor.c
+index fce22192..6cc8855f 100644
+--- a/src/adaptors/tcp_adaptor.c
++++ b/src/adaptors/tcp_adaptor.c
+@@ -183,7 +183,8 @@ static int handle_incoming(qdr_tcp_connection_t *conn)
+ grant_read_buffers(conn);
+
+ if (conn->instream) {
+- qd_message_stream_data_append(qdr_delivery_message(conn->instream), &buffers);
++ // @TODO(kgiusti): handle Q2 block event:
++ qd_message_stream_data_append(qdr_delivery_message(conn->instream), &buffers, 0);
+ qdr_delivery_continue(tcp_adaptor->core, conn->instream, false);
+ qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"][L%"PRIu64"] Continuing message with %i bytes", conn->conn_id, conn->incoming_id, count);
+ } else {
+diff --git a/src/alloc_pool.c b/src/alloc_pool.c
+index 284630ec..2ab65675 100644
+--- a/src/alloc_pool.c
++++ b/src/alloc_pool.c
+@@ -507,6 +507,10 @@ uint32_t qd_alloc_sequence(void *p)
+ return 0;
+
+ qd_alloc_item_t *item = ((qd_alloc_item_t*) p) - 1;
++#ifdef QD_MEMORY_DEBUG
++ // ensure p actually points to an alloc pool item
++ assert(item->header == PATTERN_FRONT);
++#endif
+ return item->sequence;
+ }
+
+diff --git a/src/message.c b/src/message.c
+index 3e86f544..f81d15e9 100644
+--- a/src/message.c
++++ b/src/message.c
+@@ -1020,7 +1020,8 @@ void qd_message_free(qd_message_t *in_msg)
+ {
+ if (!in_msg) return;
+ uint32_t rc;
+- qd_message_pvt_t *msg = (qd_message_pvt_t*) in_msg;
++ qd_message_pvt_t *msg = (qd_message_pvt_t*) in_msg;
++ qd_message_q2_unblocker_t q2_unblock = {0};
+
+ qd_buffer_list_free_buffers(&msg->ma_to_override);
+ qd_buffer_list_free_buffers(&msg->ma_trace);
+@@ -1055,12 +1056,16 @@ void qd_message_free(qd_message_t *in_msg)
+ && was_blocked
+ && qd_message_Q2_holdoff_should_unblock(in_msg)) {
+ content->q2_input_holdoff = false;
+- qd_link_restart_rx(qd_message_get_receiving_link(in_msg));
++ q2_unblock = content->q2_unblocker;
+ }
+
+ UNLOCK(content->lock);
+ }
+
++ // the Q2 handler must be invoked outside the lock
++ if (q2_unblock.handler)
++ q2_unblock.handler(q2_unblock.context);
++
+ rc = sys_atomic_dec(&content->ref_count) - 1;
+ if (rc == 0) {
+ if (content->ma_field_iter_in)
+@@ -1320,7 +1325,14 @@ void qd_message_set_receive_complete(qd_message_t *in_msg)
+ {
+ if (!!in_msg) {
+ qd_message_content_t *content = MSG_CONTENT(in_msg);
++
++ LOCK(content->lock);
++
+ content->receive_complete = true;
++ content->q2_unblocker.handler = 0;
++ qd_nullify_safe_ptr(&content->q2_unblocker.context);
++
++ UNLOCK(content->lock);
+ }
+ }
+
+@@ -1384,7 +1396,6 @@ qd_message_t *discard_receive(pn_delivery_t *delivery,
+ } else if (rc == PN_EOS || rc < 0) {
+ // End of message or error: finalize message_receive handling
+ msg->content->aborted = pn_delivery_aborted(delivery);
+- qd_nullify_safe_ptr(&msg->content->input_link_sp);
+ pn_record_t *record = pn_delivery_attachments(delivery);
+ pn_record_set(record, PN_DELIVERY_CTX, 0);
+ if (msg->content->oversize) {
+@@ -1392,7 +1403,7 @@ qd_message_t *discard_receive(pn_delivery_t *delivery,
+ // This has no effect on the received message.
+ msg->content->aborted = true;
+ }
+- msg->content->receive_complete = true;
++ qd_message_set_receive_complete((qd_message_t*) msg);
+ break;
+ } else {
+ // rc was > 0. bytes were read and discarded.
+@@ -1429,7 +1440,8 @@ qd_message_t *qd_message_receive(pn_delivery_t *delivery)
+ if (!msg) {
+ msg = (qd_message_pvt_t*) qd_message();
+ qd_connection_t *qdc = qd_link_connection(qdl);
+- set_safe_ptr_qd_link_t(qdl, &msg->content->input_link_sp);
++ qd_alloc_safe_ptr_t sp = QD_SAFE_PTR_INIT(qdl);
++ qd_message_set_q2_unblocked_handler((qd_message_t*) msg, qd_link_q2_restart_receive, sp);
+ msg->strip_annotations_in = qd_connection_strip_annotations_in(qdc);
+ pn_record_def(record, PN_DELIVERY_CTX, PN_WEAKREF);
+ pn_record_set(record, PN_DELIVERY_CTX, (void*) msg);
+@@ -1491,8 +1503,9 @@ qd_message_t *qd_message_receive(pn_delivery_t *delivery)
+ }
+
+ content->receive_complete = true;
++ content->q2_unblocker.handler = 0;
++ qd_nullify_safe_ptr(&content->q2_unblocker.context);
+ content->aborted = pn_delivery_aborted(delivery);
+- qd_nullify_safe_ptr(&content->input_link_sp);
+
+ // unlink message and delivery
+ pn_record_set(record, PN_DELIVERY_CTX, 0);
+@@ -1726,7 +1739,6 @@ static void compose_message_annotations(qd_message_pvt_t *msg, qd_buffer_list_t
+ void qd_message_send(qd_message_t *in_msg,
+ qd_link_t *link,
+ bool strip_annotations,
+- bool *restart_rx,
+ bool *q3_stalled)
+ {
+ qd_message_pvt_t *msg = (qd_message_pvt_t*) in_msg;
+@@ -1734,7 +1746,6 @@ void qd_message_send(qd_message_t *in_msg,
+ qd_buffer_t *buf = 0;
+ pn_link_t *pnl = qd_link_pn(link);
+
+- *restart_rx = false;
+ *q3_stalled = false;
+
+ if (msg->sent_depth < QD_DEPTH_MESSAGE_ANNOTATIONS) {
+@@ -1842,8 +1853,9 @@ void qd_message_send(qd_message_t *in_msg,
+
+ buf = msg->cursor.buffer;
+
+- pn_session_t *pns = pn_link_session(pnl);
+- const size_t q3_upper = BUFFER_SIZE * QD_QLIMIT_Q3_UPPER;
++ qd_message_q2_unblocker_t q2_unblock = {0};
++ pn_session_t *pns = pn_link_session(pnl);
++ const size_t q3_upper = BUFFER_SIZE * QD_QLIMIT_Q3_UPPER;
+
+ while (!content->aborted
+ && buf
+@@ -1913,7 +1925,7 @@ void qd_message_send(qd_message_t *in_msg,
+ // set input holdoff before the deferred handler
+ // runs.
+ content->q2_input_holdoff = false;
+- *restart_rx = true;
++ q2_unblock = content->q2_unblocker;
+ }
+ }
+ } // end free buffer
+@@ -1940,6 +1952,10 @@ void qd_message_send(qd_message_t *in_msg,
+ UNLOCK(content->lock);
+ }
+
++ // the Q2 handler must be invoked outside the lock
++ if (q2_unblock.handler)
++ q2_unblock.handler(q2_unblock.context);
++
+ if (content->aborted) {
+ if (pn_link_current(pnl)) {
+ msg->send_complete = true;
+@@ -2319,13 +2335,16 @@ void qd_message_compose_4(qd_message_t *msg, qd_composed_field_t *field1, qd_com
+ }
+
+
+-int qd_message_extend(qd_message_t *msg, qd_composed_field_t *field)
++int qd_message_extend(qd_message_t *msg, qd_composed_field_t *field, bool *q2_blocked)
+ {
+ qd_message_content_t *content = MSG_CONTENT(msg);
+ int count;
+ qd_buffer_list_t *buffers = qd_compose_buffers(field);
+ qd_buffer_t *buf = DEQ_HEAD(*buffers);
+
++ if (q2_blocked)
++ *q2_blocked = false;
++
+ LOCK(content->lock);
+ while (buf) {
+ qd_buffer_set_fanout(buf, content->fanout);
+@@ -2334,6 +2353,14 @@ int qd_message_extend(qd_message_t *msg, qd_composed_field_t *field)
+
+ DEQ_APPEND(content->buffers, (*buffers));
+ count = DEQ_SIZE(content->buffers);
++
++ // buffers added - much check for Q2:
++ if (qd_message_Q2_holdoff_should_block(msg)) {
++ content->q2_input_holdoff = true;
++ if (q2_blocked)
++ *q2_blocked = true;
++ }
++
+ UNLOCK(content->lock);
+ return count;
+ }
+@@ -2549,7 +2576,8 @@ void qd_message_stream_data_release(qd_message_stream_data_t *stream_data)
+
+ LOCK(content->lock);
+
+- bool was_blocked = !qd_message_Q2_holdoff_should_unblock((qd_message_t*) pvt);
++ bool was_blocked = !qd_message_Q2_holdoff_should_unblock((qd_message_t*) pvt);
++ qd_message_q2_unblocker_t q2_unblock = {0};
+
+ if (pvt->is_fanout) {
+ buf = start_buf;
+@@ -2581,13 +2609,16 @@ void qd_message_stream_data_release(qd_message_stream_data_t *stream_data)
+ && was_blocked
+ && qd_message_Q2_holdoff_should_unblock((qd_message_t*) pvt)) {
+ content->q2_input_holdoff = false;
+- qd_link_restart_rx(qd_message_get_receiving_link((qd_message_t*) pvt));
++ q2_unblock = content->q2_unblocker;
+ }
+
+ UNLOCK(content->lock);
+
+ DEQ_REMOVE(pvt->stream_data_list, stream_data);
+ free_qd_message_stream_data_t(stream_data);
++
++ if (q2_unblock.handler)
++ q2_unblock.handler(q2_unblock.context);
+ }
+
+
+@@ -2820,12 +2851,6 @@ bool qd_message_is_Q2_blocked(const qd_message_t *msg)
+ }
+
+
+-qd_link_t * qd_message_get_receiving_link(const qd_message_t *msg)
+-{
+- return safe_deref_qd_link_t(((qd_message_pvt_t *)msg)->content->input_link_sp);
+-}
+-
+-
+ bool qd_message_aborted(const qd_message_t *msg)
+ {
+ return ((qd_message_pvt_t *)msg)->content->aborted;
+@@ -2847,12 +2872,15 @@ bool qd_message_oversize(const qd_message_t *msg)
+ }
+
+
+-int qd_message_stream_data_append(qd_message_t *message, qd_buffer_list_t *data)
++int qd_message_stream_data_append(qd_message_t *message, qd_buffer_list_t *data, bool *q2_blocked)
+ {
+ unsigned int length = DEQ_SIZE(*data);
+ qd_composed_field_t *field = 0;
+ int rc = 0;
+
++ if (q2_blocked)
++ *q2_blocked = false;
++
+ if (length == 0)
+ return rc;
+
+@@ -2887,7 +2915,35 @@ int qd_message_stream_data_append(qd_message_t *message, qd_buffer_list_t *data)
+ field = qd_compose(QD_PERFORMATIVE_BODY_DATA, field);
+ qd_compose_insert_binary_buffers(field, data);
+
+- rc = qd_message_extend(message, field);
++ rc = qd_message_extend(message, field, q2_blocked);
+ qd_compose_free(field);
+ return rc;
+ }
++
++
++void qd_message_set_q2_unblocked_handler(qd_message_t *msg,
++ qd_message_q2_unblocked_handler_t callback,
++ qd_alloc_safe_ptr_t context)
++{
++ qd_message_content_t *content = MSG_CONTENT(msg);
++
++ LOCK(content->lock);
++
++ content->q2_unblocker.handler = callback;
++ content->q2_unblocker.context = context;
++
++ UNLOCK(content->lock);
++}
++
++
++void qd_message_clear_Q2_unblocked_handler(qd_message_t *msg)
++{
++ qd_message_content_t *content = MSG_CONTENT(msg);
++
++ LOCK(content->lock);
++
++ content->q2_unblocker.handler = 0;
++ qd_nullify_safe_ptr(&content->q2_unblocker.context);
++
++ UNLOCK(content->lock);
++}
+diff --git a/src/message_private.h b/src/message_private.h
+index a8067c77..c4262a98 100644
+--- a/src/message_private.h
++++ b/src/message_private.h
+@@ -73,6 +73,13 @@ struct qd_message_stream_data_t {
+ ALLOC_DECLARE(qd_message_stream_data_t);
+ DEQ_DECLARE(qd_message_stream_data_t, qd_message_stream_data_list_t);
+
++
++typedef struct {
++ qd_message_q2_unblocked_handler_t handler;
++ qd_alloc_safe_ptr_t context;
++} qd_message_q2_unblocker_t;
++
++
+ // TODO - consider using pointers to qd_field_location_t below to save memory
+ // TODO - provide a way to allocate a message without a lock for the link-routing case.
+ // It's likely that link-routing will cause no contention for the message content.
+@@ -126,7 +133,8 @@ typedef struct {
+ uint64_t max_message_size; // configured max; 0 if no max to enforce
+ uint64_t bytes_received; // bytes returned by pn_link_recv() when enforcing max_message_size
+ uint32_t fanout; // The number of receivers for this message, including in-process subscribers.
+- qd_link_t_sp input_link_sp; // message received on this link
++
++ qd_message_q2_unblocker_t q2_unblocker; // callback and context to signal Q2 unblocked to receiver
+
+ bool ma_parsed; // have parsed annotations in incoming message
+ bool discard; // Should this message be discarded?
+diff --git a/src/router_node.c b/src/router_node.c
+index 7dbdb0d6..70d98f91 100644
+--- a/src/router_node.c
++++ b/src/router_node.c
+@@ -855,6 +855,7 @@ static void deferred_AMQP_rx_handler(void *context, bool discard)
+ if (!discard) {
+ qd_link_t *qdl = safe_deref_qd_link_t(*safe_qdl);
+ if (!!qdl) {
++ assert(qd_link_direction(qdl) == QD_INCOMING);
+ qd_router_t *qdr = (qd_router_t*) qd_link_get_node_context(qdl);
+ assert(qdr != 0);
+ while (true) {
+@@ -1914,22 +1915,17 @@ static uint64_t CORE_link_deliver(void *context, qdr_link_t *link, qdr_delivery_
+ if (!pdlv)
+ return 0;
+
+- bool restart_rx = false;
+ bool q3_stalled = false;
+
+ qd_message_t *msg_out = qdr_delivery_message(dlv);
+
+- qd_message_send(msg_out, qlink, qdr_link_strip_annotations_out(link), &restart_rx, &q3_stalled);
++ qd_message_send(msg_out, qlink, qdr_link_strip_annotations_out(link), &q3_stalled);
+
+ if (q3_stalled) {
+ qd_link_q3_block(qlink);
+ qdr_link_stalled_outbound(link);
+ }
+
+- if (restart_rx) {
+- qd_link_restart_rx(qd_message_get_receiving_link(msg_out));
+- }
+-
+ bool send_complete = qdr_delivery_send_complete(dlv);
+
+ if (send_complete) {
+@@ -2059,7 +2055,10 @@ static void CORE_delivery_update(void *context, qdr_delivery_t *dlv, uint64_t di
+ // and if it is blocked by Q2 holdoff, get the link rolling again.
+ //
+ qd_message_Q2_holdoff_disable(msg);
+- qd_link_restart_rx(link);
++
++ qd_link_t_sp *safe_ptr = NEW(qd_link_t_sp);
++ set_safe_ptr_qd_link_t(link, safe_ptr);
++ qd_connection_invoke_deferred(qd_conn, deferred_AMQP_rx_handler, safe_ptr);
+ }
+ }
+ }
+@@ -2131,10 +2130,13 @@ qdr_core_t *qd_router_core(qd_dispatch_t *qd)
+ }
+
+
+-// called when Q2 holdoff is deactivated so we can receive more message buffers
++// invoked by an I/O thread when enough buffers have been released deactivate
++// the Q2 block. Note that this method will likely be running on a worker
++// thread that is not the same thread that "owns" the qd_link_t passed in.
+ //
+-void qd_link_restart_rx(qd_link_t *in_link)
++void qd_link_q2_restart_receive(qd_alloc_safe_ptr_t context)
+ {
++ qd_link_t *in_link = (qd_link_t*) qd_alloc_deref_safe_ptr(&context);
+ if (!in_link)
+ return;
+
+@@ -2142,8 +2144,8 @@ void qd_link_restart_rx(qd_link_t *in_link)
+
+ qd_connection_t *in_conn = qd_link_connection(in_link);
+ if (in_conn) {
+- qd_link_t_sp *safe_ptr = NEW(qd_link_t_sp);
+- set_safe_ptr_qd_link_t(in_link, safe_ptr);
++ qd_link_t_sp *safe_ptr = NEW(qd_alloc_safe_ptr_t);
++ *safe_ptr = context; // use original to keep old sequence counter
+ qd_connection_invoke_deferred(in_conn, deferred_AMQP_rx_handler, safe_ptr);
+ }
+ }
+diff --git a/tests/message_test.c b/tests/message_test.c
+index 7da011c5..18a22b09 100644
+--- a/tests/message_test.c
++++ b/tests/message_test.c
+@@ -738,7 +738,7 @@ static void stream_data_generate_message(qd_message_t *msg, char *s_chunk_size,
+ // the buffers in 'field' are inserted into message 'msg'.
+ qd_composed_field_t *field = qd_compose(QD_PERFORMATIVE_BODY_DATA, 0);
+ qd_compose_insert_binary_buffers(field, &mule_content->buffers);
+- qd_message_extend(msg, field);
++ qd_message_extend(msg, field, 0);
+
+ // Clean up temporary resources
+ free(buf2);
+@@ -979,13 +979,20 @@ static char *test_check_stream_data_append(void * context)
+ // snapshot the message buffer count to use as a baseline
+ const size_t base_bufct = DEQ_SIZE(MSG_CONTENT(msg)->buffers);
+
+- int depth = qd_message_stream_data_append(msg, &bin_data);
++ bool blocked;
++ int depth = qd_message_stream_data_append(msg, &bin_data, &blocked);
+ if (depth <= body_bufct) {
+ // expected to add extra buffer(s) for meta-data
+ result = "append length is incorrect";
+ goto exit;
+ }
+
++ // expected that the append has triggered Q2 blocking:
++ if (!blocked) {
++ result = "expected Q2 block event did not occur!";
++ goto exit;
++ }
++
+ // And while we're at it, stuff in a footer
+ field = qd_compose(QD_PERFORMATIVE_FOOTER, 0);
+ qd_compose_start_map(field);
+@@ -994,7 +1001,7 @@ static char *test_check_stream_data_append(void * context)
+ qd_compose_insert_symbol(field, "Key2");
+ qd_compose_insert_string(field, "Value2");
+ qd_compose_end_map(field);
+- qd_message_extend(msg, field);
++ qd_message_extend(msg, field, 0);
+ qd_compose_free(field);
+
+ qd_message_set_receive_complete(msg);
+@@ -1123,7 +1130,7 @@ static char *test_check_stream_data_fanout(void *context)
+ memset(buffer, '5', 1001);
+ qd_compose_insert_binary(field, buffer, 5);
+
+- qd_message_extend(in_msg, field);
++ qd_message_extend(in_msg, field, 0);
+ qd_compose_free(field);
+
+ qd_message_set_receive_complete(in_msg);
+@@ -1232,6 +1239,7 @@ static char *test_check_stream_data_footer(void *context)
+ const size_t base_bufct = DEQ_SIZE(MSG_CONTENT(in_msg)->buffers);
+
+ // Append a footer
++ bool q2_blocked;
+ field = qd_compose(QD_PERFORMATIVE_FOOTER, 0);
+ qd_compose_start_map(field);
+ qd_compose_insert_symbol(field, "Key1");
+@@ -1239,9 +1247,16 @@ static char *test_check_stream_data_footer(void *context)
+ qd_compose_insert_symbol(field, "Key2");
+ qd_compose_insert_string(field, "Value2");
+ qd_compose_end_map(field);
+- qd_message_extend(in_msg, field);
++ qd_message_extend(in_msg, field, &q2_blocked);
+ qd_compose_free(field);
+
++ // this small message should not have triggered Q2
++ assert(DEQ_SIZE(MSG_CONTENT(in_msg)->buffers) < QD_QLIMIT_Q2_UPPER);
++ if (q2_blocked) {
++ result = "Unexpected Q2 block on message extend";
++ goto exit;
++ }
++
+ qd_message_set_receive_complete(in_msg);
+
+ // "fan out" the message
+--
+2.20.1
+
+From 48b0157f3de58eb2d9c69e448e2c4affb0a1c04a Mon Sep 17 00:00:00 2001
+From: Kenneth Giusti <kgiusti(a)apache.org>
+Date: Thu, 11 Feb 2021 16:24:28 -0500
+Subject: [PATCH 09/16] DISPATCH-1961: Enable Q2 flow control for HTTP/1.x
+ adaptor
+
+This closes #1029
+---
+ src/adaptors/http1/http1_adaptor.c | 21 +++
+ src/adaptors/http1/http1_client.c | 86 ++++++++--
+ src/adaptors/http1/http1_private.h | 4 +-
+ src/adaptors/http1/http1_server.c | 107 +++++++++---
+ src/message.c | 14 +-
+ tests/system_test.py | 4 +
+ tests/system_tests_http1_adaptor.py | 253 +++++++++++++++++++++++++++-
+ 7 files changed, 437 insertions(+), 52 deletions(-)
+
+diff --git a/src/adaptors/http1/http1_adaptor.c b/src/adaptors/http1/http1_adaptor.c
+index 6ce1eadf..9e4eeb6f 100644
+--- a/src/adaptors/http1/http1_adaptor.c
++++ b/src/adaptors/http1/http1_adaptor.c
+@@ -119,6 +119,8 @@ void qdr_http1_connection_free(qdr_http1_connection_t *hconn)
+ pn_raw_connection_close(rconn);
+ }
+
++ sys_atomic_destroy(&hconn->q2_restart);
++
+ free(hconn->cfg.host);
+ free(hconn->cfg.port);
+ free(hconn->cfg.address);
+@@ -415,6 +417,25 @@ void qdr_http1_free_written_buffers(qdr_http1_connection_t *hconn)
+ }
+
+
++// Per-message callback to resume receiving after Q2 is unblocked on the
++// incoming link (to HTTP app). This routine runs on another I/O thread so it
++// must be thread safe!
++//
++void qdr_http1_q2_unblocked_handler(const qd_alloc_safe_ptr_t context)
++{
++ // prevent the hconn from being deleted while running:
++ sys_mutex_lock(qdr_http1_adaptor->lock);
++
++ qdr_http1_connection_t *hconn = (qdr_http1_connection_t*)qd_alloc_deref_safe_ptr(&context);
++ if (hconn && hconn->raw_conn) {
++ sys_atomic_set(&hconn->q2_restart, 1);
++ pn_raw_connection_wake(hconn->raw_conn);
++ }
++
++ sys_mutex_unlock(qdr_http1_adaptor->lock);
++}
++
++
+ //
+ // Protocol Adaptor Callbacks
+ //
+diff --git a/src/adaptors/http1/http1_client.c b/src/adaptors/http1/http1_client.c
+index 27b25cde..ff033807 100644
+--- a/src/adaptors/http1/http1_client.c
++++ b/src/adaptors/http1/http1_client.c
+@@ -133,6 +133,7 @@ static qdr_http1_connection_t *_create_client_connection(qd_http_listener_t *li)
+ hconn->adaptor = qdr_http1_adaptor;
+ hconn->handler_context.handler = &_handle_connection_events;
+ hconn->handler_context.context = hconn;
++ sys_atomic_init(&hconn->q2_restart, 0);
+
+ hconn->client.next_msg_id = 1;
+
+@@ -364,6 +365,36 @@ static void _setup_client_connection(qdr_http1_connection_t *hconn)
+ }
+
+
++// handle PN_RAW_CONNECTION_READ
++static int _handle_conn_read_event(qdr_http1_connection_t *hconn)
++{
++ int error = 0;
++ qd_buffer_list_t blist;
++ uintmax_t length;
++ qda_raw_conn_get_read_buffers(hconn->raw_conn, &blist, &length);
++ if (length) {
++ qd_log(qdr_http1_adaptor->log, QD_LOG_DEBUG,
++ "[C%"PRIu64"][L%"PRIu64"] Read %"PRIuMAX" bytes from client (%zu buffers)",
++ hconn->conn_id, hconn->in_link_id, length, DEQ_SIZE(blist));
++ hconn->in_http1_octets += length;
++ error = h1_codec_connection_rx_data(hconn->http_conn, &blist, length);
++ }
++ return error;
++}
++
++
++// handle PN_RAW_CONNECTION_NEED_READ_BUFFERS
++static void _handle_conn_need_read_buffers(qdr_http1_connection_t *hconn)
++{
++ // @TODO(kgiusti): backpressure if no credit
++ if (hconn->client.reply_to_addr || hconn->cfg.event_channel /* && hconn->in_link_credit > 0 */) {
++ int granted = qda_raw_conn_grant_read_buffers(hconn->raw_conn);
++ qd_log(qdr_http1_adaptor->log, QD_LOG_DEBUG, "[C%"PRIu64"] %d read buffers granted",
++ hconn->conn_id, granted);
++ }
++}
++
++
+ // Proton Connection Event Handler
+ //
+ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, void *context)
+@@ -424,31 +455,34 @@ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, voi
+ }
+ case PN_RAW_CONNECTION_NEED_READ_BUFFERS: {
+ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Need read buffers", hconn->conn_id);
+- // @TODO(kgiusti): backpressure if no credit
+- if (hconn->client.reply_to_addr || hconn->cfg.event_channel /* && hconn->in_link_credit > 0 */) {
+- int granted = qda_raw_conn_grant_read_buffers(hconn->raw_conn);
+- qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] %d read buffers granted",
+- hconn->conn_id, granted);
+- }
++ _handle_conn_need_read_buffers(hconn);
+ break;
+ }
+ case PN_RAW_CONNECTION_WAKE: {
++ int error = 0;
+ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Wake-up", hconn->conn_id);
++
++ if (sys_atomic_set(&hconn->q2_restart, 0)) {
++ // note: unit tests grep for this log!
++ qd_log(log, QD_LOG_TRACE, "[C%"PRIu64"] client link unblocked from Q2 limit", hconn->conn_id);
++ hconn->q2_blocked = false;
++ error = _handle_conn_read_event(hconn); // restart receiving
++ _handle_conn_need_read_buffers(hconn);
++ }
++
+ while (qdr_connection_process(hconn->qdr_conn)) {}
++
++ if (error)
++ qdr_http1_close_connection(hconn, "Incoming request message failed to parse");
++
+ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Processing done", hconn->conn_id);
+ break;
+ }
+ case PN_RAW_CONNECTION_READ: {
+- qd_buffer_list_t blist;
+- uintmax_t length;
+- qda_raw_conn_get_read_buffers(hconn->raw_conn, &blist, &length);
+- if (length) {
+- qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"][L%"PRIu64"] Read %"PRIuMAX" bytes from client",
+- hconn->conn_id, hconn->in_link_id, length);
+- hconn->in_http1_octets += length;
+- int error = h1_codec_connection_rx_data(hconn->http_conn, &blist, length);
++ if (!hconn->q2_blocked) {
++ int error = _handle_conn_read_event(hconn);
+ if (error)
+- qdr_http1_close_connection(hconn, "Incoming request message failed to parse");
++ qdr_http1_close_connection(hconn, "Incoming response message failed to parse");
+ }
+ break;
+ }
+@@ -581,7 +615,7 @@ static void _client_tx_buffers_cb(h1_codec_request_state_t *hrs, qd_buffer_list_
+ }
+
+ qd_log(qdr_http1_adaptor->log, QD_LOG_TRACE,
+- "[C%"PRIu64"][L%"PRIu64"] %u request octets encoded",
++ "[C%"PRIu64"][L%"PRIu64"] %u response octets encoded",
+ hconn->conn_id, hconn->out_link_id, len);
+
+
+@@ -825,6 +859,13 @@ static int _client_rx_headers_done_cb(h1_codec_request_state_t *hrs, bool has_bo
+ qd_compose_free(hreq->request_props);
+ hreq->request_props = 0;
+
++ // future-proof: ensure the message headers have not caused Q2
++ // blocking. We only check for Q2 events while adding body data.
++ assert(!qd_message_is_Q2_blocked(hreq->request_msg));
++
++ qd_alloc_safe_ptr_t hconn_sp = QD_SAFE_PTR_INIT(hconn);
++ qd_message_set_q2_unblocked_handler(hreq->request_msg, qdr_http1_q2_unblocked_handler, hconn_sp);
++
+ // Use up one credit to obtain a delivery and forward to core. If no
+ // credit is available the request is stalled until the core grants more
+ // flow.
+@@ -848,6 +889,7 @@ static int _client_rx_headers_done_cb(h1_codec_request_state_t *hrs, bool has_bo
+ static int _client_rx_body_cb(h1_codec_request_state_t *hrs, qd_buffer_list_t *body, size_t len,
+ bool more)
+ {
++ bool q2_blocked = false;
+ _client_request_t *hreq = (_client_request_t*) h1_codec_request_state_get_context(hrs);
+ qdr_http1_connection_t *hconn = hreq->base.hconn;
+ if (hconn->cfg.event_channel && strcasecmp(h1_codec_request_state_method(hrs), POST_METHOD) != 0) {
+@@ -860,8 +902,12 @@ static int _client_rx_body_cb(h1_codec_request_state_t *hrs, qd_buffer_list_t *b
+ "[C%"PRIu64"][L%"PRIu64"] HTTP request body received len=%zu.",
+ hconn->conn_id, hconn->in_link_id, len);
+
+- // @TODO(kgiusti): handle Q2 block event:
+- qd_message_stream_data_append(msg, body, 0);
++ qd_message_stream_data_append(msg, body, &q2_blocked);
++ hconn->q2_blocked = hconn->q2_blocked || q2_blocked;
++ if (q2_blocked) {
++ // note: unit tests grep for this log!
++ qd_log(qdr_http1_adaptor->log, QD_LOG_TRACE, "[C%"PRIu64"] client link blocked on Q2 limit", hconn->conn_id);
++ }
+
+ //
+ // Notify the router that more data is ready to be pushed out on the delivery
+@@ -1635,6 +1681,10 @@ static void _write_pending_response(_client_request_t *hreq)
+ static void _client_request_free(_client_request_t *hreq)
+ {
+ if (hreq) {
++ // deactivate the Q2 callback
++ qd_message_t *msg = hreq->request_dlv ? qdr_delivery_message(hreq->request_dlv) : hreq->request_msg;
++ qd_message_clear_q2_unblocked_handler(msg);
++
+ qdr_http1_request_base_cleanup(&hreq->base);
+ qd_message_free(hreq->request_msg);
+ if (hreq->request_dlv) {
+diff --git a/src/adaptors/http1/http1_private.h b/src/adaptors/http1/http1_private.h
+index 858efb5d..5ecf4fdf 100644
+--- a/src/adaptors/http1/http1_private.h
++++ b/src/adaptors/http1/http1_private.h
+@@ -172,6 +172,8 @@ struct qdr_http1_connection_t {
+ qdr_link_t *in_link;
+ uint64_t in_link_id;
+ int in_link_credit; // provided by router
++ sys_atomic_t q2_restart; // signal to resume receive
++ bool q2_blocked; // stop reading from raw conn
+
+ // Oldest at HEAD
+ //
+@@ -220,7 +222,7 @@ void qdr_http1_error_response(qdr_http1_request_base_t *hreq,
+ const char *reason);
+ void qdr_http1_rejected_response(qdr_http1_request_base_t *hreq,
+ const qdr_error_t *error);
+-
++void qdr_http1_q2_unblocked_handler(const qd_alloc_safe_ptr_t context);
+
+ // http1_client.c protocol adaptor callbacks
+ //
+diff --git a/src/adaptors/http1/http1_server.c b/src/adaptors/http1/http1_server.c
+index 1ef6b2ab..c1fb17b0 100644
+--- a/src/adaptors/http1/http1_server.c
++++ b/src/adaptors/http1/http1_server.c
+@@ -152,6 +152,7 @@ static qdr_http1_connection_t *_create_server_connection(qd_http_connector_t *ct
+ hconn->adaptor = qdr_http1_adaptor;
+ hconn->handler_context.handler = &_handle_connection_events;
+ hconn->handler_context.context = hconn;
++ sys_atomic_init(&hconn->q2_restart, 0);
+ hconn->cfg.host = qd_strdup(bconfig->host);
+ hconn->cfg.port = qd_strdup(bconfig->port);
+ hconn->cfg.address = qd_strdup(bconfig->address);
+@@ -466,6 +467,48 @@ static void _accept_and_settle_request(_server_request_t *hreq)
+ hreq->request_settled = true;
+ }
+
++
++// handle PN_RAW_CONNECTION_READ
++static int _handle_conn_read_event(qdr_http1_connection_t *hconn)
++{
++ int error = 0;
++ qd_buffer_list_t blist;
++ uintmax_t length;
++
++ qda_raw_conn_get_read_buffers(hconn->raw_conn, &blist, &length);
++
++ if (HTTP1_DUMP_BUFFERS) {
++ fprintf(stdout, "\nServer raw buffer READ %"PRIuMAX" total octets\n", length);
++ qd_buffer_t *bb = DEQ_HEAD(blist);
++ while (bb) {
++ fprintf(stdout, " buffer='%.*s'\n", (int)qd_buffer_size(bb), (char*)&bb[1]);
++ bb = DEQ_NEXT(bb);
++ }
++ fflush(stdout);
++ }
++
++ if (length) {
++ qd_log(qdr_http1_adaptor->log, QD_LOG_TRACE,
++ "[C%"PRIu64"][L%"PRIu64"] Read %"PRIuMAX" bytes from server (%zu buffers)",
++ hconn->conn_id, hconn->in_link_id, length, DEQ_SIZE(blist));
++ hconn->in_http1_octets += length;
++ error = h1_codec_connection_rx_data(hconn->http_conn, &blist, length);
++ }
++ return error;
++}
++
++
++// handle PN_RAW_CONNECTION_NEED_READ_BUFFERS
++static void _handle_conn_need_read_buffers(qdr_http1_connection_t *hconn)
++{
++ // @TODO(kgiusti): backpressure if no credit
++ // if (hconn->in_link_credit > 0 */)
++ int granted = qda_raw_conn_grant_read_buffers(hconn->raw_conn);
++ qd_log(qdr_http1_adaptor->log, QD_LOG_DEBUG, "[C%"PRIu64"] %d read buffers granted",
++ hconn->conn_id, granted);
++}
++
++
+ // Proton Raw Connection Events
+ //
+ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, void *context)
+@@ -490,6 +533,7 @@ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, voi
+ // message (response body terminated on connection closed)
+ h1_codec_connection_rx_closed(hconn->http_conn);
+ pn_raw_connection_close(hconn->raw_conn);
++ hconn->q2_blocked = false;
+ break;
+ }
+
+@@ -557,39 +601,32 @@ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, voi
+ break;
+ }
+ case PN_RAW_CONNECTION_NEED_READ_BUFFERS: {
+- // @TODO(kgiusti): backpressure if no credit
+- // if (hconn->in_link_credit > 0 */)
+- int granted = qda_raw_conn_grant_read_buffers(hconn->raw_conn);
+- qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] %d read buffers granted",
+- hconn->conn_id, granted);
++ _handle_conn_need_read_buffers(hconn);
+ break;
+ }
+ case PN_RAW_CONNECTION_WAKE: {
++ int error = 0;
+ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Wake-up", hconn->conn_id);
++
++ if (sys_atomic_set(&hconn->q2_restart, 0)) {
++ // note: unit tests grep for this log!
++ qd_log(log, QD_LOG_TRACE, "[C%"PRIu64"] server link unblocked from Q2 limit", hconn->conn_id);
++ hconn->q2_blocked = false;
++ error = _handle_conn_read_event(hconn); // restart receiving
++ _handle_conn_need_read_buffers(hconn);
++ }
++
+ while (qdr_connection_process(hconn->qdr_conn)) {}
++
++ if (error)
++ qdr_http1_close_connection(hconn, "Incoming response message failed to parse");
++
+ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] Connection processing complete", hconn->conn_id);
+ break;
+ }
+ case PN_RAW_CONNECTION_READ: {
+- qd_buffer_list_t blist;
+- uintmax_t length;
+- qda_raw_conn_get_read_buffers(hconn->raw_conn, &blist, &length);
+-
+- if (HTTP1_DUMP_BUFFERS) {
+- fprintf(stdout, "\nServer raw buffer READ %"PRIuMAX" total octets\n", length);
+- qd_buffer_t *bb = DEQ_HEAD(blist);
+- while (bb) {
+- fprintf(stdout, " buffer='%.*s'\n", (int)qd_buffer_size(bb), (char*)&bb[1]);
+- bb = DEQ_NEXT(bb);
+- }
+- fflush(stdout);
+- }
+-
+- if (length) {
+- qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"][L%"PRIu64"] Read %"PRIuMAX" bytes from server",
+- hconn->conn_id, hconn->in_link_id, length);
+- hconn->in_http1_octets += length;
+- int error = h1_codec_connection_rx_data(hconn->http_conn, &blist, length);
++ if (!hconn->q2_blocked) {
++ int error = _handle_conn_read_event(hconn);
+ if (error)
+ qdr_http1_close_connection(hconn, "Incoming response message failed to parse");
+ }
+@@ -934,6 +971,13 @@ static int _server_rx_headers_done_cb(h1_codec_request_state_t *hrs, bool has_bo
+ qd_compose_free(rmsg->msg_props);
+ rmsg->msg_props = 0;
+
++ // future-proof: ensure the message headers have not caused Q2
++ // blocking. We only check for Q2 events while adding body data.
++ assert(!qd_message_is_Q2_blocked(rmsg->msg));
++
++ qd_alloc_safe_ptr_t hconn_sp = QD_SAFE_PTR_INIT(hconn);
++ qd_message_set_q2_unblocked_handler(rmsg->msg, qdr_http1_q2_unblocked_handler, hconn_sp);
++
+ // start delivery if possible
+ if (hconn->in_link_credit > 0 && rmsg == DEQ_HEAD(hreq->responses)) {
+ hconn->in_link_credit -= 1;
+@@ -962,6 +1006,7 @@ static int _server_rx_body_cb(h1_codec_request_state_t *hrs, qd_buffer_list_t *b
+ {
+ _server_request_t *hreq = (_server_request_t*) h1_codec_request_state_get_context(hrs);
+ qdr_http1_connection_t *hconn = hreq->base.hconn;
++ bool q2_blocked = false;
+
+ qd_log(qdr_http1_adaptor->log, QD_LOG_TRACE,
+ "[C%"PRIu64"][L%"PRIu64"] HTTP response body received len=%zu.",
+@@ -976,8 +1021,13 @@ static int _server_rx_body_cb(h1_codec_request_state_t *hrs, qd_buffer_list_t *b
+
+ qd_message_t *msg = rmsg->msg ? rmsg->msg : qdr_delivery_message(rmsg->dlv);
+
+- // @TODO(kgiusti): handle Q2 block event:
+- qd_message_stream_data_append(msg, body, 0);
++
++ qd_message_stream_data_append(msg, body, &q2_blocked);
++ hconn->q2_blocked = hconn->q2_blocked || q2_blocked;
++ if (q2_blocked) {
++ // note: unit tests grep for this log!
++ qd_log(qdr_http1_adaptor->log, QD_LOG_TRACE, "[C%"PRIu64"] server link blocked on Q2 limit", hconn->conn_id);
++ }
+
+ //
+ // Notify the router that more data is ready to be pushed out on the delivery
+@@ -1518,6 +1568,11 @@ uint64_t qdr_http1_server_core_link_deliver(qdr_http1_adaptor_t *adaptor,
+ static void _server_response_msg_free(_server_request_t *hreq, _server_response_msg_t *rmsg)
+ {
+ DEQ_REMOVE(hreq->responses, rmsg);
++
++ // deactivate the Q2 callback
++ qd_message_t *msg = rmsg->dlv ? qdr_delivery_message(rmsg->dlv) : rmsg->msg;
++ qd_message_clear_q2_unblocked_handler(msg);
++
+ qd_message_free(rmsg->msg);
+ qd_compose_free(rmsg->msg_props);
+ if (rmsg->dlv) {
+diff --git a/src/message.c b/src/message.c
+index f81d15e9..16794075 100644
+--- a/src/message.c
++++ b/src/message.c
+@@ -2936,14 +2936,16 @@ void qd_message_set_q2_unblocked_handler(qd_message_t *msg,
+ }
+
+
+-void qd_message_clear_Q2_unblocked_handler(qd_message_t *msg)
++void qd_message_clear_q2_unblocked_handler(qd_message_t *msg)
+ {
+- qd_message_content_t *content = MSG_CONTENT(msg);
++ if (msg) {
++ qd_message_content_t *content = MSG_CONTENT(msg);
+
+- LOCK(content->lock);
++ LOCK(content->lock);
+
+- content->q2_unblocker.handler = 0;
+- qd_nullify_safe_ptr(&content->q2_unblocker.context);
++ content->q2_unblocker.handler = 0;
++ qd_nullify_safe_ptr(&content->q2_unblocker.context);
+
+- UNLOCK(content->lock);
++ UNLOCK(content->lock);
++ }
+ }
+diff --git a/tests/system_test.py b/tests/system_test.py
+index bab62c42..5fec0914 100755
+--- a/tests/system_test.py
++++ b/tests/system_test.py
+@@ -733,6 +733,10 @@ class Qdrouterd(Process):
+ def wait_router_connected(self, router_id, **retry_kwargs):
+ retry(lambda: self.is_router_connected(router_id), **retry_kwargs)
+
++ @property
++ def logfile_path(self):
++ return os.path.join(self.outdir, self.logfile)
++
+
+ class Tester(object):
+ """Tools for use by TestCase
+diff --git a/tests/system_tests_http1_adaptor.py b/tests/system_tests_http1_adaptor.py
+index c182a3dd..9e6776ac 100644
+--- a/tests/system_tests_http1_adaptor.py
++++ b/tests/system_tests_http1_adaptor.py
+@@ -27,10 +27,13 @@ from __future__ import absolute_import
+ from __future__ import print_function
+
+
++import errno
++import io
++import select
+ import socket
+ import sys
+ from threading import Thread
+-from time import sleep
++from time import sleep, time
+ import uuid
+ try:
+ from http.server import HTTPServer, BaseHTTPRequestHandler
+@@ -1705,5 +1708,253 @@ class Http1AdaptorBadEndpointsTest(TestCase):
+ self.assertEqual(1, count)
+
+
++
++class Http1AdaptorQ2Standalone(TestCase):
++ """
++ Force Q2 blocking/recovery on both client and server endpoints. This test
++ uses a single router to ensure both client facing and server facing
++ Q2 components of the HTTP/1.x adaptor are triggered.
++ """
++ @classmethod
++ def setUpClass(cls):
++ """
++ Single router configuration with one HTTPListener and one
++ HTTPConnector.
++ """
++ super(Http1AdaptorQ2Standalone, cls).setUpClass()
++
++ cls.http_server_port = cls.tester.get_port()
++ cls.http_listener_port = cls.tester.get_port()
++
++ config = [
++ ('router', {'mode': 'standalone',
++ 'id': 'RowdyRoddyRouter',
++ 'allowUnsettledMulticast': 'yes'}),
++ ('listener', {'role': 'normal',
++ 'port': cls.tester.get_port()}),
++ ('httpListener', {'port': cls.http_listener_port,
++ 'protocolVersion': 'HTTP1',
++ 'address': 'testServer'}),
++ ('httpConnector', {'port': cls.http_server_port,
++ 'protocolVersion': 'HTTP1',
++ 'address': 'testServer'}),
++ ('address', {'prefix': 'closest', 'distribution': 'closest'}),
++ ('address', {'prefix': 'multicast', 'distribution': 'multicast'}),
++ ]
++ config = Qdrouterd.Config(config)
++ cls.INT_A = cls.tester.qdrouterd("TestBadEndpoints", config, wait=True)
++ cls.INT_A.listener = cls.INT_A.addresses[0]
++
++
++ def _write_until_full(self, sock, data, timeout):
++ """
++ Write data to socket until either all data written or timeout.
++ Return the number of bytes written, which will == len(data) if timeout
++ not hit
++ """
++ sock.setblocking(0)
++ sent = 0
++
++ while sent < len(data):
++ try:
++ _, rw, _ = select.select([], [sock], [], timeout)
++ except select.error as serror:
++ if serror[0] == errno.EINTR:
++ print("ignoring interrupt from select(): %s" % str(serror))
++ continue
++ raise # assuming fatal...
++ if rw:
++ sent += sock.send(data[sent:])
++ else:
++ break # timeout
++ return sent
++
++ def _read_until_empty(self, sock, timeout):
++ """
++ Read data from socket until timeout occurs. Return read data.
++ """
++ sock.setblocking(0)
++ data = b''
++
++ while True:
++ try:
++ rd, _, _ = select.select([sock], [], [], timeout)
++ except select.error as serror:
++ if serror[0] == errno.EINTR:
++ print("ignoring interrupt from select(): %s" % str(serror))
++ continue
++ raise # assuming fatal...
++ if rd:
++ data += sock.recv(4096)
++ else:
++ break # timeout
++ return data
++
++ def test_01_backpressure_client(self):
++ """
++ Trigger Q2 backpressure against the HTTP client.
++ """
++
++ # create a listener socket to act as the server service
++ server_listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
++ server_listener.settimeout(TIMEOUT)
++ server_listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
++ server_listener.bind(('', self.http_server_port))
++ server_listener.listen(1)
++
++ # block until router connects
++ server_sock, host_port = server_listener.accept()
++ server_sock.settimeout(0.5)
++ server_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
++
++ # create a client connection to the router
++ client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
++ client_sock.settimeout(0.5)
++ client_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
++ client_sock.connect((host_port[0], self.http_listener_port))
++
++ # send a Very Large PUSH request, expecting it to block at some point
++
++ push_req_hdr = b'PUSH / HTTP/1.1\r\nTransfer-Encoding: chunked\r\n\r\n'
++ count = self._write_until_full(client_sock, push_req_hdr, 1.0)
++ self.assertEqual(len(push_req_hdr), count)
++
++ chunk = b'8000\r\n' + b'X' * 0x8000 + b'\r\n'
++ last_chunk = b'0 \r\n\r\n'
++ count = 0
++ deadline = time() + TIMEOUT
++ while deadline >= time():
++ count = self._write_until_full(client_sock, chunk, 5.0)
++ if count < len(chunk):
++ break
++ self.assertFalse(time() > deadline,
++ "Client never blocked as expected!")
++
++ # client should now be in Q2 block. Drain the server to unblock Q2
++ _ = self._read_until_empty(server_sock, 2.0)
++
++ # finish the PUSH
++ if count:
++ remainder = self._write_until_full(client_sock, chunk[count:], 1.0)
++ self.assertEqual(len(chunk), count + remainder)
++
++ count = self._write_until_full(client_sock, last_chunk, 1.0)
++ self.assertEqual(len(last_chunk), count)
++
++ # receive the request and reply
++ _ = self._read_until_empty(server_sock, 2.0)
++
++ response = b'HTTP/1.1 201 Created\r\nContent-Length: 0\r\n\r\n'
++ count = self._write_until_full(server_sock, response, 1.0)
++ self.assertEqual(len(response), count)
++
++ # complete the response read
++ _ = self._read_until_empty(client_sock, 2.0)
++ self.assertEqual(len(response), len(_))
++
++ client_sock.shutdown(socket.SHUT_RDWR)
++ client_sock.close()
++
++ server_sock.shutdown(socket.SHUT_RDWR)
++ server_sock.close()
++
++ server_listener.shutdown(socket.SHUT_RDWR)
++ server_listener.close()
++
++ # search the router log file to verify Q2 was hit
++
++ block_ct = 0
++ unblock_ct = 0
++ with io.open(self.INT_A.logfile_path) as f:
++ for line in f:
++ if 'client link blocked on Q2 limit' in line:
++ block_ct += 1
++ if 'client link unblocked from Q2 limit' in line:
++ unblock_ct += 1
++ self.assertTrue(block_ct > 0)
++ self.assertEqual(block_ct, unblock_ct)
++
++ def test_02_backpressure_server(self):
++ """
++ Trigger Q2 backpressure against the HTTP server.
++ """
++ small_get_req = b'GET / HTTP/1.1\r\nContent-Length: 0\r\n\r\n'
++
++ # create a listener socket to act as the server service
++ server_listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
++ server_listener.settimeout(TIMEOUT)
++ server_listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
++ server_listener.bind(('', self.http_server_port))
++ server_listener.listen(1)
++
++ # block until router connects
++ server_sock, host_port = server_listener.accept()
++ server_sock.settimeout(0.5)
++ server_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
++
++ # create a client connection to the router
++ client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
++ client_sock.settimeout(0.5)
++ client_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
++ client_sock.connect((host_port[0], self.http_listener_port))
++
++ # send GET request - expect this to be successful
++ count = self._write_until_full(client_sock, small_get_req, 1.0)
++ self.assertEqual(len(small_get_req), count)
++
++ request = self._read_until_empty(server_sock, 5.0)
++ self.assertEqual(len(small_get_req), len(request))
++
++ # send a Very Long response, expecting it to block at some point
++ chunk = b'8000\r\n' + b'X' * 0x8000 + b'\r\n'
++ last_chunk = b'0 \r\n\r\n'
++ response = b'HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\n\r\n'
++
++ count = self._write_until_full(server_sock, response, 1.0)
++ self.assertEqual(len(response), count)
++
++ count = 0
++ deadline = time() + TIMEOUT
++ while deadline >= time():
++ count = self._write_until_full(server_sock, chunk, 5.0)
++ if count < len(chunk):
++ break
++ self.assertFalse(time() > deadline,
++ "Server never blocked as expected!")
++
++ # server should now be in Q2 block. Drain the client to unblock Q2
++ _ = self._read_until_empty(client_sock, 2.0)
++
++ # finish the response
++ if count:
++ remainder = self._write_until_full(server_sock, chunk[count:], 1.0)
++ self.assertEqual(len(chunk), count + remainder)
++
++ count = self._write_until_full(server_sock, last_chunk, 1.0)
++ self.assertEqual(len(last_chunk), count)
++ server_sock.shutdown(socket.SHUT_RDWR)
++ server_sock.close()
++
++ _ = self._read_until_empty(client_sock, 1.0)
++ client_sock.shutdown(socket.SHUT_RDWR)
++ client_sock.close()
++
++ server_listener.shutdown(socket.SHUT_RDWR)
++ server_listener.close()
++
++ # search the router log file to verify Q2 was hit
++
++ block_ct = 0
++ unblock_ct = 0
++ with io.open(self.INT_A.logfile_path) as f:
++ for line in f:
++ if 'server link blocked on Q2 limit' in line:
++ block_ct += 1
++ if 'server link unblocked from Q2 limit' in line:
++ unblock_ct += 1
++ self.assertTrue(block_ct > 0)
++ self.assertEqual(block_ct, unblock_ct)
++
++
+ if __name__ == '__main__':
+ unittest.main(main_module())
+--
+2.20.1
+
+From 4816af35e8ffcfa3621301c97cc602558aa0d5d7 Mon Sep 17 00:00:00 2001
+From: Kenneth Giusti <kgiusti(a)apache.org>
+Date: Tue, 16 Feb 2021 20:25:21 -0500
+Subject: [PATCH 10/16] DISPATCH-1961: flush any Q2 blocked buffers on conn
+ close
+
+This closes #1039
+---
+ src/adaptors/http1/http1_server.c | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/src/adaptors/http1/http1_server.c b/src/adaptors/http1/http1_server.c
+index c1fb17b0..76c35cb7 100644
+--- a/src/adaptors/http1/http1_server.c
++++ b/src/adaptors/http1/http1_server.c
+@@ -529,11 +529,15 @@ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, voi
+ break;
+ }
+ case PN_RAW_CONNECTION_CLOSED_READ: {
++ if (hconn->q2_blocked) {
++ hconn->q2_blocked = false;
++ // drain any pending buffers blocked by Q2
++ _handle_conn_read_event(hconn);
++ }
+ // notify the codec so it can complete the current response
+ // message (response body terminated on connection closed)
+ h1_codec_connection_rx_closed(hconn->http_conn);
+ pn_raw_connection_close(hconn->raw_conn);
+- hconn->q2_blocked = false;
+ break;
+ }
+
+@@ -601,7 +605,8 @@ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, voi
+ break;
+ }
+ case PN_RAW_CONNECTION_NEED_READ_BUFFERS: {
+- _handle_conn_need_read_buffers(hconn);
++ if (!hconn->q2_blocked)
++ _handle_conn_need_read_buffers(hconn);
+ break;
+ }
+ case PN_RAW_CONNECTION_WAKE: {
+@@ -1136,7 +1141,7 @@ void qdr_http1_server_core_link_flow(qdr_http1_adaptor_t *adaptor,
+
+ if (hconn->in_link_credit > 0) {
+
+- if (hconn->raw_conn)
++ if (hconn->raw_conn && !hconn->q2_blocked)
+ qda_raw_conn_grant_read_buffers(hconn->raw_conn);
+
+ // check for pending responses that are blocked for credit
+--
+2.20.1
+
+From 67cf9a8d259052f2aed1c3b8a0fea5d1fde5248c Mon Sep 17 00:00:00 2001
+From: Ganesh Murthy <gmurthy(a)apache.org>
+Date: Thu, 18 Feb 2021 14:27:27 -0500
+Subject: [PATCH 11/16] DISPATCH-1952: Add back qd_bitmask_t to leak supression
+ list
+
+---
+ src/alloc_pool.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/alloc_pool.c b/src/alloc_pool.c
+index 2ab65675..79c14a27 100644
+--- a/src/alloc_pool.c
++++ b/src/alloc_pool.c
+@@ -102,6 +102,7 @@ static const char *leaking_types[] = {
+ "qdr_field_t",
+ "qdr_link_work_t",
+ "qd_buffer_t",
++ "qd_bitmask_t",
+
+ "qd_parsed_field_t", // DISPATCH-1701
+ "qdr_delivery_ref_t", // DISPATCH-1702
+--
+2.20.1
+
+From c32f02c27d0471adf20630f830d819348cdc9611 Mon Sep 17 00:00:00 2001
+From: Ganesh Murthy <gmurthy(a)apache.org>
+Date: Thu, 18 Feb 2021 14:07:52 -0500
+Subject: [PATCH 12/16] DISPATCH-1970: Zero out the conn->config pointer since
+ it has already been freed. This closes #1046.
+
+---
+ src/adaptors/http2/http2_adaptor.c | 12 +++++-------
+ 1 file changed, 5 insertions(+), 7 deletions(-)
+
+diff --git a/src/adaptors/http2/http2_adaptor.c b/src/adaptors/http2/http2_adaptor.c
+index 25347e40..7ffdb0d9 100644
+--- a/src/adaptors/http2/http2_adaptor.c
++++ b/src/adaptors/http2/http2_adaptor.c
+@@ -382,10 +382,6 @@ void free_qdr_http2_connection(qdr_http2_connection_t* http_conn, bool on_shutdo
+ buff = DEQ_HEAD(http_conn->granted_read_buffs);
+ }
+
+- if (http_conn->delete_egress_connections) {
+- http_conn->config = 0;
+- }
+-
+ qd_log(http2_adaptor->log_source, QD_LOG_TRACE, "[C%"PRIu64"] Freeing http2 connection in free_qdr_http2_connection", http_conn->conn_id);
+
+ free_qdr_http2_connection_t(http_conn);
+@@ -872,13 +868,13 @@ static void _http_record_request(qdr_http2_connection_t *conn, qdr_http2_stream_
+ remote_addr = conn->remote_address;
+ }
+ } else {
+- remote_addr = conn->config->host;
++ remote_addr = conn->config?conn->config->host:0;
+ }
+ qd_http_record_request(http2_adaptor->core,
+ stream_data->method,
+ stream_data->request_status,
+- conn->config->address,
+- remote_addr, conn->config->site,
++ conn->config?conn->config->address:0,
++ remote_addr, conn->config?conn->config->site:0,
+ stream_data->remote_site,
+ conn->ingress, stream_data->bytes_in, stream_data->bytes_out,
+ stream_data->stop && stream_data->start ? stream_data->stop - stream_data->start : 0);
+@@ -2094,6 +2090,8 @@ static void handle_disconnected(qdr_http2_connection_t* conn)
+ conn->stream_dispatcher_stream_data = 0;
+
+ if (conn->delete_egress_connections) {
++ // The config has already been freed by the qd_http_connector_decref() function, set it to zero here
++ conn->config = 0;
+ close_connections(conn);
+ }
+ }
+--
+2.20.1
+
+From e4f2a9090d3fee36efeff903dc9a628ea77135ff Mon Sep 17 00:00:00 2001
+From: Chuck Rolke <chug(a)apache.org>
+Date: Mon, 22 Feb 2021 11:24:15 -0500
+Subject: [PATCH 13/16] DISPATCH-1968: Avoid proton calls on a closed raw
+ connections
+
+ * Do not write new buffers if connection is CLOSED_WRITE
+ * Do not call connection_wake if CLOSED_READ or CLOSED_WRITE
+
+This closes #1047
+---
+ src/adaptors/tcp_adaptor.c | 45 ++++++++++++++++++++++++++++++++++----
+ 1 file changed, 41 insertions(+), 4 deletions(-)
+
+diff --git a/src/adaptors/tcp_adaptor.c b/src/adaptors/tcp_adaptor.c
+index 6cc8855f..69bed1ab 100644
+--- a/src/adaptors/tcp_adaptor.c
++++ b/src/adaptors/tcp_adaptor.c
+@@ -56,6 +56,8 @@ struct qdr_tcp_connection_t {
+ bool egress_dispatcher;
+ bool connector_closed;//only used if egress_dispatcher=true
+ bool in_list; // This connection is in the adaptor's connections list
++ bool raw_closed_read;
++ bool raw_closed_write;
+ qdr_delivery_t *initial_delivery;
+ qd_timer_t *activate_timer;
+ qd_bridge_config_t config;
+@@ -122,6 +124,9 @@ static void on_activate(void *context)
+
+ static void grant_read_buffers(qdr_tcp_connection_t *conn)
+ {
++ if (conn->raw_closed_read)
++ return;
++
+ pn_raw_buffer_t raw_buffers[READ_BUFFERS];
+ // Give proactor more read buffers for the socket
+ if (!pn_raw_connection_is_read_closed(conn->pn_raw_conn)) {
+@@ -231,6 +236,31 @@ static int handle_incoming(qdr_tcp_connection_t *conn)
+ return count;
+ }
+
++
++static void flush_outgoing_buffs(qdr_tcp_connection_t *conn)
++{
++ // Flush buffers staged for writing to raw conn
++ // and free possible references to stream data objects.
++ if (conn->outgoing_buff_count > 0) {
++ for (size_t i = conn->outgoing_buff_idx;
++ i < conn->outgoing_buff_idx + conn->outgoing_buff_count;
++ ++i) {
++ if (conn->outgoing_buffs[i].context) {
++ qd_message_stream_data_release(
++ (qd_message_stream_data_t*)conn->outgoing_buffs[i].context);
++ }
++ }
++ }
++ conn->outgoing_buff_count = 0;
++
++ // Flush in-progress stream data object
++ if (conn->outgoing_stream_data) {
++ free_qd_message_stream_data_t(conn->outgoing_stream_data);
++ conn->outgoing_stream_data = 0;
++ }
++}
++
++
+ static void free_qdr_tcp_connection(qdr_tcp_connection_t* tc)
+ {
+ qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] Freeing tcp_connection %p", tc->conn_id, (void*) tc);
+@@ -240,9 +270,7 @@ static void free_qdr_tcp_connection(qdr_tcp_connection_t* tc)
+ if (tc->activate_timer) {
+ qd_timer_free(tc->activate_timer);
+ }
+- if (tc->outgoing_stream_data) {
+- free_qd_message_stream_data_t(tc->outgoing_stream_data);
+- }
++ flush_outgoing_buffs(tc);
+ sys_mutex_free(tc->activation_lock);
+ //proactor will free the socket
+ free_qdr_tcp_connection_t(tc);
+@@ -348,6 +376,7 @@ static int read_message_body(qdr_tcp_connection_t *conn, qd_message_t *msg, pn_r
+ return used;
+ }
+
++
+ static bool write_outgoing_buffs(qdr_tcp_connection_t *conn)
+ {
+ // Send the outgoing buffs to pn_raw_conn.
+@@ -383,6 +412,12 @@ static bool write_outgoing_buffs(qdr_tcp_connection_t *conn)
+ static void handle_outgoing(qdr_tcp_connection_t *conn)
+ {
+ if (conn->outstream) {
++ if (conn->raw_closed_write) {
++ // flush outgoing buffers and free attached stream_data objects
++ flush_outgoing_buffs(conn);
++ // give no more buffers to raw connection
++ return;
++ }
+ qd_message_t *msg = qdr_delivery_message(conn->outstream);
+ bool read_more_body = true;
+
+@@ -534,11 +569,13 @@ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void
+ }
+ case PN_RAW_CONNECTION_CLOSED_READ: {
+ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] PN_RAW_CONNECTION_CLOSED_READ", conn->conn_id);
++ conn->raw_closed_read = true;
+ pn_raw_connection_close(conn->pn_raw_conn);
+ break;
+ }
+ case PN_RAW_CONNECTION_CLOSED_WRITE: {
+ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] PN_RAW_CONNECTION_CLOSED_WRITE", conn->conn_id);
++ conn->raw_closed_write = true;
+ pn_raw_connection_close(conn->pn_raw_conn);
+ break;
+ }
+@@ -1186,7 +1223,7 @@ static void qdr_tcp_activate(void *notused, qdr_connection_t *c)
+ if (context) {
+ qdr_tcp_connection_t* conn = (qdr_tcp_connection_t*) context;
+ sys_mutex_lock(conn->activation_lock);
+- if (conn->pn_raw_conn) {
++ if (conn->pn_raw_conn && !(conn->raw_closed_read || conn->raw_closed_write)) {
+ qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] qdr_tcp_activate: waking raw connection", conn->conn_id);
+ pn_raw_connection_wake(conn->pn_raw_conn);
+ sys_mutex_unlock(conn->activation_lock);
+--
+2.20.1
+
+From 29911e6bb37d542ec662ae4af947e98c93619591 Mon Sep 17 00:00:00 2001
+From: Chuck Rolke <chug(a)apache.org>
+Date: Tue, 23 Feb 2021 16:48:05 -0500
+Subject: [PATCH 14/16] DISPATCH-1947: TCP Adaptor flow control
+
+This closes #1056
+---
+ src/adaptors/tcp_adaptor.c | 88 +++++++++++++++++++++++++++++++++-----
+ 1 file changed, 78 insertions(+), 10 deletions(-)
+
+diff --git a/src/adaptors/tcp_adaptor.c b/src/adaptors/tcp_adaptor.c
+index 69bed1ab..0b831231 100644
+--- a/src/adaptors/tcp_adaptor.c
++++ b/src/adaptors/tcp_adaptor.c
+@@ -17,6 +17,7 @@
+ * under the License.
+ */
+
++#include "tcp_adaptor.h"
+ #include <proton/condition.h>
+ #include <proton/listener.h>
+ #include <proton/netaddr.h>
+@@ -26,7 +27,6 @@
+ #include "qpid/dispatch/ctools.h"
+ #include "qpid/dispatch/protocol_adaptor.h"
+ #include "delivery.h"
+-#include "tcp_adaptor.h"
+ #include <stdio.h>
+ #include <inttypes.h>
+
+@@ -78,6 +78,9 @@ struct qdr_tcp_connection_t {
+ int outgoing_buff_count; // number of buffers with data
+ int outgoing_buff_idx; // first buffer with data
+
++ sys_atomic_t q2_restart; // signal to resume receive
++ bool q2_blocked; // stop reading from raw conn
++
+ DEQ_LINKS(qdr_tcp_connection_t);
+ };
+
+@@ -148,7 +151,37 @@ static void grant_read_buffers(qdr_tcp_connection_t *conn)
+ }
+ }
+
+-static int handle_incoming(qdr_tcp_connection_t *conn)
++
++// Per-message callback to resume receiving after Q2 is unblocked on the
++// incoming link.
++// This routine must be thread safe: the thread on which it is running
++// is not an IO thread that owns the underlying pn_raw_conn.
++//
++void qdr_tcp_q2_unblocked_handler(const qd_alloc_safe_ptr_t context)
++{
++ qdr_tcp_connection_t *tc = (qdr_tcp_connection_t*)qd_alloc_deref_safe_ptr(&context);
++ if (tc == 0) {
++ // bad news.
++ assert(false);
++ return;
++ }
++
++ // prevent the tc from being deleted while running:
++ sys_mutex_lock(tc->activation_lock);
++
++ if (tc && tc->pn_raw_conn) {
++ sys_atomic_set(&tc->q2_restart, 1);
++ pn_raw_connection_wake(tc->pn_raw_conn);
++ }
++
++ sys_mutex_unlock(tc->activation_lock);
++}
++
++
++// Fetch incoming raw incoming buffers from proton and pass them to
++// existing delivery or create a new delivery.
++// If close is pending then do not give more buffers to proton.
++static int handle_incoming_impl(qdr_tcp_connection_t *conn, bool close_pending)
+ {
+ //
+ // Don't initiate an ingress stream message if we don't yet have a reply-to address and credit.
+@@ -163,6 +196,16 @@ static int handle_incoming(qdr_tcp_connection_t *conn)
+ return 0;
+ }
+
++ //
++ // Don't read from proton if in Q2 holdoff
++ //
++ if (conn->q2_blocked) {
++ qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] handle_incoming q2_blocked", conn->conn_id);
++ return 0;
++ }
++
++ // Read all buffers available from proton.
++ // Collect buffers for ingress; free empty buffers.
+ qd_buffer_list_t buffers;
+ DEQ_INIT(buffers);
+ pn_raw_buffer_t raw_buffers[READ_BUFFERS];
+@@ -182,14 +225,20 @@ static int handle_incoming(qdr_tcp_connection_t *conn)
+ }
+ }
+ }
+-
+ qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] Took %zu read buffers", conn->conn_id, DEQ_SIZE(buffers));
+ qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] Freed %i read buffers", conn->conn_id, free_count);
+- grant_read_buffers(conn);
++
++ // Only grant more buffers to proton for reading if close is not pending
++ if (!close_pending) {
++ grant_read_buffers(conn);
++ }
+
+ if (conn->instream) {
+- // @TODO(kgiusti): handle Q2 block event:
+- qd_message_stream_data_append(qdr_delivery_message(conn->instream), &buffers, 0);
++ qd_message_stream_data_append(qdr_delivery_message(conn->instream), &buffers, &conn->q2_blocked);
++ if (conn->q2_blocked) {
++ // note: unit tests grep for this log!
++ qd_log(tcp_adaptor->log_source, QD_LOG_TRACE, "[C%"PRIu64"] client link blocked on Q2 limit", conn->conn_id);
++ }
+ qdr_delivery_continue(tcp_adaptor->core, conn->instream, false);
+ qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"][L%"PRIu64"] Continuing message with %i bytes", conn->conn_id, conn->incoming_id, count);
+ } else {
+@@ -230,6 +279,10 @@ static int handle_incoming(qdr_tcp_connection_t *conn)
+ qd_message_compose_2(msg, props, false);
+ qd_compose_free(props);
+
++ // set up message q2 unblocked callback handler
++ qd_alloc_safe_ptr_t conn_sp = QD_SAFE_PTR_INIT(conn);
++ qd_message_set_q2_unblocked_handler(msg, qdr_tcp_q2_unblocked_handler, conn_sp);
++
+ conn->instream = qdr_link_deliver(conn->incoming, msg, 0, false, 0, 0, 0, 0);
+ qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"][L%"PRIu64"] Initiating message with %i bytes", conn->conn_id, conn->incoming_id, count);
+ }
+@@ -237,10 +290,16 @@ static int handle_incoming(qdr_tcp_connection_t *conn)
+ }
+
+
++static int handle_incoming(qdr_tcp_connection_t *conn)
++{
++ // Normal incoming runs with no close pending
++ return handle_incoming_impl(conn, false);
++}
++
+ static void flush_outgoing_buffs(qdr_tcp_connection_t *conn)
+ {
+ // Flush buffers staged for writing to raw conn
+- // and free possible references to stream data objects.
++ // and release any references to stream data objects.
+ if (conn->outgoing_buff_count > 0) {
+ for (size_t i = conn->outgoing_buff_idx;
+ i < conn->outgoing_buff_idx + conn->outgoing_buff_count;
+@@ -263,10 +322,10 @@ static void flush_outgoing_buffs(qdr_tcp_connection_t *conn)
+
+ static void free_qdr_tcp_connection(qdr_tcp_connection_t* tc)
+ {
+- qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] Freeing tcp_connection %p", tc->conn_id, (void*) tc);
+ free(tc->reply_to);
+ free(tc->remote_address);
+ free(tc->global_id);
++ sys_atomic_destroy(&tc->q2_restart);
+ if (tc->activate_timer) {
+ qd_timer_free(tc->activate_timer);
+ }
+@@ -278,7 +337,6 @@ static void free_qdr_tcp_connection(qdr_tcp_connection_t* tc)
+
+ static void handle_disconnected(qdr_tcp_connection_t* conn)
+ {
+- qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"] handle_disconnected", conn->conn_id);
+ if (conn->instream) {
+ qd_log(tcp_adaptor->log_source, QD_LOG_DEBUG, "[C%"PRIu64"][L%"PRIu64"] handle_disconnected - close instream", conn->conn_id, conn->incoming_id);
+ qd_message_set_receive_complete(qdr_delivery_message(conn->instream));
+@@ -552,8 +610,8 @@ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void
+ switch (pn_event_type(e)) {
+ case PN_RAW_CONNECTION_CONNECTED: {
+ if (conn->ingress) {
+- qdr_tcp_connection_ingress_accept(conn);
+ qd_log(log, QD_LOG_INFO, "[C%"PRIu64"] PN_RAW_CONNECTION_CONNECTED Ingress accepted to %s from %s (global_id=%s)", conn->conn_id, conn->config.host_port, conn->remote_address, conn->global_id);
++ qdr_tcp_connection_ingress_accept(conn);
+ break;
+ } else {
+ conn->remote_address = get_address_string(conn->pn_raw_conn);
+@@ -569,6 +627,8 @@ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void
+ }
+ case PN_RAW_CONNECTION_CLOSED_READ: {
+ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] PN_RAW_CONNECTION_CLOSED_READ", conn->conn_id);
++ conn->q2_blocked = false;
++ handle_incoming_impl(conn, true);
+ conn->raw_closed_read = true;
+ pn_raw_connection_close(conn->pn_raw_conn);
+ break;
+@@ -601,6 +661,12 @@ static void handle_connection_event(pn_event_t *e, qd_server_t *qd_server, void
+ }
+ case PN_RAW_CONNECTION_WAKE: {
+ qd_log(log, QD_LOG_DEBUG, "[C%"PRIu64"] PN_RAW_CONNECTION_WAKE", conn->conn_id);
++ if (sys_atomic_set(&conn->q2_restart, 0)) {
++ // note: unit tests grep for this log!
++ qd_log(log, QD_LOG_TRACE, "[C%"PRIu64"] client link unblocked from Q2 limit", conn->conn_id);
++ conn->q2_blocked = false;
++ handle_incoming(conn);
++ }
+ while (qdr_connection_process(conn->qdr_conn)) {}
+ break;
+ }
+@@ -646,6 +712,7 @@ static qdr_tcp_connection_t *qdr_tcp_connection_ingress(qd_tcp_listener_t* liste
+ tc->context.handler = &handle_connection_event;
+ tc->config = listener->config;
+ tc->server = listener->server;
++ sys_atomic_init(&tc->q2_restart, 0);
+ tc->pn_raw_conn = pn_raw_connection();
+ pn_raw_connection_set_context(tc->pn_raw_conn, tc);
+ //the following call will cause a PN_RAW_CONNECTION_CONNECTED
+@@ -739,6 +806,7 @@ static qdr_tcp_connection_t *qdr_tcp_connection_egress(qd_bridge_config_t *confi
+ tc->context.handler = &handle_connection_event;
+ tc->config = *config;
+ tc->server = server;
++ sys_atomic_init(&tc->q2_restart, 0);
+ tc->conn_id = qd_server_allocate_connection_id(tc->server);
+
+ //
+--
+2.20.1
+
+From 29d04211d03b27049c59418a2d04c76fb60e5fa9 Mon Sep 17 00:00:00 2001
+From: Ganesh Murthy <gmurthy(a)apache.org>
+Date: Tue, 2 Mar 2021 09:25:11 -0500
+Subject: [PATCH 15/16] DISPATCH-1984: Matched the method signature of
+ _client_rx_body_cb with the implementation. Modified uintmax_t len to size_t
+ len
+
+---
+ src/adaptors/http1/http1_client.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/adaptors/http1/http1_client.c b/src/adaptors/http1/http1_client.c
+index ff033807..422dd6ac 100644
+--- a/src/adaptors/http1/http1_client.c
++++ b/src/adaptors/http1/http1_client.c
+@@ -106,7 +106,7 @@ static int _client_rx_response_cb(h1_codec_request_state_t *lib_rs,
+ uint32_t version_minor);
+ static int _client_rx_header_cb(h1_codec_request_state_t *lib_rs, const char *key, const char *value);
+ static int _client_rx_headers_done_cb(h1_codec_request_state_t *lib_rs, bool has_body);
+-static int _client_rx_body_cb(h1_codec_request_state_t *lib_rs, qd_buffer_list_t *body, uintmax_t len, bool more);
++static int _client_rx_body_cb(h1_codec_request_state_t *lib_rs, qd_buffer_list_t *body, size_t len, bool more);
+ static void _client_rx_done_cb(h1_codec_request_state_t *lib_rs);
+ static void _client_request_complete_cb(h1_codec_request_state_t *lib_rs, bool cancelled);
+ static void _handle_connection_events(pn_event_t *e, qd_server_t *qd_server, void *context);
+--
+2.20.1
+
+From 6bb2eb534f9243caeb00891821be8f0d133e4822 Mon Sep 17 00:00:00 2001
+From: Ganesh Murthy <gmurthy(a)apache.org>
+Date: Thu, 4 Mar 2021 12:42:00 -0500
+Subject: [PATCH 16/16] DISPATCH-1988: Added code to start routing a delivery
+ only if there is some data in the content->buffers or in content->pending. If
+ we never receive any data and the receive is complete, the delivery is
+ rejected. This closes #1062
+
+---
+ include/qpid/dispatch/message.h | 8 ++
+ src/message.c | 20 ++++-
+ src/router_node.c | 36 ++++++++
+ tests/system_tests_link_routes.py | 145 ++++++++++++++++++++++++++++++
+ 4 files changed, 207 insertions(+), 2 deletions(-)
+
+diff --git a/include/qpid/dispatch/message.h b/include/qpid/dispatch/message.h
+index 07e144ad..1558dde3 100644
+--- a/include/qpid/dispatch/message.h
++++ b/include/qpid/dispatch/message.h
+@@ -247,6 +247,14 @@ qd_message_t *qd_message_receive(pn_delivery_t *delivery);
+ */
+ qd_message_t * qd_get_message_context(pn_delivery_t *delivery);
+
++/**
++ * Returns true if there is at least one non-empty buffer at the head of the content->buffers list
++ * or if the content->pending buffer is non-empty.
++ *
++ * @param msg A pointer to a message.
++ */
++bool qd_message_has_data_in_content_or_pending_buffers(qd_message_t *msg);
++
+ /**
+ * Send the message outbound on an outgoing link.
+ *
+diff --git a/src/message.c b/src/message.c
+index 16794075..3508a996 100644
+--- a/src/message.c
++++ b/src/message.c
+@@ -1255,8 +1255,6 @@ void qd_message_add_fanout(qd_message_t *in_msg,
+ // DISPATCH-1590: content->buffers may not be set up yet if
+ // content->pending is the first buffer and it is not yet full.
+ if (!buf) {
+- // assumption: proton will never signal a readable delivery if there is
+- // no data at all.
+ assert(content->pending && qd_buffer_size(content->pending) > 0);
+ DEQ_INSERT_TAIL(content->buffers, content->pending);
+ content->pending = 0;
+@@ -1422,6 +1420,24 @@ qd_message_t * qd_get_message_context(pn_delivery_t *delivery)
+ return 0;
+ }
+
++bool qd_message_has_data_in_content_or_pending_buffers(qd_message_t *msg)
++{
++ if (!msg)
++ return false;
++
++ if (MSG_CONTENT(msg)) {
++ if (DEQ_SIZE(MSG_CONTENT(msg)->buffers) > 0) {
++ qd_buffer_t *buf = DEQ_HEAD(MSG_CONTENT(msg)->buffers);
++ if (buf && qd_buffer_size(buf) > 0)
++ return true;
++ }
++ if (MSG_CONTENT(msg)->pending && qd_buffer_size(MSG_CONTENT(msg)->pending) > 0)
++ return true;
++ }
++
++ return false;
++}
++
+
+ qd_message_t *qd_message_receive(pn_delivery_t *delivery)
+ {
+diff --git a/src/router_node.c b/src/router_node.c
+index 70d98f91..bccf6cfd 100644
+--- a/src/router_node.c
++++ b/src/router_node.c
+@@ -451,6 +451,42 @@ static bool AMQP_rx_handler(void* context, qd_link_t *link)
+ qd_message_t *msg = qd_message_receive(pnd);
+ bool receive_complete = qd_message_receive_complete(msg);
+
++ //
++ // The very first time AMQP_rx_handler is called on a PN_DELIVERY event, it calls qd_message_receive(). When qd_message_receive() returns, we check here if
++ // there are any data in the content buffers. If there is no content in the buffers, there is no reason to route the delivery. We will wait for some data
++ // in the buffers before we start to route the delivery.
++ // Notice that the if statement checks for the existence of a delivery (qdr_delivery_t). Existence of a delivery means that the delivery has been routed when
++ // there was data in the buffers (When a delivery has been routed successfully, the delivery (qdr_delivery_t) will be non null)
++ //
++ // The following if statement will deal with the following cases:-
++ // 1. We receive one empty transfer frame with more=true followed by another empty transfer frame with (more=false and abort=true) or with just more=false
++ // In this case, there is no data at all in the message content buffers, we will reject the message when receive_complete=true. We will never route this
++ // delivery, so core thread will not be involved
++ // 2. We receive 2 or more empty transfer frames with more=true followed by another empty transfer frame with (more=false and abort=true) or with just more=false
++ // This case is similar to #1. We have no content in any of the buffers, we will reject this message after receive_complete=true. We will never route this
++ // delivery, so core thread will not be involved
++ // 3. Exactly one empty transfer frame with more=false and abort=false
++ // In this case, again there is still no content in any of the buffers, we will reject this message. Again, we will not route this message, so the core thread is not involved.
++ //
++ if (!delivery && !qd_message_has_data_in_content_or_pending_buffers(msg)) {
++ if (receive_complete) {
++ // There is no qdr_delivery_t (delivery) yet which means this message has not been routed yet (the first run of this function is not complete yet) and
++ // the message is fully received (receive_complete=true) but there is no content in the message buffers.
++ // This is only possible if there were one or more empty transfer frames.
++ // Since there is nothing in the message, we will reject it (AMQP message must have a non empty message body)
++ pn_link_flow(pn_link, 1);
++ if (pn_delivery_aborted(pnd))
++ qd_message_set_discard(msg, true);
++ pn_delivery_update(pnd, PN_REJECTED);
++ pn_delivery_settle(pnd);
++ // qd_message_free will free all the associated content buffers and also the content->pending buffer
++ qd_message_free(msg);
++ qd_log(router->log_source, QD_LOG_TRACE, "Message rejected due to empty message");
++ }
++
++ return false;
++ }
++
+ if (!qd_message_oversize(msg)) {
+ // message not rejected as oversize
+ if (receive_complete) {
+diff --git a/tests/system_tests_link_routes.py b/tests/system_tests_link_routes.py
+index 1334618d..80ce0cdd 100644
+--- a/tests/system_tests_link_routes.py
++++ b/tests/system_tests_link_routes.py
+@@ -26,6 +26,7 @@ import os
+ from time import sleep, time
+ from threading import Event
+ from subprocess import PIPE, STDOUT
++import socket
+
+ from system_test import TestCase, Qdrouterd, main_module, TIMEOUT, Process, TestTimeout, \
+ AsyncTestSender, AsyncTestReceiver, MgmtMsgProxy, unittest, QdManager
+@@ -1761,6 +1762,150 @@ class LinkRouteDrainTest(TestCase):
+ self.assertEquals(drain_receiver.error, None)
+
+
++class EmptyTransferTest(TestCase):
++ @classmethod
++ def setUpClass(cls):
++ super(EmptyTransferTest, cls).setUpClass()
++ cls.ROUTER_LISTEN_PORT = cls.tester.get_port()
++
++ config = [
++ ('router', {'mode': 'standalone', 'id': 'QDR.A'}),
++ # the client will connect to this listener
++ ('listener', {'role': 'normal',
++ 'host': '0.0.0.0',
++ 'port': cls.ROUTER_LISTEN_PORT,
++ 'saslMechanisms': 'ANONYMOUS'}),
++ # to connect to the fake broker
++ ('connector', {'name': 'broker',
++ 'role': 'route-container',
++ 'host': '127.0.0.1',
++ 'port': cls.tester.get_port(),
++ 'saslMechanisms': 'ANONYMOUS'}),
++ ('linkRoute',
++ {'prefix': 'examples', 'containerId': 'FakeBroker',
++ 'direction': 'in'}),
++ ('linkRoute',
++ {'prefix': 'examples', 'containerId': 'FakeBroker',
++ 'direction': 'out'})
++ ]
++ config = Qdrouterd.Config(config)
++ cls.router = cls.tester.qdrouterd('A', config, wait=False)
++
++ def _fake_broker(self, cls):
++ """
++ Spawn a fake broker listening on the broker's connector
++ """
++ fake_broker = cls(self.router.connector_addresses[0])
++ # wait until the connection to the fake broker activates
++ self.router.wait_connectors()
++ return fake_broker
++
++ def test_DISPATCH_1988(self):
++ fake_broker = self._fake_broker(FakeBroker)
++ AMQP_OPEN_BEGIN_ATTACH = bytearray(
++ b'\x41\x4d\x51\x50\x00\x01\x00\x00\x00\x00\x00\x21\x02\x00\x00'
++ b'\x00\x00\x53\x10\xd0\x00\x00\x00\x11\x00\x00\x00\x04\xa1\x06'
++ b'\x2e\x2f\x73\x65\x6e\x64\x40\x40\x60\x7f\xff\x00\x00\x00\x21'
++ b'\x02\x00\x00\x00\x00\x53\x11\xd0\x00\x00\x00\x11\x00\x00\x00'
++ b'\x04\x40\x52\x00\x70\x7f\xff\xff\xff\x70\x7f\xff\xff\xff\x00'
++ b'\x00\x00\x5b\x02\x00\x00\x00\x00\x53\x12\xd0\x00\x00\x00\x4b'
++ b'\x00\x00\x00\x0b\xa1\x09\x6d\x79\x5f\x73\x65\x6e\x64\x65\x72'
++ b'\x52\x00\x42\x50\x02\x50\x00\x00\x53\x28\xd0\x00\x00\x00\x0b'
++ b'\x00\x00\x00\x05\x40\x52\x00\x40\x52\x00\x42\x00\x53\x29\xd0'
++ b'\x00\x00\x00\x14\x00\x00\x00\x05\xa1\x08\x65\x78\x61\x6d\x70'
++ b'\x6c\x65\x73\x52\x00\x40\x52\x00\x42\x40\x40\x52\x00\x53\x00')
++
++ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
++ # Connect to the router listening port and send an amqp, open,
++ # begin, attach. The attach is sent on the link
++ # routed address, "examples"
++ s.connect(("0.0.0.0", EmptyTransferTest.ROUTER_LISTEN_PORT))
++ s.sendall(AMQP_OPEN_BEGIN_ATTACH)
++
++ # Give a second for the attach to propagate to the broker and
++ # for the broker to send a response attach
++ sleep(1)
++ data = s.recv(2048)
++ self.assertIn("examples", repr(data))
++
++ # First send a message on link routed address "examples" with
++ # message body of "message 0"
++ # Verify the the sent message has been accepted.
++ TRANSFER_1 = bytearray(b'\x00\x00\x00\x31\x02\x00\x00\x00'
++ + b'\x00\x53\x14\xc0\x0f\x0b\x43\x52\x01'
++ + b'\xa0\x01\x01\x43\x42'
++ + b'\x40\x40\x40\x40\x40\x42\x00\x53'
++ + b'\x73\xc0\x02\x01\x44\x00\x53\x77'
++ + b'\xa1\x09\x6d\x65\x73\x73\x61\x67'
++ + b'\x65\x20\x30')
++ s.sendall(TRANSFER_1)
++ sleep(0.5)
++ data = s.recv(1024)
++ # The delivery has been accepted.
++ self.assertIn("x00S$E", repr(data))
++
++ # Test case 1
++ # Send an empty transfer frame to the router and you should
++ # receive a rejected disposition from the router.
++ # Without the fix for DISPATCH_1988,
++ # upon sending this EMPTY_TRANSFER
++ # the router crashes with the following assert
++ # qpid-dispatch/src/message.c:1260: qd_message_add_fanout: Assertion `content->pending && qd_buffer_size(content->pending) > 0' failed.
++ # This is the empty transfer frame that is sent to the router.
++ # [0x614000030050]: AMQP:FRAME:0 <- @transfer(20) [handle=0, delivery-id=0, delivery-tag=b"\x01", message-format=0, settled=false, batchable=false]
++ EMPTY_TRANSFER = bytearray(b'\x00\x00\x00\x1c\x02\x00\x00\x00'
++ + b'\x00\x53\x14\xc0\x0f\x0b\x43\x52'
++ + b'\x02\xa0\x01\x02\x43\x42'
++ + b'\x42\x40\x40\x40\x40\x42')
++ s.sendall(EMPTY_TRANSFER)
++ sleep(1)
++ data = s.recv(1024)
++ # The delivery has been rejected.
++ self.assertIn("x00S%E", repr(data))
++
++ # Let's send another transfer to make sure that the
++ # router has not crashed.
++ TRANSFER_1 = bytearray(b'\x00\x00\x00\x31\x02\x00\x00\x00'
++ + b'\x00\x53\x14\xc0\x0f\x0b\x43\x52\x03'
++ + b'\xa0\x01\x03\x43\x42'
++ + b'\x40\x40\x40\x40\x40\x42\x00\x53'
++ + b'\x73\xc0\x02\x01\x44\x00\x53\x77'
++ + b'\xa1\x09\x6d\x65\x73\x73\x61\x67'
++ + b'\x65\x20\x30')
++ s.sendall(TRANSFER_1)
++ sleep(0.5)
++ data = s.recv(1024)
++ # The delivery has been accepted.
++ self.assertIn("x00S$E", repr(data))
++
++ # Test case 2
++ # Now, send two empty transfer frames, first transfer has
++ # more=true and the next transfer has more=false.
++ # This will again be rejected by the router.
++ # The following are the two transfer frames that will be
++ # sent to the router.
++ #[0x614000020050]: AMQP:FRAME: 0 <- @ transfer(20)[handle = 0, delivery - id = 4, delivery - tag = b"\x04", message - format = 0, settled = false, more = true, batchable = false]
++ #[0x614000020050]: AMQP:FRAME: 0 <- @ transfer(20)[handle = 0, delivery - id = 4, delivery - tag = b"\x04", message - format = 0, settled = false, more = false, batchable = false]
++ EMPTY_TRANSFER_MORE_TRUE = bytearray(
++ b'\x00\x00\x00\x1c\x02\x00\x00\x00'
++ + b'\x00\x53\x14\xc0\x0f\x0b\x43\x52\x04'
++ + b'\xa0\x01\x04\x43\x42'
++ + b'\x41\x40\x40\x40\x40\x42')
++ EMPTY_TRANSFER_MORE_FALSE = bytearray(
++ b'\x00\x00\x00\x1c\x02\x00\x00\x00'
++ + b'\x00\x53\x14\xc0\x0f\x0b\x43\x52\x04'
++ + b'\xa0\x01\x04\x43\x42'
++ + b'\x42\x40\x40\x40\x40\x42')
++ s.sendall(EMPTY_TRANSFER_MORE_TRUE)
++ s.sendall(EMPTY_TRANSFER_MORE_FALSE)
++ sleep(0.5)
++ data = s.recv(1024)
++ # The delivery has been rejected.
++ self.assertIn("x00S%E", repr(data))
++
++ s.close()
++
++
+ class ConnectionLinkRouteTest(TestCase):
+ """
+ Test connection scoped link route implementation
+--
+2.20.1
+
diff --git a/qpid-dispatch.spec b/qpid-dispatch.spec
index 5227c69..6b03e5b 100644
--- a/qpid-dispatch.spec
+++ b/qpid-dispatch.spec
@@ -30,7 +30,7 @@
%endif
ExcludeArch: i686
-ExcludeArch: armv7hl
+#ExcludeArch: armv7hl
%global proton_minimum_version 0.33.0
%global libwebsockets_minimum_version 3.2.0
@@ -61,7 +61,7 @@ ExcludeArch: i686
Source1: docs-%{version}-1.tar.gz
%endif
-#Patch1: dispatch.patch
+Patch1: dispatch.patch
Patch4: console-listener.patch
BuildRequires: gcc
@@ -221,7 +221,7 @@ Requires: %{pythonx}-qpid-proton >= %{proton_minimum_version}
%prep
%setup -q
-#%patch1 -p1
+%patch1 -p1
%patch4 -p1
mkdir pre_built
3 years, 1 month
Architecture specific change in rpms/google-cpu_features.git
by githook-noreply@fedoraproject.org
The package rpms/google-cpu_features.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/google-cpu_features.git/commit/?i....
Change:
+ExcludeArch: s390x
Thanks.
Full change:
============
commit ebcc0174565ecb6b2931a694a5474d4f93f88f30
Author: Antonio Trande <3974791-anto.trande(a)users.noreply.gitlab.com>
Date: Wed Mar 17 18:58:59 2021 +0100
First commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a274f2a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/cpu_features-0.6.0.tar.gz
diff --git a/google-cpu_features-create_soname.patch b/google-cpu_features-create_soname.patch
new file mode 100644
index 0000000..f54a530
--- /dev/null
+++ b/google-cpu_features-create_soname.patch
@@ -0,0 +1,11 @@
+--- a/CMakeLists.orig.txt 2021-02-26 22:26:45.246246073 +0100
++++ b/CMakeLists.txt 2021-02-26 22:26:09.153781594 +0100
+@@ -139,7 +139,7 @@
+ list(APPEND CPU_FEATURES_SRCS $<TARGET_OBJECTS:unix_based_hardware_detection>)
+ endif()
+ add_library(cpu_features ${CPU_FEATURES_HDRS} ${CPU_FEATURES_SRCS})
+-set_target_properties(cpu_features PROPERTIES PUBLIC_HEADER "${CPU_FEATURES_HDRS}")
++set_target_properties(cpu_features PROPERTIES PUBLIC_HEADER "${CPU_FEATURES_HDRS}" SOVERSION "${CPUFEATURES_VERSION_MAJOR}" VERSION "${CPUFEATURES_VERSION}")
+ setup_include_and_definitions(cpu_features)
+ target_link_libraries(cpu_features PUBLIC ${CMAKE_DL_LIBS})
+ set_property(TARGET cpu_features PROPERTY POSITION_INDEPENDENT_CODE ${BUILD_PIC})
diff --git a/google-cpu_features-unbundle_gtest.patch b/google-cpu_features-unbundle_gtest.patch
new file mode 100644
index 0000000..885d60c
--- /dev/null
+++ b/google-cpu_features-unbundle_gtest.patch
@@ -0,0 +1,43 @@
+--- a/CMakeLists.origin.txt 2020-10-15 11:09:51.000000000 +0200
++++ b/CMakeLists.txt 2021-02-26 21:58:41.234063535 +0100
+@@ -184,39 +184,7 @@
+ set(CMAKE_CXX_EXTENSIONS OFF) # prefer use of -std11 instead of -gnustd11
+
+ if(NOT TARGET gtest OR NOT TARGET gmock_main)
+- # Download and unpack googletest at configure time.
+- configure_file(
+- cmake/googletest.CMakeLists.txt.in
+- googletest-download/CMakeLists.txt
+- )
+-
+- execute_process(
+- COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
+- RESULT_VARIABLE result
+- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download)
+-
+- if(result)
+- message(FATAL_ERROR "CMake step for googletest failed: ${result}")
+- endif()
+-
+- execute_process(
+- COMMAND ${CMAKE_COMMAND} --build .
+- RESULT_VARIABLE result
+- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download)
+-
+- if(result)
+- message(FATAL_ERROR "Build step for googletest failed: ${result}")
+- endif()
+-
+- # Prevent overriding the parent project's compiler/linker settings on
+- # Windows.
+- set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
+-
+- # Add googletest directly to our build. This defines the gtest and
+- # gtest_main targets.
+- add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src
+- ${CMAKE_BINARY_DIR}/googletest-build
+- EXCLUDE_FROM_ALL)
++ find_package(GTest)
+ endif()
+
+ add_subdirectory(test)
diff --git a/google-cpu_features.spec b/google-cpu_features.spec
new file mode 100644
index 0000000..393b4d1
--- /dev/null
+++ b/google-cpu_features.spec
@@ -0,0 +1,67 @@
+# Unsupported
+# https://github.com/google/cpu_features#support
+ExcludeArch: s390x
+
+Name: google-cpu_features
+Version: 0.6.0
+Release: 2%{?dist}
+Summary: A cross-platform C library to retrieve CPU features at runtime
+License: ASL 2.0
+URL: https://github.com/google/cpu_features
+Source0: https://github.com/google/cpu_features/archive/v%{version}/cpu_features-%...
+
+Patch0: google-cpu_features-unbundle_gtest.patch
+Patch1: google-cpu_features-create_soname.patch
+
+BuildRequires: cmake
+BuildRequires: gcc
+BuildRequires: gcc-c++
+Buildrequires: gmock-devel
+BuildRequires: gtest-devel
+BuildRequires: make
+
+%description
+A cross-platform C library to retrieve CPU features at runtime.
+
+%package devel
+Summary: %{name} headers and development-related files
+Requires: %{name}%{?_isa} = %{version}-%{release}
+
+%description devel
+%{name} headers and development-related files, CMake config files.
+
+%prep
+%autosetup -n cpu_features-%{version} -p1
+
+%build
+%cmake \
+ -DCMAKE_BUILD_TYPE:STRING=Release \
+ -DCPUFEATURES_VERSION_MAJOR:STRING=0 \
+ -DCPUFEATURES_VERSION:STRING=0.6 \
+ -DCMAKE_SKIP_INSTALL_RPATH:BOOL=YES \
+ -DBUILD_PIC:BOOL=ON -DBUILD_TESTING:BOOL=ON
+%cmake_build
+
+%install
+%cmake_install
+
+%check
+%ctest -- -VV
+
+%files
+%license LICENSE
+%doc README.md CONTRIBUTING.md
+%{_bindir}/list_cpu_features
+%{_libdir}/libcpu_features.so.0*
+
+%files devel
+%{_libdir}/libcpu_features.so
+%{_includedir}/cpu_features/
+%{_libdir}/cmake/CpuFeatures/
+
+%changelog
+* Wed Mar 17 2021 Antonio Trande <sagitter(a)fedoraproject.org> - 0.6.0-2
+- Follow some tips from reviewing
+
+* Fri Feb 26 2021 Antonio Trande <sagitter(a)fedoraproject.org> - 0.6.0-1
+- Initial package
diff --git a/sources b/sources
new file mode 100644
index 0000000..e040312
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+SHA512 (cpu_features-0.6.0.tar.gz) = 006a2e05253712cf605ecabccdda63dd9325445f8d145d5e2432c4342332e652f318810997321849be131082db435d88143020fdc85268fba204586cf37eef0d
3 years, 1 month
Architecture specific change in rpms/qpid-dispatch.git
by githook-noreply@fedoraproject.org
The package rpms/qpid-dispatch.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/qpid-dispatch.git/commit/?id=bca0....
Change:
+ExcludeArch: armv7hl
Thanks.
Full change:
============
commit bca086293559697046ae5d1dd5be819ae8ab463d
Author: Irina Boverman <iboverma(a)redhat.com>
Date: Fri Mar 19 13:30:22 2021 -0400
0.15.0-1
diff --git a/qpid-dispatch.spec b/qpid-dispatch.spec
index d74ee9b..5227c69 100644
--- a/qpid-dispatch.spec
+++ b/qpid-dispatch.spec
@@ -30,7 +30,7 @@
%endif
ExcludeArch: i686
-ExcludeArch: armv7h
+ExcludeArch: armv7hl
%global proton_minimum_version 0.33.0
%global libwebsockets_minimum_version 3.2.0
3 years, 1 month
Architecture specific change in rpms/qpid-dispatch.git
by githook-noreply@fedoraproject.org
The package rpms/qpid-dispatch.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/qpid-dispatch.git/commit/?id=0c6f....
Change:
+ExcludeArch: armv7h
Thanks.
Full change:
============
commit 0c6ff80125d341c3e95d4d2758da4b5fa0e0a3df
Author: Irina Boverman <iboverma(a)redhat.com>
Date: Fri Mar 19 13:21:27 2021 -0400
0.15.0-1
diff --git a/qpid-dispatch.spec b/qpid-dispatch.spec
index 284b311..d74ee9b 100644
--- a/qpid-dispatch.spec
+++ b/qpid-dispatch.spec
@@ -29,6 +29,9 @@
%endif
+ExcludeArch: i686
+ExcludeArch: armv7h
+
%global proton_minimum_version 0.33.0
%global libwebsockets_minimum_version 3.2.0
%global libnghttp2_minimum_version 1.33.0
@@ -237,7 +240,6 @@ tar xvzpf %{SOURCE1} -C .
-DCMAKE_SKIP_RPATH:BOOL=OFF \
-DUSE_LIBWEBSOCKETS=ON \
-DCONSOLE_INSTALL=OFF \
- "-DCMAKE_C_FLAGS=$CMAKE_C_FLAGS $CFLAGS -Wno-error=incompatible-pointer-types -Wno-error=unused-function" \
.
make
make doc
3 years, 1 month