master: subtree updates oct 4 2023

poky: 61531cd395..e444d2bed0:
  Adrian Freihofer (3):
        lib/oe/utils: Refactor to make multiprocess_launch callable without d
        lib/oe/package: Refactor to make strip_execs callable without d
        oeqa/selftest/devtool: Refactor runqemu pre-requisites

  Alexander Kanavin (69):
        cargo-c-native: fix version check
        igt-gpu-tools: do not write shortened git commit hash into binaries
        curl: build and run the full set of ptests
        ptest: report tests that were killed on timeout
        perl: use 64 bit integers across all targets
        perl: ensure all failures are caught
        strace: parallelize ptest
        strace: remove from time64.inc exception list
        busybox: enable 64 bit shell arithmetic (via long long type)
        openssl: parallelize tests
        openssl: ensure all ptest fails are caught
        glibc-tests: rename to glibc-y2038-tests
        sysstat: merge .inc into .bb
        sysstat: update 12.6.2 -> 12.7.4
        glib-2.0: update 2.76.4 -> 2.78.0
        ovmf: update edk2-stable202305 -> edk2-stable202308
        libdnf: update 0.70.1 -> 0.71.0
        liburi-perl: update 5.17 -> 5.21
        python3-pygobject: update 3.44.1 -> 3.46.0
        go-helloworld: update to latest revision
        gzip: update 1.12 -> 1.13
        procps: update 4.0.3 -> 4.0.4
        screen: update 4.9.0 -> 4.9.1
        gobject-introspection: update 1.76.1 -> 1.78.0
        igt-gpu-tools: update 1.27.1 -> 1.28
        libva-utils: update 2.19.0 -> 2.20.0
        piglit: update to latest revision
        groff: add a patch to resolve build races
        groff: fix another build race via backport
        systemd: upgrade 254 -> 254.4
        util-linux: upgrade 2.39.1 -> 2.39.2
        cmake: upgrade 3.27.4 -> 3.27.5
        jquery: upgrade 3.7.0 -> 3.7.1
        python3-setuptools-rust: upgrade 1.6.0 -> 1.7.0
        vulkan: upgrade 1.3.250.0 -> 1.3.261.1
        libxcb: upgrade 1.15 -> 1.16
        xcb-proto: upgrade 1.15.2 -> 1.16.0
        boost: upgrade 1.82.0 -> 1.83.0
        btrfs-tools: upgrade 6.3.3 -> 6.5.1
        createrepo-c: upgrade 0.21.1 -> 1.0.0
        debianutils: upgrade 5.12 -> 5.13
        diffoscope: upgrade 244 -> 249
        ethtool: upgrade 6.3 -> 6.5
        font-util: upgrade 1.4.0 -> 1.4.1
        freetype: upgrade 2.13.1 -> 2.13.2
        ghostscript: upgrade 10.01.2 -> 10.02.0
        iproute2: upgrade 6.4.0 -> 6.5.0
        json-c: upgrade 0.16 -> 0.17
        kmscube: upgrade to latest revision
        libarchive: upgrade 3.7.1 -> 3.7.2
        libsdl2: upgrade 2.28.0 -> 2.28.3
        libsolv: upgrade 0.7.24 -> 0.7.25
        man-pages: upgrade 6.04 -> 6.05.01
        meson: upgrade 1.1.1 -> 1.2.1
        mmc-utils: upgrade to latest revision
        mtd-utils: upgrade 2.1.5 -> 2.1.6
        puzzles: upgrade to latest revision
        python3-dtschema: upgrade 2023.6.1 -> 2023.7
        python3-git: upgrade 3.1.35 -> 3.1.36
        python3-libarchive-c: upgrade 4.0 -> 5.0
        python3-setuptools: upgrade 68.2.1 -> 68.2.2
        python3-sphinx: upgrade 7.2.5 -> 7.2.6
        seatd: upgrade 0.7.0 -> 0.8.0
        sqlite3: upgrade 3.43.0 -> 3.43.1
        tiff: upgrade 4.5.1 -> 4.6.0
        vala: upgrade 0.56.8 -> 0.56.13
        xf86-input-libinput: upgrade 1.3.0 -> 1.4.0
        xwayland: upgrade 23.1.2 -> 23.2.1
        python3-setuptools-scm: fix upstream version check

  Alexandre Belloni (1):
        python3: fix SoB on patch

  Antoine Lubineau (1):
        cve-check: add CVSS vector string to CVE database and reports

  Bruce Ashfield (9):
        linux-yocto/6.4: update to v6.4.15
        linux-yocto/6.1: update to v6.1.52
        linux-yocto/6.4: update to v6.4.16
        linux-yocto/6.1: update to v6.1.53
        linux-yocto/6.1: update to v6.1.55
        linux-yocto-dev: update to v6.6-rcX
        linux-yocto: introduce 6.5 reference kernel recipes
        linux-libc-headers: uprev to v6.5
        linux-libc-headers: default to 6.5

  Charles-Antoine Couret (1):
        systemd-boot-cfg: add .conf suffix to default entry label

  Chen Qi (1):
        python3: add cpython to CVE_PRODUCT

  Daniel Semkowicz (2):
        wic: bootimg-partition: Fix file name in debug message
        uboot-extlinux-config.bbclass: Add missing variable descriptions

  Deepthi Hemraj (2):
        binutils: stable 2.41 branch updates.
        glibc: stable 2.38 branch updates.

  Denys Dmytriyenko (2):
        bitbake.conf: add MACHINE to SDK_NAME
        spdx: use TOOLCHAIN_OUTPUTNAME for SDK filename prefix

  Derek Straka (1):
        pypi.bbclass: Update the upstream checks to automatically replace '_' with '-'

  Eilís 'pidge' Ní Fhlannagáin (2):
        lib/oe/package_managegment: Add nativesdk-intercept PATH
        update_mandb: deb fails due to missing man cache

  Etienne Cordonnier (1):
        bitbake: bitbake-worker/runqueue: Avoid unnecessary bytes object copies

  Insu Park (1):
        bitbake: data: Add missing dependency handling of remove operator

  Jan Garcia (1):
        insane.bbclass: Count raw bytes in shebang-size

  Joshua Watt (6):
        classes/create-spdx-2.2: Add extra debugging for missing package files
        nfs-utils: Don't start nfs-statsd.service without exports
        nfs-utils: Add StateDirectory for systemd services
        bitbake: utils: Add path_is_descendant()
        bitbake: fetch2: git: Use path_is_descendant() instead of path for repo check
        classes/create-spdx-2.2: Show error if document is not found

  Julien Stephan (1):
        bitbake: bitbake: cooker: add a new function to retrieve task signatures

  Kai Kang (2):
        goarch.bbclass: not compatible with riscv32
        adwaita-icon-theme: 43 -> 45.0

  Khem Raj (25):
        perl: Add packageconfig for setlocale functionality differences
        libc-test: Run as non-root user
        coreutils: Upgrade to 9.4
        coreutils: Add config.h to ptest package
        gettext: Add missing dependency on gawk autoconf
        util-linux: Disable failing tests on musl
        Revert "util-linux: scanf_cv_alloc_modifier changed from 'as' -> 'ms'"
        util-linux: Fix lscpu on musl
        qemu: Add PACKAGECONFIG for dax
        llvm: Upgrade to 17.0.1
        oeqa: Use 2.14 release of cpio instead of 2.13
        musl: Update to latest
        bsd-headers: Define __CONCAT and __STRING
        mesa: Update clang-17 patch to upstream v2
        musl-legacy-error: Add recipe
        elfutils: Depend on musl-legacy-error for musl targets
        debugedit: Use musl-legacy-error
        systemd: Drop two upstreamed musl patches
        systemd: Refresh patches to avoid patch-fuzz
        glib-2.0: Enable possible locales with musl for ptests
        glib-2.0: Remove failing ptests on musl
        llvm: Upgrade to 17.0.2
        createrepo-c: Fix function declaration bug found with clang
        mesa: Simplify llvm-17 patch
        mesa: Fix native build on hosts with llvm-dev installed

  Lee Chee Yang (2):
        bind: update to 9.18.19
        cups: fix CVE-2023-4504

  Markus Volk (8):
        mesa: upgrade 23.1.3 -> 23.1.7
        libportal: upgrade 0.6 -> 0.7.1
        appstream: import recipe from meta-oe
        libadwaita: upgrade 1.3.4 -> 1.4.0
        maintainers.inc: add missing entries for appstream and libxmlb
        libxmlb: import recipe from meta-oe
        pulseaudio: dont include consolekit for systemd
        mesa: Upgrade 23.1.7 -> 23.1.8

  Marta Rybczynska (3):
        python3-ply: add to nativesdk
        python3-isodate: add homepage
        python3-rdflib: add homepage

  Martin Jansa (3):
        gcc: backport a fix for ICE caused by CVE-2023-4039.patch
        fontcache.bbclass: avoid native recipes depending on target fontconfig
        multilib_script.bbclass: expand script name as well

  Matthias Schnelte (1):
        bitbake: fetch2: Adds vscode devcontainer support

  Michael Opdenacker (18):
        base: add newline before LICENSE_FLAGS_DETAILS
        dev-manual: new-recipe.rst fix inconsistency with contributor guide
        contributor-guide: recipe-style-guide: add Upstream-Status
        dev-manual: licenses: update license manifest location
        dev-manual: licenses: mention SPDX for license compliance
        dev-manual: disk-space: improve wording for obsolete sstate cache files
        sdk-manual: extensible.rst: fix multiple formatting issues
        alsa-lib: upgrade 1.2.9 -> 1.2.10
        alsa-utils: upgrade 1.2.9 -> 1.2.10
        shadow: fix patch Upstream-Status
        libevent: fix patch Upstream-Status
        alsa-utils: update patch Upstream-Status
        alsa-lib: fix patch Upstream-Status
        lib/oe/qa: remove obsolete "Accepted" string for Upstream-Status
        lib/oe/qa: update guidelines link for Upstream-Status
        bsp-guide: bsp.rst: replace reference to wiki
        dev-manual: new-recipe.rst: replace reference to wiki
        maintainers.inc: add self for flac recipe

  Mikko Rapeli (9):
        openssh: update Upstream-Status to Denied in test logging patch
        openssh: improve banner ptest failure logging
        testimage.bbclass: detect slirp from TEST_RUNQEMUPARAMS
        oeqa dnf_runtime.py: fix HTTP server IP address and port
        oeqa selftest runtime_test.py: append to TEST_RUNQEMUPARAMS
        selftest runtime_test.py: add testimage.bbclass slirp test
        openssh: capture logs in run-ptest
        testimage.bbclass: remove QEMU_USE_SLIRP variable
        oeqa/selftest/context.py: check git command return values

  Ninad Palsule (1):
        kernel-fitImage: Strip path component from dtb

  Peter Kjellerstedt (7):
        libsoup-2.4: Only specify --cross-file when building for target
        libsoup: Only specify --cross-file when building for target
        bitbake: tinfoil: Do not fail when logging is disabled and full config is used
        bitbake: bitbake-getvar: Make --quiet work with --recipe
        bitbake: bitbake-getvar: Make --value imply --quiet
        bitbake: bitbake-getvar: Add a (suppressable) error for undefined variables
        bitbake: bitbake-getvar: Treat undefined variables as empty with --value

  Peter Marko (2):
        openssl: Upgrade 3.1.2 -> 3.1.3
        json-c: define CVE_VERSION

  Qiu Tingting (1):
        tar: add ptest support

  Richard Purdie (34):
        bitbake.conf: Add IMAGE_BASENAME to SDK_NAME
        vim: Upgrade 9.0.1664 -> 9.0.1894
        defaultsetup: Inherit create-spdx by default
        oeqa/selftest/runtime_test: No need to use append with TEST_RUNQEMUPARAMS
        devtool/build_sdk: Drop unused imports
        bitbake: lib: Drop inotify support and replace with mtime checks
        bitbake: server/process: Disable the flush() call in server logging
        recipetool/devtool: Ensure server knows about changed files
        lttng-tools: Upgrade 2.13.10 -> 2.13.11
        oeqa/selftest/wic: Improve assertTrue calls
        elfutils: Fix reproducibility issue with bunzip2
        bitbake: cooker: Drop unneeded flush calls
        sstate: Fix nativesdk entry in SSTATE_ARCHS
        multilib: fix SSTATE_ARCHS for multilib usage
        license/license_image: Fix license file layout to avoid overlapping files
        oeqa/selftest/bbtests: Improve and update test_non_gplv3
        create-spdx/sbom: Ensure files don't overlap between machines
        sstate: Stop allowing overlapping symlinks from sstate
        recipes: Drop remaining PR values from recipes
        bitbake.conf: No longer support PR from filename
        oeqa/selftest: Fix broken symlink removal handling
        oeqa/selftest/reproducible: Avoid oe-selftest startup delays
        oeqa: Streamline oe-selftest startup time
        oeqa/selftest/oescripts: Avoid variable access at module load
        bitbake: codeparser: Update debug variable reference
        contributor-guide/style-guide: Refer to recipes, not packages
        contributor-guide/style-guide: Add a note about task idempotence
        lib: Import packagedata oe module by default
        oeqa/runner: Ensure class setup errors are shown to bitbake logging
        create-spdx: Ensure it is clear where the message comes from
        oeqa/utils/gitarchive: Handle broken commit counts in results repo
        python3-numpy: Fix reproducibility issue
        scritps/runqemu: Ensure we only have two serial ports
        glibc: Pull in stable branch fixes

  Robert Joslyn (2):
        curl: Update from 8.2.1 to 8.3.0
        curl: Skip tests marked flaky

  Robert Yang (1):
        libxcrypt-compat: Remove libcrypt.so to fix conflict with libcrypt

  Roland Hieber (7):
        template: fix typo in section header
        ref-manual: point outdated link to the new location
        contributor-guide: recipe-style-guide: add more patch tagging examples
        contributor-guide: recipe-style-guide: add section about CVE patches
        contributor-guide: discourage marking patches as Inappropriate
        contributor-guide: deprecate "Accepted" patch status
        contributor-guide: style-guide: discourage using Pending patch status

  Ross Burton (19):
        packagegroup-core-x11-xserver: add modesetting driver to default XSERVER
        machine/qemu*: add modesetting drivers to XSERVER
        beaglebone-yocto: remove redundant XSERVER assignment
        gcc: Fix -fstack-protector issue on aarch64
        testimage: respect target/server IPs when using slirp
        manuals: document LICENSE_FLAGS_DETAILS
        linux-yocto: update CVE ignores
        libwebp: upgrade to 1.3.2
        oeqa/runtime/parselogs: remove unused imports
        oeqa/runtime/parselogs: don't bother to show target hardware information
        oeqa/runtime/parselogs: remove obsolete LSB testing support
        oeqa/runtime/parselogs: inline single-caller functions
        oeqa/runtime/parselogs: improve find call
        oeqa/runtime/parselogs: don't pass around members
        oeqa/runtime/parselogs: move some variables out of global scope
        oeqa/runtime/parselogs: select the correct machine-specific ignores early
        oeqa/runtime/parselogs: parse the logs with Python, not grep
        webkitgtk: reduce size of -dbg package
        bitbake: bitbake/lib: spawn server/worker using the current Python interpreter

  Samantha Jalabert (14):
        python3-isodate: Copy recipe from meta-python
        python3-booleanpy: Copy recipe from meta-python
        python3-beartype: add recipe
        python3-click: Copy recipe from meta-python
        ptest-packagelists.inc: add python test click
        python3-license-expression: Copy recipe from meta-python
        ptest-packagelists.inc: add python test license-expression
        python3-rdflib: Copy recipe from meta-python
        python3-uritools: add recipe
        python3-xmltodict: Copy recipe from meta-python
        ptest-packagelists.inc: add python test xmltodict
        python3-spdx-tools: add recipe
        qa: Add selftest for python3-spdx-tools
        maintainers.inc: add python3-spdx-tools and dependencies

  Sean Nyekjaer (1):
        gcc: depend on zstd

  Stefan Tauner (1):
        gdb: fix RDEPENDS for PACKAGECONFIG[tui]

  Stephan Wurm (1):
        python3-jsonschema: Update homepage URL

  Tim Orling (1):
        python3-cryptography{-vectors}: upgrade to 41.0.4

  Trevor Gamblin (6):
        patchtest: Add tests from patchtest oe repo
        patchtest/selftest: remove configurable target
        patchtest: add requirements.txt
        patchtest: Add README.md for selftests
        python3-ptest: skip test_input_no_stdout_fileno
        patchtest/selftest: only split resultlines once

  Ulrich Ölmann (1):
        packagegroup-base: clean up setting packagegroup-machine-base's SUMMARY

  Wang Mingyu (36):
        alsa-ucm-conf: upgrade 1.2.9 -> 1.2.10
        at-spi2-core: upgrade 2.48.3 -> 2.48.4
        dbus: upgrade 1.14.8 -> 1.14.10
        debianutils: upgrade 5.8 -> 5.12
        dnf: upgrade 4.16.1 -> 4.17.0
        harfbuzz: upgrade 8.1.1 -> 8.2.0
        kexec-tools: upgrade 2.0.26 -> 2.0.27
        libinput: upgrade 1.23.0 -> 1.24.0
        libnl: upgrade 3.7.0 -> 3.8.0
        nghttp2: upgrade 1.55.1 -> 1.56.0
        ccache: upgrade 4.8.2 -> 4.8.3
        pkgconf: upgrade 2.0.2 -> 2.0.3
        python3-git: upgrade 3.1.34 -> 3.1.35
        python3-hypothesis: upgrade 6.84.0 -> 6.84.3
        python3-pyelftools: upgrade 0.29 -> 0.30
        python3-pytest: upgrade 7.4.1 -> 7.4.2
        python3-setuptools: upgrade 68.1.2 -> 68.2.1
        strace: upgrade 6.4 -> 6.5
        stress-ng: upgrade 0.16.04 -> 0.16.05
        wayland-utils: upgrade 1.1.0 -> 1.2.0
        wireless-regdb: upgrade 2023.05.03 -> 2023.09.01
        at-spi2-core: upgrade 2.48.4 -> 2.50.0
        enchant2: upgrade 2.5.0 -> 2.6.1
        harfbuzz: upgrade 8.2.0 -> 8.2.1
        kbd: upgrade 2.6.2 -> 2.6.3
        libsecret: upgrade 0.21.0 -> 0.21.1
        gobject-introspection: upgrade 1.78.0 -> 1.78.1
        python3-numpy: upgrade 1.25.2 -> 1.26.0
        python3-hypothesis: upgrade 6.84.3 -> 6.86.2
        python3-pycryptodome: upgrade 3.18.0 -> 3.19.0
        python3-pycryptodomex: upgrade 3.18.0 -> 3.19.0
        python3-smmap: upgrade 5.0.0 -> 6.0.0
        python3-trove-classifiers: upgrade 2023.8.7 -> 2023.9.19
        python3-typing-extensions: upgrade 4.7.1 -> 4.8.0
        python3-urllib3: upgrade 2.0.4 -> 2.0.5
        python3-zipp: upgrade 3.16.2 -> 3.17.0

  Yash Shinde (1):
        glibc: fix CVE-2023-4527

  Yogita Urade (2):
        tiff: fix CVE-2023-40745
        tiff: fix CVE-2023-41175

