subtree updates

meta-raspberrypi: 90b3ac6fb3..836755370f:
  Alexandru Costache (3):
        conf/machine: Add Pi Zero 2 Wifi 64bit yocto machine
        linux-firmware-rpidistro: Package bcm43436 and bcm43436s firmware
        linux-raspberrypi: Bump to 5.10.78

  Andrei Gherzan (14):
        raspberrypi-firmware: Bump to 20211007
        linux-raspberrypi: Bump 5.10 to 5.10.76
        linux-raspberrypi: Drop 5.4
        README.md: Fix docs and minor tweaks
        docs: Bump copyright year
        README.md: Fix sponsor table
        README.md: Fix sponsor table take two
        docs: Fix RtD build
        docs: Add module dependency/requirement for RtD
        docs: Advertise raspberrypi0-2w-64 supported machine
        Update references to Yocto mailing list
        README.md: Fix the matrix chat link
        libwpe: Migrate build workaround from oe-core
        rpi-config: Take into consideration ENABLE_UART value of 0

  Cameron Kellough (1):
        rpi-base.inc: Added gpio-poweroff overlay. Some machines need to have the kernel toggle a gpio when an external power source needs to shut off power to complete a shutdown and de-energize the processor.  gpio-poweroff provides this functionality but was omitted from the kernel overlays brought oveer by the rpi-layer from the kernel. Signed-off-by: Cameron Kellough <cameron@telemetrak.com>

  Joel Winarske (1):
        mesa: Enable building vulkan driver

  Khem Raj (4):
        linux-firmware-rpidistro: Use bullseye branch
        parselogs: Update the error regexps to 5.10 kernel
        linux-raspberrypi: Upgrade to 5.10.81
        weston-init: Add --continue-without-input option to weston

  Marcel Hamer (1):
        recipes: Update SRC_URI protocols for github

  Martin Jansa (1):
        rpi-config: don't trigger bbfatal for empty ENABLE_UART

  Peter A. Bigot (1):
        conf/machine: add variant Wi-Fi/BT drivers for CM4 and Pi 400

meta-openembedded: 2f6797d8d6..6b63095946:
  Alex Kiernan (2):
        ntpsec: Add recipe
        ntpsec: Add glibc-2.34/kernel-5.14 seccomp fixes

  Alexander Kanavin (23):
        libstatgrab: update 0.92 -> 0.92.1
        open-vpm-tools: update 11.2.5 -> 11.3.5
        libid3tag: add from oe-core
        libportal: add from oe-core
        gtkmm3: add gdk-pixbuf-native to satisfy meson 0.61
        gjs: drop patch to satisfy meson 0.61
        gnome-terminal: backport a meson 0.61 patch
        gnome-bluetooth: backport a meson 0.61 patch
        gnome-font-viewer: backport a meson 0.61 patch
        gnome-session: update 40.1.1 -> 41.3
        gnome-settings-daemon: add a meson 0.61 patch
        gnome-shell: backport a meson 0.61 patch
        accountsservice: backport a meson 0.61 patch
        gnome-screenshot: backport a meson 0.61 patch
        evince: fix meson 0.61 builds
        gnome-calendar: fix meson 0.61 builds
        gthumb: fix meson 0.61 builds
        gedit: add a meson 0.61 patch
        gnome-disk-utility: add a meson 0.61 patch
        gnome-control-center: add a meson 0.61 patch
        gnome-photos: add a meson 0.61 patch
        dconf-editor: add a meson 0.61 patch
        network-manager-applet: add meson 0.61 patch

  Andreas Müller (111):
        xfce4-sensors-plugin: upgrade 1.3.95 -> 1.4.1
        fftw: remove unused patch
        mozjs: Move back to recipes-extended - no meta-python specifics required
        Rename mozjs -> mozjs-91 to allow multiple versions of mozjs
        polkit: Adjust to mozjs-91 in DEPENDS
        mozjs-91: remove static library
        mozjs-78: Initial add
        graphene: enable introspection by default - gtk4 & mutter 41 require it
        graphene: extend to native and nativesdk
        graphene: Tidy up recipe a bit
        gtk4: initial add 4.4.0
        gjs: upgrade 1.58.8 -> 1.70.0
        mutter: upgrade 3.34.6 -> 41.0
        gdm: upgrade 3.36.3 -> 41.0
        upower: upgrade 0.99.11 -> 0.99.13
        udisks2: upgrade 2.9.3 -> 2.9.4
        gnome-settings-daemon: upgrade 3.36.1 -> 41.0
        gnome-shell: upgrade 3.34.5 -> 41.0
        gnome-shell-extensions: upgrade 3.34.2 -> 40.1
        gnome-desktop: upgrade 3.38.8 -> 41.0 and give up '3' receipe name suffix
        gnome-session: upgrade 3.36.0 -> 40.1.1
        gnome-control-center: upgrade 3.36.4 -> 41.1
        gexiv2: upgrade 0.12.2 -> 0.14.0
        gparted: upgrade 1.3.0 -> 1.3.1
        gnome-backgrounds: upgrade 3.38.0 -> 41.0
        gnome-tweaks: upgrade 3.34.0 -> 40.0
        gnome-terminal: upgrade 3.40.2 -> 3.42.0 / meson build
        gnome-panel: upgrade 3.36.1 -> 3.38.0
        grilo: upgrade 0.3.13 -> 0.3.14
        grilo-plugins: upgrade 0.3.13 -> 0.3.14
        mozjs-91: Fix build on powerpc
        gdm: Fix REQUIRED_DISTRO_FEATURES broken by adding introspection
        gnome-control-center: Add libhandy to DEPENDS
        gnome-backgrounds: Fix licenses
        poppler: upgrade 21.10.0 -> 21.11.0
        xfce4-whiskermenu-plugin: upgrade 2.5.3 -> 2.6.2
        ristretto: upgrade 0.11.0 -> 0.12.0
        xfce4-cpugraph-plugin: upgrade 1.2.3 -> 1.2.5
        xfce4-sensors-plugin: upgrade 1.4.1 -> 1.4.2
        catfish: upgrade 4.16.0 -> 4.16.3
        mousepad: upgrade 0.5.5 -> 0.5.7
        libxfce4ui: upgrade 4.16.0 -> 4.16.1
        fluidsynth: upgrade 2.2.2 -> 2.2.3
        vlc: Fix build with un-renameed native libtool
        fltk: upgrade 1.3.7 -> 1.3.8
        xfce4-whiskermenu-plugin: upgrade 2.6.2 -> 2.7.1
        ristretto: upgrade 0.12.0 -> 0.12.1
        mousepad: upgrade 0.5.7 -> 0.5.8
        poppler: upgrade 21.11.0 -> 21.12.0
        menulibre: upgrade 2.2.1 -> 2.2.3
        fluidsynth: upgrade 2.2.3 -> 2.2.4
        gegl: upgrade 0.4.30 -> 0.4.34
        gimp: upgrade 2.10.24 -> 2.10.30
        mpv: upgrade 0.33.1 -> 0.34.0
        gupnp: upgrade 1.2.7 -> 1.4.1
        gupnp: merge recipe with inc-file
        gupnp-av: upgrade 0.12.11 -> 0.14.0 / build with mesa
        gupnp-av: merge recipe with inc-file
        gupnp-dlna: upgrade 0.10.5 -> 0.12.0 / build with meson
        gupnp-igd: upgrade 0.2.5 -> 1.2.0 / build with meson
        gupnp-tools: upgrade 0.10.0 -> 0.10.2 / prettify recipe
        gtkwave: upgrade 3.3.109 -> 3.3.111
        blueman: upgrade 2.2.1 -> 2.2.3
        geany: upgrade 1.37.1 -> 1.38
        geany-plugins: upgrade 1.37 -> 1.3.8
        gnuplot: upgrade 5.4.1 -> 5.4.2
        gtksourceview5: initial add 5.2.0
        amtk: upgrade 5.2.0 -> 5.3.1 / build with meson
        evince: upgrade 40.4 -> 41.3
        evolution-data-server: upgrade 3.40.2 -> 3.42.2
        gnome-autoar: upgrade 0.3.3 -> 0.4.1 / build with meson
        gnome-calculator: upgrade 40.1 -> 41.1
        gnome-calendar; upgrade 41.0 -> 41.2
        gnome-control-center: upgrade 41.1 -> 41.2
        gnome-desktop: upgrade 41.0 -> 41.2
        gnome-disk-utility: upgrade 40.1 -> 41.0
        gnome-flashback: upgrade 3.40.0 -> 3.42.1
        gnome-font-viewer: upgrade 40.0 -> 41.0
        gnome-screenshot: upgrade 40.0 -> 41.0
        gnome-shell: upgrade 41.0 -> 41.2
        gnome-shell-extensions: upgrade 41.0 -> 41.1
        gnome-system-monitor: upgrade 40.1 -> 41.0
        gnome-terminal: upgrade 3.42.0 -> 3.42.1
        gsound: upgrade 1.0.2 -> 1.0.3 / build with meson
        gthumb: upgrade 3.10.3 -> 3.12.0
        gtksourceview4: upgrade 4.8.1 -> 4.8.2
        libgsf: upgrade 1.14.47 -> 1.14.48
        libgtkstylus: remove
        metacity: upgrade 3.40.0 -> 3.42.0
        mutter: upgrade 41.0 -> 41.2
        nautilus: upgrade 40.2 -> 41.1
        gnome-shell: Add gnome-desktop to RDEPENDS
        Drop gnome-desktop3 providers
        Rename gnome-menus3 -> gnome-menus
        packagegroup-gnome-desktop: Mark TUNE_PKGARCH specific
        mozjs-78: Shelve breaking lib rename/linking & split lib to separate package
        mozjs-78: renumber patches
        gnome-shell-extensions: Enable gnome-classic session for wayland
        zenity: Upgrade 3.32.0 -> 3.41.0 / meson build / rework
        yelp: upgrade 41.1 -> 41.2
        yelp-xsl: upgrade 41.0 -> 41.1
        usermode: upgrade 1.113 -> 1.114
        sysprof: upgrade 3.42.0 -> 3.42.1
        gnome-terminal: upgrade 3.42.1 -> 3.42.2
        gnome-panel: upgrade 3.38.0 -> 3.42.0
        gnome-autoar: upgrade 0.4.1 -> 0.4.2
        evolution-data-server: upgrade 3.42.2 -> 3.42.3
        poppler: upgrade 21.12.0 -> 22.01.0
        exo: upgrade 4.16.1 -> 4.16.3
        imsettings: upgrade 1.8.2 -> 1.8.3
        thunar: upgrade 4.16.8 -> 4.16.9

  Andrei Gherzan (2):
        mosquitto: Don't depends on dlt-daemon unconditionally
        python3-pymetno: Introduce recipe on 0.7.0

  Andrey Zhizhikin (1):
        gpsd: fix clang buid via export CC explicitly

  Armin Kuster (6):
        ldns: update to 1.8.1
        strongswan: provide PACKAGECONFIG for cureve25519
        strongswan: add tpm PACKAGECONFIG
        strongswan: add integrity options
        strongswan: remove redundant DEPENDS
        wireshark: update to latest stable 3.4.11

  Bartosz Golaszewski (6):
        python3-email-validator: new package
        libgpiod: ptest: rrecommend python3-unittest when building python tests
        libgpiod: ptest: rrecommend coreutils
        libgpiod: ptest: redirect stderr to stdout for test executables
        cmatrix: new package
        python3-zeroconf: bump version 0.36.13 -> 0.38.1

  Bhargav Das (1):
        python3-colorzero: add recipe for python colorzero

  Bruce Ashfield (2):
        vboxguestdrivers: fix build against 5.15 kernel/libc-headers headers
        python: remove recipes imported to oe-core

  Changqing Li (5):
        mozjs-78: fix do_configure failure
        mozjs-91: fix do_configure failure
        mozjs-91/mozjs-78: fix compile failure on centos7
        php: correct module name and library name
        postgresql: fix CVE-2021-23214,CVE-2021-23222

  Christian Eggers (5):
        gpsd: remove obsolete files from FILES:${PN}-dev
        gpsd: remove obsolete libgpsd package
        gpsd: remove obsolete files from FILES:gps-utils
        gpsd: list files for gps-utils individually
        python3-gcovr: add recipe

  Claude Bing (2):
        php: update from 7.4.21 to 8.0.12
        php: use qemu wrapper to build minilua

  Claus Stovgaard (3):
        Added usbip-tools for kernel USB/IP
        Add gutenprint to meta-oe
        Add pycups - python bindings for CUPS

  Ed Tanous (1):
        Update to new version of boost-uri

  Fathi Boudra (1):
        makedumpfile: upgrade from 1.6.9 to 1.7.0

  Geoff Parker (2):
        python3-cchardet: add BBCLASSEXTEND = "native nativesdk"
        python3-aiosignal, python3-frozenlist: Add native & nativestdk package support

  Gianfranco (2):
        vboxguestdrivers: upgrade 6.1.28 -> 6.1.30
        vboxguestdrivers: drop md5sum from SRC_URI.

  He Zhe (1):
        protobuf: Fix static init fiasco

  Hongxu Jia (5):
        ostree: add nativesdk support
        ostree: use Yocto mirror
        ostree: workaround compile error with option gcc option -Og
        libblockdev: Do not include duplicate entries in bd_lvm_lvs output
        grubby: fix conflict with debianutils

  Jacob Kroon (1):
        Revert "ccid: Fix floating runtime dependency on flex"

  Jan Vermaete (6):
        netdata: Using the github.com release + upstream_check.
        netdata: from 1.22.1 to 1.32.0
        netdata: version bump from 1.32.0 to 1.32.1
        netdata: fixed some oelint-adv issues in the recipe.
        netdata: do not send anonymous statistics by default.
        netdata: fix for commit 8554624cc7f84e6b63b2ea4b94ee5fd2821021ca

  Jeremy A. Puhlman (1):
        cdrkit: remove ${PN} from ${PN}-dev RDEPENDS

  Jeremy Kerr (4):
        mctp: upgrade to v1.0
        mctp: install dbus service configuration
        contrib: allow override-style syntax for vars & routines
        contrib: fix python warnings for oe-stylize

  Joshua Watt (8):
        colord: introspection is not valid meson option
        gdm: introspection is not valid meson option
        gnome-settings-daemon: introspection is not valid meson option
        gnome-shell: introspection is not valid meson option
        gnome-control-center: Fixup polkit directory permissions
        gnome-online-accounts: Switch back to libsoup2
        graphene: Move from meta-gnome -> meta-oe
        jemalloc: Fix license file

  Kai Kang (1):
        libqb: use branch main

  Khem Raj (97):
        bitwise: Fix build with latest ncurses 6.3+
        libcdio: Fix build with ncurses 6.3+
        nmon: Upgrade to 16m
        sysdig: Fix build with ncurses 6.3+
        iptraf-ng: Upgrade to 1.2.1
        tiptop: Fix build with ncurses 6.3+
        mtr: Fix build with ncurses 6.3+
        mtr: Explicitly use branch= in SRC_URI
        liburing: Use libc mmap() wrapper instead of calling __NR_mmap syscall directly
        protobuf: Upgrade to 3.19.1
        protobuf: Disable tailcall on mips/clang
        packagegroup-meta-python: Add python3-imgtool
        python3-prctl: Use https protocol for git fetcher
        mozjs-78: Check for big-endian icu data file existence before creating it
        mozjs-78: Set X lib/include paths
        mozjs-78: Pass C/C++ flags to js configure
        libjs-jquery-globalize: Use a proper SHA in SRCREV instead of tag
        iptraf-ng: Create /var/log and /var/lib subdirs at runtime
        gstd: Remove empty /var/volatile/log
        monkey: Keep /var/volatile empty
        hiawatha: Create /var/log /var/run at runtime
        python3-kivy: Use branch parameter in SRC_URI
        mdns: Upgrade to 1310.140.1
        packagegroup-meta-networking: Enable mdns on musl systems
        ntpsec: Disable seccomp on musl/rv32
        ntpsec: Disable documentation
        packagegroup-meta-networking: Add ntpsec
        sdbus-c++-libsystemd: Fix build with kernel 5.15+
        mctp: Fix build with 5.15+ kernel headers
        packagegroup-meta-python.bb: Add python3-pytz-deprecation-shim
        packagegroup-meta-oe: Add fwupd and fwupd-efi
        protobuf-c: Export native protoc
        linpack: Build both sp and dp binaries
        php: Build minilua for build host
        xf86-video-ati: Upgrade to 19.1.0
        sdbus-c++-libsystemd: Upgrade to 249.5
        xf86-video-nouveau: fixup driver for new X server ABI
        tracker: introspection is not valid meson option
        gnome-desktop: introspection is not valid meson option
        libmediaart: introspection is not valid meson option
        libgweather: introspection is not valid meson option
        tepl: introspection is not valid meson option
        gjs: introspection is not valid meson option
        tracker-miners: introspection is not valid meson option
        gedit: introspection is not valid meson option
        tracker,tracker-miners: Upgrade to 3.2.1
        gnome-tweaks: introspection is not valid meson option
        colord-gtk: introspection is not valid meson option
        packagegroup-meta-python: Add python3-gcovr
        ippool: silence a DeprecationWarning
        packagegroup-meta-oe: Add pim435
        influxdb: Upgrade to 1.8.10
        influxdb: Fix build with Go 1.17 on x86_64
        packagegroup-core-clutter: Mark TUNE_PKGARCH specific
        packagegroup-xfce-base: Mark TUNE_PKGARCH specific
        libcamera: Fix build break on musl
        meta-networking,meta-python: Fix README for yocto check layer
        gjs: Link with libatomic on rv32
        ntpsec: Disable seccomp on riscv32
        libunix-statgrab: Use compiler driver for linking as well
        tbb: Upgrade to 2021.4.0
        packagegroup-meta-oe: Add unifex
        gjs: Fix build failures with meson 0.60.2
        packagegroup-meta-perl: Add new packages
        packagegroup-meta-python: Add python3-pymetno
        yelp: Add option to support webkit2gtk-4-0
        surf: Add soup3 patch conditionally
        netdata: Link libatomic on mips
        gssdp: Use sniffer only when gnome layer is in mix
        packagegroup-meta-oe: Add graphene
        inotify-tools: Upgrade to 3.21.9.6
        inotify-tools: Disable -Werror
        python3-matplotlib: Generate correctly names setup config file
        inotify-tools: Fix build on musl
        libkcapi: Fix build with musl
        packagegroup-meta-oe: Add gutenprint, python3-pycups and usbip-tools
        tvheadend: Disable dvbscan
        pkcs11-helper: Fix build with nss >= 3.73.1
        tbb: Disable LTO on rv64
        packagegroup-meta-python: Add python3-colorzero
        packagegroup-meta-oe: Add cmatrix
        pcp: Fix build to exclude qt5
        packagegroup-meta-oe: Add dool and pcp
        nautilus: Fix build with libportal >= 0.5
        influxdb: Enable network during do_compile
        meta-oe: Use setuptools3-base
        thunar: Depend on libxml-parser-perl-native
        python3-matplotlib: Do not use setuptools_scm_git_archive
        python3-pytest-helpers-namespace: Enable network during do_compile
        python3-pybind11: Use setuptools3 instead of distutils3 functions
        pcp: Fix build race condition
        tnftp: Add missing header stdc-predef.h
        jemalloc: Fix build with glibc 2.35+clang
        packagegroup-meta-oe: Add duktape
        iotop: Use lld with clang on arm
        meta-xfce: Convert catfish and menulibre to use setuptools3
        sdbus-c++-libsystemd: Fix build on musl

  Konrad Weihmann (3):
        python3-wtforms: add missing dependencies
        python3-execnet: depend on setuptools-scm
        python3-lazy-object-proxy: upgrade 1.6.0 > 1.7.1

  Lei Maohui (1):
        sysprof: Added json-glib into DEPENDS to fix build error.

  Leif Middelschulte (1):
        dbus-daemon-proxy: add missing `return` statement

  Leon Anavi (92):
        python3-qrcode: Upgrade 7.3 -> 7.3.1
        python3-bidict: Upgrade 0.21.2 -> 0.21.4
        python3-pint: Upgrade 0.17 -> 0.18
        python3-prettytable: Upgrade 2.2.1 -> 2.3.0
        python3-astroid: Upgrade 2.8.2 -> 2.8.4
        python3-isort: Upgrade 5.9.3 -> 5.10.0
        python3-aenum: Upgrade 3.1.0 -> 3.1.2
        python3-natsort: Upgrade 7.1.1 -> 8.0.0
        python3-cachecontrol: Upgrade 0.12.6 -> 0.12.9
        python3-wrapt: Upgrade 1.13.2 -> 1.13.3
        python3-prettytable: Upgrade 2.3.0 -> 2.4.0
        python3-imageio: Upgrade 2.10.1 -> 2.10.3
        python3-pytz-deprecation-shim: Add recipe
        python3-tzlocal: Upgrade 4.0.1 -> 4.1
        python3-soupsieve: Upgrade 2.2.1 -> 2.3
        python3-configparser: Upgrade 5.0.2 -> 5.1.0
        python3-yappi: Upgrade 1.3.2 -> 1.3.3
        python3-pydicti: Upgrade 1.1.4 -> 1.1.6
        python3-zeroconf: Upgrade 0.36.9 -> 0.36.12
        python3-yarl: Upgrade 1.7.0 -> 1.7.2
        python3-elementpath: Upgrade 2.3.2 -> 2.4.0
        python3-astroid: Upgrade 2.8.4 -> 2.8.5
        python3-coverage: Upgrade 6.1.1 -> 6.1.2
        python3-aenum: Upgrade 3.1.3 -> 3.1.5
        python3-zeroconf: Upgrade 0.36.12 -> 0.36.13
        python3-bandit: Uprade 1.7.0 -> 1.7.1
        python3-colorlog: Upgrade 6.5.0 -> 6.6.0
        python3-soupsieve: Upgrade 2.3 -> 2.3.1
        python3-cchardet: Add recipe
        python3-charset-normalizer: Add recipe
        python3-frozenlist: Add recipe
        python3-aiosignal: Add recipe
        python3-aiohttp: Upgrade 3.8.0 -> 3.8.1
        packagegroup-meta-python.bb: Add new packages
        python3-eventlet: Upgrade 0.32.0 -> 0.33.0
        python3-imageio: Upgrade 2.10.3 -> 2.10.5
        python3-deprecated: Upgrade 1.2.12 -> 1.2.13
        python3-parso: Add runtime dependencies
        python3-jedi: Upgrade 0.18.0 -> 0.18.1
        python3-prompt-toolkit: Upgrade 3.0.21 -> 3.0.22
        python3-imageio: Upgrade 2.10.5 -> 2.11.0
        python3-cmd2: Upgrade 2.3.0 -> 2.3.1
        python3-simplejson: Upgrade 3.17.5 -> 3.17.6
        python3-aiohue: Upgrade 2.6.3 -> 3.0.1
        python3-imageio: Upgrade 2.11.0 -> 2.11.1
        python3-marshmallow: Upgrade 3.14.0 -> 3.14.1
        python3-jsonpointer: Upgrade 2.1 -> 2.2
        python3-humanize: Upgrade 3.12.0 -> 3.13.1
        python3-cachecontrol: Upgrade 0.12.9 -> 0.12.10
        python3-prompt-toolkit: Upgrade 3.0.22 -> 3.0.24
        python3-isodate: Upgrade 0.6.0 -> 0.6.1
        python3-pychromecast: Upgrade 10.1.1 -> 10.2.3
        python3-imageio: Upgrade 2.13.3 -> 2.13.5
        python3-psutil: Upgrade 5.8.0 -> 5.9.0
        python3-astroid: Upgrade 2.9.0 -> 2.9.2
        python3-robotframework: Upgrade 4.1.2 -> 4.1.3
        python3-cantools: Upgrade 37.0.0 -> 37.0.1
        python3-diskcache: Upgrade 5.3.0 -> 5.4.0
        python3-typeguard: Upgrade 2.13.2 -> 2.13.3
        python3-huey: Upgrade 2.4.2 -> 2.4.3
        python3-ujson: Upgrade 5.0.0 -> 5.1.0
        python3-google-api-core: Upgrade 2.2.0 -> 2.3.2
        python3-astroid: Upgrade 2.9.2 -> 2.9.3
        python3-urllib3: Upgrade 1.26.7 -> 1.26.8
        python3-rdflib: Upgrade 6.0.2 -> 6.1.1
        python3-bitarray: Upgrade 2.3.4 -> 2.3.5
        python3-asyncio-throttle: Add recipe
        python3-aiohue: Upgrade 3.0.1 -> 3.0.11
        python3-requests: Upgrade 2.26.0 -> 2.27.1
        python3-natsort: Upgrade 8.0.0 -> 8.0.2
        python3-sentry-sdk: Upgrade 1.4.3 -> 1.5.2
        python3-regex: Upgrade 2021.10.8 -> 2021.11.10
        python3-wtforms: Upgrade 3.0.0 -> 3.0.1
        python3-charset-normalizer: Upgarde 2.0.7 -> 2.0.10
        python3-gmpy2: Upgrade 2.1.1 -> 2.1.2
        python3-jdatetime: Upgrade 3.6.4 -> 3.8.1
        python3-fasteners: Upgrade 0.16.3 -> 0.17.2
        python3-jsmin: Upgrade 3.0.0 -> 3.0.1
        python3-croniter: Upgrade 1.1.0 -> 1.2.0
        python3-fastjsonschema: Upgrade 2.15.1 -> 2.15.3
        python3-aenum: Upgrade 3.1.5 -> 3.1.6
        python3-decorator: Upgrade 5.1.0 -> 5.1.1
        python3-pythonping: Upgrade 1.1.0 -> 1.1.1
        python3-dnspython: Upgrade 2.1.0 -> 2.2.0
        python3-frozenlist: Upgrade 1.2.0 -> 1.3.0
        python3-simpleeval: Upgrade 0.9.10 -> 0.9.12
        python3-twine: Upgrade 3.4.1 -> 3.7.1
        python3-pillow: Upgrade 8.3.2 -> 9.0.0
        python3-pycocotools: Upgrade 2.0.2 -> 2.0.4
        python3-paramiko: Upgrade 2.9.1 -> 2.9.2
        python3-sentry-sdk: Upgrade 1.5.2 -> 1.5.3
        imageio: Upgrade 2.13.5 -> 2.14.0

  Luca Boccassi (2):
        lvm2: do not install systemd units/initscripts when building native SDK tools
        Add recipe for duktape

  Marek Vasut (4):
        libsdl2-ttf: Remove incorrect x11 from REQUIRED_DISTRO_FEATURES
        freerdp: Upgrade 2.3.0 -> 2.4.1
        freerdp: Add missing libusb1 dependency
        freerdp: Make PCSC dependency optional

  Mark Hatle (1):
        python3-matplotlib: Disable automatic download during do_compile

  Markus Volk (5):
        libgdata: add vala PACKAGECONFIG
        gspell: inherit vala
        gmime: inherit vala
        evolution-data-server: cleanup; enable vala introspection
        folks: initial add recipe

  Martin Jansa (7):
        nodejs: fix build without scrypt
        unicode-ucd: set downloadfilename to include PV
        ntpsec: require x11 in DISTRO_FEATURES
        libgusb: add PACKAGECONFIG for vapi and keep it enabled only when introspection is
        Revert "libgusb: Use the correct args to disable vala support"
        packagegroup-meta-multimedia: include x265 only with commercial in LICENSE_FLAGS_WHITELIST
        simple-mtpfs: add dependency on autoconf-archive

  Matthias Klein (2):
        paho-mqtt-c: upgrade 1.3.8 -> 1.3.9
        paho-mqtt-cpp: new package

  Mauro Anjo (2):
        Upgrade libcamera
        libcamera: Update to latest commit

  Michael Vetter (1):
        jasper: upgrade 2.0.26 -> 2.0.33

  Mingli Yu (6):
        mariadb: Fix openssl 3.x compatibility
        libteam: switch to python3
        libteam: improve the ptest output
        php: Upgrade to 8.1.0
        php: avoid textrel QA Issue warning
        python3-lxml: check the return value

  Nisha Parrakat (1):
        nodejs_16.11.1.bb: only handle npm if configured

  Oleksandr Kravchuk (48):
        python3-protobuf: update to 3.19.0
        python3-google-api-core: update to 2.2.0
        python3-google-api-python-client: update to 2.28.0
        python3-imageio: update to 2.10.1
        python3-pybind11: update to 2.8.1
        liburing: update to 2.1
        protobuf: update to 3.19.0
        wolfssl: update to 5.0.0
        fb-test: fix SRC_URI
        bmon: fix PV
        cpuid: update to 20211129
        gtk4: set UPSTREAM_CHECK_REGEX to stable versions
        iwd: update to 1.20
        libnma: update to 1.8.32
        python3-astroid: update to 2.9.0
        python3-coverage: update to 6.2
        python3-croniter: update to 1.1.0
        python3-diskcache: update to 5.3.0
        python3-graphviz: update to 0.19
        python3-imageio: update to 2.13.3
        python3-iso8601: update to 1.0.2
        python3-ldap: update to 3.4.0
        python3-lz4: update to 3.1.10
        python3-matplotlib: update to 3.5.1
        python3-pymetno: update to 0.9.0
        python3-pywbem: update to 1.3.0
        python3-redis: update to 4.0.2
        python3-wtforms: update to 3.0.0
        soci: update to 4.0.2
        uftrace: update to 0.11
        librdkafka: update to 1.8.2
        gparted: add UPSTREAM_CHECK_URI
        libwacom: update to 1.12
        libsrtp: update to 2.4.2
        dbus-cxx: update to 2.1.0
        sysprof: update to 3.42.0
        gssdp: update to 1.4.0.1
        libkcapi: update to 1.3.1
        python3-lxml: update to 4.7.1
        python3-icu: update to 2.8
        python3-googleapis-common-protos: update to 1.54.0
        python3-gevent: update to 21.12.0
        python3-twitter: update 4.4.0
        python3-contextlib2: update to 21.6.0
        simple-mtpfs: update to 0.4.0
        xl2tpd: update to 1.3.16
        python-cantools: update to 37.0.0
        lirc: replace setuptools3-bas with distutils-common-base

  Ovidiu Panait (1):
        syslog-ng: adjust control socket location

  Patrick Williams (1):
        unifex: add recipe

  Peter Kjellerstedt (16):
        libssh: Support building for native and nativesdk
        corosync: Clean up leftover support for qdevice and qnetd
        corosync: Do not install the /var/log/cluster directory
        collectd: Do not install /var/log
        atop: Do not install the /var/log/atop directory
        openflow: Create /var/log/openflow in runtime
        mongodb: A little clean up
        mongodb: Create /var/log/mongodb in runtime
        opensaf: Create /var/log/opensaf/saflog in runtime
        opensaf: Make sure a file needed by opensafd.service is not removed
        gattlib: Explicitly disable Python support
        googletest: Switch branch from master to main
        libsrtp: Add support for specifying the crypto library
        nodejs: Drop workaround for a Python 2 dependency
        nodejs: Drop workaround for an absolute path in the npm shebang
        nodejs: A little clean up

  Philip Balister (1):
        fftw: Update to fftw-3.3.10

  Philippe Coval (7):
        lv-drivers: Lint recipe
        lv-lib-png: Lint recipe
        lvgl: Introduce global variable for configuration
        lvgl: Add hints about using configuration variables
        lvgl: Support external wayland config
        lvgl: Update to 8.1.0
        pim435: Add recipe for C implementation for userspace driver app

  Pierre-Jean Texier (1):
        libmxml: upgrade 3.2 -> 3.3

  Ramon Fried (1):
        bitwise: Upgrade 0.42 -> 0.43

  Richard Hughes (4):
        libgusb: Use the correct args to disable vala support
        libjcat: Update to 0.1.9
        libxmlb: Update to 0.3.6
        fwupd: Update to 1.7.3

  Richard Purdie (1):
        recipes: Update SRC_URI branch and protocols

  Robert Joslyn (2):
        htop: Update to 3.1.2
        postgresql: Update to 14.1

  Ross Burton (58):
        python3-imgtool: add recipe
        modemmanager: remove intltool-native DEPENDS
        python3-cryptography: backport patches to make this work against OpenSSL 3
        fwupd-efi: add new recipe
        fwupd: add new recipe
        nginx: use ln -rs
        libxmlb: put binary into separate package
        imlib2: clarify license
        xmlrpc-c: set precise BSD license
        xmlrpc-c: remove unused libxml2 dependency
        xmlrpc-c: clean up PACKAGECONFIG
        xmlrpc-c: use gnu-configize
        dash: set precise BSD license
        sg3-utils: set precise BSD license
        nodejs: set precise BSD license
        libkcapi: remove DEPENDS on target libtool
        libkcapi: set precise BSD license
        pcsc-lite: set precise BSD license
        python3-cryptography: set precise BSD license
        python3-crypto-vectors: set precise BSD license
        python3-gevent: use system libraries instead of embedding
        python3-gevent: update license
        python3-lxml: set precise BSD license
        python3-posix-ipc: set precise BSD license
        python3-posix-ipc: remove spurious dependencies
        python3-pyzmq: set precise BSD license
        fwupd: upgrade to 1.7.2
        fwupd: fix dependency typo
        net-snmp: use precise BSD license
        gnome-themes-extra: set correct SRC_URI
        qpdf: remove obsolete support for renamed libtool
        php: remove obsolete support for renamed libtool
        dhcp-relay: remove obsolete support for renamed libtool
        apache2: remove obsolete support for renamed libtool
        xfsdump: remove obsolete support for renamed libtool
        unbound: remove obsolete support for renamed libtool
        cpufrequtils: remove obsolete support for renamed libtool
        gtk+: remove obsolete support for renamed libtool
        apache-websocket: remove obsolete support for renamed libtool
        srecord: remove obsolete support for renamed libtool
        srecord: add libgcrypt PACKAGECONFIG
        srecord: properly initialize libtool
        dhcp-relay: fix rebuilds
        tbb: enable native/nativesdk builds
        fwts: do out-of-tree builds
        tbb: upgrade to 2021.5.0
        python3-scapy: remove redundant pycrypto RDEPENDS
        python3-smbbus: use DISTUTILS_SETUP_PATH
        python3-pycrypto: remove obsolete pycrypto module
        python3-smbus: use setuptools
        python3-greenlet: remove redundant distutils3 inherit
        python3-hexdump: remove
        python3-pyparted: port to setuptools
        python3-dbussy: port to setuptools
        cxxtest: move to setuptools
        iotop: move to the C port of iotop
        sanlock: port to setuptools
        pyxdg: upgrade and remove distutils

  Sakib Sajal (2):
        io-compress-lzma-perl: add recipe for version 2.096
        nss: upgrade 3.64 -> 3.73.1

  Salman Ahmed (2):
        openldap: upgrade 2.4.58 -> 2.5.8
        python3-ldap: for openldap v2.5.8, link with libldap instead of libldap_r

  Sean Nyekjaer (1):
        msgpack-cpp: fix msgpack-cpp is a header only library

  Stanislav Angelovic (1):
        Bump sdbus-c++ to version v1.0.0

  Tim Orling (12):
        python3-gammu: add recipe for v3.2.4
        python3-setuptools-rust-native: add v1.1.2 recipe
        python3-pyruvate: add recipe for v1.1.2
        python3-pytest-subtests: upgrade 0.5.0 -> 0.6.0
        python3-cryptography-vectors: upgrade 35.0.0 => 36.0.1
        python3-cryptography: upgrade 3.3.2 -> 36.0.1
        gammu: upgrade 1.32.0 -> 1.42.0
        tiptop: update download URL and HOMEPAGE
        cmocka: use https protocol for fetching
        pyo3.bbclass: add class for PyO3 cross-compilation
        setuptools3_rust.bbclass: setuptoools Rust plugin
        python3-pyruvate: disable 64 bit atomics for mips

  Trevor Gamblin (7):
        python3-pycparser: RSUGGESTS cpp and cpp-symlinks
        libnftnl: upgrade 1.2.0 -> 1.2.1
        python3-django: upgrade 3.2.5 -> 3.2.10
        libnftnl: add ptest
        python3-django: upgrade 2.2.25 -> 2.2.26
        python3-django: upgrade 3.2.10 -> 3.2.11
        python3-django: Add recipe for 4.0.1

  Wang Mingyu (10):
        gsl: upgrade 2.7 -> 2.7.1
        mozjs: upgrade 91.2.0 -> 91.4.0
        libgusb: upgrade 0.3.8 -> 0.3.9
        python3-pychromecast: upgrade 10.1.0 -> 10.1.1
        python3-websocket-client: upgrade 1.2.1 -> 1.2.3
        python3-sqlalchemy: upgrade 1.4.27 -> 1.4.28
        dnf-plugin-tui: Fix bug when generating CSV file
        sdbus-c++-tools: upgrade 1.0.0 -> 1.1.0
        sdbus-c++-libsystemd: upgrade 249 -> 250.3
        fmt: upgrade 8.0.1 -> 8.1.1

  William A. Kennington III (2):
        ipmitool: Split ipmievd into a separate package
        jq: upgrade 1.6 -> 2021-10-24 git

  Windel Bouwman (1):
        python3-coloredlogs: Added nativesdk

  Xu Huan (35):
        python3-websockets: upgrade 10.0 -> 10.1
        python3-xlsxwriter: upgrade 3.0.1 -> 3.0.2
        python3-socketio: upgrade 5.4.1 -> 5.5.0
        python3-pymongo: upgrade 3.12.0 -> 4.0
        python3-pyephem: upgrade 4.1 -> 4.1.1
        python3-pycparser: upgrade 2.20 -> 2.21
        python3-aiofiles: upgrade 0.7.0 -> 0.8.0
        python3-bitstruct: upgrade 8.11.1 -> 8.12.1
        python3-cmd2: upgrade 2.3.1 -> 2.3.3
        python3-configparser: upgrade 5.1.0 -> 5.2.0
        python3-rsa: upgrade 4.7.2 -> 4.8
        python3-django: upgrade 2.2.24 -> 2.2.25
        python3-gnupg: upgrade 0.4.7 ->0.4.8
        python3-graphviz: upgrade 0.19 -> 0.19.1
        python3-gmpy2: upgrade 2.1.0rc1 -> 2.1.1
        python3-grpcio: upgrade 1.41.1 -> 1.43.0
        python3-sqlalchemy: upgrade 1.4.28 ->1.4.29
        python3-pyro4: upgrade 4.81 -> 4.82
        python3-huey: upgrade 2.4.1 -> 2.4.2
        python3-msgpack: upgrade 1.0.2 -> 1.0.3
        python3-smpplib: upgrade 2.2.0 -> 2.2.1
        python3-wheel: upgrade 0.37.0 -> 0.37.1
        python3-meh: upgrade 0.50 -> 0.50.1
        python3-pandas: upgrade 1.3.4 -> 1.3.5
        python3-paramiko: upgrade 2.8.0 ->2.9.1
        python3-parso: upgrade 0.8.2 -> 0.8.3
        python3-protobuf: upgrade 3.19.0 ->3.19.3
        python3-pymongo: upgrade 4.0 -> 4.0.1
        python3-pynacl: upgrade 1.4.0 -> 1.5.0
        python3-pytest-timeout: upgrade 2.0.1 -> 2.0.2
        python3-socketio: upgrade 5.5.0 -> 5.5.1
        python3-argcomplete upgrade 1.12.3 -> 2.0.0
        python3-async-timeout: upgrade 4.0.0 -> 4.0.2
        python3-engineio: upgrade 4.3.0 -> 4.3.1
        python3-google-api-python-client: upgrade 2.33.0 -> 2.36.0

  Yi Zhao (31):
        netplan: fix hardcoded path for /lib/netplan
        libssh: use https instead of git in SRC_URI
        strongswan: add required kernel modules to RRECOMMENDS
        libldb: upgrade 2.3.0 -> 2.3.2
        samba: upgrade 4.14.8 -> 4.14.10
        libtalloc: fix pyext_PATTERN for cross compilation
        libtdb: fix pyext_PATTERN for cross compilation
        libtevent: fix pyext_PATTERN for cross compilation
        libldb: fix pyext_PATTERN for cross compilation
        samba: fix pyext_PATTERN for cross compilation
        samba: add pyldb to rdepends for samba-python3
        samba: update cross-answers files
        openldap: fix parallel build failure
        openldap: upgrade 2.5.8 -> 2.5.9
        openldap: fix strip issue with new patch
        postfix: upgrade 3.6.2 -> 3.6.3
        openipmi: upgrade 2.0.31 -> 2.0.32
        xmlsec1: enable native build
        upower: add UPSTREAM_CHECK_GITTAGREGEX
        lvm2: add UPSTREAM_CHECK_GITTAGREGEX
        ndctl: add UPSTREAM_CHECK_GITTAGREGEX
        nftables: upgrade 1.0.0 -> 1.0.1
        ipset: upgrade 7.11 -> 7.15
        libnetfilter-queue: upgrade 1.0.3 -> 1.0.5
        bridge-utils: upgrade 1.7 -> 1.7.1
        iscsi-initiator-utils: upgrade 2.1.4. -> 2.1.5
        openldap: ignore the mkdir errors in Makefile
        tnftp: upgrade 20151004 -> 20210827
        dracut: upgrade 051 -> 055
        tree: upgrade 2.0.0 -> 2.0.1
        postfix: upgrade 3.6.3 -> 3.6.4

  Zheng Ruoqin (4):
        spitools: upgrade 1.0.0 -> 1.0.1
        python3-rdflib: upgrade 6.0.0 -> 6.0.2
        python3-typeguard: upgrade 2.13.0 -> 2.13.2
        python3-ujson: upgrade 4.2.0 -> 4.3.0

  leimaohui (5):
        dstat: Deleted terminated project.
        pcp: Added a new recipe which provides dstat command.
        dool: Added a new OSS that forked from dstat project.
        xrdp: Fixed build error with openssl 3.0 and upgraded from 0.9.17 to 0.9.18.
        xorg-xrdp: Upgraded from 0.2.5 to 0.2.18.

  mk (1):
        python3-marshmallow: add recipe at version 3.14.0

  wangmy (79):
        avro-c: upgrade 1.10.2 -> 1.11.0
        botan: upgrade 2.18.1 -> 2.18.2
        c-ares: upgrade 1.17.2 -> 1.18.1
        grpc: upgrade 1.41.0 -> 1.41.1
        libcrypt-openssl-guess-perl: upgrade 0.13 -> 0.14
        fetchmail: upgrade 6.4.21 -> 6.4.23
        iwd: upgrade 1.18 -> 1.19
        debootstrap: upgrade 1.0.124 -> 1.0.126
        jsoncpp: upgrade 1.9.4 -> 1.9.5
        python3-aenum: upgrade 3.1.2 -> 3.1.3
        python3-aiohttp: upgrade 3.7.4 -> 3.8.0
        python3-async-timeout: upgrade 3.0.1 -> 4.0.0
        python3-fastnumbers: upgrade 3.1.0 -> 3.2.1
        python3-google-api-python-client: upgrade 2.28.0 -> 2.30.0
        python3-graphviz: upgrade 0.17 -> 0.18
        python3-httplib2: upgrade 0.20.1 -> 0.20.2
        openvpn: Change the default cipher to AES-256-GCM for server configurations
        ctags: upgrade 5.9.20210905.0 -> 5.9.20211114.0
        libmbim: upgrade 1.26.0 -> 1.26.2
        smcroute: upgrade 2.5.3 -> 2.5.4
        python3-absl: upgrade 0.15.0 -> 1.0.0
        python3-alembic: upgrade 1.7.4 -> 1.7.5
        python3-cmd2: upgrade 2.2.0 -> 2.3.0
        python3-gast: upgrade 0.5.2 -> 0.5.3
        python3-isort: upgrade 5.10.0 -> 5.10.1
        python3-pychromecast: upgrade 9.3.1 -> 10.1.0
        python3-sqlalchemy: upgrade 1.4.26 -> 1.4.27
        wireguard-tools: upgrade 1.0.20210315 -> 1.0.20210914
        cryptsetup: upgrade 2.4.1 -> 2.4.2
        libqb: upgrade 2.0.3 -> 2.0.4
        qpdf: upgrade 10.3.2 -> 10.4.0
        tesseract: upgrade 4.1.1 -> 4.1.3
        thin-provisioning-tools: upgrade 0.8.5 -> 0.9.0
        xmlsec1: upgrade 1.2.32 -> 1.2.33
        libnetfilter-log: upgrade 1.0.1 -> 1.0.2
        python3-autobahn: upgrade 21.3.1 -> 21.11.1
        pure-ftpd: upgrade 1.0.49 -> 1.0.50
        icewm: upgrade 2.8.0 -> 2.9.0
        ostree: upgrade 2021.5 -> 2021.6
        ply: upgrade 2.1.1 -> 2.2.0
        pps-tools: upgrade 1.0.2 -> 1.0.3
        dnf-plugin-tui: Fix a bug with newer version rpm.
        snort: upgrade 2.9.18.1 -> 2.9.19
        cloc: upgrade 1.90 -> 1.92
        python3-scrypt: upgrade 0.8.18 -> 0.8.19
        fio: upgrade 3.28 -> 3.29
        mpich: upgrade 3.4.2 -> 3.4.3
        nano: upgrade 5.9 -> 6.0
        redis-plus-plus: upgrade 1.3.2 -> 1.3.3
        satyr: upgrade 0.38 -> 0.39
        qpdf: upgrade 10.4.0 -> 10.5.0
        tree: upgrade 1.8.0 -> 2.0.0
        libfile-slurper-perl: upgrade 0.012 -> 0.013
        libio-socket-ssl-perl: upgrade 2.072 -> 2.073
        python3-ipython: upgrade 7.28.0 -> 7.30.1
        apache2: upgrade 2.4.51 -> 2.4.52
        python3-pyhamcrest: upgrade 2.0.2 -> 2.0.3
        python3-pymisp: upgrade 2.4.148 -> 2.4.152
        weechat: upgrade 3.0 -> 3.4
        wolfssl: upgrade 5.0.0 -> 5.1.0
        pkcs11-helper: upgrade 1.27 -> 1.28
        bats: upgrade 1.4.1 -> 1.5.0
        doxygen: upgrade 1.9.2 -> 1.9.3
        pcsc-tools: upgrade 1.5.7 -> 1.5.8
        dnfdragora: upgrade 1.1.2 -> 2.1.2
        iwd: upgrade 1.20 -> 1.21
        python3-pyscaffold: upgrade 4.1.1 -> 4.1.4
        python3-supervisor: upgrade 4.2.2 -> 4.2.4
        rdma-core: upgrade 36.0 -> 38.0
        nlohmann-json: upgrade 3.10.4 -> 3.10.5
        protobuf: upgrade 3.19.1 -> 3.19.3
        uriparser: upgrade 0.9.5 -> 0.9.6
        mtr: upgrade 0.94 -> 0.95
        networkmanager: upgrade 1.32.12 -> 1.34.0
        cryptsetup: upgrade 2.4.2 -> 2.4.3
        cups-filters: upgrade 1.27.2 -> 1.28.11
        libmodbus: upgrade 3.1.6 -> 3.1.7
        libsdl2-ttf: upgrade 2.0.15 -> 2.0.18
        monit: upgrade 5.29.0 -> 5.30.0

  zangrc (1):
        python3-smpplib: upgrade 2.1.0 -> 2.2.0

  zhengruoqin (18):
        python3-cantools: upgrade 36.4.0 -> 36.5.0
        python3-coverage: upgrade 6.0.2 -> 6.1.1
        python3-cycler: upgrade 0.10.0 -> 0.11.0
        python3-engineio: upgrade 4.2.1 -> 4.3.0
        python3-grpcio-tools: upgrade 1.41.0 -> 1.41.1
        python3-grpcio: upgrade 1.41.0 -> 1.41.1
        python3-ujson: upgrade 4.3.0 -> 5.0.0
        chrony: upgrade 4.1 -> 4.2
        openvpn: upgrade 2.5.4 -> 2.5.5
        samba: upgrade 4.14.10 -> 4.14.11
        libnet-dns-perl: upgrade 1.32 -> 1.33
        byacc: upgrade 20210808 -> 20211224
        glmark2: upgrade 2021.02 -> 2021.12
        python3-djangorestframework: upgrade 3.12.4 -> 3.13.1
        python3-google-api-python-client: upgrade 2.30.0 -> 2.33.0
        python3-networkx: upgrade 2.6.2 -> 2.6.3
        python3-pyatspi: upgrade 2.38.1 -> 2.38.2
        pugixml: upgrade 1.11.2 -> 1.11.4

