subtree updates openembedded poky

meta-openembedded: 491b7592f4..eff1b182c1:
  Alejandro Hernandez Samaniego (1):
        emacs: update to 29.1

  Archana Polampalli (2):
        python3-pyroute2: fix ptest failure
        nodejs: upgrade 18.17.0 -> 18.17.1

  Bartosz Golaszewski (1):
        libgpiod: update to v2.0.2

  Beniamin Sandu (3):
        unbound: upgrade 1.17.1 -> 1.18.0
        mbedtls: upgrade 3.4.0 -> 3.4.1
        mbedtls: upgrade 2.28.3 -> 2.28.4

  Benjamin Bara (3):
        libvpx: fix VPXTARGET for non-neon armv7a
        ne10: set incompatible for armv7 without neon
        openh264: make neon optional and disable if not supported

  Chaitanya Vadrevu (1):
        bolt: Add recipe

  Chen Qi (2):
        spice-protocol: fix populate_sdk error when spice is installed
        python3-blivetgui: switch from master to main

  Christophe Vu-Brugier (1):
        sg3-utils: upgrade 1.47 -> 1.48

  Danik (2):
        python3-gspread: interface for google spreadsheet
        python3-piccata: piccata - a simple CoAP toolkit added

  Denys Zagorui (1):
        bpftool: add native and nativesdk support

  Emil Kronborg Andersen (3):
        lcms: add CVE_PRODUCT
        snappy: add CVE_PRODUCT
        libopus: add CVE_PRODUCT

  Enrico Jorns (1):
        microcom: add new recipe

  Ewa Kujawska (1):
        python3-oauth2client_4.1.2.bb: recipe added

  Frieder Schrempf (1):
        python3-can: Add missing runtime dependencies

  Gianfranco Costamagna (1):
        dlt-daemon: upgrade 2.18.9 -> 2.18.10 (commit: 0f2d4cfffada6f8448a2cb27995b38eb4271044f)

  Joe Slater (1):
        python3-inotify: fix tests

  Justin Bronder (5):
        python3-mypy-extensions: upgrade 0.4.3 -> 1.0.0
        python3-types-setuptools: add 68.0.0.3
        python3-typed-ast: remove EOL package
        python3-types-psutil: add 5.9.5.16
        python3-mypy: upgrade 0.971 -> 1.5.0

  Kai Kang (1):
        libmcrypt: fix multilib conflict

  Khem Raj (31):
        qad: Fix build with clang
        python3-dominate: Fix get_thread_context ptest on musl
        perfetto: Add SRCREV_FORMAT
        gosu: Define SRCREV_FORMAT
        libsdl2-ttf: Define SRCREV_FORMAT
        gosu: Define SRCREV_FORMAT
        sysdig: Add SRCREV_FORMAT
        cockpit: Upgrade to 298 release
        librelp: Fix function prototypes in tests
        jemalloc: Unbolt clang workaroud
        python3-protobuf: Fix build errors seen with clang
        mariadb: Fix build with libfmt 10.1+
        librelp: Add packageconfigs for TLS implementations
        librelp: Fix ptests builds on musl
        librelp: Fix ptest installs to work with dash
        librelp: Add to meta-oe ptest image
        liburing: Upgrade to 2.4 release
        rsyslog: Enable openssl transport by default
        libio-socket-ssl-perl: Upgrade to 2.083
        libfaketime: Fix build with clang
        libfaketime: Eanable LFS64 on musl
        python3-lz4: Drop using PYTHON_PN
        python3-lz4: Add missing rdeps needed for ptests
        rsyslog: Skip failing omfile-outchannel test on musl
        python3-m2crypto: Append architecture to SWIG_FEATURES instead of overriding
        networkmanager: Fix build on musl
        network-manager-applet: Fix build with musl/lld linker
        networkmanager-openvpn: Fix build with lld on musl
        openconnect: Upgrade to 9.12
        openconnect: Fix build with GnuTLS v3.8.1
        fontforge: Fix build with gettext 0.22

  Kirk Hays (1):
        jack: Drop dependency on readline

  Leon Anavi (2):
        aml: add new recipe
        neatvnc: add new recipe

  Marek Vasut (2):
        libiio: Use tagged v0.25
        libiio: Rename to versioned recipe filename

  Marine Vovard (1):
        python3-kivy: Require X11 or Wayland in DISTRO_FEATURES

  Mark Hatle (1):
        kconfig-frontends: Avoid using hard coded /usr/include paths

  Markus Volk (28):
        gvfs: update 1.51.1 -> 1.51.90
        gnome-themes-extra: fix datadir path
        libnice: add graphviz-native dependency
        libcanberra: fix api-documentation build
        libgweather4: fix api-documentation build
        appstream: disable docs
        gtksourceview5: fix api-documentation build
        libpeas: fix api-documentation build
        nautilus: fix api-documentation build
        evince: fix api-documentation build
        usbids: add recipe
        libcacard: add recipe
        usbredir: upgrade 0.9.0 -> 0.13.0
        spice: upgrade 0.14.2 -> 0.15.2
        gnome-remote-desktop: add recipe
        libosinfo: add recipe
        gnome-boxes: add recipe
        pipewire: upgrade 0.3.77 -> 0.3.78
        spice-gtk: fix api-documentation build
        flatpak: fix api-documentation build
        phodav: add recipe
        libdecor: update to latest commit
        spice-guest-vdagent: add recipe
        pipewire: upgrade 0.3.78 -> 0.3.79
        spice: add missing dependency on orc
        spice-guest-vdagent: add missing dependencies
        libosinfo: build vapi only if gobject-introspection is enabled
        gnome-boxes: remove dependency on ovmf

  Martin Jansa (12):
        openh264: fix installed-vs-shared QA issue with multilib
        libfaketime: simplify packaging
        json-schema-validator: restore 0004-cmake-Use-GNUInstallDirs.patch
        phodav: make sure systemd files are packaged correctly
        sysbench: avoid -L/usr/lib32 and configure-unsafe QA issue
        mongodb: enable hardware crc32 only with crc in TUNE_FEATURES
        khronos-cts.inc: respect MLPREFIX when appending DEPENDS with anonymous python
        libcyusbserial: fix installed-vs-shipped QA issue with multilib
        tcpreplay: fix pcap detection with /usr/lib32 multilib
        libiio: use main branch instead of master
        webkitgtk: explicitly disable JIT for armv7* with softfp
        layer.conf: update LAYERSERIES_COMPAT for nanbield

  Ming Liu (1):
        libusbgx: usbgx.service: use Type=oneshot

  Mingli Yu (4):
        mariadb: Upgrade to 10.11.5
        dialog: Update the SRC_URI
        gnulib: Update SRC_URI
        thrift: Remove buildpaths

  Nicolas Marguet (1):
        librelp: add ptest

  Parian Golchin (1):
        json-schema-validator: Updrade to 2.2.0

  Pawel Langowski (1):
        qcbor: add recipe

  Petr Chernikov (1):
        Fix empty 0.0.0-0-g0 jemalloc version by adding --with-version

  Petr Gotthard (1):
        python3-sdbus: add recipe

  Robert Yang (1):
        frr: Fix CVE-2023-41358 and CVE-2023-41360

  Roger Knecht (1):
        python3-schedule: add recipe

  Roland Hieber (1):
        fbida: update Upstream-Status for submitted patches

  Ross Burton (1):
        Revert "protobuf: stage protoc binary to sysroot"

  Soumya (1):
        yasm: fix CVE-2023-37732

  Soumya Sambu (1):
        krb5: Upgrade 1.20.1 -> 1.20.2

  Sourav Kumar Pramanik (1):
        meta-oe-components: Avoid usage of nobranch=1

  Sourav Pramanik (2):
        rapidjson: Avoid usage of nobranch=1
        nlohmann-json: Avoid usage of nobranch=1

  Stanislav Angelovic (1):
        feat: bump sdbus-c++ up to v1.3.0

  Sudip Mukherjee (1):
        qad: Add initial recipe

  Trevor Gamblin (1):
        python3-kivy: fix filename

  Tymoteusz Burak (2):
        ttf-google-fira: add recipe
        libfaketime: add recipe

  Vincent Davis Jr (1):
        cglm: upgrade v0.8.9 -> v0.9.1

  Wang Mingyu (108):
        libcloudproviders: upgrade 0.3.1 -> 0.3.2
        chrony: upgrade 4.3 -> 4.4
        networkmanager: upgrade 1.42.8 -> 1.44.0
        weechat: upgrade 4.0.2 -> 4.0.3
        ctags: upgrade 6.0.20230730.0 -> 6.0.20230813.0
        fmt: upgrade 10.0.0 -> 10.1.0
        gensio: upgrade 2.6.7 -> 2.7.2
        googletest: upgrade 1.13.0 -> 1.14.0
        lvgl: upgrade 8.3.8 -> 8.3.9
        postgresql: upgrade 15.3 -> 15.4
        smartmontools: upgrade 7.3 -> 7.4
        xdg-dbus-proxy: upgrade 0.1.4 -> 0.1.5
        yaml-cpp: upgrade 0.7.0 -> 0.8.0
        libtest-harness-perl: upgrade 3.44 -> 3.47
        python3-alembic: upgrade 1.11.1 -> 1.11.2
        python3-async-timeout: upgrade 4.0.2 -> 4.0.3
        python3-bitarray: upgrade 2.8.0 -> 2.8.1
        python3-cmake: upgrade 3.27.0 -> 3.27.2
        python3-coverage: upgrade 7.2.7 -> 7.3.0
        python3-dnspython: upgrade 2.4.1 -> 2.4.2
        python3-google-api-python-client: upgrade 2.95.0 -> 2.96.0
        python3-googleapis-common-protos: upgrade 1.59.1 -> 1.60.0
        python3-joblib: upgrade 1.3.1 -> 1.3.2
        python3-luma-oled: upgrade 3.12.0 -> 3.13.0
        python3-platformdirs: upgrade 3.9.1 -> 3.10.0
        python3-pycodestyle: upgrade 2.10.0 -> 2.11.0
        python3-pyflakes: upgrade 3.0.1 -> 3.1.0
        python3-pymisp: upgrade 2.4.173 -> 2.4.174
        python3-rdflib: upgrade 6.3.2 -> 7.0.0
        python3-regex: upgrade 2023.6.3 -> 2023.8.8
        python3-rich: upgrade 13.4.2 -> 13.5.2
        python3-sh: upgrade 2.0.4 -> 2.0.6
        python3-tox: upgrade 4.6.4 -> 4.8.0
        python3-tqdm: upgrade 4.65.0 -> 4.66.1
        python3-uefi-firmware: upgrade 1.10 -> 1.11
        python3-virtualenv: upgrade 20.24.2 -> 20.24.3
        python3-web3: upgrade 6.7.0 -> 6.8.0
        python3-yamlloader: upgrade 1.2.2 -> 1.3.2
        python3-zeroconf: upgrade 0.71.4 -> 0.76.0
        python3-protobuf: upgrade 4.23.4 -> 4.24.0
        ctags: upgrade 6.0.20230813.0 -> 6.0.20230820.0
        debootstrap: upgrade 1.0.128 -> 1.0.131
        gensio: upgrade 2.7.2 -> 2.7.4
        gnome-bluetooth: upgrade 42.5 -> 42.6
        nginx: upgrade 1.25.1 -> 1.25.2
        geary: update 44.0 -> 44.1
        php: upgrade 8.2.8 -> 8.2.9
        python3-redis: upgrade 4.6.0 -> 5.0.0
        python3-alembic: upgrade 1.11.2 -> 1.11.3
        python3-awesomeversion: upgrade 23.5.0 -> 23.8.0
        python3-bitstring: upgrade 4.0.2 -> 4.1.0
        python3-click: upgrade 8.1.6 -> 8.1.7
        python3-engineio: upgrade 4.5.1 -> 4.6.0
        python3-google-api-python-client: upgrade 2.96.0 -> 2.97.0
        python3-humanize: upgrade 4.7.0 -> 4.8.0
        python3-mypy: upgrade 1.5.0 -> 1.5.1
        python3-oauth2client: upgrade 4.1.2 -> 4.1.3
        python3-protobuf: upgrade 4.24.0 -> 4.24.1
        python3-pycocotools: upgrade 2.0.6 -> 2.0.7
        python3-pymetno: upgrade 0.10.0 -> 0.11.0
        python3-pymongo: upgrade 4.4.1 -> 4.5.0
        python3-pywbem: upgrade 1.6.1 -> 1.6.2
        python3-sqlalchemy: upgrade 2.0.19 -> 2.0.20
        python3-tox: upgrade 4.8.0 -> 4.10.0
        python3-typeguard: upgrade 4.1.0 -> 4.1.2
        python3-types-setuptools: upgrade 68.0.0.3 -> 68.1.0.0
        python3-zeroconf: upgrade 0.76.0 -> 0.82.1
        redis: upgrade 7.0.12 -> 7.2.0
        weechat: upgrade 4.0.3 -> 4.0.4
        traceroute: upgrade 2.1.2 -> 2.1.3
        wireshark: upgrade 4.0.7 -> 4.0.8
        adw-gtk3: upgrade 4.8 -> 4.9
        ctags: upgrade 6.0.20230820.0 -> 6.0.20230827.0
        debootstrap: upgrade 1.0.131 -> 1.0.132
        dialog: upgrade 1.3-20210509 -> 1.3-20230209
        fmt: upgrade 10.1.0 -> 10.1.1
        gensio: upgrade 2.7.4 -> 2.7.5
        iwd: upgrade 2.7 -> 2.8
        libgphoto2: upgrade 2.5.30 -> 2.5.31
        libzip: upgrade 1.10.0 -> 1.10.1
        logwatch: upgrade 7.8 -> 7.9
        thrift: upgrade 0.18.1 -> 0.19.0
        libnet-dns-perl: upgrade 1.39 -> 1.40
        python3-alembic: upgrade 1.11.3 -> 1.12.0
        python3-argh: upgrade 0.28.1 -> 0.29.3
        python3-asttokens: upgrade 2.2.1 -> 2.4.0
        python3-bitstring: upgrade 4.1.0 -> 4.1.1
        python3-cmake: upgrade 3.27.2 -> 3.27.4.1
        python3-diskcache: upgrade 5.6.1 -> 5.6.3
        python3-engineio: upgrade 4.6.0 -> 4.7.0
        python3-imageio: upgrade 2.31.1 -> 2.31.3
        python3-ipython: upgrade 8.14.0 -> 8.15.0
        python3-kiwisolver: upgrade 1.4.4 -> 1.4.5
        python3-langtable: upgrade 0.0.62 -> 0.0.63
        python3-luma-core: upgrade 2.4.0 -> 2.4.1
        python3-protobuf: upgrade 4.24.1 -> 4.24.2
        python3-pymisp: upgrade 2.4.174 -> 2.4.175
        python3-pymodbus: upgrade 3.4.1 -> 3.5.0
        python3-smbus2: upgrade 0.4.2 -> 0.4.3
        python3-snagboot: upgrade 1.1 -> 1.2
        python3-socketio: upgrade 5.8.0 -> 5.9.0
        python3-soupsieve: upgrade 2.4.1 -> 2.5
        python3-tox: upgrade 4.10.0 -> 4.11.1
        python3-typeguard: upgrade 4.1.2 -> 4.1.3
        python3-types-setuptools: upgrade 68.1.0.0 -> 68.1.0.1
        python3-virtualenv: upgrade 20.24.3 -> 20.24.4
        python3-web3: upgrade 6.8.0 -> 6.9.0
        python3-zeroconf: upgrade 0.82.1 -> 0.97.0

  Willy Tu (1):
        abseil-cpp: upgrade 20230125.3 -> 20230802.0

  Yi Zhao (7):
        nftables: upgrade 1.0.7 -> 1.0.8
        libssh: upgrade 0.10.4 -> 0.10.5
        samba: upgrade 4.18.5 -> 4.18.6
        libyang: upgrade 2.1.55 -> 2.1.111
        frr: Security fix CVE-2023-3748
        vsomeip: add recipe
        ntp: add missing runtime dependencies

  Yogita Urade (2):
        poppler: fix CVE-2023-34872
        hwloc: fix CVE-2022-47022

  Βούλγαρη Αικατερίνη (1):
        collectd: build with rrdcached plugin