meta-openembedded: eff1b182c1..ea42cec2ec:
  Alex Kiernan (2):
        mdns: Upgrade 1790.80.10 -> 2200.0.8
        jq: Upgrade 1.6+git -> 1.7

  Archana Polampalli (2):
        python3-appdirs: print ptest results in unified format
        nodejs: upgrade 18.17.1 -> 20.5.1

  Armin Kuster (1):
        openldap: update to 2.5.16.

  Bruce Ashfield (2):
        zfs: update to v2.2.0-rc4
        vboxguestdrivers: fix kernel v6.5 build

  Chi Xu (1):
        mariadb: Add ptest support

  Clément Péron (6):
        etcd-cpp-apiv3: upgrade 0.14.3 -> 0.15.3
        devtools: grpc: bump to 1.56.2
        protobuf: upgrade 4.22.2 -> 4.23.4
        protobuf-c: bump to next release to support protobuf 4.23.x
        mariadb: add missing <cstdint> in rocksdb string_util.h
        etcd-cpp-apiv3: fix build when gRPC is cross compiled

  Daniel Semkowicz (2):
        cockpit: Move packagekit to a separate package
        cockpit: Move apps to a separate package

  Derek Straka (54):
        python3-absl: Update version 1.4.0 -> 2.0.0
        python3-brotli: Update version 1.0.9 -> 1.1.0
        python3-cachecontrol: Update version 0.13.0 -> 0.13.1
        python3-cantools: Update version 38.0.2 -> 39.2.0
        python3-cerberus: Update version 1.3.4 -> 1.3.5
        python3-configshell-fb: Update version 1.1.29 -> 1.1.30
        python3-custom-inherit: Update version 2.3.1 -> 2.4.1
        python3-distlib: Update version 0.3.6 -> 0.3.7
        python3-fasteners: Update version 0.18 -> 0.19
        python3-filelock: Update version 3.12.0 -> 3.12.4
        python3-bleak: Update version 0.20.2 -> 0.21.1
        python3-dynamic-dispatch: Correct the upstream regex check for version upgrades
        python3-google-api-python-client: Update version 2.99.0 -> 2.100.0
        python3-sqlalchemy: Upgrade 2.0.20 -> 2.0.21
        python3-netaddr: Update version 0.8.0 -> 0.9.0
        python3-msgpack: Update version 1.0.5 -> 1.0.6
        python3-protobuf: Update version 4.24.2 -> 4.24.3
        python3-gevent: Update version 23.7.0 -> 23.9.1
        python3-langtable: Update version 0.0.63 -> 0.0.64
        python3-posix-ipc: Update version 1.0.5 -> 1.1.1
        python3-websocket-client: Update version 1.5.3 -> 1.6.3
        python3-web3: Update version 6.9.0 -> 6.10.0
        python3-apiflask: Update version 2.0.1 -> 2.0.2
        python3-argh: Update version 0.29.3 -> 0.29.4
        python3-async-timeout: remove old version of the library
        python3-pydantic: Update version 1.10.7 -> 2.4.1
        python3-pyhamcrest: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
        python3-pyasn1-modules: Update version 0.2.8 -> 0.3.0
        python-pyiface: Update version from git -> 0.0.11
        python3-pymysql: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
        python3-pymysql: update verion 1.0.2 -> 1.1.0
        python3-pyproj: update version 3.6.0 -> 3.6.1
        python3-pyproject-api: update version 1.5.1 -> 1.6.1
        python3-redis: update version 5.0.0 -> 5.0.1
        python3-traitlets: update version 5.9.0 -> 5.10.1
        python3-xxhash: update version 3.2.0 -> 3.3.0
        python3-pyzmq: update version 25.0.0 -> 25.1.1
        python3-cachecontrol: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
        python3-flask-babel: update version 2.0.0 -> 3.1.0
        python3-idna-ssl: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
        python3-ninja-syntax: Fix upstream check by specifying the UPSTREAM_CHECK_URI and UPSTREAM_CHECK_REGEX
        python3-prettytable: update version 3.6.0 -> 3.9.0
        python3-pytz-deprecation-shim: Remove outdated recipe meant to be a short lived shim
        python3-tzlocal: Remove dependency on pytz_deprecation_shim removed in release 5.0
        python3-astroid: update version 2.16.6 -> 3.0.0
        python3-flask: update version 2.3.2 -> 2.3.3
        python3-google-api-core: update version 2.12.0
        python3-google-api-python-client: update version 2.100.0 -> 2.101.0
        python3-google-auth: update version 2.23.0 -> 2.23.1
        python3-parse-type: update version 0.5.2 -> 0.6.2
        python3-nacl: Add recipe for the latest release of PyNaCl
        python3-botocore: add recipe for latest version of botocore
        python3-boto3: add recipe for latest version of boto3
        python3-flask-cors: add initial version of the recipe for 4.0.0

  Etienne Cordonnier (1):
        uutils-coreutils: upgrade 0.0.20 -> 0.0.21

  Gianfranco Costamagna (3):
        mosquitto: do not automatically depend on dlt-daemon, it's a non-mandatory logging system
        mosquitto: upgrade 2.0.15 -> 2.0.17
        mosquitto: upgrade 2.0.17 -> 2.0.18

  Jeffrey Pautler (1):
        bolt: disable CVE checking for this recipe

  Jonas Gorski (1):
        frr: upgrade 8.4.4 -> 9.0.1

  Julian Haller (1):
        openct: Fix typo in SUMMARY variable

  Kai Kang (1):
        ostree: not compatible with riscv32 when ptest enabled

  Khem Raj (25):
        vlc: Fix build with gettext 0.22+
        usbguard: Enable seccomp if distro features have it
        sharutils: Check for intmax_t using configure
        poco: Add pass/fail ststus into logs
        mongodb: Add rdep on tzdata-core
        mongodb: Upgrade to 4.4.24
        meta-oe-ptest-image-poco: Increase size tp 1G
        poco: Fix ptest runtime errors
        poco: Do not enable MongoDB packageconfig by default
        plocate: Upgrade to 1.1.19 release
        xscreensaver: Add osuosl backup MIRROR
        mozjs-115: Apply autoconf tuple mismatch fix
        cpp-netlib: Fix build with boost 1.80+
        cpp-netlib: Fix buildpaths in generated cmake files
        python3-pybluez: Fix patch upstream-status
        python3-pynetlinux: Fix patch upstream-status
        libnet-idn-encode: Add recipe
        libio-socket-ssl-perl: Change libnet-libidn-perl->libnet-idn-encode rdep for ptests
        libnfs: Drop -Wno-implicit-function-declaration
        webkitgtk3: Do not use musttail with clang on arm
        fftw: Fix ptest result reporting
        nodejs: Fix ptest result reporting
        relayd: Update to latest tip of trunk
        relayd: Fix build with clang
        kernel-selftest: Build headers before compiling tests

  Lee Chee Yang (8):
        libsdl: fix CVE-2022-34568
        keepalived: 2.2.2 -> 2.2.8
        irssi: 1.4.2 -> 1.4.4
        iniparser: Fix CVE-2023-33461
        opensc: fix CVE-2023-2977
        x11vnc: Fix CVE-2020-29074
        libvncserver: update to 0.9.14
        ntpsec: 1.2.2 -> 1.2.2a

  Markus Volk (48):
        libei: add recipe
        libxmlb: update 0.3.10 -> 0.3.14
        appstream: update 0.16.2 -> 0.16.3
        webrtc-audio-processing: add recipe for 1.x
        pipewire: upgrade 0.3.79 -> 0.3.80
        evolution-data-server: upgrade 3.48.3 -> 3.50.0
        appstream: remove workaround for cross-compile
        libxmlb: fix a reproducibility and runtime issue with ptest
        tracker-miners: upgrade 3.5.0 -> 3.6.0
        mozjs: upgrade 102.9.0 -> 102.15.0
        tecla: add recipe
        polkit: upgrade 122 -> 123
        tracker: upgrade 3.5.1 -> 3.6.0
        libxmlb: remove recipe
        appstream: remove recipe
        gvfs: upgrade 1.51.90 -> 1.52.0
        mutter: upgrade 44.3 -> 45.0
        xdg-desktop-portal: upgrade 1.16.0 -> 1.18.0
        gnome-boxes: upgrade 44.2 -> 45.0
        gnome-session: upgrade 44.0 -> 45.0
        gnome-text-editor: upgrade 44.0 -> 45.0
        gnome-shell: upgrade 44.3 -> 45.0
        eog: upgrade 44.3 -> 45.0
        gnome-calculator: upgrade 44.0 -> 45.0
        xdg-desktop-portal-gnome: upgrade 44.1 -> 45.0
        gnome-calendar: upgrade 44.0 -> 45.0
        gnome-software: upgrade 44.4 -> 45.0
        zenity: upgrade 3.44.0 -> 3.44.2
        gnome-system-monitor: upgrade 44.0 -> 45.0
        webkitgtk: upgrade 2.40.5 -> 2.42.0
        gnome-control-center: upgrade 44.3 -> 45.0
        gnome-settings-daemon: upgrade 44.1 -> 45.0
        tracker: add missing Upstream-Status
        gdm: upgrade 44.1 -> 45.0.1
        gnome-calendar: fix reproducibility issue
        exiv2: Upgrade 0.27.6 -> 0.28.0
        gexiv: Upgrade 0.14.0 -> 0.14.2
        gjs: Upgrade 1.76.1 -> 1.78.0
        mozjs: add recipe for v115
        evince: Upgrade 44.2 -> 45.0
        Nautilus: Upgrade 44.2.1 -> 45.0
        gedit: Upgrade 44.2 -> 46.1
        tepl: Upgrade 6.4.0 -> 6.8.0
        libblockdev: Upgrade 2.28 -> 3.03
        udisks2: Upgrade 2.9.4 -> 2.10.1
        mozjs: Upgrade 102.15.0 -> 102.15.1
        libnfs: dont install libnfs-config.cmake
        gnome-remote-desktop: Upgrade 44.2 -> 45.0

  Martin Jansa (20):
        webrtc-audio-processing: Fix build with -Werror=return-type
        freeglut: return x11 to REQUIRED_DISTRO_FEATURES
        packagegroup-meta-multimedia: restore x11 restriction for projucer
        btrfsmaintenance: move btrfs-tools dependency from build-time to run-time
        btrfsmaintenance: drop allarch
        ttf-google-fira: exclude siggen dependency on fontconfig
        cukinia: drop allarch
        mdio-tools: exclude siggen dependency on mdio-netlink
        ot-br-posix: exclude siggen dependency on ipset
        mongodb: add and fix Upstream-Status
        mongodb: Fix build on 32bit
        gupnp: fix build with meson-1.2.0
        minifi-cpp, mozjs-115, redis-7.2.1, pv: add missing Upstream-Status
        mozjs: fix filename in MULTILIB_SCRIPTS
        gupnp-tools: fix build with meson-1.2.0
        gnome-tweaks, networkmanager-fortisslvpn, libesmtp, json-schema-validator, python3-pybluez, python3-pynetlinux, apache2: Fix Malformed Upstream-Status
        mozjs: use PV in MULTILIB_SCRIPTS
        mosquitto, etcd-cpp-apiv3: add missing Upstream-Status
        meta-oe/dynamic-layers: add Upstream-Status where missing
        meta-oe/dynamic-layers: add one more missing Upstream-Status and fix one malformed

  Michał Iwanicki (1):
        python3-pyu2f: add recipe

  Mingli Yu (4):
        minifi-cpp: Remove the buildpath issue
        hdf5: Upgrade to 1.14.2
        vlock: Use EXTRA_CFLAGS
        mozjs-102: Remove the buildpath

  Richard Leitner (2):
        python3-shellingham: add recipe for v1.5.3
        python3-autoflake: add recipe for v2.2.1

  Ross Burton (1):
        webkitgtk3: reduce size of -dbg package

  Sam Van Den Berge (6):
        python3-flask-jwt-extended: add recipe
        python3-flask-marshmallow: add recipe
        python3-apispec: add recipe
        python3-flask-httpauth: add recipe
        python3-webargs: add recipe
        python3-apiflask: add recipe

  Samantha Jalabert (6):
        Remove python3-rdflib
        Remove python3-license-expression
        Remove python3-xmltodict
        Remove python3-booleanpy
        Remove python3-click
        Remove python3-isodate

  Samuli Piippo (1):
        protobuf: stage protoc binary to sysroot

  Sanjay Chitroda (1):
        netkit-telnet: Fix CVE-2022-39028

  Trevor Gamblin (1):
        python3-aiofiles: upgrade 23.1.0 -> 23.2.1

  Vyacheslav Yurkov (3):
        overlayfs-tools: Drop unneeded dependency
        overlayfs-tools: Bump up the version
        overlayfs-tools: Install fsck binary

  Wang Mingyu (42):
        freerdp: upgrade 2.10.0 -> 2.11.0
        boost-sml: upgrade 1.1.8 -> 1.1.9
        ctags: upgrade 6.0.20230827.0 -> 6.0.20230917.0
        dovecot: upgrade 2.3.20 -> 2.3.21
        freerdp: upgrade 2.11.0 -> 2.11.1
        gensio: upgrade 2.7.5 -> 2.7.6
        geoclue: upgrade 2.7.0 -> 2.7.1
        hwloc: upgrade 2.9.2 -> 2.9.3
        iperf3: upgrade 3.14 -> 3.15
        libcloudproviders: upgrade 0.3.2 -> 0.3.4
        libdeflate: upgrade 1.18 -> 1.19
        libglvnd: upgrade 1.6.0 -> 1.7.0
        libtommath: upgrade 1.2.0 -> 1.2.1
        libcoap: upgrade 4.3.1 -> 4.3.3
        python3-antlr4-runtime: upgrade 4.13.0 -> 4.13.1
        python3-lazy: upgrade 1.5 -> 1.6
        python3-pyfanotify: upgrade 0.2.0 -> 0.2.1
        psqlodbc: upgrade 15.00.0000 -> 16.00.0000
        python3-argcomplete: upgrade 3.1.1 -> 3.1.2
        python3-bitstring: upgrade 4.1.1 -> 4.1.2
        python3-cmake: upgrade 3.27.4.1 -> 3.27.5
        python3-coverage: upgrade 7.3.0 -> 7.3.1
        python3-engineio: upgrade 4.7.0 -> 4.7.1
        python3-eth-utils: upgrade 2.2.0 -> 2.2.1
        python3-flask-migrate: upgrade 4.0.4 -> 4.0.5
        python3-flask-socketio: upgrade 5.3.5 -> 5.3.6
        python3-google-api-python-client: upgrade 2.97.0 -> 2.99.0
        python3-google-auth: upgrade 2.22.0 -> 2.23.0
        python3-pillow: upgrade 10.0.0 -> 10.0.1
        python3-pymisp: upgrade 2.4.175 -> 2.4.176
        python3-pymodbus: upgrade 3.5.0 -> 3.5.2
        python3-rapidjson: upgrade 1.10 -> 1.11
        python3-rich: upgrade 13.5.2 -> 13.5.3
        python3-term: upgrade 2.4 -> 2.5
        python3-tox: upgrade 4.11.1 -> 4.11.3
        python3-typeguard: upgrade 4.1.3 -> 4.1.5
        python3-types-setuptools: upgrade 68.1.0.1 -> 68.2.0.0
        python3-virtualenv: upgrade 20.24.4 -> 20.24.5
        python3-xlsxwriter: upgrade 3.1.2 -> 3.1.3
        python3-zeroconf: upgrade 0.97.0 -> 0.112.0
        redis: upgrade 7.2.0 -> 7.2.1
        remmina: upgrade 1.4.31 -> 1.4.32

  Xiangyu Chen (3):
        mosh: add support of protobuf 4.22.x
        protobuf: upgrade 3.21.12 -> 4.22.2
        protobuf-c: add support of protobuf 4.22.x

  Yi Zhao (1):
        audit: upgrade 3.1.1 -> 3.1.2