poky: d78650b980..27ff420543:
  Adrian Freihofer (1):
        runqemu: support rootfs mounted ro

  Alejandro Hernandez Samaniego (3):
        tclibc-newlib: Supply missing /bin/sh target in newlib sdk
        tclibc-baremetal: Supply missing /bin/sh target in the baremetal sdk
        gcc-cross-canadian: Fix cross canadian compiler for baremetal targets

  Alexander Kanavin (262):
        runqemu: unbreak non-gl displays
        curl: submit patch upstream
        libxml2: submit patch upstream
        psplash: upgrade to latest revision
        python3-gitdb: upgrade 4.0.7 -> 4.0.9
        python3-pyparsing: upgrade 3.0.0 -> 3.0.4
        vala: upgrade 0.54.2 -> 0.54.3
        asciidoc: upgrade 10.0.0 -> 10.0.1
        lighttpd: upgrade 1.4.60 -> 1.4.61
        stress-ng: upgrade 0.13.00 -> 0.13.06
        mesa: upgrade 21.2.4 -> 21.2.5
        linux-firmware: upgrade 20210919 -> 20211027
        puzzles: upgrade to latest revision
        libsoup: upgrade 3.0.1 -> 3.0.2
        libsoup-2.4: upgrade 2.74.0 -> 2.74.1
        nghttp2: upgrade 1.45.1 -> 1.46.0
        diffoscope: upgrade 188 -> 189
        gawk: update 5.1.0 -> 5.1.1
        cmake: update 3.21.3 -> 3.21.4
        ffmpeg: update 4.4 -> 4.4.1
        icu: update 69.1 -> 70.1
        librsvg: update 2.52.2 -> 2.52.3
        xf86-video-intel: update to latest commit
        cracklib: update 2.9.5 -> 2.9.7
        cracklib: patches submitted upstream
        docbook-xml: patch is not upstreamable
        lrzsz: patch is not upstreamable
        libjitterentropy: upgrade 3.3.0 -> 3.3.1
        gdbm: upgrade 1.19 -> 1.22
        perl: backport gdbm 1.2x compatibility fixes
        valgrind: mark ptest-specific patch as inappropriate
        systemd-bootchart: submit musl patches upstream
        librsvg: set the needed atomic configuration flags directly per-target
        libxml2: mark patch as non-upstreamable
        libpcre/libpcre2: correct SRC_URI
        ovmf: submit patch upstream
        mesa-demos: drop glx option and patch
        mesa-demos: mark glew/glu patch as non-upstreamable
        xserver-xorg: update 1.20.13 -> 21.1.1
        xserver-xorg: convert from autotools to meson
        xserver-xorg: add missing libtirpc dependency
        rust: update 1.56.0 -> 1.56.1
        libgpg-error: update 1.42 -> 1.43
        socat: upgrade 1.7.4.1 -> 1.7.4.2
        kexec-tools: update 2.0.22 -> 2.0.23
        python3-hypothesis: upgrade 6.24.0 -> 6.24.2
        python3-numpy: upgrade 1.21.3 -> 1.21.4
        python3-packaging: upgrade 21.0 -> 21.2
        python3-pbr: upgrade 5.6.0 -> 5.7.0
        python3-py: upgrade 1.10.0 -> 1.11.0
        python3-setuptools: upgrade 58.3.0 -> 58.5.3
        python3-pyparsing: update 3.0.4 -> 3.0.5
        vulkan-samples: update to latest revision
        gnu-config: update to latest revision
        libgpg-error: mark patch as non-upstreamable
        valgrind: submit patch upstream
        meson: upgrade 0.59.2 -> 0.60.1
        shared-mime-info: fix meson 0.60 builds
        webkitgtk: submit patches upstream
        webkitgtk: remove unneeded patch
        spirv-headers: PV should be 1.5.4
        ovmf: submit patch upstream
        weston: submit patch upstream
        db: mark all patches as non-upstreamable
        unzip/zip: mark all patches as non-upstreamable
        automake: update 1.16.3 -> 1.16.5
        libunistring: address automake 1.16.5 failures
        gettext: address automake 1.16.5 failures
        ccache: upgrade 4.4.2 -> 4.5
        python3-hypothesis: upgrade 6.24.2 -> 6.24.3
        python3-pyparsing: upgrade 3.0.5 -> 3.0.6
        asciidoc: upgrade 10.0.1 -> 10.0.2
        libpipeline: upgrade 1.5.3 -> 1.5.4
        diffoscope: upgrade 190 -> 192
        piglit: upgrade to latest revision
        systemd: upgrade 249.5 -> 249.6
        xwayland: upgrade 21.1.2 -> 21.1.3
        librstd-rs: submit patches upstream
        curl: update 7.79.1 -> 7.80.0
        librsvg: update 2.52.3 -> 2.52.4
        libsamplerate0: update 0.1.9 -> 0.2.2
        patches: correct whitespace/spelling for Upstream-Status tags
        autoconf: add missing Upstream-Status to patches
        libxml2: add missing Upstream-Status tag
        unfs3: add missing Upstream-Status tag
        kea: add missing Upstream-Status to a patch
        libnl: add missing Upstream-Status tag
        rust-hello-world: add missing Upstream-Status to a patch
        numactl: add missing Upstream-Status to a patch
        expect: do not install examples, drop related patch
        slang: mark patch as inappropriate for upstream submission
        busybox: drop 0001-Use-CC-when-linking-instead-of-LD-and-use-CFLAGS-and.patch
        librsvg: submit system-deps patch upstream
        groff: include references to corresponding upstream commits in a patch
        logrotate: add a link to upstream review for one of the patch
        glib-2.0: submit patch upstream
        ell: remove unneeded patch
        apt: drop unneeded chunk from a musl patch, submit the rest upstream
        diffstat: remove unneeded patch
        dpkg: replace a patch with a tweak to an already existing sed fixup
        elfutils: update 0.185 -> 0.186
        elfutils: submit patch upstream
        weston: mark patch as denied
        gptfdisk: submit patch upstream
        git: update 2.33.1 -> 2.34.0
        cmake: update 3.21.4 -> 3.22.0
        systemd: update 249.6 -> 249.7
        vulkan: update 1.2.191.0 -> 1.2.198.0
        bind: update 9.16.22 -> 9.16.23
        python3-packaging: update 21.2 -> 21.3
        python3-setuptools: update 58.5.3 -> 59.2.0
        libcomps: remove unneeded patch
        libdnf: submit patches upstream
        meson: submit patch upstream
        perl-cross: submit patches upstream
        perl: submitted patch upstream
        testimage.bbclass: request the use of kvm by default
        go-helloworld: update to latest revision
        go-helloworld: test at runtime
        python3-rfc3339/3986-validator: correct upstream version check
        go: update 1.16.10 -> 1.17.3
        ovmf: remove patch merged upstream
        insane.bbclass: add a check that Upstream-Status patch tag is present and correctly formed
        perl: replace a patch with a config option
        meson: configure and use generic exe_wrapper
        perlcross: do not copy ${S}/patches into sysroot
        python3: mark patch as inappropriate, with better explanation
        vala: submit patch upstream
        valgrind: remove unneeded patch
        lighttpd: remove unneeded (since meson switch) patch
        stress-ng: submit patch upstream
        zstd: submit patch upstream
        sudo: submit patch upstream
        adwaita-icon-theme: submit patch upstream
        igt-gpu-tools: correct patch status
        wayland: drop unnecessary patch
        xserver-xorg: remove unneeded patch
        kexec-tools: drop unneeded patch
        piglit: submit patches upstream
        systemtap: submit patch upstream
        ffmpeg: submit patch upstream
        libfm: submit patches upstream
        libgcrypt: submit patch upstream
        libgpg-error: submit patch upstream
        lttng: submit patches upstream
        rustfmt: remove the recipe
        python3-pycryptodome: update to 3.12.0
        strace: update 5.14 -> 5.15
        cups: update 2.3.3op2 -> 2.4.0
        erofs-utils: update 1.3 -> 1.4
        rust: update 1.56.1 -> 1.57.0
        git: upgrade 2.34.0 -> 2.34.1
        go: update 1.17.3 -> 1.17.4
        libunwind: update 1.6.0 -> 1.6.2
        libseccomp: update 2.5.2 -> 2.5.3
        bitbake: fetch2/wget: do not hardcode tarball compressors in version check
        ruby: update 3.0.2 -> 3.0.3
        glib-2.0: upgrade 2.70.1 -> 2.70.2
        ell: upgrade 0.45 -> 0.46
        ccache: upgrade 4.5 -> 4.5.1
        mmc-utils: upgrade to latest revision
        python3-hypothesis: upgrade 6.24.3 -> 6.30.0
        python3-markdown: upgrade 3.3.4 -> 3.3.6
        python3-more-itertools: upgrade 8.11.0 -> 8.12.0
        python3-pbr: upgrade 5.7.0 -> 5.8.0
        python3-ruamel-yaml: upgrade 0.17.16 -> 0.17.17
        python3-setuptools: upgrade 59.2.0 -> 59.4.0
        freetype: upgrade 2.11.0 -> 2.11.1
        harfbuzz: upgrade 3.1.1 -> 3.1.2
        vulkan-loader: upgrade 1.2.198.0 -> 1.2.198.1
        mesa: upgrade 21.3.0 -> 21.3.1
        piglit: upgrade to latest revision
        webkitgtk: upgrade 2.34.1 -> 2.34.2
        diffoscope: upgrade 192 -> 194
        enchant2: upgrade 2.3.1 -> 2.3.2
        libsoup: upgrade 3.0.2 -> 3.0.3
        xxhash: upgrade 0.8.0 -> 0.8.1
        kern-tools-native: check tags, not commits for new versions
        libid3tag: move to meta-oe
        bitbake: fetch: add a test for version check where compression changes
        meson: upgrade 0.60.1 -> 0.60.2
        sstatetests: add a test for moving oe-core around in the filesystem
        serf: mark upstream as inactive
        rust-hello-world: test at runtime
        btrfs-tools: upgrade 5.15 -> 5.15.1
        python3-hypothesis: upgrade 6.30.0 -> 6.31.4
        elfutils: update patch submitted upstream
        python3-setuptools: upgrade 59.4.0 -> 59.5.0
        lighttpd: upgrade 1.4.61 -> 1.4.63
        vim: do not report upstream version check as broken
        harfbuzz: upgrade 3.1.2 -> 3.2.0
        less: upgrade 590 -> 598
        alsa: upgrade 1.2.5 -> 1.2.6
        dpkg: update 1.20.9 -> 1.21.1
        piglit: upgrade to latest revision
        go: upgrade 1.17.4 -> 1.17.5
        repo: update 2.18 -> 2.19
        libptytty: add recipe
        boost: update 1.77.0 -> 1.78.0
        rxvt-unicode: upgrade 9.26 -> 9.30
        diffoscope: upgrade 194 -> 196
        debianutils: update 4.11.2 -> 5.5
        libx11: update 1.7.3 -> 1.7.3.1
        libsdl2: update 2.0.16 -> 2.0.18
        runqemu: additional setting to force software rendering with sdl 2.0.18
        cantarell-fonts: update 0.301 -> 0.303.1
        go: log build id computations
        lib/oe/reproducible: correctly set .git location when recursively looking for git repos
        go: correctly set debug-prefix-map and build directory
        go: additional patches to help reproducibility
        selftest/reproducible: drop go items from exception list
        virgl: skip headless test on alma 8
        ruby: disable rdoc due to non-reproducibility
        rust-llvm: apply the same reproducibility patch as for llvm proper
        busybox: update 1.34.1 -> 1.35.0
        systemd: update 249.7 -> 250.1
        python3-numpy: update 1.21.4 -> 1.22.0
        mdadm: update 4.1 -> 4.2
        libportal: update 0.4 -> 0.5
        epiphany: make libportal optional, and move it to meta-oe
        librsvg: update 2.52.4 -> 2.52.5
        qemuboot/runqemu: fully form the ip= kernel parameter
        parselogs: add a couple systemd false positives
        systemd-boot: restore reproducibility
        connman-conf: do nothing in qemu, do not touch eth0
        python3: drop unneeded multiprocessing module patch
        ruby: update 3.0.3 -> 3.1.0
        meson: fold nativesdk into the main recipe
        meson: update 0.60.3 -> 0.61.1
        efivar: update 37 -> 38
        libuv: update 1.42.0 -> 1.43.0
        resolvconf: update 1.87 -> 1.91
        systemd: update 250.1 -> 250.3
        python3: update 3.10.1 -> 3.10.2
        logrotate: update 3.18.1 -> 3.19.0, drop rotate-across-filesystems patches
        sqlite: update 3.37.1 -> 3.37.2
        rust: update 1.57.0 -> 1.58.0
        readline: upgrade 8.1 -> 8.1.2
        socat: upgrade 1.7.4.2 -> 1.7.4.3
        go: upgrade 1.17.5 -> 1.17.6
        shadow: upgrade 4.10 -> 4.11.1
        e2fsprogs: upgrade 1.46.4 -> 1.46.5
        mtools: upgrade 4.0.36 -> 4.0.37
        python3-pygments: upgrade 2.11.1 -> 2.11.2
        python3-pyrsistent: upgrade 0.18.0 -> 0.18.1
        python3-ruamel-yaml: upgrade 0.17.19 -> 0.17.20
        vala: upgrade 0.54.4 -> 0.54.6
        pigz: upgrade 2.6 -> 2.7
        rpcsvc-proto: upgrade 1.4.2 -> 1.4.3
        piglit: upgrade to latest revision
        libinput: upgrade 1.19.2 -> 1.19.3
        xwayland: upgrade 21.1.3 -> 21.1.4
        puzzles: upgrade to latest revision
        webkitgtk: upgrade 2.34.2 -> 2.34.3
        diffoscope: upgrade 199 -> 200
        libsoup: upgrade 3.0.3 -> 3.0.4
        liburcu: upgrade 0.13.0 -> 0.13.1
        ffmpeg: upgrade 4.4.1 -> 5.0
        p11-kit: update 0.24.0 -> 0.24.1
        libunistring: update 0.9.10 -> 1.0
        repo: upgrade 2.19 -> 2.20
        stress-ng: upgrade 0.13.09 -> 0.13.10

  Alexey Brodkin (1):
        openssl: Use linux-latomic target for ARC

  Andreas Müller (1):
        libsdl2: Move to CMake build

  Andrei Gherzan (2):
        gcc: Fix compile of gcc plugins
        gcc: Fix typo in linux64.h install patch

  Andres Beltran (2):
        create-spdx: Set the Organization field via a variable
        create-spdx: Fix key errors in do_create_runtime_spdx

  Anton Mikanovich (1):
        bitbake: process: Do not mix stderr with stdout

  Anuj Mittal (3):
        glibc-version.inc: remove branch= from GLIBC_GIT_URI
        releases.rst: move gatesgarth to outdated releases section
        xserver-xorg: update CVE_PRODUCT

  Bruce Ashfield (69):
        linux-yocto/5.14: update to v5.14.15
        linux-yocto/5.10: update to v5.10.76
        linux-yocto-rt/5.10: update to -rt54
        strace: fix build against 5.15 kernel/kernel-headers
        ppp: fix build against 5.15 headers
        linux-libc-headers: update to v5.15
        linux-yocto/5.15: introduce recipes
        linux-yocto-rt/5.15: update to -rt17
        linux-yocto/5.14: update to v5.14.16
        linux-yocto/5.10: update to v5.10.77
        linux-yocto/5.14: update to v5.14.17
        linux-yocto/5.15: update to v5.15.1
        linux-yocto/5.10: update to v5.10.78
        kernel: provide virtual/kernel for all kernels
        linux-yocto/5.15: update to v5.15.2
        linux-yocto/5.14: update to v5.14.18
        linux-yocto/5.10: update to v5.10.79
        kernel-yocto: conditionally enable stack protection checking on x86-64
        linux-yocto-dev: bump to v5.16+
        kernel: export native PKGCONFIG variables
        python: introduce python3-dtschema
        python: import jsonpointer from meta-python
        python3-jsonpointer: Update 2.1 to 2.2
        python: import jsonschema from meta-python
        python: import idna from meta-python
        python: import rfc3339-validator from meta-python
        python: import rfc3986-validator from meta-python
        python: import webcolors from meta-python
        python: import ruamel-yaml from meta-python
        python: import pyrsistent from meta-python
        python: import rfc3987 from meta-pyton
        python: import strict-rfc3339 from meta-python
        python: import vcversioner from meta-python
        maintainers: update for kernel dtschema checking dependencies
        linux-yocto: export pkgconfig variables to devshell
        kernel: introduce python3-dtschema-wrapper
        linux-yocto-dev: introduce dt-validation PACKAGECONFIG
        linux-yocto/5.14: update to v5.14.21
        linux-yocto/5.15: update to v5.15.5
        linux-yocto/5.10: update to v5.10.82
        linux-yocto/5.15: update to v5.15.6
        linux-yocto-dev: use versioned branch as default
        linux-yocto-rt/5.10: update to -rt56
        kern-tools: bug fixes and kgit-gconfig
        linux-yocto/5.10: update to v5.10.84
        linux-yocto/5.15: update to v5.15.7
        linux-yocto/5.15: update to v5.15.8
        linux-yocto/5.10: update to v5.10.85
        linux-yocto/5.15: update to v5.15.10
        linux-yocto/5.10: update to v5.10.87
        linux-yocto/5.10: update to v5.10.89
        linux-yocto/5.15: update to v5.15.12
        linux-yocto/5.14: fix arm 32bit -rt warnings
        linux-yocto/5.15: fix arm 32bit -rt warnings
        linux-yocto/5.10/cfg: add kcov feature fragment
        linux-yocto/5.15/cfg: add kcov feature fragment
        linux-yocto/5.15: update to v5.15.13
        linux-yocto/5.10: update to v5.10.90
        conf/machine: bump qemu preferred versions to 5.15
        linux-yocto: drop 5.14 recipes
        yocto-bsp: change default to 5.15
        yocto-bsp/5.14: drop recipes
        poky: set default kernel to 5.15
        linux-yocto/5.15: fix arm defconfig warnings
        lttng-modules: update to 2.13.1
        linux-yocto/5.10: amdgpu: updates for CVE-2021-42327
        linux-yocto/5.15: update to v5.15.14
        linux-yocto/5.10: update to v5.10.91
        linux-yocto-rt/5.15: update to -rt22

  Chaitanya Vadrevu (1):
        python3-pyelftools: Depend on debugger, pprint

  Changhyeok Bae (2):
        iputils: update 20210722 to 20211215
        iproute2: update 5.15.0 to 5.16.0

  Changqing Li (3):
        cmake: upgrade 3.22.0 -> 3.22.1
        rpm: fix CVE-2021-3521
        pigz: fix one failure of command "unpigz -l"

  Chen Qi (7):
        bitbake: tests/fetch.py: fix premirror test cases
        bitbake: tests/fetch.py: add test case to ensure downloadfilename is used for premirror
        bitbake: fetch2: fix downloadfilename issue with premirror
        opkg: use oe.qa.add_message istead of package_qa_add_message
        avahi: update CVE id fixed by local-ping.patch
        waffle: add cmake-native to DEPENDS
        populate_sdk_base: remove unneeded dirs such as /dev

  Claus Stovgaard (1):
        cups: Fix missing installation of cups sysv init scripts

  Daniel Gomez (1):
        os-release: Add DISTRO_CODENAME as vardeps for do_compile

  Denys Dmytriyenko (3):
        wayland-protocols: upgrade 1.23 -> 1.24
        wayland: upgrade 1.19.0 -> 1.20.0
        mtd-utils: upgrade 2.1.3 -> 2.1.4

  Dhruva Gole (2):
        scripts/checklayer/common.py: Fixed a minor grammatical error
        yocto-check-layer: Add additional README checks

  Dmitry Baryshkov (1):
        go: fix building without SECURITY_LDFLAGS

  Florian Amstutz (1):
        systemd: Fix systemd-journal-gateway user/groups

  He Zhe (1):
        linux-yocto-dev: Set KBRANCH with =

  Jacob Kroon (3):
        native/cross: Add ar wrapper for determinism
        no-static-libs.inc: Fixes
        sstate: Preserve permissions when extracting tar archive

  Jagadeesh Krishnanjanappa (1):
        tune-cortexa72: remove crypto for the default cortex-a72

  Jasper Orschulko (4):
        repo: Add recipe for 2.17.3
        base.bbclass: Add sysroot deps for repo fetcher
        repo: Use separate task for patching repo rev
        repo: upgrade 2.17.3 -> 2.18

  Jim Wilson (1):
        gdb-common: Add --with-liblzma-prefix in xz PACKAGECONFIG.

  Joel Winarske (1):
        mesa: Add PACKAGECONFIG option for broadcom v3d Vulkan driver

  Jon Mason (3):
        runqemu: work without SERIAL_CONSOLES being defined
        scripts/lib/wic/help.py: Update Fedora Kickstart URLs
        yocto-check-layer: disregard checks if referencing another README file

  Jose Quaresma (11):
        sstate: another fix for touching files inside pseudo
        bitbake: cooker: check if upstream hash equivalence server is available
        spirv-headers: upgrade 1.5.4 -> 1.5.5
        spirv-headers: bump to last master
        spirv-tools: upgrade 2021.3 -> 2021.4
        glslang: upgrade 11.6.0 -> 11.7.0
        shaderc: upgrade 2021.2 -> 2021.3
        sstate: cleanup the sstate mirror progress check
        sstate: only search on the mirrors for the missing files
        sstate: add a function to get the sstate file name in sstate_checkhashes
        glslang: upgrade 11.7.0 -> 11.7.1

  Joshua Watt (7):
        classes/meson: Add optional rust definitions
        classes/crate-fetch: Ensure crate fetcher is available
        yocto-check-layer: Relax README case checks
        webkitgtk: Add packageconfig for libsoup2
        epiphany: Add packageconfig for libsoup2
        selftest: reproducible: Set maximum report size
        classes/native: Propagate dependencies to outhash

  Justin Bronder (1):
        bitbake: fetch2/wget: add redirectauth parameter

  Kai Kang (7):
        squashfs-tools: fix CVE-2021-41072
        squashfs-tools: follow-up fix for CVE-2021-41072
        convert-srcuri.py: use regex to check space in SRC_URI
        packagegroup-core-tools-testapps: clear GOTOOLS for riscv32
        xserver-xorg: 21.1.2 -> 21.1.3
        multilib.bbclass: set rpm file color for 32-bit multilib image
        speex: fix CVE-2020-23903

  Kamil Dziezyk (1):
        grub-efi: Add xen_boot support when 'xen' is in DISTRO_FEATURES for aarch64

  Kevin Hao (6):
        meta-yocto-bsp: Introduce the v5.15 bbappend
        tune-cortexa72: Enable the crc extension by default for cortexa72
        arch-armv8-5a.inc: Add tune include for armv8.5a
        armv9a/tune: Add the support for the Neoverse N2 core
        tune-cortexa72: Drop the redundant cortexa72-crc tune
        tune-cortexa73: Introduce cortexa73-crypto tune

  Khairul Rohaizzat Jamaluddin (1):
        epiphany: update 41.0 -> 41.3

  Khem Raj (37):
        wpebackend-fdo: Add -Wno-c++11-narrowing
        musl: Update to tip of trunk
        site/common-musl: Enable qsort_r in glib
        libsolv: Enable correct qsort_r on musl
        kernel-devsrc: Add vdso.lds and other build files for riscv64 as well
        gdb: Upgrade to 11.1
        gdb: Add dependency on libgmp
        librsvg: Disable 64bit atomics on riscv32/mipsel in crossbeam
        qemu: Build on musl targets
        qemu: Fix build on aarch64/musl
        wic: Use os.rename instead of bb.utils.rename
        qemu: Exclude building on riscv32
        ptest-packagelists: Remove qemu ptests for rv32
        gobject-introspection: Add -Dintrospection only when GIR_MESON_OPTION is not empty
        gstreamer1.0-python: Improve introspection option handling
        python3-pygobject: Improve introspection handling
        vulkan-samples: Fix cmake errors about plain signature
        vulkan-samples: Enable for architectures where it builds
        glibc-tests: Do not set SYSTEMD_SERVICE
        image: Include psplash only when screen machine feature is enabled
        weston-init: Pass --continue-without-input when launching weston
        Revert "weston-init: Pass --continue-without-input when launching weston"
        boost: Fix build on arches with no atomics
        glibc: Drop patch to support/workaround prelinked apps on armv5
        libunwind: Enable for rv64
        perf: Enable libunwind packageconfig on riscv64
        glibc: Drop ppc sqrt optimisations
        ffmpeg: Fix build on ppc32
        mesa: Fix build on ARM systems without Neon
        gdb: Drop sh4 support patch
        binutils: Drop patch to wider sh regexp
        mesa: Fix broadcom vulkan driver build on 32bit arches with 64bit time_t
        mesa: Define broadcom packageconfig knob
        glibc: Redo tzselect bash dependency problem
        gcc: Update status of musl stddef.h patch
        libsdl2: Fix build when libunwind is not used
        valgrind: Avoid accessing network in ptest task

  Konrad Weihmann (3):
        insane: add Inactive-Upstream to Upstream-Status
        insane: move src-uri-bad checks to unpack stage
        cve-check: add lockfile to task

  Leif Middelschulte (1):
        meson: improve SDK's wrapper to make Wraps work

  Li Wang (1):
        libtool: change the default AR_FLAGS from "cru" to "cr"

  Lukasz Majewski (1):
        glibc: ptest: Add running glibc time related test suite (Y2038) with ptest

  Manuel Leonhardt (2):
        sstate: Account for reserved characters when shortening sstate filenames
        dpkg: Install dkpg-perl scripts to versioned perl directory

  Marek Vasut (2):
        bootchart2: Add missing python3-math dependency
        u-boot: upgrade 2021.10 -> 2022.01

  Markus Volk (2):
        libva: move PACKAGECONFIG options to libva.inc
        vulkan-loader: inherit pkgconfig

  Martin Jansa (1):
        gdb-cross: add dependency on gmp-native

  Matt Madison (2):
        qemu.bbclass: drop OLDEST_KERNEL reference
        qemu: add patch to set minimum kernel version for riscv32

  Matthias Klein (1):
        gdb: fix aarch64 remote debugging gdb/28355

  Max Krummenacher (4):
        perf: sort-pmuevents: don't drop elements
        perf: sort-pmuevents: allow for additional type qualifiers and storage class
        ref-manual: fix patch documentation
        libsdl2: fix build if egl.pc sets macros in cflags

  Michael Halstead (3):
        releases: update to include 3.3.4
        releases: update to include 3.4.1
        releases: update to include 3.1.13

  Michael Opdenacker (35):
        manuals: correct "take affect" by "take effect"
        manuals: start of documentation standards document
        bitbake: doc: bitbake-user-manual: expand SRC_URI description
        ref-manual: remove reference to TOPDIR
        ref-manual: BBFILES_DYNAMIC - fix punctuation and quoting issues
        ref-manual: simplify SRC_URI reference
        documentation: prepare for 3.1.12 release
        bitbake: bitbake-user-manual: quoting fixes
        bitbake: bitbake-user-manual: fix typo
        bitbake: bitbake-user-manual: add missing reference
        bitbake: bitbake-user-manual: fix backslash issues
        bitbake: bitbake-user-manual: SRC_URI: mention gitsm fetcher
        ref-manual: drop support for Ubuntu 16.04
        ref-manual: drop support for Fedora 30-32
        dev-manual: remove warning about += and :append
        manuals: add hyperlinks to files in meta-skeleton
        dev-manual: how to purge duplicate sstate cache files
        migration-guides: add more class references
        ref-manual: add more class references
        misc manuals: add further class references
        ref-manual: remove newline string in PREMIRRORS
        bitbake: doc: bitbake-user-manual: expand BB_HASHSERVE and document BB_HASHSERVE_UPSTREAM
        documentation: add comment to releases.rst switchers.js
        overview-manual: fix typo
        manuals: replace "rootfs" by "root filesystem"
        quick start manual: update Share State and Hash Equivalence settings
        documentation/README: trivial typo fix
        manuals: document hash equivalence
        dev-manual: update bitbake.conf sample for static libs
        manuals: add reference to GIR_EXTRA_LIBS_PATH plus minor improvements
        migration-guides: prepare for release 3.5
        manuals: simplify references to class sections
        ref-manual: Drop TUNEABI, TUNEABI_WHITELIST, TUNEABI_OVERRIDE
        dev-manual: stop mentioning nightly builds
        bitbake: doc: bitbake-user-manual: expand BB_HASHSERVE explanations

  Mike Crowe (3):
        kernel: improve transformation from KERNEL_IMAGETYPE_FOR_MAKE
        package: Only snap libraries if they would be processed by ldconfig OS-12840
        documentation: Document PACKAGE_SNAP_LIB_SYMLINKS

  Mingli Yu (4):
        wic: use shutil.which
        libpam: Backport ptest fix checking whether files exist
        libhandy: Backport a makefile header race
        bootchart2: remove wait_boot logic

  Oleksandr Kravchuk (5):
        libxcvt: add recipe
        python3: udpate to 3.10.1
        libx11: update to 1.7.3
        xserver-xorg: update to 21.1.2
        ofono: update to 1.34

  Oleksiy Obitotskyy (1):
        package_manager: ipk: Fix host manifest generation

  Otavio Salvador (20):
        acpica: upgrade 20210930 -> 20211217
        asciidoc: upgrade 10.0.2 -> 10.1.1
        alsa-ucm-conf: upgrade 1.2.6.2 -> 1.2.6.3
        bind: upgrade 9.16.23 -> 9.16.24
        kea: upgrade 2.0.0 -> 2.0.1
        meson: upgrade 0.60.2 -> 0.60.3
        mmc-utils: upgrade to latest revision
        python3-attrs: upgrade 21.2.0 -> 21.4.0
        python3-cython: upgrade 0.29.25 -> 0.29.26
        python3-hypothesis: upgrade 6.31.4 -> 6.34.1
        python3-importlib-metadata: upgrade 4.9.0 -> 4.10.0
        python3-pygments: upgrade 2.10.0 -> 2.11.1
        python3-ruamel-yaml: upgrade 0.17.17 -> 0.17.19
        python3-tomli: upgrade 1.2.2 -> 2.0.0
        python3-zipp: upgrade 3.6.0 -> 3.7.0
        sqlite3: upgrade 3.37.0 -> 3.37.1
        stress-ng: upgrade 0.13.08 -> 0.13.09
        python3-dtschema: upgrade 2021.10 -> 2021.12
        mesa: 21.3.1 -> 21.3.3
        libxcrypt, libxcrypt-compat: upgrade 4.4.26 -> 4.4.27

  Paul Eggleton (4):
        classes/kernel*: allow disabling symlink creation
        classes/qemuboot: allow IMAGE_LINK_NAME to be empty
        classes/kernel*: add variables to allow changing artifact extension
        classes/create-spdx: handle if IMAGE_LINK_NAME is empty

  Pavel Zhukov (2):
        go: upgrade 1.16.8 -> 1.16.10
        patch.py: Initialize git repo before patching

  Peter Kjellerstedt (22):
        systemd: Do not install anything in /var/volatile
        base-files: Ignore the empty-dirs QA error due to files in /var/volatile
        apt: Do not install /var/log/apt for target
        insane.bbclass: Add a check for directories that are expected to be empty
        libx11: Update LICENSE to better reflect reality
        libx11-compose-data: Update LICENSE to better reflect reality
        ncurses.inc: Remove a no longer relevant comment
        systemd: Revert inappropriate use of ${systemd_system_unitdir}
        systemd-conf: Revert inappropriate use of ${systemd_system_unitdir}
        systemd-bootchart: Revert inappropriate use of ${systemd_system_unitdir}
        mirrors.bbclass: Clean up the additions to MIRRORS
        own-mirrors.bbclass: Clean up the additions to PREMIRRORS
        gcc-common.inc: Clean up the additions to MIRRORS
        slang: Clean up the additions to PREMIRRORS
        testsdk.py: Clean up the additions to PREMIRRORS and SSTATE_MIRRORS
        gcc-common.inc: Remove mirrors that are no longer available
        tzdata: Make it compatible with devtool modify
        tzdata: Remove unnecessary RPROVIDES
        tzdata: Clean up
        tzdata: Remove no longer relevant RCONFLICTS:${PN}
        rootfs-postcommands.bbclass: Make two comments use the new variable syntax
        systemd: Avoid a Python deprecation warning

  Pgowda (2):
        gcc: Fix CVE-2021-35465
        rust-cross: Replace TARGET_ARCH with TUNE_PKGARCH

  Quentin Schulz (10):
        README.OE-Core.md: update URLs
        ptest-packagelists: Add missing python3-webcolors entry
        make the documentation a bit more inclusive
        docs: dev-manual: common-tasks: highlight creating your own layer is not required
        documentation: conf.py: add knob for loading appropriate objects.inv
        kmscube: fix build on OpenGL ES 3 dependencies not providing GLES3/gl3ext.h
        mesa: PROVIDES virtual/libgles3
        kmscube: add build dependency on virtual/libgles3
        mesa: make ligles3-dev RDEPENDS on libgles2-dev
        bitbake: doc: bitbake-user-manual: specify the URL to be used with SSH over git is different from `git clone`'s

  Randy MacLeod (5):
        valgrind: Add util-linux-taskset ptest dependency
        valgrind: backport rseq work-around
        valgrind: remove duplicate and skipped tests from remove-for-aarch64
        valgrind: skip boost_thread for aarch64 ptests
        valgrind: make run-ptest better

  Richard Purdie (133):
        meta: Add explict branch to git SRC_URIs
        meta/scripts: Manual git url branch additions
        linunistring: Add missing gperf-native dependency
        archiver: Default to xz compresison instead of gz
        gcc: Drop libgfortran patch
        pseudo: Add fcntl64 wrapper
        libgfortran: Set GFORTRAN
        bitbake: fetch2/git: Allow git fetcher to support subdir param
        bitbake: fetch2/git: Add a warning asking users to set a branch in git urls
        bitbake: tests/fetch: Update github urls
        bitbake: fetch/git: Handle github dropping git:// support
        bitbake: fetch/git: Show warning for invalid github urls
        bitbake: lib/bb: Clean up use of len()
        bitbake: daemonize: Avoid unclosed file warning
        bitbake: lib/bb: Fix string concatination potential performance issues
        bitbake: fetch: Handle mirror user/password replacements correctly
        bitbake: tests/fetch: Add test for url parameter rewriting
        bitbake.conf: Fix corruption of GNOME mirror url
        scripts/convert-srcuri: Update SRC_URI conversion script to handle github url changes
        recipes: Update github.com urls to use https
        go-helloworld/glide: Fix urls
        opkg: Fix poor operator combination choice
        bitbake: runqueue: Fix runall option task deletion ordering issue
        bitbake: tests/fetch: Update pcre.org address after github changes
        bitbake: cooker: Handle parse threads disappearing to avoid hangs
        bitbake: fetch2/checksum/siggen: Fix taskhashes not tracking file directories
        bitbake: runqueue: Fix runall option handling
        bitbake: cooker: Remove debug code, oops :(
        bitbake: parse/ast: Show warnings for append/prepend/remove operators combined with +=/.=
        bitbake: fetch/wget: Add timeout for checkstatus calls (30s)
        bitbake: cooker: Handle parsing results queue race
        mirrors: Add uninative mirror on kernel.org
        scripts/oe-package-browser: Fix after overrides change
        scripts/oe-package-browser: Handle no packages being built
        xserver-xorg: Remove orphaned comment
        bitbake: fetch: Add README on fetcher design constraints
        wpa-supplicant: Match package override to PACKAGES for pkg_postinst
        uninative: Add version to uninative tarball name
        packagegroup-core-buildessential: Mark as TUNE_PKGARCH specific
        packagegroups-core-full-cmdline: Drop libraries packagegroup and gmp
        packagegroup-core-full-cmdline: Drop compatibility mappings
        packagegroup-core-x11-base: Drop dbus dependency
        mirrors: Add kernel.org sources mirror for downloads.yoctoproject.org
        bitbake: cooker: Fix task-depends.dot for multiconfig targets
        bitbake: tests/runqueue: Set TOPDIR in test
        bitbake: cookerdata: Set TOPDIR explicitly and fix broken findTopdir()
        bitbake: cache/ConfHandler: Drop TOPDIR/chdir manipulations
        package: Add sanity check for allarch packagegroups
        gcc: Dropping mips workaround
        lua: Backport fix for CVE-2021-43396
        glibc: Backport fix for CVE-2021-43396
        gcc: Tweak Upstream-Status formatting
        bitbake: utils: Handle lockfile filenames that are too long for filesystems
        bitbake: fetch2: Fix url remap issue and add testcase
        bitbake: bitbake-user-manual: Remove newline string in MIRRORS/PREMIRRORS
        buildhistory: Drop support for older bitbakes
        buildhistory: Fix srcrevs output
        ptest-packagelists: Handle glibc vs musl for ptest
        buildhistory: Fix do_package race issues
        bitbake.conf: Pass -D option to ranlib for determisim
        glibc: Fix i586/c3 support
        gcc: Drop no longer needed patch
        ptest-packagelists: Add missing python3-jsonpointer entry
        python3: Add missing HOMEPAGE entries
        nativesdk: Handle chown/chgrp calls in nativesdk do_install tasks
        gcc: Drop mips default ABI patch
        gcc: Drop further unneeded precompiled header patch
        oeqa/utils/dump: Fix typo
        oeqa/parselogs: Fix quoting
        sanity/lib: Replace usage of LooseVersion() with bb.utils.vercmp_string_op()
        patchelf: Upgrade 0.14.1 -> 0.14.2
        debian: Fix renaming packagedata dependencies
        gst-plugins-bad: Add missing libxkbcommon vulkan dependency
        gcc: Update patch status submitted->backport
        minicom: Mark patches as backports
        minicom: Upgrade 2.7.1 -> 2.8
        glibc: Drop patch for obsolete conflict issue
        gst-plugins-bad: Bump cache versions to avoid libxkbcommon sstate issues
        puzzles: Refresh patches based upon upstream discussion
        gcc: Add CVE-2021-37322 to the list of CVEs to ignore
        bitbake: siggen: Ensure dumpsig output is deterministic
        build-appliance-image: Update to master head revision
        binutils: Drop mips gold patch
        binutils: Add more detail to the ppc patch
        binutils: Drop mips default target patch
        perf: Tweak for mips n64
        binutils: Drop mips XLP support patch
        puzzles: Upgrade to latest git with patches merged
        lttng-ust: upgrade 2.13.0 -> 2.13.1
        patchelf: upgrade 0.14.2 -> 0.14.3
        lttng-tools: Backport ptest fix
        lttng-tools: Disable problem tests
        bitbake: tests/runqueue: Improve lockfile handling race
        python3-idna: Update license to Unicode-TOU
        bitbake: tests/fetch: Drop gnu urls from wget connectivity test
        manpages: Fix override/append ordering and hence task signatures
        qemu: Upgrade 6.1.0 -> 6.2.0
        lttng-tools: Upgrade 2.13.1 -> 2.13.2
        oeqa/selftest/bbtests: Use YP sources mirror instead of GNU
        qemu: Add selinux PACKAGECONFIG
        package_deb/ipk/rpm: Add more minimal do_build dependencies back
        meson: Handle qemu riscv issues
        openssl: Add reproducibility fix
        webkitgtk: Add reproducibility fix
        scripts: Update to use exec_module() instead of load_module()
        bitbake: utils: Update to use exec_module() instead of load_module()
        gtk-doc/meson: Fix typos
        libsdl2: Fix X11 configure options
        Revert "qemu.bbclass: drop OLDEST_KERNEL reference"
        allarch: Fix interaction with qemu class
        expat: Update HOMEPAGE to current url
        wayland-protocols: Change inherit order
        sstatetests: Add OLDEST_KERNEL to allarch tests
        oeqa/sstate: Fix allarch samesigs test
        buildtools-installer: Update to use 3.4
        bitbake: utils: Add disable_network function
        bitbake: bitbake-worker: Add/support network task flag
        bitbake: runqueue: Drop BB_STAMP_POLICY/BB_STAMP_WHITELIST
        classes: Only allow network in existing network accessing code
        sanity: Drop TUNEABI, TUNEABI_WHITELIST, TUNEABI_OVERRIDE
        expat: Upgrade 2.4.2 -> 2.4.3
        expat: Drop unneeded libtool patch, we use cmake
        bitbake: doc: Drop BB_STAMP_POLICY/BB_STAMP_WHITELIST
        expat: Simplify ptest-runner
        build-appliance-image: Update to master head revision
        bitbake: build: Tweak exception handling for setscene tasks
        bitbake: fetch2: Add crate fetcher
        sstate: Show better exception information for failures
        sstate: Improve failure to obtain archive message/handling
        abi_version: Bump HASHEQUIV_HASH_VERSION
        crate-fetch: Switch to version contained in bitbake
        build-appliance-image: Update to master head revision
        build-appliance-image: Update to master head revision

  Robert Joslyn (4):
        ref-manual: Fix module_conf typo
        curl: Update to 7.81.0
        curl: Rework openssl and random PACKAGECONFIGs
        maintainers.inc: Add myself as maintainer for curl

  Robert P. J. Day (1):
        ref-manual: generalize definition of "container layer"

  Robert Yang (3):
        sanity.bbclass: Update required gcc version to v7.5
        bitbake: lib/pyinotify.py: Remove deprecated module asyncore
        bitbake: data_smart.py: Skip old override syntax checking for anonymous functions

  Ross Burton (61):
        openssl: fix builds on ARMv8 targets without Aarch64
        python3: silence DeprecationWarnings in python3-config
        meson: set objcopy in the cross and native toolchain files
        ref-manual: improve documentation for SDKMACHINE
        kickstart: update busybox note regarding PARTUUID
        scons: support out-of-tree builds
        vim: fix CVE-2021-3796, CVE-2021-3872, and CVE-2021-3875
        vim: add patch number to CVE-2021-3778 patch
        meta: use ln -rs instead of lnr
        insane: remove unrecognised option check for Meson
        dtc: merge .bb/.inc
        dtc: use Meson to build
        dtc: add PACKAGECONFIGs for tools and yaml
        dtc: fix mingw build
        ncurses: poll() works, but only on Linux
        vim: fix CVE-2021-3927 and CVE-2021-3928
        scripts/lnr: remove
        gmp: fix CVE-2021-43618
        oe/utils: allow naming threads in ThreadedPool
        sstate: explicitly name the checkhashes thread pool
        oe/utils: by default cap cpu_count() to 64 cores
        vim: fix CVE-2021-3968 and CVE-2021-3973
        vim: set PACKAGECONFIG idiomatically
        openssl: fix EVP_PKEY_CTX_get_rsa_pss_saltlen() not returning a value
        recipetool: handle GitLab URLs like we do GitHub
        recipetool: extend curl detection when creating recipes
        glew: update patch status
        libx11: update patch status
        libxkbcommon: remove obsolete util-macros dependency
        libxkbcommon: allow building of API documentation
        xkbcommon: split xkbcli into a separate package
        libxkbcommon: split libraries into separate packages
        xkbcommon: add option for xkbregistry
        tcf-agent: cleanup patches
        vim: upgrade to 8.2 patch 3752
        runqemu: check the qemu PID has been set before kill()ing it
        gstreamer1.0-plugins-bad: clean up X11 dependencies
        libtool: don't prefix the installed binary
        binutils: don't expect libtool to be host-prefixed
        pkgconfig: remove obsolete support for renamed libtool
        gtk+3: remove obsolete support for renamed libtool
        db: remove obsolete support for renamed libtool
        freetype: remove obsolete support for renamed libtool
        apr: remove obsolete support for renamed libtool
        qemu: remove obsolete support for renamed libtool
        subversion: remove obsolete support for renamed libtool
        apmd: remove obsolete support for renamed libtool
        libical: upgrade to 3.0.12
        python3: backport a fix so the test suite passes with OpenSSL 3.0.1
        openssl: upgrade to 3.0.1
        kmod: remove obsolete ac_pwd manipulation
        kmod: merge target/native recipes
        kmod: expand compression PACKAGECONFIGs
        gawk: remove load-sensitive tests
        linux-yocto: add libmpc-native to DEPENDS
        xserver-xorg: whitelist two CVEs
        systemtap: fix vsprintf errors
        oeqa/runtime/stap: rewrite test
        vim: update to include latest CVE fixes
        lighttpd: backport a fix for CVE-2022-22707
        oeqa/runtime/stap: increase buffer size

  S. Lockwood-Childs (1):
        cups: fix typo in flags to disable avahi

  Samuli Piippo (1):
        rpm: remove tmp folder created during install

  Saul Wold (7):
        create_spdx: ensure is_work_shared() is unique
        create-spdx: Protect against None from LICENSE_PATH
        kernel: add -dbg package
        perl: Enable threading
        kernel.bbclass: use common strip()
        package: Add support for kernel stripping
        create-spdx: Add kernel work-shared source

  Schmidt, Adriaan (1):
        wic: support rootdev identified by partition label

  Stefan Herbrechtsmeier (17):
        bitbake: fetch2: npmsw: Add support for duplicate dependencies without url
        bitbake: fetch2: npmsw: Add support for github prefix in npm shrinkwrap version
        bitbake: fetch2: Unify tar command in unpack
        bitbake: fetch2: Add striplevel support to unpack
        bitbake: bitbake-user-manual: Add striplevel unpack parameter
        bitbake: test/fetch: Add striplevel unpack parameter test
        recipetool: Set master branch only as fallback
        selftest/devtool: Check branch in git fetch
        selftest/recipetool: Split tests into separate test classes
        selftest: devtool: Separate common functions and devtool sstate setup into two classes
        selftest/recipetool: Add tests for branch parameter and srcbranch option
        bitbake: fetch: npm: Quote destdir in run chmod command
        bitbake: fetch: npm: Use temporary file for empty user config
        recipetool: Sort output of guess_license function to be deterministic
        recipetool: Separate licenses with & operator
        selftest: recipetool: Add test for split_pkg_licenses function
        selftest: recipetool: Add test for handle_license_vars function

  Steve Sakoman (4):
        ref-system-requirements.rst: Add Debian 11 to list of supported distros
        ref-system-requirements.rst: Add Fedora 33 and 34 to list of supported distros
        ref-system-requirements.rst: Add openSUSE Leap 15.2 to list of supported distros
        cve-extra-exclusions: add db CVEs to exclusion list

  Sundeep KOKKONDA (2):
        glibc : Fix CVE-2022-23218
        glibc : Fix CVE-2022-23219

  Teoh Jay Shen (2):
        linux-yocto/5.10: update genericx86* machines to v5.10.87
        linux-yocto/5.14: update genericx86* machines to v5.14.21

  Thomas Perrot (1):
        uboot-sign: fix the concatenation when multiple U-BOOT configurations are specified

  Tim Orling (29):
        scripts/buildhistory-diff: drop use of distutils
        maintainers.inc: update email address
        poky.yaml: centos-7 python36-pip -> python3-pip
        classes/distutils-*: add warning of deprecation
        setuptools3: refactor for no distutils bbclasses
        dnf: inherit setuptools3-base instead of distutils
        libdnf: inherit setuptools3-base not distutils
        python3-cython: DISTUTILS_* -> SETUPTOOLS_*
        python3-dbus: inherit setuptools3-base not distuils
        gpgme: inherit setuptools-base not distuils
        python3-pip: inherit setuptools3 not distuils3
        systemtap: use setuptools-base not distutils
        libcomps: inherit setuptools3-base not distutils
        createrepo-c: inherit setuptools3-base not distutils
        librepo: inherit setuptools3-base not distutils
        btrfs-tools: use setuptools3-base not distutils
        bind: inherit setuptools3-base instead of distutils
        python3-pygobject: setuptools instead of distuils
        python3-setuptools: do not depend on distutils
        gstreamer1.0-python: inherit setuptools3-base
        recipetool/create_buildsys_python.py: less distutils
        waf.bbclass: drop usage of distutils
        dnf: drop python3-distutils dependency
        python3native.bbclass: distutils -> sysconfig
        rootfs_rpm.bbclass: distutils -> sysconfig module
        python3-hypothesis: upgrade 6.34.1 -> 6.35.0
        ref-manual/variables.rst: add SETUPTOOLS_SETUP_PATH
        ref-manual/variables.rst: add SETUPTOOLS_*_ARGS
        ref-manual/classes.rst: add setuptools3-base

  Tom Hochstein (3):
        wayland: Fix wayland-tools packaging
        nativesdk-packagegroup-sdk-host.bb: Update host tools for wayland
        bitbake.conf: Use wayland distro feature for native builds

  Ulrich Ölmann (1):
        gstreamer1.0-plugins-base: add support for graphene

  Valerii Chernous (1):
        elf: Discard input .note.gnu.build-id sections

  Vivien Didelot (2):
        beaglebone-yocto: prefer u-boot
        beaglebone-yocto: move kernel and dtb to packagegroup-core-boot

  Vyacheslav Yurkov (17):
        overlayfs: all overlays unit
        oeqa/selftest: refactor common functions
        overlayfs: meta-selftest recipe fix
        oeqa/selftest: extend overlayfs test
        overlayfs: add debug information
        ref-manual: update overlayfs class
        rootfs-postcommands: update systemd_create_users
        files: add overlayfs-etc-preinit.sh.in
        wic: image for overlayfs-etc tests
        overlayfs-etc: mount etc as overlayfs
        image: add overlayfs-etc image feature
        oeqa/selftest: overlayfs helper function
        oeqa/selftest: unit tests for overlayfs-etc
        overlayfs: update notes on /etc
        overlayfs: move templates to files directory
        ref-manual: add overlayfs-etc class
        ref-manual: document overlayfs-etc image feature

  Yi Zhao (6):
        bind: remove -r option from rndc-confgen in initscript
        rpcbind: install rpcbind.conf
        python3-numpy: move recipe to python directory
        python3-numpy: add python3-json to RDEPENDS
        oeqa: fix warnings for append operators combined with +=
        meta-skeleton: fix warnings for append operators combined with +=

  Yongxin Liu (1):
        grub2: fix CVE-2021-3981

  Zev Weiss (1):
        u-boot: Split do_configure logic into separate file

  pgowda (2):
        gcc: Fix CVE-2021-42574
        binutils: CVE-2021-42574

  wangmy (67):
        bind: upgrade 9.16.21 -> 9.16.22
        glib-2.0: upgrade 2.70.0 -> 2.70.1
        python3-dbusmock: upgrade 0.24.0 -> 0.24.1
        python3-docutils: upgrade 0.17.1 -> 0.18
        btrfs-tools: upgrade 5.14.2 -> 5.15
        diffoscope: upgrade 189 -> 190
        ell: upgrade 0.44 -> 0.45
        harfbuzz: upgrade 3.0.0 -> 3.1.1
        iproute2: upgrade 5.14.0 -> 5.15.0
        iso-codes: upgrade 4.7.0 -> 4.8.0
        iw: upgrade 5.9 -> 5.16
        libpcre2: upgrade 10.37 -> 10.39
        msmtp: upgrade 1.8.18 -> 1.8.19
        libevdev: upgrade 1.11.0 -> 1.12.0
        libdrm: upgrade 2.4.107 -> 2.4.108
        libhandy: upgrade 1.4.0 -> 1.5.0
        python3-importlib-metadata: upgrade 4.8.1 -> 4.8.2
        python3-jinja2: upgrade 3.0.2 -> 3.0.3
        python3-more-itertools: upgrade 8.10.0 -> 8.11.0
        libtasn1: upgrade 4.17.0 -> 4.18.0
        ethtool: upgrade 5.14 -> 5.15
        stress-ng: upgrade 0.13.06 -> 0.13.07
        systemtap: upgrade 4.5 -> 4.6
        python3-scons: upgrade 4.2.0 -> 4.3.0
        libcap: upgrade 2.60 -> 2.61
        mesa: upgrade 21.2.5 -> 21.3.0
        python3-mako: upgrade 1.1.5 -> 1.1.6
        libjpeg-turbo: upgrade 2.1.1 -> 2.1.2
        libdrm: upgrade 2.4.108 -> 2.4.109
        libsoup-2.4: upgrade 2.74.1 -> 2.74.2
        libunwind: upgrade 1.5.0 -> 1.6.0
        libexif: upgrade 0.6.23 -> 0.6.24
        mtools: upgrade 4.0.35 -> 4.0.36
        patchelf: upgrade 0.13 -> 0.14.1
        sqlite3: upgrade 3.36.0 -> 3.37.0
        sysklogd: upgrade 2.2.3 -> 2.3.0
        ovmf: upgrade 202108 -> 202111
        python3-docutils: upgrade 0.18 -> 0.18.1
        python3-libarchive-c: upgrade 3.1 -> 3.2
        sysstat: upgrade 12.4.3 -> 12.4.4
        vala: upgrade 0.54.3 -> 0.54.4
        xauth: upgrade 1.1 -> 1.1.1
        mpg123: upgrade 1.29.2 -> 1.29.3
        python3-cython: upgrade 0.29.24 -> 0.29.25
        libcap: upgrade 2.61 -> 2.62
        linux-firmware: upgrade 20211027 -> 20211216
        python3-importlib-metadata: upgrade 4.8.2 -> 4.9.0
        sysvinit: upgrade 3.00 -> 3.01
        python3-dbusmock: upgrade 0.24.1 -> 0.25.0
        python3-numpy: upgrade 1.21.4 -> 1.21.5
        expat: upgrade 2.4.1 -> 2.4.2
        gnupg: upgrade 2.3.3 -> 2.3.4
        ell: upgrade 0.46 -> 0.47
        bash: upgrade 5.1.8 -> 5.1.16
        createrepo-c: upgrade 0.17.7 -> 0.18.0
        bluez5: upgrade 5.62 -> 5.63
        iso-codes: upgrade 4.8.0 -> 4.9.0
        less: upgrade 598 -> 600
        libpipeline: upgrade 1.5.4 -> 1.5.5
        diffoscope: upgrade 196 -> 199
        libsdl2: upgrade 2.0.18 -> 2.0.20
        hdparm: upgrade 9.62 -> 9.63
        mesa: upgrade 21.3.3 -> 21.3.4
        python3-git: upgrade 3.1.24 -> 3.1.26
        python3-numpy: upgrade 1.22.0 -> 1.22.1
        strace: upgrade 5.15 -> 5.16
        btrfs-tools: upgrade 5.15.1 -> 5.16

  zhengruoqin (9):
        opkg-utils: upgrade 0.4.5 -> 0.5.0
        opkg: upgrade 0.4.5 -> 0.5.0
        glib-networking: upgrade 2.70.0 -> 2.70.1
        stress-ng: upgrade 0.13.07 -> 0.13.08
        vte: upgrade 0.66.0 -> 0.66.2
        rt-tests: upgrade 2.2 -> 2.3
        shadow: upgrade 4.9 -> 4.10
        libmicrohttpd: upgrade 0.9.73 -> 0.9.75
        gtk+3: upgrade 3.24.30 -> 3.24.31

Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
Change-Id: I11c88e9f9999d629de5a0ecdb44ccc1003b02376
diff --git a/poky/bitbake/lib/bb/build.py b/poky/bitbake/lib/bb/build.py
index d6418e4..65b7fc0 100644
--- a/poky/bitbake/lib/bb/build.py
+++ b/poky/bitbake/lib/bb/build.py
@@ -714,19 +714,23 @@
                 logger.debug2("Zero size logfn %s, removing", logfn)
                 bb.utils.remove(logfn)
                 bb.utils.remove(loglink)
-    except bb.BBHandledException:
-        event.fire(TaskFailed(task, fn, logfn, localdata, True), localdata)
-        return 1
     except (Exception, SystemExit) as exc:
+        handled = False
+        if isinstance(exc, bb.BBHandledException):
+            handled = True
+
         if quieterr:
+            if not handled:
+                logger.warning(repr(exc))
             event.fire(TaskFailedSilent(task, fn, logfn, localdata), localdata)
         else:
             errprinted = errchk.triggered
             # If the output is already on stdout, we've printed the information in the
             # logs once already so don't duplicate
-            if verboseStdoutLogging:
+            if verboseStdoutLogging or handled:
                 errprinted = True
-            logger.error(repr(exc))
+            if not handled:
+                logger.error(repr(exc))
             event.fire(TaskFailed(task, fn, logfn, localdata, errprinted), localdata)
         return 1
 
diff --git a/poky/bitbake/lib/bb/cache.py b/poky/bitbake/lib/bb/cache.py
index 4e08c10..fcb1579 100644
--- a/poky/bitbake/lib/bb/cache.py
+++ b/poky/bitbake/lib/bb/cache.py
@@ -284,36 +284,15 @@
     Parse a recipe
     """
 
-    chdir_back = False
-
     bb_data.setVar("__BBMULTICONFIG", mc)
 
-    # expand tmpdir to include this topdir
-    bb_data.setVar('TMPDIR', bb_data.getVar('TMPDIR') or "")
     bbfile_loc = os.path.abspath(os.path.dirname(bbfile))
-    oldpath = os.path.abspath(os.getcwd())
     bb.parse.cached_mtime_noerror(bbfile_loc)
 
-    # The ConfHandler first looks if there is a TOPDIR and if not
-    # then it would call getcwd().
-    # Previously, we chdir()ed to bbfile_loc, called the handler
-    # and finally chdir()ed back, a couple of thousand times. We now
-    # just fill in TOPDIR to point to bbfile_loc if there is no TOPDIR yet.
-    if not bb_data.getVar('TOPDIR', False):
-        chdir_back = True
-        bb_data.setVar('TOPDIR', bbfile_loc)
-    try:
-        if appends:
-            bb_data.setVar('__BBAPPEND', " ".join(appends))
-        bb_data = bb.parse.handle(bbfile, bb_data)
-        if chdir_back:
-            os.chdir(oldpath)
-        return bb_data
-    except:
-        if chdir_back:
-            os.chdir(oldpath)
-        raise
-
+    if appends:
+        bb_data.setVar('__BBAPPEND', " ".join(appends))
+    bb_data = bb.parse.handle(bbfile, bb_data)
+    return bb_data
 
 
 class NoCache(object):
diff --git a/poky/bitbake/lib/bb/checksum.py b/poky/bitbake/lib/bb/checksum.py
index 1d50a26..fb8a77f 100644
--- a/poky/bitbake/lib/bb/checksum.py
+++ b/poky/bitbake/lib/bb/checksum.py
@@ -50,6 +50,7 @@
         MultiProcessCache.__init__(self)
 
     def get_checksum(self, f):
+        f = os.path.normpath(f)
         entry = self.cachedata[0].get(f)
         cmtime = self.mtime_cache.cached_mtime(f)
         if entry:
@@ -84,15 +85,24 @@
                 return None
             return checksum
 
+        #
+        # Changing the format of file-checksums is problematic as both OE and Bitbake have
+        # knowledge of them. We need to encode a new piece of data, the portion of the path
+        # we care about from a checksum perspective. This means that files that change subdirectory
+        # are tracked by the task hashes. To do this, we do something horrible and put a "/./" into
+        # the path. The filesystem handles it but it gives us a marker to know which subsection
+        # of the path to cache.
+        #
         def checksum_dir(pth):
             # Handle directories recursively
             if pth == "/":
                 bb.fatal("Refusing to checksum /")
+            pth = pth.rstrip("/")
             dirchecksums = []
             for root, dirs, files in os.walk(pth, topdown=True):
                 [dirs.remove(d) for d in list(dirs) if d in localdirsexclude]
                 for name in files:
-                    fullpth = os.path.join(root, name)
+                    fullpth = os.path.join(root, name).replace(pth, os.path.join(pth, "."))
                     checksum = checksum_file(fullpth)
                     if checksum:
                         dirchecksums.append((fullpth, checksum))
diff --git a/poky/bitbake/lib/bb/cooker.py b/poky/bitbake/lib/bb/cooker.py
index af794b4..08e45e7 100644
--- a/poky/bitbake/lib/bb/cooker.py
+++ b/poky/bitbake/lib/bb/cooker.py
@@ -388,12 +388,22 @@
             # Create a new hash server bound to a unix domain socket
             if not self.hashserv:
                 dbfile = (self.data.getVar("PERSISTENT_DIR") or self.data.getVar("CACHE")) + "/hashserv.db"
+                upstream = self.data.getVar("BB_HASHSERVE_UPSTREAM") or None
+                if upstream:
+                    import socket
+                    try:
+                        sock = socket.create_connection(upstream.split(":"), 5)
+                        sock.close()
+                    except socket.error as e:
+                        bb.warn("BB_HASHSERVE_UPSTREAM is not valid, unable to connect hash equivalence server at '%s': %s" 
+                                 % (upstream, repr(e)))
+
                 self.hashservaddr = "unix://%s/hashserve.sock" % self.data.getVar("TOPDIR")
                 self.hashserv = hashserv.create_server(
                     self.hashservaddr,
                     dbfile,
                     sync=False,
-                    upstream=self.data.getVar("BB_HASHSERVE_UPSTREAM") or None,
+                    upstream=upstream,
                 )
                 self.hashserv.serve_as_process()
             self.data.setVar("BB_HASHSERVE", self.hashservaddr)
@@ -804,7 +814,9 @@
             for dep in rq.rqdata.runtaskentries[tid].depends:
                 (depmc, depfn, _, deptaskfn) = bb.runqueue.split_tid_mcfn(dep)
                 deppn = self.recipecaches[depmc].pkg_fn[deptaskfn]
-                depend_tree["tdepends"][dotname].append("%s.%s" % (deppn, bb.runqueue.taskname_from_tid(dep)))
+                if depmc:
+                    depmc = "mc:" + depmc + ":"
+                depend_tree["tdepends"][dotname].append("%s%s.%s" % (depmc, deppn, bb.runqueue.taskname_from_tid(dep)))
             if taskfn not in seen_fns:
                 seen_fns.append(taskfn)
                 packages = []
@@ -1656,7 +1668,7 @@
         # Return a copy, don't modify the original
         pkgs_to_build = pkgs_to_build[:]
 
-        if len(pkgs_to_build) == 0:
+        if not pkgs_to_build:
             raise NothingToBuild
 
         ignore = (self.data.getVar("ASSUME_PROVIDED") or "").split()
@@ -1795,10 +1807,10 @@
         files.sort( key=lambda fileitem: self.calc_bbfile_priority(fileitem)[0] )
         config.setVar("BBFILES_PRIORITIZED", " ".join(files))
 
-        if not len(files):
+        if not files:
             files = self.get_bbfiles()
 
-        if not len(files):
+        if not files:
             collectlog.error("no recipe files to build, check your BBPATH and BBFILES?")
             bb.event.fire(CookerExit(), eventdata)
 
@@ -2208,21 +2220,33 @@
             yield not cached, mc, infos
 
     def parse_generator(self):
-        while True:
+        empty = False
+        while self.processes or not empty:
+            for process in self.processes.copy():
+                if not process.is_alive():
+                    process.join()
+                    self.processes.remove(process)
+
             if self.parsed >= self.toparse:
                 break
 
             try:
                 result = self.result_queue.get(timeout=0.25)
             except queue.Empty:
+                empty = True
                 pass
             else:
+                empty = False
                 value = result[1]
                 if isinstance(value, BaseException):
                     raise value
                 else:
                     yield result
 
+        if not (self.parsed >= self.toparse):
+            raise bb.parse.ParseError("Not all recipes parsed, parser thread killed/died? Exiting.", None)
+
+
     def parse_next(self):
         result = []
         parsed = None
diff --git a/poky/bitbake/lib/bb/cookerdata.py b/poky/bitbake/lib/bb/cookerdata.py
index ba657c0..397b43d 100644
--- a/poky/bitbake/lib/bb/cookerdata.py
+++ b/poky/bitbake/lib/bb/cookerdata.py
@@ -86,7 +86,7 @@
                 action['msg'] = "Only one target can be used with the --environment option."
             elif self.options.buildfile and len(self.options.pkgs_to_build) > 0:
                 action['msg'] = "No target should be used with the --environment and --buildfile options."
-            elif len(self.options.pkgs_to_build) > 0:
+            elif self.options.pkgs_to_build:
                 action['action'] = ["showEnvironmentTarget", self.options.pkgs_to_build]
             else:
                 action['action'] = ["showEnvironment", self.options.buildfile]
@@ -210,7 +210,7 @@
 
 #
 # We search for a conf/bblayers.conf under an entry in BBPATH or in cwd working
-# up to /. If that fails, we search for a conf/bitbake.conf in BBPATH.
+# up to /. If that fails, bitbake would fall back to cwd.
 #
 
 def findTopdir():
@@ -223,11 +223,8 @@
     layerconf = findConfigFile("bblayers.conf", d)
     if layerconf:
         return os.path.dirname(os.path.dirname(layerconf))
-    if bbpath:
-        bitbakeconf = bb.utils.which(bbpath, "conf/bitbake.conf")
-        if bitbakeconf:
-            return os.path.dirname(os.path.dirname(bitbakeconf))
-    return None
+
+    return os.path.abspath(os.getcwd())
 
 class CookerDataBuilder(object):
 
@@ -417,6 +414,9 @@
                         " invoked bitbake from the wrong directory?")
             raise SystemExit(msg)
 
+        if not data.getVar("TOPDIR"):
+            data.setVar("TOPDIR", os.path.abspath(os.getcwd()))
+
         data = parse_config_file(os.path.join("conf", "bitbake.conf"), data)
 
         # Parse files for loading *after* bitbake.conf and any includes
diff --git a/poky/bitbake/lib/bb/daemonize.py b/poky/bitbake/lib/bb/daemonize.py
index c187fcf..40fabd0 100644
--- a/poky/bitbake/lib/bb/daemonize.py
+++ b/poky/bitbake/lib/bb/daemonize.py
@@ -74,26 +74,26 @@
     with open('/dev/null', 'r') as si:
         os.dup2(si.fileno(), sys.stdin.fileno())
 
-    try:
-        so = open(logfile, 'a+')
-        os.dup2(so.fileno(), sys.stdout.fileno())
-        os.dup2(so.fileno(), sys.stderr.fileno())
-    except io.UnsupportedOperation:
-        sys.stdout = open(logfile, 'a+')
+    with open(logfile, 'a+') as so:
+        try:
+            os.dup2(so.fileno(), sys.stdout.fileno())
+            os.dup2(so.fileno(), sys.stderr.fileno())
+        except io.UnsupportedOperation:
+            sys.stdout = so
 
-    # Have stdout and stderr be the same so log output matches chronologically
-    # and there aren't two seperate buffers
-    sys.stderr = sys.stdout
+        # Have stdout and stderr be the same so log output matches chronologically
+        # and there aren't two seperate buffers
+        sys.stderr = sys.stdout
 
-    try:
-        function()
-    except Exception as e:
-        traceback.print_exc()
-    finally:
-        bb.event.print_ui_queue()
-        # os._exit() doesn't flush open files like os.exit() does. Manually flush
-        # stdout and stderr so that any logging output will be seen, particularly
-        # exception tracebacks.
-        sys.stdout.flush()
-        sys.stderr.flush()
-        os._exit(0)
+        try:
+            function()
+        except Exception as e:
+            traceback.print_exc()
+        finally:
+            bb.event.print_ui_queue()
+            # os._exit() doesn't flush open files like os.exit() does. Manually flush
+            # stdout and stderr so that any logging output will be seen, particularly
+            # exception tracebacks.
+            sys.stdout.flush()
+            sys.stderr.flush()
+            os._exit(0)
diff --git a/poky/bitbake/lib/bb/data.py b/poky/bitbake/lib/bb/data.py
index 9d18b1e..ee5557a 100644
--- a/poky/bitbake/lib/bb/data.py
+++ b/poky/bitbake/lib/bb/data.py
@@ -285,21 +285,19 @@
         vardeps = varflags.get("vardeps")
 
         def handle_contains(value, contains, d):
-            newvalue = ""
+            newvalue = []
+            if value:
+                newvalue.append(str(value))
             for k in sorted(contains):
                 l = (d.getVar(k) or "").split()
                 for item in sorted(contains[k]):
                     for word in item.split():
                         if not word in l:
-                            newvalue += "\n%s{%s} = Unset" % (k, item)
+                            newvalue.append("\n%s{%s} = Unset" % (k, item))
                             break
                     else:
-                        newvalue += "\n%s{%s} = Set" % (k, item)
-            if not newvalue:
-                return value
-            if not value:
-                return newvalue
-            return value + newvalue
+                        newvalue.append("\n%s{%s} = Set" % (k, item))
+            return "".join(newvalue)
 
         def handle_remove(value, deps, removes, d):
             for r in sorted(removes):
@@ -406,7 +404,9 @@
 
         if data is None:
             bb.error("Task %s from %s seems to be empty?!" % (task, fn))
-            data = ''
+            data = []
+        else:
+            data = [data]
 
         gendeps[task] -= whitelist
         newdeps = gendeps[task]
@@ -424,12 +424,12 @@
 
         alldeps = sorted(seen)
         for dep in alldeps:
-            data = data + dep
+            data.append(dep)
             var = lookupcache[dep]
             if var is not None:
-                data = data + str(var)
+                data.append(str(var))
         k = fn + ":" + task
-        basehash[k] = hashlib.sha256(data.encode("utf-8")).hexdigest()
+        basehash[k] = hashlib.sha256("".join(data).encode("utf-8")).hexdigest()
         taskdeps[task] = alldeps
 
     return taskdeps, basehash
diff --git a/poky/bitbake/lib/bb/data_smart.py b/poky/bitbake/lib/bb/data_smart.py
index 8d235da..543372d 100644
--- a/poky/bitbake/lib/bb/data_smart.py
+++ b/poky/bitbake/lib/bb/data_smart.py
@@ -492,7 +492,7 @@
     def setVar(self, var, value, **loginfo):
         #print("var=" + str(var) + "  val=" + str(value))
 
-        if "_append" in var or "_prepend" in var or "_remove" in var:
+        if not var.startswith("__anon_") and ("_append" in var or "_prepend" in var or "_remove" in var):
             info = "%s" % var
             if "filename" in loginfo:
                 info += " file: %s" % loginfo[filename]
@@ -810,7 +810,7 @@
                     expanded_removes[r] = self.expand(r).split()
 
                 parser.removes = set()
-                val = ""
+                val = []
                 for v in __whitespace_split__.split(parser.value):
                     skip = False
                     for r in removes:
@@ -819,8 +819,8 @@
                             skip = True
                     if skip:
                         continue
-                    val = val + v
-                parser.value = val
+                    val.append(v)
+                parser.value = "".join(val)
                 if expand:
                     value = parser.value
 
diff --git a/poky/bitbake/lib/bb/fetch2/README b/poky/bitbake/lib/bb/fetch2/README
new file mode 100644
index 0000000..67b787e
--- /dev/null
+++ b/poky/bitbake/lib/bb/fetch2/README
@@ -0,0 +1,57 @@
+There are expectations of users of the fetcher code. This file attempts to document
+some of the constraints that are present. Some are obvious, some are less so. It is
+documented in the context of how OE uses it but the API calls are generic.
+
+a) network access for sources is only expected to happen in the do_fetch task.
+   This is not enforced or tested but is required so that we can:
+
+   i) audit the sources used (i.e. for license/manifest reasons) 
+   ii) support offline builds with a suitable cache
+   iii) allow work to continue even with downtime upstream
+   iv) allow for changes upstream in incompatible ways
+   v) allow rebuilding of the software in X years time
+
+b) network access is not expected in do_unpack task.
+
+c) you can take DL_DIR and use it as a mirror for offline builds.
+
+d) access to the network is only made when explicitly configured in recipes
+   (e.g. use of AUTOREV, or use of git tags which change revision).
+
+e) fetcher output is deterministic (i.e. if you fetch configuration XXX now it 
+   will match in future exactly in a clean build with a new DL_DIR).
+   One specific pain point example are git tags. They can be replaced and change
+   so the git fetcher has to resolve them with the network. We use git revisions
+   where possible to avoid this and ensure determinism.
+
+f) network access is expected to work with the standard linux proxy variables
+   so that access behind firewalls works (the fetcher sets these in the 
+   environment but only in the do_fetch tasks).
+
+g) access during parsing has to be minimal, a "git ls-remote" for an AUTOREV 
+   git recipe might be ok but you can't expect to checkout a git tree.
+
+h) we need to provide revision information during parsing such that a version
+   for the recipe can be constructed.
+
+i) versions are expected to be able to increase in a way which sorts allowing 
+   package feeds to operate (see PR server required for git revisions to sort).
+
+j) API to query for possible version upgrades of a url is highly desireable to 
+   allow our automated upgrage code to function (it is implied this does always 
+   have network access).
+
+k) Where fixes or changes to behaviour in the fetcher are made, we ask that 
+   test cases are added (run with "bitbake-selftest bb.tests.fetch"). We do 
+   have fairly extensive test coverage of the fetcher as it is the only way
+   to track all of its corner cases, it still doesn't give entire coverage 
+   though sadly.
+   
+l) If using tools during parse time, they will have to be in ASSUME_PROVIDED
+   in OE's context as we can't build git-native, then parse a recipe and use
+   git ls-remote.
+
+Not all fetchers support all features, autorev is optional and doesn't make
+sense for some. Upgrade detection means different things in different contexts
+too.
+
diff --git a/poky/bitbake/lib/bb/fetch2/__init__.py b/poky/bitbake/lib/bb/fetch2/__init__.py
index 666cc13..d371741 100644
--- a/poky/bitbake/lib/bb/fetch2/__init__.py
+++ b/poky/bitbake/lib/bb/fetch2/__init__.py
@@ -402,24 +402,24 @@
 
     if not type:
         raise MissingParameterError('type', "encoded from the data %s" % str(decoded))
-    url = '%s://' % type
+    url = ['%s://' % type]
     if user and type != "file":
-        url += "%s" % user
+        url.append("%s" % user)
         if pswd:
-            url += ":%s" % pswd
-        url += "@"
+            url.append(":%s" % pswd)
+        url.append("@")
     if host and type != "file":
-        url += "%s" % host
+        url.append("%s" % host)
     if path:
         # Standardise path to ensure comparisons work
         while '//' in path:
             path = path.replace("//", "/")
-        url += "%s" % urllib.parse.quote(path)
+        url.append("%s" % urllib.parse.quote(path))
     if p:
         for parm in p:
-            url += ";%s=%s" % (parm, p[parm])
+            url.append(";%s=%s" % (parm, p[parm]))
 
-    return url
+    return "".join(url)
 
 def uri_replace(ud, uri_find, uri_replace, replacements, d, mirrortarball=None):
     if not ud.url or not uri_find or not uri_replace:
@@ -430,6 +430,7 @@
     uri_replace_decoded = list(decodeurl(uri_replace))
     logger.debug2("For url %s comparing %s to %s" % (uri_decoded, uri_find_decoded, uri_replace_decoded))
     result_decoded = ['', '', '', '', '', {}]
+    # 0 - type, 1 - host, 2 - path, 3 - user,  4- pswd, 5 - params
     for loc, i in enumerate(uri_find_decoded):
         result_decoded[loc] = uri_decoded[loc]
         regexp = i
@@ -449,6 +450,9 @@
                 for l in replacements:
                     uri_replace_decoded[loc][k] = uri_replace_decoded[loc][k].replace(l, replacements[l])
                 result_decoded[loc][k] = uri_replace_decoded[loc][k]
+        elif (loc == 3 or loc == 4) and uri_replace_decoded[loc]:
+            # User/password in the replacement is just a straight replacement
+            result_decoded[loc] = uri_replace_decoded[loc]
         elif (re.match(regexp, uri_decoded[loc])):
             if not uri_replace_decoded[loc]:
                 result_decoded[loc] = ""
@@ -466,9 +470,13 @@
                     # Kill parameters, they make no sense for mirror tarballs
                     uri_decoded[5] = {}
                 elif ud.localpath and ud.method.supports_checksum(ud):
-                    basename = os.path.basename(uri_decoded[loc])
-                if basename and not result_decoded[loc].endswith(basename):
-                    result_decoded[loc] = os.path.join(result_decoded[loc], basename)
+                    basename = os.path.basename(ud.localpath)
+                if basename:
+                    uri_basename = os.path.basename(uri_decoded[loc])
+                    if uri_basename and basename != uri_basename and result_decoded[loc].endswith(uri_basename):
+                        result_decoded[loc] = result_decoded[loc].replace(uri_basename, basename)
+                    elif not result_decoded[loc].endswith(basename):
+                        result_decoded[loc] = os.path.join(result_decoded[loc], basename)
         else:
             return None
     result = encodeurl(result_decoded)
@@ -766,7 +774,7 @@
         if urldata[u].method.supports_srcrev():
             scms.append(u)
 
-    if len(scms) == 0:
+    if not scms:
         raise FetchError("SRCREV was used yet no valid SCM was found in SRC_URI")
 
     if len(scms) == 1 and len(urldata[scms[0]].names) == 1:
@@ -1450,30 +1458,33 @@
         cmd = None
 
         if unpack:
+            tar_cmd = 'tar --extract --no-same-owner'
+            if 'striplevel' in urldata.parm:
+                tar_cmd += ' --strip-components=%s' %  urldata.parm['striplevel']
             if file.endswith('.tar'):
-                cmd = 'tar x --no-same-owner -f %s' % file
+                cmd = '%s -f %s' % (tar_cmd, file)
             elif file.endswith('.tgz') or file.endswith('.tar.gz') or file.endswith('.tar.Z'):
-                cmd = 'tar xz --no-same-owner -f %s' % file
+                cmd = '%s -z -f %s' % (tar_cmd, file)
             elif file.endswith('.tbz') or file.endswith('.tbz2') or file.endswith('.tar.bz2'):
-                cmd = 'bzip2 -dc %s | tar x --no-same-owner -f -' % file
+                cmd = 'bzip2 -dc %s | %s -f -' % (file, tar_cmd)
             elif file.endswith('.gz') or file.endswith('.Z') or file.endswith('.z'):
                 cmd = 'gzip -dc %s > %s' % (file, efile)
             elif file.endswith('.bz2'):
                 cmd = 'bzip2 -dc %s > %s' % (file, efile)
             elif file.endswith('.txz') or file.endswith('.tar.xz'):
-                cmd = 'xz -dc %s | tar x --no-same-owner -f -' % file
+                cmd = 'xz -dc %s | %s -f -' % (file, tar_cmd)
             elif file.endswith('.xz'):
                 cmd = 'xz -dc %s > %s' % (file, efile)
             elif file.endswith('.tar.lz'):
-                cmd = 'lzip -dc %s | tar x --no-same-owner -f -' % file
+                cmd = 'lzip -dc %s | %s -f -' % (file, tar_cmd)
             elif file.endswith('.lz'):
                 cmd = 'lzip -dc %s > %s' % (file, efile)
             elif file.endswith('.tar.7z'):
-                cmd = '7z x -so %s | tar x --no-same-owner -f -' % file
+                cmd = '7z x -so %s | %s -f -' % (file, tar_cmd)
             elif file.endswith('.7z'):
                 cmd = '7za x -y %s 1>/dev/null' % file
             elif file.endswith('.tzst') or file.endswith('.tar.zst'):
-                cmd = 'zstd --decompress --stdout %s | tar x --no-same-owner -f -' % file
+                cmd = 'zstd --decompress --stdout %s | %s -f -' % (file, tar_cmd)
             elif file.endswith('.zst'):
                 cmd = 'zstd --decompress --stdout %s > %s' % (file, efile)
             elif file.endswith('.zip') or file.endswith('.jar'):
@@ -1506,7 +1517,7 @@
                         raise UnpackError("Unable to unpack deb/ipk package - does not contain data.tar.* file", urldata.url)
                 else:
                     raise UnpackError("Unable to unpack deb/ipk package - could not list contents", urldata.url)
-                cmd = 'ar x %s %s && tar --no-same-owner -xpf %s && rm %s' % (file, datafile, datafile, datafile)
+                cmd = 'ar x %s %s && %s -p -f %s && rm %s' % (file, datafile, tar_cmd, datafile, datafile)
 
         # If 'subdir' param exists, create a dir and use it as destination for unpack cmd
         if 'subdir' in urldata.parm:
@@ -1632,7 +1643,7 @@
         if localonly and cache:
             raise Exception("bb.fetch2.Fetch.__init__: cannot set cache and localonly at same time")
 
-        if len(urls) == 0:
+        if not urls:
             urls = d.getVar("SRC_URI").split()
         self.urls = urls
         self.d = d
@@ -1931,6 +1942,7 @@
 from . import npm
 from . import npmsw
 from . import az
+from . import crate
 
 methods.append(local.Local())
 methods.append(wget.Wget())
@@ -1951,3 +1963,4 @@
 methods.append(npm.Npm())
 methods.append(npmsw.NpmShrinkWrap())
 methods.append(az.Az())
+methods.append(crate.Crate())
diff --git a/poky/bitbake/lib/bb/fetch2/crate.py b/poky/bitbake/lib/bb/fetch2/crate.py
new file mode 100644
index 0000000..f7e2354
--- /dev/null
+++ b/poky/bitbake/lib/bb/fetch2/crate.py
@@ -0,0 +1,137 @@
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+"""
+BitBake 'Fetch' implementation for crates.io
+"""
+
+# Copyright (C) 2016 Doug Goldstein
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Based on functions from the base bb module, Copyright 2003 Holger Schurig
+
+import hashlib
+import json
+import os
+import shutil
+import subprocess
+import bb
+from   bb.fetch2 import logger, subprocess_setup, UnpackError
+from   bb.fetch2.wget import Wget
+
+
+class Crate(Wget):
+
+    """Class to fetch crates via wget"""
+
+    def _cargo_bitbake_path(self, rootdir):
+        return os.path.join(rootdir, "cargo_home", "bitbake")
+
+    def supports(self, ud, d):
+        """
+        Check to see if a given url is for this fetcher
+        """
+        return ud.type in ['crate']
+
+    def recommends_checksum(self, urldata):
+        return False
+
+    def urldata_init(self, ud, d):
+        """
+        Sets up to download the respective crate from crates.io
+        """
+
+        if ud.type == 'crate':
+            self._crate_urldata_init(ud, d)
+
+        super(Crate, self).urldata_init(ud, d)
+
+    def _crate_urldata_init(self, ud, d):
+        """
+        Sets up the download for a crate
+        """
+
+        # URL syntax is: crate://NAME/VERSION
+        # break the URL apart by /
+        parts = ud.url.split('/')
+        if len(parts) < 5:
+            raise bb.fetch2.ParameterError("Invalid URL: Must be crate://HOST/NAME/VERSION", ud.url)
+
+        # last field is version
+        version = parts[len(parts) - 1]
+        # second to last field is name
+        name = parts[len(parts) - 2]
+        # host (this is to allow custom crate registries to be specified
+        host = '/'.join(parts[2:len(parts) - 2])
+
+        # if using upstream just fix it up nicely
+        if host == 'crates.io':
+            host = 'crates.io/api/v1/crates'
+
+        ud.url = "https://%s/%s/%s/download" % (host, name, version)
+        ud.parm['downloadfilename'] = "%s-%s.crate" % (name, version)
+        ud.parm['name'] = name
+
+        logger.debug(2, "Fetching %s to %s" % (ud.url, ud.parm['downloadfilename']))
+
+    def unpack(self, ud, rootdir, d):
+        """
+        Uses the crate to build the necessary paths for cargo to utilize it
+        """
+        if ud.type == 'crate':
+            return self._crate_unpack(ud, rootdir, d)
+        else:
+            super(Crate, self).unpack(ud, rootdir, d)
+
+    def _crate_unpack(self, ud, rootdir, d):
+        """
+        Unpacks a crate
+        """
+        thefile = ud.localpath
+
+        # possible metadata we need to write out
+        metadata = {}
+
+        # change to the rootdir to unpack but save the old working dir
+        save_cwd = os.getcwd()
+        os.chdir(rootdir)
+
+        pn = d.getVar('BPN')
+        if pn == ud.parm.get('name'):
+            cmd = "tar -xz --no-same-owner -f %s" % thefile
+        else:
+            cargo_bitbake = self._cargo_bitbake_path(rootdir)
+
+            cmd = "tar -xz --no-same-owner -f %s -C %s" % (thefile, cargo_bitbake)
+
+            # ensure we've got these paths made
+            bb.utils.mkdirhier(cargo_bitbake)
+
+            # generate metadata necessary
+            with open(thefile, 'rb') as f:
+                # get the SHA256 of the original tarball
+                tarhash = hashlib.sha256(f.read()).hexdigest()
+
+            metadata['files'] = {}
+            metadata['package'] = tarhash
+
+        path = d.getVar('PATH')
+        if path:
+            cmd = "PATH=\"%s\" %s" % (path, cmd)
+        bb.note("Unpacking %s to %s/" % (thefile, os.getcwd()))
+
+        ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True)
+
+        os.chdir(save_cwd)
+
+        if ret != 0:
+            raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), ud.url)
+
+        # if we have metadata to write out..
+        if len(metadata) > 0:
+            cratepath = os.path.splitext(os.path.basename(thefile))[0]
+            bbpath = self._cargo_bitbake_path(rootdir)
+            mdfile = '.cargo-checksum.json'
+            mdpath = os.path.join(bbpath, cratepath, mdfile)
+            with open(mdpath, "w") as f:
+                json.dump(metadata, f)
diff --git a/poky/bitbake/lib/bb/fetch2/git.py b/poky/bitbake/lib/bb/fetch2/git.py
index e8ddf2c..30da8e9 100644
--- a/poky/bitbake/lib/bb/fetch2/git.py
+++ b/poky/bitbake/lib/bb/fetch2/git.py
@@ -142,6 +142,11 @@
             ud.proto = 'file'
         else:
             ud.proto = "git"
+        if ud.host == "github.com" and ud.proto == "git":
+            # github stopped supporting git protocol
+            # https://github.blog/2021-09-01-improving-git-protocol-security-github/#no-more-unauthenticated-git
+            ud.proto = "https"
+            bb.warn("URL: %s uses git protocol which is no longer supported by github. Please change to ;protocol=https in the url." % ud.url)
 
         if not ud.proto in ('git', 'file', 'ssh', 'http', 'https', 'rsync'):
             raise bb.fetch2.ParameterError("Invalid protocol type", ud.url)
@@ -165,7 +170,10 @@
             ud.nocheckout = 1
   
         ud.unresolvedrev = {}
-        branches = ud.parm.get("branch", "master").split(',')
+        branches = ud.parm.get("branch", "").split(',')
+        if branches == [""] and not ud.nobranch:
+            bb.warn("URL: %s does not set any branch parameter. The future default branch used by tools and repositories is uncertain and we will therefore soon require this is set in all git urls." % ud.url)
+            branches = ["master"]
         if len(branches) != len(ud.names):
             raise bb.fetch2.ParameterError("The number of name and branch parameters is not balanced", ud.url)
 
@@ -516,13 +524,24 @@
     def unpack(self, ud, destdir, d):
         """ unpack the downloaded src to destdir"""
 
-        subdir = ud.parm.get("subpath", "")
-        if subdir != "":
-            readpathspec = ":%s" % subdir
-            def_destsuffix = "%s/" % os.path.basename(subdir.rstrip('/'))
-        else:
-            readpathspec = ""
-            def_destsuffix = "git/"
+        subdir = ud.parm.get("subdir")
+        subpath = ud.parm.get("subpath")
+        readpathspec = ""
+        def_destsuffix = "git/"
+
+        if subpath:
+            readpathspec = ":%s" % subpath
+            def_destsuffix = "%s/" % os.path.basename(subpath.rstrip('/'))
+
+        if subdir:
+            # If 'subdir' param exists, create a dir and use it as destination for unpack cmd
+            if os.path.isabs(subdir):
+                if not os.path.realpath(subdir).startswith(os.path.realpath(destdir)):
+                    raise bb.fetch2.UnpackError("subdir argument isn't a subdirectory of unpack root %s" % destdir, ud.url)
+                destdir = subdir
+            else:
+                destdir = os.path.join(destdir, subdir)
+            def_destsuffix = ""
 
         destsuffix = ud.parm.get("destsuffix", def_destsuffix)
         destdir = ud.destdir = os.path.join(destdir, destsuffix)
@@ -569,7 +588,7 @@
                 bb.note("Repository %s has LFS content but it is not being fetched" % (repourl))
 
         if not ud.nocheckout:
-            if subdir != "":
+            if subpath:
                 runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d,
                             workdir=destdir)
                 runfetchcmd("%s checkout-index -q -f -a" % ud.basecmd, d, workdir=destdir)
diff --git a/poky/bitbake/lib/bb/fetch2/gitsm.py b/poky/bitbake/lib/bb/fetch2/gitsm.py
index a7110a9..c5c23d52 100644
--- a/poky/bitbake/lib/bb/fetch2/gitsm.py
+++ b/poky/bitbake/lib/bb/fetch2/gitsm.py
@@ -163,7 +163,7 @@
         else:
             self.process_submodules(ud, ud.clonedir, need_update_submodule, d)
 
-        if len(need_update_list) > 0:
+        if need_update_list:
             logger.debug('gitsm: Submodules requiring update: %s' % (' '.join(need_update_list)))
             return True
 
diff --git a/poky/bitbake/lib/bb/fetch2/npm.py b/poky/bitbake/lib/bb/fetch2/npm.py
index 3c41cb2..b3a3a44 100644
--- a/poky/bitbake/lib/bb/fetch2/npm.py
+++ b/poky/bitbake/lib/bb/fetch2/npm.py
@@ -72,7 +72,7 @@
     cmd += " --delay-directory-restore"
     cmd += " --strip-components=1"
     runfetchcmd(cmd, d, workdir=destdir)
-    runfetchcmd("chmod -R +X %s" % (destdir), d, quiet=True, workdir=destdir)
+    runfetchcmd("chmod -R +X '%s'" % (destdir), d, quiet=True, workdir=destdir)
 
 class NpmEnvironment(object):
     """
diff --git a/poky/bitbake/lib/bb/fetch2/npmsw.py b/poky/bitbake/lib/bb/fetch2/npmsw.py
index 426a139..879ba5d 100644
--- a/poky/bitbake/lib/bb/fetch2/npmsw.py
+++ b/poky/bitbake/lib/bb/fetch2/npmsw.py
@@ -88,7 +88,11 @@
             version = params.get("version", None)
 
             # Handle registry sources
-            if is_semver(version) and resolved and integrity:
+            if is_semver(version) and integrity:
+                # Handle duplicate dependencies without url
+                if not resolved:
+                    return
+
                 localfile = npm_localfile(name, version)
 
                 uri = URI(resolved)
@@ -127,6 +131,8 @@
 
             # Handle git sources
             elif version.startswith("git"):
+                if version.startswith("github:"):
+                    version = "git+https://github.com/" + version[len("github:"):]
                 regex = re.compile(r"""
                     ^
                     git\+
diff --git a/poky/bitbake/lib/bb/fetch2/wget.py b/poky/bitbake/lib/bb/fetch2/wget.py
index 349891e..253cabc 100644
--- a/poky/bitbake/lib/bb/fetch2/wget.py
+++ b/poky/bitbake/lib/bb/fetch2/wget.py
@@ -112,7 +112,17 @@
             fetchcmd += " -O %s" % shlex.quote(localpath)
 
         if ud.user and ud.pswd:
-            fetchcmd += " --user=%s --password=%s --auth-no-challenge" % (ud.user, ud.pswd)
+            fetchcmd += " --auth-no-challenge"
+            if ud.parm.get("redirectauth", "1") == "1":
+                # An undocumented feature of wget is that if the
+                # username/password are specified on the URI, wget will only
+                # send the Authorization header to the first host and not to
+                # any hosts that it is redirected to.  With the increasing
+                # usage of temporary AWS URLs, this difference now matters as
+                # AWS will reject any request that has authentication both in
+                # the query parameters (from the redirect) and in the
+                # Authorization header.
+                fetchcmd += " --user=%s --password=%s" % (ud.user, ud.pswd)
 
         uri = ud.url.split(";")[0]
         if os.path.exists(ud.localpath):
@@ -356,7 +366,7 @@
                 except (TypeError, ImportError, IOError, netrc.NetrcParseError):
                     pass
 
-                with opener.open(r) as response:
+                with opener.open(r, timeout=30) as response:
                     pass
             except urllib.error.URLError as e:
                 if try_again:
@@ -583,7 +593,7 @@
 
         # src.rpm extension was added only for rpm package. Can be removed if the rpm
         # packaged will always be considered as having to be manually upgraded
-        psuffix_regex = r"(tar\.gz|tgz|tar\.bz2|zip|xz|tar\.lz|rpm|bz2|orig\.tar\.gz|tar\.xz|src\.tar\.gz|src\.tgz|svnr\d+\.tar\.bz2|stable\.tar\.gz|src\.rpm)"
+        psuffix_regex = r"(tar\.\w+|tgz|zip|xz|rpm|bz2|orig\.tar\.\w+|src\.tar\.\w+|src\.tgz|svnr\d+\.tar\.\w+|stable\.tar\.\w+|src\.rpm)"
 
         # match name, version and archive type of a package
         package_regex_comp = re.compile(r"(?P<name>%s?\.?v?)(?P<pver>%s)(?P<arch>%s)?[\.-](?P<type>%s$)"
diff --git a/poky/bitbake/lib/bb/parse/ast.py b/poky/bitbake/lib/bb/parse/ast.py
index 743ea0d..31bcc8e 100644
--- a/poky/bitbake/lib/bb/parse/ast.py
+++ b/poky/bitbake/lib/bb/parse/ast.py
@@ -130,6 +130,10 @@
         else:
             val = groupd["value"]
 
+        if ":append" in key or ":remove" in key or ":prepend" in key:
+            if op in ["append", "prepend", "postdot", "predot", "ques"]:
+                bb.warn(key + " " + groupd[op] + " is not a recommended operator combination, please replace it.")
+
         flag = None
         if 'flag' in groupd and groupd['flag'] is not None:
             flag = groupd['flag']
diff --git a/poky/bitbake/lib/bb/parse/parse_py/ConfHandler.py b/poky/bitbake/lib/bb/parse/parse_py/ConfHandler.py
index 0834fe3..b895d5b 100644
--- a/poky/bitbake/lib/bb/parse/parse_py/ConfHandler.py
+++ b/poky/bitbake/lib/bb/parse/parse_py/ConfHandler.py
@@ -48,10 +48,7 @@
 __unset_flag_regexp__ = re.compile( r"unset\s+([a-zA-Z0-9\-_+.${}/~]+)\[([a-zA-Z0-9\-_+.]+)\]$" )
 
 def init(data):
-    topdir = data.getVar('TOPDIR', False)
-    if not topdir:
-        data.setVar('TOPDIR', os.getcwd())
-
+    return
 
 def supports(fn, d):
     return fn[-5:] == ".conf"
diff --git a/poky/bitbake/lib/bb/process.py b/poky/bitbake/lib/bb/process.py
index d5a1775..af5d804 100644
--- a/poky/bitbake/lib/bb/process.py
+++ b/poky/bitbake/lib/bb/process.py
@@ -60,7 +60,7 @@
         "close_fds": True,
         "preexec_fn": subprocess_setup,
         "stdout": subprocess.PIPE,
-        "stderr": subprocess.STDOUT,
+        "stderr": subprocess.PIPE,
         "stdin": subprocess.PIPE,
         "shell": False,
     }
diff --git a/poky/bitbake/lib/bb/runqueue.py b/poky/bitbake/lib/bb/runqueue.py
index 10511a0..8ae3fe8 100644
--- a/poky/bitbake/lib/bb/runqueue.py
+++ b/poky/bitbake/lib/bb/runqueue.py
@@ -385,7 +385,6 @@
         self.rq = rq
         self.warn_multi_bb = False
 
-        self.stampwhitelist = cfgData.getVar("BB_STAMP_WHITELIST") or ""
         self.multi_provider_whitelist = (cfgData.getVar("MULTI_PROVIDER_WHITELIST") or "").split()
         self.setscenewhitelist = get_setscene_enforce_whitelist(cfgData, targets)
         self.setscenewhitelist_checked = False
@@ -547,7 +546,7 @@
                         next_points.append(revdep)
                         task_done[revdep] = True
             endpoints = next_points
-            if len(next_points) == 0:
+            if not next_points:
                 break
 
         # Circular dependency sanity check
@@ -589,7 +588,7 @@
 
         found = False
         for mc in self.taskData:
-            if len(taskData[mc].taskentries) > 0:
+            if taskData[mc].taskentries:
                 found = True
                 break
         if not found:
@@ -773,7 +772,7 @@
         # Find the dependency chain endpoints
         endpoints = set()
         for tid in self.runtaskentries:
-            if len(deps[tid]) == 0:
+            if not deps[tid]:
                 endpoints.add(tid)
         # Iterate the chains collating dependencies
         while endpoints:
@@ -784,11 +783,11 @@
                     cumulativedeps[dep].update(cumulativedeps[tid])
                     if tid in deps[dep]:
                         deps[dep].remove(tid)
-                    if len(deps[dep]) == 0:
+                    if not deps[dep]:
                         next.add(dep)
             endpoints = next
         #for tid in deps:
-        #    if len(deps[tid]) != 0:
+        #    if deps[tid]:
         #        bb.warn("Sanity test failure, dependencies left for %s (%s)" % (tid, deps[tid]))
 
         # Loop here since recrdeptasks can depend upon other recrdeptasks and we have to
@@ -926,39 +925,37 @@
         #
         # Once all active tasks are marked, prune the ones we don't need.
 
-        delcount = {}
-        for tid in list(self.runtaskentries.keys()):
-            if tid not in runq_build:
-                delcount[tid] = self.runtaskentries[tid]
-                del self.runtaskentries[tid]
-
         # Handle --runall
         if self.cooker.configuration.runall:
             # re-run the mark_active and then drop unused tasks from new list
+            reduced_tasklist = set(self.runtaskentries.keys())
+            for tid in list(self.runtaskentries.keys()):
+                if tid not in runq_build:
+                   reduced_tasklist.remove(tid)
             runq_build = {}
 
             for task in self.cooker.configuration.runall:
                 if not task.startswith("do_"):
                     task = "do_{0}".format(task)
                 runall_tids = set()
-                for tid in list(self.runtaskentries):
+                for tid in reduced_tasklist:
                     wanttid = "{0}:{1}".format(fn_from_tid(tid), task)
-                    if wanttid in delcount:
-                        self.runtaskentries[wanttid] = delcount[wanttid]
                     if wanttid in self.runtaskentries:
                         runall_tids.add(wanttid)
 
                 for tid in list(runall_tids):
-                    mark_active(tid,1)
+                    mark_active(tid, 1)
                     if self.cooker.configuration.force:
                         invalidate_task(tid, False)
 
-            for tid in list(self.runtaskentries.keys()):
-                if tid not in runq_build:
-                    delcount[tid] = self.runtaskentries[tid]
-                    del self.runtaskentries[tid]
+        delcount = set()
+        for tid in list(self.runtaskentries.keys()):
+            if tid not in runq_build:
+                delcount.add(tid)
+                del self.runtaskentries[tid]
 
-            if len(self.runtaskentries) == 0:
+        if self.cooker.configuration.runall:
+            if not self.runtaskentries:
                 bb.msg.fatal("RunQueue", "Could not find any tasks with the tasknames %s to run within the recipes of the taskgraphs of the targets %s" % (str(self.cooker.configuration.runall), str(self.targets)))
 
         self.init_progress_reporter.next_stage()
@@ -971,19 +968,19 @@
             for task in self.cooker.configuration.runonly:
                 if not task.startswith("do_"):
                     task = "do_{0}".format(task)
-                runonly_tids = { k: v for k, v in self.runtaskentries.items() if taskname_from_tid(k) == task }
+                runonly_tids = [k for k in self.runtaskentries.keys() if taskname_from_tid(k) == task]
 
-                for tid in list(runonly_tids):
-                    mark_active(tid,1)
+                for tid in runonly_tids:
+                    mark_active(tid, 1)
                     if self.cooker.configuration.force:
                         invalidate_task(tid, False)
 
             for tid in list(self.runtaskentries.keys()):
                 if tid not in runq_build:
-                    delcount[tid] = self.runtaskentries[tid]
+                    delcount.add(tid)
                     del self.runtaskentries[tid]
 
-            if len(self.runtaskentries) == 0:
+            if not self.runtaskentries:
                 bb.msg.fatal("RunQueue", "Could not find any tasks with the tasknames %s to run within the taskgraphs of the targets %s" % (str(self.cooker.configuration.runonly), str(self.targets)))
 
         #
@@ -991,7 +988,7 @@
         #
 
         # Check to make sure we still have tasks to run
-        if len(self.runtaskentries) == 0:
+        if not self.runtaskentries:
             if not taskData[''].abort:
                 bb.msg.fatal("RunQueue", "All buildable tasks have been run but the build is incomplete (--continue mode). Errors for the tasks that failed will have been printed above.")
             else:
@@ -1015,7 +1012,7 @@
         endpoints = []
         for tid in self.runtaskentries:
             revdeps = self.runtaskentries[tid].revdeps
-            if len(revdeps) == 0:
+            if not revdeps:
                 endpoints.append(tid)
             for dep in revdeps:
                 if dep in self.runtaskentries[tid].depends:
@@ -1061,12 +1058,12 @@
                         seen_pn.append(pn)
                     else:
                         bb.fatal("Multiple versions of %s are due to be built (%s). Only one version of a given PN should be built in any given build. You likely need to set PREFERRED_VERSION_%s to select the correct version or don't depend on multiple versions." % (pn, " ".join(prov_list[prov]), pn))
-                msg = "Multiple .bb files are due to be built which each provide %s:\n  %s" % (prov, "\n  ".join(prov_list[prov]))
+                msgs = ["Multiple .bb files are due to be built which each provide %s:\n  %s" % (prov, "\n  ".join(prov_list[prov]))]
                 #
                 # Construct a list of things which uniquely depend on each provider
                 # since this may help the user figure out which dependency is triggering this warning
                 #
-                msg += "\nA list of tasks depending on these providers is shown and may help explain where the dependency comes from."
+                msgs.append("\nA list of tasks depending on these providers is shown and may help explain where the dependency comes from.")
                 deplist = {}
                 commondeps = None
                 for provfn in prov_list[prov]:
@@ -1086,12 +1083,12 @@
                         commondeps &= deps
                     deplist[provfn] = deps
                 for provfn in deplist:
-                    msg += "\n%s has unique dependees:\n  %s" % (provfn, "\n  ".join(deplist[provfn] - commondeps))
+                    msgs.append("\n%s has unique dependees:\n  %s" % (provfn, "\n  ".join(deplist[provfn] - commondeps)))
                 #
                 # Construct a list of provides and runtime providers for each recipe
                 # (rprovides has to cover RPROVIDES, PACKAGES, PACKAGES_DYNAMIC)
                 #
-                msg += "\nIt could be that one recipe provides something the other doesn't and should. The following provider and runtime provider differences may be helpful."
+                msgs.append("\nIt could be that one recipe provides something the other doesn't and should. The following provider and runtime provider differences may be helpful.")
                 provide_results = {}
                 rprovide_results = {}
                 commonprovs = None
@@ -1118,29 +1115,18 @@
                     else:
                         commonrprovs &= rprovides
                     rprovide_results[provfn] = rprovides
-                #msg += "\nCommon provides:\n  %s" % ("\n  ".join(commonprovs))
-                #msg += "\nCommon rprovides:\n  %s" % ("\n  ".join(commonrprovs))
+                #msgs.append("\nCommon provides:\n  %s" % ("\n  ".join(commonprovs)))
+                #msgs.append("\nCommon rprovides:\n  %s" % ("\n  ".join(commonrprovs)))
                 for provfn in prov_list[prov]:
-                    msg += "\n%s has unique provides:\n  %s" % (provfn, "\n  ".join(provide_results[provfn] - commonprovs))
-                    msg += "\n%s has unique rprovides:\n  %s" % (provfn, "\n  ".join(rprovide_results[provfn] - commonrprovs))
+                    msgs.append("\n%s has unique provides:\n  %s" % (provfn, "\n  ".join(provide_results[provfn] - commonprovs)))
+                    msgs.append("\n%s has unique rprovides:\n  %s" % (provfn, "\n  ".join(rprovide_results[provfn] - commonrprovs)))
 
                 if self.warn_multi_bb:
-                    logger.verbnote(msg)
+                    logger.verbnote("".join(msgs))
                 else:
-                    logger.error(msg)
+                    logger.error("".join(msgs))
 
         self.init_progress_reporter.next_stage()
-
-        # Create a whitelist usable by the stamp checks
-        self.stampfnwhitelist = {}
-        for mc in self.taskData:
-            self.stampfnwhitelist[mc] = []
-            for entry in self.stampwhitelist.split():
-                if entry not in self.taskData[mc].build_targets:
-                    continue
-                fn = self.taskData.build_targets[entry][0]
-                self.stampfnwhitelist[mc].append(fn)
-
         self.init_progress_reporter.next_stage()
 
         # Iterate over the task list looking for tasks with a 'setscene' function
@@ -1188,9 +1174,9 @@
         # Iterate over the task list and call into the siggen code
         dealtwith = set()
         todeal = set(self.runtaskentries)
-        while len(todeal) > 0:
+        while todeal:
             for tid in todeal.copy():
-                if len(self.runtaskentries[tid].depends - dealtwith) == 0:
+                if not (self.runtaskentries[tid].depends - dealtwith):
                     dealtwith.add(tid)
                     todeal.remove(tid)
                     self.prepare_task_hash(tid)
@@ -1229,7 +1215,6 @@
         self.cfgData = cfgData
         self.rqdata = RunQueueData(self, cooker, cfgData, dataCaches, taskData, targets)
 
-        self.stamppolicy = cfgData.getVar("BB_STAMP_POLICY") or "perfile"
         self.hashvalidate = cfgData.getVar("BB_HASHCHECK_FUNCTION") or None
         self.depvalidate = cfgData.getVar("BB_SETSCENE_DEPVALID") or None
 
@@ -1358,14 +1343,6 @@
         if taskname is None:
             taskname = tn
 
-        if self.stamppolicy == "perfile":
-            fulldeptree = False
-        else:
-            fulldeptree = True
-            stampwhitelist = []
-            if self.stamppolicy == "whitelist":
-                stampwhitelist = self.rqdata.stampfnwhitelist[mc]
-
         stampfile = bb.build.stampfile(taskname, self.rqdata.dataCaches[mc], taskfn)
 
         # If the stamp is missing, it's not current
@@ -1397,7 +1374,7 @@
                     continue
                 if t3 and t3 > t2:
                     continue
-                if fn == fn2 or (fulldeptree and fn2 not in stampwhitelist):
+                if fn == fn2:
                     if not t2:
                         logger.debug2('Stampfile %s does not exist', stampfile2)
                         iscurrent = False
@@ -1500,10 +1477,10 @@
             self.rqexe = RunQueueExecute(self)
 
             # If we don't have any setscene functions, skip execution
-            if len(self.rqdata.runq_setscene_tids) == 0:
+            if not self.rqdata.runq_setscene_tids:
                 logger.info('No setscene tasks')
                 for tid in self.rqdata.runtaskentries:
-                    if len(self.rqdata.runtaskentries[tid].depends) == 0:
+                    if not self.rqdata.runtaskentries[tid].depends:
                         self.rqexe.setbuildable(tid)
                     self.rqexe.tasks_notcovered.add(tid)
                 self.rqexe.sqdone = True
@@ -1780,7 +1757,7 @@
             bb.fatal("Invalid scheduler '%s'.  Available schedulers: %s" %
                      (self.scheduler, ", ".join(obj.name for obj in schedulers)))
 
-        #if len(self.rqdata.runq_setscene_tids) > 0:
+        #if self.rqdata.runq_setscene_tids:
         self.sqdata = SQData()
         build_scenequeue_data(self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self)
 
@@ -1821,7 +1798,7 @@
                 # worker must have died?
                 pass
 
-        if len(self.failed_tids) != 0:
+        if self.failed_tids:
             self.rq.state = runQueueFailed
             return
 
@@ -1837,7 +1814,7 @@
             self.rq.read_workers()
             return self.rq.active_fds()
 
-        if len(self.failed_tids) != 0:
+        if self.failed_tids:
             self.rq.state = runQueueFailed
             return True
 
@@ -1935,7 +1912,7 @@
         self.stats.taskFailed()
         self.failed_tids.append(task)
 
-        fakeroot_log = ""
+        fakeroot_log = []
         if fakerootlog and os.path.exists(fakerootlog):
             with open(fakerootlog) as fakeroot_log_file:
                 fakeroot_failed = False
@@ -1945,12 +1922,12 @@
                             fakeroot_failed = True
                     if 'doing new pid setup and server start' in line:
                         break
-                    fakeroot_log = line + fakeroot_log
+                    fakeroot_log.append(line)
 
             if not fakeroot_failed:
-                fakeroot_log = None
+                fakeroot_log = []
 
-        bb.event.fire(runQueueTaskFailed(task, self.stats, exitcode, self.rq, fakeroot_log=fakeroot_log), self.cfgData)
+        bb.event.fire(runQueueTaskFailed(task, self.stats, exitcode, self.rq, fakeroot_log=("".join(fakeroot_log) or None)), self.cfgData)
 
         if self.rqdata.taskData[''].abort:
             self.rq.state = runQueueCleanUp
@@ -2001,7 +1978,7 @@
             if x not in self.tasks_scenequeue_done:
                 logger.error("Task %s was never processed by the setscene code" % x)
                 err = True
-            if len(self.rqdata.runtaskentries[x].depends) == 0 and x not in self.runq_buildable:
+            if not self.rqdata.runtaskentries[x].depends and x not in self.runq_buildable:
                 logger.error("Task %s was never marked as buildable by the setscene code" % x)
                 err = True
         return err
@@ -2025,7 +2002,7 @@
             # Find the next setscene to run
             for nexttask in self.sorted_setscene_tids:
                 if nexttask in self.sq_buildable and nexttask not in self.sq_running and self.sqdata.stamps[nexttask] not in self.build_stamps.values():
-                    if nexttask not in self.sqdata.unskippable and len(self.sqdata.sq_revdeps[nexttask]) > 0 and self.sqdata.sq_revdeps[nexttask].issubset(self.scenequeue_covered) and self.check_dependencies(nexttask, self.sqdata.sq_revdeps[nexttask]):
+                    if nexttask not in self.sqdata.unskippable and self.sqdata.sq_revdeps[nexttask] and self.sqdata.sq_revdeps[nexttask].issubset(self.scenequeue_covered) and self.check_dependencies(nexttask, self.sqdata.sq_revdeps[nexttask]):
                         if nexttask not in self.rqdata.target_tids:
                             logger.debug2("Skipping setscene for task %s" % nexttask)
                             self.sq_task_skip(nexttask)
@@ -2189,7 +2166,7 @@
             if self.can_start_task():
                 return True
 
-        if self.stats.active > 0 or len(self.sq_live) > 0:
+        if self.stats.active > 0 or self.sq_live:
             self.rq.read_workers()
             return self.rq.active_fds()
 
@@ -2201,7 +2178,7 @@
                 self.sq_task_failoutright(tid)
             return True
 
-        if len(self.failed_tids) != 0:
+        if self.failed_tids:
             self.rq.state = runQueueFailed
             return True
 
@@ -2280,7 +2257,7 @@
         covered.intersection_update(self.tasks_scenequeue_done)
 
         for tid in notcovered | covered:
-            if len(self.rqdata.runtaskentries[tid].depends) == 0:
+            if not self.rqdata.runtaskentries[tid].depends:
                 self.setbuildable(tid)
             elif self.rqdata.runtaskentries[tid].depends.issubset(self.runq_complete):
                  self.setbuildable(tid)
@@ -2339,7 +2316,7 @@
         # Now iterate those tasks in dependency order to regenerate their taskhash/unihash
         next = set()
         for p in total:
-            if len(self.rqdata.runtaskentries[p].depends) == 0:
+            if not self.rqdata.runtaskentries[p].depends:
                 next.add(p)
             elif self.rqdata.runtaskentries[p].depends.isdisjoint(total):
                 next.add(p)
@@ -2349,7 +2326,7 @@
             current = next.copy()
             next = set()
             for tid in current:
-                if len(self.rqdata.runtaskentries[p].depends) and not self.rqdata.runtaskentries[tid].depends.isdisjoint(total):
+                if self.rqdata.runtaskentries[p].depends and not self.rqdata.runtaskentries[tid].depends.isdisjoint(total):
                     continue
                 orighash = self.rqdata.runtaskentries[tid].hash
                 dc = bb.parse.siggen.get_data_caches(self.rqdata.dataCaches, mc_from_tid(tid))
@@ -2436,7 +2413,7 @@
             if not harddepfail and self.sqdata.sq_revdeps[tid].issubset(self.scenequeue_covered | self.scenequeue_notcovered):
                 if tid not in self.sq_buildable:
                     self.sq_buildable.add(tid)
-            if len(self.sqdata.sq_revdeps[tid]) == 0:
+            if not self.sqdata.sq_revdeps[tid]:
                 self.sq_buildable.add(tid)
 
             if tid in self.sqdata.outrightfail:
@@ -2608,12 +2585,13 @@
         pn = self.rqdata.dataCaches[mc].pkg_fn[taskfn]
         if not check_setscene_enforce_whitelist(pn, taskname, self.rqdata.setscenewhitelist):
             if tid in self.rqdata.runq_setscene_tids:
-                msg = 'Task %s.%s attempted to execute unexpectedly and should have been setscened' % (pn, taskname)
+                msg = ['Task %s.%s attempted to execute unexpectedly and should have been setscened' % (pn, taskname)]
             else:
-                msg = 'Task %s.%s attempted to execute unexpectedly' % (pn, taskname)
+                msg = ['Task %s.%s attempted to execute unexpectedly' % (pn, taskname)]
             for t in self.scenequeue_notcovered:
-                msg = msg + "\nTask %s, unihash %s, taskhash %s" % (t, self.rqdata.runtaskentries[t].unihash, self.rqdata.runtaskentries[t].hash)
-            logger.error(msg + '\nThis is usually due to missing setscene tasks. Those missing in this build were: %s' % pprint.pformat(self.scenequeue_notcovered))
+                msg.append("\nTask %s, unihash %s, taskhash %s" % (t, self.rqdata.runtaskentries[t].unihash, self.rqdata.runtaskentries[t].hash))
+            msg.append('\nThis is usually due to missing setscene tasks. Those missing in this build were: %s' % pprint.pformat(self.scenequeue_notcovered))
+            logger.error("".join(msg))
             return True
         return False
 
@@ -2652,7 +2630,7 @@
     for tid in rqdata.runtaskentries:
         sq_revdeps[tid] = copy.copy(rqdata.runtaskentries[tid].revdeps)
         sq_revdeps_squash[tid] = set()
-        if (len(sq_revdeps[tid]) == 0) and tid not in rqdata.runq_setscene_tids:
+        if not sq_revdeps[tid] and tid not in rqdata.runq_setscene_tids:
             #bb.warn("Added endpoint %s" % (tid))
             endpoints[tid] = set()
 
@@ -2693,9 +2671,9 @@
                     sq_revdeps[dep].remove(point)
                 if tasks:
                     sq_revdeps_squash[dep] |= tasks
-                if len(sq_revdeps[dep]) == 0 and dep not in rqdata.runq_setscene_tids:
+                if not sq_revdeps[dep] and dep not in rqdata.runq_setscene_tids:
                     newendpoints[dep] = task
-        if len(newendpoints) != 0:
+        if newendpoints:
             process_endpoints(newendpoints)
 
     process_endpoints(endpoints)
@@ -2707,7 +2685,7 @@
     # Take the build endpoints (no revdeps) and find the sstate tasks they depend upon
     new = True
     for tid in rqdata.runtaskentries:
-        if len(rqdata.runtaskentries[tid].revdeps) == 0:
+        if not rqdata.runtaskentries[tid].revdeps:
             sqdata.unskippable.add(tid)
     sqdata.unskippable |= sqrq.cantskip
     while new:
@@ -2716,7 +2694,7 @@
         for tid in sorted(orig, reverse=True):
             if tid in rqdata.runq_setscene_tids:
                 continue
-            if len(rqdata.runtaskentries[tid].depends) == 0:
+            if not rqdata.runtaskentries[tid].depends:
                 # These are tasks which have no setscene tasks in their chain, need to mark as directly buildable
                 sqrq.setbuildable(tid)
             sqdata.unskippable |= rqdata.runtaskentries[tid].depends
@@ -2731,7 +2709,7 @@
     for taskcounter, tid in enumerate(rqdata.runtaskentries):
         if tid in rqdata.runq_setscene_tids:
             pass
-        elif len(sq_revdeps_squash[tid]) != 0:
+        elif sq_revdeps_squash[tid]:
             bb.msg.fatal("RunQueue", "Something went badly wrong during scenequeue generation, aborting. Please report this problem.")
         else:
             del sq_revdeps_squash[tid]
@@ -2796,7 +2774,7 @@
     sqdata.multiconfigs = set()
     for tid in sqdata.sq_revdeps:
         sqdata.multiconfigs.add(mc_from_tid(tid))
-        if len(sqdata.sq_revdeps[tid]) == 0:
+        if not sqdata.sq_revdeps[tid]:
             sqrq.sq_buildable.add(tid)
 
     rqdata.init_progress_reporter.finish()
@@ -3050,7 +3028,7 @@
                 raise
         end = len(self.queue)
         found = True
-        while found and len(self.queue):
+        while found and self.queue:
             found = False
             index = self.queue.find(b"</event>")
             while index != -1 and self.queue.startswith(b"<event>"):
@@ -3088,7 +3066,7 @@
     def close(self):
         while self.read():
             continue
-        if len(self.queue) > 0:
+        if self.queue:
             print("Warning, worker left partial message: %s" % self.queue)
         self.input.close()
 
diff --git a/poky/bitbake/lib/bb/server/process.py b/poky/bitbake/lib/bb/server/process.py
index 8fdcc66..1636616 100644
--- a/poky/bitbake/lib/bb/server/process.py
+++ b/poky/bitbake/lib/bb/server/process.py
@@ -326,10 +326,10 @@
                         if e.errno != errno.ENOENT:
                             raise
 
-                msg = "Delaying shutdown due to active processes which appear to be holding bitbake.lock"
+                msg = ["Delaying shutdown due to active processes which appear to be holding bitbake.lock"]
                 if procs:
-                    msg += ":\n%s" % str(procs.decode("utf-8"))
-                serverlog(msg)
+                    msg.append(":\n%s" % str(procs.decode("utf-8")))
+                serverlog("".join(msg))
 
     def idle_commands(self, delay, fds=None):
         nextsleep = delay
diff --git a/poky/bitbake/lib/bb/siggen.py b/poky/bitbake/lib/bb/siggen.py
index 578ba5d..e0ec736 100644
--- a/poky/bitbake/lib/bb/siggen.py
+++ b/poky/bitbake/lib/bb/siggen.py
@@ -328,6 +328,8 @@
 
         for (f, cs) in self.file_checksum_values[tid]:
             if cs:
+                if "/./" in f:
+                    data = data + "./" + f.split("/./")[1]
                 data = data + cs
 
         if tid in self.taints:
@@ -385,7 +387,12 @@
 
         if runtime and tid in self.taskhash:
             data['runtaskdeps'] = self.runtaskdeps[tid]
-            data['file_checksum_values'] = [(os.path.basename(f), cs) for f,cs in self.file_checksum_values[tid]]
+            data['file_checksum_values'] = []
+            for f,cs in self.file_checksum_values[tid]:
+                if "/./" in f:
+                    data['file_checksum_values'].append(("./" + f.split("/./")[1], cs))
+                else:
+                    data['file_checksum_values'].append((os.path.basename(f), cs))
             data['runtaskhashes'] = {}
             for dep in data['runtaskdeps']:
                 data['runtaskhashes'][dep] = self.get_unihash(dep)
@@ -1028,6 +1035,8 @@
 
     for c in sigdata['file_checksum_values']:
         if c[1]:
+            if "./" in c[0]:
+                data = data + c[0]
             data = data + c[1]
 
     if 'taint' in sigdata:
@@ -1045,28 +1054,28 @@
     with bb.compress.zstd.open(a, "rt", encoding="utf-8", num_threads=1) as f:
         a_data = json.load(f, object_hook=SetDecoder)
 
-    output.append("basewhitelist: %s" % (a_data['basewhitelist']))
+    output.append("basewhitelist: %s" % (sorted(a_data['basewhitelist'])))
 
-    output.append("taskwhitelist: %s" % (a_data['taskwhitelist']))
+    output.append("taskwhitelist: %s" % (sorted(a_data['taskwhitelist'] or [])))
 
     output.append("Task dependencies: %s" % (sorted(a_data['taskdeps'])))
 
     output.append("basehash: %s" % (a_data['basehash']))
 
-    for dep in a_data['gendeps']:
-        output.append("List of dependencies for variable %s is %s" % (dep, a_data['gendeps'][dep]))
+    for dep in sorted(a_data['gendeps']):
+        output.append("List of dependencies for variable %s is %s" % (dep, sorted(a_data['gendeps'][dep])))
 
-    for dep in a_data['varvals']:
+    for dep in sorted(a_data['varvals']):
         output.append("Variable %s value is %s" % (dep, a_data['varvals'][dep]))
 
     if 'runtaskdeps' in a_data:
-        output.append("Tasks this task depends on: %s" % (a_data['runtaskdeps']))
+        output.append("Tasks this task depends on: %s" % (sorted(a_data['runtaskdeps'])))
 
     if 'file_checksum_values' in a_data:
-        output.append("This task depends on the checksums of files: %s" % (a_data['file_checksum_values']))
+        output.append("This task depends on the checksums of files: %s" % (sorted(a_data['file_checksum_values'])))
 
     if 'runtaskhashes' in a_data:
-        for dep in a_data['runtaskhashes']:
+        for dep in sorted(a_data['runtaskhashes']):
             output.append("Hash for dependent task %s is %s" % (dep, a_data['runtaskhashes'][dep]))
 
     if 'taint' in a_data:
diff --git a/poky/bitbake/lib/bb/taskdata.py b/poky/bitbake/lib/bb/taskdata.py
index 47bad6d..7bfcdb8 100644
--- a/poky/bitbake/lib/bb/taskdata.py
+++ b/poky/bitbake/lib/bb/taskdata.py
@@ -451,12 +451,12 @@
         for target in self.build_targets:
             if fn in self.build_targets[target]:
                 self.build_targets[target].remove(fn)
-                if len(self.build_targets[target]) == 0:
+                if not self.build_targets[target]:
                     self.remove_buildtarget(target, missing_list)
         for target in self.run_targets:
             if fn in self.run_targets[target]:
                 self.run_targets[target].remove(fn)
-                if len(self.run_targets[target]) == 0:
+                if not self.run_targets[target]:
                     self.remove_runtarget(target, missing_list)
 
     def remove_buildtarget(self, target, missing_list=None):
diff --git a/poky/bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/m/minicom/index.html b/poky/bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/m/minicom/index.html
new file mode 100644
index 0000000..4a1eb4d
--- /dev/null
+++ b/poky/bitbake/lib/bb/tests/fetch-testdata/debian/pool/main/m/minicom/index.html
@@ -0,0 +1,59 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+ <head>
+  <title>Index of /debian/pool/main/m/minicom</title>
+ </head>
+ <body>
+<h1>Index of /debian/pool/main/m/minicom</h1>
+  <table>
+   <tr><th valign="top"><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th></tr>
+   <tr><th colspan="4"><hr></th></tr>
+<tr><td valign="top"><img src="/icons/back.gif" alt="[PARENTDIR]"></td><td><a href="/debian/pool/main/m/">Parent Directory</a></td><td>&nbsp;</td><td align="right">  - </td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1+deb8u1.debian.tar.xz">minicom_2.7-1+deb8u1.debian.tar.xz</a></td><td align="right">2017-04-24 08:22  </td><td align="right"> 14K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1+deb8u1.dsc">minicom_2.7-1+deb8u1.dsc</a></td><td align="right">2017-04-24 08:22  </td><td align="right">1.9K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1+deb8u1_amd64.deb">minicom_2.7-1+deb8u1_amd64.deb</a></td><td align="right">2017-04-25 21:10  </td><td align="right">257K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1+deb8u1_armel.deb">minicom_2.7-1+deb8u1_armel.deb</a></td><td align="right">2017-04-26 00:58  </td><td align="right">246K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1+deb8u1_armhf.deb">minicom_2.7-1+deb8u1_armhf.deb</a></td><td align="right">2017-04-26 00:58  </td><td align="right">245K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1+deb8u1_i386.deb">minicom_2.7-1+deb8u1_i386.deb</a></td><td align="right">2017-04-25 21:41  </td><td align="right">258K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1.debian.tar.xz">minicom_2.7-1.1.debian.tar.xz</a></td><td align="right">2017-04-22 09:34  </td><td align="right"> 14K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1.dsc">minicom_2.7-1.1.dsc</a></td><td align="right">2017-04-22 09:34  </td><td align="right">1.9K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1_amd64.deb">minicom_2.7-1.1_amd64.deb</a></td><td align="right">2017-04-22 15:29  </td><td align="right">261K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1_arm64.deb">minicom_2.7-1.1_arm64.deb</a></td><td align="right">2017-04-22 15:29  </td><td align="right">250K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1_armel.deb">minicom_2.7-1.1_armel.deb</a></td><td align="right">2017-04-22 15:29  </td><td align="right">255K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1_armhf.deb">minicom_2.7-1.1_armhf.deb</a></td><td align="right">2017-04-22 15:29  </td><td align="right">254K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1_i386.deb">minicom_2.7-1.1_i386.deb</a></td><td align="right">2017-04-22 15:29  </td><td align="right">266K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1_mips.deb">minicom_2.7-1.1_mips.deb</a></td><td align="right">2017-04-22 15:29  </td><td align="right">258K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1_mips64el.deb">minicom_2.7-1.1_mips64el.deb</a></td><td align="right">2017-04-22 15:29  </td><td align="right">259K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1_mipsel.deb">minicom_2.7-1.1_mipsel.deb</a></td><td align="right">2017-04-22 15:29  </td><td align="right">259K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1_ppc64el.deb">minicom_2.7-1.1_ppc64el.deb</a></td><td align="right">2017-04-22 15:29  </td><td align="right">253K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7-1.1_s390x.deb">minicom_2.7-1.1_s390x.deb</a></td><td align="right">2017-04-22 15:29  </td><td align="right">261K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1+b1_amd64.deb">minicom_2.7.1-1+b1_amd64.deb</a></td><td align="right">2018-05-06 08:14  </td><td align="right">262K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1+b1_arm64.deb">minicom_2.7.1-1+b1_arm64.deb</a></td><td align="right">2018-05-06 07:58  </td><td align="right">250K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1+b1_armel.deb">minicom_2.7.1-1+b1_armel.deb</a></td><td align="right">2018-05-06 08:45  </td><td align="right">253K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1+b1_armhf.deb">minicom_2.7.1-1+b1_armhf.deb</a></td><td align="right">2018-05-06 10:42  </td><td align="right">253K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1+b1_i386.deb">minicom_2.7.1-1+b1_i386.deb</a></td><td align="right">2018-05-06 08:55  </td><td align="right">266K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1+b1_mips.deb">minicom_2.7.1-1+b1_mips.deb</a></td><td align="right">2018-05-06 08:14  </td><td align="right">258K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1+b1_mipsel.deb">minicom_2.7.1-1+b1_mipsel.deb</a></td><td align="right">2018-05-06 12:13  </td><td align="right">259K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1+b1_ppc64el.deb">minicom_2.7.1-1+b1_ppc64el.deb</a></td><td align="right">2018-05-06 09:10  </td><td align="right">260K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1+b1_s390x.deb">minicom_2.7.1-1+b1_s390x.deb</a></td><td align="right">2018-05-06 08:14  </td><td align="right">257K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1+b2_mips64el.deb">minicom_2.7.1-1+b2_mips64el.deb</a></td><td align="right">2018-05-06 09:41  </td><td align="right">260K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1.debian.tar.xz">minicom_2.7.1-1.debian.tar.xz</a></td><td align="right">2017-08-13 15:40  </td><td align="right"> 14K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.7.1-1.dsc">minicom_2.7.1-1.dsc</a></td><td align="right">2017-08-13 15:40  </td><td align="right">1.8K</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[   ]"></td><td><a href="minicom_2.7.1.orig.tar.gz">minicom_2.7.1.orig.tar.gz</a></td><td align="right">2017-08-13 15:40  </td><td align="right">855K</td></tr>
+<tr><td valign="top"><img src="/icons/compressed.gif" alt="[   ]"></td><td><a href="minicom_2.7.orig.tar.gz">minicom_2.7.orig.tar.gz</a></td><td align="right">2014-01-01 09:36  </td><td align="right">843K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2.debian.tar.xz">minicom_2.8-2.debian.tar.xz</a></td><td align="right">2021-06-15 03:47  </td><td align="right"> 14K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2.dsc">minicom_2.8-2.dsc</a></td><td align="right">2021-06-15 03:47  </td><td align="right">1.8K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2_amd64.deb">minicom_2.8-2_amd64.deb</a></td><td align="right">2021-06-15 03:58  </td><td align="right">280K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2_arm64.deb">minicom_2.8-2_arm64.deb</a></td><td align="right">2021-06-15 04:13  </td><td align="right">275K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2_armel.deb">minicom_2.8-2_armel.deb</a></td><td align="right">2021-06-15 04:13  </td><td align="right">271K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2_armhf.deb">minicom_2.8-2_armhf.deb</a></td><td align="right">2021-06-15 04:13  </td><td align="right">272K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2_i386.deb">minicom_2.8-2_i386.deb</a></td><td align="right">2021-06-15 04:13  </td><td align="right">285K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2_mips64el.deb">minicom_2.8-2_mips64el.deb</a></td><td align="right">2021-06-15 04:13  </td><td align="right">277K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2_mipsel.deb">minicom_2.8-2_mipsel.deb</a></td><td align="right">2021-06-15 04:13  </td><td align="right">278K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2_ppc64el.deb">minicom_2.8-2_ppc64el.deb</a></td><td align="right">2021-06-15 04:13  </td><td align="right">286K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8-2_s390x.deb">minicom_2.8-2_s390x.deb</a></td><td align="right">2021-06-15 03:58  </td><td align="right">275K</td></tr>
+<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]"></td><td><a href="minicom_2.8.orig.tar.bz2">minicom_2.8.orig.tar.bz2</a></td><td align="right">2021-01-03 12:44  </td><td align="right">598K</td></tr>
+   <tr><th colspan="4"><hr></th></tr>
+</table>
+<address>Apache Server at ftp.debian.org Port 80</address>
+</body></html>
diff --git a/poky/bitbake/lib/bb/tests/fetch.py b/poky/bitbake/lib/bb/tests/fetch.py
index 8ad1c85..ec7d83c 100644
--- a/poky/bitbake/lib/bb/tests/fetch.py
+++ b/poky/bitbake/lib/bb/tests/fetch.py
@@ -430,6 +430,12 @@
             : "http://somewhere2.org/somefile_1.2.3.tar.gz",
         ("git://someserver.org/bitbake;tag=1234567890123456789012345678901234567890;branch=master", "git://someserver.org/bitbake;branch=master", "git://git.openembedded.org/bitbake;protocol=http")
             : "git://git.openembedded.org/bitbake;tag=1234567890123456789012345678901234567890;branch=master;protocol=http",
+        ("git://user1@someserver.org/bitbake;tag=1234567890123456789012345678901234567890;branch=master", "git://someserver.org/bitbake;branch=master", "git://user2@git.openembedded.org/bitbake;protocol=http")
+            : "git://user2@git.openembedded.org/bitbake;tag=1234567890123456789012345678901234567890;branch=master;protocol=http",
+        ("git://someserver.org/bitbake;tag=1234567890123456789012345678901234567890;protocol=git;branch=master", "git://someserver.org/bitbake", "git://someotherserver.org/bitbake;protocol=https")
+            : "git://someotherserver.org/bitbake;tag=1234567890123456789012345678901234567890;protocol=https;branch=master",
+
+        ("gitsm://git.qemu.org/git/seabios.git/;protocol=https;name=roms/seabios;subpath=roms/seabios;bareclone=1;nobranch=1;rev=1234567890123456789012345678901234567890", "gitsm://.*/.*", "http://petalinux.xilinx.com/sswreleases/rel-v${XILINX_VER_MAIN}/downloads") : "http://petalinux.xilinx.com/sswreleases/rel-v%24%7BXILINX_VER_MAIN%7D/downloads/git2_git.qemu.org.git.seabios.git..tar.gz",
 
         #Renaming files doesn't work
         #("http://somewhere.org/somedir1/somefile_1.2.3.tar.gz", "http://somewhere.org/somedir1/somefile_1.2.3.tar.gz", "http://somewhere2.org/somedir3/somefile_2.3.4.tar.gz") : "http://somewhere2.org/somedir3/somefile_2.3.4.tar.gz"
@@ -491,7 +497,7 @@
         super(GitDownloadDirectoryNamingTest, self).setUp()
         self.recipe_url = "git://git.openembedded.org/bitbake"
         self.recipe_dir = "git.openembedded.org.bitbake"
-        self.mirror_url = "git://github.com/openembedded/bitbake.git"
+        self.mirror_url = "git://github.com/openembedded/bitbake.git;protocol=https"
         self.mirror_dir = "github.com.openembedded.bitbake.git"
 
         self.d.setVar('SRCREV', '82ea737a0b42a8b53e11c9cde141e9e9c0bd8c40')
@@ -539,7 +545,7 @@
         super(TarballNamingTest, self).setUp()
         self.recipe_url = "git://git.openembedded.org/bitbake"
         self.recipe_tarball = "git2_git.openembedded.org.bitbake.tar.gz"
-        self.mirror_url = "git://github.com/openembedded/bitbake.git"
+        self.mirror_url = "git://github.com/openembedded/bitbake.git;protocol=https"
         self.mirror_tarball = "git2_github.com.openembedded.bitbake.git.tar.gz"
 
         self.d.setVar('BB_GENERATE_MIRROR_TARBALLS', '1')
@@ -573,7 +579,7 @@
         super(GitShallowTarballNamingTest, self).setUp()
         self.recipe_url = "git://git.openembedded.org/bitbake"
         self.recipe_tarball = "gitshallow_git.openembedded.org.bitbake_82ea737-1_master.tar.gz"
-        self.mirror_url = "git://github.com/openembedded/bitbake.git"
+        self.mirror_url = "git://github.com/openembedded/bitbake.git;protocol=https"
         self.mirror_tarball = "gitshallow_github.com.openembedded.bitbake.git_82ea737-1_master.tar.gz"
 
         self.d.setVar('BB_GIT_SHALLOW', '1')
@@ -620,6 +626,9 @@
         os.makedirs(os.path.join(self.localsrcdir, 'dir', 'subdir'))
         touch(os.path.join(self.localsrcdir, 'dir', 'subdir', 'e'))
         touch(os.path.join(self.localsrcdir, r'backslash\x2dsystemd-unit.device'))
+        bb.process.run('tar cf archive.tar -C dir .', cwd=self.localsrcdir)
+        bb.process.run('tar czf archive.tar.gz -C dir .', cwd=self.localsrcdir)
+        bb.process.run('tar cjf archive.tar.bz2 -C dir .', cwd=self.localsrcdir)
         self.d.setVar("FILESPATH", self.localsrcdir)
 
     def fetchUnpack(self, uris):
@@ -674,6 +683,18 @@
         with self.assertRaises(bb.fetch2.UnpackError):
             self.fetchUnpack(['file://a;subdir=/bin/sh'])
 
+    def test_local_striplevel(self):
+        tree = self.fetchUnpack(['file://archive.tar;subdir=bar;striplevel=1'])
+        self.assertEqual(tree, ['bar/c', 'bar/d', 'bar/subdir/e'])
+
+    def test_local_striplevel_gzip(self):
+        tree = self.fetchUnpack(['file://archive.tar.gz;subdir=bar;striplevel=1'])
+        self.assertEqual(tree, ['bar/c', 'bar/d', 'bar/subdir/e'])
+
+    def test_local_striplevel_bzip2(self):
+        tree = self.fetchUnpack(['file://archive.tar.bz2;subdir=bar;striplevel=1'])
+        self.assertEqual(tree, ['bar/c', 'bar/d', 'bar/subdir/e'])
+
     def dummyGitTest(self, suffix):
         # Create dummy local Git repo
         src_dir = tempfile.mkdtemp(dir=self.tempdir,
@@ -875,17 +896,25 @@
     @skipIfNoNetwork()
     def test_fetch_premirror_specify_downloadfilename_regex_uri(self):
         self.d.setVar("PREMIRRORS", "http://.*/.* https://downloads.yoctoproject.org/releases/bitbake/")
-        fetcher = bb.fetch.Fetch(["http://invalid.yoctoproject.org/releases/bitbake/bitbake-1.0.tar.gz;downloadfilename=bitbake-v1.0.0.tar.gz"], self.d)
+        fetcher = bb.fetch.Fetch(["http://invalid.yoctoproject.org/releases/bitbake/1.0.tar.gz;downloadfilename=bitbake-1.0.tar.gz"], self.d)
         fetcher.download()
-        self.assertEqual(os.path.getsize(self.dldir + "/bitbake-v1.0.0.tar.gz"), 57749)
+        self.assertEqual(os.path.getsize(self.dldir + "/bitbake-1.0.tar.gz"), 57749)
 
     @skipIfNoNetwork()
     # BZ13039
     def test_fetch_premirror_specify_downloadfilename_specific_uri(self):
         self.d.setVar("PREMIRRORS", "http://invalid.yoctoproject.org/releases/bitbake https://downloads.yoctoproject.org/releases/bitbake")
-        fetcher = bb.fetch.Fetch(["http://invalid.yoctoproject.org/releases/bitbake/bitbake-1.0.tar.gz;downloadfilename=bitbake-v1.0.0.tar.gz"], self.d)
+        fetcher = bb.fetch.Fetch(["http://invalid.yoctoproject.org/releases/bitbake/1.0.tar.gz;downloadfilename=bitbake-1.0.tar.gz"], self.d)
         fetcher.download()
-        self.assertEqual(os.path.getsize(self.dldir + "/bitbake-v1.0.0.tar.gz"), 57749)
+        self.assertEqual(os.path.getsize(self.dldir + "/bitbake-1.0.tar.gz"), 57749)
+
+    @skipIfNoNetwork()
+    def test_fetch_premirror_use_downloadfilename_to_fetch(self):
+        # Ensure downloadfilename is used when fetching from premirror.
+        self.d.setVar("PREMIRRORS", "http://.*/.* https://downloads.yoctoproject.org/releases/bitbake")
+        fetcher = bb.fetch.Fetch(["http://invalid.yoctoproject.org/releases/bitbake/bitbake-1.1.tar.gz;downloadfilename=bitbake-1.0.tar.gz"], self.d)
+        fetcher.download()
+        self.assertEqual(os.path.getsize(self.dldir + "/bitbake-1.0.tar.gz"), 57749)
 
     @skipIfNoNetwork()
     def gitfetcher(self, url1, url2):
@@ -996,7 +1025,7 @@
     def test_git_submodule_dbus_broker(self):
         # The following external repositories have show failures in fetch and unpack operations
         # We want to avoid regressions!
-        url = "gitsm://github.com/bus1/dbus-broker;protocol=git;rev=fc874afa0992d0c75ec25acb43d344679f0ee7d2;branch=main"
+        url = "gitsm://github.com/bus1/dbus-broker;protocol=https;rev=fc874afa0992d0c75ec25acb43d344679f0ee7d2;branch=main"
         fetcher = bb.fetch.Fetch([url], self.d)
         fetcher.download()
         # Previous cwd has been deleted
@@ -1012,7 +1041,7 @@
 
     @skipIfNoNetwork()
     def test_git_submodule_CLI11(self):
-        url = "gitsm://github.com/CLIUtils/CLI11;protocol=git;rev=bd4dc911847d0cde7a6b41dfa626a85aab213baf;branch=main"
+        url = "gitsm://github.com/CLIUtils/CLI11;protocol=https;rev=bd4dc911847d0cde7a6b41dfa626a85aab213baf;branch=main"
         fetcher = bb.fetch.Fetch([url], self.d)
         fetcher.download()
         # Previous cwd has been deleted
@@ -1027,12 +1056,12 @@
     @skipIfNoNetwork()
     def test_git_submodule_update_CLI11(self):
         """ Prevent regression on update detection not finding missing submodule, or modules without needed commits """
-        url = "gitsm://github.com/CLIUtils/CLI11;protocol=git;rev=cf6a99fa69aaefe477cc52e3ef4a7d2d7fa40714;branch=main"
+        url = "gitsm://github.com/CLIUtils/CLI11;protocol=https;rev=cf6a99fa69aaefe477cc52e3ef4a7d2d7fa40714;branch=main"
         fetcher = bb.fetch.Fetch([url], self.d)
         fetcher.download()
 
         # CLI11 that pulls in a newer nlohmann-json
-        url = "gitsm://github.com/CLIUtils/CLI11;protocol=git;rev=49ac989a9527ee9bb496de9ded7b4872c2e0e5ca;branch=main"
+        url = "gitsm://github.com/CLIUtils/CLI11;protocol=https;rev=49ac989a9527ee9bb496de9ded7b4872c2e0e5ca;branch=main"
         fetcher = bb.fetch.Fetch([url], self.d)
         fetcher.download()
         # Previous cwd has been deleted
@@ -1046,7 +1075,7 @@
 
     @skipIfNoNetwork()
     def test_git_submodule_aktualizr(self):
-        url = "gitsm://github.com/advancedtelematic/aktualizr;branch=master;protocol=git;rev=d00d1a04cc2366d1a5f143b84b9f507f8bd32c44"
+        url = "gitsm://github.com/advancedtelematic/aktualizr;branch=master;protocol=https;rev=d00d1a04cc2366d1a5f143b84b9f507f8bd32c44"
         fetcher = bb.fetch.Fetch([url], self.d)
         fetcher.download()
         # Previous cwd has been deleted
@@ -1066,7 +1095,7 @@
         """ Prevent regression on deeply nested submodules not being checked out properly, even though they were fetched. """
 
         # This repository also has submodules where the module (name), path and url do not align
-        url = "gitsm://github.com/azure/iotedge.git;protocol=git;rev=d76e0316c6f324345d77c48a83ce836d09392699"
+        url = "gitsm://github.com/azure/iotedge.git;protocol=https;rev=d76e0316c6f324345d77c48a83ce836d09392699"
         fetcher = bb.fetch.Fetch([url], self.d)
         fetcher.download()
         # Previous cwd has been deleted
@@ -1124,7 +1153,7 @@
 
         bb.process.run("svn co %s svnfetch_co" % self.repo_url, cwd=self.tempdir)
         # Github will emulate SVN.  Use this to check if we're downloding...
-        bb.process.run("svn propset svn:externals 'bitbake svn://vcs.pcre.org/pcre2/code' .",
+        bb.process.run("svn propset svn:externals 'bitbake https://github.com/PhilipHazel/pcre2.git' .",
                        cwd=os.path.join(self.tempdir, 'svnfetch_co', 'trunk'))
         bb.process.run("svn commit --non-interactive -m 'Add external'",
                        cwd=os.path.join(self.tempdir, 'svnfetch_co', 'trunk'))
@@ -1242,7 +1271,7 @@
 
     test_git_uris = {
         # version pattern "X.Y.Z"
-        ("mx-1.0", "git://github.com/clutter-project/mx.git;branch=mx-1.4", "9b1db6b8060bd00b121a692f942404a24ae2960f", "")
+        ("mx-1.0", "git://github.com/clutter-project/mx.git;branch=mx-1.4;protocol=https", "9b1db6b8060bd00b121a692f942404a24ae2960f", "")
             : "1.99.4",
         # version pattern "vX.Y"
         # mirror of git.infradead.org since network issues interfered with testing
@@ -1269,9 +1298,9 @@
             : "0.4.3",
         ("build-appliance-image", "git://git.yoctoproject.org/poky", "b37dd451a52622d5b570183a81583cc34c2ff555", r"(?P<pver>(([0-9][\.|_]?)+[0-9]))")
             : "11.0.0",
-        ("chkconfig-alternatives-native", "git://github.com/kergoth/chkconfig;branch=sysroot", "cd437ecbd8986c894442f8fce1e0061e20f04dee", r"chkconfig\-(?P<pver>((\d+[\.\-_]*)+))")
+        ("chkconfig-alternatives-native", "git://github.com/kergoth/chkconfig;branch=sysroot;protocol=https", "cd437ecbd8986c894442f8fce1e0061e20f04dee", r"chkconfig\-(?P<pver>((\d+[\.\-_]*)+))")
             : "1.3.59",
-        ("remake", "git://github.com/rocky/remake.git", "f05508e521987c8494c92d9c2871aec46307d51d", r"(?P<pver>(\d+\.(\d+\.)*\d*(\+dbg\d+(\.\d+)*)*))")
+        ("remake", "git://github.com/rocky/remake.git;protocol=https", "f05508e521987c8494c92d9c2871aec46307d51d", r"(?P<pver>(\d+\.(\d+\.)*\d*(\+dbg\d+(\.\d+)*)*))")
             : "3.82+dbg0.9",
     }
 
@@ -1317,6 +1346,12 @@
         # http://ftp.debian.org/debian/pool/main/d/db5.3/
         ("db", "/berkeley-db/db-5.3.21.tar.gz", "/debian/pool/main/d/db5.3/", r"(?P<name>db5\.3_)(?P<pver>\d+(\.\d+)+).+\.orig\.tar\.xz")
             : "5.3.10",
+        #
+        # packages where the tarball compression changed in the new version
+        #
+        # http://ftp.debian.org/debian/pool/main/m/minicom/minicom_2.7.1.orig.tar.gz
+        ("minicom", "/debian/pool/main/m/minicom/minicom_2.7.1.orig.tar.gz", "", "")
+            : "2.8",
     }
 
     @skipIfNoNetwork()
@@ -1365,9 +1400,6 @@
                       "https://downloads.yoctoproject.org/releases/opkg/opkg-0.1.7.tar.gz",
                       "https://downloads.yoctoproject.org/releases/opkg/opkg-0.3.0.tar.gz",
                       "ftp://sourceware.org/pub/libffi/libffi-1.20.tar.gz",
-                      "http://ftp.gnu.org/gnu/autoconf/autoconf-2.60.tar.gz",
-                      "https://ftp.gnu.org/gnu/chess/gnuchess-5.08.tar.gz",
-                      "https://ftp.gnu.org/gnu/gmp/gmp-4.0.tar.gz",
                       # GitHub releases are hosted on Amazon S3, which doesn't support HEAD
                       "https://github.com/kergoth/tslib/releases/download/1.1/tslib-1.1.tar.xz"
                       ]
@@ -2058,7 +2090,7 @@
 
     @skipIfNoNetwork()
     def test_bitbake(self):
-        self.git('remote add --mirror=fetch origin git://github.com/openembedded/bitbake', cwd=self.srcdir)
+        self.git('remote add --mirror=fetch origin https://github.com/openembedded/bitbake', cwd=self.srcdir)
         self.git('config core.bare true', cwd=self.srcdir)
         self.git('fetch', cwd=self.srcdir)
 
@@ -2149,7 +2181,7 @@
     def test_lfs_enabled(self):
         import shutil
 
-        uri = 'git://%s;protocol=file;subdir=${S};lfs=1' % self.srcdir
+        uri = 'git://%s;protocol=file;lfs=1' % self.srcdir
         self.d.setVar('SRC_URI', uri)
 
         # Careful: suppress initial attempt at downloading until
@@ -2174,7 +2206,7 @@
     def test_lfs_disabled(self):
         import shutil
 
-        uri = 'git://%s;protocol=file;subdir=${S};lfs=0' % self.srcdir
+        uri = 'git://%s;protocol=file;lfs=0' % self.srcdir
         self.d.setVar('SRC_URI', uri)
 
         # In contrast to test_lfs_enabled(), allow the implicit download
@@ -2228,6 +2260,41 @@
             self.assertEqual(ud.clonedir, os.path.join(self.dldir, "git2", ref['gitsrcname']))
             self.assertEqual(ud.fullmirror, os.path.join(self.dldir, "git2_" + ref['gitsrcname'] + '.tar.gz'))
 
+class CrateTest(FetcherTest):
+    def test_crate_url(self):
+
+        uri = "crate://crates.io/glob/0.2.11"
+        self.d.setVar('SRC_URI', uri)
+
+        uris = self.d.getVar('SRC_URI').split()
+        d = self.d
+
+        fetcher = bb.fetch2.Fetch(uris, self.d)
+        fetcher.download()
+        fetcher.unpack(self.tempdir)
+        self.assertEqual(sorted(os.listdir(self.tempdir)), ['cargo_home', 'download' , 'unpacked'])
+        self.assertEqual(sorted(os.listdir(self.tempdir + "/download")), ['glob-0.2.11.crate', 'glob-0.2.11.crate.done'])
+        self.assertTrue(os.path.exists(self.tempdir + "/cargo_home/bitbake/glob-0.2.11/.cargo-checksum.json"))
+        self.assertTrue(os.path.exists(self.tempdir + "/cargo_home/bitbake/glob-0.2.11/src/lib.rs"))
+
+    def test_crate_url_multi(self):
+
+        uri = "crate://crates.io/glob/0.2.11 crate://crates.io/time/0.1.35"
+        self.d.setVar('SRC_URI', uri)
+
+        uris = self.d.getVar('SRC_URI').split()
+        d = self.d
+
+        fetcher = bb.fetch2.Fetch(uris, self.d)
+        fetcher.download()
+        fetcher.unpack(self.tempdir)
+        self.assertEqual(sorted(os.listdir(self.tempdir)), ['cargo_home', 'download' , 'unpacked'])
+        self.assertEqual(sorted(os.listdir(self.tempdir + "/download")), ['glob-0.2.11.crate', 'glob-0.2.11.crate.done', 'time-0.1.35.crate', 'time-0.1.35.crate.done'])
+        self.assertTrue(os.path.exists(self.tempdir + "/cargo_home/bitbake/glob-0.2.11/.cargo-checksum.json"))
+        self.assertTrue(os.path.exists(self.tempdir + "/cargo_home/bitbake/glob-0.2.11/src/lib.rs"))
+        self.assertTrue(os.path.exists(self.tempdir + "/cargo_home/bitbake/time-0.1.35/.cargo-checksum.json"))
+        self.assertTrue(os.path.exists(self.tempdir + "/cargo_home/bitbake/time-0.1.35/src/lib.rs"))
+
 class NPMTest(FetcherTest):
     def skipIfNoNpm():
         import shutil
diff --git a/poky/bitbake/lib/bb/tests/runqueue.py b/poky/bitbake/lib/bb/tests/runqueue.py
index 5b6ada8..35d5a84 100644
--- a/poky/bitbake/lib/bb/tests/runqueue.py
+++ b/poky/bitbake/lib/bb/tests/runqueue.py
@@ -29,9 +29,10 @@
     def run_bitbakecmd(self, cmd, builddir, sstatevalid="", slowtasks="", extraenv=None, cleanup=False):
         env = os.environ.copy()
         env["BBPATH"] = os.path.realpath(os.path.join(os.path.dirname(__file__), "runqueue-tests"))
-        env["BB_ENV_EXTRAWHITE"] = "SSTATEVALID SLOWTASKS"
+        env["BB_ENV_EXTRAWHITE"] = "SSTATEVALID SLOWTASKS TOPDIR"
         env["SSTATEVALID"] = sstatevalid
         env["SLOWTASKS"] = slowtasks
+        env["TOPDIR"] = builddir
         if extraenv:
             for k in extraenv:
                 env[k] = extraenv[k]
@@ -58,6 +59,8 @@
             expected = ['a1:' + x for x in self.alltasks]
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_single_setscenevalid(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "a1"]
@@ -68,6 +71,8 @@
                         'a1:populate_sysroot', 'a1:build']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_intermediate_setscenevalid(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "a1"]
@@ -77,6 +82,8 @@
                         'a1:populate_sysroot_setscene', 'a1:build']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_intermediate_notcovered(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "a1"]
@@ -86,6 +93,8 @@
                         'a1:package_qa_setscene', 'a1:build', 'a1:populate_sysroot_setscene']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_all_setscenevalid(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "a1"]
@@ -95,6 +104,8 @@
                         'a1:package_qa_setscene', 'a1:build', 'a1:populate_sysroot_setscene']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_no_settasks(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "a1", "-c", "patch"]
@@ -103,6 +114,8 @@
             expected = ['a1:fetch', 'a1:unpack', 'a1:patch']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_mix_covered_notcovered(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "a1:do_patch", "a1:do_populate_sysroot"]
@@ -111,6 +124,7 @@
             expected = ['a1:fetch', 'a1:unpack', 'a1:patch', 'a1:populate_sysroot_setscene']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
 
     # Test targets with intermediate setscene tasks alongside a target with no intermediate setscene tasks
     def test_mixed_direct_tasks_setscene_tasks(self):
@@ -122,6 +136,8 @@
                         'a1:package_qa_setscene', 'a1:build', 'a1:populate_sysroot_setscene']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     # This test slows down the execution of do_package_setscene until after other real tasks have
     # started running which tests for a bug where tasks were being lost from the buildable list of real
     # tasks if they weren't in tasks_covered or tasks_notcovered
@@ -136,6 +152,8 @@
                         'a1:populate_sysroot', 'a1:build']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_setscenewhitelist(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "a1"]
@@ -149,6 +167,8 @@
                         'a1:populate_sysroot_setscene', 'a1:package_setscene']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     # Tests for problems with dependencies between setscene tasks
     def test_no_setscenevalid_harddeps(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
@@ -162,6 +182,8 @@
                         'd1:populate_sysroot', 'd1:build']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_no_setscenevalid_withdeps(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "b1"]
@@ -172,6 +194,8 @@
             expected.remove('a1:package_qa')
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_single_a1_setscenevalid_withdeps(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "b1"]
@@ -182,6 +206,8 @@
                         'a1:populate_sysroot'] + ['b1:' + x for x in self.alltasks]
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_single_b1_setscenevalid_withdeps(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "b1"]
@@ -193,6 +219,8 @@
             expected.remove('b1:package')
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_intermediate_setscenevalid_withdeps(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "b1"]
@@ -203,6 +231,8 @@
             expected.remove('b1:package')
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_all_setscenevalid_withdeps(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             cmd = ["bitbake", "b1"]
@@ -213,6 +243,8 @@
                         'b1:packagedata_setscene', 'b1:package_qa_setscene', 'b1:populate_sysroot_setscene']
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_multiconfig_setscene_optimise(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             extraenv = {
@@ -232,6 +264,8 @@
                 expected.remove(x)
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_multiconfig_bbmask(self):
         # This test validates that multiconfigs can independently mask off
         # recipes they do not want with BBMASK. It works by having recipes
@@ -248,6 +282,8 @@
             cmd = ["bitbake", "mc:mc-1:fails-mc2", "mc:mc_2:fails-mc1"]
             self.run_bitbakecmd(cmd, tempdir, "", extraenv=extraenv)
 
+            self.shutdown(tempdir)
+
     def test_multiconfig_mcdepends(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             extraenv = {
@@ -278,6 +314,8 @@
                        ["mc_2:a1:%s" % t for t in rerun_tasks]
             self.assertEqual(set(tasks), set(expected))
 
+            self.shutdown(tempdir)
+
     def test_hashserv_single(self):
         with tempfile.TemporaryDirectory(prefix="runqueuetest") as tempdir:
             extraenv = {
@@ -358,7 +396,6 @@
 
     def shutdown(self, tempdir):
         # Wait for the hashserve socket to disappear else we'll see races with the tempdir cleanup
-        while (os.path.exists(tempdir + "/hashserve.sock") or os.path.exists(tempdir + "cache/hashserv.db-wal")):
+        while (os.path.exists(tempdir + "/hashserve.sock") or os.path.exists(tempdir + "cache/hashserv.db-wal") or os.path.exists(tempdir + "/bitbake.lock")):
             time.sleep(0.5)
 
-
diff --git a/poky/bitbake/lib/bb/ui/buildinfohelper.py b/poky/bitbake/lib/bb/ui/buildinfohelper.py
index 43aa592..835e92c 100644
--- a/poky/bitbake/lib/bb/ui/buildinfohelper.py
+++ b/poky/bitbake/lib/bb/ui/buildinfohelper.py
@@ -483,11 +483,11 @@
 
             # we already created the root directory, so ignore any
             # entry for it
-            if len(path) == 0:
+            if not path:
                 continue
 
             parent_path = "/".join(path.split("/")[:len(path.split("/")) - 1])
-            if len(parent_path) == 0:
+            if not parent_path:
                 parent_path = "/"
             parent_obj = self._cached_get(Target_File, target = target_obj, path = parent_path, inodetype = Target_File.ITYPE_DIRECTORY)
             tf_obj = Target_File.objects.create(
@@ -571,7 +571,7 @@
         assert isinstance(build_obj, Build)
         assert isinstance(target_obj, Target)
 
-        errormsg = ""
+        errormsg = []
         for p in packagedict:
             # Search name swtiches round the installed name vs package name
             # by default installed name == package name
@@ -633,10 +633,10 @@
                         packagefile_objects.append(Package_File( package = packagedict[p]['object'],
                             path = targetpath,
                             size = targetfilesize))
-                    if len(packagefile_objects):
+                    if packagefile_objects:
                         Package_File.objects.bulk_create(packagefile_objects)
                 except KeyError as e:
-                    errormsg += "  stpi: Key error, package %s key %s \n" % ( p, e )
+                    errormsg.append("  stpi: Key error, package %s key %s \n" % (p, e))
 
             # save disk installed size
             packagedict[p]['object'].installed_size = packagedict[p]['size']
@@ -673,13 +673,13 @@
                     logger.warning("Could not add dependency to the package %s "
                                    "because %s is an unknown package", p, px)
 
-        if len(packagedeps_objs) > 0:
+        if packagedeps_objs:
             Package_Dependency.objects.bulk_create(packagedeps_objs)
         else:
             logger.info("No package dependencies created")
 
-        if len(errormsg) > 0:
-            logger.warning("buildinfohelper: target_package_info could not identify recipes: \n%s", errormsg)
+        if errormsg:
+            logger.warning("buildinfohelper: target_package_info could not identify recipes: \n%s", "".join(errormsg))
 
     def save_target_image_file_information(self, target_obj, file_name, file_size):
         Target_Image_File.objects.create(target=target_obj,
@@ -767,7 +767,7 @@
             packagefile_objects.append(Package_File( package = bp_object,
                                         path = path,
                                         size = package_info['FILES_INFO'][path] ))
-        if len(packagefile_objects):
+        if packagefile_objects:
             Package_File.objects.bulk_create(packagefile_objects)
 
         def _po_byname(p):
@@ -809,7 +809,7 @@
                 packagedeps_objs.append(Package_Dependency(  package = bp_object,
                     depends_on = _po_byname(p), dep_type = Package_Dependency.TYPE_RCONFLICTS))
 
-        if len(packagedeps_objs) > 0:
+        if packagedeps_objs:
             Package_Dependency.objects.bulk_create(packagedeps_objs)
 
         return bp_object
@@ -826,7 +826,7 @@
                     desc = vardump[root_var]['doc']
             if desc is None:
                 desc = ''
-            if len(desc):
+            if desc:
                 HelpText.objects.get_or_create(build=build_obj,
                                                area=HelpText.VARIABLE,
                                                key=k, text=desc)
@@ -846,7 +846,7 @@
                                 file_name = vh['file'],
                                 line_number = vh['line'],
                                 operation = vh['op']))
-                if len(varhist_objects):
+                if varhist_objects:
                     VariableHistory.objects.bulk_create(varhist_objects)
 
 
@@ -1069,7 +1069,7 @@
         for t in self.internal_state['targets']:
             buildname = self.internal_state['build'].build_name
             pe, pv = task_object.recipe.version.split(":",1)
-            if len(pe) > 0:
+            if pe:
                 package = task_object.recipe.name + "-" + pe + "_" + pv
             else:
                 package = task_object.recipe.name + "-" + pv
@@ -1404,7 +1404,7 @@
         assert 'pn' in event._depgraph
         assert 'tdepends' in event._depgraph
 
-        errormsg = ""
+        errormsg = []
 
         # save layer version priorities
         if 'layer-priorities' in event._depgraph.keys():
@@ -1496,7 +1496,7 @@
                 elif dep in self.internal_state['recipes']:
                     dependency = self.internal_state['recipes'][dep]
                 else:
-                    errormsg += "  stpd: KeyError saving recipe dependency for %s, %s \n" % (recipe, dep)
+                    errormsg.append("  stpd: KeyError saving recipe dependency for %s, %s \n" % (recipe, dep))
                     continue
                 recipe_dep = Recipe_Dependency(recipe=target,
                                                depends_on=dependency,
@@ -1537,8 +1537,8 @@
                 taskdeps_objects.append(Task_Dependency( task = target, depends_on = dep ))
         Task_Dependency.objects.bulk_create(taskdeps_objects)
 
-        if len(errormsg) > 0:
-            logger.warning("buildinfohelper: dependency info not identify recipes: \n%s", errormsg)
+        if errormsg:
+            logger.warning("buildinfohelper: dependency info not identify recipes: \n%s", "".join(errormsg))
 
 
     def store_build_package_information(self, event):
@@ -1618,7 +1618,7 @@
 
         if 'backlog' in self.internal_state:
             # if we have a backlog of events, do our best to save them here
-            if len(self.internal_state['backlog']):
+            if self.internal_state['backlog']:
                 tempevent = self.internal_state['backlog'].pop()
                 logger.debug("buildinfohelper: Saving stored event %s "
                              % tempevent)
diff --git a/poky/bitbake/lib/bb/ui/uievent.py b/poky/bitbake/lib/bb/ui/uievent.py
index 8607d05..e19c770 100644
--- a/poky/bitbake/lib/bb/ui/uievent.py
+++ b/poky/bitbake/lib/bb/ui/uievent.py
@@ -73,13 +73,13 @@
 
         self.eventQueueLock.acquire()
 
-        if len(self.eventQueue) == 0:
+        if not self.eventQueue:
             self.eventQueueLock.release()
             return None
 
         item = self.eventQueue.pop(0)
 
-        if len(self.eventQueue) == 0:
+        if not self.eventQueue:
             self.eventQueueNotify.clear()
 
         self.eventQueueLock.release()
diff --git a/poky/bitbake/lib/bb/utils.py b/poky/bitbake/lib/bb/utils.py
index 7063491..0312231 100644
--- a/poky/bitbake/lib/bb/utils.py
+++ b/poky/bitbake/lib/bb/utils.py
@@ -16,7 +16,8 @@
 import multiprocessing
 import fcntl
 import importlib
-from importlib import machinery
+import importlib.machinery
+import importlib.util
 import itertools
 import subprocess
 import glob
@@ -26,6 +27,7 @@
 import signal
 import collections
 import copy
+import ctypes
 from subprocess import getstatusoutput
 from contextlib import contextmanager
 from ctypes import cdll
@@ -451,6 +453,10 @@
     consider the possibility of sending a signal to the process to break
     out - at which point you want block=True rather than retry=True.
     """
+    if len(name) > 255:
+        root, ext = os.path.splitext(name)
+        name = root[:255 - len(ext)] + ext
+
     dirname = os.path.dirname(name)
     mkdirhier(dirname)
 
@@ -487,7 +493,7 @@
                     return lf
             lf.close()
         except OSError as e:
-            if e.errno == errno.EACCES:
+            if e.errno == errno.EACCES or e.errno == errno.ENAMETOOLONG:
                 logger.error("Unable to acquire lock '%s', %s",
                              e.strerror, name)
                 sys.exit(1)
@@ -1590,6 +1596,36 @@
     except:
         pass
 
+def disable_network(uid=None, gid=None):
+    """
+    Disable networking in the current process if the kernel supports it, else
+    just return after logging to debug. To do this we need to create a new user
+    namespace, then map back to the original uid/gid.
+    """
+    libc = ctypes.CDLL('libc.so.6')
+
+    # From sched.h
+    # New user namespace
+    CLONE_NEWUSER = 0x10000000
+    # New network namespace
+    CLONE_NEWNET = 0x40000000
+
+    if uid is None:
+        uid = os.getuid()
+    if gid is None:
+        gid = os.getgid()
+
+    ret = libc.unshare(CLONE_NEWNET | CLONE_NEWUSER)
+    if ret != 0:
+        logger.debug("System doesn't suport disabling network without admin privs")
+        return
+    with open("/proc/self/uid_map", "w") as f:
+        f.write("%s %s 1" % (uid, uid))
+    with open("/proc/self/setgroups", "w") as f:
+        f.write("deny")
+    with open("/proc/self/gid_map", "w") as f:
+        f.write("%s %s 1" % (gid, gid))
+
 def export_proxies(d):
     """ export common proxies variables from datastore to environment """
     import os
@@ -1616,7 +1652,9 @@
         logger.debug('Loading plugin %s' % name)
         spec = importlib.machinery.PathFinder.find_spec(name, path=[pluginpath] )
         if spec:
-            return spec.loader.load_module()
+            mod = importlib.util.module_from_spec(spec)
+            spec.loader.exec_module(mod)
+            return mod
 
     logger.debug('Loading plugins from %s...' % pluginpath)
 
diff --git a/poky/bitbake/lib/pyinotify.py b/poky/bitbake/lib/pyinotify.py
index 6ae40a2..8c94b3e 100644
--- a/poky/bitbake/lib/pyinotify.py
+++ b/poky/bitbake/lib/pyinotify.py
@@ -52,7 +52,6 @@
 from datetime import datetime, timedelta
 import time
 import re
-import asyncore
 import glob
 import locale
 import subprocess
@@ -1475,35 +1474,6 @@
         self.loop()
 
 
-class AsyncNotifier(asyncore.file_dispatcher, Notifier):
-    """
-    This notifier inherits from asyncore.file_dispatcher in order to be able to
-    use pyinotify along with the asyncore framework.
-
-    """
-    def __init__(self, watch_manager, default_proc_fun=None, read_freq=0,
-                 threshold=0, timeout=None, channel_map=None):
-        """
-        Initializes the async notifier. The only additional parameter is
-        'channel_map' which is the optional asyncore private map. See
-        Notifier class for the meaning of the others parameters.
-
-        """
-        Notifier.__init__(self, watch_manager, default_proc_fun, read_freq,
-                          threshold, timeout)
-        asyncore.file_dispatcher.__init__(self, self._fd, channel_map)
-
-    def handle_read(self):
-        """
-        When asyncore tells us we can read from the fd, we proceed processing
-        events. This method can be overridden for handling a notification
-        differently.
-
-        """
-        self.read_events()
-        self.process_events()
-
-
 class TornadoAsyncNotifier(Notifier):
     """
     Tornado ioloop adapter.