poky: 71282bbc53..61531cd395:
  Adrian Freihofer (2):
        cmake.bbclass: cleanup spaces and tabs
        cmake.bbclass: refactor cmake args

  Alberto Planas (1):
        bitbake.conf: add bunzip2 in HOSTTOOLS

  Alexander Kanavin (18):
        lib/oe/recipeutils.py: accommodate SRCPV being optional and deprecated in version check regex
        python3-sphinx: correct version check
        systemd-bootchart: musl fixes have been rejected upstream
        openssl: build and install manpages only if they are enabled
        gettext: upgrade 0.21.1 -> 0.22
        connman: update 1.41 -> 1.42
        libcgroup: update 3.0.0 -> 3.1.0
        perlcross: update 1.4.1 -> 1.5
        perl: update 5.36.1 -> 5.38.0
        groff: update 1.22.4 -> 1.23.0
        libglu: update 9.0.2 -> 9.0.3
        libpthread-stubs: update 0.4 -> 0.5
        gpgme: upgrade 1.20.0 -> 1.22.0
        libgudev: upgrade 237 -> 238
        gnupg: upgrade 2.4.2 -> 2.4.3
        gnutls: update 3.8.0 -> 3.8.1
        runqemu: check permissions of available render nodes as well as their presence
        build-sysroots: target or native sysroot population need to be selected explicitly

  Alexis Lothoré (7):
        oeqa/utils/gitarchive: fix tag computation when creating archive
        oeqa/selftest: introduce gitarchive tests
        oeqa/utils/gitarchive: fix tag computation when creating archive
        oeqa/selftest/gitarchive: add tests about tags lisiting when no remote is configured
        oeqa/utils/gitarchive: allow to pass a logger to get_tags
        oeqa/utils/gitarchive: fall back to local tags when listing existing tags
        oeqa/utils/gitarchive: replace warning with info when reading local tags

  Angelo Ribeiro (1):
        ccache.bbclass: Add allowed list for native recipes

  Anuj Mittal (3):
        gstreamer1.0: upgrade 1.22.4 -> 1.22.5
        harfbuzz: upgrade 8.0.1 -> 8.1.1
        stress-ng: upgrade 0.15.08 -> 0.16.04

  Archana Polampalli (1):
        vim: upgrade 9.0.1592 -> 9.0.1664

  Benjamin Bara (6):
        rust-target-config: fix target_features for vfpv3d16
        README: fix mail address in git example command
        pixman: avoid neon on unsupported machines
        nettle: avoid neon on unsupported machines
        ffmpeg: avoid neon on unsupported machines
        ghostscript: avoid neon on unsupported machines

  Bruce Ashfield (19):
        conf/machine: set preferred kernel to be 6.4
        poky/poky-tiny: set preferred linux-yocto version to 6.4
        linux-yocto/6.1: update to v6.1.44
        linux-yocto/6.4: update to v6.4.10
        linux-yocto/6.1: update to v6.1.45
        kern-tools: include utility to post process config diffs
        linux-yocto/6.1: fix uninitialized read in nohz_full/isolcpus setup
        linux-yocto/6.4: fix uninitialized read in nohz_full/isolcpus setup
        linux-yocto/6.4: update to v6.4.11
        linux-yocto/6.1: update to v6.1.46
        linux-yocto/6.1: fix IRQ-80 warnings
        linux-yocto/6.4: fix IRQ-80 warnings
        linux-yocto/6.4: fix CONFIG_F2FS_IO_TRACE configuration warning
        linux-yocto/6.1: fix CONFIG_F2FS_IO_TRACE configuration warning
        linux-yocto/6.4: update to v6.4.12
        linux-yocto/6.1: update to v6.1.50
        linux-yocto/6.4: update to v6.4.13
        linux-yocto/6.4: update to v6.4.14
        linux-yocto/6.1: update to v6.1.51

  Changqing Li (1):
        sqlite3: set CVE_STATUS for CVE-2023-36191

  Chen Qi (6):
        bitbake: runqueue.py: fix PSI check logic
        cmake: drop OE specific environment variable support
        cmake.bbclass: fix allarch override syntax
        uninative.bbclass: sync to use UNINATIVE_STAGING_DIR
        stress-ng: disable DEBUG_BUILD
        oe-depends-dot: improve '-w' behavior

  Daniel Semkowicz (1):
        dev-manual: wic.rst: Update native tools build command

  David Reyna (3):
        bitbake: toaster: Update to Django 4.2
        bitbake: toaster: import only used layers
        bitbake: toaster: accommodate missing 'Image Name' value in buildinfohelper

  Dmitry Baryshkov (4):
        mdadm: disable strace on rv32 arch
        linux-firmware: upgrade 20230625 -> 20230804
        linux-firmware: package audio topology for Lenovo X13s
        linux-firmware: package Dragonboard 845c sensors DSP firmware

  Eilís 'pidge' Ní Fhlannagáin (1):
        nativesdk-intercept: Fix bad intercept chgrp/chown logic

  Emil Ekmečić (2):
        bitbake: fetch2: add Google Cloud Platform (GCP) fetcher
        Add GCP fetcher to list of supported protocols

  Emil Kronborg Andersen (2):
        dbus: add additional entries to CVE_PRODUCT
        libxkbcommon: add CVE_PRODUCT

  Etienne Cordonnier (2):
        vim: update obsolete comment
        migration-guides: system-conf -> systemd-conf

  Frederic Martinsons (5):
        rust: add cargo-c native recipe
        classes-recipe: add cargo_c.bbclass
        rust: provide examples for C library generation in rust
        oeqa/runtime/rust: correct rust test
        ref-manual: classes.rst: suppress rust-hello-world reference, add ptest-cargo class

  Jaeyoon Jung (1):
        cml1: Fix KCONFIG_CONFIG_COMMAND not conveyed fully in do_menuconfig

  Jasper Orschulko (1):
        cve_check: Fix cpe_id generation

  Joe Slater (1):
        file: fix call to localtime_r()

  Jon Mason (1):
        linux-yocto-dev: correct qemuarmv5 device tree location

  Jose Quaresma (3):
        systemd: fix efi dependency
        systemd-boot: remove old gummiboot TUNE_CCARGS
        pybootchartgui: also match do_compile and do_configure subtasks

  Joshua Watt (9):
        bitbake: bblayers/query: Add multiconfig support to `show-appends`
        bitbake: cooker: Fix error message
        bitbake: lib/bb: Add xattr and acl libraries
        buildtools-tarball: Add libacl
        classes/image_types: Add vfat image type
        bitbake: fetch2: git: Check if clone directory is a git repo
        wic: Add gpt-hybrid partition layout
        bitbake: fetch2: git: Remove useless try..else clause
        Add libacl to required packages

  Julien Stephan (4):
        less: upgrade 633 -> 643
        less: add ptest support
        patch.py: use --absolute-git-dir instead of --show-toplevel to retrieve gitdir
        vulkan-samples: convert debugfix.patch to git format patch

  Kai Kang (1):
        webkitgtk: fix build failure with DEBUG_BUILD enabled

  Khem Raj (22):
        gnu-efi: Fix build on musl
        systemd-boot: Fix build on musl
        glibc: Upgrade to 2.38 release
        glibc: Enable fortify sources by defaults
        glibc: Drop --enable-tunables
        glibc: Fix SVE detection on aarch64
        glibc-tests: Add missing libgcc runtime dependency
        kernel.bbclass: Use KERNEL_STRIP instead of STRIP
        build-sysroots: Add SUMMARY field
        tunes: Add support for sve instructions on armv8/armv9
        arch-armv8,arch-armv9: Add sve based tune options
        python3: Increase default thread stack size on musl
        inetutils: Fix CVE-2023-40303
        inetutils: Apply devtool formatting suggestions
        qemu: Fix CVE-2023-40360
        core-image-ptest: Define a fallback for SUMMARY field
        dos2unix: upgrade 7.5.0 -> 7.5.1
        python3: Fix ptests on musl
        tcl: Add a way to skip ptests
        rust-target-config: Map rust target to OE target
        libc-test: Depend on musl-staticdev
        apr: Fix ptests on musl

  Lee Chee Yang (2):
        migration-guides: add release notes for 4.2.3
        migration-guides: add release notes for 4.0.12

  Lei Maohui (1):
        glibc-package: Fix conflict error when enable multilib.

  Luan Rafael Carneiro (2):
        weston: Upgrade version 12.0.1 -> 12.0.2
        weston: Add sysconfdir to FILES:${PN}

  Luca Ceresoli (1):
        Revert "oeqa/runtime/parselogs: Exclude preempt-rt error for now"

  Markus Niebel (2):
        wic: fix wrong attempt to create file system in upartitioned regions
        oeqa: wic: Add test for --no-table option

  Markus Volk (8):
        gtk4: upgrade 4.10.4 -> 4.10.5
        libadwaita: upgrade 1.3.3 -> 1.3.4
        gtk4: upgrade 4.10.5 -> 4.12.0
        qemu: fix libudev packageconfig for systemd images
        qemu: build pulseaudio support depending on distro_feature
        qemu: add packageconfigs for fuse and dbus-display
        gtk4: upgrade 4.12.0 -> 4.12.1
        mesa: add intel raytracing support to opencl build

  Martin Jansa (6):
        tcl: prevent installing another copy of tzdata
        cross-localedef-native: fix build on hosts with older glibc
        bitbake: runqueue: show more pressure data
        Makefile: remove from top-level directory
        bitbake: runqueue: show number of currently running bitbake threads when pressure changes
        webkitgtk: explicitly disable JIT for armv7* with softfp

  Michael Halstead (2):
        yocto-uninative: Update to 4.2 for glibc 2.38
        yocto-uninative: Update to 4.3

  Michael Opdenacker (26):
        scripts/create-pull-request: update URLs to git repositories
        manuals: create a dedicated "Contributor Guide" document
        ref-manual: classes.rst: fix location of _ref-classes-ccache
        ref-manual: update supported distro versions
        contributor-guide: add missing links to mailing lists
        contributor-guide: add section about why we use mailing lists
        contributor-guide: add recipe style guide
        ref-manual: remove AUTHOR variable
        contributor guide: call section "Reporting a defect"
        contributor-guide: remove obsolete pkg-config guidelines
        contributor guide: remove unnecessary information about mailing lists
        contributor-guide: clarification about patchtest
        contributor guide: update instructions for making and sharing changes
        dev-manual: disk-space: mention faster "find" command to trim sstate cache
        contributor-guide: move to 2nd place in top menu
        contributor-guide: submit-changes: simplify note
        contributor-guide: identify component: provide link to repositories
        contributor-guide: submit-changes: detail commit and patch creation
        contributor-guide: submit-changes: develop sending patches section
        manuals: README: update list of manuals
        contributor-guide: submit-changes: reorganize and develop sections
        contributor-guide: submit-changes: improvements to mailing lists section
        contributor-guide: submit-changes: commit guidelines for recipes
        contributor-guide: submit-changes: how to request push access to repositories
        README: update/fix contribution guidelines
        bitbake: doc: bitbake-user-manual: remove reference to SSTATE_MIRRORS variable

  Mikko Rapeli (4):
        openssh: capture ptest regression test failure logs
        oeqa selftest context.py: whitespace fix
        oeqa selftest context.py: remove warning from missing meta-selftest
        oeqa selftest context.py: fix git commands and set branch name

  Mingli Yu (2):
        qemu: Add qemu-common package
        webkitgtk: Add opengl to REQUIRED_DISTRO_FEATURES

  Narpat Mali (1):
        ffmpeg: add CVE_STATUS for CVE-2023-39018

  Otavio Salvador (2):
        weston-init: remove misleading comment about udev rule
        weston-init: fix init code indentation

  Ovidiu Panait (1):
        mdadm: skip running 04update-uuid and 07revert-inplace testcases

  Paulo Neves (1):
        bitbake: siggen.py: Improve taskhash reproducibility

  Peter Kjellerstedt (3):
        bin_package.bbclass: Inhibit the default dependencies
        insane.bbclass: Remove an unused variable
        poky.conf: Switch to post release name/version

  Peter Marko (2):
        openssl: Upgrade 3.1.1 -> 3.1.2
        gcc-runtime: remove bashism

  Poonam Jadhav (1):
        pixman: Remove duplication of license MIT

  Randolph Sapp (1):
        bitbake: gitsm: tolerate git-lfs in submodules

  Richard Purdie (39):
        bitbake: siggen: Fix indentation
        bitbake: siggen: Update debug
        resulttool/report: Avoid divide by zero
        gcc-testsuite: Fix qemu binary filtering code logic error
        gcc-testsuite: Set qemu options for mips correctly
        mips/tune-mips64r2: Set qemu cpu option correctly
        binutils-cross-testsuite: Pass TUNE_LDARGS to tests
        arch-mips: Ensure TUNE_LDARGS is set correctly
        gcc: Add patch to improve testsuite failures, particularly mips
        oeqa/runtime/parselogs: Exclude preempt-rt error for now
        qemu: Upgrade 8.0.3 -> 8.0.4
        lib/package_manager: Improve repo artefact filtering
        Revert "oeqa/utils/gitarchive: fix tag computation when creating archive"
        lttng-modules: Upgrade 2.13.9 -> 2.13.10
        lttng-tools: Upgrade 2.13.9 -> 2.13.10
        pseudo: Fix to work with glibc 2.38
        binutils: Add missing DEPENDS on pod2man
        build-sysroots: Ensure dependency chains are minimal
        bitbake: fetch2: Add new srcrev fetcher API
        base/package: Move source revision information from PV to PKGV
        recipes/classes/scripts: Drop SRCPV usage in OE-Core
        glibc: Add glibc 2.38 stable updates
        README: Update to point to new contributor guide
        bitbake: README: Update to point to new contributor guide
        bitbake: command: Avoid time intensive distractions for ping
        README: Clarify/standardise contributions process
        python3-numpy: Attempt to fix reproducibility issue
        bitbake: doc: Document challenges of tags with git fetcher
        bitbake: server/process: Add more timing debug
        qemu: Upgrade 8.0.4 -> 8.1.0
        qemu: Add patches to resolve x86 and then mips boot issues
        mdadm: Disable further tests due to intermittent failures
        Revert "oeqa selftest context.py: fix git commands and set branch name"
        classes: Drop ';' delimiter from ROOTFS/IMAGE*COMMAND variables
        build-appliance-image: Update to master head revision
        layer.conf: Update to nanbield release series
        bitbake: bitbake: Update to 2.6.0 release series/version
        layer.conf: Update to nanbield release series
        build-appliance-image: Update to master head revision

  Ross Burton (47):
        connman-conf: don't take over any ethernet devices, not just eth0
        meson.bbclass: add MESON_TARGET
        meson.bbclass:: update do_write_config vardeps
        systemd-boot: use MESON_TARGET
        systemd-boot: improve cross file generation
        p11-kit: fix build without qemu-usermode
        gi-docgen: depend on qemu-usermode MACHINE_FEATURES
        python3-pygobject: add explicit check for qemu-usermode MACHINE_FEATURE
        graphene: fix runtime detection of IEEE754 behaviour
        python3: ignore disputed CVE-2023-36632
        procps: backport fix for CVE-2023-4016
        linux/generate-cve-exclusions.py: fix comparison
        linux/cve-exclusions: update CVE_STATUS exclusions
        perf: enable verbose feature detection
        perf: add more PACKAGECONFIGs
        perf: fix perl binding support
        perf: split scripting PACKAGECONFIG into perl and python
        perf: disable perl support
        libtraceevent: build with Meson
        linux/generate-cve-exclusions: add version check warning
        linux-yocto: update CVE exclusions files
        site: remove at-spi2-core values
        inetutils: don't guess target paths
        inetutils: remove obsolete patches
        inetutils: remove obsolete cruft from do_configure
        glib-networking: enable build with GnuTLS if PKCS#11 was disabled
        glib-networking: use gnutls backend for TLS sockets
        cve-extra-exclusions: remove historic kernel CVEs which are handled now
        cve-extra-exclusions: remove BlueZ issues
        linux-yocto: update kernel CVE status
        linux: review some historic CVE_STATUS
        glib-2.0: explicitly enable strlcpy()
        scripts/oe-find-native-sysroot: use bitbake-getvar
        qemu-system-native: enable PNG support
        python3-build: upgrade to 1.0.0
        glib-2.0: libelf has a configure option now, specify it
        harfbuzz: update PACKAGECONFIG
        pango: explictly enable/disable libthai
        libsoup-2.4: update PACKAGECONFIG
        libsoup: update PACKAGECONFIG
        wayland-utils: add libdrm PACKAGECONFIG
        cve-exclusion: review the last of the historical kernel CVEs
        busybox: remove coreutils dependency in busybox-ptest
        libgudev: explicitly disable tests and vapi
        linux: update CVE exclusions
        python3-build: upgrade to 1.0.3
        avahi: handle invalid service types gracefully

  Ryan Eatmon (1):
        kernel.bbclass: Add force flag to rm calls

  Samantha Jalabert (1):
        bitbake: Fix disk space monitoring on cephfs

  Stéphane Veyret (1):
        nfs-utils: Add needed library to client

  Sudip Mukherjee (4):
        kea: upgrade to v2.4.0
        cmake: upgrade to v3.27.4
        dpkg: upgrade to v1.22.0
        openssh: upgrade to v9.4p1

  Tom Hochstein (1):
        linux-firmware: add firmware files for NXP BT chipsets

  Trevor Gamblin (16):
        python3-hypothesis: upgrade 6.82.0 -> 6.82.5
        python3-more-itertools: upgrade 10.0.0 -> 10.1.0
        python3-pygments: upgrade 2.15.1 -> 2.16.1
        python3-wheel: upgrade 0.41.0 -> 0.41.1
        maintainers.inc: Add self for unmaintained Python recipes
        oe-buildenv-internal: update required Python version
        python3-dbusmock: upgrade 0.29.0 -> 0.29.1
        python3-numpy: upgrade 1.25.1 -> 1.25.2
        python3-trove-classfiers: upgrade 2023.7.6 -> 2023.8.7
        python3-setuptools: upgrade 68.0.0 -> 68.1.0
        python3-dtc: upgrade 1.6.1 -> 1.7.0
        python3-poetry: upgrade 1.6.1 -> 1.7.0
        python3-git: upgrade 3.1.32 -> 3.1.34
        python3-hypothesis: upgrade 6.82.7 -> 6.84.0
        python3-pytest: upgrade 7.4.0 -> 7.4.1
        python3-sphinx: upgrade 7.1.1 -> 7.2.5

  Ulrich Ölmann (1):
        weston: fix comment

  Wang Mingyu (47):
        btrfs-tools: upgrade 6.3.1 -> 6.3.3
        curl: upgrade 8.2.0 -> 8.2.1
        file: upgrade 5.44 -> 5.45
        gmp: upgrade 6.2.1 -> 6.3.0
        xxhash: upgrade 0.8.1 -> 0.8.2
        python3-editables: upgrade 0.4 -> 0.5
        python3-markdown: upgrade 3.4.3 -> 3.4.4
        python3-pathspec: upgrade 0.11.1 -> 0.11.2
        python3-pip: upgrade 23.2 -> 23.2.1
        python3-pyparsing: upgrade 3.1.0 -> 3.1.1
        re2c: upgrade 3.0 -> 3.1
        shaderc: upgrade 2023.4 -> 2023.5
        sudo: upgrade 1.9.14p2 -> 1.9.14p3
        libarchive: upgrade 3.6.2 -> 3.7.1
        tar: upgrade 1.34 -> 1.35
        bind: upgrade 9.18.17 -> 9.18.18
        bluez5: upgrade 5.68 -> 5.69
        ell: upgrade 0.57 -> 0.58
        git: upgrade 2.41.0 -> 2.42.0
        kbd: upgrade 2.6.1 -> 2.6.2
        libconvert-asn1-perl: upgrade 0.33 -> 0.34
        libdrm: upgrade 2.4.115 -> 2.4.116
        libedit: upgrade 20221030-3.1 -> 20230828-3.1
        libgit2: upgrade 1.7.0 -> 1.7.1
        librepo: upgrade 1.15.1 -> 1.15.2
        libsecret: upgrade 0.20.5 -> 0.21.0
        libsndfile1: upgrade 1.2.0 -> 1.2.2
        libxml2: upgrade 2.11.4 -> 2.11.5
        mc: upgrade 4.8.29 -> 4.8.30
        mpfr: upgrade 4.2.0 -> 4.2.1
        neard: upgrade 0.18 -> 0.19
        python3: upgrade 3.11.4 -> 3.11.5
        pango: upgrade 1.50.14 -> 1.51.0
        pigz: upgrade 2.7 -> 2.8
        pkgconf: upgrade 1.9.5 -> 2.0.2
        python3-setuptools: upgrade 68.1.0 -> 68.1.2
        repo: upgrade 2.35 -> 2.36.1
        shaderc: upgrade 2023.5 -> 2023.6
        sqlite3: upgrade 3.42.0 -> 3.43.0
        sysklogd: upgrade 2.5.0 -> 2.5.2
        xz: upgrade 5.4.3 -> 5.4.4
        zlib: upgrade 1.2.13 -> 1.3
        python3-hypothesis: upgrade 6.82.5 -> 6.82.7
        python3-pluggy: upgrade 1.2.0 -> 1.3.0
        python3-sphinx-rtd-theme: upgrade 1.2.2 -> 1.3.0
        python3-wheel: upgrade 0.41.1 -> 0.41.2
        librepo: upgrade 1.15.2 -> 1.16.0

  Yang Xu (1):
        meson: don't fail if no .pyc exists

  Yi Zhao (2):
        dhcpcd: upgrade 10.0.1 -> 10.0.2
        dhcpcd: fix buffer overflow

  Yoann Congal (1):
        dev-manual: remove unsupported :term: markup inside markup

  Yogita Urade (1):
        dropbear: fix CVE-2023-36328

  Yuta Hayama (3):
        linux/generate-cve-exclusions: print the generated time in UTC
        linux/generate-cve-exclusions: fix mishandling of boundary values
        linux-yocto: correct the wording in CVE_STATUS

  Zang Ruochen (6):
        tcf-agent: Disable non-building features on loongarch64
        gcc-sanitizers: Add loongarch as a compatible architecture.
        goarch.bbclass: Add loongarch64 to go_map_arch
        qemuloongarch.inc:Change to use virtio-serial-pci
        kernel-devsrc: Fixed missing loongarch64 kernel source code when test_kernelmodules
        gcc: Fresh 0003-64-bit-multilib-hack.patch to add loongarch64 support