meta-arm: bd0953cc60..95789365f7:
  Abdellatif El Khlifi (2):
        arm-bsp/trusted-firmware-a: corstone1000: enable ERRATA_A35_855472
        arm-bsp/u-boot: corstone1000: purge U-Boot specific DT nodes before Linux

  Adam Johnston (1):
        arm-bsp/trusted-firmware-a: Fix BL32 path if usrmerge enabled

  Divin Raj (1):
        ci,doc,kas,arm-bsp,arm: Remove support for fvp-baser-aemv8r64 machine

  Emekcan Aras (6):
        arm-bsp/optee-os: corstone1000: Handling logging syscall correctly
        CI: Add meta-secure-core
        CI: Include meta-secure-core in corstone1000
        kas: corstone1000: add meta-secure-core
        arm-bsp/u-boot: corstone1000: introduce authenticated capsule update
        arm-bsp/trusted-firmware-m: Enable authenticated capsule update

  Javier Tia (2):
        optee-client: start tee-supplicant.service when teeprivX dev is detected
        libts: tee-udev.rules: Change ownership to tee group

  Jon Mason (5):
        arm/edk2: update to edk2-stable202308
        arm/trusted-firmware-m: update to 1.8.1
        arm/opencsd: update to v1.4.1
        arm/scp-firmware: update to v2.13.0
        README: remove reference to meta-arm-autonomy

  Khem Raj (1):
        layer.conf: update LAYERSERIES_COMPAT for nanbield

  Mariam Elshakfy (2):
        arm-bsp/optee-os: N1SDP upgrade optee-os to 3.22
        arm-bsp/optee-os: N1SDP upgrade tadevkit and optee-test to 3.22

  Peter Hoyes (2):
        CI: Allow a GitHub container registry mirror to be specified
        CI: Make update-repos more resilient to network issues

  Ross Burton (15):
        arm/generic-arm64: move SERIAL_CONSOLES to generic-arm64
        arm/qemu-generic-arm64: force off KVM in qemu
        arm/generic-arm64: set XSERVER to install the modesetting driver
        CI: remove redundant variables in testimage.yml
        arm-bsp: change port mapping for SSH to port 2222
        arm/apply_local_src_patches: allow use in multiple directories
        arm/trusted-services: pass through CMake generator
        arm/trusted-services: add missing pkgconfig inherit
        arm/trusted-services/ts-remote-test: move binary to $bindir
        arm/trusted-services/ts-sp-env-test: add missing DEPENDS
        arm/trusted-services/ts-sp-env-test: remove
        arm/trusted-services: use apply_local_src_patches
        arm/trusted-services: upgrade nanopb and fix build races
        CI: use a venv for sphinx
        CI: upgrade to Kas 4 container

  Xueliang Zhong (2):
        arm-bsp/n1sdp: update to linux yocto kernel 6.4
        arm-bsp/corstone1000: bump kernel version to v6.4

meta-security: 1856a7cf43..aca6d4a9e7:
  Armin Kuster (10):
        suricata: fix build issue.
        suricata: Update to 7.0.0
        sssd: Update to 2.9.2
        openscap: update to 1.3.9
        python3-privacyidea: update to 3.8.1
        lkrg-module: update to 0.9.7
        libhtp: update to 0.5.45
        swtpm: update 0.8.1
        lynis: Update to 3.0.9
        scap-security-guide: Drop Poky patch and update to tip

  John Broadbent (1):
        libhoth: Update

meta-raspberrypi: 6501ec892c..482d864b8f:
  Joshua Watt (1):
        rpi-base: Fix wic image kernel dependency

  Khem Raj (5):
        userland: Update to trunk from 20230419
        linux-raspberrypi: Upgrade 6.1 release to latest point release 6.1.54
        linux-firmware-rpidistro: Update to 20230210-5_bpo11+1
        bluez-firmware-rpidistro: Update to 1.2-4+rpt10
        raspberrypi-firmware: Update to 20230509~buster

  Martin Jansa (1):
        layer.conf: update LAYERSERIES_COMPAT for nanbield

Change-Id: Id75112a3b0be4bd150dc5d9a28c01982ed48200e
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/poky/meta/lib/oeqa/core/runner.py b/poky/meta/lib/oeqa/core/runner.py
index 5077eb8..a86a706 100644
--- a/poky/meta/lib/oeqa/core/runner.py
+++ b/poky/meta/lib/oeqa/core/runner.py
@@ -44,6 +44,7 @@
         self.endtime = {}
         self.progressinfo = {}
         self.extraresults = {}
+        self.shownmsg = []
 
         # Inject into tc so that TestDepends decorator can see results
         tc.results = self
@@ -74,6 +75,7 @@
             for (scase, msg) in getattr(self, t):
                 if test.id() == scase.id():
                     self.tc.logger.info(str(msg))
+                    self.shownmsg.append(test.id())
                     break
 
     def logSummary(self, component, context_msg=''):
@@ -169,7 +171,6 @@
 
     def logDetails(self, json_file_dir=None, configuration=None, result_id=None,
             dump_streams=False):
-        self.tc.logger.info("RESULTS:")
 
         result = self.extraresults
         logs = {}
@@ -193,6 +194,10 @@
             report = {'status': status}
             if log:
                 report['log'] = log
+                # Class setup failures wouldn't enter stopTest so would never display
+                if case.id() not in self.shownmsg:
+                    self.tc.logger.info("Failure (%s) for %s:\n" % (status, case.id()) + log)
+
             if duration:
                 report['duration'] = duration
 
@@ -215,6 +220,7 @@
                 report['stderr'] = stderr
             result[case.id()] = report
 
+        self.tc.logger.info("RESULTS:")
         for i in ['PASSED', 'SKIPPED', 'EXPECTEDFAIL', 'ERROR', 'FAILED', 'UNKNOWN']:
             if i not in logs:
                 continue
diff --git a/poky/meta/lib/oeqa/core/utils/concurrencytest.py b/poky/meta/lib/oeqa/core/utils/concurrencytest.py
index 4f77589..5e20b0e 100644
--- a/poky/meta/lib/oeqa/core/utils/concurrencytest.py
+++ b/poky/meta/lib/oeqa/core/utils/concurrencytest.py
@@ -193,11 +193,12 @@
 #
 class ConcurrentTestSuite(unittest.TestSuite):
 
-    def __init__(self, suite, processes, setupfunc, removefunc):
+    def __init__(self, suite, processes, setupfunc, removefunc, bb_vars):
         super(ConcurrentTestSuite, self).__init__([suite])
         self.processes = processes
         self.setupfunc = setupfunc
         self.removefunc = removefunc
+        self.bb_vars = bb_vars
 
     def run(self, result):
         testservers, totaltests = fork_for_tests(self.processes, self)
@@ -243,7 +244,7 @@
 def fork_for_tests(concurrency_num, suite):
     testservers = []
     if 'BUILDDIR' in os.environ:
-        selftestdir = get_test_layer()
+        selftestdir = get_test_layer(suite.bb_vars['BBLAYERS'])
 
     test_blocks = partition_tests(suite, concurrency_num)
     # Clear the tests from the original suite so it doesn't keep them alive
diff --git a/poky/meta/lib/oeqa/runtime/cases/buildcpio.py b/poky/meta/lib/oeqa/runtime/cases/buildcpio.py
index 3728855..ce122eb 100644
--- a/poky/meta/lib/oeqa/runtime/cases/buildcpio.py
+++ b/poky/meta/lib/oeqa/runtime/cases/buildcpio.py
@@ -14,7 +14,7 @@
 
     @classmethod
     def setUpClass(cls):
-        uri = 'https://downloads.yoctoproject.org/mirror/sources/cpio-2.13.tar.gz'
+        uri = 'https://downloads.yoctoproject.org/mirror/sources/cpio-2.14.tar.gz'
         cls.project = TargetBuildProject(cls.tc.target,
                                          uri,
                                          dl_dir = cls.tc.td['DL_DIR'])
diff --git a/poky/meta/lib/oeqa/runtime/cases/go.py b/poky/meta/lib/oeqa/runtime/cases/go.py
index 7514d10..39a80f4 100644
--- a/poky/meta/lib/oeqa/runtime/cases/go.py
+++ b/poky/meta/lib/oeqa/runtime/cases/go.py
@@ -18,4 +18,4 @@
         self.assertEqual(status, 0, msg=msg)
 
         msg = 'Incorrect output: %s' % output
-        self.assertEqual(output, "Hello, Go examples!", msg=msg)
+        self.assertEqual(output, "Hello, world!", msg=msg)
diff --git a/poky/meta/lib/oeqa/runtime/cases/parselogs.py b/poky/meta/lib/oeqa/runtime/cases/parselogs.py
index e67d375..a805edd 100644
--- a/poky/meta/lib/oeqa/runtime/cases/parselogs.py
+++ b/poky/meta/lib/oeqa/runtime/cases/parselogs.py
@@ -4,17 +4,12 @@
 # SPDX-License-Identifier: MIT
 #
 
+import collections
 import os
 