Change-Id: I4d4752539711b34471002dd1817bb7c14a590675
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/poky/bitbake/lib/bb/__init__.py b/poky/bitbake/lib/bb/__init__.py
index 0e2d867..3163481 100644
--- a/poky/bitbake/lib/bb/__init__.py
+++ b/poky/bitbake/lib/bb/__init__.py
@@ -9,7 +9,7 @@
 # SPDX-License-Identifier: GPL-2.0-only
 #
 
-__version__ = "2.4.0"
+__version__ = "2.6.0"
 
 import sys
 if sys.version_info < (3, 8, 0):
diff --git a/poky/bitbake/lib/bb/acl.py b/poky/bitbake/lib/bb/acl.py
new file mode 100755
index 0000000..0f41b27
--- /dev/null
+++ b/poky/bitbake/lib/bb/acl.py
@@ -0,0 +1,215 @@
+#! /usr/bin/env python3
+#
+# Copyright 2023 by Garmin Ltd. or its subsidiaries
+#
+# SPDX-License-Identifier: MIT
+
+
+import sys
+import ctypes
+import os
+import errno
+import pwd
+import grp
+
+libacl = ctypes.CDLL("libacl.so.1", use_errno=True)
+
+
+ACL_TYPE_ACCESS = 0x8000
+ACL_TYPE_DEFAULT = 0x4000
+
+ACL_FIRST_ENTRY = 0
+ACL_NEXT_ENTRY = 1
+
+ACL_UNDEFINED_TAG = 0x00
+ACL_USER_OBJ = 0x01
+ACL_USER = 0x02
+ACL_GROUP_OBJ = 0x04
+ACL_GROUP = 0x08
+ACL_MASK = 0x10
+ACL_OTHER = 0x20
+
+ACL_READ = 0x04
+ACL_WRITE = 0x02
+ACL_EXECUTE = 0x01
+
+acl_t = ctypes.c_void_p
+acl_entry_t = ctypes.c_void_p
+acl_permset_t = ctypes.c_void_p
+acl_perm_t = ctypes.c_uint
+
+acl_tag_t = ctypes.c_int
+
+libacl.acl_free.argtypes = [acl_t]
+
+
+def acl_free(acl):
+    libacl.acl_free(acl)
+
+
+libacl.acl_get_file.restype = acl_t
+libacl.acl_get_file.argtypes = [ctypes.c_char_p, ctypes.c_uint]
+
+
+def acl_get_file(path, typ):
+    acl = libacl.acl_get_file(os.fsencode(path), typ)
+    if acl is None:
+        err = ctypes.get_errno()
+        raise OSError(err, os.strerror(err), str(path))
+
+    return acl
+
+
+libacl.acl_get_entry.argtypes = [acl_t, ctypes.c_int, ctypes.c_void_p]
+
+
+def acl_get_entry(acl, entry_id):
+    entry = acl_entry_t()
+    ret = libacl.acl_get_entry(acl, entry_id, ctypes.byref(entry))
+    if ret < 0:
+        err = ctypes.get_errno()
+        raise OSError(err, os.strerror(err))
+
+    if ret == 0:
+        return None
+
+    return entry
+
+
+libacl.acl_get_tag_type.argtypes = [acl_entry_t, ctypes.c_void_p]
+
+
+def acl_get_tag_type(entry_d):
+    tag = acl_tag_t()
+    ret = libacl.acl_get_tag_type(entry_d, ctypes.byref(tag))
+    if ret < 0:
+        err = ctypes.get_errno()
+        raise OSError(err, os.strerror(err))
+    return tag.value
+
+
+libacl.acl_get_qualifier.restype = ctypes.c_void_p
+libacl.acl_get_qualifier.argtypes = [acl_entry_t]
+
+
+def acl_get_qualifier(entry_d):
+    ret = libacl.acl_get_qualifier(entry_d)
+    if ret is None:
+        err = ctypes.get_errno()
+        raise OSError(err, os.strerror(err))
+    return ctypes.c_void_p(ret)
+
+
+libacl.acl_get_permset.argtypes = [acl_entry_t, ctypes.c_void_p]
+
+
+def acl_get_permset(entry_d):
+    permset = acl_permset_t()
+    ret = libacl.acl_get_permset(entry_d, ctypes.byref(permset))
+    if ret < 0:
+        err = ctypes.get_errno()
+        raise OSError(err, os.strerror(err))
+
+    return permset
+
+
+libacl.acl_get_perm.argtypes = [acl_permset_t, acl_perm_t]
+
+
+def acl_get_perm(permset_d, perm):
+    ret = libacl.acl_get_perm(permset_d, perm)
+    if ret < 0:
+        err = ctypes.get_errno()
+        raise OSError(err, os.strerror(err))
+    return bool(ret)
+
+
+class Entry(object):
+    def __init__(self, tag, qualifier, mode):
+        self.tag = tag
+        self.qualifier = qualifier
+        self.mode = mode
+
+    def __str__(self):
+        typ = ""
+        qual = ""
+        if self.tag == ACL_USER:
+            typ = "user"
+            qual = pwd.getpwuid(self.qualifier).pw_name
+        elif self.tag == ACL_GROUP:
+            typ = "group"
+            qual = grp.getgrgid(self.qualifier).gr_name
+        elif self.tag == ACL_USER_OBJ:
+            typ = "user"
+        elif self.tag == ACL_GROUP_OBJ:
+            typ = "group"
+        elif self.tag == ACL_MASK:
+            typ = "mask"
+        elif self.tag == ACL_OTHER:
+            typ = "other"
+
+        r = "r" if self.mode & ACL_READ else "-"
+        w = "w" if self.mode & ACL_WRITE else "-"
+        x = "x" if self.mode & ACL_EXECUTE else "-"
+
+        return f"{typ}:{qual}:{r}{w}{x}"
+
+
+class ACL(object):
+    def __init__(self, acl):
+        self.acl = acl
+
+    def __del__(self):
+        acl_free(self.acl)
+
+    def entries(self):
+        entry_id = ACL_FIRST_ENTRY
+        while True:
+            entry = acl_get_entry(self.acl, entry_id)
+            if entry is None:
+                break
+
+            permset = acl_get_permset(entry)
+
+            mode = 0
+            for m in (ACL_READ, ACL_WRITE, ACL_EXECUTE):
+                if acl_get_perm(permset, m):
+                    mode |= m
+
+            qualifier = None
+            tag = acl_get_tag_type(entry)
+
+            if tag == ACL_USER or tag == ACL_GROUP:
+                qual = acl_get_qualifier(entry)
+                qualifier = ctypes.cast(qual, ctypes.POINTER(ctypes.c_int))[0]
+
+            yield Entry(tag, qualifier, mode)
+
+            entry_id = ACL_NEXT_ENTRY
+
+    @classmethod
+    def from_path(cls, path, typ):
+        acl = acl_get_file(path, typ)
+        return cls(acl)
+
+
+def main():
+    import argparse
+    import pwd
+    import grp
+    from pathlib import Path
+
+    parser = argparse.ArgumentParser()
+    parser.add_argument("path", help="File Path", type=Path)
+
+    args = parser.parse_args()
+
+    acl = ACL.from_path(args.path, ACL_TYPE_ACCESS)
+    for entry in acl.entries():
+        print(str(entry))
+
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main())
diff --git a/poky/bitbake/lib/bb/command.py b/poky/bitbake/lib/bb/command.py
index a355f56..b494f84 100644
--- a/poky/bitbake/lib/bb/command.py
+++ b/poky/bitbake/lib/bb/command.py
@@ -65,7 +65,7 @@
         command = commandline.pop(0)
 
         # Ensure cooker is ready for commands