-from subprocess import check_output
 from shutil import rmtree
 from oeqa.runtime.case import OERuntimeTestCase
 from oeqa.core.decorator.depends import OETestDepends
-from oeqa.core.decorator.data import skipIfDataVar
-from oeqa.runtime.decorator.package import OEHasPackage
-
-#in the future these lists could be moved outside of module
-errors = ["error", "cannot", "can\'t", "failed"]
 
 common_errors = [
     "(WW) warning, (EE) error, (NI) not implemented, (??) unknown.",
@@ -69,11 +64,9 @@
     "xf86OpenConsole: Switching VT failed",
     "Failed to read LoaderConfigTimeoutOneShot variable, ignoring: Operation not supported",
     "Failed to read LoaderEntryOneShot variable, ignoring: Operation not supported",
+    "invalid BAR (can't size)",
     ]
 
-video_related = [
-]
-
 x86_common = [
     '[drm:psb_do_init] *ERROR* Debug is',
     'wrong ELF class',
@@ -105,16 +98,13 @@
     'default' : common_errors,
     'qemux86' : [
         'Failed to access perfctr msr (MSR',
-        'pci 0000:00:00.0: [Firmware Bug]: reg 0x..: invalid BAR (can\'t size)',
         ] + qemux86_common,
     'qemux86-64' : qemux86_common,
     'qemumips' : [
         'Failed to load module "glx"',
-        'pci 0000:00:00.0: [Firmware Bug]: reg 0x..: invalid BAR (can\'t size)',
         'cacheinfo: Failed to find cpu0 device node',
         ] + common_errors,
     'qemumips64' : [
-        'pci 0000:00:00.0: [Firmware Bug]: reg 0x..: invalid BAR (can\'t size)',
         'cacheinfo: Failed to find cpu0 device node',
          ] + common_errors,
     'qemuppc' : [
@@ -206,17 +196,19 @@
         ] + common_errors,
 }
 
-log_locations = ["/var/log/","/var/log/dmesg", "/tmp/dmesg_output.log"]
-
 class ParseLogsTest(OERuntimeTestCase):
 
+    # Which log files should be collected
+    log_locations = ["/var/log/", "/var/log/dmesg", "/tmp/dmesg_output.log"]
+
+    # The keywords that identify error messages in the log files
+    errors = ["error", "cannot", "can't", "failed"]
+
     @classmethod
     def setUpClass(cls):
-        cls.errors = errors
-
         # When systemd is enabled we need to notice errors on
         # circular dependencies in units.
-        if 'systemd' in cls.td.get('DISTRO_FEATURES', ''):
+        if 'systemd' in cls.td.get('DISTRO_FEATURES'):
             cls.errors.extend([
                 'Found ordering cycle on',
                 'Breaking ordering cycle by deleting job',
@@ -224,48 +216,13 @@
                 'Ordering cycle found, skipping',
                 ])
 
-        cls.ignore_errors = ignore_errors
-        cls.log_locations = log_locations
-        cls.msg = ''
-        is_lsb, _ = cls.tc.target.run("which LSB_Test.sh")
-        if is_lsb == 0:
-            for machine in cls.ignore_errors:
-                cls.ignore_errors[machine] = cls.ignore_errors[machine] \
-                                             + video_related
+        cls.errors = [s.casefold() for s in cls.errors]
 
-    def getMachine(self):
-        return self.td.get('MACHINE', '')
-
-    def getWorkdir(self):
-        return self.td.get('WORKDIR', '')
-
-    # Get some information on the CPU of the machine to display at the
-    # beginning of the output. This info might be useful in some cases.
-    def getHardwareInfo(self):
-        hwi = ""
-        cmd = ('cat /proc/cpuinfo | grep "model name" | head -n1 | '
-               " awk 'BEGIN{FS=\":\"}{print $2}'")
-        _, cpu_name = self.target.run(cmd)
-
-        cmd = ('cat /proc/cpuinfo | grep "cpu cores" | head -n1 | '
-               "awk {'print $4'}")
-        _, cpu_physical_cores = self.target.run(cmd)
-
-        cmd = 'cat /proc/cpuinfo | grep "processor" | wc -l'
-        _, cpu_logical_cores = self.target.run(cmd)
-
-        _, cpu_arch = self.target.run('uname -m')
-
-        hwi += 'Machine information: \n'
-        hwi += '*******************************\n'
-        hwi += 'Machine name: ' + self.getMachine() + '\n'
-        hwi += 'CPU: ' + str(cpu_name) + '\n'
-        hwi += 'Arch: ' + str(cpu_arch)+ '\n'
-        hwi += 'Physical cores: ' + str(cpu_physical_cores) + '\n'
-        hwi += 'Logical cores: ' + str(cpu_logical_cores) + '\n'
-        hwi += '*******************************\n'
-
-        return hwi
+        try:
+            cls.ignore_errors = [s.casefold() for s in ignore_errors[cls.td.get('MACHINE')]]
+        except KeyError:
+            cls.logger.info('No ignore list found for this machine, using default')
+            cls.ignore_errors = [s.casefold() for s in ignore_errors['default']]
 
     # Go through the log locations provided and if it's a folder
     # create a list with all the .log files in it, if it's a file
@@ -273,23 +230,23 @@
     def getLogList(self, log_locations):
         logs = []
         for location in log_locations:
-            status, _ = self.target.run('test -f ' + str(location))
+            status, _ = self.target.run('test -f %s' % location)
             if status == 0:
-                logs.append(str(location))
+                logs.append(location)
             else:
-                status, _ = self.target.run('test -d ' + str(location))
+                status, _ = self.target.run('test -d %s' % location)
                 if status == 0:
-                    cmd = 'find ' + str(location) + '/*.log -maxdepth 1 -type f'
+                    cmd = 'find %s -name \\*.log -maxdepth 1 -type f' % location
                     status, output = self.target.run(cmd)
                     if status == 0:
                         output = output.splitlines()
                         for logfile in output:
-                            logs.append(os.path.join(location, str(logfile)))
+                            logs.append(os.path.join(location, logfile))
         return logs
 
     # Copy the log files to be parsed locally
     def transfer_logs(self, log_list):
-        workdir = self.getWorkdir()
+        workdir = self.td.get('WORKDIR')
         self.target_logs = workdir + '/' + 'target_logs'
         target_logs = self.target_logs
         if os.path.exists(target_logs):
@@ -306,65 +263,55 @@
         logs = [f for f in dir_files if os.path.isfile(f)]
         return logs
 
-    # Build the grep command to be used with filters and exclusions
-    def build_grepcmd(self, errors, ignore_errors, log):
-        grepcmd = 'grep '
-        grepcmd += '-Ei "'
-        for error in errors:
-            grepcmd += r'\<' + error + r'\>' + '|'
-        grepcmd = grepcmd[:-1]
-        grepcmd += '" ' + str(log) + " | grep -Eiv \'"
+    def get_context(self, lines, index, before=6, after=3):
+        """
+        Given a set of lines and the index of the line that is important, return
+        a number of lines surrounding that line.
+        """
+        last = len(lines)
 
-        try:
-            errorlist = ignore_errors[self.getMachine()]
-        except KeyError:
-            self.msg += 'No ignore list found for this machine, using default\n'
-            errorlist = ignore_errors['default']
+        start = index - before
+        end = index + after + 1
 
-        for ignore_error in errorlist:
-            ignore_error = ignore_error.replace('(', r'\(')
-            ignore_error = ignore_error.replace(')', r'\)')
-            ignore_error = ignore_error.replace("'", '.')
-            ignore_error = ignore_error.replace('?', r'\?')
-            ignore_error = ignore_error.replace('[', r'\[')
-            ignore_error = ignore_error.replace(']', r'\]')
-            ignore_error = ignore_error.replace('*', r'\*')
-            ignore_error = ignore_error.replace('0-9', '[0-9]')
-            grepcmd += ignore_error + '|'
-        grepcmd = grepcmd[:-1]
-        grepcmd += "\'"
+        if start < 0:
+            end -= start
+            start = 0
+        if end > last:
+            start -= end - last
+            end = last
 
-        return grepcmd
+        return lines[start:end]
 
-    # Grep only the errors so that their context could be collected.
-    # Default context is 10 lines before and after the error itself
-    def parse_logs(self, errors, ignore_errors, logs,
-                   lines_before = 10, lines_after = 10):
-        results = {}
-        rez = []
-        grep_output = ''
+    def test_get_context(self):
+        """
+        A test case for the test case.
+        """
+        lines = list(range(0,10))
+        self.assertEqual(self.get_context(lines, 0, 2, 1), [0, 1, 2, 3])
+        self.assertEqual(self.get_context(lines, 5, 2, 1), [3, 4, 5, 6])
+        self.assertEqual(self.get_context(lines, 9, 2, 1), [6, 7, 8, 9])
+
+    def parse_logs(self, logs, lines_before=10, lines_after=10):
+        """
+        Search the log files @logs looking for error lines (marked by
+        @self.errors), ignoring anything listed in @self.ignore_errors.
+
+        Returns a dictionary of log filenames to a dictionary of error lines to
+        the error context (controlled by @lines_before and @lines_after).
+        """
+        results = collections.defaultdict(dict)
 
         for log in logs:
-            result = None
-            thegrep = self.build_grepcmd(errors, ignore_errors, log)
+            with open(log) as f:
+                lines = f.readlines()
 
-            try:
-                result = check_output(thegrep, shell=True).decode('utf-8')
-            except:
-                pass
+            for i, line in enumerate(lines):
+                line = line.strip()
+                line_lower = line.casefold()
 
-            if result is not None:
-                results[log] = {}
-                rez = result.splitlines()
-
-                for xrez in rez:
-                    try:
-                        cmd = ['grep', '-F', xrez, '-B', str(lines_before)]
-                        cmd += ['-A', str(lines_after), log]
-                        grep_output = check_output(cmd).decode('utf-8')
-                    except:
-                        pass
-                    results[log][xrez]=grep_output
+                if any(keyword in line_lower for keyword in self.errors):
+                    if not any(ignore in line_lower for ignore in self.ignore_errors):
+                        results[log][line] = "".join(self.get_context(lines, i, lines_before, lines_after))
 
         return results
 
@@ -377,17 +324,18 @@
     def test_parselogs(self):
         self.write_dmesg()
         log_list = self.get_local_log_list(self.log_locations)
-        result = self.parse_logs(self.errors, self.ignore_errors, log_list)
-        print(self.getHardwareInfo())
+        result = self.parse_logs(log_list)
+
         errcount = 0
+        self.msg = ""
         for log in result:
             self.msg += 'Log: ' + log + '\n'
             self.msg += '-----------------------\n'
             for error in result[log]:
                 errcount += 1
-                self.msg += 'Central error: ' + str(error) + '\n'
+                self.msg += 'Central error: ' + error + '\n'
                 self.msg +=  '***********************\n'
-                self.msg +=  result[str(log)][str(error)] + '\n'
+                self.msg +=  result[log][error] + '\n'
                 self.msg +=  '***********************\n'
         self.msg += '%s errors found in logs.' % errcount
         self.assertEqual(errcount, 0, msg=self.msg)