-        if command != "updateConfig" and command != "setFeatures":
+        if command not in ["updateConfig", "setFeatures", "ping"]:
             try:
                 self.cooker.init_configdata()
                 if not self.remotedatastores:
@@ -85,7 +85,8 @@
                 if not hasattr(command_method, 'readonly') or not getattr(command_method, 'readonly'):
                     return None, "Not able to execute not readonly commands in readonly mode"
             try:
-                self.cooker.process_inotify_updates_apply()
+                if command != "ping":
+                    self.cooker.process_inotify_updates_apply()
                 if getattr(command_method, 'needconfig', True):
                     self.cooker.updateCacheSync()
                 result = command_method(self, commandline)
@@ -169,6 +170,8 @@
         Allow a UI to check the server is still alive
         """
         return "Still alive!"
+    ping.needconfig = False
+    ping.readonly = True
 
     def stateShutdown(self, command, params):
         """
diff --git a/poky/bitbake/lib/bb/cooker.py b/poky/bitbake/lib/bb/cooker.py
index 11c9fa2..064e3ca 100644
--- a/poky/bitbake/lib/bb/cooker.py
+++ b/poky/bitbake/lib/bb/cooker.py
@@ -650,7 +650,7 @@
                 raise
         else:
             if not mc in self.databuilder.mcdata:
-                bb.fatal('Not multiconfig named "%s" found' % mc)
+                bb.fatal('No multiconfig named "%s" found' % mc)
             envdata = self.databuilder.mcdata[mc]
             data.expandKeys(envdata)
             parse.ast.runAnonFuncs(envdata)
diff --git a/poky/bitbake/lib/bb/fetch2/__init__.py b/poky/bitbake/lib/bb/fetch2/__init__.py
index 2428a26..765aedd 100644
--- a/poky/bitbake/lib/bb/fetch2/__init__.py
+++ b/poky/bitbake/lib/bb/fetch2/__init__.py
@@ -753,7 +753,7 @@
     d.setVar("__BBAUTOREV_SEEN", True)
     return "AUTOINC"
 
-def get_srcrev(d, method_name='sortable_revision'):
+def _get_srcrev(d, method_name='sortable_revision'):
     """
     Return the revision string, usually for use in the version string (PV) of the current package
     Most packages usually only have one SCM so we just pass on the call.
@@ -774,6 +774,7 @@
     d.setVar("__BBINSRCREV", True)
 
     scms = []
+    revs = []
     fetcher = Fetch(d.getVar('SRC_URI').split(), d)
     urldata = fetcher.ud
     for u in urldata:
@@ -781,16 +782,19 @@
             scms.append(u)
 
     if not scms:
-        raise FetchError("SRCREV was used yet no valid SCM was found in SRC_URI")
+        d.delVar("__BBINSRCREV")
+        return "", revs
+
 
     if len(scms) == 1 and len(urldata[scms[0]].names) == 1:
         autoinc, rev = getattr(urldata[scms[0]].method, method_name)(urldata[scms[0]], d, urldata[scms[0]].names[0])
+        revs.append(rev)
         if len(rev) > 10:
             rev = rev[:10]
         d.delVar("__BBINSRCREV")
         if autoinc:
-            return "AUTOINC+" + rev
-        return rev
+            return "AUTOINC+" + rev, revs
+        return rev, revs
 
     #
     # Mutiple SCMs are in SRC_URI so we resort to SRCREV_FORMAT
@@ -806,6 +810,7 @@
         ud = urldata[scm]
         for name in ud.names:
             autoinc, rev = getattr(ud.method, method_name)(ud, d, name)
+            revs.append(rev)
             seenautoinc = seenautoinc or autoinc
             if len(rev) > 10:
                 rev = rev[:10]
@@ -823,7 +828,21 @@
         format = "AUTOINC+" + format
 
     d.delVar("__BBINSRCREV")
-    return format
+    return format, revs
+
+def get_hashvalue(d, method_name='sortable_revision'):
+    pkgv, revs = _get_srcrev(d, method_name=method_name)
+    return " ".join(revs)
+
+def get_pkgv_string(d, method_name='sortable_revision'):
+    pkgv, revs = _get_srcrev(d, method_name=method_name)
+    return pkgv
+
+def get_srcrev(d, method_name='sortable_revision'):
+    pkgv, revs = _get_srcrev(d, method_name=method_name)
+    if not pkgv:
+        raise FetchError("SRCREV was used yet no valid SCM was found in SRC_URI")
+    return pkgv
 
 def localpath(url, d):
     fetcher = bb.fetch2.Fetch([url], d)
@@ -1290,7 +1309,7 @@
 
             if checksum_name in self.parm:
                 checksum_expected = self.parm[checksum_name]
-            elif self.type not in ["http", "https", "ftp", "ftps", "sftp", "s3", "az", "crate"]:
+            elif self.type not in ["http", "https", "ftp", "ftps", "sftp", "s3", "az", "crate", "gs"]:
                 checksum_expected = None
             else:
                 checksum_expected = d.getVarFlag("SRC_URI", checksum_name)
@@ -1976,6 +1995,7 @@
 from . import npmsw
 from . import az
 from . import crate
+from . import gcp
 
 methods.append(local.Local())
 methods.append(wget.Wget())
@@ -1997,3 +2017,4 @@
 methods.append(npmsw.NpmShrinkWrap())
 methods.append(az.Az())
 methods.append(crate.Crate())
+methods.append(gcp.GCP())
diff --git a/poky/bitbake/lib/bb/fetch2/gcp.py b/poky/bitbake/lib/bb/fetch2/gcp.py
new file mode 100644
index 0000000..f42c81f
--- /dev/null
+++ b/poky/bitbake/lib/bb/fetch2/gcp.py
@@ -0,0 +1,98 @@
+"""
+BitBake 'Fetch' implementation for Google Cloup Platform Storage.
+
+Class for fetching files from Google Cloud Storage using the
+Google Cloud Storage Python Client. The GCS Python Client must
+be correctly installed, configured and authenticated prior to use.
+Additionally, gsutil must also be installed.
+
+"""
+
+# Copyright (C) 2023, Snap Inc.
+#
+# Based in part on bb.fetch2.s3:
+#    Copyright (C) 2017 Andre McCurdy
+#
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# Based on functions from the base bb module, Copyright 2003 Holger Schurig
+
+import os
+import bb
+import urllib.parse, urllib.error
+from bb.fetch2 import FetchMethod
+from bb.fetch2 import FetchError
+from bb.fetch2 import logger
+
+class GCP(FetchMethod):
+    """
+    Class to fetch urls via GCP's Python API.
+    """
+    def __init__(self):
+        self.gcp_client = None
+
+    def supports(self, ud, d):
+        """
+        Check to see if a given url can be fetched with GCP.
+        """
+        return ud.type in ['gs']
+
+    def recommends_checksum(self, urldata):
+        return True
+
+    def urldata_init(self, ud, d):
+        if 'downloadfilename' in ud.parm:
+            ud.basename = ud.parm['downloadfilename']
+        else:
+            ud.basename = os.path.basename(ud.path)
+
+        ud.localfile = d.expand(urllib.parse.unquote(ud.basename))
+
+    def get_gcp_client(self):
+        from google.cloud import storage
+        self.gcp_client = storage.Client(project=None)
+
+    def download(self, ud, d):
+        """
+        Fetch urls using the GCP API.
+        Assumes localpath was called first.
+        """
+        logger.debug2(f"Trying to download gs://{ud.host}{ud.path} to {ud.localpath}")
+        if self.gcp_client is None:
+            self.get_gcp_client()
+
+        bb.fetch2.check_network_access(d, "gsutil stat", ud.url)
+
+        # Path sometimes has leading slash, so strip it
+        path = ud.path.lstrip("/")
+        blob = self.gcp_client.bucket(ud.host).blob(path)
+        blob.download_to_filename(ud.localpath)
+
+        # Additional sanity checks copied from the wget class (although there
+        # are no known issues which mean these are required, treat the GCP API
+        # tool with a little healthy suspicion).
+        if not os.path.exists(ud.localpath):
+            raise FetchError(f"The GCP API returned success for gs://{ud.host}{ud.path} but {ud.localpath} doesn't exist?!")
+
+        if os.path.getsize(ud.localpath) == 0:
+            os.remove(ud.localpath)
+            raise FetchError(f"The downloaded file for gs://{ud.host}{ud.path} resulted in a zero size file?! Deleting and failing since this isn't right.")
+
+        return True
+
+    def checkstatus(self, fetch, ud, d):
+        """
+        Check the status of a URL.
+        """
+        logger.debug2(f"Checking status of gs://{ud.host}{ud.path}")
+        if self.gcp_client is None:
+            self.get_gcp_client()
+
+        bb.fetch2.check_network_access(d, "gsutil stat", ud.url)
+
+        # Path sometimes has leading slash, so strip it
+        path = ud.path.lstrip("/")
+        if self.gcp_client.bucket(ud.host).blob(path).exists() == False:
+            raise FetchError(f"The GCP API reported that gs://{ud.host}{ud.path} does not exist")
+        else:
+            return True
diff --git a/poky/bitbake/lib/bb/fetch2/git.py b/poky/bitbake/lib/bb/fetch2/git.py
index 2a3c06f..e11271b 100644
--- a/poky/bitbake/lib/bb/fetch2/git.py
+++ b/poky/bitbake/lib/bb/fetch2/git.py
@@ -65,6 +65,7 @@
 import os
 import re
 import shlex
+import shutil
 import subprocess
 import tempfile
 import bb
@@ -365,8 +366,35 @@
                 runfetchcmd(fetch_cmd, d, workdir=ud.clonedir)
         repourl = self._get_repo_url(ud)
 
+        needs_clone = False
+        if os.path.exists(ud.clonedir):
+            # The directory may exist, but not be the top level of a bare git
+            # repository in which case it needs to be deleted and re-cloned.
+            try:
+                # Since clones can be bare, use --absolute-git-dir instead of --show-toplevel
+                output = runfetchcmd("LANG=C %s rev-parse --absolute-git-dir" % ud.basecmd, d, workdir=ud.clonedir)
+
+                toplevel = os.path.abspath(output.rstrip())
+                abs_clonedir = os.path.abspath(ud.clonedir).rstrip('/')
+                # The top level Git directory must either be the clone directory
+                # or a child of the clone directory. Any ancestor directory of
+                # the clone directory is not valid as the Git directory (and
+                # probably belongs to some other unrelated repository), so a
+                # clone is required
+                if os.path.commonprefix([abs_clonedir, toplevel]) != abs_clonedir:
+                    logger.warning("Top level directory '%s' doesn't match expected '%s'. Re-cloning", toplevel, ud.clonedir)
+                    needs_clone = True
+            except bb.fetch2.FetchError as e:
+                logger.warning("Unable to get top level for %s (not a git directory?): %s", ud.clonedir, e)
+                needs_clone = True
+
+            if needs_clone:
+                shutil.rmtree(ud.clonedir)
+        else:
+            needs_clone = True
+
         # If the repo still doesn't exist, fallback to cloning it
-        if not os.path.exists(ud.clonedir):
+        if needs_clone:
             # We do this since git will use a "-l" option automatically for local urls where possible,
             # but it doesn't work when git/objects is a symlink, only works when it is a directory.
             if repourl.startswith("file://"):
diff --git a/poky/bitbake/lib/bb/fetch2/gitsm.py b/poky/bitbake/lib/bb/fetch2/gitsm.py
index 47225b9..a87361c 100644
--- a/poky/bitbake/lib/bb/fetch2/gitsm.py
+++ b/poky/bitbake/lib/bb/fetch2/gitsm.py
@@ -123,6 +123,7 @@
             url += ";name=%s" % module
             url += ";subpath=%s" % module
             url += ";nobranch=1"
+            url += ";lfs=%s" % self._need_lfs(ud)
             # Note that adding "user=" here to give credentials to the
             # submodule is not supported. Since using SRC_URI to give git://
             # URL a password is not supported, one have to use one of the
@@ -242,10 +243,12 @@
         ret = self.process_submodules(ud, ud.destdir, unpack_submodules, d)
 
         if not ud.bareclone and ret:
-            # All submodules should already be downloaded and configured in the tree.  This simply sets
-            # up the configuration and checks out the files.  The main project config should remain
-            # unmodified, and no download from the internet should occur.
-            runfetchcmd("%s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir)
+            # All submodules should already be downloaded and configured in the tree.  This simply
+            # sets up the configuration and checks out the files.  The main project config should
+            # remain unmodified, and no download from the internet should occur. As such, lfs smudge
+            # should also be skipped as these files were already smudged in the fetch stage if lfs
+            # was enabled.
+            runfetchcmd("GIT_LFS_SKIP_SMUDGE=1 %s submodule update --recursive --no-fetch" % (ud.basecmd), d, quiet=True, workdir=ud.destdir)
 
     def implicit_urldata(self, ud, d):
         import shutil, subprocess, tempfile
diff --git a/poky/bitbake/lib/bb/monitordisk.py b/poky/bitbake/lib/bb/monitordisk.py
index a1b9100..f928210 100644
--- a/poky/bitbake/lib/bb/monitordisk.py
+++ b/poky/bitbake/lib/bb/monitordisk.py
@@ -234,9 +234,10 @@
                 freeInode = st.f_favail
 
                 if minInode and freeInode < minInode:
-                    # Some filesystems use dynamic inodes so can't run out
-                    # (e.g. btrfs). This is reported by the inode count being 0.
-                    if st.f_files == 0:
+                    # Some filesystems use dynamic inodes so can't run out.
+                    # This is reported by the inode count being 0 (btrfs) or the free
+                    # inode count being -1 (cephfs).
+                    if st.f_files == 0 or st.f_favail == -1:
                         self.devDict[k][2] = None
                         continue
                     # Always show warning, the self.checked would always be False if the action is WARN
diff --git a/poky/bitbake/lib/bb/runqueue.py b/poky/bitbake/lib/bb/runqueue.py
index 48788f4..c88d712 100644
--- a/poky/bitbake/lib/bb/runqueue.py
+++ b/poky/bitbake/lib/bb/runqueue.py
@@ -200,21 +200,24 @@
                 curr_memory_pressure = memory_pressure_fds.readline().split()[4].split("=")[1]
                 now = time.time()
                 tdiff = now - self.prev_pressure_time
-                if tdiff > 1.0:
-                    exceeds_cpu_pressure =  self.rq.max_cpu_pressure and (float(curr_cpu_pressure) - float(self.prev_cpu_pressure)) / tdiff > self.rq.max_cpu_pressure
-                    exceeds_io_pressure =  self.rq.max_io_pressure and (float(curr_io_pressure) - float(self.prev_io_pressure)) / tdiff > self.rq.max_io_pressure
-                    exceeds_memory_pressure = self.rq.max_memory_pressure and (float(curr_memory_pressure) - float(self.prev_memory_pressure)) / tdiff > self.rq.max_memory_pressure
+                psi_accumulation_interval = 1.0
+                cpu_pressure = (float(curr_cpu_pressure) - float(self.prev_cpu_pressure)) / tdiff
+                io_pressure = (float(curr_io_pressure) - float(self.prev_io_pressure)) / tdiff
+                memory_pressure = (float(curr_memory_pressure) - float(self.prev_memory_pressure)) / tdiff
+                exceeds_cpu_pressure =  self.rq.max_cpu_pressure and cpu_pressure > self.rq.max_cpu_pressure
+                exceeds_io_pressure =  self.rq.max_io_pressure and io_pressure > self.rq.max_io_pressure
+                exceeds_memory_pressure =  self.rq.max_memory_pressure and memory_pressure > self.rq.max_memory_pressure
+
+                if tdiff > psi_accumulation_interval:
                     self.prev_cpu_pressure = curr_cpu_pressure
                     self.prev_io_pressure = curr_io_pressure
                     self.prev_memory_pressure = curr_memory_pressure
                     self.prev_pressure_time = now
-                else:
-                    exceeds_cpu_pressure =  self.rq.max_cpu_pressure and (float(curr_cpu_pressure) - float(self.prev_cpu_pressure)) > self.rq.max_cpu_pressure
-                    exceeds_io_pressure =  self.rq.max_io_pressure and (float(curr_io_pressure) - float(self.prev_io_pressure)) > self.rq.max_io_pressure
-                    exceeds_memory_pressure = self.rq.max_memory_pressure and (float(curr_memory_pressure) - float(self.prev_memory_pressure)) > self.rq.max_memory_pressure
+
             pressure_state = (exceeds_cpu_pressure, exceeds_io_pressure, exceeds_memory_pressure)
+            pressure_values = (round(cpu_pressure,1), self.rq.max_cpu_pressure, round(io_pressure,1), self.rq.max_io_pressure, round(memory_pressure,1), self.rq.max_memory_pressure)
             if hasattr(self, "pressure_state") and pressure_state != self.pressure_state:
-                bb.note("Pressure status changed to CPU: %s, IO: %s, Mem: %s" % pressure_state)
+                bb.note("Pressure status changed to CPU: %s, IO: %s, Mem: %s (CPU: %s/%s, IO: %s/%s, Mem: %s/%s) - using %s/%s bitbake threads" % (pressure_state + pressure_values + (len(self.rq.runq_running.difference(self.rq.runq_complete)), self.rq.number_tasks)))
             self.pressure_state = pressure_state
             return (exceeds_cpu_pressure or exceeds_io_pressure or exceeds_memory_pressure)
         return False
diff --git a/poky/bitbake/lib/bb/server/process.py b/poky/bitbake/lib/bb/server/process.py
index f62faed..40cb99b 100644
--- a/poky/bitbake/lib/bb/server/process.py
+++ b/poky/bitbake/lib/bb/server/process.py
@@ -38,8 +38,11 @@
 class ProcessTimeout(SystemExit):
     pass
 
+def currenttime():
+    return datetime.datetime.now().strftime('%H:%M:%S.%f')
+
 def serverlog(msg):
-    print(str(os.getpid()) + " " +  datetime.datetime.now().strftime('%H:%M:%S.%f') + " " + msg)
+    print(str(os.getpid()) + " " +  currenttime() + " " + msg)
     sys.stdout.flush()
 
 #
@@ -289,7 +292,9 @@
                     continue
                 try:
                     serverlog("Running command %s" % command)
-                    self.command_channel_reply.send(self.cooker.command.runCommand(command, self))
+                    reply = self.cooker.command.runCommand(command, self)
+                    serverlog("Sending reply %s" % repr(reply))
+                    self.command_channel_reply.send(reply)
                     serverlog("Command Completed (socket: %s)" % os.path.exists(self.sockname))
                 except Exception as e:
                    stack = traceback.format_exc()
@@ -502,9 +507,9 @@
     def runCommand(self, command):
         self.connection.send(command)
         if not self.recv.poll(30):
-            logger.info("No reply from server in 30s (for command %s)" % command[0])
+            logger.info("No reply from server in 30s (for command %s at %s)" % (command[0], currenttime()))
             if not self.recv.poll(30):
-                raise ProcessTimeout("Timeout while waiting for a reply from the bitbake server (60s)")
+                raise ProcessTimeout("Timeout while waiting for a reply from the bitbake server (60s at %s)" % currenttime())
         ret, exc = self.recv.get()
         # Should probably turn all exceptions in exc back into exceptions?
         # For now, at least handle BBHandledException
diff --git a/poky/bitbake/lib/bb/siggen.py b/poky/bitbake/lib/bb/siggen.py
index d0a5556..b023b79 100644
--- a/poky/bitbake/lib/bb/siggen.py
+++ b/poky/bitbake/lib/bb/siggen.py
@@ -261,10 +261,6 @@
             bb.warn("Error during finalise of %s" % mcfn)
             raise
 
-        #Slow but can be useful for debugging mismatched basehashes
-        #for task in self.taskdeps[mcfn]:
-        #    self.dump_sigtask(mcfn, task, d.getVar("STAMP"), False)
-
         basehashes = {}
         for task in taskdeps:
             basehashes[task] = self.basehash[mcfn + ":" + task]
@@ -274,6 +270,11 @@
         d.setVar("__siggen_varvals", lookupcache)
         d.setVar("__siggen_taskdeps", taskdeps)
 
+        #Slow but can be useful for debugging mismatched basehashes
+        #self.setup_datacache_from_datastore(mcfn, d)
+        #for task in taskdeps:
+        #    self.dump_sigtask(mcfn, task, d.getVar("STAMP"), False)
+
     def setup_datacache_from_datastore(self, mcfn, d):
         super().setup_datacache_from_datastore(mcfn, d)
 
@@ -360,7 +361,7 @@
         for dep in sorted(self.runtaskdeps[tid]):
             data += self.get_unihash(dep[1])
 
-        for (f, cs) in self.file_checksum_values[tid]:
+        for (f, cs) in sorted(self.file_checksum_values[tid], key=clean_checksum_file_path):
             if cs:
                 if "/./" in f:
                     data += "./" + f.split("/./")[1]
@@ -418,14 +419,14 @@
         data['varvals'][task] = self.datacaches[mc].siggen_varvals[mcfn][task]
         for dep in self.datacaches[mc].siggen_taskdeps[mcfn][task]:
             if dep in self.basehash_ignore_vars:
-               continue
+                continue
             data['gendeps'][dep] = self.datacaches[mc].siggen_gendeps[mcfn][dep]
             data['varvals'][dep] = self.datacaches[mc].siggen_varvals[mcfn][dep]
 
         if runtime and tid in self.taskhash:
             data['runtaskdeps'] = [dep[0] for dep in sorted(self.runtaskdeps[tid])]
             data['file_checksum_values'] = []
-            for f,cs in self.file_checksum_values[tid]:
+            for f,cs in sorted(self.file_checksum_values[tid], key=clean_checksum_file_path):
                 if "/./" in f:
                     data['file_checksum_values'].append(("./" + f.split("/./")[1], cs))
                 else:
@@ -744,6 +745,12 @@
         self.server = data.getVar('BB_HASHSERVE')
         self.method = "sstate_output_hash"
 
+def clean_checksum_file_path(file_checksum_tuple):
+    f, cs = file_checksum_tuple
+    if "/./" in f:
+        return "./" + f.split("/./")[1]
+    return f
+
 def dump_this_task(outfile, d):
     import bb.parse
     mcfn = d.getVar("BB_FILENAME")
diff --git a/poky/bitbake/lib/bb/ui/buildinfohelper.py b/poky/bitbake/lib/bb/ui/buildinfohelper.py
index 129bb32..8b212b7 100644
--- a/poky/bitbake/lib/bb/ui/buildinfohelper.py
+++ b/poky/bitbake/lib/bb/ui/buildinfohelper.py
@@ -1746,7 +1746,6 @@
 
         buildname = self.server.runCommand(['getVariable', 'BUILDNAME'])[0]
         machine = self.server.runCommand(['getVariable', 'MACHINE'])[0]
-        image_name = self.server.runCommand(['getVariable', 'IMAGE_NAME'])[0]
 
         # location of the manifest files for this build;
         # note that this file is only produced if an image is produced
@@ -1767,6 +1766,18 @@
         # filter out anything which isn't an image target
         image_targets = [target for target in targets if target.is_image]
 
+        if len(image_targets) > 0:
+            #if there are image targets retrieve image_name
+            image_name = self.server.runCommand(['getVariable', 'IMAGE_NAME'])[0]
+            if not image_name:
+                #When build target is an image and image_name is not found as an environment variable
+                logger.info("IMAGE_NAME not found, extracting from bitbake command")
+                cmd = self.server.runCommand(['getVariable','BB_CMDLINE'])[0]
+                #filter out tokens that are command line options
+                cmd = [token for token in cmd if not token.startswith('-')]
+                image_name = cmd[1].split(':', 1)[0] # remove everything after : in image name
+                logger.info("IMAGE_NAME found as : %s " % image_name)
+
         for image_target in image_targets:
             # this is set to True if we find at least one file relating to
             # this target; if this remains False after the scan, we copy the
diff --git a/poky/bitbake/lib/bb/xattr.py b/poky/bitbake/lib/bb/xattr.py
new file mode 100755
index 0000000..7b63494
--- /dev/null
+++ b/poky/bitbake/lib/bb/xattr.py
@@ -0,0 +1,126 @@
+#! /usr/bin/env python3
+#
+# Copyright 2023 by Garmin Ltd. or its subsidiaries
+#
+# SPDX-License-Identifier: MIT
+
+import sys
+import ctypes
+import os
+import errno
+
+libc = ctypes.CDLL("libc.so.6", use_errno=True)
+fsencoding = sys.getfilesystemencoding()
+
+
+libc.listxattr.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_size_t]
+libc.llistxattr.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_size_t]
+
+
+def listxattr(path, follow=True):
+    func = libc.listxattr if follow else libc.llistxattr
+
+    os_path = os.fsencode(path)
+
+    while True:
+        length = func(os_path, None, 0)
+
+        if length < 0:
+            err = ctypes.get_errno()
+            raise OSError(err, os.strerror(err), str(path))
+
+        if length == 0:
+            return []
+
+        arr = ctypes.create_string_buffer(length)
+
+        read_length = func(os_path, arr, length)
+        if read_length != length:
+            # Race!
+            continue
+
+        return [a.decode(fsencoding) for a in arr.raw.split(b"\x00") if a]
+
+
+libc.getxattr.argtypes = [
+    ctypes.c_char_p,
+    ctypes.c_char_p,
+    ctypes.c_char_p,
+    ctypes.c_size_t,
+]
+libc.lgetxattr.argtypes = [
+    ctypes.c_char_p,
+    ctypes.c_char_p,
+    ctypes.c_char_p,
+    ctypes.c_size_t,
+]
+
+
+def getxattr(path, name, follow=True):
+    func = libc.getxattr if follow else libc.lgetxattr
+
+    os_path = os.fsencode(path)
+    os_name = os.fsencode(name)
+
+    while True:
+        length = func(os_path, os_name, None, 0)
+
+        if length < 0:
+            err = ctypes.get_errno()
+            if err == errno.ENODATA:
+                return None
+            raise OSError(err, os.strerror(err), str(path))
+
+        if length == 0:
+            return ""
+
+        arr = ctypes.create_string_buffer(length)
+
+        read_length = func(os_path, os_name, arr, length)
+        if read_length != length:
+            # Race!
+            continue
+
+        return arr.raw
+
+
+def get_all_xattr(path, follow=True):
+    attrs = {}
+
+    names = listxattr(path, follow)
+
+    for name in names:
+        value = getxattr(path, name, follow)
+        if value is None:
+            # This can happen if a value is erased after listxattr is called,
+            # so ignore it
+            continue
+        attrs[name] = value
+
+    return attrs
+
+
+def main():
+    import argparse
+    from pathlib import Path
+
+    parser = argparse.ArgumentParser()
+    parser.add_argument("path", help="File Path", type=Path)
+
+    args = parser.parse_args()
+
+    attrs = get_all_xattr(args.path)
+
+    for name, value in attrs.items():
+        try:
+            value = value.decode(fsencoding)
+        except UnicodeDecodeError:
+            pass
+
+        print(f"{name} = {value}")
+
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main())
diff --git a/poky/bitbake/lib/bblayers/query.py b/poky/bitbake/lib/bblayers/query.py
index bec76db..bfc18a75 100644
--- a/poky/bitbake/lib/bblayers/query.py
+++ b/poky/bitbake/lib/bblayers/query.py
@@ -282,7 +282,10 @@
         else:
             logger.plain('=== Appended recipes ===')
 
-        pnlist = list(self.tinfoil.cooker_data.pkg_pn.keys())
+
+        cooker_data = self.tinfoil.cooker.recipecaches[args.mc]
+
+        pnlist = list(cooker_data.pkg_pn.keys())
         pnlist.sort()
         appends = False
         for pn in pnlist:
@@ -295,7 +298,7 @@
                 if not found:
                     continue
 
-            if self.show_appends_for_pn(pn):
+            if self.show_appends_for_pn(pn, cooker_data, args.mc):
                 appends = True
 
         if not args.pnspec and self.show_appends_for_skipped():
@@ -304,8 +307,10 @@
         if not appends:
             logger.plain('No append files found')
 
-    def show_appends_for_pn(self, pn):
-        filenames = self.tinfoil.cooker_data.pkg_pn[pn]
+    def show_appends_for_pn(self, pn, cooker_data, mc):
+        filenames = cooker_data.pkg_pn[pn]
+        if mc:
+            pn = "mc:%s:%s" % (mc, pn)
 
         best = self.tinfoil.find_best_provider(pn)
         best_filename = os.path.basename(best[3])
@@ -530,6 +535,7 @@
 
         parser_show_appends = self.add_command(sp, 'show-appends', self.do_show_appends)
         parser_show_appends.add_argument('pnspec', nargs='*', help='optional recipe name specification (wildcards allowed, enclose in quotes to avoid shell expansion)')
+        parser_show_appends.add_argument('--mc', help='use specified multiconfig', default='')
 
         parser_show_cross_depends = self.add_command(sp, 'show-cross-depends', self.do_show_cross_depends)
         parser_show_cross_depends.add_argument('-f', '--filenames', help='show full file path', action='store_true')
diff --git a/poky/bitbake/lib/toaster/bldcollector/urls.py b/poky/bitbake/lib/toaster/bldcollector/urls.py
index efd67a8..3c34070 100644
--- a/poky/bitbake/lib/toaster/bldcollector/urls.py
+++ b/poky/bitbake/lib/toaster/bldcollector/urls.py
@@ -6,7 +6,7 @@
 # SPDX-License-Identifier: GPL-2.0-only
 #
 
-from django.conf.urls import url
+from django.urls import re_path as url
 
 import bldcollector.views
 
diff --git a/poky/bitbake/lib/toaster/bldcontrol/models.py b/poky/bitbake/lib/toaster/bldcontrol/models.py
index c2f302d..42750e7 100644
--- a/poky/bitbake/lib/toaster/bldcontrol/models.py
+++ b/poky/bitbake/lib/toaster/bldcontrol/models.py
@@ -4,7 +4,7 @@
 
 from __future__ import unicode_literals
 from django.db import models
-from django.utils.encoding import force_text
+from django.utils.encoding import force_str
 from orm.models import Project, Build, Layer_Version
 
 import logging
@@ -124,7 +124,7 @@
         return self.brvariable_set.get(name="MACHINE").value
 
     def __str__(self):
-        return force_text('%s %s' % (self.project, self.get_state_display()))
+        return force_str('%s %s' % (self.project, self.get_state_display()))
 
 # These tables specify the settings for running an actual build.
 # They MUST be kept in sync with the tables in orm.models.Project*
diff --git a/poky/bitbake/lib/toaster/orm/models.py b/poky/bitbake/lib/toaster/orm/models.py
index 2cb7d7e..f9fcf9e 100644
--- a/poky/bitbake/lib/toaster/orm/models.py
+++ b/poky/bitbake/lib/toaster/orm/models.py
@@ -107,7 +107,7 @@
 
 
 class ProjectManager(models.Manager):
-    def create_project(self, name, release, existing_project=None):
+    def create_project(self, name, release, existing_project=None, imported=False):
         if existing_project and (release is not None):
             prj = existing_project
             prj.bitbake_version = release.bitbake_version
@@ -134,19 +134,19 @@
 
         if release is None:
             return prj
+        if not imported:
+            for rdl in release.releasedefaultlayer_set.all():
+                lv = Layer_Version.objects.filter(
+                    layer__name=rdl.layer_name,
+                    release=release).first()
 
-        for rdl in release.releasedefaultlayer_set.all():
-            lv = Layer_Version.objects.filter(
-                layer__name=rdl.layer_name,
-                release=release).first()
-
-            if lv:
-                ProjectLayer.objects.create(project=prj,
-                                            layercommit=lv,
-                                            optional=False)
-            else:
-                logger.warning("Default project layer %s not found" %
-                               rdl.layer_name)
+                if lv:
+                    ProjectLayer.objects.create(project=prj,
+                                                layercommit=lv,
+                                                optional=False)
+                else:
+                    logger.warning("Default project layer %s not found" %
+                                rdl.layer_name)
 
         return prj
 
diff --git a/poky/bitbake/lib/toaster/toastergui/urls.py b/poky/bitbake/lib/toaster/toastergui/urls.py
index d2df4e6..bc3b0c7 100644
--- a/poky/bitbake/lib/toaster/toastergui/urls.py
+++ b/poky/bitbake/lib/toaster/toastergui/urls.py
@@ -6,7 +6,7 @@
 # SPDX-License-Identifier: GPL-2.0-only
 #
 
-from django.conf.urls import url
+from django.urls import re_path as url
 from django.views.generic import RedirectView
 
 from toastergui import tables
diff --git a/poky/bitbake/lib/toaster/toastergui/views.py b/poky/bitbake/lib/toaster/toastergui/views.py
index a571b8c..552ff16 100644
--- a/poky/bitbake/lib/toaster/toastergui/views.py
+++ b/poky/bitbake/lib/toaster/toastergui/views.py
@@ -670,11 +670,11 @@
     return HttpResponse(_get_dir_entries(build_id, target_id, top), content_type = "application/json")
 
 from django.utils.functional import Promise
-from django.utils.encoding import force_text
+from django.utils.encoding import force_str
 class LazyEncoder(json.JSONEncoder):
     def default(self, obj):
         if isinstance(obj, Promise):
-            return force_text(obj)
+            return force_str(obj)
         return super(LazyEncoder, self).default(obj)
 
 from toastergui.templatetags.projecttags import filtered_filesizeformat
@@ -1404,7 +1404,7 @@
                     if not os.path.isdir('%s/conf' % request.POST['importdir']):
                         raise BadParameterException("Bad path or missing 'conf' directory (%s)" % request.POST['importdir'])
                     from django.core import management
-                    management.call_command('buildimport', '--command=import', '--name=%s' % request.POST['projectname'], '--path=%s' % request.POST['importdir'], interactive=False)
+                    management.call_command('buildimport', '--command=import', '--name=%s' % request.POST['projectname'], '--path=%s' % request.POST['importdir'])
                     prj = Project.objects.get(name = request.POST['projectname'])
                     prj.merged_attr = True
                     prj.save()
diff --git a/poky/bitbake/lib/toaster/toastergui/widgets.py b/poky/bitbake/lib/toaster/toastergui/widgets.py
index ceff529..5369691 100644
--- a/poky/bitbake/lib/toaster/toastergui/widgets.py
+++ b/poky/bitbake/lib/toaster/toastergui/widgets.py
@@ -7,6 +7,7 @@
 #
 
 from django.views.generic import View, TemplateView
+from django.utils.decorators import method_decorator
 from django.views.decorators.cache import cache_control
 from django.shortcuts import HttpResponse
 from django.core.cache import cache
@@ -63,8 +64,8 @@
         self.default_orderby = ""
 
     # prevent HTTP caching of table data
-    @cache_control(must_revalidate=True,
-                   max_age=0, no_store=True, no_cache=True)
+    @method_decorator(cache_control(must_revalidate=True,
+                   max_age=0, no_store=True, no_cache=True))
     def dispatch(self, *args, **kwargs):
         return super(ToasterTable, self).dispatch(*args, **kwargs)
 
diff --git a/poky/bitbake/lib/toaster/toastermain/management/commands/buildimport.py b/poky/bitbake/lib/toaster/toastermain/management/commands/buildimport.py
index e25b55e..f7139aa 100644
--- a/poky/bitbake/lib/toaster/toastermain/management/commands/buildimport.py
+++ b/poky/bitbake/lib/toaster/toastermain/management/commands/buildimport.py
@@ -545,7 +545,7 @@
             # Find the directory's release, and promote to default_release if local paths
             release = self.find_import_release(layers_list,lv_dict,default_release)
             # create project, SANITY: reuse any project of same name
-            project = Project.objects.create_project(project_name,release,project)
+            project = Project.objects.create_project(project_name,release,project, imported=True)
             # Apply any new layers or variables
             self.apply_conf_variables(project,layers_list,lv_dict,release)
             # WORKAROUND: since we now derive the release, redirect 'newproject_specific' to 'project_specific'
diff --git a/poky/bitbake/lib/toaster/toastermain/management/commands/checksocket.py b/poky/bitbake/lib/toaster/toastermain/management/commands/checksocket.py
index 811fd5d..b2c002d 100644
--- a/poky/bitbake/lib/toaster/toastermain/management/commands/checksocket.py
+++ b/poky/bitbake/lib/toaster/toastermain/management/commands/checksocket.py
@@ -13,7 +13,7 @@
 import socket
 
 from django.core.management.base import BaseCommand, CommandError
-from django.utils.encoding import force_text
+from django.utils.encoding import force_str
 
 DEFAULT_ADDRPORT = "0.0.0.0:8000"
 
@@ -51,7 +51,7 @@
             if hasattr(err, 'errno') and err.errno in errors:
                 errtext = errors[err.errno]
             else:
-                errtext = force_text(err)
+                errtext = force_str(err)
             raise CommandError(errtext)
 
         self.stdout.write("OK")
diff --git a/poky/bitbake/lib/toaster/toastermain/urls.py b/poky/bitbake/lib/toaster/toastermain/urls.py
index 5fb520b..0360302 100644
--- a/poky/bitbake/lib/toaster/toastermain/urls.py
+++ b/poky/bitbake/lib/toaster/toastermain/urls.py
@@ -6,7 +6,7 @@
 # SPDX-License-Identifier: GPL-2.0-only
 #
 
-from django.conf.urls import include, url
+from django.urls import re_path as url, include
 from django.views.generic import RedirectView, TemplateView
 from django.views.decorators.cache import never_cache
 import bldcollector.views