diff --git a/poky/meta/lib/oeqa/runtime/cases/ptest.py b/poky/meta/lib/oeqa/runtime/cases/ptest.py
index 23a71ea..fbaeb84 100644
--- a/poky/meta/lib/oeqa/runtime/cases/ptest.py
+++ b/poky/meta/lib/oeqa/runtime/cases/ptest.py
@@ -96,7 +96,7 @@
         failed_tests = {}
 
         for section in sections:
-            if 'exitcode' in sections[section].keys():
+            if 'exitcode' in sections[section].keys() or 'timeout' in sections[section].keys():
                 failed_tests[section] = sections[section]["log"]
 
         for section in results:
diff --git a/poky/meta/lib/oeqa/sdk/cases/buildcpio.py b/poky/meta/lib/oeqa/sdk/cases/buildcpio.py
index c42c670..33b946f 100644
--- a/poky/meta/lib/oeqa/sdk/cases/buildcpio.py
+++ b/poky/meta/lib/oeqa/sdk/cases/buildcpio.py
@@ -19,10 +19,10 @@
     """
     def test_cpio(self):
         with tempfile.TemporaryDirectory(prefix="cpio-", dir=self.tc.sdk_dir) as testdir:
-            tarball = self.fetch(testdir, self.td["DL_DIR"], "https://ftp.gnu.org/gnu/cpio/cpio-2.13.tar.gz")
+            tarball = self.fetch(testdir, self.td["DL_DIR"], "https://ftp.gnu.org/gnu/cpio/cpio-2.14.tar.gz")
 
             dirs = {}
-            dirs["source"] = os.path.join(testdir, "cpio-2.13")
+            dirs["source"] = os.path.join(testdir, "cpio-2.14")
             dirs["build"] = os.path.join(testdir, "build")
             dirs["install"] = os.path.join(testdir, "install")
 
diff --git a/poky/meta/lib/oeqa/selftest/cases/bbtests.py b/poky/meta/lib/oeqa/selftest/cases/bbtests.py
index 31aa568..d242352 100644
--- a/poky/meta/lib/oeqa/selftest/cases/bbtests.py
+++ b/poky/meta/lib/oeqa/selftest/cases/bbtests.py
@@ -236,8 +236,11 @@
         result = bitbake('selftest-ed', ignore_status=True)
         self.assertEqual(result.status, 0, "Bitbake failed, exit code %s, output %s" % (result.status, result.output))
         lic_dir = get_bb_var('LICENSE_DIRECTORY')
-        self.assertFalse(os.path.isfile(os.path.join(lic_dir, 'selftest-ed/generic_GPL-3.0-or-later')))
-        self.assertTrue(os.path.isfile(os.path.join(lic_dir, 'selftest-ed/generic_GPL-2.0-or-later')))
+        arch = get_bb_var('SSTATE_PKGARCH')
+        filename = os.path.join(lic_dir, arch, 'selftest-ed', 'generic_GPL-3.0-or-later')
+        self.assertFalse(os.path.isfile(filename), msg="License file %s exists and shouldn't" % filename)
+        filename = os.path.join(lic_dir, arch, 'selftest-ed', 'generic_GPL-2.0-or-later')
+        self.assertTrue(os.path.isfile(filename), msg="License file %s doesn't exist" % filename)
 
     def test_setscene_only(self):
         """ Bitbake option to restore from sstate only within a build (i.e. execute no real tasks, only setscene)"""
diff --git a/poky/meta/lib/oeqa/selftest/cases/devtool.py b/poky/meta/lib/oeqa/selftest/cases/devtool.py
index a2b77e5..b577f6d 100644
--- a/poky/meta/lib/oeqa/selftest/cases/devtool.py
+++ b/poky/meta/lib/oeqa/selftest/cases/devtool.py
@@ -256,6 +256,31 @@
         if remaining_removelines:
             self.fail('Expected removed lines not found: %s' % remaining_removelines)
 
+    def _check_runqemu_prerequisites(self):
+        """Check runqemu is available
+
+        Whilst some tests would seemingly be better placed as a runtime test,
+        unfortunately the runtime tests run under bitbake and you can't run
+        devtool within bitbake (since devtool needs to run bitbake itself).
+        Additionally we are testing build-time functionality as well, so
+        really this has to be done as an oe-selftest test.
+        """
+        machine = get_bb_var('MACHINE')
+        if not machine.startswith('qemu'):
+            self.skipTest('This test only works with qemu machines')
+        if not os.path.exists('/etc/runqemu-nosudo'):
+            self.skipTest('You must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
+        result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ip tuntap show', ignore_status=True)
+        if result.status != 0:
+            result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ifconfig -a', ignore_status=True)
+            if result.status != 0:
+                self.skipTest('Failed to determine if tap devices exist with ifconfig or ip: %s' % result.output)
+        for line in result.output.splitlines():
+            if line.startswith('tap'):
+                break
+        else:
+            self.skipTest('No tap devices found - you must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
+
     def _test_devtool_add_git_url(self, git_url, version, pn, resulting_src_uri):
         self.track_for_cleanup(self.workspacedir)
         self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
@@ -1616,28 +1641,7 @@
 
     @OETestTag("runqemu")
     def test_devtool_deploy_target(self):
-        # NOTE: Whilst this test would seemingly be better placed as a runtime test,
-        # unfortunately the runtime tests run under bitbake and you can't run
-        # devtool within bitbake (since devtool needs to run bitbake itself).
-        # Additionally we are testing build-time functionality as well, so
-        # really this has to be done as an oe-selftest test.
-        #
-        # Check preconditions
-        machine = get_bb_var('MACHINE')
-        if not machine.startswith('qemu'):
-            self.skipTest('This test only works with qemu machines')
-        if not os.path.exists('/etc/runqemu-nosudo'):
-            self.skipTest('You must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
-        result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ip tuntap show', ignore_status=True)
-        if result.status != 0:
-            result = runCmd('PATH="$PATH:/sbin:/usr/sbin" ifconfig -a', ignore_status=True)
-            if result.status != 0:
-                self.skipTest('Failed to determine if tap devices exist with ifconfig or ip: %s' % result.output)
-        for line in result.output.splitlines():
-            if line.startswith('tap'):
-                break
-        else:
-            self.skipTest('No tap devices found - you must set up tap devices with scripts/runqemu-gen-tapdevs before running this test')
+        self._check_runqemu_prerequisites()
         self.assertTrue(not os.path.exists(self.workspacedir), 'This test cannot be run with a workspace directory under the build directory')
         # Definitions
         testrecipe = 'mdadm'
diff --git a/poky/meta/lib/oeqa/selftest/cases/meta_ide.py b/poky/meta/lib/oeqa/selftest/cases/meta_ide.py
index 59270fb..e446d93 100644
--- a/poky/meta/lib/oeqa/selftest/cases/meta_ide.py
+++ b/poky/meta/lib/oeqa/selftest/cases/meta_ide.py
@@ -44,7 +44,7 @@
     def test_meta_ide_can_build_cpio_project(self):
         dl_dir = self.td.get('DL_DIR', None)
         self.project = SDKBuildProject(self.tmpdir_metaideQA + "/cpio/", self.environment_script_path,
-                        "https://ftp.gnu.org/gnu/cpio/cpio-2.13.tar.gz",
+                        "https://ftp.gnu.org/gnu/cpio/cpio-2.14.tar.gz",
                         self.tmpdir_metaideQA, self.td['DATETIME'], dl_dir=dl_dir)
         self.project.download_archive()
         self.assertEqual(self.project.run_configure('$CONFIGURE_FLAGS --disable-maintainer-mode','sed -i -e "/char \*program_name/d" src/global.c;'), 0,
diff --git a/poky/meta/lib/oeqa/selftest/cases/oescripts.py b/poky/meta/lib/oeqa/selftest/cases/oescripts.py
index 7d3a00e..f69efcc 100644
--- a/poky/meta/lib/oeqa/selftest/cases/oescripts.py
+++ b/poky/meta/lib/oeqa/selftest/cases/oescripts.py
@@ -36,18 +36,16 @@
         if expected_endlines:
             self.fail('Missing expected line endings:\n  %s' % '\n  '.join(expected_endlines))
 
-class OEScriptTests(OESelftestTestCase):
-    scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
-
 @unittest.skipUnless(importlib.util.find_spec("cairo"), "Python cairo module is not present")
-class OEPybootchartguyTests(OEScriptTests):
+class OEPybootchartguyTests(OESelftestTestCase):
 
     @classmethod
     def setUpClass(cls):
-        super(OEScriptTests, cls).setUpClass()
+        super().setUpClass()
         bitbake("core-image-minimal -c rootfs -f")
         cls.tmpdir = get_bb_var('TMPDIR')
         cls.buildstats = cls.tmpdir + "/buildstats/" + sorted(os.listdir(cls.tmpdir + "/buildstats"))[-1]
+        cls.scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
 
     def test_pybootchartguy_help(self):
         runCmd('%s/pybootchartgui/pybootchartgui.py  --help' % self.scripts_dir)
@@ -65,7 +63,12 @@
         self.assertTrue(os.path.exists(self.tmpdir + "/charts.pdf"))
 
 
-class OEGitproxyTests(OEScriptTests):
+class OEGitproxyTests(OESelftestTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
 
     def test_oegitproxy_help(self):
         try:
@@ -126,7 +129,13 @@
         result = runCmd("oe-run-native qemu-helper-native qemu-oe-bridge-helper --help")
         self.assertIn("Helper function to find and exec qemu-bridge-helper", result.output)
 
-class OEListPackageconfigTests(OEScriptTests):
+class OEListPackageconfigTests(OESelftestTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.scripts_dir = os.path.join(get_bb_var('COREBASE'), 'scripts')
+
     #oe-core.scripts.List_all_the_PACKAGECONFIG's_flags
     def check_endlines(self, results,  expected_endlines): 
         for line in results.output.splitlines():
diff --git a/poky/meta/lib/oeqa/selftest/cases/reproducible.py b/poky/meta/lib/oeqa/selftest/cases/reproducible.py
index 4c6ed4e..84c6c3a 100644
--- a/poky/meta/lib/oeqa/selftest/cases/reproducible.py
+++ b/poky/meta/lib/oeqa/selftest/cases/reproducible.py
@@ -128,23 +128,17 @@
 class ReproducibleTests(OESelftestTestCase):
     # Test the reproducibility of whatever is built between sstate_targets and targets
 
-    package_classes = get_bb_var("OEQA_REPRODUCIBLE_TEST_PACKAGE")
-    if package_classes:
-        package_classes = package_classes.split()
-    else:
-        package_classes = ['deb', 'ipk', 'rpm']
+    package_classes = ['deb', 'ipk', 'rpm']
 
     # Maximum report size, in bytes
     max_report_size = 250 * 1024 * 1024
 
     # targets are the things we want to test the reproducibility of
-    targets = get_bb_var("OEQA_REPRODUCIBLE_TEST_TARGET")
-    if targets:
-        targets = targets.split()
-    else:
-        targets = ['core-image-minimal', 'core-image-sato', 'core-image-full-cmdline', 'core-image-weston', 'world']
+    targets = ['core-image-minimal', 'core-image-sato', 'core-image-full-cmdline', 'core-image-weston', 'world']
+
     # sstate targets are things to pull from sstate to potentially cut build/debugging time
-    sstate_targets = (get_bb_var("OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS") or "").split()
+    sstate_targets = []
+
     save_results = False
     if 'OEQA_DEBUGGING_SAVED_OUTPUT' in os.environ:
         save_results = os.environ['OEQA_DEBUGGING_SAVED_OUTPUT']
@@ -159,11 +153,20 @@
 
     def setUpLocal(self):
         super().setUpLocal()
-        needed_vars = ['TOPDIR', 'TARGET_PREFIX', 'BB_NUMBER_THREADS', 'BB_HASHSERVE']
+        needed_vars = ['TOPDIR', 'TARGET_PREFIX', 'BB_NUMBER_THREADS', 'BB_HASHSERVE', 'OEQA_REPRODUCIBLE_TEST_PACKAGE', 'OEQA_REPRODUCIBLE_TEST_TARGET', 'OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS']
         bb_vars = get_bb_vars(needed_vars)
         for v in needed_vars:
             setattr(self, v.lower(), bb_vars[v])
 
+        if bb_vars['OEQA_REPRODUCIBLE_TEST_PACKAGE']:
+            self.package_classes = bb_vars['OEQA_REPRODUCIBLE_TEST_PACKAGE'].split()
+
+        if bb_vars['OEQA_REPRODUCIBLE_TEST_TARGET']:
+            self.targets = bb_vars['OEQA_REPRODUCIBLE_TEST_TARGET'].split()
+
+        if bb_vars['OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS']:
+            self.sstate_targets = bb_vars['OEQA_REPRODUCIBLE_TEST_SSTATE_TARGETS'].split()
+
         self.extraresults = {}
         self.extraresults.setdefault('reproducible.rawlogs', {})['log'] = ''
         self.extraresults.setdefault('reproducible', {}).setdefault('files', {})
diff --git a/poky/meta/lib/oeqa/selftest/cases/runtime_test.py b/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
index 463679d..12000aa 100644
--- a/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
+++ b/poky/meta/lib/oeqa/selftest/cases/runtime_test.py
@@ -129,6 +129,22 @@
         bitbake('core-image-full-cmdline socat')
         bitbake('-c testimage core-image-full-cmdline')
 
+    def test_testimage_slirp(self):
+        """
+        Summary: Check basic testimage functionality with qemu and slirp networking.
+        """
+
+        features = '''
+IMAGE_CLASSES:append = " testimage"
+IMAGE_FEATURES:append = " ssh-server-dropbear"
+IMAGE_ROOTFS_EXTRA_SPACE:append = "${@bb.utils.contains("IMAGE_CLASSES", "testimage", " + 5120", "", d)}"
+TEST_RUNQEMUPARAMS += " slirp"
+'''
+        self.write_config(features)
+
+        bitbake('core-image-minimal')
+        bitbake('-c testimage core-image-minimal')
+
     def test_testimage_dnf(self):
         """
         Summary: Check package feeds functionality for dnf
@@ -236,11 +252,11 @@
         features += 'TEST_SUITES = "ping ssh virgl"\n'
         features += 'IMAGE_FEATURES:append = " ssh-server-dropbear"\n'
         features += 'IMAGE_INSTALL:append = " kmscube"\n'
-        features_gtk = features + 'TEST_RUNQEMUPARAMS = "gtk gl"\n'
+        features_gtk = features + 'TEST_RUNQEMUPARAMS += " gtk gl"\n'
         self.write_config(features_gtk)
         bitbake('core-image-minimal')
         bitbake('-c testimage core-image-minimal')
-        features_sdl = features + 'TEST_RUNQEMUPARAMS = "sdl gl"\n'
+        features_sdl = features + 'TEST_RUNQEMUPARAMS += " sdl gl"\n'
         self.write_config(features_sdl)
         bitbake('core-image-minimal')
         bitbake('-c testimage core-image-minimal')
@@ -268,7 +284,7 @@
         features += 'TEST_SUITES = "ping ssh virgl"\n'
         features += 'IMAGE_FEATURES:append = " ssh-server-dropbear"\n'
         features += 'IMAGE_INSTALL:append = " kmscube"\n'
-        features += 'TEST_RUNQEMUPARAMS = "egl-headless"\n'
+        features += 'TEST_RUNQEMUPARAMS += " egl-headless"\n'
         self.write_config(features)
         bitbake('core-image-minimal')
         bitbake('-c testimage core-image-minimal')
diff --git a/poky/meta/lib/oeqa/selftest/cases/spdx.py b/poky/meta/lib/oeqa/selftest/cases/spdx.py
new file mode 100644
index 0000000..05fc4e3
--- /dev/null
+++ b/poky/meta/lib/oeqa/selftest/cases/spdx.py
@@ -0,0 +1,54 @@
+#
+# Copyright OpenEmbedded Contributors
+#
+# SPDX-License-Identifier: MIT
+#
+
+import json
+import os
+from oeqa.selftest.case import OESelftestTestCase
+from oeqa.utils.commands import bitbake, get_bb_var, runCmd
+
+class SPDXCheck(OESelftestTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        super(SPDXCheck, cls).setUpClass()
+        bitbake("python3-spdx-tools-native")
+        bitbake("-c addto_recipe_sysroot python3-spdx-tools-native")
+
+    def check_recipe_spdx(self, high_level_dir, spdx_file, target_name):
+        config = """
+INHERIT += "create-spdx"
+"""
+        self.write_config(config)
+
+        deploy_dir = get_bb_var("DEPLOY_DIR")
+        machine_var = get_bb_var("MACHINE")
+        # qemux86-64 creates the directory qemux86_64
+        machine_dir = machine_var.replace("-", "_")
+
+        full_file_path = os.path.join(deploy_dir, "spdx", machine_dir, high_level_dir, spdx_file)
+
+        try:
+            os.remove(full_file_path)
+        except FileNotFoundError:
+            pass
+
+        bitbake("%s -c create_spdx" % target_name)
+
+        def check_spdx_json(filename):
+            with open(filename) as f:
+                report = json.load(f)
+                self.assertNotEqual(report, None)
+                self.assertNotEqual(report["SPDXID"], None)
+
+            python = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-spdx-tools-native'), 'nativepython3')
+            validator = os.path.join(get_bb_var('STAGING_BINDIR', 'python3-spdx-tools-native'), 'pyspdxtools')
+            result = runCmd("{} {} -i {}".format(python, validator, filename))
+
+        self.assertExists(full_file_path)
+        result = check_spdx_json(full_file_path)
+
+    def test_spdx_base_files(self):
+        self.check_recipe_spdx("packages", "base-files.spdx.json", "base-files")
diff --git a/poky/meta/lib/oeqa/selftest/cases/wic.py b/poky/meta/lib/oeqa/selftest/cases/wic.py
index aa61349..b4866bc 100644
--- a/poky/meta/lib/oeqa/selftest/cases/wic.py
+++ b/poky/meta/lib/oeqa/selftest/cases/wic.py
@@ -729,7 +729,7 @@
         wicout = glob(os.path.join(self.resultdir, "wictestdisk-*.direct"))
         self.assertEqual(1, len(wicout))
         size = os.path.getsize(wicout[0])
-        self.assertTrue(size > extraspace)
+        self.assertTrue(size > extraspace, msg="Extra space not present (%s vs %s)" % (size, extraspace))
 
     def test_no_table(self):
         """Test --no-table wks option."""
@@ -773,7 +773,7 @@
         basename = bb_vars['IMAGE_BASENAME']
         self.assertEqual(basename, image)
         path = os.path.join(imgdatadir, basename) + '.env'
-        self.assertTrue(os.path.isfile(path))
+        self.assertTrue(os.path.isfile(path), msg="File %s wasn't generated as expected" % path)
 
         wicvars = set(bb_vars['WICVARS'].split())
         # filter out optional variables
@@ -786,7 +786,7 @@
             # test if variables used by wic present in the .env file
             for var in wicvars:
                 self.assertTrue(var in content, "%s is not in .env file" % var)
-                self.assertTrue(content[var])
+                self.assertTrue(content[var], "%s doesn't have a value (%s)" % (var, content[var]))
 
     def test_image_vars_dir_short(self):
         """Test image vars directory selection -v option"""
@@ -833,8 +833,8 @@
         # pointing to existing files
         for suffix in ('wic', 'manifest'):
             path = prefix + suffix
-            self.assertTrue(os.path.islink(path))
-            self.assertTrue(os.path.isfile(os.path.realpath(path)))
+            self.assertTrue(os.path.islink(path), msg="Link %s wasn't generated as expected" % path)
+            self.assertTrue(os.path.isfile(os.path.realpath(path)), msg="File linked to by %s wasn't generated as expected" % path)
 
     # TODO this should work on aarch64
     @skipIfNotArch(['i586', 'i686', 'x86_64'])
@@ -1104,7 +1104,7 @@
         self.remove_config(config)
         bb_vars = get_bb_vars(['DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], image)
         image_path = os.path.join(bb_vars['DEPLOY_DIR_IMAGE'], '%s.wic' % bb_vars['IMAGE_LINK_NAME'])
-        self.assertTrue(os.path.exists(image_path))
+        self.assertTrue(os.path.exists(image_path), msg="Image file %s wasn't generated as expected" % image_path)
 
         sysroot = get_bb_var('RECIPE_SYSROOT_NATIVE', 'wic-tools')
 
@@ -1345,11 +1345,11 @@
             orig_sizes = [int(line.split()[3]) for line in orig.output.split('\n')[1:]]
             exp_sizes = [int(line.split()[3]) for line in exp.output.split('\n')[1:]]
             self.assertEqual(orig_sizes[0], exp_sizes[0]) # first partition is not resized
-            self.assertTrue(orig_sizes[1] < exp_sizes[1])
+            self.assertTrue(orig_sizes[1] < exp_sizes[1], msg="Parition size wasn't enlarged (%s vs %s)" % (orig_sizes[1], exp_sizes[1]))
 
             # Check if all free space is partitioned
             result = runCmd("%s/usr/sbin/sfdisk -F %s" % (sysroot, new_image_path))
-            self.assertTrue("0 B, 0 bytes, 0 sectors" in result.output)
+            self.assertIn("0 B, 0 bytes, 0 sectors", result.output)
 
             os.rename(image_path, image_path + '.bak')
             os.rename(new_image_path, image_path)
@@ -1433,7 +1433,7 @@
             # check if file is there
             result = runCmd("wic ls %s:1/ -n %s" % (images[0], sysroot))
             self.assertEqual(7, len(result.output.split('\n')))
-            self.assertTrue(os.path.basename(testfile.name) in result.output)
+            self.assertIn(os.path.basename(testfile.name), result.output)
 
             # prepare directory
             testdir = os.path.join(self.resultdir, 'wic-test-cp-dir')
@@ -1447,13 +1447,13 @@
             # check if directory is there
             result = runCmd("wic ls %s:1/ -n %s" % (images[0], sysroot))
             self.assertEqual(8, len(result.output.split('\n')))
-            self.assertTrue(os.path.basename(testdir) in result.output)
+            self.assertIn(os.path.basename(testdir), result.output)
 
             # copy the file from the partition and check if it success
             dest = '%s-cp' % testfile.name
             runCmd("wic cp %s:1/%s %s -n %s" % (images[0],
                     os.path.basename(testfile.name), dest, sysroot))
-            self.assertTrue(os.path.exists(dest))
+            self.assertTrue(os.path.exists(dest), msg="File %s wasn't generated as expected" % dest)
 
 
     def test_wic_rm(self):
@@ -1497,7 +1497,7 @@
         # list directory content of the second ext4 partition
         result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
         self.assertTrue(set(['bin', 'home', 'proc', 'usr', 'var', 'dev', 'lib', 'sbin']).issubset(
-                            set(line.split()[-1] for line in result.output.split('\n') if line)))
+                            set(line.split()[-1] for line in result.output.split('\n') if line)), msg="Expected directories not present %s" % result.output)
 
     def test_wic_cp_ext(self):
         """Test copy files and directories to the ext partition."""
@@ -1512,7 +1512,7 @@
         # list directory content of the ext4 partition
         result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
         dirs = set(line.split()[-1] for line in result.output.split('\n') if line)
-        self.assertTrue(set(['bin', 'home', 'proc', 'usr', 'var', 'dev', 'lib', 'sbin']).issubset(dirs))
+        self.assertTrue(set(['bin', 'home', 'proc', 'usr', 'var', 'dev', 'lib', 'sbin']).issubset(dirs), msg="Expected directories not present %s" % dirs)
 
         with NamedTemporaryFile("w", suffix=".wic-cp") as testfile:
             testfile.write("test")
@@ -1527,12 +1527,12 @@
 
             # check if the file to copy is in the partition
             result = runCmd("wic ls %s:2/etc/ -n %s" % (images[0], sysroot))
-            self.assertTrue('fstab' in [line.split()[-1] for line in result.output.split('\n') if line])
+            self.assertIn('fstab', [line.split()[-1] for line in result.output.split('\n') if line])
 
             # copy file from the partition, replace the temporary file content with it and
             # check for the file size to validate the copy
             runCmd("wic cp %s:2/etc/fstab %s -n %s" % (images[0], testfile.name, sysroot))
-            self.assertTrue(os.stat(testfile.name).st_size > 0)
+            self.assertTrue(os.stat(testfile.name).st_size > 0, msg="Filesize not as expected %s" % os.stat(testfile.name).st_size)
 
 
     def test_wic_rm_ext(self):
@@ -1547,18 +1547,18 @@
 
         # list directory content of the /etc directory on ext4 partition
         result = runCmd("wic ls %s:2/etc/ -n %s" % (images[0], sysroot))
-        self.assertTrue('fstab' in [line.split()[-1] for line in result.output.split('\n') if line])
+        self.assertIn('fstab', [line.split()[-1] for line in result.output.split('\n') if line])
 
         # remove file
         runCmd("wic rm %s:2/etc/fstab -n %s" % (images[0], sysroot))
 
         # check if it's removed
         result = runCmd("wic ls %s:2/etc/ -n %s" % (images[0], sysroot))
-        self.assertTrue('fstab' not in [line.split()[-1] for line in result.output.split('\n') if line])
+        self.assertNotIn('fstab', [line.split()[-1] for line in result.output.split('\n') if line])
 
         # remove non-empty directory
         runCmd("wic rm -r %s:2/etc/ -n %s" % (images[0], sysroot))
 
         # check if it's removed
         result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
-        self.assertTrue('etc' not in [line.split()[-1] for line in result.output.split('\n') if line])
+        self.assertNotIn('etc', [line.split()[-1] for line in result.output.split('\n') if line])
diff --git a/poky/meta/lib/oeqa/selftest/context.py b/poky/meta/lib/oeqa/selftest/context.py
index bd03e76..5a09aee 100644
--- a/poky/meta/lib/oeqa/selftest/context.py
+++ b/poky/meta/lib/oeqa/selftest/context.py
@@ -35,12 +35,13 @@
     return result
 
 class NonConcurrentTestSuite(unittest.TestSuite):
-    def __init__(self, suite, processes, setupfunc, removefunc):
+    def __init__(self, suite, processes, setupfunc, removefunc, bb_vars):
         super().__init__([suite])
         self.processes = processes
         self.suite = suite
         self.setupfunc = setupfunc
         self.removefunc = removefunc
+        self.bb_vars = bb_vars
 
     def run(self, result):
         (builddir, newbuilddir) = self.setupfunc("-st", None, self.suite)
@@ -79,16 +80,15 @@
         else:
             self.removebuilddir = removebuilddir
 
+    def set_variables(self, vars):
+        self.bb_vars = vars
+
     def setup_builddir(self, suffix, selftestdir, suite):
-        # Get SSTATE_DIR from the parent build dir
-        with bb.tinfoil.Tinfoil(tracking=True) as tinfoil:
-            tinfoil.prepare(quiet=2, config_only=True)
-            d = tinfoil.config_data
-            sstatedir = str(d.getVar('SSTATE_DIR'))
+        sstatedir = self.bb_vars['SSTATE_DIR']
 
         builddir = os.environ['BUILDDIR']
         if not selftestdir:
-            selftestdir = get_test_layer()
+            selftestdir = get_test_layer(self.bb_vars['BBLAYERS'])
         if self.newbuilddir:
             newbuilddir = os.path.join(self.newbuilddir, 'build' + suffix)
         else:
@@ -104,7 +104,7 @@
         oe.path.copytree(builddir + "/cache", newbuilddir + "/cache")
         oe.path.copytree(selftestdir, newselftestdir)
 
-        subprocess.check_output("git init; git add *; git commit -a -m 'initial'", cwd=newselftestdir, shell=True)
+        subprocess.check_output("git init && git add * && git commit -a -m 'initial'", cwd=newselftestdir, shell=True)
 
         # Tried to used bitbake-layers add/remove but it requires recipe parsing and hence is too slow
         subprocess.check_output("sed %s/conf/bblayers.conf -i -e 's#%s#%s#g'" % (newbuilddir, selftestdir, newselftestdir), cwd=newbuilddir, shell=True)
@@ -155,9 +155,9 @@
         if processes:
             from oeqa.core.utils.concurrencytest import ConcurrentTestSuite
 
-            return ConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir)
+            return ConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir, self.bb_vars)
         else:
-            return NonConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir)
+            return NonConcurrentTestSuite(suites, processes, self.setup_builddir, self.removebuilddir, self.bb_vars)
 
     def runTests(self, processes=None, machine=None, skips=[]):
         if machine:
@@ -270,7 +270,7 @@
 
         builddir = os.environ.get("BUILDDIR")
         self.tc_kwargs['init']['config_paths'] = {}
-        self.tc_kwargs['init']['config_paths']['testlayer_path'] = get_test_layer()
+        self.tc_kwargs['init']['config_paths']['testlayer_path'] = get_test_layer(bbvars["BBLAYERS"])
         self.tc_kwargs['init']['config_paths']['builddir'] = builddir
         self.tc_kwargs['init']['config_paths']['localconf'] = os.path.join(builddir, "conf/local.conf")
         self.tc_kwargs['init']['config_paths']['bblayers'] = os.path.join(builddir, "conf/bblayers.conf")
@@ -310,10 +310,10 @@
                 meta_selftestdir = os.path.join(
                     self.tc.td["BBLAYERS_FETCH_DIR"], 'meta-selftest')
                 if os.path.isdir(meta_selftestdir):
-                    runCmd("bitbake-layers add-layer %s" %meta_selftestdir)
+                    runCmd("bitbake-layers add-layer %s" % meta_selftestdir)
                     # reload data is needed because a meta-selftest layer was add
                     self.tc.td = get_bb_vars()
-                    self.tc.config_paths['testlayer_path'] = get_test_layer()
+                    self.tc.config_paths['testlayer_path'] = get_test_layer(self.tc.td["BBLAYERS"])
                 else:
                     self.tc.logger.error("could not locate meta-selftest in:\n%s" % meta_selftestdir)
                     raise OEQAPreRun
@@ -351,8 +351,15 @@
 
         _add_layer_libs()
 
-        self.tc.logger.info("Running bitbake -e to test the configuration is valid/parsable")
-        runCmd("bitbake -e")
+        self.tc.logger.info("Checking base configuration is valid/parsable")
+
+        with bb.tinfoil.Tinfoil(tracking=True) as tinfoil:
+            tinfoil.prepare(quiet=2, config_only=True)
+            d = tinfoil.config_data
+            vars = {}
+            vars['SSTATE_DIR'] = str(d.getVar('SSTATE_DIR'))
+            vars['BBLAYERS'] = str(d.getVar('BBLAYERS'))
+        self.tc.set_variables(vars)
 
     def get_json_result_dir(self, args):
         json_result_dir = os.path.join(self.tc.td["LOG_DIR"], 'oeqa')
@@ -437,7 +444,7 @@
             output_link = os.path.join(os.path.dirname(args.output_log),
                     "%s-results.log" % self.name)
             if os.path.lexists(output_link):
-                os.remove(output_link)
+                os.unlink(output_link)
             os.symlink(args.output_log, output_link)
 
         return rc
diff --git a/poky/meta/lib/oeqa/utils/commands.py b/poky/meta/lib/oeqa/utils/commands.py
index c1f5338..575e380 100644
--- a/poky/meta/lib/oeqa/utils/commands.py
+++ b/poky/meta/lib/oeqa/utils/commands.py
@@ -285,8 +285,10 @@
 def get_bb_var(var, target=None, postconfig=None):
     return get_bb_vars([var], target, postconfig)[var]
 
-def get_test_layer():
-    layers = get_bb_var("BBLAYERS").split()
+def get_test_layer(bblayers=None):
+    if bblayers is None:
+        bblayers = get_bb_var("BBLAYERS")
+    layers = bblayers.split()
     testlayer = None
     for l in layers:
         if '~' in l:
diff --git a/poky/meta/lib/oeqa/utils/gitarchive.py b/poky/meta/lib/oeqa/utils/gitarchive.py
index 64448f4..f9c1526 100644
--- a/poky/meta/lib/oeqa/utils/gitarchive.py
+++ b/poky/meta/lib/oeqa/utils/gitarchive.py
@@ -255,7 +255,15 @@
         if not commit in revs:
             revs[commit] = TestedRev(commit, commit_num, [tag])
         else:
-            assert commit_num == revs[commit].commit_number, "Commit numbers do not match"
+            if commit_num != revs[commit].commit_number:
+                # Historically we have incorrect commit counts of '1' in the repo so fix these up
+                if int(revs[commit].commit_number) < 5:
+                    tags = revs[commit].tags
+                    revs[commit] = TestedRev(commit, commit_num, [tags])
+                elif int(commit_num) < 5:
+                    pass
+                else:
+                    sys.exit("Commit numbers for commit %s don't match (%s vs %s)" % (commit, commit_num, revs[commit].commit_number))
             revs[commit].tags.append(tag)
 
     # Return in sorted table